summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty Brandenberg <monty@lindenlab.com>2012-09-08 18:56:43 -0400
committerMonty Brandenberg <monty@lindenlab.com>2012-09-08 18:56:43 -0400
commit4091e47cf206a41cac7ee440b8fd2e2898006685 (patch)
tree61de24d7aa90171a5fb6481189567fe408d03786
parent81b9e29a1fe227c8f51c6a644b4e2e1afa6bcfb2 (diff)
parent09cd2a4b1a9f1ddf046fb0ce5d12988b968269a3 (diff)
DRTVWR-209 Merge of viewer-development with SH-3316 drano-http code.
cmake and other files didn't get moved over, do it by hand.
-rw-r--r--.hgignore2
-rwxr-xr-x[-rw-r--r--].hgtags354
-rw-r--r--autobuild.xml72
-rw-r--r--doc/contributions.txt14
-rw-r--r--etc/message.xml8
-rw-r--r--indra/lib/python/indra/util/llmanifest.py7
-rw-r--r--indra/llcharacter/llhandmotion.cpp60
-rw-r--r--indra/llcommon/CMakeLists.txt1
-rw-r--r--indra/llcommon/llhandle.h (renamed from indra/llui/llhandle.h)58
-rw-r--r--indra/llcommon/llstat.cpp19
-rw-r--r--indra/llcommon/llstat.h6
-rw-r--r--indra/llimage/llimage.cpp9
-rw-r--r--indra/llimage/llimage.h2
-rwxr-xr-x[-rw-r--r--]indra/llimage/llimagej2c.cpp0
-rw-r--r--indra/llinventory/llparcel.cpp67
-rw-r--r--indra/llinventory/llparcel.h7
-rw-r--r--indra/llkdu/llimagej2ckdu.cpp4
-rw-r--r--indra/llkdu/llimagej2ckdu.h1
-rw-r--r--indra/llkdu/llkdumem.h1
-rwxr-xr-x[-rw-r--r--]indra/llkdu/tests/llimagej2ckdu_test.cpp19
-rw-r--r--indra/llmessage/llavatarnamecache.cpp34
-rw-r--r--indra/llmessage/llavatarnamecache.h3
-rw-r--r--indra/llmessage/llcurl.cpp218
-rw-r--r--indra/llmessage/llcurl.h65
-rwxr-xr-x[-rw-r--r--]indra/llprimitive/llprimitive.cpp31
-rw-r--r--indra/llprimitive/llprimitive.h7
-rw-r--r--indra/llrender/llglheaders.h5
-rwxr-xr-x[-rw-r--r--]indra/llrender/llimagegl.cpp17
-rwxr-xr-x[-rw-r--r--]indra/llrender/llimagegl.h2
-rw-r--r--indra/llui/CMakeLists.txt1
-rw-r--r--indra/llui/llfloater.cpp4
-rw-r--r--indra/llui/lltoggleablemenu.cpp4
-rw-r--r--indra/llui/tests/llurlentry_stub.cpp5
-rw-r--r--indra/llvfs/lldir.h2
-rw-r--r--indra/llvfs/lldir_mac.cpp2
-rw-r--r--indra/llvfs/lldir_mac.h2
-rw-r--r--indra/llwindow/llwindowmacosx.cpp90
-rw-r--r--indra/llwindow/llwindowsdl.cpp6
-rwxr-xr-x[-rw-r--r--]indra/newview/CMakeLists.txt12
-rw-r--r--indra/newview/app_settings/cmd_line.xml2
-rwxr-xr-x[-rw-r--r--]indra/newview/app_settings/settings.xml92
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/treeF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/waterF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl2
-rw-r--r--indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tifbin0 -> 504 bytes
-rw-r--r--indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tifbin0 -> 556 bytes
-rw-r--r--indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tifbin0 -> 570 bytes
-rw-r--r--indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tifbin0 -> 532 bytes
-rw-r--r--indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tifbin0 -> 550 bytes
-rw-r--r--indra/newview/llappviewer.cpp34
-rw-r--r--indra/newview/llface.cpp17
-rw-r--r--indra/newview/llface.h1
-rw-r--r--indra/newview/llflexibleobject.cpp1
-rw-r--r--indra/newview/llfloaterpathfindingcharacters.cpp52
-rw-r--r--indra/newview/llfloaterpathfindingcharacters.h6
-rw-r--r--indra/newview/llfloaterpathfindinglinksets.cpp161
-rw-r--r--indra/newview/llfloaterpathfindinglinksets.h7
-rw-r--r--indra/newview/llfloaterpathfindingobjects.cpp132
-rw-r--r--indra/newview/llfloaterpathfindingobjects.h17
-rw-r--r--indra/newview/llfloatertexturefetchdebugger.cpp158
-rw-r--r--indra/newview/llfloatertexturefetchdebugger.h5
-rw-r--r--indra/newview/llfloatertools.cpp1
-rw-r--r--indra/newview/llfolderview.cpp34
-rw-r--r--indra/newview/llfolderview.h2
-rw-r--r--indra/newview/llfolderviewitem.cpp4
-rw-r--r--indra/newview/llfolderviewitem.h1
-rw-r--r--indra/newview/llinventorybridge.cpp34
-rw-r--r--indra/newview/llinventorybridge.h3
-rw-r--r--indra/newview/llmachineid.cpp18
-rw-r--r--indra/newview/llmutelist.cpp25
-rw-r--r--indra/newview/llpanellogin.cpp72
-rw-r--r--indra/newview/llpathfindinglinkset.cpp21
-rw-r--r--indra/newview/llpathfindinglinkset.h6
-rw-r--r--indra/newview/llpathfindinglinksetlist.cpp14
-rw-r--r--indra/newview/llpathfindinglinksetlist.h1
-rw-r--r--indra/newview/llpathfindingobject.cpp45
-rw-r--r--indra/newview/llpathfindingobject.h28
-rw-r--r--indra/newview/llpathfindingobjectlist.cpp10
-rw-r--r--indra/newview/llpathfindingobjectlist.h3
-rwxr-xr-x[-rw-r--r--]indra/newview/llstartup.cpp75
-rwxr-xr-x[-rw-r--r--]indra/newview/llstartup.h2
-rw-r--r--indra/newview/llstatusbar.cpp2
-rw-r--r--indra/newview/lltexturecache.cpp188
-rw-r--r--indra/newview/lltexturecache.h17
-rw-r--r--[-rwxr-xr-x]indra/newview/lltexturefetch.cpp449
-rw-r--r--indra/newview/lltexturefetch.h82
-rwxr-xr-x[-rw-r--r--]indra/newview/lltextureview.cpp2
-rw-r--r--indra/newview/lltoastnotifypanel.cpp16
-rw-r--r--indra/newview/llviewerobject.cpp18
-rw-r--r--indra/newview/llviewerobject.h7
-rw-r--r--indra/newview/llviewerparcelmgr.cpp67
-rw-r--r--indra/newview/llviewerparcelmgr.h5
-rw-r--r--indra/newview/llviewerregion.cpp1
-rwxr-xr-x[-rw-r--r--]indra/newview/llviewerstats.cpp9
-rw-r--r--indra/newview/llviewertexture.cpp101
-rwxr-xr-x[-rw-r--r--]indra/newview/llviewertexture.h7
-rw-r--r--indra/newview/llviewertexturelist.cpp179
-rw-r--r--indra/newview/llviewertexturelist.h3
-rwxr-xr-xindra/newview/llviewerwindow.cpp8
-rwxr-xr-x[-rw-r--r--]indra/newview/llvoavatar.cpp4
-rwxr-xr-x[-rw-r--r--]indra/newview/llvoavatarself.cpp46
-rw-r--r--indra/newview/llvovolume.cpp16
-rw-r--r--indra/newview/llvovolume.h1
-rw-r--r--indra/newview/pipeline.cpp40
-rw-r--r--indra/newview/pipeline.h3
-rw-r--r--indra/newview/res-sdl/lltoolpathfinding.BMPbin0 -> 3126 bytes
-rw-r--r--indra/newview/res-sdl/lltoolpathfindingpathend.BMPbin0 -> 3126 bytes
-rw-r--r--indra/newview/res-sdl/lltoolpathfindingpathendadd.BMPbin0 -> 3126 bytes
-rw-r--r--indra/newview/res-sdl/lltoolpathfindingpathstart.BMPbin0 -> 3126 bytes
-rw-r--r--indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMPbin0 -> 3126 bytes
-rw-r--r--indra/newview/skins/default/xui/da/notifications.xml1
-rw-r--r--indra/newview/skins/default/xui/da/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/de/floater_about.xml19
-rw-r--r--indra/newview/skins/default/xui/de/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_animation_preview.xml188
-rw-r--r--indra/newview/skins/default/xui/de/floater_autoreplace.xml32
-rw-r--r--indra/newview/skins/default/xui/de/floater_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/de/floater_model_preview.xml35
-rw-r--r--indra/newview/skins/default/xui/de/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_pathfinding_characters.xml57
-rw-r--r--indra/newview/skins/default/xui/de/floater_pathfinding_console.xml121
-rw-r--r--indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml154
-rw-r--r--indra/newview/skins/default/xui/de/floater_postcard.xml36
-rw-r--r--indra/newview/skins/default/xui/de/floater_spellcheck.xml18
-rw-r--r--indra/newview/skins/default/xui/de/floater_spellcheck_import.xml6
-rw-r--r--indra/newview/skins/default/xui/de/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/de/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/de/floater_tools.xml13
-rw-r--r--indra/newview/skins/default/xui/de/floater_top_objects.xml14
-rw-r--r--indra/newview/skins/default/xui/de/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/de/menu_mode_change.xml5
-rw-r--r--indra/newview/skins/default/xui/de/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_text_editor.xml7
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml9
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml287
-rw-r--r--indra/newview/skins/default/xui/de/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_invite.xml3
-rw-r--r--indra/newview/skins/default/xui/de/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/de/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_texture.xml57
-rw-r--r--indra/newview/skins/default/xui/de/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/de/panel_volume_pulldown.xml15
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_item_info.xml3
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_task_info.xml9
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml30
-rw-r--r--indra/newview/skins/default/xui/de/teleport_strings.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml34
-rw-r--r--indra/newview/skins/default/xui/en/floater_texture_fetch_debugger.xml101
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory.xml8
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml97
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml179
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_volume_pulldown.xml318
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_about.xml19
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_animation_preview.xml187
-rw-r--r--indra/newview/skins/default/xui/es/floater_autoreplace.xml32
-rw-r--r--indra/newview/skins/default/xui/es/floater_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/es/floater_model_preview.xml35
-rw-r--r--indra/newview/skins/default/xui/es/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_pathfinding_characters.xml57
-rw-r--r--indra/newview/skins/default/xui/es/floater_pathfinding_console.xml121
-rw-r--r--indra/newview/skins/default/xui/es/floater_pathfinding_linksets.xml154
-rw-r--r--indra/newview/skins/default/xui/es/floater_postcard.xml37
-rw-r--r--indra/newview/skins/default/xui/es/floater_spellcheck.xml18
-rw-r--r--indra/newview/skins/default/xui/es/floater_spellcheck_import.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/es/floater_tools.xml13
-rw-r--r--indra/newview/skins/default/xui/es/floater_top_objects.xml10
-rw-r--r--indra/newview/skins/default/xui/es/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/es/menu_mode_change.xml5
-rw-r--r--indra/newview/skins/default/xui/es/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_text_editor.xml7
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml8
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml291
-rw-r--r--indra/newview/skins/default/xui/es/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_invite.xml3
-rw-r--r--indra/newview/skins/default/xui/es/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/es/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_texture.xml57
-rw-r--r--indra/newview/skins/default/xui/es/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/es/panel_volume_pulldown.xml14
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_item_info.xml3
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_task_info.xml9
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml30
-rw-r--r--indra/newview/skins/default/xui/es/teleport_strings.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about.xml21
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_animation_preview.xml189
-rw-r--r--indra/newview/skins/default/xui/fr/floater_autoreplace.xml32
-rw-r--r--indra/newview/skins/default/xui/fr/floater_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/floater_model_preview.xml35
-rw-r--r--indra/newview/skins/default/xui/fr/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_pathfinding_characters.xml57
-rw-r--r--indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml121
-rw-r--r--indra/newview/skins/default/xui/fr/floater_pathfinding_linksets.xml154
-rw-r--r--indra/newview/skins/default/xui/fr/floater_postcard.xml36
-rw-r--r--indra/newview/skins/default/xui/fr/floater_spellcheck.xml18
-rw-r--r--indra/newview/skins/default/xui/fr/floater_spellcheck_import.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tools.xml13
-rw-r--r--indra/newview/skins/default/xui/fr/floater_top_objects.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/fr/menu_mode_change.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_text_editor.xml7
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml9
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml287
-rw-r--r--indra/newview/skins/default/xui/fr/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/fr/panel_group_invite.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/fr/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_texture.xml72
-rw-r--r--indra/newview/skins/default/xui/fr/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/fr/sidepanel_item_info.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/sidepanel_task_info.xml9
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml30
-rw-r--r--indra/newview/skins/default/xui/fr/teleport_strings.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_about.xml19
-rw-r--r--indra/newview/skins/default/xui/it/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_animation_preview.xml187
-rw-r--r--indra/newview/skins/default/xui/it/floater_autoreplace.xml32
-rw-r--r--indra/newview/skins/default/xui/it/floater_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/it/floater_model_preview.xml35
-rw-r--r--indra/newview/skins/default/xui/it/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_pathfinding_characters.xml57
-rw-r--r--indra/newview/skins/default/xui/it/floater_pathfinding_console.xml121
-rw-r--r--indra/newview/skins/default/xui/it/floater_pathfinding_linksets.xml154
-rw-r--r--indra/newview/skins/default/xui/it/floater_postcard.xml40
-rw-r--r--indra/newview/skins/default/xui/it/floater_spellcheck.xml18
-rw-r--r--indra/newview/skins/default/xui/it/floater_spellcheck_import.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/it/floater_tools.xml13
-rw-r--r--indra/newview/skins/default/xui/it/floater_top_objects.xml10
-rw-r--r--indra/newview/skins/default/xui/it/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/it/menu_mode_change.xml5
-rw-r--r--indra/newview/skins/default/xui/it/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_text_editor.xml7
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml8
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml286
-rw-r--r--indra/newview/skins/default/xui/it/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_invite.xml3
-rw-r--r--indra/newview/skins/default/xui/it/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/it/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_texture.xml57
-rw-r--r--indra/newview/skins/default/xui/it/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/it/panel_volume_pulldown.xml15
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_item_info.xml3
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_task_info.xml9
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml30
-rw-r--r--indra/newview/skins/default/xui/it/teleport_strings.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about.xml19
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_animation_preview.xml187
-rw-r--r--indra/newview/skins/default/xui/ja/floater_autoreplace.xml32
-rw-r--r--indra/newview/skins/default/xui/ja/floater_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/ja/floater_model_preview.xml35
-rw-r--r--indra/newview/skins/default/xui/ja/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_pathfinding_characters.xml57
-rw-r--r--indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml121
-rw-r--r--indra/newview/skins/default/xui/ja/floater_pathfinding_linksets.xml154
-rw-r--r--indra/newview/skins/default/xui/ja/floater_postcard.xml42
-rw-r--r--indra/newview/skins/default/xui/ja/floater_spellcheck.xml18
-rw-r--r--indra/newview/skins/default/xui/ja/floater_spellcheck_import.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tools.xml13
-rw-r--r--indra/newview/skins/default/xui/ja/floater_top_objects.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/ja/menu_mode_change.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_text_editor.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml9
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml298
-rw-r--r--indra/newview/skins/default/xui/ja/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_invite.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/ja/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_texture.xml58
-rw-r--r--indra/newview/skins/default/xui/ja/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_item_info.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_task_info.xml9
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml30
-rw-r--r--indra/newview/skins/default/xui/ja/teleport_strings.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/notifications.xml1
-rw-r--r--indra/newview/skins/default/xui/pl/panel_login.xml31
-rw-r--r--indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about.xml19
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_animation_preview.xml187
-rw-r--r--indra/newview/skins/default/xui/pt/floater_autoreplace.xml32
-rw-r--r--indra/newview/skins/default/xui/pt/floater_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/pt/floater_model_preview.xml35
-rw-r--r--indra/newview/skins/default/xui/pt/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_pathfinding_characters.xml57
-rw-r--r--indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml121
-rw-r--r--indra/newview/skins/default/xui/pt/floater_pathfinding_linksets.xml154
-rw-r--r--indra/newview/skins/default/xui/pt/floater_postcard.xml40
-rw-r--r--indra/newview/skins/default/xui/pt/floater_spellcheck.xml18
-rw-r--r--indra/newview/skins/default/xui/pt/floater_spellcheck_import.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tools.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/floater_top_objects.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/menu_mode_change.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_text_editor.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml292
-rw-r--r--indra/newview/skins/default/xui/pt/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_invite.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/pt/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_texture.xml57
-rw-r--r--indra/newview/skins/default/xui/pt/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_item_info.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_task_info.xml9
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml30
-rw-r--r--indra/newview/skins/default/xui/pt/teleport_strings.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/floater_about.xml19
-rw-r--r--indra/newview/skins/default/xui/ru/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_animation_preview.xml183
-rw-r--r--indra/newview/skins/default/xui/ru/floater_autoreplace.xml32
-rw-r--r--indra/newview/skins/default/xui/ru/floater_env_settings.xml25
-rw-r--r--indra/newview/skins/default/xui/ru/floater_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/floater_model_preview.xml35
-rw-r--r--indra/newview/skins/default/xui/ru/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/floater_pathfinding_characters.xml57
-rw-r--r--indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml121
-rw-r--r--indra/newview/skins/default/xui/ru/floater_pathfinding_linksets.xml154
-rw-r--r--indra/newview/skins/default/xui/ru/floater_postcard.xml33
-rw-r--r--indra/newview/skins/default/xui/ru/floater_spellcheck.xml18
-rw-r--r--indra/newview/skins/default/xui/ru/floater_spellcheck_import.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/floater_tools.xml13
-rw-r--r--indra/newview/skins/default/xui/ru/floater_top_objects.xml10
-rw-r--r--indra/newview/skins/default/xui/ru/floater_water.xml70
-rw-r--r--indra/newview/skins/default/xui/ru/floater_windlight_options.xml167
-rw-r--r--indra/newview/skins/default/xui/ru/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/ru/menu_mode_change.xml5
-rw-r--r--indra/newview/skins/default/xui/ru/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_text_editor.xml7
-rw-r--r--indra/newview/skins/default/xui/ru/menu_viewer.xml9
-rw-r--r--indra/newview/skins/default/xui/ru/notifications.xml283
-rw-r--r--indra/newview/skins/default/xui/ru/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/ru/panel_group_invite.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/ru/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_texture.xml54
-rw-r--r--indra/newview/skins/default/xui/ru/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/ru/sidepanel_item_info.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/sidepanel_task_info.xml9
-rw-r--r--indra/newview/skins/default/xui/ru/strings.xml32
-rw-r--r--indra/newview/skins/default/xui/ru/teleport_strings.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/floater_about.xml19
-rw-r--r--indra/newview/skins/default/xui/tr/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_animation_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/tr/floater_autoreplace.xml32
-rw-r--r--indra/newview/skins/default/xui/tr/floater_env_settings.xml25
-rw-r--r--indra/newview/skins/default/xui/tr/floater_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_model_preview.xml35
-rw-r--r--indra/newview/skins/default/xui/tr/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_pathfinding_characters.xml57
-rw-r--r--indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml121
-rw-r--r--indra/newview/skins/default/xui/tr/floater_pathfinding_linksets.xml154
-rw-r--r--indra/newview/skins/default/xui/tr/floater_postcard.xml33
-rw-r--r--indra/newview/skins/default/xui/tr/floater_spellcheck.xml18
-rw-r--r--indra/newview/skins/default/xui/tr/floater_spellcheck_import.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/floater_tools.xml13
-rw-r--r--indra/newview/skins/default/xui/tr/floater_top_objects.xml10
-rw-r--r--indra/newview/skins/default/xui/tr/floater_water.xml70
-rw-r--r--indra/newview/skins/default/xui/tr/floater_windlight_options.xml167
-rw-r--r--indra/newview/skins/default/xui/tr/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/tr/menu_mode_change.xml5
-rw-r--r--indra/newview/skins/default/xui/tr/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/menu_text_editor.xml7
-rw-r--r--indra/newview/skins/default/xui/tr/menu_viewer.xml9
-rw-r--r--indra/newview/skins/default/xui/tr/notifications.xml287
-rw-r--r--indra/newview/skins/default/xui/tr/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/tr/panel_group_invite.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/panel_login.xml32
-rw-r--r--indra/newview/skins/default/xui/tr/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_texture.xml54
-rw-r--r--indra/newview/skins/default/xui/tr/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/tr/sidepanel_item_info.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/sidepanel_task_info.xml9
-rw-r--r--indra/newview/skins/default/xui/tr/strings.xml32
-rw-r--r--indra/newview/skins/default/xui/tr/teleport_strings.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_aaa.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_about.xml30
-rw-r--r--indra/newview/skins/default/xui/zh/floater_about_land.xml218
-rw-r--r--indra/newview/skins/default/xui/zh/floater_activeim.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_animation_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/zh/floater_auction.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_avatar_picker.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/floater_avatar_textures.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/floater_beacons.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/floater_build_options.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_bulk_perms.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_contents.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_currency.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_land.xml124
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_object.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/floater_camera.xml21
-rw-r--r--indra/newview/skins/default/xui/zh/floater_color_picker.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_display_name.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/floater_env_settings.xml25
-rw-r--r--indra/newview/skins/default/xui/zh/floater_event.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_gesture.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_god_tools.xml86
-rw-r--r--indra/newview/skins/default/xui/zh/floater_hardware_settings.xml22
-rw-r--r--indra/newview/skins/default/xui/zh/floater_im_session.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_image_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_import_collada.xml23
-rw-r--r--indra/newview/skins/default/xui/zh/floater_incoming_call.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_inspect.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/floater_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml11
-rw-r--r--indra/newview/skins/default/xui/zh/floater_joystick.xml74
-rw-r--r--indra/newview/skins/default/xui/zh/floater_lagmeter.xml28
-rw-r--r--indra/newview/skins/default/xui/zh/floater_land_holdings.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_lsl_guide.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/floater_map.xml34
-rw-r--r--indra/newview/skins/default/xui/zh/floater_media_browser.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_media_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_mem_leaking.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_model_preview.xml231
-rw-r--r--indra/newview/skins/default/xui/zh/floater_moveview.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/floater_mute_object.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_openobject.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_outgoing_call.xml20
-rw-r--r--indra/newview/skins/default/xui/zh/floater_pay.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_pay_object.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_perm_prefs.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_post_process.xml36
-rw-r--r--indra/newview/skins/default/xui/zh/floater_postcard.xml33
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preferences.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_animation.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_gesture.xml32
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_sound.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_texture.xml20
-rw-r--r--indra/newview/skins/default/xui/zh/floater_price_for_listing.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/floater_publish_classified.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_report_abuse.xml92
-rw-r--r--indra/newview/skins/default/xui/zh/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_script_queue.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_script_search.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_search.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_sell_land.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/floater_snapshot.xml48
-rw-r--r--indra/newview/skins/default/xui/zh/floater_sound_devices.xml7
-rw-r--r--indra/newview/skins/default/xui/zh/floater_stats.xml70
-rw-r--r--indra/newview/skins/default/xui/zh/floater_sys_well.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_telehub.xml28
-rw-r--r--indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/floater_tools.xml279
-rw-r--r--indra/newview/skins/default/xui/zh/floater_top_objects.xml30
-rw-r--r--indra/newview/skins/default/xui/zh/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_voice_controls.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_voice_effect.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/floater_water.xml70
-rw-r--r--indra/newview/skins/default/xui/zh/floater_windlight_options.xml167
-rw-r--r--indra/newview/skins/default/xui/zh/floater_world_map.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/inspect_avatar.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/inspect_group.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/inspect_object.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/inspect_remote_object.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_attachment_self.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_avatar_other.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_avatar_self.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/zh/menu_edit.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_favorites.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_gesture_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_object_gear.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inventory.xml42
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inventory_add.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_land.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_login.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_media_ctrl.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_mini_map.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/menu_model_import_gear_default.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/menu_navbar.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_nearby_chat.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/menu_object.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/menu_object_icon.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_outfit_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_participant_list.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_groups.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_picks_plus.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_places_gear_folder.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_profile_overflow.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_save_outfit.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_teleport_history_tab.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_text_editor.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_topinfobar.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_url_http.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_url_slapp.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_viewer.xml351
-rw-r--r--indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types_linux.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types_mac.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/notifications.xml1776
-rw-r--r--indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/panel_body_parts_list_item.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_bodyparts_list_button_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/zh/panel_classified_info.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/panel_clothing_list_item.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_cof_wearables.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_alpha.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_classified.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_eyes.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_gloves.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_hair.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_jacket.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_pants.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_pick.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_profile.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_shirt.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_shoes.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_skin.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_skirt.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_socks.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_tattoo.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_underpants.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_undershirt.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_wearable.xml30
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_general.xml28
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_invite.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_land_money.xml34
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_notices.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_notify.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_roles.xml31
-rw-r--r--indra/newview/skins/default/xui/zh/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_landmark_info.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/panel_login.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_main_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_me.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_general.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_security.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_navigation_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_nearby_chat_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_nearby_media.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/panel_outfit_edit.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_outfits_inventory.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_people.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/panel_picks.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_place_profile.xml42
-rw-r--r--indra/newview/skins/default/xui/zh/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_chat.xml40
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_colors.xml11
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_general.xml29
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_setup.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_sound.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_prim_media_controls.xml24
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_covenant.xml22
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_estate.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_general.xml13
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_terrain.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_texture.xml54
-rw-r--r--indra/newview/skins/default/xui/zh/panel_script_ed.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_script_limits_my_avatar.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_script_limits_region_memory.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/zh/panel_sound_devices.xml19
-rw-r--r--indra/newview/skins/default/xui/zh/panel_stand_stop_flying.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_teleport_history.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_world_map.xml46
-rw-r--r--indra/newview/skins/default/xui/zh/role_actions.xml114
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_appearance.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_item_info.xml20
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_task_info.xml40
-rw-r--r--indra/newview/skins/default/xui/zh/strings.xml1909
-rw-r--r--indra/newview/skins/default/xui/zh/teleport_strings.xml22
-rw-r--r--indra/newview/skins/steam/xui/da/strings.xml4483
-rw-r--r--indra/newview/skins/steam/xui/de/strings.xml5018
-rw-r--r--indra/newview/skins/steam/xui/en/strings.xml3761
-rw-r--r--indra/newview/skins/steam/xui/es/strings.xml4925
-rw-r--r--indra/newview/skins/steam/xui/fr/strings.xml5018
-rw-r--r--indra/newview/skins/steam/xui/it/strings.xml4928
-rw-r--r--indra/newview/skins/steam/xui/ja/strings.xml5018
-rw-r--r--indra/newview/skins/steam/xui/pl/strings.xml4340
-rw-r--r--indra/newview/skins/steam/xui/pt/strings.xml4885
-rw-r--r--indra/newview/skins/steam/xui/ru/strings.xml5024
-rw-r--r--indra/newview/skins/steam/xui/tr/strings.xml5025
-rw-r--r--indra/newview/skins/steam/xui/zh/strings.xml4454
-rw-r--r--indra/newview/tests/lllogininstance_test.cpp1
-rw-r--r--indra/newview/viewer_manifest.py24
-rw-r--r--indra/viewer_components/updater/llupdatechecker.cpp25
-rw-r--r--indra/viewer_components/updater/llupdatechecker.h2
-rw-r--r--indra/viewer_components/updater/llupdaterservice.cpp2
-rw-r--r--indra/viewer_components/updater/tests/llupdaterservice_test.cpp4
659 files changed, 70419 insertions, 9719 deletions
diff --git a/.hgignore b/.hgignore
index b367090227..b180d92003 100644
--- a/.hgignore
+++ b/.hgignore
@@ -36,7 +36,7 @@ indra/newview/fmod.dll
indra/newview/mozilla-theme
indra/newview/mozilla-universal-darwin.tgz
indra/newview/res/ll_icon.*
-indra/newview/res-sdl
+indra/newview/res-sdl/ll_icon.*
indra/newview/vivox-runtime
indra/server-linux-*
indra/temp
diff --git a/.hgtags b/.hgtags
index 54f1569761..c5b40e9b9a 100644..100755
--- a/.hgtags
+++ b/.hgtags
@@ -1,355 +1,313 @@
-bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release
003dd9461bfa479049afcc34545ab3431b147c7c v2start
-08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1
-0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2
-12769e547e30067d494a6c01479a18107366ce2f beta-5
+52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3
+d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0
+7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4
+7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa
+d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5
+d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo
+b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6
17fc2908e9a1ef34a9f53a41a393caf5c3cac390 beta-3-5
-19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1
-1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3
3469d90a115b900f8f250e137bbd9b684130f5d2 beta-4
-3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1
-434973a76ab2755f98ab55e1afc193e16692d5c5 2-1-1-beta-2
-46002088d9a4489e323b8d56131c680eaa21258c viewer-2-1-0-start
+12769e547e30067d494a6c01479a18107366ce2f beta-5
4f777ffb99fefdc6497c61385c22688ff149c659 viewer-2-0-0
-52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3
668851b2ef0f8cf8df07a0fba429e4a6c1e70abb viewer-2-0-1
-6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2
-7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4
-7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa
+08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1
80bc6cff515118a36108967af49d3f8105c95bc9 viewer-2-0-2-start
-87bfaf8c76f9b22d9c65d4b315358861be87c863 2-1-1-release
+46002088d9a4489e323b8d56131c680eaa21258c viewer-2-1-0-start
+3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1
+0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2
+1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3
+c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4
b03065d018b8a2e28b7de85b293a4c992cb4c12d 2-1-release
-b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6
+19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1
+6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2
bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2-1-1-release
-c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4
-d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo
-d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5
-d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0
+bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release
c6e6324f5be1401f077ad18a4a0f6b46451c2f7b last_sprint
-7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3
7076e22f9f43f479a4ea75eac447a36364bead5a 2.2.0-beta1
+7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1
+7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3
9822eb3e25f7fe0c28ffd8aba45c507caa383cbc 2.2.0-beta2
+9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2
b0cd7e150009809a0b5b0a9d5785cd4bb230413a 2.2.0-beta3
+b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3
00a831292231faad7e44c69f76cb96f175b8dfad 2.2.0-beta4
-98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-beta1
1415e6538d54fd5d568ee88343424d57c6803c2c 2.2.0-release
+1415e6538d54fd5d568ee88343424d57c6803c2c DRTVWR-8_2.2.0-release
98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-start
a3c12342b1af0951b8aa3b828aacef17fcea8178 2.3.0-beta1
+a3c12342b1af0951b8aa3b828aacef17fcea8178 DRTVWR-14_2.3.0-beta1
db0fe9bb65187f365e58a717dd23d0f4754a9c1d 2.3.0-beta2
+db0fe9bb65187f365e58a717dd23d0f4754a9c1d DRTVWR-17_2.3.0-beta2
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-beta3
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-release
+6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-13_2.3.0-release
+6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3
dbc206fc61d89ff4cfe15aade0bf0c7bc7fee1c9 2.4.0-start
-dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1
-dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1
3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e 2.4.0-beta1
+3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e DRTVWR-26_2.4.0-beta1
25bd6007e3d2fc15db9326ed4b18a24a5969a46a 2.4.0-beta2
+25bd6007e3d2fc15db9326ed4b18a24a5969a46a DRTVWR-27_2.4.0-beta2
1ed382c6a08ba3850b6ce9061bc551ddece0ea07 2.4.0-release
+1ed382c6a08ba3850b6ce9061bc551ddece0ea07 DRTVWR-25_2.4.0-release
a82e5b1e22c7f90e3c7977d146b80588f004ed0d 2.5.0-start
-76f586a8e22b1abe6b2339758c8ac0fa718975de 76f586a8e22b
-76f586a8e22b1abe6b2339758c8ac0fa718975de 76f586a8e22b
-0000000000000000000000000000000000000000 76f586a8e22b
-0000000000000000000000000000000000000000 76f586a8e22b
-345b17e7cf630db77e840b4fe3451bd476d750a3 76f586a8e22b
345b17e7cf630db77e840b4fe3451bd476d750a3 2.5.0-beta1
-345b17e7cf630db77e840b4fe3451bd476d750a3 76f586a8e22b
-0000000000000000000000000000000000000000 76f586a8e22b
-54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2
-b542f8134a2bb5dd054ff4e509a44b2ee463b1bf nat-eventapi2-base
-7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1
-9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2
-b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3
-1415e6538d54fd5d568ee88343424d57c6803c2c DRTVWR-8_2.2.0-release
-a3c12342b1af0951b8aa3b828aacef17fcea8178 DRTVWR-14_2.3.0-beta1
-db0fe9bb65187f365e58a717dd23d0f4754a9c1d DRTVWR-17_2.3.0-beta2
-6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3
-6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-13_2.3.0-release
-3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e DRTVWR-26_2.4.0-beta1
-25bd6007e3d2fc15db9326ed4b18a24a5969a46a DRTVWR-27_2.4.0-beta2
-1ed382c6a08ba3850b6ce9061bc551ddece0ea07 DRTVWR-25_2.4.0-release
345b17e7cf630db77e840b4fe3451bd476d750a3 DRTVWR-32_2.5.0-beta1
+54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2
+54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33--2.5.0beta2
54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33_2.5.0-beta2
b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-beta3
-b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3
b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-release
b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-31_2.5.0-release
-3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work
+b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3
+b542f8134a2bb5dd054ff4e509a44b2ee463b1bf nat-eventapi2-base
63a6aedfce785a6c760377bf685b2dae616797d2 2.5.1-start
4dede9ae1ec74d41f6887719f6f1de7340d8578d 2.5.1-release
4dede9ae1ec74d41f6887719f6f1de7340d8578d DRTVWR-37_2.5.1-release
-b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release
b53a0576eec80614d7767ed72b40ed67aeff27c9 2.5.2-release
-92e58e51776a4f8c29069b1a62ff21454d2085f0 2.6.0-start
-f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start
+b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release
4e9eec6a347f89b2b3f295beb72f1cf7837dff66 2.6.0-start
9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1
9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1
-9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
+9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
+42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
+42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
+c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start
c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1
-c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
-c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release
c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release
+c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release
56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start
-42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
-42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
-d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1
d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1
-214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release
+d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1
214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release
+214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release
52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py
ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start
-d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1
d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1
-0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2
+d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1
0630e977504af5ea320c58d33cae4e1ddee793e9 2.6.3-beta2
-7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1
+0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2
+8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
+8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
+3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work
7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1
+7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1
800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start
-bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1
+bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
+dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release
+dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release
5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
-beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1
-bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156
beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1
-11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start
+beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1
+be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release
+be2000b946f8cb3de5f44b2d419287d4c48ec4eb DRTVWR-54_2.6.8-release
e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start
-77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-57_2.6.9-beta1
77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-beta1
-be2000b946f8cb3de5f44b2d419287d4c48ec4eb DRTVWR-54_2.6.8-release
-be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release
-dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release
-dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release
-8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
-8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
-77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release
77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-release
+77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release
+77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-57_2.6.9-beta1
8835e0e3c0d3a48244c287bc05811dfc2fba43ec 2.7.0-start
-43c7ee846b7eed80786acbbf35d03bd016a3e85d DRTVWR-59_2.7.0-beta1
43c7ee846b7eed80786acbbf35d03bd016a3e85d 2.7.0-beta1
+43c7ee846b7eed80786acbbf35d03bd016a3e85d DRTVWR-59_2.7.0-beta1
54fd44ac92e4c61435ea33effe093a3527e18d98 2.7.1-start
-0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1
0c4d0c24278074f219e5a32e72b449e78301d11b 2.7.1-beta1
-a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release
-a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release
+0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1
9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start
-e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1
e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1
+e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1
+fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release
+fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release
+fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release
+fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release
6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start
6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start
-be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1
be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1
-057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
-057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release
-a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release
be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1
-be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1
-a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release
+057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release
+057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start
-09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1
09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1
-e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start
-502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start
-c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188
-888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175
-2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155
-6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release
+09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1
6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release
-e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1
+6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release
e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1
-493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
+e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start
+e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1
493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release
-2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1
+493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
+502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start
2c7e459e0c883f8e406b932e41e60097e9ee077e 2.8.1-beta1
-29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release
+2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1
29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release
-4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix
+29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release
4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix
+4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix
54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start
-29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release
-29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release
ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start
-599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1
599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1
-fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release
+599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1
fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release
-46a010f4885a9d223b511eac553ba5720284b1dc 3.0.0-start
-b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1
-b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1
+fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release
6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start
+b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1
+b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1
+1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release
+1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release
82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start
-364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1
364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1
+364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1
f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start
-1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release
-1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release
-42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1
42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1
-e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2
+42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1
e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2
+e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2
b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start
-1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release
-0000000000000000000000000000000000000000 DRTVWR-78_3.0.0-release
-1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release
-6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1
6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 3.0.3-beta1
-586907287be581817b2422b5137971b22d54ea48 3.0.4-start
-61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2
+6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1
61aa7974df089e8621fe9a4c69bcdefdb3cc208a 3.0.3-beta2
-0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release
+61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2
0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release
+0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release
+586907287be581817b2422b5137971b22d54ea48 3.0.4-start
92a3aa04775438226399b19deee12ac3b5a62838 3.0.5-start
c7282e59f374ee904bd793c3c444455e3399b0c5 3.1.0-start
-2657fa785bbfac115852c41bd0adaff74c2ad5da DRTVWR-93_3.1.0-beta1
2657fa785bbfac115852c41bd0adaff74c2ad5da 3.1.0-beta1
-dbaaef19266478a20654c46395300640163e98e3 DRTVWR-96_3.1.0-beta2
-dbaaef19266478a20654c46395300640163e98e3 3.1.0-beta2
-dbaaef19266478a20654c46395300640163e98e3 DRTVWR-96_3.1.0-beta2
-bc01ee26fd0f1866e266429e85f76340523e91f1 DRTVWR-96_3.1.0-beta2
-dbaaef19266478a20654c46395300640163e98e3 3.1.0-beta2
+2657fa785bbfac115852c41bd0adaff74c2ad5da DRTVWR-93_3.1.0-beta1
bc01ee26fd0f1866e266429e85f76340523e91f1 3.1.0-beta2
-ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 DRTVWR-92_3.1.0-release
+bc01ee26fd0f1866e266429e85f76340523e91f1 DRTVWR-96_3.1.0-beta2
ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 3.1.0-release
+ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 DRTVWR-92_3.1.0-release
a8230590e28e4f30f5105549e0e43211d9d55711 3.2.0-start
-e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1
e440cd1dfbd128d7d5467019e497f7f803640ad6 3.2.0-beta1
-9bcc2b7176634254e501e3fb4c5b56c1f637852e DRTVWR-97_3.2.0-beta2
+e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1
9bcc2b7176634254e501e3fb4c5b56c1f637852e 3.2.0-beta2
-2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3
+9bcc2b7176634254e501e3fb4c5b56c1f637852e DRTVWR-97_3.2.0-beta2
2a13d30ee50ccfed50268238e36bb90d738ccc9e 3.2.0-beta3
-3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release
-3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release
-c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
-3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release
+2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3
3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release
-40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start
3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release
-3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release
-9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1
+c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1
-523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1
+9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1
+a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release
+a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
+40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start
523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1
+523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1
80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start
-a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
-a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release
-a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release
-fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release
-a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release
-fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release
+3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1
3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start
-a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release
-fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release
-a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release
-fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release
3fe994349fae64fc40874bb59db387131eb35a41 DRTVWR-104_3.2.4-beta1
-3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1
-8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start
-fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release
-fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release
-bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release
bd6bcde2584491fd9228f1fa51c4575f4e764e19 3.2.4-release
-3d2d5d244c6398a4214c666d5dd3965b0918709a DRTVWR-106_3.2.5-beta1
+bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release
+8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start
3d2d5d244c6398a4214c666d5dd3965b0918709a 3.2.5-beta1
-65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d DRTVWR-107_3.2.5-beta2
+3d2d5d244c6398a4214c666d5dd3965b0918709a DRTVWR-106_3.2.5-beta1
65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d 3.2.5-beta2
-c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release
+65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d DRTVWR-107_3.2.5-beta2
c6175c955a19e9b9353d242889ec1779b5762522 3.2.5-release
+c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release
2174ed1c7129562428a5cfe8651ed77b8d26ae18 3.2.6-start
+286d73ff5c19f6c00e023dc1b60975ed6bbe2872 3.2.6-beta1
286d73ff5c19f6c00e023dc1b60975ed6bbe2872 DRTVWR-109_3.2.6-beta1
4891c46a56fed7512c783b9cbe7cb7260727bf0c 3.2.7-start
-286d73ff5c19f6c00e023dc1b60975ed6bbe2872 3.2.6-beta1
-c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release
-c6175c955a19e9b9353d242889ec1779b5762522 3.2.5-release
-3d75c836d178c7c7e788f256afe195f6cab764a2 DRTVWR-111_3.2.7-beta1
3d75c836d178c7c7e788f256afe195f6cab764a2 3.2.7-beta1
+3d75c836d178c7c7e788f256afe195f6cab764a2 DRTVWR-111_3.2.7-beta1
89980333c99dbaf1787fe20784f1d8849e9b5d4f 3.2.8-start
-16f8e2915f3f2e4d732fb3125daf229cb0fd1875 DRTVWR-114_3.2.8-beta1
-37dd400ad721e2a89ee820ffc1e7e433c68f3ca2 3.2.9-start
16f8e2915f3f2e4d732fb3125daf229cb0fd1875 3.2.8-beta1
-089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161
-987425b1acf4752379b2e1eb20944b4b35d67a85 DRTVWR-115_3.2.8-beta2
+16f8e2915f3f2e4d732fb3125daf229cb0fd1875 DRTVWR-114_3.2.8-beta1
987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2
-51b2fd52e36aab8f670e0874e7e1472434ec4b4a DRTVWR-113_3.2.8-release
+987425b1acf4752379b2e1eb20944b4b35d67a85 DRTVWR-115_3.2.8-beta2
51b2fd52e36aab8f670e0874e7e1472434ec4b4a 3.2.8-release
-e9c82fca5ae6fb8a8af29012d78fb194a29323f3 DRTVWR-117_3.2.9-beta1
+51b2fd52e36aab8f670e0874e7e1472434ec4b4a DRTVWR-113_3.2.8-release
+37dd400ad721e2a89ee820ffc1e7e433c68f3ca2 3.2.9-start
e9c82fca5ae6fb8a8af29012d78fb194a29323f3 3.2.9-beta1
-a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2
+e9c82fca5ae6fb8a8af29012d78fb194a29323f3 DRTVWR-117_3.2.9-beta1
a01ef9bed28627f4ca543fbc1d70c79cc297a90f 3.2.9-beta2
-987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2
-d5f263687f43f278107363365938f0a214920a4b DRTVWR-119
+a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2
d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1
-5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
-5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release
d5f263687f43f278107363365938f0a214920a4b 3.3.0-start
-dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate
d5f263687f43f278107363365938f0a214920a4b DRTVWR-119
-d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1
-5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release
-28b95a6a28dca3338d9a1f4f204b96678df9f6a5 viewer-beta-candidate
-b43cd25be49e3984ff5361cefad020e069131d98 3.3.1-start
-3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125
-dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate
-3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate
-3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate
3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 3.3.1-start
+3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125
28b95a6a28dca3338d9a1f4f204b96678df9f6a5 3.3.1-beta1
-1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate
1dc545e44617975da2a4a32fe303386c687a6ca1 3.3.1-beta2
1dc545e44617975da2a4a32fe303386c687a6ca1 DRTVWR-139
-5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
-c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate
+1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate
c623bbc854b6f7ee1b33a3718f76715046aa2937 3.3.1-release
d29a260119f8d5a5d168e25fed0c7ea6b3f40161 3.3.2-beta1
675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-beta2
-c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate
-675668bd24d3bea570814f71762a2a806f7e1b8d viewer-release-candidate
675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-release
-675668bd24d3bea570814f71762a2a806f7e1b8d viewer-release-candidate
-050e48759337249130f684b4a21080b683f61732 DRTVWR-168
-b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171
-c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163
-600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162
-600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162
-9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157
-a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159
-24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153
15e90b52dc0297921b022b90d10d797436b8a1bd viewer-release-candidate
+bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156
6414ecdabc5d89515b08d1f872cf923ed3a5523a DRTVWR-148
-1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c DRTVWR-144
-1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c 3.3.3-beta1
+2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155
+24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153
+a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159
+9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157
5910f8063a7e1ddddf504c2f35ca831cc5e8f469 DRTVWR-160
-1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c 3.3.3-beta1
f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 3.3.3-beta1
-1b7f311b5a5dbfbed3dcbb4ed44afa20f89cad4c DRTVWR-144
f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 DRTVWR-144
+089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161
+600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162
+c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163
2d6c0634b11e6f3df11002b8510a72a0433da00a DRTVWR-164
80b5e5e9775966d3839331ffa7a16a60f9d7c930 DRTVWR-165
fdcc08a4f20ae9bb060f4693c8980d216534efdf 3.3.3-beta2
af5f3e43e6e4424b1da19d9e16f6b853a7b822ed DRTVWR-169
4b3c68199a86cabaa5d9466d7b0f7e141e901d7a 3.3.3-beta3
6428242e124b523813bfaf4c45b3d422f0298c81 3.3.3-release
-57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176
+b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171
+050e48759337249130f684b4a21080b683f61732 DRTVWR-168
09ef7fd1b0781f33b8a3a9af6236b7bcb4831910 DRTVWR-170
-005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167
-f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 3.3.4-beta1
f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 DRTVWR-158
-f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 3.3.4-beta1
-cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174
-bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173
f91d003091a61937a044652c4c674447f7dcbb7a 3.3.4-beta1
+005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167
+bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173
+cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174
82b5330bc8b17d0d4b598832e9c5a92e90075682 3.3.4-beta2
+57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176
eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177
-4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179
a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3
+888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175
+4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179
4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180
-9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184
5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183
6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4
+9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184
ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5
28e100d0379a2b0710c57647a28fc5239d3d7b99 3.3.4-release
a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182
1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1
81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186
+47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190
cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181
+c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188
9ee9387789701d597130f879d9011a4958753862 DRTVWR-189
+421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192
+4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191
+33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195
+e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193
+78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194
+7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196
+ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198
+507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197
+b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2
+37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200
+182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3
+248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203
+6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199
+7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2
+7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201
+84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4
+de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202
+573e863be2f26d3687161def4b9fea9b7038dda8 3.4.0-beta5
+34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag
+6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205
+7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206
+8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207
+351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3
diff --git a/autobuild.xml b/autobuild.xml
index 19228198ec..91be4e93ec 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1062,9 +1062,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>d91e1f483209cd3eba04135c6a59e829</string>
+ <string>a5b2dff0d97b643227a58473e5c57906</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/Darwin/installer/kdu-6.4.1-darwin-20110218.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/Darwin/installer/kdu-7.0.0-darwin-20120515.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1086,9 +1086,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6cd9f36465ef73a3df34bf2b3bba2ced</string>
+ <string>6d80d35524e1c0c32d3385014d02d48c</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/CYGWIN/installer/kdu-6.4.1-windows-20110218.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/CYGWIN/installer/kdu-7.0.0-windows-20120515.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1254,11 +1254,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>de22a97b276913a6dd05838b7fe297af</string>
+ <string>0578fa67ef9906c6aaa326f51db2669f</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120725.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120814.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1268,9 +1268,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>d2dfbbc11aac34ebd551df86524c8c9c</string>
+ <string>b706fdeed4ce2182d434043dc33d9d1d</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120725.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120814.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1280,9 +1280,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>99abccc5d117ab82cadb8cff0d85b867</string>
+ <string>0cebd359ea732a7db363d88f9886a1ef</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120725.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120814.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1306,11 +1306,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>3528620230fbd288fcc9dbbd8d8a6b59</string>
+ <string>3ae798d4dfb54a1d806ee5f8b31f7626</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120725.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120814.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1320,9 +1320,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>69d188f72f9494b0e74c94ca0496f618</string>
+ <string>aa8a2f25e8629cf5e6a96cc0eb93de8e</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120725.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120814.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1332,9 +1332,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>61fc2b84ad53cf8d98d1784c31f9928e</string>
+ <string>3ea4cee6a8dd4c89fbfd3ad6abd703c2</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120725.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120814.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -2183,6 +2183,8 @@
<array>
<string>-configuration Release</string>
<string>-project SecondLife.xcodeproj</string>
+ <string>-DENABLE_SIGNING:BOOL=YES</string>
+ <string>-DSIGNING_IDENTITY:STRING="Developer ID Application: Linden Research, Inc."</string>
</array>
</map>
<key>configure</key>
@@ -2210,6 +2212,8 @@
<array>
<string>-configuration Release</string>
<string>-project SecondLife.xcodeproj</string>
+ <string>-DENABLE_SIGNING:BOOL=YES</string>
+ <string>-DSIGNING_IDENTITY:STRING="Developer ID Application: Linden Research, Inc."</string>
</array>
</map>
<key>configure</key>
@@ -2459,6 +2463,18 @@
</map>
<key>configure</key>
<map>
+ <key>arguments</key>
+ <array>
+ <string>..\indra</string>
+ <string>&amp;&amp;</string>
+ <string>..\indra\tools\vstool\VSTool.exe</string>
+ <string>--solution</string>
+ <string>SecondLife.sln</string>
+ <string>--config</string>
+ <string>Debug</string>
+ <string>--startup</string>
+ <string>secondlife-bin</string>
+ </array>
<key>options</key>
<array>
<string>-G</string>
@@ -2535,6 +2551,18 @@
</map>
<key>configure</key>
<map>
+ <key>arguments</key>
+ <array>
+ <string>..\indra</string>
+ <string>&amp;&amp;</string>
+ <string>..\indra\tools\vstool\VSTool.exe</string>
+ <string>--solution</string>
+ <string>SecondLife.sln</string>
+ <string>--config</string>
+ <string>RelWithDebInfo</string>
+ <string>--startup</string>
+ <string>secondlife-bin</string>
+ </array>
<key>options</key>
<array>
<string>-G</string>
@@ -2611,6 +2639,18 @@
</map>
<key>configure</key>
<map>
+ <key>arguments</key>
+ <array>
+ <string>..\indra</string>
+ <string>&amp;&amp;</string>
+ <string>..\indra\tools\vstool\VSTool.exe</string>
+ <string>--solution</string>
+ <string>SecondLife.sln</string>
+ <string>--config</string>
+ <string>Release</string>
+ <string>--startup</string>
+ <string>secondlife-bin</string>
+ </array>
<key>options</key>
<array>
<string>-G</string>
diff --git a/doc/contributions.txt b/doc/contributions.txt
index df504e4a8a..e20b7b83c5 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -174,6 +174,7 @@ Ansariel Hiller
VWR-26150
STORM-1685
STORM-1713
+ STORM-1899
Aralara Rajal
Ardy Lay
STORM-859
@@ -400,6 +401,7 @@ Gaberoonie Zanzibar
Ganymedes Costagravas
Geenz Spad
STORM-1823
+ STORM-1900
Gene Frostbite
GeneJ Composer
Geneko Nemeth
@@ -636,6 +638,7 @@ Jonathan Yap
STORM-1809
STORM-1793
STORM-1810
+ STORM-1877
STORM-1860
STORM-1852
STORM-1870
@@ -644,6 +647,7 @@ Jonathan Yap
STORM-1862
Kadah Coba
STORM-1060
+ STORM-1843
Jondan Lundquist
Josef Munster
Josette Windlow
@@ -654,6 +658,8 @@ Kage Pixel
VWR-11
Kagehi Kohn
Kaimen Takahe
+Katharine Berry
+ STORM-1900
Keklily Longfall
Ken Lavender
Ken March
@@ -739,6 +745,7 @@ Marianne McCann
Marine Kelley
STORM-281
MartinRJ Fayray
+ STORM-1844
STORM-1845
Matthew Anthony
Matthew Dowd
@@ -1108,9 +1115,12 @@ Sudane Erato
Synystyr Texan
Takeda Terrawyng
TankMaster Finesmith
+ OPEN-140
+ OPEN-142
STORM-1100
- STORM-1602
STORM-1258
+ STORM-1602
+ STORM-1868
VWR-26622
Talamasca
Tali Rosca
@@ -1228,6 +1238,8 @@ Watty Berkson
Westley Schridde
Westley Streeter
Whimsy Winx
+Whirly Fizzle
+ STORM-1895
Whoops Babii
VWR-631
VWR-1640
diff --git a/etc/message.xml b/etc/message.xml
index 7b133ab205..6d8160abb5 100644
--- a/etc/message.xml
+++ b/etc/message.xml
@@ -385,14 +385,6 @@
<key>trusted-sender</key>
<boolean>true</boolean>
</map>
-
- <key>ParcelMediaURLFilter</key>
- <map>
- <key>flavor</key>
- <string>llsd</string>
- <key>trusted-sender</key>
- <boolean>false</boolean>
- </map>
<key>ParcelNavigateMedia</key>
<map>
diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py
index a4fb77357c..bfcb259709 100644
--- a/indra/lib/python/indra/util/llmanifest.py
+++ b/indra/lib/python/indra/util/llmanifest.py
@@ -167,7 +167,12 @@ ARGUMENTS=[
dict(name='version',
description="""This specifies the version of Second Life that is
being packaged up.""",
- default=get_default_version)
+ default=get_default_version),
+ dict(name='signature',
+ description="""This specifies an identity to sign the viewer with, if any.
+ If no value is supplied, the default signature will be used, if any. Currently
+ only used on Mac OS X.""",
+ default=None)
]
def usage(srctree=""):
diff --git a/indra/llcharacter/llhandmotion.cpp b/indra/llcharacter/llhandmotion.cpp
index 63937d8255..696dba0d95 100644
--- a/indra/llcharacter/llhandmotion.cpp
+++ b/indra/llcharacter/llhandmotion.cpp
@@ -132,18 +132,68 @@ BOOL LLHandMotion::onUpdate(F32 time, U8* joint_mask)
{
if (mNewPose != HAND_POSE_RELAXED && mNewPose != mCurrentPose)
{
- mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
+ // Only set param weight for poses other than
+ // default (HAND_POSE_SPREAD); HAND_POSE_SPREAD
+ // is not an animatable morph!
+ if (mNewPose != HAND_POSE_SPREAD)
+ {
+ mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
+ }
+
+ // Reset morph weight for current pose back to its
+ // full extend or it might be stuck somewhere in the middle if a
+ // pose is requested and the old pose is requested again shortly
+ // after while still blending to the other pose!
+ if (mCurrentPose != HAND_POSE_SPREAD)
+ {
+ mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f);
+ }
+
+ // Update visual params now if we won't blend
+ if (mCurrentPose == HAND_POSE_RELAXED)
+ {
+ mCharacter->updateVisualParams();
+ }
}
mNewPose = HAND_POSE_RELAXED;
}
else
{
- // this is a new morph we didn't know about before
- if (*requestedHandPose != mNewPose && mNewPose != mCurrentPose && mNewPose != HAND_POSE_SPREAD)
+ // Sometimes we seem to get garbage here, with poses that are out of bounds.
+ // So check for a valid pose first.
+ if (*requestedHandPose >= 0 && *requestedHandPose < NUM_HAND_POSES)
+ {
+ // This is a new morph we didn't know about before:
+ // Reset morph weight for both current and new pose
+ // back their starting values while still blending.
+ if (*requestedHandPose != mNewPose && mNewPose != mCurrentPose)
+ {
+ if (mNewPose != HAND_POSE_SPREAD)
+ {
+ mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
+ }
+
+ // Reset morph weight for current pose back to its full extend
+ // or it might be stuck somewhere in the middle if a pose is
+ // requested and the old pose is requested again shortly after
+ // while still blending to the other pose!
+ if (mCurrentPose != HAND_POSE_SPREAD)
+ {
+ mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f);
+ }
+
+ // Update visual params now if we won't blend
+ if (mCurrentPose == *requestedHandPose)
+ {
+ mCharacter->updateVisualParams();
+ }
+ }
+ mNewPose = *requestedHandPose;
+ }
+ else
{
- mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
+ llwarns << "Requested hand pose out of range. Ignoring requested pose." << llendl;
}
- mNewPose = *requestedHandPose;
}
mCharacter->removeAnimationData("Hand Pose");
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index dd7b8c6eb8..36a8319189 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -174,6 +174,7 @@ set(llcommon_HEADER_FILES
llfoldertype.h
llformat.h
llframetimer.h
+ llhandle.h
llhash.h
llheartbeat.h
llhttpstatuscodes.h
diff --git a/indra/llui/llhandle.h b/indra/llcommon/llhandle.h
index 37c657dd92..6af5e198d6 100644
--- a/indra/llui/llhandle.h
+++ b/indra/llcommon/llhandle.h
@@ -31,6 +31,10 @@
#include <boost/type_traits/is_convertible.hpp>
#include <boost/utility/enable_if.hpp>
+/**
+ * Helper object for LLHandle. Don't instantiate these directly, used
+ * exclusively by LLHandle.
+ */
class LLTombStone : public LLRefCount
{
public:
@@ -42,15 +46,37 @@ private:
mutable void* mTarget;
};
-// LLHandles are used to refer to objects whose lifetime you do not control or influence.
-// Calling get() on a handle will return a pointer to the referenced object or NULL,
-// if the object no longer exists. Note that during the lifetime of the returned pointer,
-// you are assuming that the object will not be deleted by any action you perform,
-// or any other thread, as normal when using pointers, so avoid using that pointer outside of
-// the local code block.
-//
-// https://wiki.lindenlab.com/mediawiki/index.php?title=LLHandle&oldid=79669
-
+/**
+ * LLHandles are used to refer to objects whose lifetime you do not control or influence.
+ * Calling get() on a handle will return a pointer to the referenced object or NULL,
+ * if the object no longer exists. Note that during the lifetime of the returned pointer,
+ * you are assuming that the object will not be deleted by any action you perform,
+ * or any other thread, as normal when using pointers, so avoid using that pointer outside of
+ * the local code block.
+ *
+ * https://wiki.lindenlab.com/mediawiki/index.php?title=LLHandle&oldid=79669
+ *
+ * The implementation is like some "weak pointer" implementations. When we
+ * can't control the lifespan of the referenced object of interest, we can
+ * still instantiate a proxy object whose lifespan we DO control, and store in
+ * the proxy object a dumb pointer to the actual target. Then we just have to
+ * ensure that on destruction of the target object, the proxy's dumb pointer
+ * is set NULL.
+ *
+ * LLTombStone is our proxy object. LLHandle contains an LLPointer to the
+ * LLTombStone, so every copy of an LLHandle increments the LLTombStone's ref
+ * count as usual.
+ *
+ * One copy of the LLHandle, specifically the LLRootHandle, must be stored in
+ * the referenced object. Destroying the LLRootHandle is what NULLs the
+ * proxy's target pointer.
+ *
+ * Minor optimization: we want LLHandle's mTombStone to always be a valid
+ * LLPointer, saving some conditionals in dereferencing. That's the
+ * getDefaultTombStone() mechanism. The default LLTombStone object's target
+ * pointer is always NULL, so it's semantically identical to allowing
+ * mTombStone to be invalid.
+ */
template <typename T>
class LLHandle
{
@@ -108,6 +134,14 @@ private:
}
};
+/**
+ * LLRootHandle isa LLHandle which must be stored in the referenced object.
+ * You can either store it directly and explicitly bind(this), or derive from
+ * LLHandleProvider (q.v.) which automates that for you. The essential point
+ * is that destroying the LLRootHandle (as a consequence of destroying the
+ * referenced object) calls unbind(), setting the LLTombStone's target pointer
+ * NULL.
+ */
template <typename T>
class LLRootHandle : public LLHandle<T>
{
@@ -144,8 +178,10 @@ private:
LLRootHandle(const LLRootHandle& other) {};
};
-// Use this as a mixin for simple classes that need handles and when you don't
-// want handles at multiple points of the inheritance hierarchy
+/**
+ * Use this as a mixin for simple classes that need handles and when you don't
+ * want handles at multiple points of the inheritance hierarchy
+ */
template <typename T>
class LLHandleProvider
{
diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp
index 057257057f..b82d52797e 100644
--- a/indra/llcommon/llstat.cpp
+++ b/indra/llcommon/llstat.cpp
@@ -40,7 +40,6 @@
S32 LLPerfBlock::sStatsFlags = LLPerfBlock::LLSTATS_NO_OPTIONAL_STATS; // Control what is being recorded
LLPerfBlock::stat_map_t LLPerfBlock::sStatMap; // Map full path string to LLStatTime objects, tracks all active objects
std::string LLPerfBlock::sCurrentStatPath = ""; // Something like "/total_time/physics/physics step"
-LLStat::stat_map_t LLStat::sStatList;
//------------------------------------------------------------------------
// Live config file to trigger stats logging
@@ -771,13 +770,19 @@ void LLStat::init()
if (!mName.empty())
{
- stat_map_t::iterator iter = sStatList.find(mName);
- if (iter != sStatList.end())
+ stat_map_t::iterator iter = getStatList().find(mName);
+ if (iter != getStatList().end())
llwarns << "LLStat with duplicate name: " << mName << llendl;
- sStatList.insert(std::make_pair(mName, this));
+ getStatList().insert(std::make_pair(mName, this));
}
}
+LLStat::stat_map_t& LLStat::getStatList()
+{
+ static LLStat::stat_map_t stat_list;
+ return stat_list;
+}
+
LLStat::LLStat(const U32 num_bins, const BOOL use_frame_timer)
: mUseFrameTimer(use_frame_timer),
mNumBins(num_bins)
@@ -803,10 +808,10 @@ LLStat::~LLStat()
if (!mName.empty())
{
// handle multiple entries with the same name
- stat_map_t::iterator iter = sStatList.find(mName);
- while (iter != sStatList.end() && iter->second != this)
+ stat_map_t::iterator iter = getStatList().find(mName);
+ while (iter != getStatList().end() && iter->second != this)
++iter;
- sStatList.erase(iter);
+ getStatList().erase(iter);
}
}
diff --git a/indra/llcommon/llstat.h b/indra/llcommon/llstat.h
index b877432e86..1a8404cc07 100644
--- a/indra/llcommon/llstat.h
+++ b/indra/llcommon/llstat.h
@@ -263,9 +263,9 @@ class LL_COMMON_API LLStat
{
private:
typedef std::multimap<std::string, LLStat*> stat_map_t;
- static stat_map_t sStatList;
void init();
+ static stat_map_t& getStatList();
public:
LLStat(U32 num_bins = 32, BOOL use_frame_timer = FALSE);
@@ -342,8 +342,8 @@ public:
static LLStat* getStat(const std::string& name)
{
// return the first stat that matches 'name'
- stat_map_t::iterator iter = sStatList.find(name);
- if (iter != sStatList.end())
+ stat_map_t::iterator iter = getStatList().find(name);
+ if (iter != getStatList().end())
return iter->second;
else
return NULL;
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 6775b005f4..e6b838c5b2 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -292,11 +292,16 @@ LLImageRaw::LLImageRaw(U16 width, U16 height, S8 components)
++sRawImageCount;
}
-LLImageRaw::LLImageRaw(U8 *data, U16 width, U16 height, S8 components)
+LLImageRaw::LLImageRaw(U8 *data, U16 width, U16 height, S8 components, bool no_copy)
: LLImageBase()
{
mMemType = LLMemType::MTYPE_IMAGERAW;
- if(allocateDataSize(width, height, components))
+
+ if(no_copy)
+ {
+ setDataAndSize(data, width, height, components);
+ }
+ else if(allocateDataSize(width, height, components))
{
memcpy(getData(), data, width*height*components);
}
diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h
index 46e6d1a901..99023351c2 100644
--- a/indra/llimage/llimage.h
+++ b/indra/llimage/llimage.h
@@ -189,7 +189,7 @@ protected:
public:
LLImageRaw();
LLImageRaw(U16 width, U16 height, S8 components);
- LLImageRaw(U8 *data, U16 width, U16 height, S8 components);
+ LLImageRaw(U8 *data, U16 width, U16 height, S8 components, bool no_copy = false);
// Construct using createFromFile (used by tools)
//LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only = false);
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
index 452aad25cb..452aad25cb 100644..100755
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
index 433076c7a9..a871bcbb25 100644
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -193,8 +193,6 @@ void LLParcel::init(const LLUUID &owner_id,
mMediaWidth = 0;
mMediaHeight = 0;
setMediaCurrentURL(LLStringUtil::null);
- mMediaURLFilterEnable = FALSE;
- mMediaURLFilterList = LLSD::emptyArray();
mMediaAllowNavigate = TRUE;
mMediaURLTimeout = 0.0f;
mMediaPreventCameraZoom = FALSE;
@@ -336,38 +334,6 @@ void LLParcel::setMediaURLResetTimer(F32 time)
mMediaResetTimer.setTimerExpirySec(time);
}
-void LLParcel::setMediaURLFilterList(LLSD list)
-{
- // sanity check LLSD
- // must be array of strings
- if (!list.isArray())
- {
- return;
- }
-
- for (S32 i = 0; i < list.size(); i++)
- {
- if (!list[i].isString())
- return;
- }
-
- // can't be too big
- const S32 MAX_SIZE = 50;
- if (list.size() > MAX_SIZE)
- {
- LLSD new_list = LLSD::emptyArray();
-
- for (S32 i = 0; i < llmin(list.size(), MAX_SIZE); i++)
- {
- new_list.append(list[i]);
- }
-
- list = new_list;
- }
-
- mMediaURLFilterList = list;
-}
-
// virtual
void LLParcel::setLocalID(S32 local_id)
{
@@ -622,34 +588,6 @@ BOOL LLParcel::importAccessEntry(std::istream& input_stream, LLAccessEntry* entr
return input_stream.good();
}
-BOOL LLParcel::importMediaURLFilter(std::istream& input_stream, std::string& url)
-{
- skip_to_end_of_next_keyword("{", input_stream);
-
- while(input_stream.good())
- {
- skip_comments_and_emptyspace(input_stream);
- std::string line, keyword, value;
- get_line(line, input_stream, MAX_STRING);
- get_keyword_and_value(keyword, value, line);
-
- if ("}" == keyword)
- {
- break;
- }
- else if ("url" == keyword)
- {
- url = value;
- }
- else
- {
- llwarns << "Unknown keyword in parcel media url filter section: <"
- << keyword << ">" << llendl;
- }
- }
- return input_stream.good();
-}
-
// Assumes we are in a block "ParcelData"
void LLParcel::packMessage(LLMessageSystem* msg)
{
@@ -696,8 +634,6 @@ void LLParcel::packMessage(LLSD& msg)
msg["media_allow_navigate"] = getMediaAllowNavigate();
msg["media_prevent_camera_zoom"] = getMediaPreventCameraZoom();
msg["media_url_timeout"] = getMediaURLTimeout();
- msg["media_url_filter_enable"] = getMediaURLFilterEnable();
- msg["media_url_filter_list"] = getMediaURLFilterList();
msg["group_id"] = getGroupID();
msg["pass_price"] = mPassPrice;
msg["pass_hours"] = mPassHours;
@@ -789,7 +725,6 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
msg->getString("MediaLinkSharing", "MediaCurrentURL", buffer);
setMediaCurrentURL(buffer);
msg->getU8 ( "MediaLinkSharing", "MediaAllowNavigate", mMediaAllowNavigate );
- msg->getU8 ( "MediaLinkSharing", "MediaURLFilterEnable", mMediaURLFilterEnable );
msg->getU8 ( "MediaLinkSharing", "MediaPreventCameraZoom", mMediaPreventCameraZoom );
msg->getF32( "MediaLinkSharing", "MediaURLTimeout", mMediaURLTimeout);
}
@@ -1250,8 +1185,6 @@ void LLParcel::clearParcel()
mMediaWidth = 0;
mMediaHeight = 0;
setMediaCurrentURL(LLStringUtil::null);
- setMediaURLFilterList(LLSD::emptyArray());
- setMediaURLFilterEnable(FALSE);
setMediaAllowNavigate(TRUE);
setMediaPreventCameraZoom(FALSE);
setMediaURLTimeout(0.0f);
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
index f0b2caca3d..499f690e76 100644
--- a/indra/llinventory/llparcel.h
+++ b/indra/llinventory/llparcel.h
@@ -247,8 +247,6 @@ public:
void setMediaWidth(S32 width);
void setMediaHeight(S32 height);
void setMediaCurrentURL(const std::string& url);
- void setMediaURLFilterEnable(U8 enable) { mMediaURLFilterEnable = enable; }
- void setMediaURLFilterList(LLSD list);
void setMediaAllowNavigate(U8 enable) { mMediaAllowNavigate = enable; }
void setMediaURLTimeout(F32 timeout) { mMediaURLTimeout = timeout; }
void setMediaPreventCameraZoom(U8 enable) { mMediaPreventCameraZoom = enable; }
@@ -310,7 +308,6 @@ public:
// BOOL importStream(std::istream& input_stream);
BOOL importAccessEntry(std::istream& input_stream, LLAccessEntry* entry);
- BOOL importMediaURLFilter(std::istream& input_stream, std::string& url);
// BOOL exportStream(std::ostream& output_stream);
void packMessage(LLMessageSystem* msg);
@@ -354,8 +351,6 @@ public:
U8 getMediaAutoScale() const { return mMediaAutoScale; }
U8 getMediaLoop() const { return mMediaLoop; }
const std::string& getMediaCurrentURL() const { return mMediaCurrentURL; }
- U8 getMediaURLFilterEnable() const { return mMediaURLFilterEnable; }
- LLSD getMediaURLFilterList() const { return mMediaURLFilterList; }
U8 getMediaAllowNavigate() const { return mMediaAllowNavigate; }
F32 getMediaURLTimeout() const { return mMediaURLTimeout; }
U8 getMediaPreventCameraZoom() const { return mMediaPreventCameraZoom; }
@@ -651,8 +646,6 @@ protected:
U8 mMediaLoop;
std::string mMediaCurrentURL;
LLUUID mMediaID;
- U8 mMediaURLFilterEnable;
- LLSD mMediaURLFilterList;
U8 mMediaAllowNavigate;
U8 mMediaPreventCameraZoom;
F32 mMediaURLTimeout;
diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp
index cf88de12b4..0c0a844b73 100644
--- a/indra/llkdu/llimagej2ckdu.cpp
+++ b/indra/llkdu/llimagej2ckdu.cpp
@@ -1179,7 +1179,7 @@ LLKDUDecodeState::LLKDUDecodeState(kdu_tile tile, kdu_byte *buf, S32 row_gap)
llassert(mDims == comp_dims); // Safety check; the caller has ensured this
}
bool use_shorts = (mComps[c].get_bit_depth(true) <= 16);
- mLines[c].pre_create(&mAllocator,mDims.size.x,mReversible[c],use_shorts);
+ mLines[c].pre_create(&mAllocator,mDims.size.x,mReversible[c],use_shorts,0,0);
if (res.which() == 0) // No DWT levels used
{
mEngines[c] = kdu_decoder(res.access_subband(LL_BAND),&mAllocator,use_shorts);
@@ -1223,7 +1223,7 @@ separation between consecutive rows in the real buffer. */
{
for (c = 0; c < mNumComponents; c++)
{
- mEngines[c].pull(mLines[c],true);
+ mEngines[c].pull(mLines[c]);
}
if ((mNumComponents >= 3) && mUseYCC)
{
diff --git a/indra/llkdu/llimagej2ckdu.h b/indra/llkdu/llimagej2ckdu.h
index 9ab0b9e4a7..fb1f6535ba 100644
--- a/indra/llkdu/llimagej2ckdu.h
+++ b/indra/llkdu/llimagej2ckdu.h
@@ -32,6 +32,7 @@
//
// KDU core header files
//
+#define KDU_NO_THREADS
#include "kdu_elementary.h"
#include "kdu_messaging.h"
#include "kdu_params.h"
diff --git a/indra/llkdu/llkdumem.h b/indra/llkdu/llkdumem.h
index 9d923fc367..dbdf88b2d9 100644
--- a/indra/llkdu/llkdumem.h
+++ b/indra/llkdu/llkdumem.h
@@ -28,6 +28,7 @@
#define LL_LLKDUMEM_H
// Support classes for reading and writing from memory buffers in KDU
+#define KDU_NO_THREADS
#include "kdu_image.h"
#include "kdu_elementary.h"
#include "kdu_messaging.h"
diff --git a/indra/llkdu/tests/llimagej2ckdu_test.cpp b/indra/llkdu/tests/llimagej2ckdu_test.cpp
index beee99a522..b675153b2e 100644..100755
--- a/indra/llkdu/tests/llimagej2ckdu_test.cpp
+++ b/indra/llkdu/tests/llimagej2ckdu_test.cpp
@@ -127,7 +127,6 @@ kdu_subband kdu_resolution::access_subband(int ) { kdu_subband a; return a; }
void kdu_resolution::get_dims(kdu_dims& ) { }
int kdu_resolution::which() { return 0; }
int kdu_resolution::get_valid_band_indices(int &) { return 1; }
-kdu_decoder::kdu_decoder(kdu_subband , kdu_sample_allocator*, bool , float, int, kdu_thread_env*, kdu_thread_queue*) { }
kdu_synthesis::kdu_synthesis(kdu_resolution, kdu_sample_allocator*, bool, float, kdu_thread_env*, kdu_thread_queue*) { }
kdu_params::kdu_params(const char*, bool, bool, bool, bool, bool) { }
kdu_params::~kdu_params() { }
@@ -153,7 +152,6 @@ void kdu_codestream::destroy() { }
void kdu_codestream::collect_timing_stats(int ) { }
void kdu_codestream::set_max_bytes(kdu_long, bool, bool ) { }
void kdu_codestream::get_valid_tiles(kdu_dims& ) { }
-void kdu_codestream::create(siz_params*, kdu_compressed_target*, kdu_dims*, int, kdu_long ) { }
void kdu_codestream::create(kdu_compressed_source*, kdu_thread_env*) { }
void kdu_codestream::apply_input_restrictions( int, int, int, int, kdu_dims*, kdu_component_access_mode ) { }
void kdu_codestream::get_subsampling(int , kdu_coords&, bool ) { }
@@ -175,7 +173,7 @@ kdu_block* kdu_subband::open_block(kdu_coords, int*, kdu_thread_env*) { return N
bool kdu_codestream_comment::put_text(const char*) { return false; }
void kdu_customize_warnings(kdu_message*) { }
void kdu_customize_errors(kdu_message*) { }
-void kdu_convert_ycc_to_rgb(kdu_line_buf&, kdu_line_buf&, kdu_line_buf&, int) { }
+
kdu_long kdu_multi_analysis::create(kdu_codestream, kdu_tile, bool, kdu_roi_image*, bool, int, kdu_thread_env*, kdu_thread_queue*, bool ) { kdu_long a = 0; return a; }
siz_params::siz_params() : kdu_params(NULL, false, false, false, false, false) { }
void siz_params::finalize(bool ) { }
@@ -184,6 +182,21 @@ int siz_params::write_marker_segment(kdu_output*, kdu_params*, int) { return 0;
bool siz_params::check_marker_segment(kdu_uint16, int, kdu_byte a[], int&) { return false; }
bool siz_params::read_marker_segment(kdu_uint16, int, kdu_byte a[], int) { return false; }
+#ifdef LL_LINUX
+// Linux use the old pre KDU v7.0.0
+// *TODO: Supress this legacy stubbs once Linux migrates to v7.0.0
+kdu_decoder::kdu_decoder(kdu_subband , kdu_sample_allocator*, bool , float, int, kdu_thread_env*, kdu_thread_queue*) { }
+void kdu_codestream::create(siz_params*, kdu_compressed_target*, kdu_dims*, int, kdu_long ) { }
+void kdu_convert_ycc_to_rgb(kdu_line_buf&, kdu_line_buf&, kdu_line_buf&, int) { }
+#else
+kdu_decoder::kdu_decoder(kdu_subband , kdu_sample_allocator*, bool , float, int, kdu_thread_env*, kdu_thread_queue*, int) { }
+void kdu_codestream::create(siz_params*, kdu_compressed_target*, kdu_dims*, int, kdu_long, kdu_thread_env* ) { }
+void (*kdu_convert_ycc_to_rgb_rev16)(kdu_int16*,kdu_int16*,kdu_int16*,int);
+void (*kdu_convert_ycc_to_rgb_irrev16)(kdu_int16*,kdu_int16*,kdu_int16*,int);
+void (*kdu_convert_ycc_to_rgb_rev32)(kdu_int32*,kdu_int32*,kdu_int32*,int);
+void (*kdu_convert_ycc_to_rgb_irrev32)(float*,float*,float*,int);
+#endif
+
// -------------------------------------------------------------------------------------------
// TUT
// -------------------------------------------------------------------------------------------
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index 97f2792686..32d9d8bfc3 100644
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
@@ -87,6 +87,9 @@ namespace LLAvatarNameCache
/// Time when unrefreshed cached names were checked last
static F64 sLastExpireCheck;
+ /// Time-to-live for a temp cache entry.
+ const F64 TEMP_CACHE_ENTRY_LIFETIME = 60.0;
+
//-----------------------------------------------------------------------
// Internal methods
//-----------------------------------------------------------------------
@@ -274,7 +277,7 @@ void LLAvatarNameCache::handleAgentError(const LLUUID& agent_id)
{
// there is no existing cache entry, so make a temporary name from legacy
LL_WARNS("AvNameCache") << "LLAvatarNameCache get legacy for agent "
- << agent_id << LL_ENDL;
+ << agent_id << LL_ENDL;
gCacheName->get(agent_id, false, // legacy compatibility
boost::bind(&LLAvatarNameCache::legacyNameCallback,
_1, _2, _3));
@@ -287,13 +290,14 @@ void LLAvatarNameCache::handleAgentError(const LLUUID& agent_id)
// Clear this agent from the pending list
LLAvatarNameCache::sPendingQueue.erase(agent_id);
- const LLAvatarName& av_name = existing->second;
+ LLAvatarName& av_name = existing->second;
LL_DEBUGS("AvNameCache") << "LLAvatarNameCache use cache for agent "
<< agent_id
<< "user '" << av_name.mUsername << "' "
<< "display '" << av_name.mDisplayName << "' "
<< "expires in " << av_name.mExpires - LLFrameTimer::getTotalSeconds() << " seconds"
<< LL_ENDL;
+ av_name.mExpires = LLFrameTimer::getTotalSeconds() + TEMP_CACHE_ENTRY_LIFETIME; // reset expiry time so we don't constantly rerequest.
}
}
@@ -402,10 +406,12 @@ void LLAvatarNameCache::legacyNameCallback(const LLUUID& agent_id,
<< LL_ENDL;
buildLegacyName(full_name, &av_name);
- // Don't add to cache, the data already exists in the legacy name system
- // cache and we don't want or need duplicate storage, because keeping the
- // two copies in sync is complex.
- processName(agent_id, av_name, false);
+ // Add to cache, because if we don't we'll keep rerequesting the
+ // same record forever. buildLegacyName should always guarantee
+ // that these records expire reasonably soon
+ // (in TEMP_CACHE_ENTRY_LIFETIME seconds), so if the failure was due
+ // to something temporary we will eventually request and get the right data.
+ processName(agent_id, av_name, true);
}
void LLAvatarNameCache::requestNamesViaLegacy()
@@ -583,7 +589,7 @@ void LLAvatarNameCache::buildLegacyName(const std::string& full_name,
av_name->mDisplayName = full_name;
av_name->mIsDisplayNameDefault = true;
av_name->mIsTemporaryName = true;
- av_name->mExpires = F64_MAX; // not used because these are not cached
+ av_name->mExpires = LLFrameTimer::getTotalSeconds() + TEMP_CACHE_ENTRY_LIFETIME;
LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::buildLegacyName "
<< full_name
<< LL_ENDL;
@@ -651,8 +657,10 @@ void LLAvatarNameCache::fireSignal(const LLUUID& agent_id,
signal(agent_id, av_name);
}
-void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
+LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
{
+ callback_connection_t connection;
+
if (sRunning)
{
// ...only do immediate lookups when cache is running
@@ -668,7 +676,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
{
// ...name already exists in cache, fire callback now
fireSignal(agent_id, slot, av_name);
- return;
+ return connection;
}
}
}
@@ -681,7 +689,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
LLAvatarName av_name;
buildLegacyName(full_name, &av_name);
fireSignal(agent_id, slot, av_name);
- return;
+ return connection;
}
}
}
@@ -698,15 +706,17 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
{
// ...new callback for this id
callback_signal_t* signal = new callback_signal_t();
- signal->connect(slot);
+ connection = signal->connect(slot);
sSignalMap[agent_id] = signal;
}
else
{
// ...existing callback, bind additional slot
callback_signal_t* signal = sig_it->second;
- signal->connect(slot);
+ connection = signal->connect(slot);
}
+
+ return connection;
}
diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h
index 59c1329ffa..064942fe53 100644
--- a/indra/llmessage/llavatarnamecache.h
+++ b/indra/llmessage/llavatarnamecache.h
@@ -71,10 +71,11 @@ namespace LLAvatarNameCache
void (const LLUUID& agent_id, const LLAvatarName& av_name)>
callback_signal_t;
typedef callback_signal_t::slot_type callback_slot_t;
+ typedef boost::signals2::connection callback_connection_t;
// Fetches name information and calls callback.
// If name information is in cache, callback will be called immediately.
- void get(const LLUUID& agent_id, callback_slot_t slot);
+ callback_connection_t get(const LLUUID& agent_id, callback_slot_t slot);
// Allow display names to be explicitly disabled for testing.
void setUseDisplayNames(bool use);
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index 1743384ad6..f61a853f6c 100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -938,8 +938,8 @@ bool LLCurlThread::CurlRequest::processRequest()
if(!completed)
{
- setPriority(LLQueuedThread::PRIORITY_LOW) ;
- }
+ setPriority(LLQueuedThread::PRIORITY_LOW) ;
+ }
}
return completed ;
@@ -949,7 +949,7 @@ void LLCurlThread::CurlRequest::finishRequest(bool completed)
{
if(mMulti->isDead())
{
- mCurlThread->deleteMulti(mMulti) ;
+ mCurlThread->deleteMulti(mMulti) ;
}
else
{
@@ -993,6 +993,7 @@ void LLCurlThread::killMulti(LLCurl::Multi* multi)
return ;
}
+
multi->markDead() ;
}
@@ -1098,7 +1099,9 @@ void LLCurlRequest::get(const std::string& url, LLCurl::ResponderPtr responder)
{
getByteRange(url, headers_t(), 0, -1, responder);
}
-
+
+// Note: (length==0) is interpreted as "the rest of the file", i.e. the whole file if (offset==0) or
+// the remainder of the file if not.
bool LLCurlRequest::getByteRange(const std::string& url,
const headers_t& headers,
S32 offset, S32 length,
@@ -1116,6 +1119,11 @@ bool LLCurlRequest::getByteRange(const std::string& url,
std::string range = llformat("Range: bytes=%d-%d", offset,offset+length-1);
easy->slist_append(range.c_str());
}
+ else if (offset > 0)
+ {
+ std::string range = llformat("Range: bytes=%d-", offset);
+ easy->slist_append(range.c_str());
+ }
easy->setHeaders();
bool res = addEasy(easy);
return res;
@@ -1241,6 +1249,208 @@ S32 LLCurlRequest::getQueued()
return queued;
}
+LLCurlTextureRequest::LLCurlTextureRequest(S32 concurrency) :
+ LLCurlRequest(),
+ mConcurrency(concurrency),
+ mInQueue(0),
+ mMutex(NULL),
+ mHandleCounter(1),
+ mTotalIssuedRequests(0),
+ mTotalReceivedBits(0)
+{
+ mGlobalTimer.reset();
+}
+
+LLCurlTextureRequest::~LLCurlTextureRequest()
+{
+ mRequestMap.clear();
+
+ for(req_queue_t::iterator iter = mCachedRequests.begin(); iter != mCachedRequests.end(); ++iter)
+ {
+ delete *iter;
+ }
+ mCachedRequests.clear();
+}
+
+//return 0: success
+// > 0: cached handle
+U32 LLCurlTextureRequest::getByteRange(const std::string& url,
+ const headers_t& headers,
+ S32 offset, S32 length, U32 pri,
+ LLCurl::ResponderPtr responder, F32 delay_time)
+{
+ U32 ret_val = 0;
+ bool success = false;
+
+ if(mInQueue < mConcurrency && delay_time < 0.f)
+ {
+ success = LLCurlRequest::getByteRange(url, headers, offset, length, responder);
+ }
+
+ LLMutexLock lock(&mMutex);
+
+ if(success)
+ {
+ mInQueue++;
+ mTotalIssuedRequests++;
+ }
+ else
+ {
+ request_t* request = new request_t(mHandleCounter, url, headers, offset, length, pri, responder);
+ if(delay_time > 0.f)
+ {
+ request->mStartTime = mGlobalTimer.getElapsedTimeF32() + delay_time;
+ }
+
+ mCachedRequests.insert(request);
+ mRequestMap[mHandleCounter] = request;
+ ret_val = mHandleCounter;
+ mHandleCounter++;
+
+ if(!mHandleCounter)
+ {
+ mHandleCounter = 1;
+ }
+ }
+
+ return ret_val;
+}
+
+void LLCurlTextureRequest::completeRequest(S32 received_bytes)
+{
+ LLMutexLock lock(&mMutex);
+
+ llassert_always(mInQueue > 0);
+
+ mInQueue--;
+ mTotalReceivedBits += received_bytes * 8;
+}
+
+void LLCurlTextureRequest::nextRequests()
+{
+ if(mCachedRequests.empty() || mInQueue >= mConcurrency)
+ {
+ return;
+ }
+
+ F32 cur_time = mGlobalTimer.getElapsedTimeF32();
+
+ req_queue_t::iterator iter;
+ {
+ LLMutexLock lock(&mMutex);
+ iter = mCachedRequests.begin();
+ }
+ while(1)
+ {
+ request_t* request = *iter;
+ if(request->mStartTime < cur_time)
+ {
+ if(!LLCurlRequest::getByteRange(request->mUrl, request->mHeaders, request->mOffset, request->mLength, request->mResponder))
+ {
+ break;
+ }
+
+ LLMutexLock lock(&mMutex);
+ ++iter;
+ mInQueue++;
+ mTotalIssuedRequests++;
+ mCachedRequests.erase(request);
+ mRequestMap.erase(request->mHandle);
+ delete request;
+
+ if(iter == mCachedRequests.end() || mInQueue >= mConcurrency)
+ {
+ break;
+ }
+ }
+ else
+ {
+ LLMutexLock lock(&mMutex);
+ ++iter;
+ if(iter == mCachedRequests.end() || mInQueue >= mConcurrency)
+ {
+ break;
+ }
+ }
+ }
+
+ return;
+}
+
+void LLCurlTextureRequest::updatePriority(U32 handle, U32 pri)
+{
+ if(!handle)
+ {
+ return;
+ }
+
+ LLMutexLock lock(&mMutex);
+
+ std::map<S32, request_t*>::iterator iter = mRequestMap.find(handle);
+ if(iter != mRequestMap.end())
+ {
+ request_t* req = iter->second;
+
+ if(req->mPriority != pri)
+ {
+ mCachedRequests.erase(req);
+ req->mPriority = pri;
+ mCachedRequests.insert(req);
+ }
+ }
+}
+
+void LLCurlTextureRequest::removeRequest(U32 handle)
+{
+ if(!handle)
+ {
+ return;
+ }
+
+ LLMutexLock lock(&mMutex);
+
+ std::map<S32, request_t*>::iterator iter = mRequestMap.find(handle);
+ if(iter != mRequestMap.end())
+ {
+ request_t* req = iter->second;
+ mRequestMap.erase(iter);
+ mCachedRequests.erase(req);
+ delete req;
+ }
+}
+
+bool LLCurlTextureRequest::isWaiting(U32 handle)
+{
+ if(!handle)
+ {
+ return false;
+ }
+
+ LLMutexLock lock(&mMutex);
+ return mRequestMap.find(handle) != mRequestMap.end();
+}
+
+U32 LLCurlTextureRequest::getTotalReceivedBits()
+{
+ LLMutexLock lock(&mMutex);
+
+ U32 bits = mTotalReceivedBits;
+ mTotalReceivedBits = 0;
+ return bits;
+}
+
+U32 LLCurlTextureRequest::getTotalIssuedRequests()
+{
+ LLMutexLock lock(&mMutex);
+ return mTotalIssuedRequests;
+}
+
+S32 LLCurlTextureRequest::getNumRequests()
+{
+ LLMutexLock lock(&mMutex);
+ return mInQueue;
+}
+
////////////////////////////////////////////////////////////////////////////
// For generating one easy request
// associated with a single multi request
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index d6a7714d4c..20ebd86c06 100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -414,6 +414,71 @@ private:
BOOL mProcessing;
};
+//for texture fetch only
+class LLCurlTextureRequest : public LLCurlRequest
+{
+public:
+ LLCurlTextureRequest(S32 concurrency);
+ ~LLCurlTextureRequest();
+
+ U32 getByteRange(const std::string& url, const headers_t& headers, S32 offset, S32 length, U32 pri, LLCurl::ResponderPtr responder, F32 delay_time = -1.f);
+ void nextRequests();
+ void completeRequest(S32 received_bytes);
+
+ void updatePriority(U32 handle, U32 pri);
+ void removeRequest(U32 handle);
+
+ U32 getTotalReceivedBits();
+ U32 getTotalIssuedRequests();
+ S32 getNumRequests();
+ bool isWaiting(U32 handle);
+
+private:
+ LLMutex mMutex;
+ S32 mConcurrency;
+ S32 mInQueue; //request currently in queue.
+ U32 mHandleCounter;
+ U32 mTotalIssuedRequests;
+ U32 mTotalReceivedBits;
+
+ typedef struct _request_t
+ {
+ _request_t(U32 handle, const std::string& url, const headers_t& headers, S32 offset, S32 length, U32 pri, LLCurl::ResponderPtr responder) :
+ mHandle(handle), mUrl(url), mHeaders(headers), mOffset(offset), mLength(length), mPriority(pri), mResponder(responder), mStartTime(0.f)
+ {}
+
+ U32 mHandle;
+ std::string mUrl;
+ LLCurlRequest::headers_t mHeaders;
+ S32 mOffset;
+ S32 mLength;
+ LLCurl::ResponderPtr mResponder;
+ U32 mPriority;
+ F32 mStartTime; //start time to issue this request
+ } request_t;
+
+ struct request_compare
+ {
+ bool operator()(const request_t* lhs, const request_t* rhs) const
+ {
+ if(lhs->mPriority != rhs->mPriority)
+ {
+ return lhs->mPriority > rhs->mPriority; // higher priority in front of queue (set)
+ }
+ else
+ {
+ return (U32)lhs < (U32)rhs;
+ }
+ }
+ };
+
+ typedef std::set<request_t*, request_compare> req_queue_t;
+ req_queue_t mCachedRequests;
+ std::map<S32, request_t*> mRequestMap;
+
+ LLFrameTimer mGlobalTimer;
+};
+
class LLCurlEasyRequest
{
public:
diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp
index 30532247ac..6dee192783 100644..100755
--- a/indra/llprimitive/llprimitive.cpp
+++ b/indra/llprimitive/llprimitive.cpp
@@ -149,7 +149,8 @@ bool LLPrimitive::cleanupVolumeManager()
LLPrimitive::LLPrimitive()
: mTextureList(),
mNumTEs(0),
- mMiscFlags(0)
+ mMiscFlags(0),
+ mNumBumpmapTEs(0)
{
mPrimitiveCode = 0;
@@ -237,7 +238,10 @@ void LLPrimitive::setAllTETextures(const LLUUID &tex_id)
//===============================================================
void LLPrimitive::setTE(const U8 index, const LLTextureEntry& te)
{
- mTextureList.copyTexture(index, te);
+ if(mTextureList.copyTexture(index, te) != TEM_CHANGE_NONE && te.getBumpmap() > 0)
+ {
+ mNumBumpmapTEs++;
+ }
}
S32 LLPrimitive::setTETexture(const U8 index, const LLUUID &id)
@@ -316,6 +320,7 @@ S32 LLPrimitive::setTERotation(const U8 index, const F32 r)
//===============================================================
S32 LLPrimitive::setTEBumpShinyFullbright(const U8 index, const U8 bump)
{
+ updateNumBumpmap(index, bump);
return mTextureList.setBumpShinyFullbright(index, bump);
}
@@ -326,11 +331,13 @@ S32 LLPrimitive::setTEMediaTexGen(const U8 index, const U8 media)
S32 LLPrimitive::setTEBumpmap(const U8 index, const U8 bump)
{
+ updateNumBumpmap(index, bump);
return mTextureList.setBumpMap(index, bump);
}
S32 LLPrimitive::setTEBumpShiny(const U8 index, const U8 bump_shiny)
{
+ updateNumBumpmap(index, bump_shiny);
return mTextureList.setBumpShiny(index, bump_shiny);
}
@@ -1445,6 +1452,26 @@ void LLPrimitive::takeTextureList(LLPrimTextureList& other_list)
mTextureList.take(other_list);
}
+void LLPrimitive::updateNumBumpmap(const U8 index, const U8 bump)
+{
+ LLTextureEntry* te = getTE(index);
+ if(!te)
+ {
+ return;
+ }
+
+ U8 old_bump = te->getBumpmap();
+ if(old_bump > 0)
+ {
+ mNumBumpmapTEs--;
+ }
+ if((bump & TEM_BUMP_MASK) > 0)
+ {
+ mNumBumpmapTEs++;
+ }
+
+ return;
+}
//============================================================================
// Moved from llselectmgr.cpp
diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h
index 998016f8f6..8dcaa8c740 100644
--- a/indra/llprimitive/llprimitive.h
+++ b/indra/llprimitive/llprimitive.h
@@ -421,7 +421,8 @@ public:
inline BOOL isAvatar() const;
inline BOOL isSittingAvatar() const;
inline BOOL isSittingAvatarOnGround() const;
-
+ inline bool hasBumpmap() const { return mNumBumpmapTEs > 0;}
+
void setFlags(U32 flags) { mMiscFlags = flags; }
void addFlags(U32 flags) { mMiscFlags |= flags; }
void removeFlags(U32 flags) { mMiscFlags &= ~flags; }
@@ -435,6 +436,9 @@ public:
inline static BOOL isPrimitive(const LLPCode pcode);
inline static BOOL isApp(const LLPCode pcode);
+private:
+ void updateNumBumpmap(const U8 index, const U8 bump);
+
protected:
LLPCode mPrimitiveCode; // Primitive code
LLVector3 mVelocity; // how fast are we moving?
@@ -444,6 +448,7 @@ protected:
LLPrimTextureList mTextureList; // list of texture GUIDs, scales, offsets
U8 mMaterial; // Material code
U8 mNumTEs; // # of faces on the primitve
+ U8 mNumBumpmapTEs; // number of bumpmap TEs.
U32 mMiscFlags; // home for misc bools
public:
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index a0727b8686..509de51f4d 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -993,7 +993,12 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);
}
#endif
+#if __MAC_OS_X_VERSION_MAX_ALLOWED <= 1070
+#include <OpenGL/gl.h>
+#else
#include <AGL/gl.h>
+#endif
+
#endif // LL_MESA / LL_WINDOWS / LL_DARWIN
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index a842211764..a4d7872ec2 100644..100755
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -478,7 +478,7 @@ bool LLImageGL::checkSize(S32 width, S32 height)
return check_power_of_two(width) && check_power_of_two(height);
}
-void LLImageGL::setSize(S32 width, S32 height, S32 ncomponents)
+void LLImageGL::setSize(S32 width, S32 height, S32 ncomponents, S32 discard_level)
{
if (width != mWidth || height != mHeight || ncomponents != mComponents)
{
@@ -511,6 +511,11 @@ void LLImageGL::setSize(S32 width, S32 height, S32 ncomponents)
width >>= 1;
height >>= 1;
}
+
+ if(discard_level > 0)
+ {
+ mMaxDiscardLevel = llmax(mMaxDiscardLevel, (S8)discard_level);
+ }
}
else
{
@@ -860,14 +865,13 @@ BOOL LLImageGL::preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image)
llassert(mCurrentDiscardLevel >= 0);
discard_level = mCurrentDiscardLevel;
}
- discard_level = llclamp(discard_level, 0, (S32)mMaxDiscardLevel);
-
+
// Actual image width/height = raw image width/height * 2^discard_level
S32 w = raw_image->getWidth() << discard_level;
S32 h = raw_image->getHeight() << discard_level;
// setSize may call destroyGLTexture if the size does not match
- setSize(w, h, raw_image->getComponents());
+ setSize(w, h, raw_image->getComponents(), discard_level);
if( !mHasExplicitFormat )
{
@@ -1264,8 +1268,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S
llassert(mCurrentDiscardLevel >= 0);
discard_level = mCurrentDiscardLevel;
}
- discard_level = llclamp(discard_level, 0, (S32)mMaxDiscardLevel);
-
+
// Actual image width/height = raw image width/height * 2^discard_level
S32 raw_w = imageraw->getWidth() ;
S32 raw_h = imageraw->getHeight() ;
@@ -1273,7 +1276,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S
S32 h = raw_h << discard_level;
// setSize may call destroyGLTexture if the size does not match
- setSize(w, h, imageraw->getComponents());
+ setSize(w, h, imageraw->getComponents(), discard_level);
if( !mHasExplicitFormat )
{
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index e118c28c1b..cf3c484c79 100644..100755
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -100,7 +100,7 @@ protected:
public:
virtual void dump(); // debugging info to llinfos
- void setSize(S32 width, S32 height, S32 ncomponents);
+ void setSize(S32 width, S32 height, S32 ncomponents, S32 discard_level = -1);
void setComponents(S32 ncomponents) { mComponents = (S8)ncomponents ;}
void setAllowCompression(bool allow) { mAllowCompression = allow; }
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index cca4ca3981..d92b6aa1c0 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -155,7 +155,6 @@ set(llui_HEADER_FILES
llflyoutbutton.h
llfocusmgr.h
llfunctorregistry.h
- llhandle.h
llhelp.h
lliconctrl.h
llkeywords.h
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 8ca1e685a9..90251ac7c6 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -748,6 +748,10 @@ void LLFloater::closeFloater(bool app_quitting)
dependee->setFocus(TRUE);
}
}
+
+ // STORM-1879: since this floater has focus, treat the closeFloater- call
+ // like a click on the close-button, and close gear- and contextmenus
+ LLMenuGL::sMenuContainer->hideMenus();
}
dirtyRect();
diff --git a/indra/llui/lltoggleablemenu.cpp b/indra/llui/lltoggleablemenu.cpp
index d29260750f..e4d1a37569 100644
--- a/indra/llui/lltoggleablemenu.cpp
+++ b/indra/llui/lltoggleablemenu.cpp
@@ -57,7 +57,9 @@ void LLToggleableMenu::handleVisibilityChange (BOOL curVisibilityIn)
S32 x,y;
LLUI::getMousePositionLocal(LLUI::getRootView(), &x, &y);
- if (!curVisibilityIn && mButtonRect.pointInRect(x, y))
+ // STORM-1879: also check MouseCapture to see if the button was really
+ // clicked (otherwise the VisibilityChange was triggered via keyboard shortcut)
+ if (!curVisibilityIn && mButtonRect.pointInRect(x, y) && gFocusMgr.getMouseCapture())
{
mClosedByButtonClick = true;
}
diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp
index cb3b7abb14..74ed72ef97 100644
--- a/indra/llui/tests/llurlentry_stub.cpp
+++ b/indra/llui/tests/llurlentry_stub.cpp
@@ -40,9 +40,10 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
return false;
}
-void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
+LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
{
- return;
+ callback_connection_t connection;
+ return connection;
}
bool LLAvatarNameCache::useDisplayNames()
diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h
index 5ee8bdb542..3b1883b5d8 100644
--- a/indra/llvfs/lldir.h
+++ b/indra/llvfs/lldir.h
@@ -1,4 +1,4 @@
-/**
+/**
* @file lldir.h
* @brief Definition of directory utilities class
*
diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp
index 489bc3e4a7..9f60111275 100644
--- a/indra/llvfs/lldir_mac.cpp
+++ b/indra/llvfs/lldir_mac.cpp
@@ -22,7 +22,7 @@
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
- */
+ */
#if LL_DARWIN
diff --git a/indra/llvfs/lldir_mac.h b/indra/llvfs/lldir_mac.h
index d190d70be4..64e9485757 100644
--- a/indra/llvfs/lldir_mac.h
+++ b/indra/llvfs/lldir_mac.h
@@ -22,7 +22,7 @@
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
- */
+ */
#if !LL_DARWIN
#error This header must not be included when compiling for any target other than Mac OS. Consider including lldir.h instead.
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index 32bb84cba5..97637c937f 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -2809,42 +2809,48 @@ const char* cursorIDToName(int id)
{
switch (id)
{
- case UI_CURSOR_ARROW: return "UI_CURSOR_ARROW";
- case UI_CURSOR_WAIT: return "UI_CURSOR_WAIT";
- case UI_CURSOR_HAND: return "UI_CURSOR_HAND";
- case UI_CURSOR_IBEAM: return "UI_CURSOR_IBEAM";
- case UI_CURSOR_CROSS: return "UI_CURSOR_CROSS";
- case UI_CURSOR_SIZENWSE: return "UI_CURSOR_SIZENWSE";
- case UI_CURSOR_SIZENESW: return "UI_CURSOR_SIZENESW";
- case UI_CURSOR_SIZEWE: return "UI_CURSOR_SIZEWE";
- case UI_CURSOR_SIZENS: return "UI_CURSOR_SIZENS";
- case UI_CURSOR_NO: return "UI_CURSOR_NO";
- case UI_CURSOR_WORKING: return "UI_CURSOR_WORKING";
- case UI_CURSOR_TOOLGRAB: return "UI_CURSOR_TOOLGRAB";
- case UI_CURSOR_TOOLLAND: return "UI_CURSOR_TOOLLAND";
- case UI_CURSOR_TOOLFOCUS: return "UI_CURSOR_TOOLFOCUS";
- case UI_CURSOR_TOOLCREATE: return "UI_CURSOR_TOOLCREATE";
- case UI_CURSOR_ARROWDRAG: return "UI_CURSOR_ARROWDRAG";
- case UI_CURSOR_ARROWCOPY: return "UI_CURSOR_ARROWCOPY";
- case UI_CURSOR_ARROWDRAGMULTI: return "UI_CURSOR_ARROWDRAGMULTI";
- case UI_CURSOR_ARROWCOPYMULTI: return "UI_CURSOR_ARROWCOPYMULTI";
- case UI_CURSOR_NOLOCKED: return "UI_CURSOR_NOLOCKED";
- case UI_CURSOR_ARROWLOCKED: return "UI_CURSOR_ARROWLOCKED";
- case UI_CURSOR_GRABLOCKED: return "UI_CURSOR_GRABLOCKED";
- case UI_CURSOR_TOOLTRANSLATE: return "UI_CURSOR_TOOLTRANSLATE";
- case UI_CURSOR_TOOLROTATE: return "UI_CURSOR_TOOLROTATE";
- case UI_CURSOR_TOOLSCALE: return "UI_CURSOR_TOOLSCALE";
- case UI_CURSOR_TOOLCAMERA: return "UI_CURSOR_TOOLCAMERA";
- case UI_CURSOR_TOOLPAN: return "UI_CURSOR_TOOLPAN";
- case UI_CURSOR_TOOLZOOMIN: return "UI_CURSOR_TOOLZOOMIN";
- case UI_CURSOR_TOOLPICKOBJECT3: return "UI_CURSOR_TOOLPICKOBJECT3";
- case UI_CURSOR_TOOLPLAY: return "UI_CURSOR_TOOLPLAY";
- case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE";
- case UI_CURSOR_TOOLMEDIAOPEN: return "UI_CURSOR_TOOLMEDIAOPEN";
- case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE";
- case UI_CURSOR_TOOLSIT: return "UI_CURSOR_TOOLSIT";
- case UI_CURSOR_TOOLBUY: return "UI_CURSOR_TOOLBUY";
- case UI_CURSOR_TOOLOPEN: return "UI_CURSOR_TOOLOPEN";
+ case UI_CURSOR_ARROW: return "UI_CURSOR_ARROW";
+ case UI_CURSOR_WAIT: return "UI_CURSOR_WAIT";
+ case UI_CURSOR_HAND: return "UI_CURSOR_HAND";
+ case UI_CURSOR_IBEAM: return "UI_CURSOR_IBEAM";
+ case UI_CURSOR_CROSS: return "UI_CURSOR_CROSS";
+ case UI_CURSOR_SIZENWSE: return "UI_CURSOR_SIZENWSE";
+ case UI_CURSOR_SIZENESW: return "UI_CURSOR_SIZENESW";
+ case UI_CURSOR_SIZEWE: return "UI_CURSOR_SIZEWE";
+ case UI_CURSOR_SIZENS: return "UI_CURSOR_SIZENS";
+ case UI_CURSOR_NO: return "UI_CURSOR_NO";
+ case UI_CURSOR_WORKING: return "UI_CURSOR_WORKING";
+ case UI_CURSOR_TOOLGRAB: return "UI_CURSOR_TOOLGRAB";
+ case UI_CURSOR_TOOLLAND: return "UI_CURSOR_TOOLLAND";
+ case UI_CURSOR_TOOLFOCUS: return "UI_CURSOR_TOOLFOCUS";
+ case UI_CURSOR_TOOLCREATE: return "UI_CURSOR_TOOLCREATE";
+ case UI_CURSOR_ARROWDRAG: return "UI_CURSOR_ARROWDRAG";
+ case UI_CURSOR_ARROWCOPY: return "UI_CURSOR_ARROWCOPY";
+ case UI_CURSOR_ARROWDRAGMULTI: return "UI_CURSOR_ARROWDRAGMULTI";
+ case UI_CURSOR_ARROWCOPYMULTI: return "UI_CURSOR_ARROWCOPYMULTI";
+ case UI_CURSOR_NOLOCKED: return "UI_CURSOR_NOLOCKED";
+ case UI_CURSOR_ARROWLOCKED: return "UI_CURSOR_ARROWLOCKED";
+ case UI_CURSOR_GRABLOCKED: return "UI_CURSOR_GRABLOCKED";
+ case UI_CURSOR_TOOLTRANSLATE: return "UI_CURSOR_TOOLTRANSLATE";
+ case UI_CURSOR_TOOLROTATE: return "UI_CURSOR_TOOLROTATE";
+ case UI_CURSOR_TOOLSCALE: return "UI_CURSOR_TOOLSCALE";
+ case UI_CURSOR_TOOLCAMERA: return "UI_CURSOR_TOOLCAMERA";
+ case UI_CURSOR_TOOLPAN: return "UI_CURSOR_TOOLPAN";
+ case UI_CURSOR_TOOLZOOMIN: return "UI_CURSOR_TOOLZOOMIN";
+ case UI_CURSOR_TOOLPICKOBJECT3: return "UI_CURSOR_TOOLPICKOBJECT3";
+ case UI_CURSOR_TOOLPLAY: return "UI_CURSOR_TOOLPLAY";
+ case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE";
+ case UI_CURSOR_TOOLMEDIAOPEN: return "UI_CURSOR_TOOLMEDIAOPEN";
+ case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE";
+ case UI_CURSOR_TOOLSIT: return "UI_CURSOR_TOOLSIT";
+ case UI_CURSOR_TOOLBUY: return "UI_CURSOR_TOOLBUY";
+ case UI_CURSOR_TOOLOPEN: return "UI_CURSOR_TOOLOPEN";
+ case UI_CURSOR_TOOLPATHFINDING: return "UI_CURSOR_PATHFINDING";
+ case UI_CURSOR_TOOLPATHFINDING_PATH_START: return "UI_CURSOR_PATHFINDING_START";
+ case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD: return "UI_CURSOR_PATHFINDING_START_ADD";
+ case UI_CURSOR_TOOLPATHFINDING_PATH_END: return "UI_CURSOR_PATHFINDING_END";
+ case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD: return "UI_CURSOR_PATHFINDING_END_ADD";
+ case UI_CURSOR_TOOLNO: return "UI_CURSOR_NO";
}
llerrs << "cursorIDToName: unknown cursor id" << id << llendl;
@@ -2950,6 +2956,12 @@ void LLWindowMacOSX::updateCursor()
case UI_CURSOR_TOOLSIT:
case UI_CURSOR_TOOLBUY:
case UI_CURSOR_TOOLOPEN:
+ case UI_CURSOR_TOOLPATHFINDING:
+ case UI_CURSOR_TOOLPATHFINDING_PATH_START:
+ case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD:
+ case UI_CURSOR_TOOLPATHFINDING_PATH_END:
+ case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD:
+ case UI_CURSOR_TOOLNO:
result = setImageCursor(gCursors[mNextCursor]);
break;
@@ -2994,6 +3006,12 @@ void LLWindowMacOSX::initCursors()
initPixmapCursor(UI_CURSOR_TOOLSIT, 20, 15);
initPixmapCursor(UI_CURSOR_TOOLBUY, 20, 15);
initPixmapCursor(UI_CURSOR_TOOLOPEN, 20, 15);
+ initPixmapCursor(UI_CURSOR_TOOLPATHFINDING, 16, 16);
+ initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START, 16, 16);
+ initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD, 16, 16);
+ initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END, 16, 16);
+ initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD, 16, 16);
+ initPixmapCursor(UI_CURSOR_TOOLNO, 8, 8);
initPixmapCursor(UI_CURSOR_SIZENWSE, 10, 10);
initPixmapCursor(UI_CURSOR_SIZENESW, 10, 10);
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 3d33af9d9b..3bf4a48cb6 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -2117,6 +2117,12 @@ void LLWindowSDL::initCursors()
mSDLCursors[UI_CURSOR_TOOLSIT] = makeSDLCursorFromBMP("toolsit.BMP",20,15);
mSDLCursors[UI_CURSOR_TOOLBUY] = makeSDLCursorFromBMP("toolbuy.BMP",20,15);
mSDLCursors[UI_CURSOR_TOOLOPEN] = makeSDLCursorFromBMP("toolopen.BMP",20,15);
+ mSDLCursors[UI_CURSOR_TOOLPATHFINDING] = makeSDLCursorFromBMP("lltoolpathfinding.BMP", 16, 16);
+ mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START] = makeSDLCursorFromBMP("lltoolpathfindingpathstart.BMP", 16, 16);
+ mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathstartadd.BMP", 16, 16);
+ mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END] = makeSDLCursorFromBMP("lltoolpathfindingpathend.BMP", 16, 16);
+ mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathendadd.BMP", 16, 16);
+ mSDLCursors[UI_CURSOR_TOOLNO] = makeSDLCursorFromBMP("llno.BMP",8,8);
if (getenv("LL_ATI_MOUSE_CURSOR_BUG") != NULL) {
llinfos << "Disabling cursor updating due to LL_ATI_MOUSE_CURSOR_BUG" << llendl;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 0a158dc481..6a64b6af6b 100644..100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -46,7 +46,10 @@ include(VisualLeakDetector)
include(GLOD)
include(CMakeCopyIfDifferent)
-add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions)
+if (NOT HAVOK_TPV)
+ # When using HAVOK_TPV, the library is precompiled, so no need for this
+ add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions)
+endif (NOT HAVOK_TPV)
include_directories(
${DBUSGLIB_INCLUDE_DIRS}
@@ -1957,6 +1960,12 @@ if (DARWIN)
)
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-updater mac-crash-logger)
+
+ if (ENABLE_SIGNING)
+ set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}")
+ else (ENABLE_SIGNING)
+ set(SIGNING_SETTING "")
+ endif (ENABLE_SIGNING)
if (PACKAGE)
add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
@@ -1976,6 +1985,7 @@ if (DARWIN)
--login_channel=${VIEWER_LOGIN_CHANNEL}
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
+ ${SIGNING_SETTING}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
)
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index 711191128b..7ab7787d77 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -357,7 +357,7 @@
<key>count</key>
<integer>1</integer>
<key>map-to</key>
- <string>SkinFolder</string>
+ <string>SkinCurrent</string>
</map>
<key>slurl</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 3df2b47310..190dd5e2d5 100644..100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3270,6 +3270,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>FastCacheFetchEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable texture fast cache fetching if set</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <string>1</string>
+ </map>
<key>FeatureManagerHTTPTable</key>
<map>
<key>Comment</key>
@@ -5023,7 +5034,7 @@
<key>LoginLocation</key>
<map>
<key>Comment</key>
- <string>Login location ('last', 'home')</string>
+ <string>Default Login location ('last', 'home') preference</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -6123,7 +6134,7 @@
<key>NextLoginLocation</key>
<map>
<key>Comment</key>
- <string>Location to log into by default.</string>
+ <string>Location to log into for this session - set from command line or the login panel, cleared following a successfull login.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -10800,6 +10811,83 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>TextureFetchSource</key>
+ <map>
+ <key>Comment</key>
+ <string>Debug use: Source to fetch textures</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>TextureFetchUpdateHighPriority</key>
+ <map>
+ <key>Comment</key>
+ <string>Number of high priority textures to update per frame</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>32</integer>
+ </map>
+ <key>TextureFetchUpdateMaxMediumPriority</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of medium priority textures to update per frame</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>256</integer>
+ </map>
+ <key>TextureFetchUpdateMinMediumPriority</key>
+ <map>
+ <key>Comment</key>
+ <string>Minimum number of medium priority textures to update per frame</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>32</integer>
+ </map>
+ <key>TextureFetchUpdatePriorityThreshold</key>
+ <map>
+ <key>Comment</key>
+ <string>Threshold under which textures will be considered too low priority and skipped for update</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <integer>0.0</integer>
+ </map>
+ <key>TextureFetchUpdateSkipLowPriority</key>
+ <map>
+ <key>Comment</key>
+ <string>Flag indicating if we want to skip textures with too low of a priority</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>TextureFetchUpdatePriorities</key>
+ <map>
+ <key>Comment</key>
+ <string>Number of priority texture to update per frame</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>32</integer>
+ </map>
<key>TextureLoadFullRes</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
index 46d2aa4877..bfd9b9b3eb 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
@@ -46,6 +46,6 @@ void main()
frag_data[0] = vec4(diff.rgb, 0.0);
frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
index 680eadb852..23c4ea2fff 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
@@ -52,5 +52,5 @@ void main()
frag_data[1] = vertex_color.aaaa; // spec
//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
vec3 nvn = normalize(tnorm);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
index b2027d3a5d..c1fa9e4aac 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
@@ -49,6 +49,6 @@ void main()
frag_data[0] = vec4(col.rgb, 0.0);
frag_data[1] = vec4(0,0,0,0); // spec
vec3 nvn = normalize(vary_normal);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
index ead384b07c..4c68123fac 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
@@ -48,5 +48,5 @@ void main()
frag_data[0] = vec4(col.rgb, 0.0);
frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
index f73fa6f231..ad65c7d330 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
@@ -49,6 +49,6 @@ void main()
frag_data[0] = vec4(col.rgb, 0.0);
frag_data[1] = vec4(0,0,0,0); // spec
vec3 nvn = normalize(vary_normal);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
index 227aa2aae3..86390bdd83 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
@@ -42,6 +42,6 @@ void main()
frag_data[1] = vertex_color.aaaa; // spec
//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
vec3 nvn = normalize(vary_normal);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
index d442e5403a..788b966af8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
@@ -41,5 +41,5 @@ void main()
frag_data[1] = vertex_color.aaaa; // spec
//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
vec3 nvn = normalize(vary_normal);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
index 4d01eeb64e..7e79317543 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -79,7 +79,7 @@ void main()
}
vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
- norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+ norm = (norm.xyz-0.5)*2.0; // unpack norm
norm = normalize(norm);
vec4 spec = texture2DRect(specularRect, frag.xy);
vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
index f671d5b750..75757b26c8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
@@ -84,7 +84,7 @@ void main()
}
vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
- norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+ norm = (norm.xyz-0.5)*2.0; // unpack norm
float da = dot(norm, lv);
if (da < 0.0)
{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index 66e3cf6d13..89448e2167 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -277,7 +277,7 @@ void main()
float depth = texture2DRect(depthMap, tc.xy).r;
vec3 pos = getPosition_d(tc, depth).xyz;
vec3 norm = texture2DRect(normalMap, tc).xyz;
- norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+ norm = (norm.xyz-0.5)*2.0; // unpack norm
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
index 2422d73a3e..bac74cbbef 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
@@ -123,7 +123,7 @@ void main()
vec4 pos = getPosition(pos_screen);
vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
- norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+ norm = (norm.xyz-0.5)*2.0; // unpack norm
frag_color[0] = 1.0;
frag_color[1] = calcAmbientOcclusion(pos, norm);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
index 8a5e482e80..daf1cc7ea2 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
@@ -56,6 +56,6 @@ void main()
frag_data[0] = vec4(outColor.rgb, 0.0);
frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
index 6cf6106b51..da253846ef 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
@@ -48,5 +48,5 @@ void main()
frag_data[0] = vec4(vertex_color.rgb*col.rgb, 0.0);
frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
- frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
index 42dc7c0980..3427d6db57 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -161,5 +161,5 @@ void main()
frag_data[0] = vec4(color.rgb, 0.5); // diffuse
frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
- frag_data[2] = vec4(screenspacewavef.xy*0.5+0.5, screenspacewavef.z, screenspacewavef.z*0.5); // normalxyz, displace
+ frag_data[2] = vec4(screenspacewavef.xyz*0.5+0.5, screenspacewavef.z*0.5); // normalxyz, displace
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index f7f1f649ce..5621e47ab7 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -154,7 +154,7 @@ void main()
}
vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
- norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+ norm = (norm.xyz-0.5)*2.0; // unpack norm
norm = normalize(norm);
float l_dist = -dot(lv, proj_n);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index a137bea30f..9df9d75905 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -279,7 +279,7 @@ void main()
float depth = texture2DRect(depthMap, tc.xy).r;
vec3 pos = getPosition_d(tc, depth).xyz;
vec3 norm = texture2DRect(normalMap, tc).xyz;
- norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+ norm = (norm.xyz-0.5)*2.0; // unpack norm
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index ab077d9e02..6d6ad6d565 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -154,7 +154,7 @@ void main()
}
vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
- norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+ norm = (norm.xyz-0.5)*2.0; // unpack norm
norm = normalize(norm);
float l_dist = -dot(lv, proj_n);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
index c1495b145e..890486c4b1 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -126,7 +126,7 @@ void main()
vec4 pos = getPosition(pos_screen);
vec4 nmap4 = texture2DRect(normalMap, pos_screen);
- nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm
+ nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
float displace = nmap4.w;
vec3 norm = nmap4.xyz;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
index 039fca9df2..2dcd3d656f 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
@@ -187,7 +187,7 @@ void main()
vec4 pos = getPosition(pos_screen);
vec4 nmap4 = texture2DRect(normalMap, pos_screen);
- nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm
+ nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
float displace = nmap4.w;
vec3 norm = nmap4.xyz;
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif
new file mode 100644
index 0000000000..ba6f30fa0e
--- /dev/null
+++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif
Binary files differ
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif
new file mode 100644
index 0000000000..830d5692fd
--- /dev/null
+++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif
Binary files differ
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif
new file mode 100644
index 0000000000..e05284214a
--- /dev/null
+++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif
Binary files differ
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif
new file mode 100644
index 0000000000..c4822adf64
--- /dev/null
+++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif
Binary files differ
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif
new file mode 100644
index 0000000000..5166af6e05
--- /dev/null
+++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif
Binary files differ
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 77ec74d318..777008d920 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -380,6 +380,9 @@ void init_default_trans_args()
default_trans_args.insert("CAPITALIZED_APP_NAME");
default_trans_args.insert("SECOND_LIFE_GRID");
default_trans_args.insert("SUPPORT_SITE");
+ // This URL shows up in a surprising number of places in various skin
+ // files. We really only want to have to maintain a single copy of it.
+ default_trans_args.insert("create_account_url");
}
//----------------------------------------------------------------------------
@@ -2674,14 +2677,6 @@ bool LLAppViewer::initConfiguration()
}
}
- // If automatic login from command line with --login switch
- // init StartSLURL location. In interactive login, LLPanelLogin
- // will take care of it.
- if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl"))
- {
- LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation")));
- }
-
if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
{
//
@@ -2729,12 +2724,27 @@ bool LLAppViewer::initConfiguration()
}
}
- // need to do this here - need to have initialized global settings first
+ // NextLoginLocation is set from the command line option
std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
if ( !nextLoginLocation.empty() )
{
+ LL_DEBUGS("AppInit")<<"set start from NextLoginLocation: "<<nextLoginLocation<<LL_ENDL;
LLStartUp::setStartSLURL(LLSLURL(nextLoginLocation));
- };
+ }
+ else if ( ( clp.hasOption("login") || clp.hasOption("autologin"))
+ && !clp.hasOption("url")
+ && !clp.hasOption("slurl"))
+ {
+ // If automatic login from command line with --login switch
+ // init StartSLURL location.
+ std::string start_slurl_setting = gSavedSettings.getString("LoginLocation");
+ LL_DEBUGS("AppInit") << "start slurl setting '" << start_slurl_setting << "'" << LL_ENDL;
+ LLStartUp::setStartSLURL(LLSLURL(start_slurl_setting));
+ }
+ else
+ {
+ // the login location will be set by the login panel (see LLPanelLogin)
+ }
gLastRunVersion = gSavedSettings.getString("LastRunVersion");
@@ -4355,6 +4365,10 @@ void LLAppViewer::idle()
{
return;
}
+ if (gTeleportDisplay)
+ {
+ return;
+ }
gViewerWindow->updateUI();
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 8d0664770b..4a0c94df33 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -2167,6 +2167,12 @@ BOOL LLFace::hasMedia() const
const F32 LEAST_IMPORTANCE = 0.05f ;
const F32 LEAST_IMPORTANCE_FOR_LARGE_IMAGE = 0.3f ;
+void LLFace::resetVirtualSize()
+{
+ setVirtualSize(0.f);
+ mImportanceToCamera = 0.f;
+}
+
F32 LLFace::getTextureVirtualSize()
{
F32 radius;
@@ -2232,8 +2238,17 @@ BOOL LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
LLVector4a t;
t.load3(camera->getOrigin().mV);
lookAt.setSub(center, t);
+
F32 dist = lookAt.getLength3().getF32();
- dist = llmax(dist-size.getLength3().getF32(), 0.f);
+ dist = llmax(dist-size.getLength3().getF32(), 0.001f);
+ //ramp down distance for nearby objects
+ if (dist < 16.f)
+ {
+ dist /= 16.f;
+ dist *= dist;
+ dist *= 16.f;
+ }
+
lookAt.normalize3fast() ;
//get area of circle around node
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index efc3424858..de4d03351c 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -218,6 +218,7 @@ public:
F32 getTextureVirtualSize() ;
F32 getImportanceToCamera()const {return mImportanceToCamera ;}
+ void resetVirtualSize();
void setHasMedia(bool has_media) { mHasMedia = has_media ;}
BOOL hasMedia() const ;
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index eca964442b..ef412a6bbf 100644
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -417,6 +417,7 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
if ((mSimulateRes == 0 || !mInitialized) && mVO->mDrawable->isVisible())
{
BOOL force_update = mSimulateRes == 0 ? TRUE : FALSE;
+
doIdleUpdate();
if (!force_update || !gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))
diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp
index 99d262344c..69c9d94dfa 100644
--- a/indra/newview/llfloaterpathfindingcharacters.cpp
+++ b/indra/newview/llfloaterpathfindingcharacters.cpp
@@ -134,26 +134,20 @@ void LLFloaterPathfindingCharacters::requestGetObjects()
LLPathfindingManager::getInstance()->requestGetCharacters(getNewRequestId(), boost::bind(&LLFloaterPathfindingCharacters::handleNewObjectList, this, _1, _2, _3));
}
-LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr)
+void LLFloaterPathfindingCharacters::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)
{
llassert(pObjectListPtr != NULL);
llassert(!pObjectListPtr->isEmpty());
- LLSD scrollListData = LLSD::emptyArray();
-
for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter)
{
- const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectIter->second.get());
- LLSD element = buildCharacterScrollListData(characterPtr);
- scrollListData.append(element);
+ const LLPathfindingObjectPtr objectPtr = objectIter->second;
+ const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectPtr.get());
+ llassert(characterPtr != NULL);
- if (characterPtr->hasOwner() && !characterPtr->hasOwnerName())
- {
- rebuildScrollListAfterAvatarNameLoads(characterPtr->getUUID());
- }
+ LLSD scrollListItemData = buildCharacterScrollListItemData(characterPtr);
+ addObjectToScrollList(objectPtr, scrollListItemData);
}
-
- return scrollListData;
}
void LLFloaterPathfindingCharacters::updateControlsOnScrollListChange()
@@ -168,6 +162,22 @@ S32 LLFloaterPathfindingCharacters::getNameColumnIndex() const
return 0;
}
+S32 LLFloaterPathfindingCharacters::getOwnerNameColumnIndex() const
+{
+ return 2;
+}
+
+std::string LLFloaterPathfindingCharacters::getOwnerName(const LLPathfindingObject *pObject) const
+{
+ return (pObject->hasOwner()
+ ? (pObject->hasOwnerName()
+ ? (pObject->isGroupOwned()
+ ? (pObject->getOwnerName() + " " + getString("character_owner_group"))
+ : pObject->getOwnerName())
+ : getString("character_owner_loading"))
+ : getString("character_owner_unknown"));
+}
+
const LLColor4 &LLFloaterPathfindingCharacters::getBeaconColor() const
{
return mBeaconColor;
@@ -201,9 +211,9 @@ void LLFloaterPathfindingCharacters::onShowPhysicsCapsuleClicked()
}
}
-LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const
+LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const
{
- LLSD columns;
+ LLSD columns = LLSD::emptyArray();
columns[0]["column"] = "name";
columns[0]["value"] = pCharacterPtr->getName();
@@ -212,13 +222,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi
columns[1]["value"] = pCharacterPtr->getDescription();
columns[2]["column"] = "owner";
- columns[2]["value"] = (pCharacterPtr->hasOwner()
- ? (pCharacterPtr->hasOwnerName()
- ? (pCharacterPtr->isGroupOwned()
- ? (pCharacterPtr->getOwnerName() + " " + getString("character_owner_group"))
- : pCharacterPtr->getOwnerName())
- : getString("character_owner_loading"))
- : getString("character_owner_unknown"));
+ columns[2]["value"] = getOwnerName(pCharacterPtr);
S32 cpuTime = llround(pCharacterPtr->getCPUTime());
std::string cpuTimeString = llformat("%d", cpuTime);
@@ -231,11 +235,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi
columns[4]["column"] = "altitude";
columns[4]["value"] = llformat("%1.0f m", pCharacterPtr->getLocation()[2]);
- LLSD element;
- element["id"] = pCharacterPtr->getUUID().asString();
- element["column"] = columns;
-
- return element;
+ return columns;
}
void LLFloaterPathfindingCharacters::updateStateOnDisplayControls()
diff --git a/indra/newview/llfloaterpathfindingcharacters.h b/indra/newview/llfloaterpathfindingcharacters.h
index ef389ad428..4021f4f119 100644
--- a/indra/newview/llfloaterpathfindingcharacters.h
+++ b/indra/newview/llfloaterpathfindingcharacters.h
@@ -62,11 +62,13 @@ protected:
virtual void requestGetObjects();
- virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr);
+ virtual void buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);
virtual void updateControlsOnScrollListChange();
virtual S32 getNameColumnIndex() const;
+ virtual S32 getOwnerNameColumnIndex() const;
+ virtual std::string getOwnerName(const LLPathfindingObject *pObject) const;
virtual const LLColor4 &getBeaconColor() const;
virtual LLPathfindingObjectListPtr getEmptyObjectList() const;
@@ -74,7 +76,7 @@ protected:
private:
void onShowPhysicsCapsuleClicked();
- LLSD buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const;
+ LLSD buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const;
void updateStateOnDisplayControls();
void showSelectedCharacterCapsules();
diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp
index 877bd0822d..0fe0e151fb 100644
--- a/indra/newview/llfloaterpathfindinglinksets.cpp
+++ b/indra/newview/llfloaterpathfindinglinksets.cpp
@@ -215,7 +215,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects()
LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3));
}
-LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr)
+void LLFloaterPathfindingLinksets::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)
{
llassert(pObjectListPtr != NULL);
llassert(!pObjectListPtr->isEmpty());
@@ -227,7 +227,6 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath
bool isFilteringDescription = !descriptionFilter.empty();
bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown);
- LLSD scrollListData = LLSD::emptyArray();
const LLVector3& avatarPosition = gAgent.getPositionAgent();
if (isFilteringName || isFilteringDescription || isFilteringLinksetUse)
@@ -236,22 +235,21 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath
LLStringUtil::toUpper(descriptionFilter);
for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter)
{
- const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get());
+ const LLPathfindingObjectPtr objectPtr = objectIter->second;
+ const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get());
+ llassert(linksetPtr != NULL);
+
std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName());
std::string linksetDescription = linksetPtr->getDescription();
LLStringUtil::toUpper(linksetName);
LLStringUtil::toUpper(linksetDescription);
+
if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) &&
(!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) &&
(!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter)))
{
- LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition);
- scrollListData.append(element);
-
- if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName())
- {
- rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID());
- }
+ LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition);
+ addObjectToScrollList(objectPtr, scrollListItemData);
}
}
}
@@ -259,18 +257,14 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath
{
for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter)
{
- const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get());
- LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition);
- scrollListData.append(element);
+ const LLPathfindingObjectPtr objectPtr = objectIter->second;
+ const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get());
+ llassert(linksetPtr != NULL);
- if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName())
- {
- rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID());
- }
+ LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition);
+ addObjectToScrollList(objectPtr, scrollListItemData);
}
}
-
- return scrollListData;
}
void LLFloaterPathfindingLinksets::updateControlsOnScrollListChange()
@@ -286,6 +280,22 @@ S32 LLFloaterPathfindingLinksets::getNameColumnIndex() const
return 0;
}
+S32 LLFloaterPathfindingLinksets::getOwnerNameColumnIndex() const
+{
+ return 2;
+}
+
+std::string LLFloaterPathfindingLinksets::getOwnerName(const LLPathfindingObject *pObject) const
+{
+ return (pObject->hasOwner()
+ ? (pObject->hasOwnerName()
+ ? (pObject->isGroupOwned()
+ ? (pObject->getOwnerName() + " " + getString("linkset_owner_group"))
+ : pObject->getOwnerName())
+ : getString("linkset_owner_loading"))
+ : getString("linkset_owner_unknown"));
+}
+
const LLColor4 &LLFloaterPathfindingLinksets::getBeaconColor() const
{
return mBeaconColor;
@@ -373,10 +383,10 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues()
}
}
-LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const
+LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const
{
llassert(pLinksetPtr != NULL);
- LLSD columns;
+ LLSD columns = LLSD::emptyArray();
if (pLinksetPtr->isTerrain())
{
@@ -389,11 +399,14 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin
columns[2]["column"] = "owner";
columns[2]["value"] = getString("linkset_terrain_owner");
- columns[3]["column"] = "land_impact";
- columns[3]["value"] = getString("linkset_terrain_land_impact");
+ columns[3]["column"] = "scripted";
+ columns[3]["value"] = getString("linkset_terrain_scripted");
- columns[4]["column"] = "dist_from_you";
- columns[4]["value"] = getString("linkset_terrain_dist_from_you");
+ columns[4]["column"] = "land_impact";
+ columns[4]["value"] = getString("linkset_terrain_land_impact");
+
+ columns[5]["column"] = "dist_from_you";
+ columns[5]["value"] = getString("linkset_terrain_dist_from_you");
}
else
{
@@ -404,22 +417,23 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin
columns[1]["value"] = pLinksetPtr->getDescription();
columns[2]["column"] = "owner";
- columns[2]["value"] = (pLinksetPtr->hasOwner()
- ? (pLinksetPtr->hasOwnerName()
- ? (pLinksetPtr->isGroupOwned()
- ? (pLinksetPtr->getOwnerName() + " " + getString("linkset_owner_group"))
- : pLinksetPtr->getOwnerName())
- : getString("linkset_owner_loading"))
- : getString("linkset_owner_unknown"));
-
- columns[3]["column"] = "land_impact";
- columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact());
-
- columns[4]["column"] = "dist_from_you";
- columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation()));
+ columns[2]["value"] = getOwnerName(pLinksetPtr);
+
+ columns[3]["column"] = "scripted";
+ columns[3]["value"] = (pLinksetPtr->hasIsScripted()
+ ? (pLinksetPtr->isScripted()
+ ? getString("linkset_is_scripted")
+ : getString("linkset_is_not_scripted"))
+ : getString("linkset_is_unknown_scripted"));
+
+ columns[4]["column"] = "land_impact";
+ columns[4]["value"] = llformat("%1d", pLinksetPtr->getLandImpact());
+
+ columns[5]["column"] = "dist_from_you";
+ columns[5]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation()));
}
- columns[5]["column"] = "linkset_use";
+ columns[6]["column"] = "linkset_use";
std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse());
if (pLinksetPtr->isTerrain())
{
@@ -437,25 +451,21 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin
{
linksetUse += (" " + getString("linkset_is_restricted_non_volume_state"));
}
- columns[5]["value"] = linksetUse;
-
- columns[6]["column"] = "a_percent";
- columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA());
+ columns[6]["value"] = linksetUse;
- columns[7]["column"] = "b_percent";
- columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB());
+ columns[7]["column"] = "a_percent";
+ columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA());
- columns[8]["column"] = "c_percent";
- columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC());
+ columns[8]["column"] = "b_percent";
+ columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB());
- columns[9]["column"] = "d_percent";
- columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD());
+ columns[9]["column"] = "c_percent";
+ columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC());
- LLSD element;
- element["id"] = pLinksetPtr->getUUID().asString();
- element["column"] = columns;
+ columns[10]["column"] = "d_percent";
+ columns[10]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD());
- return element;
+ return columns;
}
LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const
@@ -490,6 +500,23 @@ bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindin
return isShowWarning;
}
+bool LLFloaterPathfindingLinksets::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const
+{
+ bool isShowWarning = false;
+
+ if (pLinksetUse != LLPathfindingLinkset::kUnknown)
+ {
+ LLPathfindingObjectListPtr selectedObjects = getSelectedObjects();
+ if ((selectedObjects != NULL) && !selectedObjects->isEmpty())
+ {
+ const LLPathfindingLinksetList *linksetList = dynamic_cast<const LLPathfindingLinksetList *>(selectedObjects.get());
+ isShowWarning = linksetList->isShowPhantomToggleWarning(pLinksetUse);
+ }
+ }
+
+ return isShowWarning;
+}
+
bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const
{
bool isShowWarning = false;
@@ -559,29 +586,41 @@ void LLFloaterPathfindingLinksets::applyEdit()
{
LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse();
+ bool showPhantomToggleWarning = isShowPhantomToggleWarning(linksetUse);
bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse);
bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse);
- if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning)
+ if (showPhantomToggleWarning || showUnmodifiablePhantomWarning || showCannotBeVolumeWarning)
{
LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse);
LLSD substitutions;
substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse);
substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse);
- std::string notificationName;
- if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning)
+ // Build one of the following notifications names
+ // - PathfindingLinksets_WarnOnPhantom
+ // - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted
+ // - PathfindingLinksets_WarnOnPhantom_MismatchOnVolume
+ // - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume
+ // - PathfindingLinksets_MismatchOnRestricted
+ // - PathfindingLinksets_MismatchOnVolume
+ // - PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume
+
+ std::string notificationName = "PathfindingLinksets";
+
+ if (showPhantomToggleWarning)
{
- notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume";
+ notificationName += "_WarnOnPhantom";
}
- else if (showUnmodifiablePhantomWarning)
+ if (showUnmodifiablePhantomWarning)
{
- notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted";
+ notificationName += "_MismatchOnRestricted";
}
- else
+ if (showCannotBeVolumeWarning)
{
- notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume";
+ notificationName += "_MismatchOnVolume";
}
+
LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2));
}
else
diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h
index 342a64fc77..6538308122 100644
--- a/indra/newview/llfloaterpathfindinglinksets.h
+++ b/indra/newview/llfloaterpathfindinglinksets.h
@@ -58,11 +58,13 @@ protected:
virtual void requestGetObjects();
- virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr);
+ virtual void buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);
virtual void updateControlsOnScrollListChange();
virtual S32 getNameColumnIndex() const;
+ virtual S32 getOwnerNameColumnIndex() const;
+ virtual std::string getOwnerName(const LLPathfindingObject *pObject) const;
virtual const LLColor4 &getBeaconColor() const;
virtual LLPathfindingObjectListPtr getEmptyObjectList() const;
@@ -78,10 +80,11 @@ private:
void clearFilters();
void updateEditFieldValues();
- LLSD buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const;
+ LLSD buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const;
LLSD buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const;
bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;
+ bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;
bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;
void updateStateOnEditFields();
diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp
index e246265be9..20c1215bcb 100644
--- a/indra/newview/llfloaterpathfindingobjects.cpp
+++ b/indra/newview/llfloaterpathfindingobjects.cpp
@@ -29,6 +29,8 @@
#include "llfloaterpathfindingobjects.h"
+#include <string>
+#include <map>
#include <vector>
#include <boost/bind.hpp>
@@ -96,7 +98,6 @@ void LLFloaterPathfindingObjects::onOpen(const LLSD &pKey)
void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)
{
-
if (mGodLevelChangeSlot.connected())
{
mGodLevelChangeSlot.disconnect();
@@ -119,6 +120,11 @@ void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)
{
mObjectsSelection.clear();
}
+
+ if (pIsAppQuitting)
+ {
+ clearAllObjects();
+ }
}
void LLFloaterPathfindingObjects::draw()
@@ -168,13 +174,13 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)
mReturnButton(NULL),
mDeleteButton(NULL),
mTeleportButton(NULL),
- mLoadingAvatarNames(),
mDefaultBeaconColor(),
mDefaultBeaconTextColor(),
mErrorTextColor(),
mWarningTextColor(),
mMessagingState(kMessagingUnknown),
mMessagingRequestId(0U),
+ mMissingNameObjectsScrollListItems(),
mObjectList(),
mObjectsSelection(),
mHasObjectsToBeSelected(false),
@@ -186,6 +192,7 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)
LLFloaterPathfindingObjects::~LLFloaterPathfindingObjects()
{
+ clearAllObjects();
}
BOOL LLFloaterPathfindingObjects::postBuild()
@@ -343,54 +350,21 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()
S32 origScrollPosition = mObjectsScrollList->getScrollPos();
mObjectsScrollList->deleteAllItems();
+ mMissingNameObjectsScrollListItems.clear();
if ((mObjectList != NULL) && !mObjectList->isEmpty())
{
- LLSD scrollListData = convertObjectsIntoScrollListData(mObjectList);
- llassert(scrollListData.isArray());
+ buildObjectsScrollList(mObjectList);
- LLScrollListCell::Params cellParams;
- cellParams.font = LLFontGL::getFontSansSerif();
-
- for (LLSD::array_const_iterator rowElementIter = scrollListData.beginArray(); rowElementIter != scrollListData.endArray(); ++rowElementIter)
+ mObjectsScrollList->selectMultiple(mObjectsToBeSelected);
+ if (mHasObjectsToBeSelected)
{
- const LLSD &rowElement = *rowElementIter;
-
- LLScrollListItem::Params rowParams;
- llassert(rowElement.has("id"));
- llassert(rowElement.get("id").isString());
- rowParams.value = rowElement.get("id");
-
- llassert(rowElement.has("column"));
- llassert(rowElement.get("column").isArray());
- const LLSD &columnElement = rowElement.get("column");
- for (LLSD::array_const_iterator cellIter = columnElement.beginArray(); cellIter != columnElement.endArray(); ++cellIter)
- {
- const LLSD &cellElement = *cellIter;
-
- llassert(cellElement.has("column"));
- llassert(cellElement.get("column").isString());
- cellParams.column = cellElement.get("column").asString();
-
- llassert(cellElement.has("value"));
- llassert(cellElement.get("value").isString());
- cellParams.value = cellElement.get("value").asString();
-
- rowParams.columns.add(cellParams);
- }
-
- mObjectsScrollList->addRow(rowParams);
+ mObjectsScrollList->scrollToShowSelected();
+ }
+ else
+ {
+ mObjectsScrollList->setScrollPos(origScrollPosition);
}
- }
-
- mObjectsScrollList->selectMultiple(mObjectsToBeSelected);
- if (mHasObjectsToBeSelected)
- {
- mObjectsScrollList->scrollToShowSelected();
- }
- else
- {
- mObjectsScrollList->setScrollPos(origScrollPosition);
}
mObjectsToBeSelected.clear();
@@ -399,20 +373,42 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()
updateControlsOnScrollListChange();
}
-LLSD LLFloaterPathfindingObjects::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr)
+void LLFloaterPathfindingObjects::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)
{
llassert(0);
- LLSD nullObjs = LLSD::emptyArray();
- return nullObjs;
}
-void LLFloaterPathfindingObjects::rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId)
+void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjectPtr pObjectPtr, const LLSD &pScrollListItemData)
{
- std::set<LLUUID>::const_iterator iter = mLoadingAvatarNames.find(pAvatarId);
- if (iter == mLoadingAvatarNames.end())
+ LLScrollListCell::Params cellParams;
+ cellParams.font = LLFontGL::getFontSansSerif();
+
+ LLScrollListItem::Params rowParams;
+ rowParams.value = pObjectPtr->getUUID().asString();
+
+ llassert(pScrollListItemData.isArray());
+ for (LLSD::array_const_iterator cellIter = pScrollListItemData.beginArray();
+ cellIter != pScrollListItemData.endArray(); ++cellIter)
+ {
+ const LLSD &cellElement = *cellIter;
+
+ llassert(cellElement.has("column"));
+ llassert(cellElement.get("column").isString());
+ cellParams.column = cellElement.get("column").asString();
+
+ llassert(cellElement.has("value"));
+ llassert(cellElement.get("value").isString());
+ cellParams.value = cellElement.get("value").asString();
+
+ rowParams.columns.add(cellParams);
+ }
+
+ LLScrollListItem *scrollListItem = mObjectsScrollList->addRow(rowParams);
+
+ if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName())
{
- mLoadingAvatarNames.insert(pAvatarId);
- LLAvatarNameCache::get(pAvatarId, boost::bind(&LLFloaterPathfindingObjects::handleAvatarNameLoads, this, _1, _2));
+ mMissingNameObjectsScrollListItems.insert(std::make_pair<std::string, LLScrollListItem *>(pObjectPtr->getUUID().asString(), scrollListItem));
+ pObjectPtr->registerOwnerNameListener(boost::bind(&LLFloaterPathfindingObjects::handleObjectNameResponse, this, _1));
}
}
@@ -434,6 +430,18 @@ S32 LLFloaterPathfindingObjects::getNameColumnIndex() const
return 0;
}
+S32 LLFloaterPathfindingObjects::getOwnerNameColumnIndex() const
+{
+ return 2;
+}
+
+std::string LLFloaterPathfindingObjects::getOwnerName(const LLPathfindingObject *pObject) const
+{
+ llassert(0);
+ std::string returnVal;
+ return returnVal;
+}
+
const LLColor4 &LLFloaterPathfindingObjects::getBeaconColor() const
{
return mDefaultBeaconColor;
@@ -496,6 +504,7 @@ void LLFloaterPathfindingObjects::clearAllObjects()
{
selectNoneObjects();
mObjectsScrollList->deleteAllItems();
+ mMissingNameObjectsScrollListItems.clear();
mObjectList.reset();
}
@@ -683,13 +692,22 @@ void LLFloaterPathfindingObjects::onGodLevelChange(U8 pGodLevel)
requestGetObjects();
}
-void LLFloaterPathfindingObjects::handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName)
+void LLFloaterPathfindingObjects::handleObjectNameResponse(const LLPathfindingObject *pObject)
{
- llassert(mLoadingAvatarNames.find(pAvatarId) != mLoadingAvatarNames.end());
- mLoadingAvatarNames.erase(pAvatarId);
- if (mLoadingAvatarNames.empty())
+ llassert(pObject != NULL);
+ const std::string uuid = pObject->getUUID().asString();
+ scroll_list_item_map::iterator scrollListItemIter = mMissingNameObjectsScrollListItems.find(uuid);
+ if (scrollListItemIter != mMissingNameObjectsScrollListItems.end())
{
- rebuildObjectsScrollList();
+ LLScrollListItem *scrollListItem = scrollListItemIter->second;
+ llassert(scrollListItem != NULL);
+
+ LLScrollListCell *scrollListCell = scrollListItem->getColumn(getOwnerNameColumnIndex());
+ LLSD ownerName = getOwnerName(pObject);
+
+ scrollListCell->setValue(ownerName);
+
+ mMissingNameObjectsScrollListItems.erase(scrollListItemIter);
}
}
diff --git a/indra/newview/llfloaterpathfindingobjects.h b/indra/newview/llfloaterpathfindingobjects.h
index e8d446b598..4024e15fd6 100644
--- a/indra/newview/llfloaterpathfindingobjects.h
+++ b/indra/newview/llfloaterpathfindingobjects.h
@@ -27,7 +27,8 @@
#ifndef LL_LLFLOATERPATHFINDINGOBJECTS_H
#define LL_LLFLOATERPATHFINDINGOBJECTS_H
-#include <set>
+#include <string>
+#include <map>
#include <boost/signals2.hpp>
@@ -80,14 +81,15 @@ protected:
void handleUpdateObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList);
void rebuildObjectsScrollList();
- virtual LLSD convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr);
-
- void rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId);
+ virtual void buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);
+ void addObjectToScrollList(const LLPathfindingObjectPtr pObjectPr, const LLSD &pScrollListItemData);
virtual void updateControlsOnScrollListChange();
virtual void updateControlsOnInWorldSelectionChange();
virtual S32 getNameColumnIndex() const;
+ virtual S32 getOwnerNameColumnIndex() const;
+ virtual std::string getOwnerName(const LLPathfindingObject *pObject) const;
virtual const LLColor4 &getBeaconColor() const;
virtual const LLColor4 &getBeaconTextColor() const;
virtual S32 getBeaconWidth() const;
@@ -126,7 +128,7 @@ private:
void onRegionBoundaryCrossed();
void onGodLevelChange(U8 pGodLevel);
- void handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName);
+ void handleObjectNameResponse(const LLPathfindingObject *pObject);
void updateMessagingStatus();
void updateStateOnListControls();
@@ -151,8 +153,6 @@ private:
LLButton *mDeleteButton;
LLButton *mTeleportButton;
- std::set<LLUUID> mLoadingAvatarNames;
-
LLColor4 mDefaultBeaconColor;
LLColor4 mDefaultBeaconTextColor;
LLColor4 mErrorTextColor;
@@ -161,6 +161,9 @@ private:
EMessagingState mMessagingState;
LLPathfindingManager::request_id_t mMessagingRequestId;
+ typedef std::map<std::string, LLScrollListItem *> scroll_list_item_map;
+ scroll_list_item_map mMissingNameObjectsScrollListItems;
+
LLPathfindingObjectListPtr mObjectList;
LLObjectSelectionHandle mObjectsSelection;
diff --git a/indra/newview/llfloatertexturefetchdebugger.cpp b/indra/newview/llfloatertexturefetchdebugger.cpp
index 2b34b72055..9157389187 100644
--- a/indra/newview/llfloatertexturefetchdebugger.cpp
+++ b/indra/newview/llfloatertexturefetchdebugger.cpp
@@ -59,12 +59,15 @@ LLFloaterTextureFetchDebugger::LLFloaterTextureFetchDebugger(const LLSD& key)
mCommitCallbackRegistrar.add("TexFetchDebugger.RefetchVisCache", boost::bind(&LLFloaterTextureFetchDebugger::onClickRefetchVisCache, this));
mCommitCallbackRegistrar.add("TexFetchDebugger.RefetchVisHTTP", boost::bind(&LLFloaterTextureFetchDebugger::onClickRefetchVisHTTP, this));
+ mCommitCallbackRegistrar.add("TexFetchDebugger.RefetchAllCache", boost::bind(&LLFloaterTextureFetchDebugger::onClickRefetchAllCache, this));
+ mCommitCallbackRegistrar.add("TexFetchDebugger.RefetchAllHTTP", boost::bind(&LLFloaterTextureFetchDebugger::onClickRefetchAllHTTP, this));
}
//----------------------------------------------
BOOL LLFloaterTextureFetchDebugger::postBuild(void)
{
mDebugger = LLAppViewer::getTextureFetch()->getFetchDebugger();
+ mStartStatus = (S32)LLTextureFetchDebugger::IDLE;
//set states for buttons
mButtonStateMap["start_btn"] = true;
@@ -76,8 +79,10 @@ BOOL LLFloaterTextureFetchDebugger::postBuild(void)
mButtonStateMap["decode_btn"] = false;
mButtonStateMap["gl_btn"] = false;
- mButtonStateMap["refetchviscache_btn"] = true;
- mButtonStateMap["refetchvishttp_btn"] = true;
+ mButtonStateMap["refetchviscache_btn"] = false;
+ mButtonStateMap["refetchvishttp_btn"] = false;
+ mButtonStateMap["refetchallcache_btn"] = false;
+ mButtonStateMap["refetchallhttp_btn"] = false;
updateButtons();
@@ -89,7 +94,7 @@ BOOL LLFloaterTextureFetchDebugger::postBuild(void)
LLFloaterTextureFetchDebugger::~LLFloaterTextureFetchDebugger()
{
//stop everything
- mDebugger->stopDebug();
+ mDebugger->setStopDebug();
}
void LLFloaterTextureFetchDebugger::updateButtons()
@@ -118,47 +123,81 @@ void LLFloaterTextureFetchDebugger::disableButtons()
childDisable("gl_btn");
childDisable("refetchviscache_btn");
childDisable("refetchvishttp_btn");
+ childDisable("refetchallcache_btn");
+ childDisable("refetchallhttp_btn");
+}
+void LLFloaterTextureFetchDebugger::setStartStatus(S32 status)
+{
+ llassert_always(LLTextureFetchDebugger::IDLE == (LLTextureFetchDebugger::e_debug_state)mStartStatus) ;
+ mStartStatus = status;
+}
+
+bool LLFloaterTextureFetchDebugger::idleStart()
+{
+ if(mStartStatus != (S32)LLTextureFetchDebugger::IDLE)
+ {
+ mDebugger->startWork((LLTextureFetchDebugger::e_debug_state)mStartStatus);
+ mStartStatus = (S32)LLTextureFetchDebugger::IDLE;
+ return true;
+ }
+
+ return false;
}
void LLFloaterTextureFetchDebugger::idle()
{
- LLTextureFetchDebugger::e_debug_state state = mDebugger->getState();
-
- if(mDebugger->update())
+ if(idleStart())
+ {
+ return;
+ }
+
+ const F32 max_time = 0.005f; //5ms
+ LLTextureFetchDebugger::e_debug_state state = mDebugger->getState();
+ if(mDebugger->update(max_time))
{
switch(state)
{
case LLTextureFetchDebugger::IDLE:
break;
- case LLTextureFetchDebugger::READ_CACHE:
- mButtonStateMap["cachewrite_btn"] = true;
- mButtonStateMap["decode_btn"] = true;
- updateButtons();
+ case LLTextureFetchDebugger::START_DEBUG:
+ mButtonStateMap["cacheread_btn"] = true;
+ mButtonStateMap["http_btn"] = true;
+ mButtonStateMap["refetchviscache_btn"] = true;
+ mButtonStateMap["refetchvishttp_btn"] = true;
+ mButtonStateMap["refetchallcache_btn"] = true;
+ mButtonStateMap["refetchallhttp_btn"] = true;
break;
- case LLTextureFetchDebugger::WRITE_CACHE:
- updateButtons();
+ case LLTextureFetchDebugger::READ_CACHE:
+ mButtonStateMap["decode_btn"] = true;
+ break;
+ case LLTextureFetchDebugger::WRITE_CACHE:
break;
case LLTextureFetchDebugger::DECODING:
- mButtonStateMap["gl_btn"] = true;
- updateButtons();
+ mButtonStateMap["gl_btn"] = true;
break;
case LLTextureFetchDebugger::HTTP_FETCHING:
mButtonStateMap["cacheread_btn"] = true;
mButtonStateMap["cachewrite_btn"] = true;
- mButtonStateMap["decode_btn"] = true;
- updateButtons();
+ mButtonStateMap["decode_btn"] = true;
break;
- case LLTextureFetchDebugger::GL_TEX:
- updateButtons();
+ case LLTextureFetchDebugger::GL_TEX:
break;
- case LLTextureFetchDebugger::REFETCH_VIS_CACHE:
- updateButtons();
- case LLTextureFetchDebugger::REFETCH_VIS_HTTP:
- updateButtons();
+ case LLTextureFetchDebugger::REFETCH_VIS_CACHE:
+ break;
+ case LLTextureFetchDebugger::REFETCH_VIS_HTTP:
+ break;
+ case LLTextureFetchDebugger::REFETCH_ALL_CACHE:
+ break;
+ case LLTextureFetchDebugger::REFETCH_ALL_HTTP:
break;
default:
break;
}
+
+ if(state != LLTextureFetchDebugger::IDLE)
+ {
+ updateButtons();
+ }
}
}
@@ -172,11 +211,10 @@ void LLFloaterTextureFetchDebugger::onClickStart()
{
disableButtons();
- mDebugger->startDebug();
+ setStartStatus((S32)LLTextureFetchDebugger::START_DEBUG);
mButtonStateMap["start_btn"] = false;
- mButtonStateMap["cacheread_btn"] = true;
- mButtonStateMap["http_btn"] = true;
+
updateButtons();
}
@@ -185,7 +223,9 @@ void LLFloaterTextureFetchDebugger::onClickClose()
setVisible(FALSE);
//stop everything
- mDebugger->stopDebug();
+ mDebugger->setStopDebug();
+
+ delete this;
}
void LLFloaterTextureFetchDebugger::onClickClear()
@@ -203,7 +243,7 @@ void LLFloaterTextureFetchDebugger::onClickClear()
updateButtons();
//stop everything
- mDebugger->stopDebug();
+ mDebugger->setStopDebug();
mDebugger->clearHistory();
}
@@ -211,49 +251,63 @@ void LLFloaterTextureFetchDebugger::onClickCacheRead()
{
disableButtons();
- mDebugger->debugCacheRead();
+ setStartStatus((S32)LLTextureFetchDebugger::READ_CACHE);
}
void LLFloaterTextureFetchDebugger::onClickCacheWrite()
{
disableButtons();
- mDebugger->debugCacheWrite();
+ setStartStatus((S32)LLTextureFetchDebugger::WRITE_CACHE);
}
void LLFloaterTextureFetchDebugger::onClickHTTPLoad()
{
disableButtons();
- mDebugger->debugHTTP();
+ setStartStatus((S32)LLTextureFetchDebugger::HTTP_FETCHING);
}
void LLFloaterTextureFetchDebugger::onClickDecode()
{
disableButtons();
- mDebugger->debugDecoder();
+ setStartStatus((S32)LLTextureFetchDebugger::DECODING);
}
void LLFloaterTextureFetchDebugger::onClickGLTexture()
{
disableButtons();
- mDebugger->debugGLTextureCreation();
+ setStartStatus((S32)LLTextureFetchDebugger::GL_TEX);
}
void LLFloaterTextureFetchDebugger::onClickRefetchVisCache()
{
disableButtons();
- mDebugger->debugRefetchVisibleFromCache();
+ setStartStatus((S32)LLTextureFetchDebugger::REFETCH_VIS_CACHE);
}
void LLFloaterTextureFetchDebugger::onClickRefetchVisHTTP()
{
disableButtons();
- mDebugger->debugRefetchVisibleFromHTTP();
+ setStartStatus((S32)LLTextureFetchDebugger::REFETCH_VIS_HTTP);
+}
+
+void LLFloaterTextureFetchDebugger::onClickRefetchAllCache()
+{
+ disableButtons();
+
+ setStartStatus((S32)LLTextureFetchDebugger::REFETCH_ALL_CACHE);
+}
+
+void LLFloaterTextureFetchDebugger::onClickRefetchAllHTTP()
+{
+ disableButtons();
+
+ setStartStatus((S32)LLTextureFetchDebugger::REFETCH_ALL_HTTP);
}
void LLFloaterTextureFetchDebugger::draw()
@@ -368,8 +422,22 @@ void LLFloaterTextureFetchDebugger::draw()
else
{
getChild<LLUICtrl>("total_time_refetch_vis_cache_label")->setTextArg("[TIME]", llformat("%.3f", mDebugger->getRefetchVisCacheTime()));
- getChild<LLUICtrl>("total_time_refetch_vis_cache_label")->setTextArg("[SIZE]", llformat("%d", mDebugger->getRefetchedData() >> 10));
- getChild<LLUICtrl>("total_time_refetch_vis_cache_label")->setTextArg("[PIXEL]", llformat("%.3f", mDebugger->getRefetchedPixels() / 1000000.f));
+ getChild<LLUICtrl>("total_time_refetch_vis_cache_label")->setTextArg("[SIZE]", llformat("%d", mDebugger->getRefetchedVisData() >> 10));
+ getChild<LLUICtrl>("total_time_refetch_vis_cache_label")->setTextArg("[PIXEL]", llformat("%.3f", mDebugger->getRefetchedVisPixels() / 1000000.f));
+ }
+
+ //total time on refetching all textures from cache
+ if(mDebugger->getRefetchAllCacheTime() < 0.f)
+ {
+ getChild<LLUICtrl>("total_time_refetch_all_cache_label")->setTextArg("[TIME]", std::string("----"));
+ getChild<LLUICtrl>("total_time_refetch_all_cache_label")->setTextArg("[SIZE]", std::string("----"));
+ getChild<LLUICtrl>("total_time_refetch_all_cache_label")->setTextArg("[PIXEL]", std::string("----"));
+ }
+ else
+ {
+ getChild<LLUICtrl>("total_time_refetch_all_cache_label")->setTextArg("[TIME]", llformat("%.3f", mDebugger->getRefetchAllCacheTime()));
+ getChild<LLUICtrl>("total_time_refetch_all_cache_label")->setTextArg("[SIZE]", llformat("%d", mDebugger->getRefetchedAllData() >> 10));
+ getChild<LLUICtrl>("total_time_refetch_all_cache_label")->setTextArg("[PIXEL]", llformat("%.3f", mDebugger->getRefetchedAllPixels() / 1000000.f));
}
//total time on refetching visible textures from http
@@ -382,8 +450,22 @@ void LLFloaterTextureFetchDebugger::draw()
else
{
getChild<LLUICtrl>("total_time_refetch_vis_http_label")->setTextArg("[TIME]", llformat("%.3f", mDebugger->getRefetchVisHTTPTime()));
- getChild<LLUICtrl>("total_time_refetch_vis_http_label")->setTextArg("[SIZE]", llformat("%d", mDebugger->getRefetchedData() >> 10));
- getChild<LLUICtrl>("total_time_refetch_vis_http_label")->setTextArg("[PIXEL]", llformat("%.3f", mDebugger->getRefetchedPixels() / 1000000.f));
+ getChild<LLUICtrl>("total_time_refetch_vis_http_label")->setTextArg("[SIZE]", llformat("%d", mDebugger->getRefetchedVisData() >> 10));
+ getChild<LLUICtrl>("total_time_refetch_vis_http_label")->setTextArg("[PIXEL]", llformat("%.3f", mDebugger->getRefetchedVisPixels() / 1000000.f));
+ }
+
+ //total time on refetching all textures from http
+ if(mDebugger->getRefetchAllHTTPTime() < 0.f)
+ {
+ getChild<LLUICtrl>("total_time_refetch_all_http_label")->setTextArg("[TIME]", std::string("----"));
+ getChild<LLUICtrl>("total_time_refetch_all_http_label")->setTextArg("[SIZE]", std::string("----"));
+ getChild<LLUICtrl>("total_time_refetch_all_http_label")->setTextArg("[PIXEL]", std::string("----"));
+ }
+ else
+ {
+ getChild<LLUICtrl>("total_time_refetch_all_http_label")->setTextArg("[TIME]", llformat("%.3f", mDebugger->getRefetchAllHTTPTime()));
+ getChild<LLUICtrl>("total_time_refetch_all_http_label")->setTextArg("[SIZE]", llformat("%d", mDebugger->getRefetchedAllData() >> 10));
+ getChild<LLUICtrl>("total_time_refetch_all_http_label")->setTextArg("[PIXEL]", llformat("%.3f", mDebugger->getRefetchedAllPixels() / 1000000.f));
}
LLFloater::draw();
diff --git a/indra/newview/llfloatertexturefetchdebugger.h b/indra/newview/llfloatertexturefetchdebugger.h
index 33012c6a3d..096ad88e07 100644
--- a/indra/newview/llfloatertexturefetchdebugger.h
+++ b/indra/newview/llfloatertexturefetchdebugger.h
@@ -53,6 +53,8 @@ public:
void onClickRefetchVisCache();
void onClickRefetchVisHTTP();
+ void onClickRefetchAllCache();
+ void onClickRefetchAllHTTP();
public:
void idle() ;
@@ -63,9 +65,12 @@ private:
void updateButtons();
void disableButtons();
+ void setStartStatus(S32 status);
+ bool idleStart();
private:
LLTextureFetchDebugger* mDebugger;
std::map<std::string, bool> mButtonStateMap;
+ S32 mStartStatus;
};
#endif // LL_FLOATER_TEXTURE_FETCH_DEBUGGER__H
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 99ebb0eb34..48484786f6 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -133,7 +133,6 @@ public:
if(tools_floater)
{
tools_floater->updateLandImpacts();
- tools_floater->dirty();
}
}
};
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 7d047ec67e..d4080ab3f7 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -2235,14 +2235,9 @@ void LLFolderView::doIdle()
arrangeAll();
}
- mNeedsAutoSelect = mFilter->hasFilterString() &&
- !(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());
-
-
- if (mFilter->isModified() && mFilter->isNotDefault())
- {
- mNeedsAutoSelect = TRUE;
- }
+ BOOL filter_modified_and_active = mFilter->isModified() && mFilter->isNotDefault();
+ mNeedsAutoSelect = filter_modified_and_active &&
+ !(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());
mFilter->clearModified();
// filter to determine visibility before arranging
@@ -2254,7 +2249,7 @@ void LLFolderView::doIdle()
LLFastTimer t3(FTM_AUTO_SELECT);
// select new item only if a filtered item not currently selected
LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back();
- if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyFiltered()))
+ if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyVisible()))
{
// these are named variables to get around gcc not binding non-const references to rvalues
// and functor application is inherently non-const to allow for stateful functors
@@ -2264,7 +2259,7 @@ void LLFolderView::doIdle()
// Open filtered folders for folder views with mAutoSelectOverride=TRUE.
// Used by LLPlacesFolderView.
- if (mAutoSelectOverride && !mFilter->getFilterSubString().empty())
+ if (!mFilter->getFilterSubString().empty())
{
// these are named variables to get around gcc not binding non-const references to rvalues
// and functor application is inherently non-const to allow for stateful functors
@@ -2556,6 +2551,25 @@ void LLFolderView::onRenamerLost()
}
}
+LLFolderViewItem* LLFolderView::getNextUnselectedItem()
+{
+ LLFolderViewItem* last_item = *mSelectedItems.rbegin();
+ LLFolderViewItem* new_selection = last_item->getNextOpenNode(FALSE);
+ while(new_selection && new_selection->isSelected())
+ {
+ new_selection = new_selection->getNextOpenNode(FALSE);
+ }
+ if (!new_selection)
+ {
+ new_selection = last_item->getPreviousOpenNode(FALSE);
+ while (new_selection && (new_selection->isInSelection()))
+ {
+ new_selection = new_selection->getPreviousOpenNode(FALSE);
+ }
+ }
+ return new_selection;
+}
+
LLInventoryFilter* LLFolderView::getFilter()
{
return mFilter;
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index da8bb15f8e..3f78312a98 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -207,6 +207,8 @@ public:
virtual void doDelete();
virtual BOOL canDoDelete() const;
+ LLFolderViewItem* getNextUnselectedItem();
+
// Public rename functionality - can only start the process
void startRenamingSelectedItem( void );
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 515e544452..3aa16b4413 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -1098,6 +1098,10 @@ void LLFolderViewItem::draw()
}
}
+bool LLFolderViewItem::isInSelection() const
+{
+ return mIsSelected || (mParentFolder && mParentFolder->isInSelection());
+}
///----------------------------------------------------------------------------
/// Class LLFolderViewFolder
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 3c7592046a..577b6b54a2 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -243,6 +243,7 @@ public:
virtual void destroyView();
BOOL isSelected() const { return mIsSelected; }
+ bool isInSelection() const;
void setUnselected() { mIsSelected = FALSE; }
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index b86c453d61..fce0b7c9c9 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -71,6 +71,9 @@
#include "llviewerwindow.h"
#include "llvoavatarself.h"
#include "llwearablelist.h"
+#include "lllandmarkactions.h"
+
+void copy_slurl_to_clipboard_callback_inv(const std::string& slurl);
// Marketplace outbox current disabled
#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU 1
@@ -1355,7 +1358,10 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
else if ("cut" == action)
{
cutToClipboard();
+ // MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI.
+ LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();
LLFolderView::removeCutItems();
+ mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);
return;
}
else if ("copy" == action)
@@ -1396,6 +1402,29 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
copy_item_to_outbox(itemp, outbox_id, LLUUID::null, LLToolDragAndDrop::getOperationId());
}
+ else if ("copy_slurl" == action)
+ {
+ LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());
+ if(item)
+ {
+ LLUUID asset_id = item->getAssetUUID();
+ LLLandmark* landmark = gLandmarkList.getAsset(asset_id);
+ if (landmark)
+ {
+ LLVector3d global_pos;
+ landmark->getGlobalPos(global_pos);
+ LLLandmarkActions::getSLURLfromPosGlobal(global_pos, &copy_slurl_to_clipboard_callback_inv, true);
+ }
+ }
+ }
+}
+
+void copy_slurl_to_clipboard_callback_inv(const std::string& slurl)
+{
+ gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(slurl));
+ LLSD args;
+ args["SLURL"] = slurl;
+ LLNotificationsUtil::add("CopySLURL", args);
}
void LLItemBridge::selectItem()
@@ -2743,7 +2772,10 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
else if ("cut" == action)
{
cutToClipboard();
+ // MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI.
+ LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();
LLFolderView::removeCutItems();
+ mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);
return;
}
else if ("copy" == action)
@@ -4397,6 +4429,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
items.push_back(std::string("Landmark Separator"));
+ items.push_back(std::string("url_copy"));
items.push_back(std::string("About Landmark"));
}
@@ -4405,6 +4438,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
// info panel can be shown at a time.
if ((flags & FIRST_SELECTED_ITEM) == 0)
{
+ disabled_items.push_back(std::string("url_copy"));
disabled_items.push_back(std::string("About Landmark"));
}
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index dc9e88d54d..118430efe1 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -197,6 +197,8 @@ public:
const LLUUID& uuid) :
LLInvFVBridge(inventory, root, uuid) {}
+ typedef boost::function<void(std::string& slurl)> slurl_callback_t;
+
virtual void performAction(LLInventoryModel* model, std::string action);
virtual void selectItem();
virtual void restoreItem();
@@ -214,7 +216,6 @@ public:
virtual BOOL isItemCopyable() const;
virtual BOOL hasChildren() const { return FALSE; }
virtual BOOL isUpToDate() const { return TRUE; }
-
/*virtual*/ void clearDisplayName() { mDisplayName.clear(); }
LLViewerInventoryItem* getItem() const;
diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp
index 778693876e..cd6473921d 100644
--- a/indra/newview/llmachineid.cpp
+++ b/indra/newview/llmachineid.cpp
@@ -252,12 +252,20 @@ S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len)
if (has_static_unique_id)
{
memcpy ( unique_id, &static_unique_id, len);
- LL_DEBUGS("AppInit") << "UniqueID: " << unique_id[0] << unique_id[1]<< unique_id[2] << unique_id[3] << unique_id[4] << unique_id [5] << LL_ENDL;
+ LL_DEBUGS("AppInit") << "UniqueID: 0x";
+ // Code between here and LL_ENDL is not executed unless the LL_DEBUGS
+ // actually produces output
+ for (size_t i = 0; i < len; ++i)
+ {
+ // Copy each char to unsigned int to hexify. Sending an unsigned
+ // char to a std::ostream tries to represent it as a char, not
+ // what we want here.
+ unsigned byte = unique_id[i];
+ LL_CONT << std::hex << std::setw(2) << std::setfill('0') << byte;
+ }
+ // Reset default output formatting to avoid nasty surprises!
+ LL_CONT << std::dec << std::setw(0) << std::setfill(' ') << LL_ENDL;
return 1;
}
return 0;
}
-
-
-
-
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index a7059eb519..54522bb7f6 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -44,6 +44,8 @@
#include "llmutelist.h"
+#include "pipeline.h"
+
#include <boost/tokenizer.hpp>
#include "lldispatcher.h"
@@ -192,6 +194,23 @@ BOOL LLMuteList::isLinden(const std::string& name) const
return last_name == "Linden";
}
+static LLVOAvatar* find_avatar(const LLUUID& id)
+{
+ LLViewerObject *obj = gObjectList.findObject(id);
+ while (obj && obj->isAttachment())
+ {
+ obj = (LLViewerObject *)obj->getParent();
+ }
+
+ if (obj && obj->isAvatar())
+ {
+ return (LLVOAvatar*)obj;
+ }
+ else
+ {
+ return NULL;
+ }
+}
BOOL LLMuteList::add(const LLMute& mute, U32 flags)
{
@@ -288,6 +307,12 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);
}
}
+ //mute local lights that are attached to the avatar
+ LLVOAvatar *avatarp = find_avatar(localmute.mID);
+ if (avatarp)
+ {
+ LLPipeline::removeMutedAVsLights(avatarp);
+ }
return TRUE;
}
}
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index a8049b1b03..3bb3e5cf47 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -27,6 +27,7 @@
#include "llviewerprecompiledheaders.h"
#include "llpanellogin.h"
+#include "lllayoutstack.h"
#include "indra_constants.h" // for key and mask constants
#include "llfloaterreg.h"
@@ -145,12 +146,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
// change z sort of clickable text to be behind buttons
sendChildToBack(getChildView("forgot_password_text"));
-
- if(LLStartUp::getStartSLURL().getType() != LLSLURL::LOCATION)
- {
- LLSLURL slurl(gSavedSettings.getString("LoginLocation"));
- LLStartUp::setStartSLURL(slurl);
- }
LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo");
updateLocationSelectorsVisibility(); // separate so that it can be called from preferences
@@ -182,9 +177,32 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
ADD_TOP);
server_choice_combo->selectFirstItem();
+ LLSLURL start_slurl(LLStartUp::getStartSLURL());
+ if ( !start_slurl.isSpatial() ) // has a start been established by the command line or NextLoginLocation ?
+ {
+ // no, so get the preference setting
+ std::string defaultStartLocation = gSavedSettings.getString("LoginLocation");
+ LL_INFOS("AppInit")<<"default LoginLocation '"<<defaultStartLocation<<"'"<<LL_ENDL;
+ LLSLURL defaultStart(defaultStartLocation);
+ if ( defaultStart.isSpatial() )
+ {
+ LLStartUp::setStartSLURL(defaultStart);
+ }
+ else
+ {
+ LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL;
+ LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME);
+ LLStartUp::setStartSLURL(homeStart);
+ }
+ }
+ else
+ {
+ LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed
+ }
+
childSetAction("connect_btn", onClickConnect, this);
- getChild<LLPanel>("login")->setDefaultBtn("connect_btn");
+ getChild<LLPanel>("links_login_panel")->setDefaultBtn("connect_btn");
std::string channel = LLVersionInfo::getChannel();
std::string version = llformat("%s (%d)",
@@ -194,8 +212,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLTextBox* forgot_password_text = getChild<LLTextBox>("forgot_password_text");
forgot_password_text->setClickedCallback(onClickForgotPassword, NULL);
- LLTextBox* create_new_account_text = getChild<LLTextBox>("create_new_account_text");
- create_new_account_text->setClickedCallback(onClickNewAccount, NULL);
+ childSetAction("create_new_account_btn", onClickNewAccount, NULL);
LLTextBox* need_help_text = getChild<LLTextBox>("login_help");
need_help_text->setClickedCallback(onClickHelp, NULL);
@@ -619,12 +636,10 @@ void LLPanelLogin::updateLocationSelectorsVisibility()
if (sInstance)
{
BOOL show_start = gSavedSettings.getBOOL("ShowStartLocation");
- sInstance->getChildView("start_location_combo")->setVisible(show_start);
- sInstance->getChildView("start_location_text")->setVisible(show_start);
+ sInstance->getChild<LLLayoutPanel>("start_location_panel")->setVisible(show_start);
BOOL show_server = gSavedSettings.getBOOL("ForceShowGrid");
- LLComboBox* server_choice_combo = sInstance->getChild<LLComboBox>("server_combo");
- server_choice_combo->setVisible( show_server );
+ sInstance->getChild<LLLayoutPanel>("grid_panel")->setVisible(show_server);
}
}
@@ -645,8 +660,11 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
* specify a particular grid; in those cases we want to change the grid
* and the grid selector to match the new value.
*/
- if ( LLSLURL::LOCATION == new_start_slurl.getType() )
+ enum LLSLURL::SLURL_TYPE new_slurl_type = new_start_slurl.getType();
+ switch ( new_slurl_type )
{
+ case LLSLURL::LOCATION:
+ {
std::string slurl_grid = LLGridManager::getInstance()->getGrid(new_start_slurl.getGrid());
if ( ! slurl_grid.empty() ) // is that a valid grid?
{
@@ -668,8 +686,24 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
{
// the grid specified by the slurl is not known
LLNotificationsUtil::add("InvalidLocationSLURL");
+ LL_WARNS("AppInit")<<"invalid LoginLocation:"<<new_start_slurl.asString()<<LL_ENDL;
location_combo->setTextEntry(LLStringUtil::null);
}
+ }
+ break;
+
+ case LLSLURL::HOME_LOCATION:
+ location_combo->setCurrentByIndex(1); // home location
+ break;
+
+ case LLSLURL::LAST_LOCATION:
+ location_combo->setCurrentByIndex(0); // last location
+ break;
+
+ default:
+ LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL;
+ location_combo->setCurrentByIndex(1); // home location
+ break;
}
}
@@ -850,7 +884,7 @@ void LLPanelLogin::onClickNewAccount(void*)
{
if (sInstance)
{
- LLWeb::loadURLExternal(sInstance->getString("create_account_url"));
+ LLWeb::loadURLExternal(LLTrans::getString("create_account_url"));
}
}
@@ -910,9 +944,11 @@ void LLPanelLogin::updateServer()
// update the login panel links
bool system_grid = LLGridManager::getInstance()->isSystemGrid();
-
- sInstance->getChildView("create_new_account_text")->setVisible( system_grid);
- sInstance->getChildView("forgot_password_text")->setVisible( system_grid);
+
+ // Want to vanish not only create_new_account_btn, but also the
+ // title text over it, so turn on/off the whole layout_panel element.
+ sInstance->getChild<LLLayoutPanel>("links")->setVisible(system_grid);
+ sInstance->getChildView("forgot_password_text")->setVisible(system_grid);
// grid changed so show new splash screen (possibly)
loadLoginPage();
diff --git a/indra/newview/llpathfindinglinkset.cpp b/indra/newview/llpathfindinglinkset.cpp
index fe4daabd89..50b76378f5 100644
--- a/indra/newview/llpathfindinglinkset.cpp
+++ b/indra/newview/llpathfindinglinkset.cpp
@@ -39,6 +39,7 @@
#define LINKSET_MODIFIABLE_FIELD "modifiable"
#define LINKSET_CATEGORY_FIELD "navmesh_category"
#define LINKSET_CAN_BE_VOLUME "can_be_volume"
+#define LINKSET_IS_SCRIPTED_FIELD "is_scripted"
#define LINKSET_PHANTOM_FIELD "phantom"
#define LINKSET_WALKABILITY_A_FIELD "A"
#define LINKSET_WALKABILITY_B_FIELD "B"
@@ -62,6 +63,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLSD& pTerrainData)
mLandImpact(0U),
mIsModifiable(FALSE),
mCanBeVolume(FALSE),
+ mIsScripted(FALSE),
+ mHasIsScripted(TRUE),
mLinksetUse(kUnknown),
mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),
mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE),
@@ -77,6 +80,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&
mLandImpact(0U),
mIsModifiable(TRUE),
mCanBeVolume(TRUE),
+ mIsScripted(FALSE),
+ mHasIsScripted(FALSE),
mLinksetUse(kUnknown),
mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),
mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE),
@@ -93,6 +98,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLPathfindingLinkset& pOther)
mLandImpact(pOther.mLandImpact),
mIsModifiable(pOther.mIsModifiable),
mCanBeVolume(pOther.mCanBeVolume),
+ mIsScripted(pOther.mIsScripted),
+ mHasIsScripted(pOther.mHasIsScripted),
mLinksetUse(pOther.mLinksetUse),
mWalkabilityCoefficientA(pOther.mWalkabilityCoefficientA),
mWalkabilityCoefficientB(pOther.mWalkabilityCoefficientB),
@@ -113,6 +120,8 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse
mLandImpact = pOther.mLandImpact;
mIsModifiable = pOther.mIsModifiable;
mCanBeVolume = pOther.mCanBeVolume;
+ mIsScripted = pOther.mIsScripted;
+ mHasIsScripted = pOther.mHasIsScripted;
mLinksetUse = pOther.mLinksetUse;
mWalkabilityCoefficientA = pOther.mWalkabilityCoefficientA;
mWalkabilityCoefficientB = pOther.mWalkabilityCoefficientB;
@@ -140,6 +149,11 @@ bool LLPathfindingLinkset::isShowUnmodifiablePhantomWarning(ELinksetUse pLinkset
return (!isModifiable() && (isPhantom() != isPhantom(pLinksetUse)));
}
+bool LLPathfindingLinkset::isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const
+{
+ return (isModifiable() && (isPhantom() != isPhantom(pLinksetUse)));
+}
+
bool LLPathfindingLinkset::isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const
{
return (!canBeVolume() && ((pLinksetUse == kMaterialVolume) || (pLinksetUse == kExclusionVolume)));
@@ -193,6 +207,13 @@ void LLPathfindingLinkset::parseLinksetData(const LLSD &pLinksetData)
llassert(pLinksetData.has(LINKSET_MODIFIABLE_FIELD));
llassert(pLinksetData.get(LINKSET_MODIFIABLE_FIELD).isBoolean());
mIsModifiable = pLinksetData.get(LINKSET_MODIFIABLE_FIELD).asBoolean();
+
+ mHasIsScripted = pLinksetData.has(LINKSET_IS_SCRIPTED_FIELD);
+ if (mHasIsScripted)
+ {
+ llassert(pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).isBoolean());
+ mIsScripted = pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).asBoolean();
+ }
}
void LLPathfindingLinkset::parsePathfindingData(const LLSD &pLinksetData)
diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h
index 73b4d6bad4..308a3a1e0f 100644
--- a/indra/newview/llpathfindinglinkset.h
+++ b/indra/newview/llpathfindinglinkset.h
@@ -63,12 +63,16 @@ public:
inline ELinksetUse getLinksetUse() const {return mLinksetUse;};
+ inline BOOL isScripted() const {return mIsScripted;};
+ inline BOOL hasIsScripted() const {return mHasIsScripted;};
+
inline S32 getWalkabilityCoefficientA() const {return mWalkabilityCoefficientA;};
inline S32 getWalkabilityCoefficientB() const {return mWalkabilityCoefficientB;};
inline S32 getWalkabilityCoefficientC() const {return mWalkabilityCoefficientC;};
inline S32 getWalkabilityCoefficientD() const {return mWalkabilityCoefficientD;};
bool isShowUnmodifiablePhantomWarning(ELinksetUse pLinksetUse) const;
+ bool isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const;
bool isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const;
LLSD encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;
@@ -98,6 +102,8 @@ private:
U32 mLandImpact;
BOOL mIsModifiable;
BOOL mCanBeVolume;
+ BOOL mIsScripted;
+ BOOL mHasIsScripted;
ELinksetUse mLinksetUse;
S32 mWalkabilityCoefficientA;
S32 mWalkabilityCoefficientB;
diff --git a/indra/newview/llpathfindinglinksetlist.cpp b/indra/newview/llpathfindinglinksetlist.cpp
index 746fa342a1..b886e46765 100644
--- a/indra/newview/llpathfindinglinksetlist.cpp
+++ b/indra/newview/llpathfindinglinksetlist.cpp
@@ -113,6 +113,20 @@ bool LLPathfindingLinksetList::isShowUnmodifiablePhantomWarning(LLPathfindingLin
return isShowWarning;
}
+bool LLPathfindingLinksetList::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const
+{
+ bool isShowWarning = false;
+
+ for (const_iterator objectIter = begin(); !isShowWarning && (objectIter != end()); ++objectIter)
+ {
+ const LLPathfindingObjectPtr objectPtr = objectIter->second;
+ const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get());
+ isShowWarning = linkset->isShowPhantomToggleWarning(pLinksetUse);
+ }
+
+ return isShowWarning;
+}
+
bool LLPathfindingLinksetList::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const
{
bool isShowWarning = false;
diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h
index 77c6358640..1d38e4c11a 100644
--- a/indra/newview/llpathfindinglinksetlist.h
+++ b/indra/newview/llpathfindinglinksetlist.h
@@ -43,6 +43,7 @@ public:
LLSD encodeTerrainFields(LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;
bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;
+ bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;
bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;
void determinePossibleStates(BOOL &pCanBeWalkable, BOOL &pCanBeStaticObstacle, BOOL &pCanBeDynamicObstacle,
diff --git a/indra/newview/llpathfindingobject.cpp b/indra/newview/llpathfindingobject.cpp
index 916eceb4c8..858d3203c0 100644
--- a/indra/newview/llpathfindingobject.cpp
+++ b/indra/newview/llpathfindingobject.cpp
@@ -55,8 +55,10 @@ LLPathfindingObject::LLPathfindingObject()
mOwnerUUID(),
mHasOwnerName(false),
mOwnerName(),
+ mAvatarNameCacheConnection(),
mIsGroupOwned(false),
- mLocation()
+ mLocation(),
+ mOwnerNameSignal()
{
}
@@ -67,8 +69,10 @@ LLPathfindingObject::LLPathfindingObject(const std::string &pUUID, const LLSD &p
mOwnerUUID(),
mHasOwnerName(false),
mOwnerName(),
+ mAvatarNameCacheConnection(),
mIsGroupOwned(false),
- mLocation()
+ mLocation(),
+ mOwnerNameSignal()
{
parseObjectData(pObjectData);
}
@@ -80,14 +84,17 @@ LLPathfindingObject::LLPathfindingObject(const LLPathfindingObject& pOther)
mOwnerUUID(pOther.mOwnerUUID),
mHasOwnerName(false),
mOwnerName(),
+ mAvatarNameCacheConnection(),
mIsGroupOwned(pOther.mIsGroupOwned),
- mLocation(pOther.mLocation)
+ mLocation(pOther.mLocation),
+ mOwnerNameSignal()
{
fetchOwnerName();
}
LLPathfindingObject::~LLPathfindingObject()
{
+ disconnectAvatarNameCacheConnection();
}
LLPathfindingObject &LLPathfindingObject::operator =(const LLPathfindingObject& pOther)
@@ -115,6 +122,23 @@ std::string LLPathfindingObject::getOwnerName() const
return ownerName;
}
+LLPathfindingObject::name_connection_t LLPathfindingObject::registerOwnerNameListener(name_callback_t pOwnerNameCallback)
+{
+ llassert(hasOwner());
+
+ name_connection_t connection;
+ if (hasOwnerName())
+ {
+ pOwnerNameCallback(this);
+ }
+ else
+ {
+ connection = mOwnerNameSignal.connect(pOwnerNameCallback);
+ }
+
+ return connection;
+}
+
void LLPathfindingObject::parseObjectData(const LLSD &pObjectData)
{
llassert(pObjectData.has(PATHFINDING_OBJECT_NAME_FIELD));
@@ -149,7 +173,7 @@ void LLPathfindingObject::fetchOwnerName()
mHasOwnerName = LLAvatarNameCache::get(mOwnerUUID, &mOwnerName);
if (!mHasOwnerName)
{
- LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2));
+ mAvatarNameCacheConnection = LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2));
}
}
}
@@ -157,6 +181,19 @@ void LLPathfindingObject::fetchOwnerName()
void LLPathfindingObject::handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName)
{
llassert(mOwnerUUID == pOwnerUUID);
+
mOwnerName = pAvatarName;
mHasOwnerName = true;
+
+ disconnectAvatarNameCacheConnection();
+
+ mOwnerNameSignal(this);
+}
+
+void LLPathfindingObject::disconnectAvatarNameCacheConnection()
+{
+ if (mAvatarNameCacheConnection.connected())
+ {
+ mAvatarNameCacheConnection.disconnect();
+ }
}
diff --git a/indra/newview/llpathfindingobject.h b/indra/newview/llpathfindingobject.h
index d45cc554fd..b8d3ca2364 100644
--- a/indra/newview/llpathfindingobject.h
+++ b/indra/newview/llpathfindingobject.h
@@ -30,8 +30,11 @@
#include <string>
#include <boost/shared_ptr.hpp>
+#include <boost/function.hpp>
+#include <boost/signals2.hpp>
#include "llavatarname.h"
+#include "llavatarnamecache.h"
#include "lluuid.h"
#include "v3math.h"
@@ -59,6 +62,12 @@ public:
inline BOOL isGroupOwned() const {return mIsGroupOwned;};
inline const LLVector3& getLocation() const {return mLocation;};
+ typedef boost::function<void (const LLPathfindingObject *)> name_callback_t;
+ typedef boost::signals2::signal<void (const LLPathfindingObject *)> name_signal_t;
+ typedef boost::signals2::connection name_connection_t;
+
+ name_connection_t registerOwnerNameListener(name_callback_t pOwnerNameCallback);
+
protected:
private:
@@ -66,15 +75,18 @@ private:
void fetchOwnerName();
void handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName);
+ void disconnectAvatarNameCacheConnection();
- LLUUID mUUID;
- std::string mName;
- std::string mDescription;
- LLUUID mOwnerUUID;
- bool mHasOwnerName;
- LLAvatarName mOwnerName;
- BOOL mIsGroupOwned;
- LLVector3 mLocation;
+ LLUUID mUUID;
+ std::string mName;
+ std::string mDescription;
+ LLUUID mOwnerUUID;
+ bool mHasOwnerName;
+ LLAvatarName mOwnerName;
+ LLAvatarNameCache::callback_connection_t mAvatarNameCacheConnection;
+ BOOL mIsGroupOwned;
+ LLVector3 mLocation;
+ name_signal_t mOwnerNameSignal;
};
#endif // LL_LLPATHFINDINGOBJECT_H
diff --git a/indra/newview/llpathfindingobjectlist.cpp b/indra/newview/llpathfindingobjectlist.cpp
index 68a7e736e6..f1ecb45fc0 100644
--- a/indra/newview/llpathfindingobjectlist.cpp
+++ b/indra/newview/llpathfindingobjectlist.cpp
@@ -45,6 +45,7 @@ LLPathfindingObjectList::LLPathfindingObjectList()
LLPathfindingObjectList::~LLPathfindingObjectList()
{
+ clear();
}
bool LLPathfindingObjectList::isEmpty() const
@@ -52,6 +53,15 @@ bool LLPathfindingObjectList::isEmpty() const
return mObjectMap.empty();
}
+void LLPathfindingObjectList::clear()
+{
+ for (LLPathfindingObjectMap::iterator objectIter = mObjectMap.begin(); objectIter != mObjectMap.end(); ++objectIter)
+ {
+ objectIter->second.reset();
+ }
+ mObjectMap.clear();
+}
+
void LLPathfindingObjectList::update(LLPathfindingObjectPtr pUpdateObjectPtr)
{
if (pUpdateObjectPtr != NULL)
diff --git a/indra/newview/llpathfindingobjectlist.h b/indra/newview/llpathfindingobjectlist.h
index 3ad8e8b096..61580582d3 100644
--- a/indra/newview/llpathfindingobjectlist.h
+++ b/indra/newview/llpathfindingobjectlist.h
@@ -47,6 +47,8 @@ public:
bool isEmpty() const;
+ void clear();
+
void update(LLPathfindingObjectPtr pUpdateObjectPtr);
void update(LLPathfindingObjectListPtr pUpdateObjectListPtr);
@@ -56,7 +58,6 @@ public:
const_iterator begin() const;
const_iterator end() const;
-
protected:
LLPathfindingObjectMap &getObjectMap();
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index a28d8d3546..42648b82c2 100644..100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -362,6 +362,15 @@ bool idle_startup()
if ( STATE_FIRST == LLStartUp::getStartupState() )
{
+ static bool first_call = true;
+ if (first_call)
+ {
+ // Other phases get handled when startup state changes,
+ // need to capture the initial state as well.
+ LLStartUp::getPhases().startPhase(LLStartUp::getStartupStateString());
+ first_call = false;
+ }
+
gViewerWindow->showCursor();
gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT);
@@ -721,12 +730,14 @@ bool idle_startup()
if (STATE_LOGIN_SHOW == LLStartUp::getStartupState())
{
- LL_DEBUGS("AppInit") << "Initializing Window" << LL_ENDL;
+ LL_DEBUGS("AppInit") << "Initializing Window, show_connect_box = "
+ << show_connect_box << LL_ENDL;
// if we've gone backwards in the login state machine, to this state where we show the UI
// AND the debug setting to exit in this case is true, then go ahead and bail quickly
if ( mLoginStatePastUI && gSavedSettings.getBOOL("QuitOnLoginActivated") )
{
+ LL_DEBUGS("AppInit") << "taking QuitOnLoginActivated exit" << LL_ENDL;
// no requirement for notification here - just exit
LLAppViewer::instance()->earlyExitNoNotify();
}
@@ -739,6 +750,7 @@ bool idle_startup()
// this startup phase more than once.
if (gLoginMenuBarView == NULL)
{
+ LL_DEBUGS("AppInit") << "initializing menu bar" << LL_ENDL;
display_startup();
initialize_edit_menu();
initialize_spellcheck_menu();
@@ -749,11 +761,13 @@ bool idle_startup()
if (show_connect_box)
{
+ LL_DEBUGS("AppInit") << "show_connect_box on" << LL_ENDL;
// Load all the name information out of the login view
// NOTE: Hits "Attempted getFields with no login view shown" warning, since we don't
// show the login view until login_show() is called below.
if (gUserCredential.isNull())
{
+ LL_DEBUGS("AppInit") << "loading credentials from gLoginHandler" << LL_ENDL;
display_startup();
gUserCredential = gLoginHandler.initializeLoginInfo();
display_startup();
@@ -770,17 +784,28 @@ bool idle_startup()
login_show();
display_startup();
// connect dialog is already shown, so fill in the names
- if (gUserCredential.notNull())
- {
- LLPanelLogin::setFields( gUserCredential, gRememberPassword);
- }
+ if (gUserCredential.notNull())
+ {
+ LLPanelLogin::setFields( gUserCredential, gRememberPassword);
+ }
display_startup();
LLPanelLogin::giveFocus();
+ if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
+ {
+ LL_INFOS("AppInit") << "FirstLoginThisInstall, calling show_first_run_dialog()" << LL_ENDL;
+ show_first_run_dialog();
+ }
+ else
+ {
+ LL_DEBUGS("AppInit") << "FirstLoginThisInstall off" << LL_ENDL;
+ }
+
LLStartUp::setStartupState( STATE_LOGIN_WAIT ); // Wait for user input
}
else
{
+ LL_DEBUGS("AppInit") << "show_connect_box off, skipping to STATE_LOGIN_CLEANUP" << LL_ENDL;
// skip directly to message template verification
LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
}
@@ -2704,9 +2729,10 @@ void LLStartUp::setStartupState( EStartupState state )
getStartupStateString() << " to " <<
startupStateToString(state) << LL_ENDL;
- sPhases->stopPhase(getStartupStateString());
+ getPhases().stopPhase(getStartupStateString());
gStartupState = state;
- sPhases->startPhase(getStartupStateString());
+ getPhases().startPhase(getStartupStateString());
+
postStartupState();
}
@@ -2823,22 +2849,33 @@ bool LLStartUp::dispatchURL()
void LLStartUp::setStartSLURL(const LLSLURL& slurl)
{
- sStartSLURL = slurl;
- LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL;
+ LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL;
- switch(slurl.getType())
- {
- case LLSLURL::HOME_LOCATION:
- case LLSLURL::LAST_LOCATION:
- case LLSLURL::LOCATION:
- gSavedSettings.setString("LoginLocation", LLSLURL::SIM_LOCATION_HOME);
+ if ( slurl.isSpatial() )
+ {
+ std::string new_start = slurl.getSLURLString();
+ LL_DEBUGS("AppInit")<<new_start<<LL_ENDL;
+ sStartSLURL = slurl;
LLPanelLogin::onUpdateStartSLURL(slurl); // updates grid if needed
- break;
- default:
- break;
- }
+
+ // remember that this is where we wanted to log in...if the login fails,
+ // the next attempt will default to the same place.
+ gSavedSettings.setString("NextLoginLocation", new_start);
+ // following a successful login, this is cleared
+ // and the default reverts to LoginLocation
+ }
+ else
+ {
+ LL_WARNS("AppInit")<<"Invalid start SLURL (ignored): "<<slurl.asString()<<LL_ENDL;
+ }
}
+// static
+LLSLURL& LLStartUp::getStartSLURL()
+{
+ return sStartSLURL;
+}
+
/**
* Read all proxy configuration settings and set up both the HTTP proxy and
* SOCKS proxy as needed.
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index 3754aaf966..760e38890b 100644..100755
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -111,7 +111,7 @@ public:
static void postStartupState();
static void setStartSLURL(const LLSLURL& slurl);
- static LLSLURL& getStartSLURL() { return sStartSLURL; }
+ static LLSLURL& getStartSLURL();
static bool startLLProxy(); // Initialize the SOCKS 5 proxy
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 89240c982f..ff69c6e9fd 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -469,7 +469,7 @@ void LLStatusBar::onMouseEnterVolume()
LLRect vol_btn_rect = volbtn->getRect();
LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();
volume_pulldown_rect.setLeftTopAndSize(vol_btn_rect.mLeft -
- (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth())/2,
+ (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth()),
vol_btn_rect.mBottom,
volume_pulldown_rect.getWidth(),
volume_pulldown_rect.getHeight());
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 8632890bbb..a61e2d5c86 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -50,6 +50,8 @@
const S32 TEXTURE_CACHE_ENTRY_SIZE = FIRST_PACKET_SIZE;//1024;
const F32 TEXTURE_CACHE_PURGE_AMOUNT = .20f; // % amount to reduce the cache by when it exceeds its limit
const F32 TEXTURE_CACHE_LRU_SIZE = .10f; // % amount for LRU list (low overhead to regenerate)
+const S32 TEXTURE_FAST_CACHE_ENTRY_OVERHEAD = sizeof(S32) * 4; //w, h, c, level
+const S32 TEXTURE_FAST_CACHE_ENTRY_SIZE = 16 * 16 * 4 + TEXTURE_FAST_CACHE_ENTRY_OVERHEAD;
class LLTextureCacheWorker : public LLWorkerClass
{
@@ -283,9 +285,12 @@ public:
LLTextureCacheRemoteWorker(LLTextureCache* cache, U32 priority, const LLUUID& id,
U8* data, S32 datasize, S32 offset,
S32 imagesize, // for writes
+ LLPointer<LLImageRaw> raw, S32 discardlevel,
LLTextureCache::Responder* responder)
: LLTextureCacheWorker(cache, priority, id, data, datasize, offset, imagesize, responder),
- mState(INIT)
+ mState(INIT),
+ mRawImage(raw),
+ mRawDiscardLevel(discardlevel)
{
}
@@ -303,6 +308,8 @@ private:
};
e_state mState;
+ LLPointer<LLImageRaw> mRawImage;
+ S32 mRawDiscardLevel;
};
@@ -559,6 +566,11 @@ bool LLTextureCacheRemoteWorker::doWrite()
if(idx < 0)
{
idx = mCache->setHeaderCacheEntry(mID, entry, mImageSize, mDataSize); // create the new entry.
+ if(idx >= 0)
+ {
+ //write to the fast cache.
+ llassert_always(mCache->writeToFastCache(idx, mRawImage, mRawDiscardLevel));
+ }
}
else
{
@@ -658,6 +670,7 @@ bool LLTextureCacheRemoteWorker::doWrite()
// Nothing else to do at that point...
done = true;
}
+ mRawImage = NULL;
// Clean up and exit
return done;
@@ -744,10 +757,14 @@ LLTextureCache::LLTextureCache(bool threaded)
mWorkersMutex(NULL),
mHeaderMutex(NULL),
mListMutex(NULL),
+ mFastCacheMutex(NULL),
mHeaderAPRFile(NULL),
mReadOnly(TRUE), //do not allow to change the texture cache until setReadOnly() is called.
mTexturesSizeTotal(0),
- mDoPurge(FALSE)
+ mDoPurge(FALSE),
+ mFastCachep(NULL),
+ mFastCachePoolp(NULL),
+ mFastCachePadBuffer(NULL)
{
}
@@ -755,6 +772,9 @@ LLTextureCache::~LLTextureCache()
{
clearDeleteList() ;
writeUpdatedEntries() ;
+ delete mFastCachep;
+ delete mFastCachePoolp;
+ FREE_MEM(LLImageBase::getPrivatePool(), mFastCachePadBuffer);
}
//////////////////////////////////////////////////////////////////////////////
@@ -879,15 +899,15 @@ BOOL LLTextureCache::isInLocal(const LLUUID& id)
//////////////////////////////////////////////////////////////////////////////
//static
-const S32 MAX_REASONABLE_FILE_SIZE = 512*1024*1024; // 512 MB
-F32 LLTextureCache::sHeaderCacheVersion = 1.4f;
-U32 LLTextureCache::sCacheMaxEntries = MAX_REASONABLE_FILE_SIZE / TEXTURE_CACHE_ENTRY_SIZE;
+F32 LLTextureCache::sHeaderCacheVersion = 1.7f;
+U32 LLTextureCache::sCacheMaxEntries = 1024 * 1024; //~1 million textures.
S64 LLTextureCache::sCacheMaxTexturesSize = 0; // no limit
const char* entries_filename = "texture.entries";
const char* cache_filename = "texture.cache";
const char* old_textures_dirname = "textures";
//change the location of the texture cache to prevent from being deleted by old version viewers.
const char* textures_dirname = "texturecache";
+const char* fast_cache_filename = "FastCache.cache";
void LLTextureCache::setDirNames(ELLPath location)
{
@@ -896,6 +916,7 @@ void LLTextureCache::setDirNames(ELLPath location)
mHeaderEntriesFileName = gDirUtilp->getExpandedFilename(location, textures_dirname, entries_filename);
mHeaderDataFileName = gDirUtilp->getExpandedFilename(location, textures_dirname, cache_filename);
mTexturesDirName = gDirUtilp->getExpandedFilename(location, textures_dirname);
+ mFastCacheFileName = gDirUtilp->getExpandedFilename(location, textures_dirname, fast_cache_filename);
}
void LLTextureCache::purgeCache(ELLPath location)
@@ -938,8 +959,8 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL texture_cache
{
llassert_always(getPending() == 0) ; //should not start accessing the texture cache before initialized.
- S64 header_size = (max_size * 2) / 10;
- S64 max_entries = header_size / TEXTURE_CACHE_ENTRY_SIZE;
+ S64 header_size = (max_size / 100) * 36; //0.36 * max_size
+ S64 max_entries = header_size / (TEXTURE_CACHE_ENTRY_SIZE + TEXTURE_FAST_CACHE_ENTRY_SIZE);
sCacheMaxEntries = (S32)(llmin((S64)sCacheMaxEntries, max_entries));
header_size = sCacheMaxEntries * TEXTURE_CACHE_ENTRY_SIZE;
max_size -= header_size;
@@ -981,6 +1002,7 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL texture_cache
purgeTextures(true); // calc mTexturesSize and make some room in the texture cache if we need it
llassert_always(getPending() == 0) ; //should not start accessing the texture cache before initialized.
+ openFastCache(true);
return max_size; // unused cache space
}
@@ -1751,7 +1773,7 @@ LLTextureCache::handle_t LLTextureCache::readFromCache(const LLUUID& id, U32 pri
LLMutexLock lock(&mWorkersMutex);
LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
NULL, size, offset,
- 0, responder);
+ 0, NULL, 0, responder);
handle_t handle = worker->read();
mReaders[handle] = worker;
return handle;
@@ -1789,6 +1811,7 @@ bool LLTextureCache::readComplete(handle_t handle, bool abort)
LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 priority,
U8* data, S32 datasize, S32 imagesize,
+ LLPointer<LLImageRaw> rawimage, S32 discardlevel,
WriteResponder* responder)
{
if (mReadOnly)
@@ -1807,12 +1830,159 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio
LLMutexLock lock(&mWorkersMutex);
LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
data, datasize, 0,
- imagesize, responder);
+ imagesize, rawimage, discardlevel, responder);
handle_t handle = worker->write();
mWriters[handle] = worker;
return handle;
}
+//called in the main thread
+LLPointer<LLImageRaw> LLTextureCache::readFromFastCache(const LLUUID& id, S32& discardlevel)
+{
+ U32 offset;
+ {
+ LLMutexLock lock(&mHeaderMutex);
+ id_map_t::const_iterator iter = mHeaderIDMap.find(id);
+ if(iter == mHeaderIDMap.end())
+ {
+ return NULL; //not in the cache
+ }
+
+ offset = iter->second;
+ }
+ offset *= TEXTURE_FAST_CACHE_ENTRY_SIZE;
+
+ U8* data;
+ S32 head[4];
+ {
+ LLMutexLock lock(&mFastCacheMutex);
+
+ openFastCache();
+
+ mFastCachep->seek(APR_SET, offset);
+
+ llassert_always(mFastCachep->read(head, TEXTURE_FAST_CACHE_ENTRY_OVERHEAD) == TEXTURE_FAST_CACHE_ENTRY_OVERHEAD);
+
+ S32 image_size = head[0] * head[1] * head[2];
+ if(!image_size) //invalid
+ {
+ closeFastCache();
+ return NULL;
+ }
+ discardlevel = head[3];
+
+ data = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), image_size);
+ llassert_always(mFastCachep->read(data, image_size) == image_size);
+ closeFastCache();
+ }
+ LLPointer<LLImageRaw> raw = new LLImageRaw(data, head[0], head[1], head[2], true);
+
+ return raw;
+}
+
+//return the fast cache location
+bool LLTextureCache::writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 discardlevel)
+{
+ //rescale image if needed
+ S32 w, h, c;
+ w = raw->getWidth();
+ h = raw->getHeight();
+ c = raw->getComponents();
+ S32 i = 0 ;
+
+ while(((w >> i) * (h >> i) * c) > TEXTURE_FAST_CACHE_ENTRY_SIZE - TEXTURE_FAST_CACHE_ENTRY_OVERHEAD)
+ {
+ ++i ;
+ }
+
+ if(i)
+ {
+ w >>= i;
+ h >>= i;
+ if(w * h *c > 0) //valid
+ {
+ LLPointer<LLImageRaw> newraw = new LLImageRaw(raw->getData(), raw->getWidth(), raw->getHeight(), raw->getComponents());
+ newraw->scale(w, h) ;
+ raw = newraw;
+
+ discardlevel += i ;
+ }
+ }
+
+ //copy data
+ memcpy(mFastCachePadBuffer, &w, sizeof(S32));
+ memcpy(mFastCachePadBuffer + sizeof(S32), &h, sizeof(S32));
+ memcpy(mFastCachePadBuffer + sizeof(S32) * 2, &c, sizeof(S32));
+ memcpy(mFastCachePadBuffer + sizeof(S32) * 3, &discardlevel, sizeof(S32));
+ if(w * h * c > 0) //valid
+ {
+ memcpy(mFastCachePadBuffer + TEXTURE_FAST_CACHE_ENTRY_OVERHEAD, raw->getData(), w * h * c);
+ }
+ S32 offset = id * TEXTURE_FAST_CACHE_ENTRY_SIZE;
+
+ {
+ LLMutexLock lock(&mFastCacheMutex);
+
+ openFastCache();
+
+ mFastCachep->seek(APR_SET, offset);
+ llassert_always(mFastCachep->write(mFastCachePadBuffer, TEXTURE_FAST_CACHE_ENTRY_SIZE) == TEXTURE_FAST_CACHE_ENTRY_SIZE);
+
+ closeFastCache(true);
+ }
+
+ return true;
+}
+
+void LLTextureCache::openFastCache(bool first_time)
+{
+ if(!mFastCachep)
+ {
+ if(first_time)
+ {
+ if(!mFastCachePadBuffer)
+ {
+ mFastCachePadBuffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), TEXTURE_FAST_CACHE_ENTRY_SIZE);
+ }
+ mFastCachePoolp = new LLVolatileAPRPool();
+ if (LLAPRFile::isExist(mFastCacheFileName, mFastCachePoolp))
+ {
+ mFastCachep = new LLAPRFile(mFastCacheFileName, APR_READ|APR_WRITE|APR_BINARY, mFastCachePoolp) ;
+ }
+ else
+ {
+ mFastCachep = new LLAPRFile(mFastCacheFileName, APR_CREATE|APR_READ|APR_WRITE|APR_BINARY, mFastCachePoolp) ;
+ }
+ }
+ else
+ {
+ mFastCachep = new LLAPRFile(mFastCacheFileName, APR_READ|APR_WRITE|APR_BINARY, mFastCachePoolp) ;
+ }
+
+ mFastCacheTimer.reset();
+ }
+ return;
+}
+
+void LLTextureCache::closeFastCache(bool forced)
+{
+ static const F32 timeout = 10.f ; //seconds
+
+ if(!mFastCachep)
+ {
+ return ;
+ }
+
+ if(!forced && mFastCacheTimer.getElapsedTimeF32() < timeout)
+ {
+ return ;
+ }
+
+ delete mFastCachep;
+ mFastCachep = NULL;
+ return;
+}
+
bool LLTextureCache::writeComplete(handle_t handle, bool abort)
{
lockWorkers();
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index dd0cc9b4bd..e3fc957fd2 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -36,6 +36,7 @@
class LLImageFormatted;
class LLTextureCacheWorker;
+class LLImageRaw;
class LLTextureCache : public LLWorkerThread
{
@@ -113,8 +114,9 @@ public:
handle_t readFromCache(const LLUUID& id, U32 priority, S32 offset, S32 size,
ReadResponder* responder);
bool readComplete(handle_t handle, bool abort);
- handle_t writeToCache(const LLUUID& id, U32 priority, U8* data, S32 datasize, S32 imagesize,
+ handle_t writeToCache(const LLUUID& id, U32 priority, U8* data, S32 datasize, S32 imagesize, LLPointer<LLImageRaw> rawimage, S32 discardlevel,
WriteResponder* responder);
+ LLPointer<LLImageRaw> readFromFastCache(const LLUUID& id, S32& discardlevel);
bool writeComplete(handle_t handle, bool abort = false);
void prioritizeWrite(handle_t handle);
@@ -171,12 +173,18 @@ private:
void lockHeaders() { mHeaderMutex.lock(); }
void unlockHeaders() { mHeaderMutex.unlock(); }
+ void openFastCache(bool first_time = false);
+ void closeFastCache(bool forced = false);
+ bool writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 discardlevel);
+
private:
// Internal
LLMutex mWorkersMutex;
LLMutex mHeaderMutex;
LLMutex mListMutex;
+ LLMutex mFastCacheMutex;
LLAPRFile* mHeaderAPRFile;
+ LLVolatileAPRPool* mFastCachePoolp;
typedef std::map<handle_t, LLTextureCacheWorker*> handle_map_t;
handle_map_t mReaders;
@@ -193,12 +201,17 @@ private:
// HEADERS (Include first mip)
std::string mHeaderEntriesFileName;
std::string mHeaderDataFileName;
+ std::string mFastCacheFileName;
EntriesInfo mHeaderEntriesInfo;
std::set<S32> mFreeList; // deleted entries
std::set<LLUUID> mLRU;
- typedef std::map<LLUUID,S32> id_map_t;
+ typedef std::map<LLUUID, S32> id_map_t;
id_map_t mHeaderIDMap;
+ LLAPRFile* mFastCachep;
+ LLFrameTimer mFastCacheTimer;
+ U8* mFastCachePadBuffer;
+
// BODIES (TEXTURES minus headers)
std::string mTexturesDirName;
typedef std::map<LLUUID,S32> size_map_t;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 422655879c..a2854dd6d8 100755..100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -886,7 +886,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
mResourceWaitCount(0U)
{
mCanUseNET = mUrl.empty() ;
-
+
calcWorkPriority();
mType = host.isOk() ? LLImageBase::TYPE_AVATAR_BAKE : LLImageBase::TYPE_NORMAL;
// llinfos << "Create: " << mID << " mHost:" << host << " Discard=" << discard << llendl;
@@ -1069,8 +1069,6 @@ void LLTextureFetchWorker::startWork(S32 param)
// Threads: Ttf
bool LLTextureFetchWorker::doWork(S32 param)
{
- static const F32 FETCHING_TIMEOUT = 120.f;//seconds
-
static const LLCore::HttpStatus http_not_found(HTTP_NOT_FOUND); // 404
static const LLCore::HttpStatus http_service_unavail(HTTP_SERVICE_UNAVAILABLE); // 503
static const LLCore::HttpStatus http_not_sat(HTTP_REQUESTED_RANGE_NOT_SATISFIABLE); // 416;
@@ -1172,7 +1170,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
offset, size, responder);
mCacheReadTimer.reset();
}
- else if (mUrl.empty())
+ else if (mUrl.empty() && mFetcher->canLoadFromCache())
{
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
@@ -1182,7 +1180,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
offset, size, responder);
mCacheReadTimer.reset();
}
- else if(mCanUseHTTP)
+ else if(!mUrl.empty() && mCanUseHTTP)
{
if (!(mUrl.compare(0, 7, "http://") == 0))
{
@@ -1210,6 +1208,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else
{
+ //
+ //This should never happen
+ //
return false;
}
}
@@ -1249,6 +1250,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL;
mState = LOAD_FROM_NETWORK;
}
+
// fall through
LLTextureFetch::sCacheHitRate.addValue(0.f);
}
@@ -1403,6 +1405,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
// We already have all the data, just decode it
mLoadedDiscard = mFormattedImage->getDiscardLevel();
+ setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
mState = DECODE_IMAGE;
releaseHttpSemaphore();
return false;
@@ -1444,7 +1447,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
<< " Bytes: " << mRequestedSize
<< " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth
<< LL_ENDL;
-
+
// Will call callbackHttpGet when curl request completes
mHttpHandle = mFetcher->mHttpRequest->requestGetByteRange(mHttpPolicyClass,
mWorkPriority,
@@ -1497,6 +1500,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
mState = INIT;
mCanUseHTTP = false;
+ mUrl.clear();
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
releaseHttpSemaphore();
return false;
@@ -1519,10 +1523,12 @@ bool LLTextureFetchWorker::doWork(S32 param)
<< llendl;
}
+ mUrl.clear();
if (cur_size > 0)
{
// Use available data
mLoadedDiscard = mFormattedImage->getDiscardLevel();
+ setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
mState = DECODE_IMAGE;
releaseHttpSemaphore();
return false;
@@ -1535,6 +1541,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
return true; // failed
}
+ // Clear the url since we're done with the fetch
+ // Note: mUrl is used to check is fetching is required so failure to clear it will force an http fetch
+ // next time the texture is requested, even if the data have already been fetched.
+ if(mWriteToCacheState != NOT_WRITE)
+ {
+ mUrl.clear();
+ }
+
if (! mHttpBufferArray || ! mHttpBufferArray->size())
{
// no data received.
@@ -1622,29 +1636,12 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else
{
- if(FETCHING_TIMEOUT < mRequestedTimer.getElapsedTimeF32())
- {
- //timeout, abort.
- LL_WARNS("Texture") << "Fetch of texture " << mID << " timed out after "
- << mRequestedTimer.getElapsedTimeF32()
- << " seconds. Canceling request." << LL_ENDL;
-
- if (LLCORE_HTTP_HANDLE_INVALID != mHttpHandle)
- {
- // Issue cancel on any outstanding request. Asynchronous
- // so cancel may not actually take effect if operation is
- // complete & queued. Either way, notification will
- // complete and the request can be transitioned.
- mFetcher->mHttpRequest->requestCancel(mHttpHandle, NULL);
- }
- else
- {
- // Shouldn't happen but if it does, cancel quickly.
- mState = DONE;
- releaseHttpSemaphore();
- return true;
- }
- }
+ // *HISTORY: There was a texture timeout test here originally that
+ // would cancel a request that was over 120 seconds old. That's
+ // probably not a good idea. Particularly rich regions can take
+ // an enormous amount of time to load textures. We'll revisit the
+ // various possible timeout components (total request time, connection
+ // time, I/O time, with and without retries, etc.) in the future.
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
return false;
@@ -1776,7 +1773,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
CacheWriteResponder* responder = new CacheWriteResponder(mFetcher, mID);
mCacheWriteHandle = mFetcher->mTextureCache->writeToCache(mID, cache_priority,
mFormattedImage->getData(), datasize,
- mFileSize, responder);
+ mFileSize, mRawImage, mDecodedDiscard, responder);
// fall through
}
@@ -2161,6 +2158,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
{
mRequestedSize = -1; // error
}
+
mLoaded = TRUE;
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
@@ -2331,6 +2329,8 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mTotalCacheWriteCount(0U),
mTotalResourceWaitCount(0U),
mFetchDebugger(NULL),
+ mFetchSource(LLTextureFetch::FROM_ALL),
+ mOriginFetchSource(LLTextureFetch::FROM_ALL),
mFetcherLocked(FALSE)
{
mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
@@ -2340,6 +2340,13 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
if(LLTextureFetchDebugger::isEnabled())
{
mFetchDebugger = new LLTextureFetchDebugger(this, cache, imagedecodethread) ;
+ mFetchSource = (e_tex_source)gSavedSettings.getS32("TextureFetchSource");
+ if(mFetchSource < 0 && mFetchSource >= INVALID_SOURCE)
+ {
+ mFetchSource = LLTextureFetch::FROM_ALL;
+ gSavedSettings.setS32("TextureFetchSource", 0);
+ }
+ mOriginFetchSource = mFetchSource;
}
mHttpRequest = new LLCore::HttpRequest;
@@ -2441,6 +2448,8 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con
}
else
{
+ // If the requester knows nothing about the file, we fetch the smallest
+ // amount of data at the lowest resolution (highest discard level) possible.
desired_size = TEXTURE_CACHE_ENTRY_SIZE;
desired_discard = MAX_DISCARD_LEVEL;
}
@@ -2574,6 +2583,11 @@ void LLTextureFetch::deleteRequest(const LLUUID& id, bool cancel)
// Threads: T*
void LLTextureFetch::removeRequest(LLTextureFetchWorker* worker, bool cancel)
{
+ if(!worker)
+ {
+ return;
+ }
+
lockQueue(); // +Mfq
size_t erased_1 = mRequestMap.erase(worker->mID);
unlockQueue(); // -Mfq
@@ -2585,6 +2599,24 @@ void LLTextureFetch::removeRequest(LLTextureFetchWorker* worker, bool cancel)
worker->scheduleDelete();
}
+void LLTextureFetch::deleteAllRequests()
+{
+ while(1)
+ {
+ lockQueue();
+ if(mRequestMap.empty())
+ {
+ unlockQueue() ;
+ break;
+ }
+
+ LLTextureFetchWorker* worker = mRequestMap.begin()->second;
+ unlockQueue() ;
+
+ removeRequest(worker, true);
+ }
+}
+
// Threads: T*
S32 LLTextureFetch::getNumRequests()
{
@@ -2809,7 +2841,7 @@ S32 LLTextureFetch::update(F32 max_time_ms)
// won't work so don't bother trying
if (LLStartUp::getStartupState() > STATE_AGENT_SEND)
{
- sendRequestListToSimulators();
+ sendRequestListToSimulators();
}
}
@@ -2818,6 +2850,11 @@ S32 LLTextureFetch::update(F32 max_time_ms)
commonUpdate();
}
+ if (mFetchDebugger)
+ {
+ mFetchDebugger->tryToStopDebug(); //check if need to stop debugger.
+ }
+
return res;
}
@@ -3859,7 +3896,8 @@ LLTextureFetchDebugger::LLTextureFetchDebugger(LLTextureFetch* fetcher, LLTextur
LLTextureFetchDebugger::~LLTextureFetchDebugger()
{
mFetchingHistory.clear();
- stopDebug();
+ mStopDebug = TRUE;
+ tryToStopDebug();
if (mHttpHeaders)
{
mHttpHeaders->release();
@@ -3879,6 +3917,8 @@ void LLTextureFetchDebugger::init()
mTotalFetchingTime = 0.f;
mRefetchVisCacheTime = -1.f;
mRefetchVisHTTPTime = -1.f;
+ mRefetchAllCacheTime = -1.f;
+ mRefetchAllHTTPTime = -1.f;
mNumFetchedTextures = 0;
mNumCacheHits = 0;
@@ -3892,10 +3932,14 @@ void LLTextureFetchDebugger::init()
mRenderedDecodedData = 0;
mFetchedPixels = 0;
mRenderedPixels = 0;
- mRefetchedData = 0;
- mRefetchedPixels = 0;
+ mRefetchedVisData = 0;
+ mRefetchedVisPixels = 0;
+ mRefetchedAllData = 0;
+ mRefetchedAllPixels = 0;
mFreezeHistory = FALSE;
+ mStopDebug = FALSE;
+ mClearHistory = FALSE;
if (! mHttpHeaders)
{
@@ -3904,15 +3948,65 @@ void LLTextureFetchDebugger::init()
}
}
+void LLTextureFetchDebugger::startWork(e_debug_state state)
+{
+ switch(state)
+ {
+ case IDLE:
+ break;
+ case START_DEBUG:
+ startDebug();
+ break;
+ case READ_CACHE:
+ debugCacheRead();
+ break;
+ case WRITE_CACHE:
+ debugCacheWrite();
+ break;
+ case DECODING:
+ debugDecoder();
+ break;
+ case HTTP_FETCHING:
+ debugHTTP();
+ break;
+ case GL_TEX:
+ debugGLTextureCreation();
+ break;
+ case REFETCH_VIS_CACHE:
+ debugRefetchVisibleFromCache();
+ break;
+ case REFETCH_VIS_HTTP:
+ debugRefetchVisibleFromHTTP();
+ break;
+ case REFETCH_ALL_CACHE:
+ debugRefetchAllFromCache();
+ break;
+ case REFETCH_ALL_HTTP:
+ debugRefetchAllFromHTTP();
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
void LLTextureFetchDebugger::startDebug()
{
//lock the fetcher
mFetcher->lockFetcher(true);
mFreezeHistory = TRUE;
+ mFetcher->resetLoadSource();
//clear the current fetching queue
gTextureList.clearFetchingRequests();
+ mState = START_DEBUG;
+}
+
+bool LLTextureFetchDebugger::processStartDebug(F32 max_time)
+{
+ mTimer.reset();
+
//wait for all works to be done
while(1)
{
@@ -3924,6 +4018,11 @@ void LLTextureFetchDebugger::startDebug()
{
break;
}
+
+ if(mTimer.getElapsedTimeF32() > max_time)
+ {
+ return false;
+ }
}
//collect statistics
@@ -3962,10 +4061,17 @@ void LLTextureFetchDebugger::startDebug()
}
mNumFetchedTextures = fetched_textures.size();
+
+ return true;
}
-void LLTextureFetchDebugger::stopDebug()
+void LLTextureFetchDebugger::tryToStopDebug()
{
+ if(!mStopDebug)
+ {
+ return;
+ }
+
//clear the current debug work
S32 size = mFetchingHistory.size();
switch(mState)
@@ -3994,38 +4100,72 @@ void LLTextureFetchDebugger::stopDebug()
break;
case GL_TEX:
break;
+ case REFETCH_VIS_CACHE:
+ break;
+ case REFETCH_VIS_HTTP:
+ break;
+ case REFETCH_ALL_CACHE:
+ mRefetchList.clear();
+ break;
+ case REFETCH_ALL_HTTP:
+ mRefetchList.clear();
+ break;
default:
break;
}
- while(1)
+ if(update(0.005f))
{
- if(update())
+ //unlock the fetcher
+ mFetcher->lockFetcher(false);
+ mFetcher->resetLoadSource();
+ mFreezeHistory = FALSE;
+ mStopDebug = FALSE;
+
+ if(mClearHistory)
{
- break;
+ mFetchingHistory.clear();
+ mHandleToFetchIndex.clear();
+ init();
+ mTotalFetchingTime = gDebugTimers[0].getElapsedTimeF32(); //reset
}
}
-
- //unlock the fetcher
- mFetcher->lockFetcher(false);
- mFreezeHistory = FALSE;
- mTotalFetchingTime = gDebugTimers[0].getElapsedTimeF32(); //reset
}
//called in the main thread and when the fetching queue is empty
void LLTextureFetchDebugger::clearHistory()
{
- mFetchingHistory.clear();
- mHandleToFetchIndex.clear();
- init();
+ mClearHistory = TRUE;
}
void LLTextureFetchDebugger::addHistoryEntry(LLTextureFetchWorker* worker)
{
+ if(worker->mRawImage.isNull() || worker->mFormattedImage.isNull())
+ {
+ return;
+ }
+
if(mFreezeHistory)
{
- mRefetchedPixels += worker->mRawImage->getWidth() * worker->mRawImage->getHeight();
- mRefetchedData += worker->mFormattedImage->getDataSize();
+ if(mState == REFETCH_VIS_CACHE || mState == REFETCH_VIS_HTTP)
+ {
+ mRefetchedVisPixels += worker->mRawImage->getWidth() * worker->mRawImage->getHeight();
+ mRefetchedVisData += worker->mFormattedImage->getDataSize();
+ }
+ else
+ {
+ mRefetchedAllPixels += worker->mRawImage->getWidth() * worker->mRawImage->getHeight();
+ mRefetchedAllData += worker->mFormattedImage->getDataSize();
+
+ LLViewerFetchedTexture* tex = LLViewerTextureManager::findFetchedTexture(worker->mID);
+ if(tex && mRefetchList[tex].begin() != mRefetchList[tex].end())
+ {
+ if(worker->mDecodedDiscard == mFetchingHistory[mRefetchList[tex][0]].mDecodedLevel)
+ {
+ mRefetchList[tex].erase(mRefetchList[tex].begin());
+ }
+ }
+ }
return;
}
@@ -4037,9 +4177,8 @@ void LLTextureFetchDebugger::addHistoryEntry(LLTextureFetchWorker* worker)
mDecodedData += worker->mRawImage->getDataSize();
mFetchedPixels += worker->mRawImage->getWidth() * worker->mRawImage->getHeight();
- mFetchingHistory.push_back(FetchEntry(worker->mID, worker->mDesiredSize, worker->mDecodedDiscard, worker->mFormattedImage->getDataSize(), worker->mRawImage->getDataSize()));
- //mFetchingHistory.push_back(FetchEntry(worker->mID, worker->mDesiredSize, worker->mHaveAllData ? 0 : worker->mLoadedDiscard, worker->mFormattedImage->getComponents(),
- //worker->mDecodedDiscard, worker->mFormattedImage->getDataSize(), worker->mRawImage->getDataSize()));
+ mFetchingHistory.push_back(FetchEntry(worker->mID, worker->mDesiredSize, worker->mDecodedDiscard,
+ worker->mFormattedImage->getDataSize(), worker->mRawImage->getDataSize()));
}
void LLTextureFetchDebugger::lockCache()
@@ -4056,6 +4195,7 @@ void LLTextureFetchDebugger::debugCacheRead()
llassert_always(mState == IDLE);
mTimer.reset();
mState = READ_CACHE;
+ mCacheReadTime = -1.f;
S32 size = mFetchingHistory.size();
for(S32 i = 0 ; i < size ; i++)
@@ -4091,6 +4231,7 @@ void LLTextureFetchDebugger::debugCacheWrite()
llassert_always(mState == IDLE);
mTimer.reset();
mState = WRITE_CACHE;
+ mCacheWriteTime = -1.f;
S32 size = mFetchingHistory.size();
for(S32 i = 0 ; i < size ; i++)
@@ -4100,7 +4241,7 @@ void LLTextureFetchDebugger::debugCacheWrite()
mFetchingHistory[i].mCacheHandle = mTextureCache->writeToCache(mFetchingHistory[i].mID, LLWorkerThread::PRIORITY_NORMAL,
mFetchingHistory[i].mFormattedImage->getData(), mFetchingHistory[i].mFetchedSize,
mFetchingHistory[i].mDecodedLevel == 0 ? mFetchingHistory[i].mFetchedSize : mFetchingHistory[i].mFetchedSize + 1,
- new LLDebuggerCacheWriteResponder(this, i));
+ NULL, 0, new LLDebuggerCacheWriteResponder(this, i));
}
}
}
@@ -4119,6 +4260,7 @@ void LLTextureFetchDebugger::debugDecoder()
llassert_always(mState == IDLE);
mTimer.reset();
mState = DECODING;
+ mDecodingTime = -1.f;
S32 size = mFetchingHistory.size();
for(S32 i = 0 ; i < size ; i++)
@@ -4154,6 +4296,7 @@ void LLTextureFetchDebugger::debugHTTP()
mTimer.reset();
mState = HTTP_FETCHING;
+ mHTTPTime = -1.f;
S32 size = mFetchingHistory.size();
for (S32 i = 0 ; i < size ; i++)
@@ -4171,14 +4314,25 @@ void LLTextureFetchDebugger::debugHTTP()
S32 LLTextureFetchDebugger::fillCurlQueue()
{
- if (mNbCurlRequests > 20)
+ if(mStopDebug) //stop
+ {
+ mNbCurlCompleted = mFetchingHistory.size();
+ return 0;
+ }
+ if (mNbCurlRequests > HTTP_REQUESTS_IN_QUEUE_LOW_WATER)
+ {
return mNbCurlRequests;
+ }
S32 size = mFetchingHistory.size();
for (S32 i = 0 ; i < size ; i++)
{
+ mNbCurlRequests++;
+
if (mFetchingHistory[i].mCurlState != FetchEntry::CURL_NOT_DONE)
+ {
continue;
+ }
std::string texture_url = mHTTPUrl + "/?texture_id=" + mFetchingHistory[i].mID.asString().c_str();
S32 requestedSize = mFetchingHistory[i].mRequestedSize;
// We request the whole file if the size was not set.
@@ -4202,7 +4356,9 @@ S32 LLTextureFetchDebugger::fillCurlQueue()
mNbCurlRequests++;
// Hack
if (mNbCurlRequests == HTTP_REQUESTS_IN_QUEUE_HIGH_WATER) // emulate normal pipeline
+ {
break;
+ }
}
else
{
@@ -4217,7 +4373,7 @@ void LLTextureFetchDebugger::debugGLTextureCreation()
{
llassert_always(mState == IDLE);
mState = GL_TEX;
- std::vector<LLViewerFetchedTexture*> tex_list;
+ mTempTexList.clear();
S32 size = mFetchingHistory.size();
for(S32 i = 0 ; i < size ; i++)
@@ -4228,28 +4384,54 @@ void LLTextureFetchDebugger::debugGLTextureCreation()
if(tex && !tex->isForSculptOnly())
{
tex->destroyGLTexture() ;
- tex_list.push_back(tex);
+ mTempTexList.push_back(tex);
}
}
}
+
+ mGLCreationTime = -1.f;
+ mTempIndex = 0;
+ mHistoryListIndex = 0;
+
+ return;
+}
+bool LLTextureFetchDebugger::processGLCreation(F32 max_time)
+{
mTimer.reset();
- S32 j = 0 ;
- S32 size1 = tex_list.size();
- for(S32 i = 0 ; i < size && j < size1; i++)
+
+ bool done = true;
+ S32 size = mFetchingHistory.size();
+ S32 size1 = mTempTexList.size();
+ for(; mHistoryListIndex < size && mTempIndex < size1; mHistoryListIndex++)
{
- if(mFetchingHistory[i].mRawImage.notNull())
+ if(mFetchingHistory[mHistoryListIndex].mRawImage.notNull())
{
- if(mFetchingHistory[i].mID == tex_list[j]->getID())
+ if(mFetchingHistory[mHistoryListIndex].mID == mTempTexList[mTempIndex]->getID())
{
- tex_list[j]->createGLTexture(mFetchingHistory[i].mDecodedLevel, mFetchingHistory[i].mRawImage, 0, TRUE, tex_list[j]->getBoostLevel());
- j++;
+ mTempTexList[mTempIndex]->createGLTexture(mFetchingHistory[mHistoryListIndex].mDecodedLevel,
+ mFetchingHistory[mHistoryListIndex].mRawImage, 0, TRUE, mTempTexList[mTempIndex]->getBoostLevel());
+ mTempIndex++;
}
}
+
+ if(mTimer.getElapsedTimeF32() > max_time)
+ {
+ done = false;
+ break;
+ }
}
- mGLCreationTime = mTimer.getElapsedTimeF32() ;
- return;
+ if(mGLCreationTime < 0.f)
+ {
+ mGLCreationTime = mTimer.getElapsedTimeF32() ;
+ }
+ else
+ {
+ mGLCreationTime += mTimer.getElapsedTimeF32() ;
+ }
+
+ return done;
}
//clear fetching results of all textures.
@@ -4266,15 +4448,62 @@ void LLTextureFetchDebugger::clearTextures()
}
}
+void LLTextureFetchDebugger::makeRefetchList()
+{
+ mRefetchList.clear();
+ S32 size = mFetchingHistory.size();
+ for(S32 i = 0 ; i < size; i++)
+ {
+ LLViewerFetchedTexture* tex = LLViewerTextureManager::getFetchedTexture(mFetchingHistory[i].mID);
+ if(tex && tex->isJustBound()) //visible
+ {
+ continue; //the texture fetch pipeline will take care of visible textures.
+ }
+
+ mRefetchList[tex].push_back(i);
+ }
+}
+
+void LLTextureFetchDebugger::scanRefetchList()
+{
+ if(mStopDebug)
+ {
+ return;
+ }
+ if(!mRefetchNonVis)
+ {
+ return;
+ }
+
+ for(std::map< LLPointer<LLViewerFetchedTexture>, std::vector<S32> >::iterator iter = mRefetchList.begin();
+ iter != mRefetchList.end(); )
+ {
+ if(iter->second.empty())
+ {
+ gTextureList.setDebugFetching(iter->first, -1);
+ mRefetchList.erase(iter++); // This is the correct method to "erase and move on" in an std::map
+ }
+ else
+ {
+ gTextureList.setDebugFetching(iter->first, mFetchingHistory[iter->second[0]].mDecodedLevel);
+ ++iter;
+ }
+ }
+}
+
void LLTextureFetchDebugger::debugRefetchVisibleFromCache()
{
llassert_always(mState == IDLE);
mState = REFETCH_VIS_CACHE;
clearTextures();
-
+ mFetcher->setLoadSource(LLTextureFetch::FROM_ALL);
+
mTimer.reset();
mFetcher->lockFetcher(false);
+ mRefetchVisCacheTime = -1.f;
+ mRefetchedVisData = 0;
+ mRefetchedVisPixels = 0;
}
void LLTextureFetchDebugger::debugRefetchVisibleFromHTTP()
@@ -4282,17 +4511,60 @@ void LLTextureFetchDebugger::debugRefetchVisibleFromHTTP()
llassert_always(mState == IDLE);
mState = REFETCH_VIS_HTTP;
- clearCache();
clearTextures();
+ mFetcher->setLoadSource(LLTextureFetch::FROM_HTTP_ONLY);
mTimer.reset();
mFetcher->lockFetcher(false);
+ mRefetchVisHTTPTime = -1.f;
+ mRefetchedVisData = 0;
+ mRefetchedVisPixels = 0;
}
-bool LLTextureFetchDebugger::update()
+void LLTextureFetchDebugger::debugRefetchAllFromCache()
+{
+ llassert_always(mState == IDLE);
+ mState = REFETCH_ALL_CACHE;
+
+ clearTextures();
+ makeRefetchList();
+ mFetcher->setLoadSource(LLTextureFetch::FROM_ALL);
+
+ mTimer.reset();
+ mFetcher->lockFetcher(false);
+ mRefetchAllCacheTime = -1.f;
+ mRefetchedAllData = 0;
+ mRefetchedAllPixels = 0;
+ mRefetchNonVis = FALSE;
+}
+
+void LLTextureFetchDebugger::debugRefetchAllFromHTTP()
+{
+ llassert_always(mState == IDLE);
+ mState = REFETCH_ALL_HTTP;
+
+ clearTextures();
+ makeRefetchList();
+ mFetcher->setLoadSource(LLTextureFetch::FROM_HTTP_ONLY);
+
+ mTimer.reset();
+ mFetcher->lockFetcher(false);
+ mRefetchAllHTTPTime = -1.f;
+ mRefetchedAllData = 0;
+ mRefetchedAllPixels = 0;
+ mRefetchNonVis = TRUE;
+}
+
+bool LLTextureFetchDebugger::update(F32 max_time)
{
switch(mState)
{
+ case START_DEBUG:
+ if(processStartDebug(max_time))
+ {
+ mState = IDLE;
+ }
+ break;
case READ_CACHE:
if(!mTextureCache->update(1))
{
@@ -4327,22 +4599,59 @@ bool LLTextureFetchDebugger::update()
}
break;
case GL_TEX:
- mState = IDLE;
+ if(processGLCreation(max_time))
+ {
+ mState = IDLE;
+ mTempTexList.clear();
+ }
break;
case REFETCH_VIS_CACHE:
if (LLAppViewer::getTextureFetch()->getNumRequests() == 0)
{
- mRefetchVisCacheTime = gDebugTimers[0].getElapsedTimeF32() - mTotalFetchingTime;
+ mRefetchVisCacheTime = mTimer.getElapsedTimeF32() ;
mState = IDLE;
mFetcher->lockFetcher(true);
+ mFetcher->resetLoadSource();
}
break;
case REFETCH_VIS_HTTP:
if (LLAppViewer::getTextureFetch()->getNumRequests() == 0)
{
- mRefetchVisHTTPTime = gDebugTimers[0].getElapsedTimeF32() - mTotalFetchingTime;
+ mRefetchVisHTTPTime = mTimer.getElapsedTimeF32() ;
+ mState = IDLE;
+ mFetcher->lockFetcher(true);
+ mFetcher->resetLoadSource();
+ }
+ break;
+ case REFETCH_ALL_CACHE:
+ scanRefetchList();
+ if (LLAppViewer::getTextureFetch()->getNumRequests() == 0)
+ {
+ if(!mRefetchNonVis)
+ {
+ mRefetchNonVis = TRUE; //start to fetch non-vis
+ scanRefetchList();
+ break;
+ }
+
+ mRefetchAllCacheTime = mTimer.getElapsedTimeF32() ;
+ mState = IDLE;
+ mFetcher->lockFetcher(true);
+ mFetcher->resetLoadSource();
+ mRefetchList.clear();
+ mRefetchNonVis = FALSE;
+ }
+ break;
+ case REFETCH_ALL_HTTP:
+ scanRefetchList();
+ if (LLAppViewer::getTextureFetch()->getNumRequests() == 0)
+ {
+ mRefetchAllHTTPTime = mTimer.getElapsedTimeF32() ;
mState = IDLE;
mFetcher->lockFetcher(true);
+ mFetcher->resetLoadSource();
+ mRefetchList.clear();
+ mRefetchNonVis = FALSE;
}
break;
default:
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index fd2223ecb0..3a99432b48 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -89,6 +89,8 @@ public:
// Threads: T*
void deleteRequest(const LLUUID& id, bool cancel);
+ void deleteAllRequests();
+
// Threads: T*
bool getRequestFinished(const LLUUID& id, S32& discard_level,
LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux);
@@ -228,6 +230,7 @@ protected:
// Threads: T*
void addToHTTPQueue(const LLUUID& id);
+ // XXX possible delete
// Threads: T*
void removeFromHTTPQueue(const LLUUID& id, S32 received_size);
@@ -324,14 +327,13 @@ private:
F32 mMaxBandwidth; // Mfnq
LLTextureInfo mTextureInfo;
+ // XXX possible delete
U32 mHTTPTextureBits; // Mfnq
+ // XXX possible delete
//debug use
U32 mTotalHTTPRequests;
- // No longer used except in the debugger
- LLCurlRequest * mCurlGetRequest;
-
// Out-of-band cross-thread command queue. This command queue
// is logically tied to LLQueuedThread's list of
// QueuedRequest instances and so must be covered by the
@@ -375,18 +377,34 @@ public:
// reporting due to either startup or a problem POSTing data.
static volatile bool svMetricsDataBreak;
+public:
+ //debug use
+ enum e_tex_source
+ {
+ FROM_ALL = 0,
+ FROM_HTTP_ONLY,
+ INVALID_SOURCE
+ };
private:
//debug use
LLTextureFetchDebugger* mFetchDebugger;
bool mFetcherLocked;
+
+ e_tex_source mFetchSource;
+ e_tex_source mOriginFetchSource;
public:
//debug use
LLTextureFetchDebugger* getFetchDebugger() { return mFetchDebugger;}
void lockFetcher(bool lock) { mFetcherLocked = lock;}
+
+ void setLoadSource(e_tex_source source) {mFetchSource = source;}
+ void resetLoadSource() {mFetchSource = mOriginFetchSource;}
+ bool canLoadFromCache() { return mFetchSource != FROM_HTTP_ONLY;}
};
//debug use
+class LLViewerFetchedTexture;
class LLTextureFetchDebugger : public LLCore::HttpHandler
{
friend class LLTextureFetch;
@@ -398,6 +416,7 @@ public:
enum e_debug_state
{
IDLE = 0,
+ START_DEBUG,
READ_CACHE,
WRITE_CACHE,
DECODING,
@@ -467,6 +486,8 @@ private:
F32 mTotalFetchingTime;
F32 mRefetchVisCacheTime;
F32 mRefetchVisHTTPTime;
+ F32 mRefetchAllCacheTime;
+ F32 mRefetchAllHTTPTime;
LLTimer mTimer;
@@ -488,36 +509,39 @@ private:
U32 mRenderedDecodedData;
U32 mFetchedPixels;
U32 mRenderedPixels;
- U32 mRefetchedData;
- U32 mRefetchedPixels;
+ U32 mRefetchedVisData;
+ U32 mRefetchedVisPixels;
+ U32 mRefetchedAllData;
+ U32 mRefetchedAllPixels;
BOOL mFreezeHistory;
+ BOOL mStopDebug;
+ BOOL mClearHistory;
+ BOOL mRefetchNonVis;
std::string mHTTPUrl;
S32 mNbCurlRequests;
S32 mNbCurlCompleted;
+ std::map< LLPointer<LLViewerFetchedTexture>, std::vector<S32> > mRefetchList;
+ std::vector< LLPointer<LLViewerFetchedTexture> > mTempTexList;
+ S32 mTempIndex;
+ S32 mHistoryListIndex;
+
public:
- bool update(); //called in the main thread once per frame
+ bool update(F32 max_time); //called in the main thread once per frame
//fetching history
void clearHistory();
void addHistoryEntry(LLTextureFetchWorker* worker);
- void startDebug();
- void stopDebug(); //stop everything
- void debugCacheRead();
- void debugCacheWrite();
- void debugHTTP();
- void debugDecoder();
- void debugGLTextureCreation();
- void debugRefetchVisibleFromCache();
- void debugRefetchVisibleFromHTTP();
-
// Inherited from LLCore::HttpHandler
// Threads: Ttf
virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response);
-
+
+ void startWork(e_debug_state state);
+ void setStopDebug() {mStopDebug = TRUE;}
+ void tryToStopDebug(); //stop everything
void callbackCacheRead(S32 id, bool success, LLImageFormatted* image,
S32 imagesize, BOOL islocal);
void callbackCacheWrite(S32 id, bool success);
@@ -538,8 +562,10 @@ public:
U32 getRenderedDecodedData() {return mRenderedDecodedData;}
U32 getFetchedPixels() {return mFetchedPixels;}
U32 getRenderedPixels() {return mRenderedPixels;}
- U32 getRefetchedData() {return mRefetchedData;}
- U32 getRefetchedPixels() {return mRefetchedPixels;}
+ U32 getRefetchedVisData() {return mRefetchedVisData;}
+ U32 getRefetchedVisPixels() {return mRefetchedVisPixels;}
+ U32 getRefetchedAllData() {return mRefetchedAllData;}
+ U32 getRefetchedAllPixels() {return mRefetchedAllPixels;}
F32 getCacheReadTime() {return mCacheReadTime;}
F32 getCacheWriteTime() {return mCacheWriteTime;}
@@ -549,11 +575,15 @@ public:
F32 getTotalFetchingTime() {return mTotalFetchingTime;}
F32 getRefetchVisCacheTime() {return mRefetchVisCacheTime;}
F32 getRefetchVisHTTPTime() {return mRefetchVisHTTPTime;}
+ F32 getRefetchAllCacheTime() {return mRefetchAllCacheTime;}
+ F32 getRefetchAllHTTPTime() {return mRefetchAllHTTPTime;}
private:
void init();
void clearTextures();//clear fetching results of all textures.
void clearCache();
+ void makeRefetchList();
+ void scanRefetchList();
void lockFetcher();
void unlockFetcher();
@@ -566,6 +596,20 @@ private:
S32 fillCurlQueue();
+ void startDebug();
+ void debugCacheRead();
+ void debugCacheWrite();
+ void debugHTTP();
+ void debugDecoder();
+ void debugGLTextureCreation();
+ void debugRefetchVisibleFromCache();
+ void debugRefetchVisibleFromHTTP();
+ void debugRefetchAllFromCache();
+ void debugRefetchAllFromHTTP();
+
+ bool processStartDebug(F32 max_time);
+ bool processGLCreation(F32 max_time);
+
private:
static bool sDebuggerEnabled;
public:
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index 29925657b5..16c42dbd43 100644..100755
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -516,7 +516,7 @@ void LLGLTexMemBar::draw()
S32 v_offset = 0;//(S32)((texture_bar_height + 2.2f) * mTextureView->mNumTextureBars + 2.0f);
F32 total_texture_downloaded = (F32)gTotalTextureBytes / (1024 * 1024);
F32 total_object_downloaded = (F32)gTotalObjectBytes / (1024 * 1024);
- U32 total_http_requests = LLAppViewer::getTextureFetch()->getTotalNumHTTPRequests() ;
+ U32 total_http_requests = LLAppViewer::getTextureFetch()->getTotalNumHTTPRequests();
//----------------------------------------------------------------------------
LLGLSUIDefault gls_ui;
LLColor4 text_color(1.f, 1.f, 1.f, 0.75f);
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index d629f3abac..602b924398 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -334,32 +334,24 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
}
U32 ignore_btn_width = 0;
+ U32 mute_btn_pad = 0;
if (mIsScriptDialog && ignore_btn != NULL)
{
LLRect ignore_btn_rect(ignore_btn->getRect());
- S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH
- S32 ignore_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row - 1) * h_pad - ignore_btn_rect.getWidth();
- if (ignore_btn_left + ignore_btn_rect.getWidth() > max_width)// make sure that the ignore button is in panel
- {
- ignore_btn_left = max_width - ignore_btn_rect.getWidth() - 2 * HPAD;
- }
+ S32 ignore_btn_left = max_width - ignore_btn_rect.getWidth();
ignore_btn_rect.setOriginAndSize(ignore_btn_left, BOTTOM_PAD,// always move ignore button at the bottom
ignore_btn_rect.getWidth(), ignore_btn_rect.getHeight());
ignore_btn->setRect(ignore_btn_rect);
ignore_btn_width = ignore_btn_rect.getWidth();
mControlPanel->addChild(ignore_btn, -1);
+ mute_btn_pad = 4 * HPAD; //only use a 4 * HPAD padding if an ignore button exists
}
if (mIsScriptDialog && mute_btn != NULL)
{
LLRect mute_btn_rect(mute_btn->getRect());
- S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH
// Place mute (Block) button to the left of the ignore button.
- S32 mute_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row - 1) * h_pad - mute_btn_rect.getWidth() - ignore_btn_width - (h_pad / 2);
- if (mute_btn_left + mute_btn_rect.getWidth() > max_width) // make sure that the mute button is in panel
- {
- mute_btn_left = max_width - mute_btn_rect.getWidth() - 2 * HPAD;
- }
+ S32 mute_btn_left = max_width - mute_btn_rect.getWidth() - ignore_btn_width - mute_btn_pad;
mute_btn_rect.setOriginAndSize(mute_btn_left, BOTTOM_PAD,// always move mute button at the bottom
mute_btn_rect.getWidth(), mute_btn_rect.getHeight());
mute_btn->setRect(mute_btn_rect);
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 4ad0547379..444bbb2776 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2043,7 +2043,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
{
if (new_angv != old_angv)
{
- resetRot();
+ if (flagUsePhysics())
+ {
+ resetRot();
+ }
+ else
+ {
+ resetRotTime();
+ }
}
// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega)
@@ -4073,7 +4080,7 @@ S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost hos
return retval;
}
-
+//virtual
void LLViewerObject::changeTEImage(S32 index, LLViewerTexture* new_image)
{
if(index < 0 || index >= getNumTEs())
@@ -5439,9 +5446,14 @@ void LLViewerObject::applyAngularVelocity(F32 dt)
}
}
-void LLViewerObject::resetRot()
+void LLViewerObject::resetRotTime()
{
mRotTime = 0.0f;
+}
+
+void LLViewerObject::resetRot()
+{
+ resetRotTime();
// Reset the accumulated angular velocity rotation
mAngularVelocityRot.loadIdentity();
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index e60c8a8d52..277bd1c430 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -198,6 +198,9 @@ public:
virtual BOOL updateLOD();
virtual BOOL setDrawableParent(LLDrawable* parentp);
F32 getRotTime() { return mRotTime; }
+private:
+ void resetRotTime();
+public:
void resetRot();
void applyAngularVelocity(F32 dt);
@@ -210,7 +213,7 @@ public:
LLViewerRegion* getRegion() const { return mRegionp; }
BOOL isSelected() const { return mUserSelected; }
- virtual void setSelected(BOOL sel) { mUserSelected = sel; mRotTime = 0.f;}
+ virtual void setSelected(BOOL sel) { mUserSelected = sel; resetRot();}
const LLUUID &getID() const { return mID; }
U32 getLocalID() const { return mLocalID; }
@@ -319,7 +322,7 @@ public:
/*virtual*/ S32 setTEGlow(const U8 te, const F32 glow);
/*virtual*/ BOOL setMaterial(const U8 material);
virtual void setTEImage(const U8 te, LLViewerTexture *imagep); // Not derived from LLPrimitive
- void changeTEImage(S32 index, LLViewerTexture* new_image) ;
+ virtual void changeTEImage(S32 index, LLViewerTexture* new_image) ;
LLViewerTexture *getTEImage(const U8 te) const;
void fitFaceTexture(const U8 face);
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index ae9c31bfe7..77e382b8c7 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -545,9 +545,6 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1,
mRequestResult = PARCEL_RESULT_NO_DATA;
- // clear the list of segments to prevent flashing
- resetSegments(mHighlightSegments);
-
mFloatingParcelSelection->setParcel(mCurrentParcel);
mCurrentParcelSelection->setParcel(NULL);
mCurrentParcelSelection = new LLParcelSelection(mCurrentParcel);
@@ -1661,9 +1658,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
// Request access list information for this land
parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN);
- // Request the media url filter list for this land
- parcel_mgr.requestParcelMediaURLFilter();
-
// Request dwell for this land, if it's not public land.
parcel_mgr.mSelectedDwell = DWELL_NAN;
if (0 != local_id)
@@ -1992,67 +1986,6 @@ void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which)
}
}
-class LLParcelMediaURLFilterResponder : public LLHTTPClient::Responder
-{
- virtual void result(const LLSD& content)
- {
- LLViewerParcelMgr::getInstance()->receiveParcelMediaURLFilter(content);
- }
-};
-
-void LLViewerParcelMgr::requestParcelMediaURLFilter()
-{
- if (!mSelected)
- {
- return;
- }
-
- LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
- if (!region)
- {
- return;
- }
-
- LLParcel* parcel = mCurrentParcel;
- if (!parcel)
- {
- llwarns << "no parcel" << llendl;
- return;
- }
-
- LLSD body;
- body["local-id"] = parcel->getLocalID();
- body["list"] = parcel->getMediaURLFilterList();
-
- std::string url = region->getCapability("ParcelMediaURLFilterList");
- if (!url.empty())
- {
- LLHTTPClient::post(url, body, new LLParcelMediaURLFilterResponder);
- }
- else
- {
- llwarns << "can't get ParcelMediaURLFilterList cap" << llendl;
- }
-}
-
-
-void LLViewerParcelMgr::receiveParcelMediaURLFilter(const LLSD &content)
-{
- if (content.has("list"))
- {
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->mCurrentParcel;
- if (!parcel) return;
-
- if (content["local-id"].asInteger() == parcel->getLocalID())
- {
- parcel->setMediaURLFilterList(content["list"]);
-
- LLViewerParcelMgr::getInstance()->notifyObservers();
- }
- }
-}
-
-
void LLViewerParcelMgr::deedLandToGroup()
{
std::string group_name;
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 2a11549426..6183b7e90e 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -223,11 +223,6 @@ public:
// Takes an Access List flag, like AL_ACCESS or AL_BAN
void sendParcelAccessListRequest(U32 flags);
- // asks for the parcel's media url filter list
- void requestParcelMediaURLFilter();
- // receive the response
- void receiveParcelMediaURLFilter(const LLSD &content);
-
// Dwell is not part of the usual parcel update information because the
// simulator doesn't actually know the per-parcel dwell. Ack! We have
// to get it out of the database.
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 05c7ef5381..effa368b7a 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1553,7 +1553,6 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("NewFileAgentInventory");
capabilityNames.append("ObjectNavMeshProperties");
capabilityNames.append("ParcelPropertiesUpdate");
- capabilityNames.append("ParcelMediaURLFilterList");
capabilityNames.append("ParcelNavigateMedia");
capabilityNames.append("ParcelVoiceInfoRequest");
capabilityNames.append("ProductInfoRequest");
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 8fef13a6bc..d1c6b7ea79 100644..100755
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -949,15 +949,8 @@ LLSD LLViewerStats::PhaseMap::dumpPhases()
for (phase_map_t::iterator iter = mPhaseMap.begin(); iter != mPhaseMap.end(); ++iter)
{
const std::string& phase_name = iter->first;
- result[phase_name]["completed"] = !(iter->second.getStarted());
+ result[phase_name]["completed"] = LLSD::Integer(!(iter->second.getStarted()));
result[phase_name]["elapsed"] = iter->second.getElapsedTimeF32();
-#if 0 // global stats for each phase seem like overkill here
- phase_stats_t::iterator stats_iter = sPhaseStats.find(phase_name);
- if (stats_iter != sPhaseStats.end())
- {
- result[phase_name]["stats"] = stats_iter->second.getData();
- }
-#endif
}
return result;
}
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index e1eb54bd24..8eb8717de2 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -62,6 +62,7 @@
#include "llmediaentry.h"
#include "llvovolume.h"
#include "llviewermedia.h"
+#include "lltexturecache.h"
///////////////////////////////////////////////////////////////////////////////
// statics
@@ -409,7 +410,11 @@ void LLViewerTextureManager::cleanup()
void LLViewerTexture::initClass()
{
LLImageGL::sDefaultGLTexture = LLViewerFetchedTexture::sDefaultImagep->getGLTexture() ;
- sTexelPixelRatio = gSavedSettings.getF32("TexelPixelRatio");
+
+ if(gSavedSettings.getBOOL("TextureFetchDebuggerEnabled"))
+ {
+ sTexelPixelRatio = gSavedSettings.getF32("TexelPixelRatio");
+ }
}
// static
@@ -1236,7 +1241,7 @@ void LLViewerFetchedTexture::init(bool firstinit)
mIsMissingAsset = FALSE;
mLoadedCallbackDesiredDiscardLevel = S8_MAX;
- mPauseLoadedCallBacks = TRUE ;
+ mPauseLoadedCallBacks = FALSE ;
mNeedsCreateTexture = FALSE;
@@ -1253,6 +1258,7 @@ void LLViewerFetchedTexture::init(bool firstinit)
mRequestDeltaTime = 0.f;
mForSculpt = FALSE ;
mIsFetched = FALSE ;
+ mInFastCacheList = FALSE;
mCachedRawImage = NULL ;
mCachedRawDiscardLevel = -1 ;
@@ -1266,6 +1272,8 @@ void LLViewerFetchedTexture::init(bool firstinit)
mLastReferencedSavedRawImageTime = 0.0f ;
mKeptSavedRawImageTime = 0.f ;
mLastCallBackActiveTime = 0.f;
+
+ mInDebug = FALSE;
}
LLViewerFetchedTexture::~LLViewerFetchedTexture()
@@ -1310,14 +1318,47 @@ void LLViewerFetchedTexture::cleanup()
mSavedRawDiscardLevel = -1;
}
+//access the fast cache
+void LLViewerFetchedTexture::loadFromFastCache()
+{
+ if(!mInFastCacheList)
+ {
+ return; //no need to access the fast cache.
+ }
+ mInFastCacheList = FALSE;
+
+ mRawImage = LLAppViewer::getTextureCache()->readFromFastCache(getID(), mRawDiscardLevel) ;
+ if(mRawImage.notNull())
+ {
+ mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
+ mFullHeight = mRawImage->getHeight() << mRawDiscardLevel;
+ setTexelsPerImage();
+
+ if(mFullWidth > MAX_IMAGE_SIZE || mFullHeight > MAX_IMAGE_SIZE)
+ {
+ //discard all oversized textures.
+ destroyRawImage();
+ setIsMissingAsset();
+ mRawDiscardLevel = INVALID_DISCARD_LEVEL ;
+ }
+ else
+ {
+ mRequestedDiscardLevel = mDesiredDiscardLevel + 1;
+ mIsRawImageValid = TRUE;
+ addToCreateTexture() ;
+ }
+ }
+}
+
void LLViewerFetchedTexture::setForSculpt()
{
static const S32 MAX_INTERVAL = 8 ; //frames
mForSculpt = TRUE ;
- if(isForSculptOnly() && !getBoundRecently())
+ if(isForSculptOnly() && hasGLTexture() && !getBoundRecently())
{
destroyGLTexture() ; //sculpt image does not need gl texture.
+ mTextureState = ACTIVE;
}
checkCachedRawSculptImage() ;
setMaxVirtualSizeResetInterval(MAX_INTERVAL) ;
@@ -1735,7 +1776,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired;
ddiscard = llclamp(ddiscard, 0, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY);
priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR;
- setAdditionalDecodePriority(1.0f) ;//boost the textures without any data so far.
+ setAdditionalDecodePriority(0.1f) ;//boost the textures without any data so far.
}
else if ((mMinDiscardLevel > 0) && (cur_discard <= mMinDiscardLevel))
{
@@ -1836,8 +1877,6 @@ F32 LLViewerFetchedTexture::maxDecodePriority()
void LLViewerFetchedTexture::setDecodePriority(F32 priority)
{
- llassert(!mInImageList);
-
mDecodePriority = priority;
if(mDecodePriority < F_ALMOST_ZERO)
@@ -1898,6 +1937,20 @@ S32 LLViewerFetchedTexture::getCurrentDiscardLevelForFetching()
return current_discard ;
}
+bool LLViewerFetchedTexture::setDebugFetching(S32 debug_level)
+{
+ if(debug_level < 0)
+ {
+ mInDebug = FALSE;
+ return false;
+ }
+ mInDebug = TRUE;
+
+ mDesiredDiscardLevel = debug_level;
+
+ return true;
+}
+
bool LLViewerFetchedTexture::updateFetch()
{
static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled");
@@ -1935,6 +1988,10 @@ bool LLViewerFetchedTexture::updateFetch()
{
return false; // process any raw image data in callbacks before replacing
}
+ if(mInFastCacheList)
+ {
+ return false;
+ }
S32 current_discard = getCurrentDiscardLevelForFetching() ;
S32 desired_discard = getDesiredDiscardLevel();
@@ -2052,6 +2109,10 @@ bool LLViewerFetchedTexture::updateFetch()
{
make_request = false;
}
+ else if(mDesiredDiscardLevel > getMaxDiscardLevel())
+ {
+ make_request = false;
+ }
else if (mNeedsCreateTexture || mIsMissingAsset)
{
make_request = false;
@@ -2060,6 +2121,11 @@ bool LLViewerFetchedTexture::updateFetch()
{
make_request = false;
}
+ else if(mCachedRawImage.notNull() && (current_discard < 0 || current_discard > mCachedRawDiscardLevel))
+ {
+ make_request = false;
+ switchToCachedImage() ; //use the cached raw data first
+ }
//else if (!isJustBound() && mCachedRawImageReady)
//{
// make_request = false;
@@ -2152,7 +2218,10 @@ bool LLViewerFetchedTexture::updateFetch()
void LLViewerFetchedTexture::clearFetchedResults()
{
- llassert_always(!mNeedsCreateTexture && !mIsFetching);
+ if(mNeedsCreateTexture || mIsFetching)
+ {
+ return ;
+ }
cleanup();
destroyGLTexture();
@@ -2167,11 +2236,13 @@ void LLViewerFetchedTexture::forceToDeleteRequest()
{
if (mHasFetcher)
{
- LLAppViewer::getTextureFetch()->deleteRequest(getID(), true);
mHasFetcher = FALSE;
mIsFetching = FALSE ;
- resetTextureStats();
}
+
+ resetTextureStats();
+
+ mDesiredDiscardLevel = getMaxDiscardLevel() + 1;
}
void LLViewerFetchedTexture::setIsMissingAsset()
@@ -2215,10 +2286,18 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call
mLoadedCallbackDesiredDiscardLevel = llmin(mLoadedCallbackDesiredDiscardLevel, (S8)discard_level) ;
}
- if(mPauseLoadedCallBacks && !pause)
+ if(mPauseLoadedCallBacks)
+ {
+ if(!pause)
+ {
+ unpauseLoadedCallbacks(src_callback_list) ;
+ }
+ }
+ else if(pause)
{
- unpauseLoadedCallbacks(src_callback_list) ;
+ pauseLoadedCallbacks(src_callback_list) ;
}
+
LLLoadedCallbackEntry* entryp = new LLLoadedCallbackEntry(loaded_callback, discard_level, keep_imageraw, userdata, src_callback_list, this, pause);
mLoadedCallbackList.push_back(entryp);
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index f1105c3705..2ea9a07e9a 100644..100755
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -436,6 +436,8 @@ public:
void setMinDiscardLevel(S32 discard) { mMinDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel,(S8)discard); }
bool updateFetch();
+ bool setDebugFetching(S32 debug_level);
+ bool isInDebug() {return mInDebug;}
void clearFetchedResults(); //clear all fetched results, for debug use.
@@ -498,6 +500,9 @@ public:
void setCanUseHTTP(bool can_use_http) {mCanUseHTTP = can_use_http;}
void forceToDeleteRequest();
+ void loadFromFastCache();
+ void setInFastCacheList(bool in_list) { mInFastCacheList = in_list; }
+ bool isInFastCacheList() { return mInFastCacheList; }
protected:
/*virtual*/ void switchToCachedImage();
S32 getCurrentDiscardLevelForFetching() ;
@@ -516,6 +521,8 @@ private:
private:
BOOL mFullyLoaded;
+ BOOL mInDebug;
+ BOOL mInFastCacheList;
protected:
std::string mLocalFileName;
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 9a6c0569a9..e4669cde34 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -58,7 +58,7 @@
#include "pipeline.h"
#include "llappviewer.h"
#include "llxuiparser.h"
-#include "llagent.h"
+#include "llviewerdisplay.h"
////////////////////////////////////////////////////////////////////////////
@@ -276,6 +276,7 @@ void LLViewerTextureList::shutdown()
// Flush all of the references
mLoadingStreamList.clear();
mCreateTextureList.clear();
+ mFastCacheList.clear();
mUUIDMap.clear();
@@ -453,6 +454,8 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
LLGLenum primary_format,
LLHost request_from_host)
{
+ static LLCachedControl<bool> fast_cache_fetching_enabled(gSavedSettings, "FastCacheFetchEnabled");
+
LLPointer<LLViewerFetchedTexture> imagep ;
switch(texture_type)
{
@@ -490,6 +493,11 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
imagep->forceActive() ;
}
+ if(fast_cache_fetching_enabled)
+ {
+ mFastCacheList.insert(imagep);
+ imagep->setInFastCacheList(true);
+ }
return imagep ;
}
@@ -503,6 +511,7 @@ LLViewerFetchedTexture *LLViewerTextureList::findImage(const LLUUID &image_id)
void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
{
+ assert_main_thread();
llassert_always(mInitialized) ;
llassert(image);
if (image->isInImageList())
@@ -519,6 +528,7 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
{
+ assert_main_thread();
llassert_always(mInitialized) ;
llassert(image);
if (!image->isInImageList())
@@ -593,16 +603,24 @@ static LLFastTimer::DeclareTimer FTM_IMAGE_MARK_DIRTY("Dirty Images");
static LLFastTimer::DeclareTimer FTM_IMAGE_UPDATE_PRIORITIES("Prioritize");
static LLFastTimer::DeclareTimer FTM_IMAGE_CALLBACKS("Callbacks");
static LLFastTimer::DeclareTimer FTM_IMAGE_FETCH("Fetch");
+static LLFastTimer::DeclareTimer FTM_FAST_CACHE_IMAGE_FETCH("Fast Cache Fetch");
static LLFastTimer::DeclareTimer FTM_IMAGE_CREATE("Create");
static LLFastTimer::DeclareTimer FTM_IMAGE_STATS("Stats");
void LLViewerTextureList::updateImages(F32 max_time)
{
- if(gAgent.getTeleportState() != LLAgent::TELEPORT_NONE)
+ static BOOL cleared = FALSE;
+ if(gTeleportDisplay)
{
- clearFetchingRequests();
+ if(!cleared)
+ {
+ clearFetchingRequests();
+ gPipeline.clearRebuildGroups();
+ cleared = TRUE;
+ }
return;
}
+ cleared = FALSE;
LLAppViewer::getTextureFetch()->setTextureBandwidth(LLViewerStats::getInstance()->mTextureKBitStat.getMeanPerSec());
@@ -613,6 +631,11 @@ void LLViewerTextureList::updateImages(F32 max_time)
LLViewerStats::getInstance()->mRawMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageRaw::sGlobalRawMemory));
LLViewerStats::getInstance()->mFormattedMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageFormatted::sGlobalFormattedMemory));
+ {
+ //loading from fast cache
+ LLFastTimer t(FTM_FAST_CACHE_IMAGE_FETCH);
+ max_time -= updateImagesLoadingFastCache(max_time);
+ }
{
LLFastTimer t(FTM_IMAGE_UPDATE_PRIORITIES);
@@ -673,14 +696,13 @@ void LLViewerTextureList::clearFetchingRequests()
return;
}
+ LLAppViewer::getTextureFetch()->deleteAllRequests();
+
for (image_priority_list_t::iterator iter = mImageList.begin();
iter != mImageList.end(); ++iter)
{
- LLViewerFetchedTexture* image = *iter;
- if(image->hasFetcher())
- {
- image->forceToDeleteRequest() ;
- }
+ LLViewerFetchedTexture* imagep = *iter;
+ imagep->forceToDeleteRequest() ;
}
}
@@ -688,10 +710,11 @@ void LLViewerTextureList::updateImagesDecodePriorities()
{
// Update the decode priority for N images each frame
{
- const size_t max_update_count = llmin((S32) (1024*gFrameIntervalSeconds) + 1, 32); //target 1024 textures per second
- S32 update_counter = llmin(max_update_count, mUUIDMap.size()/10);
+ static const S32 MAX_PRIO_UPDATES = gSavedSettings.getS32("TextureFetchUpdatePriorities"); // default: 32
+ const size_t max_update_count = llmin((S32) (MAX_PRIO_UPDATES*MAX_PRIO_UPDATES*gFrameIntervalSeconds) + 1, MAX_PRIO_UPDATES);
+ S32 update_counter = llmin(max_update_count, mUUIDMap.size());
uuid_map_t::iterator iter = mUUIDMap.upper_bound(mLastUpdateUUID);
- while(update_counter > 0 && !mUUIDMap.empty())
+ while ((update_counter-- > 0) && !mUUIDMap.empty())
{
if (iter == mUUIDMap.end())
{
@@ -699,7 +722,13 @@ void LLViewerTextureList::updateImagesDecodePriorities()
}
mLastUpdateUUID = iter->first;
LLPointer<LLViewerFetchedTexture> imagep = iter->second;
- ++iter; // safe to incrament now
+ ++iter; // safe to increment now
+
+ if(imagep->isInDebug())
+ {
+ update_counter--;
+ continue; //is in debug, ignore.
+ }
//
// Flush formatted images using a lazy flush
@@ -754,7 +783,16 @@ void LLViewerTextureList::updateImagesDecodePriorities()
imagep->setInactive() ;
}
}
-
+
+ if (!imagep->isInImageList())
+ {
+ continue;
+ }
+ if(imagep->isInFastCacheList())
+ {
+ continue; //wait for loading from the fast cache.
+ }
+
imagep->processTextureStats();
F32 old_priority = imagep->getDecodePriority();
F32 old_priority_test = llmax(old_priority, 0.0f);
@@ -764,15 +802,35 @@ void LLViewerTextureList::updateImagesDecodePriorities()
if ((decode_priority_test < old_priority_test * .8f) ||
(decode_priority_test > old_priority_test * 1.25f))
{
- removeImageFromList(imagep);
+ mImageList.erase(imagep) ;
imagep->setDecodePriority(decode_priority);
- addImageToList(imagep);
+ mImageList.insert(imagep);
}
- update_counter--;
}
}
}
+void LLViewerTextureList::setDebugFetching(LLViewerFetchedTexture* tex, S32 debug_level)
+{
+ if(!tex->setDebugFetching(debug_level))
+ {
+ return;
+ }
+
+ const F32 DEBUG_PRIORITY = 100000.f;
+ F32 old_priority_test = llmax(tex->getDecodePriority(), 0.0f);
+ F32 decode_priority_test = DEBUG_PRIORITY;
+
+ // Ignore < 20% difference
+ if ((decode_priority_test < old_priority_test * .8f) ||
+ (decode_priority_test > old_priority_test * 1.25f))
+ {
+ removeImageFromList(tex);
+ tex->setDecodePriority(decode_priority_test);
+ addImageToList(tex);
+ }
+}
+
/*
static U8 get_image_type(LLViewerFetchedTexture* imagep, LLHost target_host)
{
@@ -827,6 +885,36 @@ F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time)
return create_timer.getElapsedTimeF32();
}
+F32 LLViewerTextureList::updateImagesLoadingFastCache(F32 max_time)
+{
+ if (gGLManager.mIsDisabled) return 0.0f;
+ if(mFastCacheList.empty())
+ {
+ return 0.f;
+ }
+
+ //
+ // loading texture raw data from the fast cache directly.
+ //
+
+ LLTimer timer;
+ image_list_t::iterator enditer = mFastCacheList.begin();
+ for (image_list_t::iterator iter = mFastCacheList.begin();
+ iter != mFastCacheList.end();)
+ {
+ image_list_t::iterator curiter = iter++;
+ enditer = iter;
+ LLViewerFetchedTexture *imagep = *curiter;
+ imagep->loadFromFastCache();
+ if (timer.getElapsedTimeF32() > max_time)
+ {
+ break;
+ }
+ }
+ mFastCacheList.erase(mFastCacheList.begin(), enditer);
+ return timer.getElapsedTimeF32();
+}
+
void LLViewerTextureList::forceImmediateUpdate(LLViewerFetchedTexture* imagep)
{
if(!imagep)
@@ -850,15 +938,24 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)
{
LLTimer image_op_timer;
- // Update the decode priority for N images each frame
- // Make a list with 32 high priority entries + 256 cycled entries
- const size_t max_priority_count = llmin((S32) (256*10.f*gFrameIntervalSeconds)+1, 32);
- const size_t max_update_count = llmin((S32) (1024*10.f*gFrameIntervalSeconds)+1, 256);
+ // Update fetch for N images each frame
+ static const S32 MAX_HIGH_PRIO_COUNT = gSavedSettings.getS32("TextureFetchUpdateHighPriority"); // default: 32
+ static const S32 MAX_UPDATE_COUNT = gSavedSettings.getS32("TextureFetchUpdateMaxMediumPriority"); // default: 256
+ static const S32 MIN_UPDATE_COUNT = gSavedSettings.getS32("TextureFetchUpdateMinMediumPriority"); // default: 32
+ static const F32 MIN_PRIORITY_THRESHOLD = gSavedSettings.getF32("TextureFetchUpdatePriorityThreshold"); // default: 0.0
+ static const bool SKIP_LOW_PRIO = gSavedSettings.getBOOL("TextureFetchUpdateSkipLowPriority"); // default: false
+
+ size_t max_priority_count = llmin((S32) (MAX_HIGH_PRIO_COUNT*MAX_HIGH_PRIO_COUNT*gFrameIntervalSeconds)+1, MAX_HIGH_PRIO_COUNT);
+ max_priority_count = llmin(max_priority_count, mImageList.size());
+
+ size_t total_update_count = mUUIDMap.size();
+ size_t max_update_count = llmin((S32) (MAX_UPDATE_COUNT*MAX_UPDATE_COUNT*gFrameIntervalSeconds)+1, MAX_UPDATE_COUNT);
+ max_update_count = llmin(max_update_count, total_update_count);
- // 32 high priority entries
+ // MAX_HIGH_PRIO_COUNT high priority entries
typedef std::vector<LLViewerFetchedTexture*> entries_list_t;
entries_list_t entries;
- size_t update_counter = llmin(max_priority_count, mImageList.size());
+ size_t update_counter = max_priority_count;
image_priority_list_t::iterator iter1 = mImageList.begin();
while(update_counter > 0)
{
@@ -868,43 +965,46 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)
update_counter--;
}
- // 256 cycled entries
- update_counter = llmin(max_update_count, mUUIDMap.size());
+ // MAX_UPDATE_COUNT cycled entries
+ update_counter = max_update_count;
if(update_counter > 0)
{
uuid_map_t::iterator iter2 = mUUIDMap.upper_bound(mLastFetchUUID);
- uuid_map_t::iterator iter2p = iter2;
- while(update_counter > 0)
+ while ((update_counter > 0) && (total_update_count > 0))
{
if (iter2 == mUUIDMap.end())
{
iter2 = mUUIDMap.begin();
}
- entries.push_back(iter2->second);
- iter2p = iter2++;
- update_counter--;
+ LLViewerFetchedTexture* imagep = iter2->second;
+ // Skip the textures where there's really nothing to do so to give some times to others. Also skip the texture if it's already in the high prio set.
+ if (!SKIP_LOW_PRIO || (SKIP_LOW_PRIO && ((imagep->getDecodePriority() > MIN_PRIORITY_THRESHOLD) || imagep->hasFetcher())))
+ {
+ entries.push_back(imagep);
+ update_counter--;
+ }
+
+ iter2++;
+ total_update_count--;
}
-
- mLastFetchUUID = iter2p->first;
}
S32 fetch_count = 0;
- S32 min_count = max_priority_count + max_update_count/4;
+ size_t min_update_count = llmin(MIN_UPDATE_COUNT,(S32)(entries.size()-max_priority_count));
+ S32 min_count = max_priority_count + min_update_count;
for (entries_list_t::iterator iter3 = entries.begin();
iter3 != entries.end(); )
{
LLViewerFetchedTexture* imagep = *iter3++;
-
- bool fetching = imagep->updateFetch();
- if (fetching)
+ fetch_count += (imagep->updateFetch() ? 1 : 0);
+ if (min_count <= min_update_count)
{
- fetch_count++;
+ mLastFetchUUID = imagep->getID();
}
- if (min_count <= 0 && image_op_timer.getElapsedTimeF32() > max_time)
+ if ((min_count-- <= 0) && (image_op_timer.getElapsedTimeF32() > max_time))
{
break;
}
- min_count--;
}
//if (fetch_count == 0)
//{
@@ -936,6 +1036,9 @@ void LLViewerTextureList::decodeAllImages(F32 max_time)
{
LLTimer timer;
+ //loading from fast cache
+ updateImagesLoadingFastCache(max_time);
+
// Update texture stats and priorities
std::vector<LLPointer<LLViewerFetchedTexture> > image_list;
for (image_priority_list_t::iterator iter = mImageList.begin();
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index e89997fe28..3dda973d3f 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -111,6 +111,7 @@ public:
void doPrefetchImages();
void clearFetchingRequests();
+ void setDebugFetching(LLViewerFetchedTexture* tex, S32 debug_level);
static S32 getMinVideoRamSetting();
static S32 getMaxVideoRamSetting(bool get_recommended = false);
@@ -120,6 +121,7 @@ private:
F32 updateImagesCreateTextures(F32 max_time);
F32 updateImagesFetchTextures(F32 max_time);
void updateImagesUpdateStats();
+ F32 updateImagesLoadingFastCache(F32 max_time);
void addImage(LLViewerFetchedTexture *image);
void deleteImage(LLViewerFetchedTexture *image);
@@ -173,6 +175,7 @@ public:
image_list_t mLoadingStreamList;
image_list_t mCreateTextureList;
image_list_t mCallbackList;
+ image_list_t mFastCacheList;
// Note: just raw pointers because they are never referenced, just compared against
std::set<LLViewerFetchedTexture*> mDirtyTextureList;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index af2eec9ba8..1798d554b9 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1555,8 +1555,12 @@ LLViewerWindow::LLViewerWindow(const Params& p)
LLNotifications::instance().getChannel("VW_alerts")->connectChanged(&LLViewerWindow::onAlert);
LLNotifications::instance().getChannel("VW_alertmodal")->connectChanged(&LLViewerWindow::onAlert);
- LLNotifications::instance().setIgnoreAllNotifications(gSavedSettings.getBOOL("IgnoreAllNotifications"));
- llinfos << "NOTE: ALL NOTIFICATIONS THAT OCCUR WILL GET ADDED TO IGNORE LIST FOR LATER RUNS." << llendl;
+ bool ignore = gSavedSettings.getBOOL("IgnoreAllNotifications");
+ LLNotifications::instance().setIgnoreAllNotifications(ignore);
+ if (ignore)
+ {
+ llinfos << "NOTE: ALL NOTIFICATIONS THAT OCCUR WILL GET ADDED TO IGNORE LIST FOR LATER RUNS." << llendl;
+ }
// Default to application directory.
LLViewerWindow::sSnapshotBaseName = "Snapshot";
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index c0ef1d7a4b..366b6004be 100644..100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -6676,7 +6676,7 @@ void LLVOAvatar::updateMeshTextures()
if(!isSelf())
{
src_callback_list = &mCallbackTextureList ;
- paused = mLoadedCallbacksPaused ;
+ paused = !isVisible();
}
std::vector<BOOL> is_layer_baked;
@@ -7221,7 +7221,7 @@ void LLVOAvatar::onFirstTEMessageReceived()
if(!isSelf())
{
src_callback_list = &mCallbackTextureList ;
- paused = mLoadedCallbacksPaused ;
+ paused = !isVisible();
}
for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 07b9b78255..7a81063f83 100644..100755
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -2130,9 +2130,7 @@ LLSD LLVOAvatarSelf::metricsData()
{
// runway - add region info
LLSD result;
- result["id"] = getID();
result["rez_status"] = LLVOAvatar::rezStatusToString(getRezzedStatus());
- result["is_self"] = isSelf();
std::vector<S32> rez_counts;
LLVOAvatar::getNearbyRezzedStats(rez_counts);
result["nearby"] = LLSD::emptyMap();
@@ -2146,7 +2144,6 @@ LLSD LLVOAvatarSelf::metricsData()
result["timers"]["ruth"] = mRuthTimer.getElapsedTimeF32();
result["timers"]["invisible"] = mInvisibleTimer.getElapsedTimeF32();
result["timers"]["fully_loaded"] = mFullyLoadedTimer.getElapsedTimeF32();
- result["phases"] = getPhases().dumpPhases();
result["startup"] = LLStartUp::getPhases().dumpPhases();
return result;
@@ -2155,7 +2152,12 @@ LLSD LLVOAvatarSelf::metricsData()
class ViewerAppearanceChangeMetricsResponder: public LLCurl::Responder
{
public:
- ViewerAppearanceChangeMetricsResponder()
+ ViewerAppearanceChangeMetricsResponder( S32 expected_sequence,
+ volatile const S32 & live_sequence,
+ volatile bool & reporting_started):
+ mExpectedSequence(expected_sequence),
+ mLiveSequence(live_sequence),
+ mReportingStarted(reporting_started)
{
}
@@ -2174,14 +2176,44 @@ public:
error(status,reason);
}
}
+
+ // virtual
+ void error(U32 status_num, const std::string & reason)
+ {
+ }
+
+ // virtual
+ void result(const LLSD & content)
+ {
+ if (mLiveSequence == mExpectedSequence)
+ {
+ mReportingStarted = true;
+ }
+ }
+
+private:
+ S32 mExpectedSequence;
+ volatile const S32 & mLiveSequence;
+ volatile bool & mReportingStarted;
};
void LLVOAvatarSelf::sendAppearanceChangeMetrics()
{
// gAgentAvatarp->stopAllPhases();
+ static volatile bool reporting_started(false);
+ static volatile S32 report_sequence(0);
LLSD msg = metricsData();
msg["message"] = "ViewerAppearanceChangeMetrics";
+ msg["session_id"] = gAgentSessionID;
+ msg["agent_id"] = gAgentID;
+ msg["sequence"] = report_sequence;
+ msg["initial"] = !reporting_started;
+ msg["break"] = false;
+
+ // Update sequence number
+ if (S32_MAX == ++report_sequence)
+ report_sequence = 0;
LL_DEBUGS("Avatar") << avString() << "message: " << ll_pretty_print_sd(msg) << LL_ENDL;
std::string caps_url;
@@ -2194,8 +2226,10 @@ void LLVOAvatarSelf::sendAppearanceChangeMetrics()
{
LLCurlRequest::headers_t headers;
LLHTTPClient::post(caps_url,
- msg,
- new ViewerAppearanceChangeMetricsResponder);
+ msg,
+ new ViewerAppearanceChangeMetricsResponder(report_sequence,
+ report_sequence,
+ reporting_started));
}
}
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 958282f1eb..e99898a83c 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -822,7 +822,7 @@ void LLVOVolume::updateTextureVirtualSize(bool forced)
}
}
- S32 texture_discard = mSculptTexture->getDiscardLevel(); //try to match the texture
+ S32 texture_discard = mSculptTexture->getCachedRawImageLevel(); //try to match the texture
S32 current_discard = getVolume() ? getVolume()->getSculptLevel() : -2 ;
if (texture_discard >= 0 && //texture has some data available
@@ -1128,7 +1128,7 @@ void LLVOVolume::sculpt()
S8 sculpt_components = 0;
const U8* sculpt_data = NULL;
- S32 discard_level = mSculptTexture->getDiscardLevel() ;
+ S32 discard_level = mSculptTexture->getCachedRawImageLevel() ;
LLImageRaw* raw_image = mSculptTexture->getCachedRawImage() ;
S32 max_discard = mSculptTexture->getMaxDiscardLevel();
@@ -1803,6 +1803,18 @@ void LLVOVolume::setNumTEs(const U8 num_tes)
return ;
}
+//virtual
+void LLVOVolume::changeTEImage(S32 index, LLViewerTexture* imagep)
+{
+ BOOL changed = (mTEImages[index] != imagep);
+ LLViewerObject::changeTEImage(index, imagep);
+ if (changed)
+ {
+ gPipeline.markTextured(mDrawable);
+ mFaceMappingChanged = TRUE;
+ }
+}
+
void LLVOVolume::setTEImage(const U8 te, LLViewerTexture *imagep)
{
BOOL changed = (mTEImages[te] != imagep);
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 0082f2e991..5482c80f2b 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -173,6 +173,7 @@ public:
/*virtual*/ void setScale(const LLVector3 &scale, BOOL damped);
+ /*virtual*/ void changeTEImage(S32 index, LLViewerTexture* new_image) ;
/*virtual*/ void setNumTEs(const U8 num_tes);
/*virtual*/ void setTEImage(const U8 te, LLViewerTexture *imagep);
/*virtual*/ S32 setTETexture(const U8 te, const LLUUID &uuid);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index f6b0d6c5fa..920bac93a2 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -1680,6 +1680,21 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)
}
+//static
+void LLPipeline::removeMutedAVsLights(LLVOAvatar* muted_avatar)
+{
+ LLFastTimer t(FTM_REMOVE_FROM_LIGHT_SET);
+ for (light_set_t::iterator iter = gPipeline.mNearbyLights.begin();
+ iter != gPipeline.mNearbyLights.end(); iter++)
+ {
+ if (iter->drawable->getVObj()->isAttachment() && iter->drawable->getVObj()->getAvatar() == muted_avatar)
+ {
+ gPipeline.mLights.erase(iter->drawable);
+ gPipeline.mNearbyLights.erase(iter);
+ }
+ }
+}
+
U32 LLPipeline::addObject(LLViewerObject *vobj)
{
LLMemType mt_ao(LLMemType::MTYPE_PIPELINE_ADD_OBJECT);
@@ -2563,6 +2578,31 @@ void LLPipeline::updateGL()
static LLFastTimer::DeclareTimer FTM_REBUILD_PRIORITY_GROUPS("Rebuild Priority Groups");
+void LLPipeline::clearRebuildGroups()
+{
+ mGroupQ1Locked = true;
+ // Iterate through all drawables on the priority build queue,
+ for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ1.begin();
+ iter != mGroupQ1.end(); ++iter)
+ {
+ LLSpatialGroup* group = *iter;
+ group->clearState(LLSpatialGroup::IN_BUILD_Q1);
+ }
+ mGroupQ1.clear();
+ mGroupQ1Locked = false;
+
+ mGroupQ2Locked = true;
+ for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ2.begin();
+ iter != mGroupQ2.end(); ++iter)
+ {
+ LLSpatialGroup* group = *iter;
+ group->clearState(LLSpatialGroup::IN_BUILD_Q2);
+ }
+
+ mGroupQ2.clear();
+ mGroupQ2Locked = false;
+}
+
void LLPipeline::rebuildPriorityGroups()
{
LLFastTimer t(FTM_REBUILD_PRIORITY_GROUPS);
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 0140e24d63..fd2a1e06cd 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -151,6 +151,8 @@ public:
void unlinkDrawable(LLDrawable*);
+ static void removeMutedAVsLights(LLVOAvatar*);
+
// Object related methods
void markVisible(LLDrawable *drawablep, LLCamera& camera);
void markOccluder(LLSpatialGroup* group);
@@ -223,6 +225,7 @@ public:
void updateGL();
void rebuildPriorityGroups();
void rebuildGroups();
+ void clearRebuildGroups();
//calculate pixel area of given box from vantage point of given camera
static F32 calcPixelArea(LLVector3 center, LLVector3 size, LLCamera& camera);
diff --git a/indra/newview/res-sdl/lltoolpathfinding.BMP b/indra/newview/res-sdl/lltoolpathfinding.BMP
new file mode 100644
index 0000000000..a567951b7a
--- /dev/null
+++ b/indra/newview/res-sdl/lltoolpathfinding.BMP
Binary files differ
diff --git a/indra/newview/res-sdl/lltoolpathfindingpathend.BMP b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP
new file mode 100644
index 0000000000..aacea8237f
--- /dev/null
+++ b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP
Binary files differ
diff --git a/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP
new file mode 100644
index 0000000000..fa19f3f105
--- /dev/null
+++ b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP
Binary files differ
diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP
new file mode 100644
index 0000000000..912b7f931a
--- /dev/null
+++ b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP
Binary files differ
diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP
new file mode 100644
index 0000000000..4e8999ae0b
--- /dev/null
+++ b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP
Binary files differ
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index cf6f1ccdd9..33b876bdb9 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -481,7 +481,6 @@ Du kan bruge [SECOND_LIFE] normalt og andre personer vil se dig korrekt.
[APP_NAME] installationen er færdig.
Hvis det er første gang du bruger [SECOND_LIFE], skal du først oprette en konto for at logge på.
-Vend tilbage til [http://join.secondlife.com secondlife.com] for at oprette en ny konto?
</notification>
<notification name="LoginPacketNeverReceived">
Der er problemer med at koble på. Der kan være et problem med din Internet forbindelse eller [SECOND_LIFE_GRID].
diff --git a/indra/newview/skins/default/xui/da/panel_login.xml b/indra/newview/skins/default/xui/da/panel_login.xml
index 2e0f726e1a..b7cb76d4cb 100644
--- a/indra/newview/skins/default/xui/da/panel_login.xml
+++ b/indra/newview/skins/default/xui/da/panel_login.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_login">
- <panel.string name="create_account_url">
- http://join.secondlife.com/
- </panel.string>
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php
</panel.string>
<layout_stack name="login_widgets">
<layout_panel name="login">
+ <text name="log_in_text">
+ LOG PÅ
+ </text>
<text name="username_text">
Brugernavn:
</text>
@@ -15,15 +15,8 @@
<text name="password_text">
Password:
</text>
- <check_box label="Husk password" name="remember_check"/>
- <button label="Log på" name="connect_btn"/>
- <text name="mode_selection_text">
- Tilstand:
- </text>
- <combo_box name="mode_combo" tool_tip="Vælg ønsket tilstand. Vælg basis for hurtig og nem udforskning og chat. Vælg avanceret for at få adgang til flere muligheder.">
- <combo_box.item label="Basis" name="Basic"/>
- <combo_box.item label="Avanceret" name="Advanced"/>
- </combo_box>
+ </layout_panel>
+ <layout_panel name="start_location_panel">
<text name="start_location_text">
Start ved:
</text>
@@ -33,16 +26,21 @@
<combo_box.item label="&lt;Indtast regionnavn&gt;" name="Typeregionname"/>
</combo_box>
</layout_panel>
- <layout_panel name="links">
- <text name="create_new_account_text">
- Opret bruger
+ <layout_panel name="links_login_panel">
+ <text name="login_help">
+ Hjælp til login
</text>
<text name="forgot_password_text">
Har du glemt brugernavn eller password?
</text>
- <text name="login_help">
- Hjælp til login
+ <button label="Log på" name="connect_btn"/>
+ <check_box label="Husk password" name="remember_check"/>
+ </layout_panel>
+ <layout_panel name="links">
+ <text name="create_account_text">
+ CREATE YǾUR ACCǾUNT
</text>
+ <button name="create_new_account_btn" label="Opret bruger"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
index b4c28daac9..4387a61963 100644
--- a/indra/newview/skins/default/xui/de/floater_about.xml
+++ b/indra/newview/skins/default/xui/de/floater_about.xml
@@ -66,27 +66,26 @@ Voice-Serverversion: [VOICE_VERSION]
</panel>
<panel label="Lizenzen" name="licenses_panel">
<text_editor name="credits_editor">
- 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion.
- APR Copyright (C) 2000-2004 The Apache Software Foundation.
- Collada DOM Copyright 2005 Sony Computer Entertainment Inc.
- cURL Copyright (C) 1996-2002, Daniel Stenberg (daniel@haxx.se).
+ 3Dconnexion SDK Copyright (C) 1992-2009 3Dconnexion.
+ APR Copyright (C) 2011 The Apache Software Foundation
+ Collada DOM Copyright 2006 Sony Computer Entertainment Inc.
+ cURL Copyright (C) 1996-2010, Daniel Stenberg (daniel@haxx.se).
DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.
expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
- FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+ FreeType Copyright (C) 1996-2002, 2006 David Turner, Robert Wilhelm und Werner Lemberg.
GL Copyright (C) 1999-2004 Brian Paul.
GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University sowie David Luebke, Brenden Schubert, University of Virginia.
google-perftools Copyright (c) 2005, Google Inc.
Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW).
jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
- ogg/vorbis Copyright (C) 2001, Xiphophorus.
- OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
- PCRE Copyright (c) 1997-2008 University of Cambridge.
+ ogg/vorbis Copyright (C) 2002, Xiphophorus.
+ OpenSSL Copyright (C) 1998-2008 The OpenSSL Project.
+ PCRE Copyright (c) 1997-2012 University of Cambridge.
SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga.
SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com).
xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
- zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler.
- google-perftools Copyright (c) 2005, Google Inc.
+ zlib Copyright (C) 1995-2012 Jean-loup Gailly und Mark Adler.
Second Life Viewer verwendet Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (und Lizenzgeber). Alle Rechte vorbehalten. Details siehe www.havok.com.
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
index 9e330f9766..44922fbe78 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -463,7 +463,7 @@ Nur große Parzellen können in der Suche aufgeführt werden.
Zugang nur Einwohnern gestatten, die:
</text>
<check_box label="Zahlungsinformationen hinterlegt haben [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Um diese Parzelle besuchen zu können, müssen Einwohner Zahlungsinformationen hinterlegt haben. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
- <check_box label="ihr Alter bestätigt haben [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Um diese Parzelle besuchen zu können, müssen Einwohner ihr Alter bestätigt haben. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+ <check_box label="Sind mindestens 18 Jahre alt [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Nur Einwohner, die mindestens 18 Jahre alt sind, können diese Parzelle betreten. Weitere Informationen finden Sie unter [SUPPORT_SITE]."/>
<check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register „Allgemein“ festlegen."/>
<check_box label="Pässe verkaufen an:" name="PassCheck" tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/de/floater_animation_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_preview.xml
deleted file mode 100644
index 82a4a51d07..0000000000
--- a/indra/newview/skins/default/xui/de/floater_animation_preview.xml
+++ /dev/null
@@ -1,188 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Animation Preview" title="">
- <floater.string name="failed_to_initialize">
- Bewegung konnte nicht initialisiert werden
- </floater.string>
- <floater.string name="anim_too_long">
- Animationsdatei ist [LENGTH] Sekunden lang.
-
-Maximal erlaubt sind [MAX_LENGTH] Sekunden.
- </floater.string>
- <floater.string name="failed_file_read">
- Animationsdatei konnte nicht gelesen werden.
-
-[STATUS]
- </floater.string>
- <floater.string name="E_ST_OK">
- OK
- </floater.string>
- <floater.string name="E_ST_EOF">
- Unvollständige Datei
- </floater.string>
- <floater.string name="E_ST_NO_CONSTRAINT">
- Constraint-Definition kann nicht gelesen werden.
- </floater.string>
- <floater.string name="E_ST_NO_FILE">
- BVH-Datei kann nicht geöffnet werden
- </floater.string>
- <floater.string name="E_ST_NO_HIER">
- Ungültiger HIERARCHY-Titel.
- </floater.string>
- <floater.string name="E_ST_NO_JOINT">
- ROOT oder JOINT nicht gefunden.
- </floater.string>
- <floater.string name="E_ST_NO_NAME">
- JOINT-Name nicht erfasst.
- </floater.string>
- <floater.string name="E_ST_NO_OFFSET">
- VERSATZ nicht gefunden.
- </floater.string>
- <floater.string name="E_ST_NO_CHANNELS">
- CHANNELS nicht gefunden.
- </floater.string>
- <floater.string name="E_ST_NO_ROTATION">
- Kann Rotations-Reihenfolge nicht erfassen.
- </floater.string>
- <floater.string name="E_ST_NO_AXIS">
- Kann Rotations-Achse nicht erfassen.
- </floater.string>
- <floater.string name="E_ST_NO_MOTION">
- MOTION nicht gefunden.
- </floater.string>
- <floater.string name="E_ST_NO_FRAMES">
- Anzahl der Bilder kann nicht erfasst werden.
- </floater.string>
- <floater.string name="E_ST_NO_FRAME_TIME">
- Bildzeit kann nicht erfasst werden.
- </floater.string>
- <floater.string name="E_ST_NO_POS">
- Positions-Werte können nicht erfasst werden.
- </floater.string>
- <floater.string name="E_ST_NO_ROT">
- Kann Rotations-Werte nicht erfassen.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_FILE">
- Datei kann nicht geöffnet werden
- </floater.string>
- <floater.string name="E_ST_NO_XLT_HEADER">
- Übersetzungstitel kann nicht gelesen werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_NAME">
- Übersetzungsnamen können nicht geladen werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_IGNORE">
- Ignorier-Wert kann nicht gelesen werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_RELATIVE">
- Übersetzungs-Wert kann nicht gelesen werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_OUTNAME">
- Outname-Wert kann nicht gelesen werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MATRIX">
- Übersetzungsmatrix kann nicht geladen werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MERGECHILD">
- Mergechild-Name nicht erfasst.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MERGEPARENT">
- Mergeparent-Name nicht erfasst.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_PRIORITY">
- Prioritätswert kann nicht erfasst werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_LOOP">
- Loop-Wert kann nicht erfasst werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EASEIN">
- Easeln-Wert kann nicht erfasst werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EASEOUT">
- easeOut-Wert kann nicht erfasst werden.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_HAND">
- Hand-Morph-Wert nicht erfasst.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EMOTE">
- Emote-Name kann nicht gelesen werden.
- </floater.string>
- <floater.string name="E_ST_BAD_ROOT">
- Falscher Root-Joint-Name, &quot;hip&quot; verwenden.
- </floater.string>
- <text name="name_label">
- Name:
- </text>
- <line_editor name="name_form"/>
- <text name="description_label">
- Beschreibung:
- </text>
- <spinner label="Priorität" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation überschrieben werden können"/>
- <check_box bottom_delta="-18" label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife"/>
- <spinner label="In (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen"/>
- <spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen"/>
- <text name="hand_label">
- Handhaltung
- </text>
- <combo_box label="" name="hand_pose_combo" tool_tip="Steuert während der Animation die Bewegung der Hände">
- <combo_box.item label="Dehnen" name="Spread"/>
- <combo_box.item label="Entspannt" name="Relaxed"/>
- <combo_box.item label="Beide zeigen" name="PointBoth"/>
- <combo_box.item label="Faust" name="Fist"/>
- <combo_box.item label="Links entspannt" name="RelaxedLeft"/>
- <combo_box.item label="Nach links zeigen" name="PointLeft"/>
- <combo_box.item label="Linke Faust" name="FistLeft"/>
- <combo_box.item label="Rechts entspannt" name="RelaxedRight"/>
- <combo_box.item label="Nach rechts zeigen" name="PointRight"/>
- <combo_box.item label="Rechte Faust" name="FistRight"/>
- <combo_box.item label="Rechts salutieren" name="SaluteRight"/>
- <combo_box.item label="Tippt" name="Typing"/>
- <combo_box.item label="Friedensrecht" name="PeaceRight"/>
- </combo_box>
- <text name="emote_label">
- Ausdruck
- </text>
- <combo_box label="" name="emote_combo" tool_tip="Steuert Gesichtsregungen während der Animation">
- <item label="(Keiner)" name="[None]" value=""/>
- <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
- <item label="Ängstlich" name="Afraid" value="Ängstlich"/>
- <item label="Verärgert" name="Angry" value="Verärgert"/>
- <item label="Grinst" name="BigSmile" value="Grinsend"/>
- <item label="Gelangweilt" name="Bored" value="Gelangweilt"/>
- <item label="Weinen" name="Cry" value="Weinen"/>
- <item label="Verachten" name="Disdain" value="Verachten"/>
- <item label="Verlegen" name="Embarrassed" value="Verlegen"/>
- <item label="Stirnrunzeln" name="Frown" value="Stirnrunzeln"/>
- <item label="Küssen" name="Kiss" value="Küssen"/>
- <item label="Lachen" name="Laugh" value="Lachen"/>
- <item label="Bäääh" name="Plllppt" value="Bäääh"/>
- <item label="Angewidert" name="Repulsed" value="Angewidert"/>
- <item label="Traurig" name="Sad" value="Traurig"/>
- <item label="Schulterzucken" name="Shrug" value="Schulterzucken"/>
- <item label="Lächeln" name="Smile" value="Lächeln"/>
- <item label="Überraschung" name="Surprise" value="Überraschung"/>
- <item label="Zwinkern" name="Wink" value="Zwinkern"/>
- <item label="Sorgenvoll" name="Worry" value="Sorgenvoll"/>
- </combo_box>
- <text name="preview_label" width="97">
- Vorschau während:
- </text>
- <combo_box label="" left_delta="107" name="preview_base_anim" tool_tip="Hiermit können Sie das Verhalten Ihres Avatars testen, während Ihr Avatar normale Bewegungen ausführt.">
- <item label="Stehend" name="Standing" value="Stehend"/>
- <item label="Geht" name="Walking" value="Gehend"/>
- <item label="Sitzt" name="Sitting" value="Sitzend"/>
- <item label="Fliegen" name="Flying" value="Fliegen"/>
- </combo_box>
- <spinner label="Eingang glätten (s)" label_width="105" name="ease_in_time" tool_tip="Einblendungsgeschwindigkeit von Animationen (in Sekunden)" width="175"/>
- <spinner bottom_delta="-20" label="Ausgang glätten (s)" label_width="105" left="10" name="ease_out_time" tool_tip="Ausblendegeschwindigkeit von Animationen (in Sekunden)" width="175"/>
- <button bottom_delta="-32" label="" name="play_btn" tool_tip="Ihre Animation abspielen"/>
- <button name="pause_btn" tool_tip="Ihre Animation pausieren"/>
- <button label="" name="stop_btn" tool_tip="Animation anhalten"/>
- <slider label="" name="playback_slider"/>
- <text name="bad_animation_text">
- Animationsdatei konnte nicht gelesen werden.
-
-Wir empfehlen exportierte BVH-Dateien aus Poser 4.
- </text>
- <button label="Hochladen ([AMOUNT] L$)" name="ok_btn" width="160"/>
- <button label="Abbrechen" left="180" name="cancel_btn" width="88"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_autoreplace.xml b/indra/newview/skins/default/xui/de/floater_autoreplace.xml
new file mode 100644
index 0000000000..0c774990ef
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_autoreplace.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="autoreplace_floater" title="Einstellungen für automatische Ersetzung...">
+ <check_box label="Automatische Ersetzung aktivieren..." name="autoreplace_enable" tool_tip="Eines oder mehrere Schlüsselwörter bei der Eingabe von Chat-Text durch die entsprechende Ersetzung substituieren"/>
+ <button label="Liste importieren..." name="autoreplace_import_list" tool_tip="Exportierte Liste aus einer Datei laden."/>
+ <button label="Liste exportieren..." name="autoreplace_export_list" tool_tip="Ausgewählte Liste zur Weitergabe in einer Datei speichern."/>
+ <button label="Neue Liste..." name="autoreplace_new_list" tool_tip="Neue Liste erstellen."/>
+ <button label="Liste löschen" name="autoreplace_delete_list" tool_tip="Ausgewählte Liste löschen."/>
+ <button name="autoreplace_list_up" tool_tip="Dieser Liste eine höhere Priorität einräumen."/>
+ <button name="autoreplace_list_down" tool_tip="Dieser Liste eine niedrigere Priorität einräumen."/>
+ <scroll_list name="autoreplace_list_replacements">
+ <scroll_list.columns label="Schlüsselwort" name="keyword"/>
+ <scroll_list.columns label="Ersetzung" name="replacement"/>
+ </scroll_list>
+ <button label="Hinzufügen..." name="autoreplace_add_entry"/>
+ <button label="Entfernen" name="autoreplace_delete_entry"/>
+ <button label="Eintrag speichern" name="autoreplace_save_entry" tool_tip="Diesen Eintrag speichern."/>
+ <button label="Änderungen speichern" name="autoreplace_save_changes" tool_tip="Alle Änderungen speichern."/>
+ <button label="Abbrechen" name="autoreplace_cancel" tool_tip="Alle Änderungen löschen."/>
+</floater>
+<!--
+ <text
+ top_pad="10"
+ left="10"
+ height="16"
+ width="260"
+ follows="left|top"
+ halign="center"
+ mouse_opaque="true"
+ name="autoreplace_text2">
+ Entries
+ </text>
+-->
diff --git a/indra/newview/skins/default/xui/de/floater_inventory.xml b/indra/newview/skins/default/xui/de/floater_inventory.xml
deleted file mode 100644
index d9b7c30fd2..0000000000
--- a/indra/newview/skins/default/xui/de/floater_inventory.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="MEIN INVENTAR">
- <floater.string name="Title">
- MEIN INVENTAR
- </floater.string>
- <floater.string name="TitleFetching">
- MEIN INVENTAR ([ITEM_COUNT] Objekte werden abgerufen...) [FILTER]
- </floater.string>
- <floater.string name="TitleCompleted">
- MEIN INVENTAR ([ITEM_COUNT] Objekte) [FILTER]
- </floater.string>
- <floater.string name="Fetched">
- Abgerufen
- </floater.string>
- <panel label="Inventar" name="Inventory Panel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml
index 4af8d67686..4285462bc8 100644
--- a/indra/newview/skins/default/xui/de/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml
@@ -92,19 +92,54 @@
<text initial_value="Dreiecke" name="triangles" value="Dreiecke"/>
<text initial_value="Scheitelpunkte" name="vertices" value="Scheitelpunkte"/>
<text initial_value="Hoch" name="high_label" value="Hoch"/>
+ <combo_box name="lod_source_high">
+ <item name="Load from file" value="Aus Datei laden"/>
+ <item name="Generate" value="Generieren"/>
+ </combo_box>
<button label="Durchsuchen..." name="lod_browse_high"/>
+ <combo_box name="lod_mode_high">
+ <item name="Triangle Limit" value="Dreiecklimit"/>
+ <item name="Error Threshold" value="Fehlerschwelle"/>
+ </combo_box>
<text initial_value="0" name="high_triangles" value="0"/>
<text initial_value="0" name="high_vertices" value="0"/>
<text initial_value="Mittel" name="medium_label" value="Mittel"/>
+ <combo_box name="lod_source_medium">
+ <item name="Load from file" value="Aus Datei laden"/>
+ <item name="Generate" value="Generieren"/>
+ <item name="Use LoD above" value="Detailstufe oben verwenden"/>
+ </combo_box>
<button label="Durchsuchen..." name="lod_browse_medium"/>
+ <combo_box name="lod_mode_medium">
+ <item name="Triangle Limit" value="Dreiecklimit"/>
+ <item name="Error Threshold" value="Fehlerschwelle"/>
+ </combo_box>
<text initial_value="0" name="medium_triangles" value="0"/>
<text initial_value="0" name="medium_vertices" value="0"/>
<text initial_value="Niedrig" name="low_label" value="Niedrig"/>
+ <combo_box name="lod_source_low">
+ <item name="Load from file" value="Aus Datei laden"/>
+ <item name="Generate" value="Generieren"/>
+ <item name="Use LoD above" value="Detailstufe oben verwenden"/>
+ </combo_box>
<button label="Durchsuchen..." name="lod_browse_low"/>
+ <combo_box name="lod_mode_low">
+ <item name="Triangle Limit" value="Dreiecklimit"/>
+ <item name="Error Threshold" value="Fehlerschwelle"/>
+ </combo_box>
<text initial_value="0" name="low_triangles" value="0"/>
<text initial_value="0" name="low_vertices" value="0"/>
<text initial_value="Niedrigste" name="lowest_label" value="Niedrigste"/>
+ <combo_box name="lod_source_lowest">
+ <item name="Load from file" value="Aus Datei laden"/>
+ <item name="Generate" value="Generieren"/>
+ <item name="Use LoD above" value="Detailstufe oben verwenden"/>
+ </combo_box>
<button label="Durchsuchen..." name="lod_browse_lowest"/>
+ <combo_box name="lod_mode_lowest">
+ <item name="Triangle Limit" value="Dreiecklimit"/>
+ <item name="Error Threshold" value="Fehlerschwelle"/>
+ </combo_box>
<text initial_value="0" name="lowest_triangles" value="0"/>
<text initial_value="0" name="lowest_vertices" value="0"/>
<check_box label="Normalen generieren" name="gen_normals"/>
diff --git a/indra/newview/skins/default/xui/de/floater_nearby_chat.xml b/indra/newview/skins/default/xui/de/floater_nearby_chat.xml
deleted file mode 100644
index 2aabbb18f2..0000000000
--- a/indra/newview/skins/default/xui/de/floater_nearby_chat.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT IN DER NÄHE">
- <check_box label="Chat übersetzen" name="translate_chat_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_characters.xml
new file mode 100644
index 0000000000..7096dbc156
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_pathfinding_characters.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_characters" title="Pathfinding-Figuren">
+ <floater.string name="messaging_get_inprogress">
+ Pathfinding-Figuren werden abgerufen...
+ </floater.string>
+ <floater.string name="messaging_get_error">
+ Fehler beim Abrufen von Pathfinding-Figuren.
+ </floater.string>
+ <floater.string name="messaging_complete_none_found">
+ Keine Pathfinding-Figuren.
+ </floater.string>
+ <floater.string name="messaging_complete_available">
+ [NUM_SELECTED] Figuren von [NUM_TOTAL] ausgewählt.
+ </floater.string>
+ <floater.string name="messaging_not_enabled">
+ Pathfinding ist in dieser Region nicht aktiviert.
+ </floater.string>
+ <floater.string name="character_cpu_time">
+ [CPU_TIME] µs
+ </floater.string>
+ <floater.string name="character_owner_loading">
+ [Laden]
+ </floater.string>
+ <floater.string name="character_owner_unknown">
+ [Unbekannt]
+ </floater.string>
+ <floater.string name="character_owner_group">
+ [Gruppe]
+ </floater.string>
+ <panel>
+ <scroll_list name="objects_scroll_list">
+ <scroll_list.columns label="Name" name="name"/>
+ <scroll_list.columns label="Beschreibung" name="description"/>
+ <scroll_list.columns label="Eigentümer" name="owner"/>
+ <scroll_list.columns label="CPU" name="cpu_time"/>
+ <scroll_list.columns label="Höhe" name="altitude"/>
+ </scroll_list>
+ <text name="messaging_status">
+ Figuren:
+ </text>
+ <button label="Liste aktualisieren" name="refresh_objects_list"/>
+ <button label="Alle auswählen" name="select_all_objects"/>
+ <button label="Keine auswählen" name="select_none_objects"/>
+ </panel>
+ <panel>
+ <text name="actions_label">
+ Aktionen für ausgewählte Figuren:
+ </text>
+ <check_box label="Beacon anzeigen" name="show_beacon"/>
+ <check_box label="Physikkapsel anzeigen" name="show_physics_capsule"/>
+ <button label="Nehmen" name="take_objects"/>
+ <button label="Kopie nehmen" name="take_copy_objects"/>
+ <button label="Dorthin teleportieren" name="teleport_me_to_object" tool_tip="Nur aktiviert, wenn eine Figur ausgewählt ist."/>
+ <button label="Zurückgeben" name="return_objects"/>
+ <button label="Löschen" name="delete_objects"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml
new file mode 100644
index 0000000000..ebf8f01632
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_console" title="Pathfinding-Ansicht/-Test">
+ <floater.string name="navmesh_viewer_status_library_not_implemented">
+ Pathfinding-Bibliotheksimplementierung nicht gefunden.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_region_not_enabled">
+ Pathfinding ist in dieser Region nicht aktiviert.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_region_loading">
+ Warten, bis Region geladen ist.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_checking_version">
+ Navmesh-Status wird geprüft.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_downloading">
+ Navmesh wird heruntergeladen.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_updating">
+ Navmesh hat sich auf dem Server geändert. Neuestes Navmesh wird heruntergeladen.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_has_navmesh">
+ Neuestes Navmesh wurde heruntergeladen.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_error">
+ Navmesh kann nicht heruntergeladen werden.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_pending">
+ Navmesh weist ausstehende Änderungen auf.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_building">
+ Navmesh wird erstellt.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_some_pending">
+ Einige Navmesh-Regionen weisen ausstehende Änderungen auf.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_some_building">
+ Einige Navmesh-Regionen werden erstellt.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_pending_and_building">
+ Einige Navmesh-Regionen weisen ausstehende Änderungen auf und andere werden erstellt.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_complete">
+ Navmesh ist aktuell.
+ </floater.string>
+ <floater.string name="pathing_library_not_implemented">
+ Pathfinding-Bibliotheksimplementierung nicht gefunden.
+ </floater.string>
+ <floater.string name="pathing_region_not_enabled">
+ Pathfinding ist in dieser Region nicht aktiviert.
+ </floater.string>
+ <floater.string name="pathing_choose_start_and_end_points">
+ Bitte wählen Sie Anfangs- und Endpunkte aus.
+ </floater.string>
+ <floater.string name="pathing_choose_start_point">
+ Bitte wählen Sie einen Anfangspunkt aus.
+ </floater.string>
+ <floater.string name="pathing_choose_end_point">
+ Bitte wählen Sie einen Endpunkt aus.
+ </floater.string>
+ <floater.string name="pathing_path_valid">
+ Pfad wird orange dargestellt.
+ </floater.string>
+ <floater.string name="pathing_path_invalid">
+ Zwischen den gewählten Punkten wurde kein Pfad gefunden.
+ </floater.string>
+ <floater.string name="pathing_error">
+ Fehler bei der Pfaderstellung aufgetreten.
+ </floater.string>
+ <tab_container name="view_test_tab_container">
+ <panel label="Anzeigen" name="view_panel">
+ <text name="show_label">
+ Anzeigen:
+ </text>
+ <check_box label="Welt" name="show_world"/>
+ <check_box label="Nur bewegliche Objekte" name="show_world_movables_only"/>
+ <check_box label="Navmesh" name="show_navmesh"/>
+ <text name="show_walkability_label">
+ Begehbarkeitskarte anzeigen:
+ </text>
+ <combo_box name="show_heatmap_mode">
+ <combo_box.item label="Nicht anzeigen" name="show_heatmap_mode_none"/>
+ <combo_box.item label="Figurentyp A" name="show_heatmap_mode_a"/>
+ <combo_box.item label="Figurentyp B" name="show_heatmap_mode_b"/>
+ <combo_box.item label="Figurentyp C" name="show_heatmap_mode_c"/>
+ <combo_box.item label="Figurentyp D" name="show_heatmap_mode_d"/>
+ </combo_box>
+ <check_box label="Begehbare Objekte" name="show_walkables"/>
+ <check_box label="Materialvolumen" name="show_material_volumes"/>
+ <check_box label="Statische Hinternisse" name="show_static_obstacles"/>
+ <check_box label="Ausschlussvolumen" name="show_exclusion_volumes"/>
+ <check_box label="Wasserebene" name="show_water_plane"/>
+ <check_box label="Mit Röntgenblick" name="show_xray"/>
+ </panel>
+ <panel label="Pfad testen" name="test_panel">
+ <text name="ctrl_click_label">
+ Bei gedrückter Strg-Taste klicken, um Anfangspunkt auszuwählen.
+ </text>
+ <text name="shift_click_label">
+ Bei gedrückter Umschalttaste klicken, um Endpunkt auszuwählen.
+ </text>
+ <text name="character_width_label">
+ Figurenbreite
+ </text>
+ <slider name="character_width" value="1"/>
+ <text name="character_width_unit_label">
+ m
+ </text>
+ <text name="character_type_label">
+ Figurentyp
+ </text>
+ <combo_box name="path_character_type">
+ <combo_box.item label="Keine" name="path_character_type_none"/>
+ <combo_box.item label="A" name="path_character_type_a"/>
+ <combo_box.item label="B" name="path_character_type_b"/>
+ <combo_box.item label="C" name="path_character_type_c"/>
+ <combo_box.item label="D" name="path_character_type_d"/>
+ </combo_box>
+ <button label="Pfad löschen" name="clear_path"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml
new file mode 100644
index 0000000000..f1d561e51b
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_linksets" title="Pathfinding-Linksets">
+ <floater.string name="messaging_get_inprogress">
+ Pathfinding-Linksets werden abgerufen...
+ </floater.string>
+ <floater.string name="messaging_get_error">
+ Fehler beim Abrufen von Pathfinding-Linksets.
+ </floater.string>
+ <floater.string name="messaging_set_inprogress">
+ Ausgewählte Pathfinding-Linksets werden geändert...
+ </floater.string>
+ <floater.string name="messaging_set_error">
+ Fehler beim Ändern der ausgewählten Pathfinding-Linksets.
+ </floater.string>
+ <floater.string name="messaging_complete_none_found">
+ Keine Pathfinding-Linksets.
+ </floater.string>
+ <floater.string name="messaging_complete_available">
+ [NUM_SELECTED] Linksets von [NUM_TOTAL] ausgewählt.
+ </floater.string>
+ <floater.string name="messaging_not_enabled">
+ Pathfinding ist in dieser Region nicht aktiviert.
+ </floater.string>
+ <floater.string name="linkset_terrain_name">
+ [Terrain]
+ </floater.string>
+ <floater.string name="linkset_terrain_description">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_owner">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_land_impact">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_dist_from_you">
+ --
+ </floater.string>
+ <floater.string name="linkset_owner_loading">
+ [Laden]
+ </floater.string>
+ <floater.string name="linkset_owner_unknown">
+ [Unbekannt]
+ </floater.string>
+ <floater.string name="linkset_owner_group">
+ [Gruppe]
+ </floater.string>
+ <floater.string name="linkset_use_walkable">
+ Begehbar
+ </floater.string>
+ <floater.string name="linkset_use_static_obstacle">
+ Statisches Hinternis
+ </floater.string>
+ <floater.string name="linkset_use_dynamic_obstacle">
+ Bewegliches Hinternis
+ </floater.string>
+ <floater.string name="linkset_use_material_volume">
+ Materialvolumen
+ </floater.string>
+ <floater.string name="linkset_use_exclusion_volume">
+ Ausschlussvolumen
+ </floater.string>
+ <floater.string name="linkset_use_dynamic_phantom">
+ Bewegliches Phantom
+ </floater.string>
+ <floater.string name="linkset_is_terrain">
+ [nicht änderbar]
+ </floater.string>
+ <floater.string name="linkset_is_restricted_state">
+ [beschränkt]
+ </floater.string>
+ <floater.string name="linkset_is_non_volume_state">
+ [konkav]
+ </floater.string>
+ <floater.string name="linkset_is_restricted_non_volume_state">
+ [beschränkt,konkav]
+ </floater.string>
+ <floater.string name="linkset_choose_use">
+ Linkset-Nutzung auswählen...
+ </floater.string>
+ <panel>
+ <combo_box name="filter_by_linkset_use">
+ <combo_box.item label="Nach Linkset-Nutzung filtern..." name="filter_by_linkset_use_none"/>
+ <combo_box.item label="Begehbar" name="filter_by_linkset_use_walkable"/>
+ <combo_box.item label="Statisches Hinternis" name="filter_by_linkset_use_static_obstacle"/>
+ <combo_box.item label="Bewegliches Hinternis" name="filter_by_linkset_use_dynamic_obstacle"/>
+ <combo_box.item label="Materialvolumen" name="filter_by_linkset_use_material_volume"/>
+ <combo_box.item label="Ausschlussvolumen" name="filter_by_linkset_use_exclusion_volume"/>
+ <combo_box.item label="Bewegliches Phantom" name="filter_by_linkset_use_dynamic_phantom"/>
+ </combo_box>
+ <button label="Anwenden" name="apply_filters"/>
+ <button label="Entfernen" name="clear_filters"/>
+ <scroll_list name="objects_scroll_list">
+ <scroll_list.columns label="Name (Hauptprim)" name="name"/>
+ <scroll_list.columns label="Beschreibung (Hauptprim)" name="description"/>
+ <scroll_list.columns label="Eigentümer" name="owner"/>
+ <scroll_list.columns label="Belastung" name="land_impact"/>
+ <scroll_list.columns label="Abstand" name="dist_from_you"/>
+ <scroll_list.columns label="Linkset-Nutzung" name="linkset_use"/>
+ <scroll_list.columns label="A %" name="a_percent"/>
+ <scroll_list.columns label="B %" name="b_percent"/>
+ <scroll_list.columns label="C %" name="c_percent"/>
+ <scroll_list.columns label="D %" name="d_percent"/>
+ </scroll_list>
+ <text name="messaging_status">
+ Linksets:
+ </text>
+ <button label="Liste aktualisieren" name="refresh_objects_list"/>
+ <button label="Alle auswählen" name="select_all_objects"/>
+ <button label="Keine auswählen" name="select_none_objects"/>
+ </panel>
+ <panel>
+ <check_box label="Beacon anzeigen" name="show_beacon"/>
+ <button label="Nehmen" name="take_objects"/>
+ <button label="Kopie nehmen" name="take_copy_objects"/>
+ <button label="Dorthin teleportieren" name="teleport_me_to_object"/>
+ <button label="Zurückgeben" name="return_objects"/>
+ <button label="Löschen" name="delete_objects"/>
+ </panel>
+ <panel>
+ <text name="walkability_coefficients_label">
+ Begehbarkeit:
+ </text>
+ <text name="edit_a_label">
+ A
+ </text>
+ <line_editor name="edit_a_value" tool_tip="Begehbarkeit für Figuren vom Typ A. Ein Beispiel für diesen Typ wäre „Humanoid“."/>
+ <text name="edit_b_label">
+ B
+ </text>
+ <line_editor name="edit_b_value" tool_tip="Begehbarkeit für Figuren vom Typ B. Ein Beispiel für diesen Typ wäre „Kreatur“."/>
+ <text name="edit_c_label">
+ C
+ </text>
+ <line_editor name="edit_c_value" tool_tip="Begehbarkeit für Figuren vom Typ C. Ein Beispiel für diesen Typ wäre „Mechanisch“."/>
+ <text name="edit_d_label">
+ D
+ </text>
+ <line_editor name="edit_d_value" tool_tip="Begehbarkeit für Figuren vom Typ D. Ein Beispiel für diesen Typ wäre „Anderer“."/>
+ <button label="Änderungen übernehmen" name="apply_edit_values"/>
+ <text name="suggested_use_a_label">
+ (Humanoid)
+ </text>
+ <text name="suggested_use_b_label">
+ (Kreatur)
+ </text>
+ <text name="suggested_use_c_label">
+ (Mechanisch)
+ </text>
+ <text name="suggested_use_d_label">
+ (Anderer)
+ </text>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_postcard.xml b/indra/newview/skins/default/xui/de/floater_postcard.xml
deleted file mode 100644
index 28af0183cb..0000000000
--- a/indra/newview/skins/default/xui/de/floater_postcard.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="FOTO EMAILEN">
- <text name="to_label">
- E-Mail des Empfängers:
- </text>
- <text name="from_label">
- Ihre E-Mail:
- </text>
- <text name="name_label">
- Ihr Name:
- </text>
- <text name="subject_label">
- Betreff:
- </text>
- <line_editor label="Betreff hier eingeben." name="subject_form"/>
- <text name="msg_label">
- Nachricht:
- </text>
- <text_editor name="msg_form">
- Nachricht hier eingeben.
- </text_editor>
- <text name="fine_print">
- Wenn sich der Empfänger bei SL anmeldet, erhalten Sie einen Empfehlungsbonus.
- </text>
- <button label="Abbrechen" name="cancel_btn"/>
- <button label="Senden" name="send_btn"/>
- <text name="default_subject">
- Postkarte aus [SECOND_LIFE].
- </text>
- <text name="default_message">
- Sehen Sie hier!
- </text>
- <string name="upload_message">
- Wird gesendet...
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_spellcheck.xml b/indra/newview/skins/default/xui/de/floater_spellcheck.xml
new file mode 100644
index 0000000000..213db277b6
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_spellcheck.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="spellcheck_floater" title="Einstellungen für Rechtschreibprüfung">
+ <check_box label="Rechtschreibprüfung aktivieren" name="spellcheck_enable"/>
+ <text name="spellcheck_main">
+ Hauptwörterbuch:
+ </text>
+ <text label="Protokolle:" name="spellcheck_additional">
+ Zusätzliche Wörterbücher:
+ </text>
+ <text name="spellcheck_available">
+ Verfügbar
+ </text>
+ <text name="spellcheck_active">
+ Aktiv
+ </text>
+ <button label="Entfernen" name="spellcheck_remove_btn"/>
+ <button label="Importieren..." name="spellcheck_import_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/de/floater_spellcheck_import.xml
new file mode 100644
index 0000000000..374c0fc0d2
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_spellcheck_import.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="spellcheck_import" title="Wörterbuch importieren">
+ <button label="Durchsuchen" label_selected="Durchsuchen" name="dictionary_path_browse"/>
+ <button label="Importieren" name="ok_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml
index 92d057a4fe..f3239f73c7 100644
--- a/indra/newview/skins/default/xui/de/floater_stats.xml
+++ b/indra/newview/skins/default/xui/de/floater_stats.xml
@@ -53,7 +53,13 @@
<stat_bar label="Objekte" name="simobjects"/>
<stat_bar label="Aktive Objekte" name="simactiveobjects"/>
<stat_bar label="Aktive Skripts" name="simactivescripts"/>
+ <stat_bar label="Skripts ausgeführt" name="simpctscriptsrun"/>
<stat_bar label="Skript-Events" name="simscripteps"/>
+ <stat_view label="Pathfinding" name="simpathfinding">
+ <stat_bar label="AI-Schrittzeit" name="simsimaistepmsec"/>
+ <stat_bar label="Übersprungene Silhouettenschritte" name="simsimskippedsilhouettesteps"/>
+ <stat_bar label="Figuren aktualisiert" name="simsimpctsteppedcharacters"/>
+ </stat_view>
<stat_bar label="Paketeingang" name="siminpps"/>
<stat_bar label="Paketausgang" name="simoutpps"/>
<stat_bar label="Ausstehende Downloads" name="simpendingdownloads"/>
diff --git a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
index 5bb96bebc4..9585622516 100644
--- a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
@@ -20,6 +20,8 @@
<button label="Leer" label_selected="Leer" name="Blank"/>
<button label="Keine" label_selected="Keine" name="None"/>
<button label="" label_selected="" name="Pipette"/>
+ <check_box initial_value="true" label="Live-Vorschau" name="apply_immediate_check"/>
+ <text name="preview_disabled" value="Vorschau deaktiviert"/>
<filter_editor label="Texturen filtern" name="inventory search editor"/>
<check_box initial_value="false" label="Ordner anzeigen" name="show_folders_check"/>
<button label="Hinzufügen" label_selected="Hinzufügen" name="l_add_btn"/>
@@ -31,5 +33,4 @@
</scroll_list>
<button label="OK" label_selected="OK" name="Select"/>
<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
- <check_box initial_value="true" label="Jetzt übernehmen" name="apply_immediate_check"/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index dee89b28e5..5f5c34a5cf 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -148,6 +148,12 @@
<panel.string name="text modify info 4">
Sie können diese Objekte nicht bearbeiten.
</panel.string>
+ <panel.string name="text modify info 5">
+ Dieses Objekt kann nicht über eine Regionsgrenze hinweg geändert werden
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Diese Objekte können nicht über eine Regionsgrenze hinweg geändert werden
+ </panel.string>
<panel.string name="text modify warning">
Gesamtes Objekt wählen, um Berechtigungen festzulegen.
</panel.string>
@@ -197,12 +203,12 @@
<combo_box.item label="Zoom" name="Zoom"/>
</combo_box>
<check_box label="Zum Verkauf:" name="checkbox for sale"/>
+ <spinner label="L$" name="Edit Cost"/>
<combo_box name="sale type">
<combo_box.item label="Kopie" name="Copy"/>
<combo_box.item label="Inhalt" name="Contents"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
- <spinner label="Preis: L$" name="Edit Cost"/>
<check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
<panel name="perms_build">
<text name="perm_modify">
@@ -238,6 +244,11 @@
F:
</text>
</panel>
+ <panel name="pathfinding_attrs_panel">
+ <text name="pathfinding_attributes_label">
+ Pathfinding-Attribute:
+ </text>
+ </panel>
</panel>
<panel label="Objekt" name="Object">
<check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass das Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/>
diff --git a/indra/newview/skins/default/xui/de/floater_top_objects.xml b/indra/newview/skins/default/xui/de/floater_top_objects.xml
index d2055a53db..f8130c6379 100644
--- a/indra/newview/skins/default/xui/de/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/de/floater_top_objects.xml
@@ -9,9 +9,6 @@
<floater.string name="scripts_score_label">
Zeit
</floater.string>
- <floater.string name="scripts_mono_time_label">
- Mono-Uhrzeit:
- </floater.string>
<floater.string name="top_colliders_title">
Top-Kollisionsobjekte
</floater.string>
@@ -32,9 +29,10 @@
<scroll_list.columns label="Name" name="name" width="135"/>
<scroll_list.columns label="Eigentümer" name="owner"/>
<scroll_list.columns label="Position" name="location" width="125"/>
+ <scroll_list.columns label="Parzelle" name="parcel"/>
<scroll_list.columns label="Uhrzeit" name="time"/>
- <scroll_list.columns label="Mono-Uhrzeit:" name="mono_time"/>
<scroll_list.columns label="URLs" name="URLs"/>
+ <scroll_list.columns label="Speicher (KB)" name="memory"/>
</scroll_list>
<text name="id_text">
Objekt-ID:
@@ -42,12 +40,16 @@
<button label="Beacon anzeigen" name="show_beacon_btn"/>
<text name="obj_name_text">
Objektname:
- </text>
+ </text>
<button label="Filter" name="filter_object_btn"/>
<text name="owner_name_text">
Eigentümer:
- </text>
+ </text>
<button label="Filter" name="filter_owner_btn"/>
+ <text name="parcel_name_text">
+ Parzelle:
+ </text>
+ <button label="Filtern" name="filter_parcel_btn"/>
<button label="Aktualisieren" name="refresh_btn"/>
<button label="Auswahl zurückgeben" name="return_selected_btn" width="134"/>
<button label="Alle zurückgeben" left="150" name="return_all_btn" width="134"/>
diff --git a/indra/newview/skins/default/xui/de/menu_bottomtray.xml b/indra/newview/skins/default/xui/de/menu_bottomtray.xml
deleted file mode 100644
index cb0082f944..0000000000
--- a/indra/newview/skins/default/xui/de/menu_bottomtray.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="hide_camera_move_controls_menu">
- <menu_item_check label="Schaltfläche „Sprechen“" name="EnableVoiceChat"/>
- <menu_item_check label="Schaltfläche Gesten" name="ShowGestureButton"/>
- <menu_item_check label="Schaltfläche Bewegungssteuerung" name="ShowMoveButton"/>
- <menu_item_check label="Schaltfläche Ansicht" name="ShowCameraButton"/>
- <menu_item_check label="Schaltfläche Foto" name="ShowSnapshotButton"/>
- <menu_item_check label="Schaltfläche „Bauen“" name="ShowBuildButton"/>
- <menu_item_check label="Schaltfläche „Suchen“" name="ShowSearchButton"/>
- <menu_item_check label="Schaltfläche „Karte“" name="ShowWorldMapButton"/>
- <menu_item_check label="Minikarten-Schaltfläche" name="ShowMiniMapButton"/>
- <menu_item_call label="Ausschneiden" name="NearbyChatBar_Cut"/>
- <menu_item_call label="Kopieren" name="NearbyChatBar_Copy"/>
- <menu_item_call label="Einfügen" name="NearbyChatBar_Paste"/>
- <menu_item_call label="Löschen" name="NearbyChatBar_Delete"/>
- <menu_item_call label="Alle auswählen" name="NearbyChatBar_Select_All"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_mode_change.xml b/indra/newview/skins/default/xui/de/menu_mode_change.xml
deleted file mode 100644
index b8090018b7..0000000000
--- a/indra/newview/skins/default/xui/de/menu_mode_change.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Mode Change">
- <menu_item_check label="Basis" name="BasicMode"/>
- <menu_item_check label="Erweitert" name="AdvancedMode"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml
index 412bd3ac04..9f44ced928 100644
--- a/indra/newview/skins/default/xui/de/menu_object.xml
+++ b/indra/newview/skins/default/xui/de/menu_object.xml
@@ -5,6 +5,8 @@
</menu_item_call>
<menu_item_call label="Bearbeiten" name="Edit..."/>
<menu_item_call label="Bauen" name="Build"/>
+ <menu_item_call label="In Linksets anzeigen" name="show_in_linksets"/>
+ <menu_item_call label="In Figuren anzeigen" name="show_in_characters"/>
<menu_item_call label="Öffnen" name="Open"/>
<menu_item_call label="Hier sitzen" name="Object Sit"/>
<menu_item_call label="Aufstehen" name="Object Stand Up"/>
diff --git a/indra/newview/skins/default/xui/de/menu_text_editor.xml b/indra/newview/skins/default/xui/de/menu_text_editor.xml
index c00186c13e..2e33ed3416 100644
--- a/indra/newview/skins/default/xui/de/menu_text_editor.xml
+++ b/indra/newview/skins/default/xui/de/menu_text_editor.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Text editor context menu">
+ <menu_item_call label="(unbekannt)" name="Suggestion 1"/>
+ <menu_item_call label="(unbekannt)" name="Suggestion 2"/>
+ <menu_item_call label="(unbekannt)" name="Suggestion 3"/>
+ <menu_item_call label="(unbekannt)" name="Suggestion 4"/>
+ <menu_item_call label="(unbekannt)" name="Suggestion 5"/>
+ <menu_item_call label="Zum Wörterbuch hinzufügen" name="Add to Dictionary"/>
+ <menu_item_call label="Zur Ignorieren-Liste hinzufügen" name="Add to Ignore"/>
<menu_item_call label="Ausschneiden" name="Cut"/>
<menu_item_call label="Kopieren" name="Copy"/>
<menu_item_call label="Einfügen" name="Paste"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index c4c4defab9..6ee708ed62 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -27,6 +27,7 @@
<menu_item_call label="Einstellungen..." name="Preferences"/>
<menu_item_call label="Symbolleistenschaltflächen..." name="Toolbars"/>
<menu_item_call label="Alle Steuerelemente ausblenden" name="Hide UI"/>
+ <menu_item_check label="HUD-Anhänge anzeigen" name="Show HUD Attachments"/>
<menu_item_call label="[APP_NAME] schließen" name="Quit"/>
</menu>
<menu label="Unterhalten" name="Communicate">
@@ -38,6 +39,7 @@
<menu_item_call label="Freunde" name="My Friends"/>
<menu_item_call label="Gruppen" name="My Groups"/>
<menu_item_call label="Leute in der Nähe" name="Active Speakers"/>
+ <menu_item_call label="Blockierliste" name="Block List"/>
</menu>
<menu label="Welt" name="World">
<menu_item_call label="Landmarke für diesen Ort setzen" name="Create Landmark Here"/>
@@ -123,6 +125,11 @@
<menu_item_call label="Skripts auf ausführen einstellen" name="Set Scripts to Running"/>
<menu_item_call label="Skripts auf nicht ausführen einstellen" name="Set Scripts to Not Running"/>
</menu>
+ <menu label="Pathfinding" name="Pathfinding">
+ <menu_item_call label="Linksets..." name="pathfinding_linksets_menu_item"/>
+ <menu_item_call label="Figuren..." name="pathfinding_characters_menu_item"/>
+ <menu_item_call label="Anzeigen/Testen..." name="pathfinding_console_menu_item"/>
+ </menu>
<menu label="Optionen" name="Options">
<menu_item_check label="Erweiterte Berechtigungen anzeigen" name="DebugPermissions"/>
<menu_item_check label="Nur meine Objekte auswählen" name="Select Only My Objects"/>
@@ -173,7 +180,6 @@
<menu_item_check label="Partikel ausblenden" name="Hide Particles"/>
<menu_item_check label="Auswahl ausblenden" name="Hide Selected"/>
<menu_item_check label="Durchsichtig hervorheben" name="Highlight Transparent"/>
- <menu_item_check label="HUD-Anhänge anzeigen" name="Show HUD Attachments"/>
<menu_item_check label="Fadenkreuz für Mouselook anzeigen" name="ShowCrosshairs"/>
</menu>
<menu label="Darstellungstypen" name="Rendering Types">
@@ -376,7 +382,6 @@
<menu_item_call label="Avatargeometry ein-/ausschalten" name="Toggle Character Geometry"/>
<menu_item_call label="Männlich testen" name="Test Male"/>
<menu_item_call label="Weiblich testen" name="Test Female"/>
- <menu_item_call label="PG ein-/ausschalten" name="Toggle PG"/>
<menu_item_check label="Avatarauswahl zulassen" name="Allow Select Avatar"/>
</menu>
<menu_item_call label="Param auf Standard erzwingen" name="Force Params to Default"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index f7274d31e1..33dfcdcc84 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -37,6 +37,12 @@
<button name="Help" text="$helptext"/>
</form>
</template>
+ <template name="okhelpignore">
+ <form>
+ <button name="OK_okhelpignore" text="$yestext"/>
+ <button name="Help_okhelpignore" text="$helptext"/>
+ </form>
+ </template>
<template name="yesnocancelbuttons">
<form>
<button name="Yes" text="$yestext"/>
@@ -367,13 +373,19 @@ Sie müssen den Benutzernamen Ihres Avatars eingeben.
Sie benötigen ein Konto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Konto erstellen?
<url name="url">
- https://join.secondlife.com/index.php?lang=de-DE
+ [create_account_url]
</url>
<usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/>
</notification>
<notification name="InvalidCredentialFormat">
Sie müssen entweder den Benutzernamen oder den Vor- und Nachnamen Ihres Avatars in das Feld „Benutzername“ eingeben und die Anmeldung dann erneut versuchen.
</notification>
+ <notification name="InvalidGrid">
+ „[GRID]“ ist keine gültige Grid-ID.
+ </notification>
+ <notification name="InvalidLocationSLURL">
+ Ihre Startposition gibt kein gültiges Grid an.
+ </notification>
<notification name="DeleteClassified">
Anzeige „[NAME]“ löschen?
Gebühren werden nicht rückerstattet.
@@ -479,8 +491,8 @@ Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
Ein kompiliertes Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie das Skript bitte später.
</notification>
<notification name="StartRegionEmpty">
- Sie haben keine Start-Region festgelegt.
-Bitte geben Sie den Namen der Region im Feld „Startposition“ ein oder wählen Sie „Mein letzter Standort“ oder „Mein Zuhause“ als Startposition aus.
+ Ihre Startregion ist nicht definiert.
+Geben Sie den Namen der Region im Feld „Startposition“ ein oder wählen Sie „Mein letzter Standort“ oder „Mein Zuhause“ als Startposition aus.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CouldNotStartStopScript">
@@ -607,6 +619,9 @@ Sie können maximal [MAX] Objekte verknüpfen.
Stellen Sie sicher, dass kein Objekt gesperrt ist und alle Objekte Ihnen gehören.
</notification>
+ <notification name="CannotLinkPermanent">
+ Objekte können nicht über Regionsgrenzen hinweg verknüpft werden.
+ </notification>
<notification name="CannotLinkDifferentOwners">
Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben.
@@ -991,6 +1006,41 @@ Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
<button name="Cancel" text="Abbrechen"/>
</form>
</notification>
+ <notification label="Automatische Ersetzungsliste hinzufügen" name="AddAutoReplaceList">
+ Name für neue Liste:
+ <form name="form">
+ <button name="SetName" text="OK"/>
+ </form>
+ </notification>
+ <notification label="Automatische Ersetzungsliste umbenennen" name="RenameAutoReplaceList">
+ Der Name „[DUPNAME]“ wird bereits verwendet.
+ Geben Sie einen neuen eindeutigen Namen ein:
+ <form name="form">
+ <button name="ReplaceList" text="Aktuelle Liste ersetzen"/>
+ <button name="SetName" text="Neuen Namen verwenden"/>
+ </form>
+ </notification>
+ <notification name="InvalidAutoReplaceEntry">
+ Das Schlüsselwort muss ein einziges Wort sein; die Ersetzungszeichenfolge darf nicht leer sein.
+ </notification>
+ <notification name="InvalidAutoReplaceList">
+ Diese Ersetzungsliste ist nicht gültig.
+ </notification>
+ <notification name="SpellingDictImportRequired">
+ Sie müssen eine Datei, einen Namen und eine Sprache angeben.
+ </notification>
+ <notification name="SpellingDictIsSecondary">
+ Das Wörterbuch [DIC_NAME] scheint keine „aff“-Datei zu haben und ist deshalb ein sekundäres Wörterbuch.
+Es kann als zusätzliches Wörterbuch verwendet werden, aber nicht als Hauptwörterbuch.
+
+Weitere Informationen finden Sie unter https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries.
+ </notification>
+ <notification name="SpellingDictImportFailed">
+ Kopieren nicht möglich:
+ [FROM_NAME]
+ in
+ [TO_NAME]
+ </notification>
<notification label="Outfit speichern" name="SaveOutfitAs">
Mein aktuelles Outfit als neues Outfit speichern:
<form name="form">
@@ -1190,7 +1240,6 @@ Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt
Installation von [APP_NAME] vollständig abgeschlossen.
Falls Sie [SECOND_LIFE] zum ersten Mal verwenden, müssen Sie zuerst ein Konto erstellen, bevor Sie sich anmelden können.
-Zurück zu [http://join.secondlife.com secondlife.com], um ein neues Konto zu erstellen?
<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Neues Konto..."/>
</notification>
<notification name="LoginPacketNeverReceived">
@@ -1708,83 +1757,128 @@ Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belas
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="RegionEntryAccessBlocked">
- Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+ Die Region, die Sie besuchen möchten, enthält Inhalte, die Ihre aktuellen Einstellungen überschreiten. Sie können Ihre Einstellungen unter „Ich“ &gt; „Einstellungen“ &gt; „Allgemein“ ändern.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="RegionEntryAccessBlocked_KB">
- Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+ <notification name="RegionEntryAccessBlocked_AdultsOnlyContent">
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, die nur für Erwachsene zugänglich sind.
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/de
</url>
- <usetemplate ignoretext="Ich kann diese Region aufgrund der Alterseinstufung nicht betreten" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+ <usetemplate ignoretext="Regionswechsel: Die Region, die Sie besuchen möchten, enthält Inhalte, die nur für Erwachsene zugänglich sind." name="okcancelignore" notext="Schließen" yestext="Zur Knowledge Base gehen"/>
</notification>
<notification name="RegionEntryAccessBlocked_Notify">
- Aufgrund Ihrer Alterseinstufung dürfen Sie diese Region nicht betreten.
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt.
+ </notification>
+ <notification name="RegionEntryAccessBlocked_NotifyAdultsOnly">
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, die nur für Erwachsene zugänglich sind.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- Sie dürfen diese Region aufgrund der Einstellung Ihrer Inhaltseinstufung nicht betreten.
-
-Bitte ändern Sie Ihre Einstellungen bezüglich der Inhaltseinstufung, um die gewünschte Region zu betreten. Danach können Sie nach [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Um die Veränderungen rückgängig zu machen, gehen Sie zu Ich &gt; Einstellungen &gt; Allgemein.
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt. Sie können Ihre Einstellungen ändern oder diesen Vorgang abbrechen. Nachdem Sie Ihre Einstellungen geändert haben, können Sie erneut versuchen, die Region zu betreten.
+ <form name="form">
+ <button name="OK" text="Einstellungen ändern"/>
+ <button name="Cancel" text="Abbrechen"/>
+ <ignore name="ignore" text="Regionswechsel: Die Region, die Sie besuchen möchten, enthält Inhalte, die aufgrund Ihrer Einstellungen nicht dargestellt werden können."/>
+ </form>
+ </notification>
+ <notification name="RegionEntryAccessBlocked_PreferencesOutOfSync">
+ Wir haben technische Probleme mit Ihrem Teleport, da Ihre Einstellungen nicht mit dem Server synchronisiert sind.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked">
+ Die Region, die Sie besuchen möchten, enthält Inhalte, die Ihre aktuellen Einstellungen überschreiten. Sie können Ihre Einstellungen unter „Ich“ &gt; „Einstellungen“ &gt; „Allgemein“ ändern.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_AdultsOnlyContent">
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, die nur für Erwachsene zugänglich sind.
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/de
+ </url>
+ <usetemplate ignoretext="Teleport: Die Region, die Sie besuchen möchten, enthält Inhalte, die nur für Erwachsene zugänglich sind." name="okcancelignore" notext="Schließen" yestext="Zur Knowledge Base gehen"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_Notify">
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt.
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_NotifyAdultsOnly">
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, die nur für Erwachsene zugänglich sind.
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_ChangeAndReTeleport">
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt. Sie können Ihre Einstellungen ändern und den Teleport fortsetzen oder Sie können den Teleport abbrechen.
+ <form name="form">
+ <button name="OK" text="Ändern und fortfahren"/>
+ <button name="Cancel" text="Abbrechen"/>
+ <ignore name="ignore" text="Teleport (kann neu gestartet werden): Die Region, die Sie besuchen möchten, enthält Inhalte, die aufgrund Ihrer Einstellungen nicht dargestellt werden können."/>
+ </form>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_Change">
+ Die Region, die Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt. Sie können Ihre Einstellungen ändern oder den Teleport abbrechen. Nachdem Sie Ihre Einstellungen geändert haben, können Sie den Teleport erneut versuchen.
<form name="form">
- <button name="OK" text="Einstellung ändern"/>
- <button name="Cancel" text="Schließen"/>
- <ignore name="ignore" text="Meine Alterseinstufung lässt nicht zu, dass ich eine Region betrete."/>
+ <button name="OK" text="Einstellungen ändern"/>
+ <button name="Cancel" text="Abbrechen"/>
+ <ignore name="ignore" text="Teleport (kann nicht neu gestartet werden): Die Region, die Sie besuchen möchten, enthält Inhalte, die aufgrund Ihrer Einstellungen nicht dargestellt werden können."/>
</form>
</notification>
+ <notification name="TeleportEntryAccessBlocked_PreferencesOutOfSync">
+ Wir haben technische Probleme mit Ihrem Teleport, da Ihre Einstellungen nicht mit dem Server synchronisiert sind.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="PreferredMaturityChanged">
- Ihre Inhaltseinstufung ist jetzt [RATING].
+ Sie erhalten keine Benachrichtigungen mehr, wenn Sie eine Region der Inhaltseinstufung „[RATING]“ besuchen. Sie können Ihre Inhaltseinstellungen von der Menüleiste aus ändern („Ich“ &gt; „Einstellungen“ &gt; „Allgemein“).
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MaturityChangeError">
+ Wir konnten Ihre Einstellungen zur Anzeige von [PREFERRED_MATURITY]-Inhalten leider nicht ändern. Ihre Einstellungen wurden auf [ACTUAL_MATURITY]-Inhalte zurückgesetzt. Sie können erneut versuchen, Ihre Inhaltseinstellungen von der Menüleiste aus zu ändern („Ich“ &gt; „Einstellungen“ &gt; „Allgemein“).
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LandClaimAccessBlocked">
- Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+ Die Inhaltseinstufung des Landes, das Sie in Besitz nehmen möchten, überschreitet Ihre aktuellen Einstellungen. Sie können Ihre Einstellungen unter „Ich“ &gt; „Einstellungen“ &gt; „Allgemein“ ändern.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="LandClaimAccessBlocked_KB">
- Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+ <notification name="LandClaimAccessBlocked_AdultsOnlyContent">
+ Nur Erwachsene können dieses Land in Besitz nehmen.
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/de
</url>
- <usetemplate ignoretext="Ich habe aufgrund der Alterseinstufung keinen Anspruch auf dieses Land" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+ <usetemplate ignoretext="Nur Erwachsene können dieses Land in Besitz nehmen." name="okcancelignore" notext="Schließen" yestext="Zur Knowledge Base gehen"/>
</notification>
<notification name="LandClaimAccessBlocked_Notify">
- Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+ Das Land, das Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt.
+ </notification>
+ <notification name="LandClaimAccessBlocked_NotifyAdultsOnly">
+ Das Land, das Sie in Besitz nehmen möchten, enthält [REGIONMATURITY]-Inhalte, die nur für Erwachsene zugänglich sind.
</notification>
<notification name="LandClaimAccessBlocked_Change">
- Sie haben aufgrund der Einstellung Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
-
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen &gt; Allgemein.
- <usetemplate ignoretext="Meine Alterseinstufung lässt nicht zu, dass ich auf Land Anspruch erhebe" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
+ Das Land, das Sie besuchen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt. Sie können Ihre Einstellungen ändern und anschließend erneut versuchen, das Land in Besitz zu nehmen.
+ <form name="form">
+ <button name="OK" text="Einstellungen ändern"/>
+ <button name="Cancel" text="Abbrechen"/>
+ <ignore name="ignore" text="Das Land, das Sie in Besitz nehmen möchten, enthält Inhalte, die aufgrund Ihrer Einstellungen nicht dargestellt werden können."/>
+ </form>
</notification>
<notification name="LandBuyAccessBlocked">
- Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+ Die Inhaltseinstufung des Landes, das Sie kaufen möchten, überschreitet Ihre aktuellen Einstellungen. Sie können Ihre Einstellungen unter „Ich“ &gt; „Einstellungen“ &gt; „Allgemein“ ändern.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="LandBuyAccessBlocked_KB">
- Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+ <notification name="LandBuyAccessBlocked_AdultsOnlyContent">
+ Nur Erwachsene können dieses Land kaufen.
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/de
</url>
- <usetemplate ignoretext="Ich kann aufgrund der Alterseinstufung dieses Land nicht kaufen" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+ <usetemplate ignoretext="Nur Erwachsene können dieses Land kaufen." name="okcancelignore" notext="Schließen" yestext="Zur Knowledge Base gehen"/>
</notification>
<notification name="LandBuyAccessBlocked_Notify">
- Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
+ Das Land, das Sie kaufen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt.
+ </notification>
+ <notification name="LandBuyAccessBlocked_NotifyAdultsOnly">
+ Das Land, das Sie kaufen möchten, enthält Inhalte der Einstufung „[REGIONMATURITY]“, die nur für Erwachsene zugänglich sind.
</notification>
<notification name="LandBuyAccessBlocked_Change">
- Sie können aufgrund Ihrer Einstellung für Alterseinstufung dieses Land nicht kaufen.
-
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen &gt; Allgemein.
- <usetemplate ignoretext="Meine Alterseinstufung lässt nicht zu, dass ich Land kaufe" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
+ Das Land, das Sie kaufen möchten, enthält [REGIONMATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGIONMATURITY]-Inhalte nicht dargestellt. Sie können Ihre Einstellungen ändern und anschließend erneut versuchen, das Land zu kaufen.
+ <form name="form">
+ <button name="OK" text="Einstellungen ändern"/>
+ <button name="Cancel" text="Abbrechen"/>
+ <ignore name="ignore" text="Das Land, das Sie kaufen möchten, enthält Inhalte, die aufgrund Ihrer Einstellungen nicht dargestellt werden können."/>
+ </form>
</notification>
<notification name="TooManyPrimsSelected">
Zu viele Prims wurden ausgewählt. Bitte wählen Sie höchstens [MAX_PRIM_COUNT] Prims aus und versuchen Sie es erneut.
@@ -1839,10 +1933,9 @@ Anzeige für [AMOUNT] L$ veröffentlichen?
</form>
</notification>
<notification label="Alterseinstufung der Region ändern" name="RegionMaturityChange">
- Die Alterseinstufung dieser Region wurde aktualisiert.
+ Die Inhaltseinstufung dieser Region wurde geändert.
Es kann eine Weile dauern, bis diese Änderung auf der Karte angezeigt wird.
-
-Um Regionen der Alterseinstufung „Adult&quot; zu betreten, müssen Einwohner altersüberprüft sein. Dies kann entweder über die Alterverifizierung oder Zahlungsverifizierung geschehen.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification label="Falsche Voice-Version" name="VoiceVersionMismatch">
Diese Version von [APP_NAME] ist mit der Voice-Chat-Funktion in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, müssen Sie [APP_NAME] aktualisieren.
@@ -2132,14 +2225,11 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
<usetemplate ignoretext="Die Kleidung, die während dem Bearbeiten meines Aussehens erstellt wird, sofort anziehen" name="okcancelignore" notext="Nein" yestext="Ja"/>
</notification>
<notification name="NotAgeVerified">
- Um auf Adult-Inhalte und –Bereiche in Second Life zuzugreifen, müssen Sie mindestens 18 Jahre alt sein. Bitte besuchen Sie die Altersüberprüfungsseite, um zu bestätigen, dass Sie mindestens 18 Jahre alt sind.
-Hierzu wird Ihr Webbrowser geöffnet.
-
-[_URL]
- <url name="url" option="0">
- https://secondlife.com/my/account/verification.php
- </url>
- <usetemplate ignoretext="Ich habe mein Alter nicht verifizieren lassen" name="okcancelignore" notext="Abbrechen" yestext="Zur Altersüberprüfung"/>
+ Der Ort, den Sie besuchen möchten, ist nur für Bewohner zugänglich, die mindestens 18 Jahre alt sind.
+ <usetemplate ignoretext="Ich bin nicht alt genug, um beschränkte Bereiche zu besuchen." name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="NotAgeVerified_Notify">
+ Ort auf Einwohner beschränkt, die mindestens 18 Jahre alt sind.
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Um diesen Bereich besuchen zu können, müssen Ihre Zahlungsinformationen gespeichert sein. Möchten Sie diese Einstellung auf der [SECOND_LIFE]-Webseite einrichten?
@@ -2200,7 +2290,7 @@ Hierzu wird Ihr Webbrowser geöffnet.
Terrain.raw heruntergeladen
</notification>
<notification name="GestureMissing">
- Hmm. Geste [NAME] fehlt in Datenbank.
+ Geste [NAME] fehlt in Datenbank.
</notification>
<notification name="UnableToLoadGesture">
Geste [NAME] konnte nicht geladen werden.
@@ -2400,6 +2490,23 @@ Fliegen ist hier nicht möglich.
<notification name="NoBuild">
In diesem Bereich ist das Bauen deaktiviert. Sie können keine Objekte bauen oder rezzen.
</notification>
+ <notification name="PathfindingDirty">
+ Diese Region weist ausstehende Pathfinding-Änderungen auf. Wenn Sie Baurechte besitzen, können Sie die Region durch Klicken auf die Schaltfläche „Region neu formen“ neu formen.
+ </notification>
+ <notification name="DynamicPathfindingDisabled">
+ Dynamisches Pathfinding ist in dieser Region nicht aktiviert. Geskriptete Objekte, die Pathfinding-LSL-Aufrufe verwenden, funktionieren in dieser Region u. U. nicht wie erwartet.
+ </notification>
+ <notification name="PathfindingRebakeNavmesh">
+ Wenn Sie bestimmte Objekte in dieser Region ändern, verhalten sich andere bewegliche Objekte u. U. inkorrekt. Um dieses Problem zu beheben, klicken Sie auf die Schaltfläche „Region neu formen“. Um weitere Informationen zu erhalten, klicken Sie auf „Hilfe“.
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
+ </url>
+ <usetemplate helptext="Hilfe" ignoretext="Wenn Sie bestimmte Objekte in dieser Region ändern, verhalten sich andere bewegliche Objekte u. U. inkorrekt." name="okhelpignore" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingCannotRebakeNavmesh">
+ Fehler aufgetreten. Möglicherweise ist ein Netzwerk- oder Serverproblem aufgetreten oder Sie haben nicht die erforderlichen Baurechte. Dieses Problem lässt sich manchmal durch Ab- und Anmelden lösen.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="SeeAvatars">
Diese Parzelle verbirgt Avatare und Text-Chat vor einer anderen Parzelle. Sie können Einwohner außerhalb dieser Parzelle weder sehen noch von ihnen gesehen werden. Regulärer Text-Chat auf Kanal 0 ist ebenfalls blockiert.
</notification>
@@ -2418,9 +2525,7 @@ Hier funktionieren nur Skripts, die dem Landeigentümer gehören.
Öffentliches Land kann nur in der Region in Besitz genommen werden, in der Sie sich befinden.
</notification>
<notification name="RegionTPAccessBlocked">
- Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Sie müssen eventuell eine Altersüberprüfung vornehmen und/oder den aktuellsten Viewer installieren.
-
-Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regionen mit dieser Alterseinstufung zu erhalten.
+ Die Region, die Sie besuchen möchten, enthält Inhalte, die Ihre aktuellen Einstellungen überschreiten. Sie können Ihre Einstellungen unter „Ich“ &gt; „Einstellungen“ &gt; „Allgemein“ ändern.
</notification>
<notification name="URBannedFromRegion">
Sie dürfen diese Region nicht betreten.
@@ -2431,11 +2536,11 @@ Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regione
<notification name="ImproperPaymentStatus">
Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor.
</notification>
- <notification name="MustGetAgeRgion">
- Sie müssen altersüberprüft sein, um diese Region betreten zu können.
+ <notification name="MustGetAgeRegion">
+ Sie müssen mindestens 18 Jahre alt sein, um diese Region betreten zu können.
</notification>
<notification name="MustGetAgeParcel">
- Sie müssen altersüberprüft sein, um diese Parzelle betreten zu können.
+ Sie müssen mindestens 18 Jahre alt sein, um diese Parzelle betreten zu können.
</notification>
<notification name="NoDestRegion">
Keine Zielregion gefunden.
@@ -2535,14 +2640,35 @@ Versuchen Sie es in einigen Minuten erneut.
</form>
</notification>
<notification name="TeleportOffered">
- [NAME_SLURL] hat Ihnen einen Teleport an seine/ihre Position angeboten:
+ [NAME_SLURL] hat Ihnen den Teleport an seinen/ihren Standort angeboten:
-[MESSAGE] - [MATURITY_STR] &lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;
+„[MESSAGE]“
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; – [MATURITY_STR]
<form name="form">
<button name="Teleport" text="Teleportieren"/>
<button name="Cancel" text="Abbrechen"/>
</form>
</notification>
+ <notification name="TeleportOffered_MaturityExceeded">
+ [NAME_SLURL] hat Ihnen den Teleport an seinen/ihren Standort angeboten:
+
+„[MESSAGE]“
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; – [MATURITY_STR]
+
+Diese Region enthält [REGION_CONTENT_MATURITY]-Inhalte, doch aufgrund Ihrer aktuellen Einstellungen werden [REGION_CONTENT_MATURITY]-Inhalte nicht dargestellt. Sie können Ihre Einstellungen ändern und den Teleport fortsetzen oder Sie können den Teleport abbrechen.
+ <form name="form">
+ <button name="Teleport" text="Ändern und fortfahren"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification name="TeleportOffered_MaturityBlocked">
+ [NAME_SLURL] hat Ihnen den Teleport an seinen/ihren Standort angeboten:
+
+„[MESSAGE]“
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; – [MATURITY_STR]
+
+Diese Region enthält jedoch Inhalte, die nur für Erwachsene zugänglich sind.
+ </notification>
<notification name="TeleportOfferSent">
Ein Teleportangebot wurde an [TO_NAME] geschickt
</notification>
@@ -2947,6 +3073,10 @@ Sie haben eine [RESOLUTION]-gebackene Textur für „[BODYREGION]“ nach [TIME]
( [EXISTENCE] Sekunden am Leben)
Sie haben lokal eine [RESOLUTION]-gebackene Textur für „[BODYREGION]“ nach [TIME] Sekunden aktualisiert.
</notification>
+ <notification name="LivePreviewUnavailable">
+ Wir können keine Vorschau dieser Textur anzeigen, da sie nicht kopier- und/oder übertragungsfähig ist.
+ <usetemplate ignoretext="Hinweis anzeigen, wenn bei nicht kopier- und/oder übertragungsfähigen Texturen keine Live-Vorschau möglich ist" name="okignore" yestext="OK"/>
+ </notification>
<notification name="ConfirmLeaveCall">
Möchten Sie dieses Gespräch wirklich verlassen ?
<usetemplate ignoretext="Bestätigen, bevor ich den Anruf verlasse." name="okcancelignore" notext="Nein" yestext="Ja"/>
@@ -3116,6 +3246,23 @@ Durch Ausblenden der Schaltfläche „Sprechen“ wird die Sprechfunktion deakti
Durch diese Aktion werden alle Menüelemente und Schaltflächen ausgeblendet. Um sie wieder anzuzeigen, klicken Sie erneut auf [SHORTCUT].
<usetemplate ignoretext="Vor Ausblenden der UI bestätigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
</notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted">
+ Einige der ausgewählten Linksets können aufgrund von Berechtigungseinschränkungen nicht auf „[REQUESTED_TYPE]“ gesetzt werden. Diese Linksets werden stattdessen auf „[RESTRICTED_TYPE]“ gesetzt.
+ <usetemplate ignoretext="Einige der ausgewählten Linksets können aufgrund von Berechtigungseinschränkungen nicht gesetzt werden." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnVolume">
+ Einige der ausgewählten Linksets können nicht auf „[REQUESTED_TYPE]“ gesetzt werden, da die Form nicht konvex ist.
+ <usetemplate ignoretext="Einige der ausgewählten Linksets können nicht gesetzt werden, da die Form nicht konvex ist." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume">
+ Einige der ausgewählten Linksets können aufgrund von Berechtigungseinschränkungen nicht auf „[REQUESTED_TYPE]“ gesetzt werden. Diese Linksets werden stattdessen auf „[RESTRICTED_TYPE]“ gesetzt.
+ Einige der ausgewählten Linksets können nicht auf „[REQUESTED_TYPE]“ gesetzt werden, da die Form nicht konvex ist. Die Nutzungsarten dieser Linksets bleiben unverändert.
+ <usetemplate ignoretext="Einige der ausgewählten Linksets können nicht gesetzt werden, da die Berechtigungen eingeschränkt sind und die Form nicht konvex ist." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_ChangeToFlexiblePath">
+ Das ausgewählte Objekt wirkt sich auf das Navmesh aus. Wenn Sie es in einen flexiblen Pfad ändern, wird es aus dem Navmesh entfernt.
+ <usetemplate ignoretext="Das ausgewählte Objekt wirkt sich auf das Navmesh aus. Wenn Sie es in einen flexiblen Pfad ändern, wird es aus dem Navmesh entfernt." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ </notification>
<global name="UnsupportedGLRequirements">
Ihr Computer entspricht nicht den Hardwareanforderungen von [APP_NAME]. [APP_NAME] setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstützung voraus. Falls Ihre Grafikkarte diese Funktion unterstützt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches für Ihr Betriebssystem.
@@ -3152,4 +3299,12 @@ Zukünftige Aktualisierungen dieser Datei werden deaktiviert.
Versuch, eine ungültige oder nicht lesbare Bilddatei ([FNAME]) hinzuzufügen, die nicht geöffnet oder decodiert werden konnte.
Versuch abgebrochen.
</notification>
+ <notification name="PathfindingReturnMultipleItems">
+ Sie sind dabei, [NUM_ITEMS] Objekte zurückzugeben. Möchten Sie diesen Vorgang wirklich fortsetzen?
+ <usetemplate ignoretext="Möchten Sie wirklich mehrere Objekte zurückgeben?" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ </notification>
+ <notification name="PathfindingDeleteMultipleItems">
+ Sie sind dabei, [NUM_ITEMS] Objekte zu löschen. Möchten Sie diesen Vorgang wirklich fortsetzen?
+ <usetemplate ignoretext="Möchten Sie wirklich mehrere Objekte löschen?" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ </notification>
</notifications>
diff --git a/indra/newview/skins/default/xui/de/panel_bottomtray.xml b/indra/newview/skins/default/xui/de/panel_bottomtray.xml
deleted file mode 100644
index afe9836401..0000000000
--- a/indra/newview/skins/default/xui/de/panel_bottomtray.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="bottom_tray">
- <string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
- <string name="SpeakBtnToolTip" value="Schaltet Mikrofon ein/aus"/>
- <string name="VoiceControlBtnToolTip" value="Voice-Chat-Steuerung anzeigen/ausblenden"/>
- <layout_stack name="toolbar_stack">
- <layout_panel name="speak_panel">
- <talk_button name="talk">
- <speak_button label="Sprechen" label_selected="Sprechen" name="speak_btn"/>
- </talk_button>
- </layout_panel>
- <layout_panel name="gesture_panel">
- <gesture_combo_list label="Gesten" name="Gesture" tool_tip="Gesten anzeigen/ausblenden"/>
- </layout_panel>
- <layout_panel name="movement_panel">
- <bottomtray_button label="Bewegen" name="movement_btn" tool_tip="Bewegungssteuerung anzeigen/ausblenden"/>
- </layout_panel>
- <layout_panel name="cam_panel">
- <bottomtray_button label="Ansicht" name="camera_btn" tool_tip="Kamerasteuerung anzeigen/ausblenden"/>
- </layout_panel>
- <layout_panel name="snapshot_panel">
- <bottomtray_button label="" name="snapshots" tool_tip="Foto machen"/>
- </layout_panel>
- <layout_panel name="build_btn_panel">
- <bottomtray_button label="Bauen" name="build_btn" tool_tip="Bauwerkzeuge ein-/ausblenden"/>
- </layout_panel>
- <layout_panel name="search_btn_panel">
- <bottomtray_button label="Suche" name="search_btn" tool_tip="Suche anzeigen/ausblenden"/>
- </layout_panel>
- <layout_panel name="world_map_btn_panel">
- <bottomtray_button label="Karte" name="world_map_btn" tool_tip="Karte ein-/ausblenden"/>
- </layout_panel>
- <layout_panel name="mini_map_btn_panel">
- <bottomtray_button label="Minikarte" name="mini_map_btn" tool_tip="Minikarte ein-/ausblenden"/>
- </layout_panel>
- <layout_panel name="im_well_panel">
- <chiclet_im_well name="im_well">
- <button name="Unread IM messages" tool_tip="IMs"/>
- </chiclet_im_well>
- </layout_panel>
- <layout_panel name="notification_well_panel">
- <chiclet_notification name="notification_well">
- <button name="Unread" tool_tip="Benachrichtigungen"/>
- </chiclet_notification>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml
index 5f323d80dd..c32d2fe4bf 100644
--- a/indra/newview/skins/default/xui/de/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_invite.xml
@@ -9,6 +9,9 @@
<panel.string name="already_in_group">
Einige der ausgewählten Einwohner sind bereits Gruppenmitglieder und haben aus diesem Grund keine Einladung erhalten.
</panel.string>
+ <panel.string name="invite_selection_too_large">
+ Gruppeneinladungen nicht gesendet: zu viele Einwohner ausgewählt. Gruppeneinladungen sind auf 100 Einwohner pro Anfrage beschränkt.
+ </panel.string>
<text name="help_text">
Sie können mehrere Einwohner in Ihre Gruppe einladen. Klicken Sie hierzu auf „Einwohnerliste öffnen“.
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml
index 553bd3e2ff..2203b6d310 100644
--- a/indra/newview/skins/default/xui/de/panel_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_login.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_login">
- <panel.string name="create_account_url">
- http://de.secondlife.com/registration/
- </panel.string>
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php?lang=de
</panel.string>
<layout_stack name="login_widgets">
<layout_panel name="login">
+ <text name="log_in_text">
+ ANMELDEN
+ </text>
<text name="username_text">
Benutzername:
</text>
@@ -15,15 +15,8 @@
<text name="password_text">
Kennwort:
</text>
- <check_box label="Kennwort merken" name="remember_check"/>
- <button label="Anmelden" name="connect_btn"/>
- <text name="mode_selection_text">
- Modus:
- </text>
- <combo_box name="mode_combo" tool_tip="Wählen Sie den gewünschten Modus aus. Basis: Second Life schnell und einfach erkunden und chatten. Erweitert: Zugriff auf zusätzliche Funktionen.">
- <combo_box.item label="Basis" name="Basic"/>
- <combo_box.item label="Erweitert" name="Advanced"/>
- </combo_box>
+ </layout_panel>
+ <layout_panel name="start_location_panel">
<text name="start_location_text">
Hier anfangen:
</text>
@@ -33,16 +26,21 @@
<combo_box.item label="&lt;Region eingeben&gt;" name="Typeregionname"/>
</combo_box>
</layout_panel>
- <layout_panel name="links">
- <text name="create_new_account_text">
- Registrieren
+ <layout_panel name="links_login_panel">
+ <text name="login_help">
+ Sie brauchen Hilfe?
</text>
<text name="forgot_password_text">
Benutzernamen oder Kennwort vergessen?
</text>
- <text name="login_help">
- Sie brauchen Hilfe?
+ <button label="Anmelden" name="connect_btn"/>
+ <check_box label="Kennwort merken" name="remember_check"/>
+ </layout_panel>
+ <layout_panel name="links">
+ <text name="create_account_text">
+ CREATE YǾUR ACCǾUNT
</text>
+ <button name="create_new_account_btn" label="Registrieren"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_navmesh_rebake.xml b/indra/newview/skins/default/xui/de/panel_navmesh_rebake.xml
new file mode 100644
index 0000000000..44be6d67b1
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_navmesh_rebake.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_navmesh_rebake">
+ <button label="Region neu formen" name="navmesh_btn" tool_tip="Klicken, um das Navmesh der Region neu zu formen."/>
+ <button label="Neuformen wird angefordert" name="navmesh_btn_sending" tool_tip="Anforderung zum Neuformen wird an den Server gesendet."/>
+ <button label="Region wird neu geformt" name="navmesh_btn_baking" tool_tip="Region wird neu geformt. Nach Abschluss des Vorgangs verschwindet diese Schaltfläche."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index 746a561e6c..c9ae350147 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -29,5 +29,7 @@
<check_box label="IM-Chats" name="EnableIMChatPopups" tool_tip="Markieren, um Popups zu sehen, wenn Instant Message eintrifft"/>
<spinner label="Lebenszeit von Toasts für Chat in der Nähe:" name="nearby_toasts_lifetime"/>
<spinner label="Ein-/Ausblenddauer von Toasts für Chat in der Nähe:" name="nearby_toasts_fadingtime"/>
- <button label="Übersetzungseinstellungen für Chats" name="ok_btn"/>
+ <button label="Übersetzen..." name="ok_btn"/>
+ <button label="Automatisch ersetzen..." name="autoreplace_showgui"/>
+ <button label="Rechtschreibprüfung..." name="spellcheck_showgui"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml
index d1b8f0d78a..4a85bd85fd 100644
--- a/indra/newview/skins/default/xui/de/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_debug.xml
@@ -36,5 +36,5 @@
<button label="?" name="top_scripts_help"/>
<button label="Region neu starten" name="restart_btn" tool_tip="2-Minuten-Countdown und Region neu starten"/>
<button label="?" name="restart_help"/>
- <button label="Neustart verzögern" name="cancel_restart_btn" tool_tip="Regionsneustart um eine Stunde verschieben"/>
+ <button label="Neustart abbrechen" name="cancel_restart_btn" tool_tip="Regionsneustart um eine Stunde verschieben"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml
index aecf6f62fc..b087451391 100644
--- a/indra/newview/skins/default/xui/de/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml
@@ -19,7 +19,7 @@
Zugang nur Einwohnern gestatten, die:
</text>
<check_box label="Zahlungsinformationen hinterlegt haben" name="limit_payment" tool_tip="Um diesen Grundbesitz besuchen zu können, müssen Einwohner Zahlungsinformationen hinterlegt haben. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
- <check_box label="ihr Alter bestätigt haben" name="limit_age_verified" tool_tip="Um diesen Grundbesitz besuchen zu können, müssen Einwohner ihr Alter bestätigt haben. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+ <check_box label="Sind mindestens 18 Jahre alt" name="limit_age_verified" tool_tip="Nur Einwohner, die mindestens 18 Jahre alt sind, können diesen Grundbesitz betreten. Weitere Informationen finden Sie unter [SUPPORT_SITE]."/>
<check_box label="Voice-Chat erlauben" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<text name="abuse_email_text" width="222">
diff --git a/indra/newview/skins/default/xui/de/panel_region_texture.xml b/indra/newview/skins/default/xui/de/panel_region_texture.xml
deleted file mode 100644
index 2f4904730b..0000000000
--- a/indra/newview/skins/default/xui/de/panel_region_texture.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Bodentexturen" name="Textures">
- <text name="region_text_lbl">
- Region:
- </text>
- <text name="region_text">
- unbekannt
- </text>
- <text name="detail_texture_text">
- Terraintexturen (erfordert 512x512, 24-Bit-.tga-Dateien)
- </text>
- <text name="height_text_lbl">
- 1 (niedrig)
- </text>
- <text name="height_text_lbl2">
- 2
- </text>
- <text name="height_text_lbl3">
- 3
- </text>
- <text name="height_text_lbl4">
- 4 (Hoch)
- </text>
- <text name="height_text_lbl5">
- Texturhöhenbereich
- </text>
- <text name="height_text_lbl6">
- Nordwest
- </text>
- <text name="height_text_lbl7">
- Nordost
- </text>
- <text name="height_text_lbl8">
- Südwest
- </text>
- <text name="height_text_lbl9">
- Südost
- </text>
- <spinner label="Niedrig" label_width="40" name="height_start_spin_0"/>
- <spinner label="Niedrig" label_width="40" name="height_start_spin_1"/>
- <spinner label="Niedrig" label_width="40" name="height_start_spin_2"/>
- <spinner label="Niedrig" label_width="40" name="height_start_spin_3"/>
- <spinner label="Hoch" label_width="40" name="height_range_spin_0"/>
- <spinner label="Hoch" label_width="40" name="height_range_spin_1"/>
- <spinner label="Hoch" label_width="40" name="height_range_spin_2"/>
- <spinner label="Hoch" label_width="40" name="height_range_spin_3"/>
- <text name="height_text_lbl10">
- Diese Werte geben den Mischungsgrad für die obigen Texturen an.
- </text>
- <text name="height_text_lbl11">
- In Metern gemessen. Der NIEDRIG-Wert ist die MAXIMALE Höhe der Textur #1, der HÖCHST-Wert ist die MINDEST-Höhe von Textur #4.
- </text>
- <text name="height_text_lbl12">
- und der OBERE WERT die MINIMALE Höhe von Textur 4.
- </text>
- <button label="Übernehmen" name="apply_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_side_tray.xml b/indra/newview/skins/default/xui/de/panel_side_tray.xml
deleted file mode 100644
index 3c81636fa0..0000000000
--- a/indra/newview/skins/default/xui/de/panel_side_tray.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- Side tray cannot show background because it is always
- partially on screen to hold tab buttons. -->
-<side_tray name="sidebar">
- <sidetray_tab description="Seitenleiste auf-/zuklappen." name="sidebar_openclose" tab_title="Seitenleiste auf-/zuklappen"/>
- <sidetray_tab description="Startseite." name="sidebar_home" tab_title="Startseite">
- <panel label="Startseite" name="panel_home"/>
- </sidetray_tab>
- <sidetray_tab description="Ihr öffentliches Profil und Auswahl bearbeiten." name="sidebar_me" tab_title="Mein Profil">
- <panel_container name="panel_container">
- <panel label="Ich" name="panel_me"/>
- </panel_container>
- </sidetray_tab>
- <sidetray_tab description="Freunde, Kontakte und Leute in Ihrer Nähe finden." name="sidebar_people" tab_title="Leute">
- <panel_container name="panel_container">
- <panel label="Gruppenprofil" name="panel_group_info_sidetray"/>
- <panel label="Ignorierte Einwohner &amp; Objekte" name="panel_block_list_sidetray"/>
- </panel_container>
- </sidetray_tab>
- <sidetray_tab description="Hier finden Sie neue Orte und Orte, die Sie bereits besucht haben." label="Orte" name="sidebar_places" tab_title="Orte">
- <panel label="Orte" name="panel_places"/>
- </sidetray_tab>
- <sidetray_tab description="Inventar durchsuchen." name="sidebar_inventory" tab_title="Mein Inventar">
- <panel label="Inventar bearbeiten" name="sidepanel_inventory"/>
- </sidetray_tab>
- <sidetray_tab description="Ändern Sie Ihr Aussehen und Ihren aktuellen Look." name="sidebar_appearance" tab_title="Mein Aussehen">
- <panel label="Aussehen bearbeiten" name="sidepanel_appearance"/>
- </sidetray_tab>
-</side_tray>
diff --git a/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml
new file mode 100644
index 0000000000..e6ab9165d7
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="volumepulldown_floater" width="240">
+ <button left="217" name="prefs_btn"/>
+ <slider label="Master" name="System Volume" label_width="80" width="180"/>
+ <slider label="Schaltflächen" label_width="80" width="180" name="UI Volume"/>
+ <slider label="Umgebung" label_width="80" width="180" name="Wind Volume"/>
+ <slider label="Soundeffekte" label_width="80" width="180" name="SFX Volume"/>
+ <check_box name="gesture_audio_play_btn" tool_tip="Sounds von Gesten abspielen"/>
+ <slider label="Musikstream" label_width="80" width="180" name="Music Volume"/>
+ <check_box tool_tip="Musikstream aktivieren" name="enable_music"/>
+ <slider label="Medien" label_width="80" width="180" name="Media Volume"/>
+ <check_box tool_tip="Medienstream aktivieren" name="enable_media"/>
+ <slider label="Voice-Chat" label_width="80" width="180" name="Voice Volume"/>
+ <check_box tool_tip="Voice-Chat aktivieren" name="enable_voice_check"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml
index 18241dea32..1b67eaf03b 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml
@@ -3,6 +3,9 @@
<panel.string name="unknown">
(unbekannt)
</panel.string>
+ <panel.string name="unknown_multiple">
+ (unbekannt/mehrere)
+ </panel.string>
<panel.string name="public">
(öffentlich)
</panel.string>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
index 7b46ee7c9b..4c8d77d336 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
@@ -18,6 +18,12 @@
<panel.string name="text modify info 4">
Sie können diese Objekte nicht bearbeiten.
</panel.string>
+ <panel.string name="text modify info 5">
+ Dieses Objekt kann nicht über eine Regionsgrenze hinweg geändert werden
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Diese Objekte können nicht über eine Regionsgrenze hinweg geändert werden
+ </panel.string>
<panel.string name="text modify warning">
Diese Objekt verfügt über verknüpfte Teile
</panel.string>
@@ -95,6 +101,9 @@
</combo_box>
<spinner label="Preis: L$" name="Edit Cost"/>
<check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
+ <text name="pathfinding_attributes_label">
+ Pathfinding-Attribute:
+ </text>
<text name="B:">
B:
</text>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 668a7b35bf..206b631874 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -1006,6 +1006,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="script_files">
Skripts
</string>
+ <string name="dictionary_files">
+ Wörterbücher
+ </string>
<string name="AvatarSetNotAway">
Nicht abwesend
</string>
@@ -3864,6 +3867,12 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="LocationCtrlSeeAVsTooltip">
Avatare sichtbar; Chat außerhalb dieser Parzelle gestattet
</string>
+ <string name="LocationCtrlPathfindingDirtyTooltip">
+ Bewegliche Objekte verhalten sich in dieser Region u. U. erst dann korrekt, wenn die Region neu geformt wird.
+ </string>
+ <string name="LocationCtrlPathfindingDisabledTooltip">
+ Dynamisches Pathfinding ist in dieser Region nicht aktiviert.
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] Aktualisierung
</string>
@@ -5006,6 +5015,21 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Normal">
Normal
</string>
+ <string name="Pathfinding_Wiki_URL">
+ http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
+ </string>
+ <string name="Pathfinding_Object_Attr_None">
+ Keine
+ </string>
+ <string name="Pathfinding_Object_Attr_Permanent">
+ Wirkt sich auf Navmesh aus
+ </string>
+ <string name="Pathfinding_Object_Attr_Character">
+ Figur
+ </string>
+ <string name="Pathfinding_Object_Attr_MultiSelect">
+ (mehrere)
+ </string>
<string name="snapshot_quality_very_low">
Sehr niedrig
</string>
@@ -5021,4 +5045,10 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="snapshot_quality_very_high">
Sehr hoch
</string>
+ <string name="TeleportMaturityExceeded">
+ Der Einwohner kann diese Region nicht besuchen.
+ </string>
+ <string name="UserDictionary">
+ [Benutzer]
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/de/teleport_strings.xml b/indra/newview/skins/default/xui/de/teleport_strings.xml
index 9cf381bacc..8062633df6 100644
--- a/indra/newview/skins/default/xui/de/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/de/teleport_strings.xml
@@ -46,6 +46,9 @@ Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in e
<message name="no_inventory_host">
Das Inventarsystem ist zurzeit nicht verfügbar.
</message>
+ <message name="MustGetAgeRegion">
+ Sie müssen mindestens 18 Jahre alt sein, um diese Region betreten zu können.
+ </message>
</message_set>
<message_set name="progress">
<message name="sending_dest">
@@ -81,5 +84,8 @@ Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in e
<message name="requesting">
Teleport wird initialisiert...
</message>
+ <message name="pending">
+ Anstehender Teleport...
+ </message>
</message_set>
</teleport_messages>
diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml
index eaed92ac55..9bc5c7d5a4 100644
--- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml
+++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml
@@ -4,9 +4,9 @@
can_resize="true"
can_tear_off="false"
height="395"
- width="1015"
+ width="1075"
min_height="395"
- min_width="1015"
+ min_width="1075"
layout="topleft"
name="floater_pathfinding_linksets"
help_topic="floater_pathfinding_linksets"
@@ -25,11 +25,15 @@
<floater.string name="linkset_terrain_name">[Terrain]</floater.string>
<floater.string name="linkset_terrain_description">--</floater.string>
<floater.string name="linkset_terrain_owner">--</floater.string>
+ <floater.string name="linkset_terrain_scripted">--</floater.string>
<floater.string name="linkset_terrain_land_impact">--</floater.string>
<floater.string name="linkset_terrain_dist_from_you">--</floater.string>
<floater.string name="linkset_owner_loading">[Loading]</floater.string>
<floater.string name="linkset_owner_unknown">[Unknown]</floater.string>
<floater.string name="linkset_owner_group">[group]</floater.string>
+ <floater.string name="linkset_is_scripted">Yes</floater.string>
+ <floater.string name="linkset_is_not_scripted">No</floater.string>
+ <floater.string name="linkset_is_unknown_scripted">Unknown</floater.string>
<floater.string name="linkset_use_walkable">Walkable</floater.string>
<floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string>
<floater.string name="linkset_use_dynamic_obstacle">Movable obstacle</floater.string>
@@ -47,7 +51,7 @@
follows="left|top|right|bottom"
layout="topleft"
height="226"
- width="999">
+ width="1059">
<text
height="13"
word_wrap="false"
@@ -155,7 +159,7 @@
layout="topleft"
name="apply_filters"
top_pad="-21"
- left_pad="31"
+ left_pad="91"
width="73"/>
<button
follows="right|top"
@@ -177,7 +181,7 @@
tab_stop="false"
multi_select="true"
name="objects_scroll_list"
- width="980">
+ width="1040">
<scroll_list.columns
label="Name (root prim)"
name="name"
@@ -191,6 +195,10 @@
name="owner"
width="141" />
<scroll_list.columns
+ label="Scripted"
+ name="scripted"
+ width="60" />
+ <scroll_list.columns
label="Impact"
name="land_impact"
width="55" />
@@ -230,7 +238,7 @@
layout="topleft"
name="messaging_status"
top_pad="17"
- width="619">
+ width="679">
Linksets:
</text>
<button
@@ -269,7 +277,7 @@
name="horiz_separator"
top_pad="0"
left="18"
- width="979"/>
+ width="1039"/>
<panel
border="false"
bevel_style="none"
@@ -277,7 +285,7 @@
layout="topleft"
left="0"
height="67"
- width="950">
+ width="1010">
<text
height="13"
word_wrap="false"
@@ -327,7 +335,7 @@
layout="topleft"
name="teleport_me_to_object"
top_pad="-21"
- left_pad="206"
+ left_pad="239"
width="160"/>
<button
follows="right|bottom"
@@ -336,7 +344,7 @@
layout="topleft"
name="return_objects"
top_pad="-21"
- left_pad="220"
+ left_pad="252"
width="95"/>
<button
follows="right|bottom"
@@ -356,7 +364,7 @@
name="horiz_separator"
top_pad="0"
left="18"
- width="979"/>
+ width="1039"/>
<panel
border="false"
bevel_style="none"
@@ -364,7 +372,7 @@
layout="topleft"
left="0"
height="75"
- width="950">
+ width="1010">
<text
height="13"
word_wrap="false"
@@ -376,7 +384,7 @@
layout="topleft"
left="18"
top_pad="8"
- width="912">
+ width="972">
Edit attributes of selected linksets and press the button to apply changes
</text>
<combo_box
diff --git a/indra/newview/skins/default/xui/en/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/en/floater_texture_fetch_debugger.xml
index f3f8d4ddca..1ea256b8b3 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_fetch_debugger.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_fetch_debugger.xml
@@ -2,7 +2,7 @@
<floater
legacy_header_height="18"
can_minimize="false"
- height="550"
+ height="600"
layout="topleft"
name="TexFetchDebugger"
help_topic="texfetchdebugger"
@@ -195,10 +195,34 @@
height="25"
layout="topleft"
left_delta="0"
+ name="total_time_refetch_all_cache_label"
+ top_delta="25"
+ width="540">
+ 16, Refetching all textures from cache, Time: [TIME] seconds, Fetched: [SIZE]KB, [PIXEL]MPixels
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="25"
+ layout="topleft"
+ left_delta="0"
name="total_time_refetch_vis_http_label"
top_delta="25"
width="540">
- 16, Refetching visibles from HTTP, Time: [TIME] seconds, Fetched: [SIZE]KB, [PIXEL]MPixels
+ 17, Refetching visibles from HTTP, Time: [TIME] seconds, Fetched: [SIZE]KB, [PIXEL]MPixels
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="25"
+ layout="topleft"
+ left_delta="0"
+ name="total_time_refetch_all_http_label"
+ top_delta="25"
+ width="540">
+ 18, Refetching all textures from HTTP, Time: [TIME] seconds, Fetched: [SIZE]KB, [PIXEL]MPixels
</text>
<spinner
decimal_digits="2"
@@ -206,7 +230,7 @@
height="20"
increment="0.01"
initial_value="1.0"
- label="17, Ratio of Texel/Pixel:"
+ label="19, Ratio of Texel/Pixel:"
label_width="130"
layout="topleft"
left_delta="0"
@@ -218,14 +242,53 @@
<spinner.commit_callback
function="TexFetchDebugger.ChangeTexelPixelRatio" />
</spinner>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="25"
+ layout="topleft"
+ left_delta="0"
+ name="texture_source_label"
+ top_delta="30"
+ width="110">
+ 20, Texture Source:
+ </text>
+ <radio_group
+ control_name="TextureFetchSource"
+ follows="top|left"
+ draw_border="false"
+ height="25"
+ layout="topleft"
+ left_pad="0"
+ name="texture_source"
+ top_delta="0"
+ width="264">
+ <radio_item
+ height="16"
+ label="Cache + HTTP"
+ layout="topleft"
+ left="3"
+ name="0"
+ top="0"
+ width="100" />
+ <radio_item
+ height="16"
+ label="HTTP Only"
+ layout="topleft"
+ left_delta="100"
+ name="1"
+ top_delta="0"
+ width="200" />
+ </radio_group>
<button
follows="left|top"
height="20"
label="Start"
layout="topleft"
- left_delta="0"
+ left="10"
name="start_btn"
- top_delta="30"
+ top_delta="20"
width="70">
<button.commit_callback
function="TexFetchDebugger.Start" />
@@ -261,7 +324,7 @@
layout="topleft"
left="10"
name="cacheread_btn"
- top_delta="30"
+ top_delta="20"
width="80">
<button.commit_callback
function="TexFetchDebugger.CacheRead" />
@@ -321,7 +384,7 @@
layout="topleft"
left="10"
name="refetchviscache_btn"
- top_delta="30"
+ top_delta="20"
width="120">
<button.commit_callback
function="TexFetchDebugger.RefetchVisCache" />
@@ -329,6 +392,18 @@
<button
follows="left|top"
height="20"
+ label="Refetch All Cache"
+ layout="topleft"
+ left_pad="7"
+ name="refetchallcache_btn"
+ top_delta="0"
+ width="120">
+ <button.commit_callback
+ function="TexFetchDebugger.RefetchAllCache" />
+ </button>
+ <button
+ follows="left|top"
+ height="20"
label="Refetch Vis HTTP"
layout="topleft"
left_pad="7"
@@ -338,4 +413,16 @@
<button.commit_callback
function="TexFetchDebugger.RefetchVisHTTP" />
</button>
+ <button
+ follows="left|top"
+ height="20"
+ label="Refetch All HTTP"
+ layout="topleft"
+ left_pad="7"
+ name="refetchallhttp_btn"
+ top_delta="0"
+ width="120">
+ <button.commit_callback
+ function="TexFetchDebugger.RefetchAllHTTP" />
+ </button>
</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index b13bf5b508..13dc0b941a 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -537,6 +537,14 @@
layout="topleft"
name="Landmark Separator" />
<menu_item_call
+ label="Copy SLurl"
+ layout="topleft"
+ name="url_copy">
+ <menu_item_call.on_click
+ function="Inventory.DoToSelected"
+ parameter="copy_slurl" />
+ </menu_item_call>
+ <menu_item_call
label="About Landmark"
layout="topleft"
name="About Landmark">
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 13f073a1c2..f0a126724b 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -896,8 +896,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now?
option="0"
name="url"
target = "_external">
-
- http://join.secondlife.com/
+ [create_account_url]
</url>
<usetemplate
name="okcancelbuttons"
@@ -2894,7 +2893,7 @@ You have been moved into a nearby region.
name="AvatarMovedLast"
type="alertmodal">
<tag>fail</tag>
-Your last location is not currently available.
+Your requested location is not currently available.
You have been moved into a nearby region.
</notification>
@@ -2929,12 +2928,11 @@ You can use [SECOND_LIFE] normally and other people will see you correctly.
[APP_NAME] installation is complete.
If this is your first time using [SECOND_LIFE], you will need to create an account before you can log in.
-Return to [http://join.secondlife.com secondlife.com] to create a new account?
<tag>confirm</tag>
<usetemplate
name="okcancelbuttons"
notext="Continue"
- yestext="New Account..."/>
+ yestext="Create Account..."/>
</notification>
<notification
@@ -8075,9 +8073,26 @@ The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;
<notification
icon="alertmodal.tga"
- name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted"
+ name="PathfindingLinksets_WarnOnPhantom"
+ type="alertmodal">
+Some selected linksets will have the Phantom flag toggled.
+
+Do you wish to continue?
+ <tag>confirm</tag>
+ <usetemplate
+ ignoretext="Some selected linksets phantom flag will be toggled."
+ name="okcancelignore"
+ notext="Cancel"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="PathfindingLinksets_MismatchOnRestricted"
type="alertmodal">
- Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead.
+Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead.
+
+Do you wish to continue?
<tag>confirm</tag>
<usetemplate
ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset."
@@ -8088,9 +8103,11 @@ The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;
<notification
icon="alertmodal.tga"
- name="PathfindingLinksets_SetLinksetUseMismatchOnVolume"
+ name="PathfindingLinksets_MismatchOnVolume"
type="alertmodal">
- Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex.
+Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex.
+
+Do you wish to continue?
<tag>confirm</tag>
<usetemplate
ignoretext="Some selected linksets cannot be set because the shape is non-convex"
@@ -8101,10 +8118,47 @@ The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;
<notification
icon="alertmodal.tga"
- name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"
+ name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted"
type="alertmodal">
- Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead.
- Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets&apos; use types will not change.
+Some selected linksets will have the Phantom flag toggled.
+
+Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead.
+
+Do you wish to continue?
+ <tag>confirm</tag>
+ <usetemplate
+ ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset."
+ name="okcancelignore"
+ notext="Cancel"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="PathfindingLinksets_WarnOnPhantom_MismatchOnVolume"
+ type="alertmodal">
+Some selected linksets will have the Phantom flag toggled.
+
+Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex.
+
+Do you wish to continue?
+ <tag>confirm</tag>
+ <usetemplate
+ ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because the shape is non-convex"
+ name="okcancelignore"
+ notext="Cancel"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume"
+ type="alertmodal">
+Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead.
+
+Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets&apos; use types will not change.
+
+Do you wish to continue?
<tag>confirm</tag>
<usetemplate
ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset and because the shape is non-convex."
@@ -8115,6 +8169,25 @@ The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;
<notification
icon="alertmodal.tga"
+ name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume"
+ type="alertmodal">
+Some selected linksets will have the Phantom flag toggled.
+
+Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset. These linksets will be set to be '[RESTRICTED_TYPE]' instead.
+
+Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets&apos; use types will not change.
+
+Do you wish to continue?
+ <tag>confirm</tag>
+ <usetemplate
+ ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset and because the shape is non-convex."
+ name="okcancelignore"
+ notext="Cancel"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="PathfindingLinksets_ChangeToFlexiblePath"
type="alertmodal">
The selected object affects the navmesh. Changing it to a Flexible Path will remove it from the navmesh.
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 44702c828f..9c96143aa3 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -7,11 +7,7 @@
name="panel_login"
focus_root="true"
top="600"
- width="996">
- <panel.string
- name="create_account_url">
- http://join.secondlife.com/
- </panel.string>
+ width="1130">
<string name="reg_in_client_url" translate="false">
http://secondlife.eniac15.lindenlab.com/reg-in-client/
</string>
@@ -32,30 +28,43 @@
start_url=""
top="0"
height="600"
- width="980"/>
+ width="996"/>
<layout_stack
+ animate="false"
follows="left|bottom|right"
name="login_widgets"
layout="topleft"
orientation="horizontal"
top="519"
- width="996"
+ width="1130"
height="80">
<layout_panel
auto_resize="false"
follows="left|bottom"
name="login"
layout="topleft"
- width="705"
- min_width="705"
+ width="310"
+ min_width="310"
height="80">
<text
follows="left|bottom"
+ font="SansSerif"
+ font.style="BOLD"
+ font.size="Large"
+ height="16"
+ name="log_in_text"
+ top="8"
+ left="15"
+ width="150">
+ LOG IN
+ </text>
+ <text
+ follows="left|bottom"
font="SansSerifSmall"
height="16"
name="username_text"
- top="20"
- left="20"
+ top="35"
+ left="15"
width="150">
Username:
</text>
@@ -70,18 +79,20 @@
top_pad="0"
name="username_combo"
width="178">
+<!-- empirically, displayed width is 150 anyway?!? -->
<combo_box.combo_button
visible ="false"/>
<combo_box.drop_down_button
visible ="false"/>
</combo_box>
+<!-- left="175" based on actual "username_combo" width of 150 vs. 178 -->
<text
follows="left|bottom"
font="SansSerifSmall"
- height="15"
- left_pad="-19"
+ height="16"
name="password_text"
- top="20"
+ top="35"
+ left="175"
width="150">
Password:
</text>
@@ -94,34 +105,22 @@
select_on_focus="true"
top_pad="0"
width="135" />
- <check_box
- control_name="RememberPassword"
- follows="left|bottom"
- font="SansSerifSmall"
- height="16"
- label="Remember password"
- top_pad="3"
- name="remember_check"
- width="135" />
- <button
- follows="left|bottom"
- height="23"
- image_unselected="PushButton_On"
- image_selected="PushButton_On_Selected"
- label="Log In"
- label_color="White"
- layout="topleft"
- left_pad="10"
- name="connect_btn"
- top="35"
- width="90" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="left|bottom"
+ name="start_location_panel"
+ layout="topleft"
+ width="175"
+ min_width="175"
+ height="80">
<text
follows="left|bottom"
font="SansSerifSmall"
- height="15"
- left_pad="8"
+ height="16"
+ left="10"
name="start_location_text"
- top="20"
+ top="35"
width="130">
Start at:
</text>
@@ -129,7 +128,7 @@
allow_text_entry="true"
control_name="NextLoginLocation"
follows="left|bottom"
- height="23"
+ height="22"
max_chars="128"
top_pad="0"
name="start_location_combo"
@@ -146,60 +145,112 @@
label="&lt;Type region name&gt;"
name="Typeregionname" value="" />
</combo_box>
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="left|bottom"
+ name="grid_panel"
+ layout="topleft"
+ width="145"
+ height="80"
+ visible="false">
<combo_box
allow_text_entry="false"
font="SansSerifSmall"
follows="left|right|bottom"
height="23"
max_chars="256"
+ left="10"
+ top="51"
layout="topleft"
top_pad="2"
name="server_combo"
- width="250"
- visible="false" />
+ width="135" />
</layout_panel>
<layout_panel
- tab_stop="false"
- follows="right|bottom"
- name="links"
- width="205"
- min_width="205"
+ auto_resize="false"
+ follows="left|bottom"
+ name="links_login_panel"
+ layout="topleft"
+ width="290"
height="80">
<text
- follows="right|bottom"
+ follows="left|bottom"
font="SansSerifSmall"
text_color="EmphasisColor"
- halign="right"
+ left="10"
height="16"
- top="12"
- right="-10"
- name="create_new_account_text"
- width="200">
- Sign up
+ name="login_help"
+ top="19"
+ width="280">
+ Need help logging in?
</text>
<text
- follows="right|bottom"
+ follows="left|bottom"
font="SansSerifSmall"
text_color="EmphasisColor"
- halign="right"
height="16"
name="forgot_password_text"
- top_pad="12"
- right="-10"
- width="200">
+ top="35"
+ width="280">
Forgot your username or password?
</text>
+ <button
+ follows="left|bottom"
+ top_pad="0"
+ height="23"
+ image_unselected="PushButton_On"
+ image_selected="PushButton_On_Selected"
+ label="Log In"
+ label_color="White"
+ layout="topleft"
+ name="connect_btn"
+ width="90" />
+ <check_box
+ control_name="RememberPassword"
+ follows="left|bottom"
+ font="SansSerifSmall"
+ left="110"
+ top="56"
+ height="16"
+ label="Remember password"
+ top_pad="3"
+ name="remember_check"
+ width="145" />
+ </layout_panel>
+ <layout_panel
+ tab_stop="false"
+ follows="right|bottom"
+ name="links"
+ width="210"
+ min_width="210"
+ height="80">
<text
follows="right|bottom"
- font="SansSerifSmall"
- text_color="EmphasisColor"
+ font="SansSerif"
+ font.style="BOLD"
+ font.size="Large"
halign="right"
height="16"
- name="login_help"
- top_pad="2"
- right="-10"
+ name="create_account_text"
+ top="8"
+ right="-15"
width="200">
- Need help logging in? </text>
+ CREATE YOUR ACCOUNT
+ </text>
+ <button
+ follows="right|bottom"
+ top="35"
+ right="-15"
+ height="23"
+ image_unselected="PushButton_On"
+ image_selected="PushButton_On_Selected"
+ label="Start now"
+ label_color="White"
+ layout="topleft"
+ left_pad="10"
+ name="create_new_account_btn"
+ width="90" />
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
index a4883c21e2..81b2281adb 100644
--- a/indra/newview/skins/default/xui/en/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml
@@ -198,7 +198,7 @@
layout="topleft"
left_pad="155"
name="cancel_restart_btn"
- tool_tip="Delay region restart by one hour"
+ tool_tip="Cancel region restart"
top_delta="0"
width="150" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 3aa34439f1..dd2a0c6627 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -129,6 +129,5 @@
left_pad="5"
top="2"
name="volume_btn"
- tool_tip="Global Volume Control"
width="16" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
index 7b22b2cce1..6adede0362 100644
--- a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
+++ b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
@@ -8,41 +8,289 @@
border="false"
chrome="true"
follows="bottom"
- height="150"
+ height="155"
layout="topleft"
name="volumepulldown_floater"
- width="32">
- <slider
- control_name="AudioLevelMaster"
- follows="left|top"
- left="0"
- top="1"
- orientation="vertical"
- height="120"
- increment="0.05"
- initial_value="0.5"
- layout="topleft"
- name="mastervolume"
- show_text="false"
- slider_label.halign="right"
- top_pad="2"
- volume="true">
- <slider.commit_callback
- function="Vol.setControlFalse"
- parameter="MuteAudio" />
- </slider>
- <button
- left="10"
- top_pad="9"
- width="12"
- height="12"
- follows="top|left"
- name="prefs_btn"
- image_unselected="Icon_Gear_Foreground"
- image_disabled="Icon_Gear_Background"
- image_pressed="Icon_Gear_Press"
- scale_image="false">
- <button.commit_callback
- function="Vol.GoAudioPrefs" />
- </button>
+ width="225">
+ <slider
+ control_name="AudioLevelMaster"
+ follows="top|left"
+ font.style="BOLD"
+ height="15"
+ increment="0.025"
+ initial_value="0.5"
+ label="Master"
+ label_width="60"
+ left="10"
+ width="160"
+ layout="topleft"
+ name="System Volume"
+ show_text="false"
+ top="10"
+ volume="true">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteAudio" />
+ </slider>
+ <button
+ control_name="MuteAudio"
+ follows="top|left"
+ height="16"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="5"
+ name="mute_audio"
+ tab_stop="false"
+ width="16" />
+ <slider
+ control_name="AudioLevelUI"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.025"
+ initial_value="0.5"
+ label="Buttons"
+ label_width="60"
+ left="10"
+ width="160"
+ layout="topleft"
+ name="UI Volume"
+ show_text="false"
+ top_pad="4"
+ volume="true">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteUI" />
+ </slider>
+ <button
+ control_name="MuteUI"
+ disabled_control="MuteAudio"
+ follows="top|left"
+ height="16"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="5"
+ name="mute_audio"
+ tab_stop="false"
+ width="16" />
+ <slider
+ control_name="AudioLevelAmbient"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.025"
+ initial_value="0.5"
+ label="Ambient"
+ label_width="60"
+ left="10"
+ width="160"
+ layout="topleft"
+ name="Wind Volume"
+ show_text="false"
+ top_pad="4"
+ volume="true">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteAmbient" />
+ </slider>
+ <button
+ control_name="MuteAmbient"
+ disabled_control="MuteAudio"
+ follows="top|left"
+ height="16"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="5"
+ name="mute_audio"
+ tab_stop="false"
+ width="16" />
+ <slider
+ control_name="AudioLevelSFX"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.025"
+ initial_value="0.5"
+ label="Sounds"
+ label_width="60"
+ left="10"
+ width="160"
+ layout="topleft"
+ name="SFX Volume"
+ show_text="false"
+ top_pad="4"
+ volume="true">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteSounds" />
+ </slider>
+ <button
+ control_name="MuteSounds"
+ disabled_control="MuteAudio"
+ follows="top|left"
+ height="16"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="5"
+ name="mute_audio"
+ tab_stop="false"
+ width="16">
+ <button.commit_callback
+ function="Pref.SetSounds"/>
+ </button>
+ <check_box
+ name="gesture_audio_play_btn"
+ control_name="EnableGestureSounds"
+ disabled_control="MuteAudio"
+ height="16"
+ layout="topleft"
+ left_pad="5"
+ tool_tip="Enable sounds from gestures"
+ top_delta="2"
+ width="350"/>
+ <slider
+ control_name="AudioLevelMusic"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.025"
+ initial_value="0.5"
+ label="Music"
+ label_width="60"
+ left="10"
+ width="160"
+ layout="topleft"
+ name="Music Volume"
+ show_text="false"
+ top_pad="4"
+ volume="true">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteMusic" />
+ </slider>
+ <button
+ control_name="MuteMusic"
+ disabled_control="MuteAudio"
+ follows="top|left"
+ height="16"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="5"
+ name="mute_audio"
+ tab_stop="false"
+ width="16" />
+ <check_box
+ control_name="AudioStreamingMusic"
+ height="16"
+ tool_tip="Enable Streaming Music"
+ layout="topleft"
+ left_pad="5"
+ name="enable_music"
+ top_delta="2"
+ width="350">
+ <check_box.commit_callback
+ function="Pref.updateMediaAutoPlayCheckbox"/>
+ </check_box>
+ <slider
+ control_name="AudioLevelMedia"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="16"
+ increment="0.025"
+ initial_value="0.5"
+ label="Media"
+ label_width="60"
+ left="10"
+ width="160"
+ layout="topleft"
+ name="Media Volume"
+ show_text="false"
+ top_pad="4"
+ volume="true">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteMedia" />
+ </slider>
+ <button
+ control_name="MuteMedia"
+ disabled_control="MuteAudio"
+ follows="top|left"
+ height="16"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="5"
+ name="mute_audio"
+ tab_stop="false"
+ width="16" />
+ <check_box
+ label_text.halign="left"
+ follows="left|top"
+ height="16"
+ control_name ="AudioStreamingMedia"
+ tool_tip="Enable Streaming Media"
+ layout="topleft"
+ top_delta="2"
+ left_pad="5"
+ name="enable_media"
+ width="110">
+ <check_box.commit_callback
+ function="Pref.updateMediaAutoPlayCheckbox"/>
+ </check_box>
+ <slider
+ control_name="AudioLevelVoice"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="16"
+ increment="0.025"
+ initial_value="0.5"
+ label="Voice"
+ label_width="60"
+ left="10"
+ width="160"
+ layout="topleft"
+ top_pad="4"
+ name="Voice Volume"
+ show_text="false"
+ volume="true">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteVoice" />
+ </slider>
+ <button
+ control_name="MuteVoice"
+ disabled_control="MuteAudio"
+ follows="top|left"
+ height="16"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="5"
+ name="mute_audio"
+ tab_stop="false"
+ width="16" />
+ <check_box
+ label_text.halign="left"
+ follows="left|top"
+ height="16"
+ control_name ="EnableVoiceChat"
+ disabled_control="CmdLineDisableVoice"
+ tool_tip="Enable Voice Chat"
+ layout="topleft"
+ top_delta="2"
+ left_pad="5"
+ name="enable_voice_check"
+ width="110"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index d5186e4c1b..15eb46c348 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2272,11 +2272,15 @@ Drag folders to this area and click "Send to Marketplace" to list them for sale
<!-- historically default name of the Favorites folder can start from either "f" or "F" letter.
We should localize both of them with the same value -->
<string name="InvFolder favorite">My Favorites</string>
+ <string name="InvFolder Favorites">My Favorites</string>
+ <string name="InvFolder favorites">My Favorites</string>
<string name="InvFolder Current Outfit">Current Outfit</string>
<string name="InvFolder Initial Outfits">Initial Outfits</string>
<string name="InvFolder My Outfits">My Outfits</string>
<string name="InvFolder Accessories">Accessories</string>
<string name="InvFolder Meshes">Meshes</string>
+ <string name="InvFolder Received Items">Received Items</string>
+ <string name="InvFolder Merchant Outbox">Merchant Outbox</string>
<!-- are used for Friends and Friends/All folders in Inventory "Calling cards" folder. See EXT-694-->
<string name="InvFolder Friends">Friends</string>
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
index 307b61133f..3696c7e12c 100644
--- a/indra/newview/skins/default/xui/es/floater_about.xml
+++ b/indra/newview/skins/default/xui/es/floater_about.xml
@@ -66,27 +66,26 @@ Versión del servidor de voz: [VOICE_VERSION]
</panel>
<panel label="Licencias" name="licenses_panel">
<text_editor name="credits_editor">
- 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
- APR Copyright (C) 2000-2004 The Apache Software Foundation
- Collada DOM Copyright 2005 Sony Computer Entertainment Inc.
- cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+ 3Dconnexion SDK Copyright (C) 1992-2009 3Dconnexion
+ APR Copyright (C) 2011 The Apache Software Foundation
+ Collada DOM Copyright 2006 Sony Computer Entertainment Inc.
+ cURL Copyright (C) 1996-2010, Daniel Stenberg, (daniel@haxx.se)
DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.
expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
- FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+ FreeType Copyright (C) 1996-2002, 2006 David Turner, Robert Wilhelm, and Werner Lemberg.
GL Copyright (C) 1999-2004 Brian Paul.
GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University and David Luebke, Brenden Schubert, University of Virginia.
google-perftools Copyright (c) 2005, Google Inc.
Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
- ogg/vorbis Copyright (C) 2001, Xiphophorus
- OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
- PCRE Copyright (c) 1997-2008 University of Cambridge
+ ogg/vorbis Copyright (C) 2002, Xiphophorus
+ OpenSSL Copyright (C) 1998-2008 The OpenSSL Project.
+ PCRE Copyright (c) 1997-2012 University of Cambridge
SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
- zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
- google-perftools Copyright (c) 2005, Google Inc.
+ zlib Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler.
El visor de Second Life usa Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (y sus licenciadores). Reservados todos los derechos. Vea los detalles en www.havok.com.
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index fd54d74af2..f8c40d798a 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -465,7 +465,7 @@ los media:
Permitir únicamente el acceso a los Residentes que:
</text>
<check_box label="Han aportado información de pago [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Para poder acceder a esta parcela los Residentes deben haber aportado información de pago en su cuenta. Para más información, ver [SUPPORT_SITE]."/>
- <check_box label="Han verificado su edad [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Para poder acceder a esta parcela los Residentes deben haber verificado su edad. Para más información, ver [SUPPORT_SITE]."/>
+ <check_box label="Son mayores de 18 años [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Para poder acceder a esta parcela los Residentes deben ser mayores de 18 años. Para más información, consulta [SUPPORT_SITE]."/>
<check_box label="Acceso permitido al grupo: [GROUP]" name="GroupCheck" tool_tip="Elija el grupo en la pestaña General."/>
<check_box label="Vender pases a:" name="PassCheck" tool_tip="Permitir acceso temporal a esta parcela"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/es/floater_animation_preview.xml b/indra/newview/skins/default/xui/es/floater_animation_preview.xml
deleted file mode 100644
index d57405f7e5..0000000000
--- a/indra/newview/skins/default/xui/es/floater_animation_preview.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Animation Preview" title="">
- <floater.string name="failed_to_initialize">
- Fallo al iniciar el movimiento
- </floater.string>
- <floater.string name="anim_too_long">
- El archivo de la animación dura [LENGTH] segundos.
-
-La duración máxima de una animación es de [MAX_LENGTH] segundos.
- </floater.string>
- <floater.string name="failed_file_read">
- No se ha podido leer el archivo de la animación.
-
-[STATUS]
- </floater.string>
- <floater.string name="E_ST_OK">
- OK
- </floater.string>
- <floater.string name="E_ST_EOF">
- Fin prematuro del archivo.
- </floater.string>
- <floater.string name="E_ST_NO_CONSTRAINT">
- No se puede leer la definición de la restricción.
- </floater.string>
- <floater.string name="E_ST_NO_FILE">
- No se puede abrir el archivo BVH.
- </floater.string>
- <floater.string name="E_ST_NO_HIER">
- &apos;HIERARCHY header&apos; inválido.
- </floater.string>
- <floater.string name="E_ST_NO_JOINT">
- No se pueden encontrar &apos;ROOT&apos; o &apos;JOINT&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_NAME">
- No se puede obtener el nombre &apos;JOINT&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_OFFSET">
- No se puede encontrar &apos;OFFSET&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_CHANNELS">
- No se puede encontrar &apos;CHANNELS&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_ROTATION">
- No se puede conseguir el orden de la rotación.
- </floater.string>
- <floater.string name="E_ST_NO_AXIS">
- No se puede encontrar el eje de rotación.
- </floater.string>
- <floater.string name="E_ST_NO_MOTION">
- No se puede encontrar &apos;MOTION&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_FRAMES">
- No se puede conseguir el número de frames.
- </floater.string>
- <floater.string name="E_ST_NO_FRAME_TIME">
- No se puede conseguir el tiempo del frame.
- </floater.string>
- <floater.string name="E_ST_NO_POS">
- No se pueden conseguir los valores de la posición.
- </floater.string>
- <floater.string name="E_ST_NO_ROT">
- No se pueden conseguir los valores de la rotación.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_FILE">
- No se puede abrir el archivo de traducción.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_HEADER">
- No se puede leer el encabezamiento de la traducción.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_NAME">
- No se puede leer la traducción de los nombres.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_IGNORE">
- No se puede leer la traducción de los valores ignorados.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_RELATIVE">
- No se puede leer el valor relativo de la traducción.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_OUTNAME">
- No se puede leer la traducción del valor &apos;outname&apos;
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MATRIX">
- No se puede leer la matriz de traducciones.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MERGECHILD">
- No se puede conseguir el nombre &apos;mergechild&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MERGEPARENT">
- No se puede conseguir el nombre &apos;mergeparent&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_PRIORITY">
- No se puede obtener el valor prioritario.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_LOOP">
- No se puede conseguir el valor del bucle.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EASEIN">
- No se pueden conseguir los valores &apos;easeIn&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EASEOUT">
- No se pueden conseguir los valores &apos;easeOut&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_HAND">
- No se puede conseguir el valor de &apos;hand morph&apos;.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EMOTE">
- No se puede leer el nombre del gesto.
- </floater.string>
- <floater.string name="E_ST_BAD_ROOT">
- Nombre incorrecto de &apos;root joint&apos;, usa &quot;hip&quot;.
- </floater.string>
- <text name="name_label">
- Nombre:
- </text>
- <text name="description_label">
- Descripción:
- </text>
- <spinner label="Prioridad:" name="priority" tool_tip="Controla qué otras animaciones pueden ser anuladas por ésta"/>
- <check_box label="Bucle:" name="loop_check" tool_tip="Hace esta animación en bucle"/>
- <spinner label="Empieza(%)" name="loop_in_point" tool_tip="Indica el punto en el que la animación vuelve a empezar"/>
- <spinner label="Acaba(%)" name="loop_out_point" tool_tip="Indica el punto en el que la animación acaba el bucle"/>
- <text name="hand_label">
- Posición de las manos
- </text>
- <combo_box name="hand_pose_combo" tool_tip="Controla qué hacen las manos durante la animación">
- <combo_box.item label="Extendidas" name="Spread"/>
- <combo_box.item label="Relajadas" name="Relaxed"/>
- <combo_box.item label="Ambas señalan" name="PointBoth"/>
- <combo_box.item label="Puño" name="Fist"/>
- <combo_box.item label="La izq. relajada" name="RelaxedLeft"/>
- <combo_box.item label="La izq. señala" name="PointLeft"/>
- <combo_box.item label="Puño izq." name="FistLeft"/>
- <combo_box.item label="La der. relajada" name="RelaxedRight"/>
- <combo_box.item label="La der. señala" name="PointRight"/>
- <combo_box.item label="Puño der." name="FistRight"/>
- <combo_box.item label="La derecha saluda" name="SaluteRight"/>
- <combo_box.item label="Escribiendo" name="Typing"/>
- <combo_box.item label="&apos;Paz&apos; en la der." name="PeaceRight"/>
- </combo_box>
- <text name="emote_label">
- Expresión
- </text>
- <combo_box name="emote_combo" tool_tip="Controla qué hace la cara durante la animación">
- <item label="(ninguno)" name="[None]" value=""/>
- <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
- <item label="Con miedo" name="Afraid" value="Miedo"/>
- <item label="Enfado" name="Angry" value="Enfado"/>
- <item label="Gran sonrisa" name="BigSmile" value="Gran sonrisa"/>
- <item label="Aburrimiento" name="Bored" value="Aburrimiento"/>
- <item label="Llorar" name="Cry" value="Lloro"/>
- <item label="Desdén" name="Disdain" value="Desdén"/>
- <item label="Avergonzarse" name="Embarrassed" value="Vergüenza"/>
- <item label="Fruncir el ceño" name="Frown" value="Fruncir el ceño"/>
- <item label="Beso" name="Kiss" value="Beso"/>
- <item label="Reír" name="Laugh" value="Risa"/>
- <item label="Sacar la lengua" name="Plllppt" value="Sacar la lengua"/>
- <item label="Rechazo" name="Repulsed" value="Rechazo"/>
- <item label="Triste" name="Sad" value="Tristeza"/>
- <item label="Encogerse de hombros" name="Shrug" value="Encogerse de hombros"/>
- <item label="Sonrisa" name="Smile" value="Sonrisa"/>
- <item label="Sorpresa" name="Surprise" value="Sorpresa"/>
- <item label="Guiño" name="Wink" value="Guiño"/>
- <item label="Preocupación" name="Worry" value="Preocupación"/>
- </combo_box>
- <text name="preview_label">
- Vista previa mientras
- </text>
- <combo_box name="preview_base_anim" tool_tip="Compruebe cómo se comporta su animación a la vez que el avatar realiza acciones comunes.">
- <item label="De pie" name="Standing" value="De pie"/>
- <item label="Caminando" name="Walking" value="Caminando"/>
- <item label="Sentado/a" name="Sitting" value="Sentado"/>
- <item label="Volando" name="Flying" value="Volando"/>
- </combo_box>
- <spinner label="Combinar (sec)" name="ease_in_time" tool_tip="Tiempo (en segundos) en el que se combinan las animaciones"/>
- <spinner label="Dejar de combinar (sec)" name="ease_out_time" tool_tip="Tiempo (en segundos) en el que dejan de combinarse las animaciones"/>
- <button bottom_delta="-32" name="play_btn" tool_tip="Ejecutar tu animación"/>
- <button name="pause_btn" tool_tip="Pausar tu animación"/>
- <button label="" name="stop_btn" tool_tip="Parar la repetición de la animación"/>
- <slider label="" name="playback_slider"/>
- <text name="bad_animation_text">
- No se ha podido leer el archivo de la animación.
-
-Recomendamos usar archivos BVH exportados de Poser 4.
- </text>
- <button label="Subir ([AMOUNT] L$)" name="ok_btn"/>
- <button label="Cancelar" name="cancel_btn"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_autoreplace.xml b/indra/newview/skins/default/xui/es/floater_autoreplace.xml
new file mode 100644
index 0000000000..15abccc376
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_autoreplace.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="autoreplace_floater" title="Configuración de reemplazo automático">
+ <check_box label="Habilitar el reemplazo automático" name="autoreplace_enable" tool_tip="Al escribir el texto del chat, reemplaza las palabras clave especificadas con la sustitución correspondiente"/>
+ <button label="Importar lista..." name="autoreplace_import_list" tool_tip="Carga una lista previamente exportada desde un archivo."/>
+ <button label="Exportar lista..." name="autoreplace_export_list" tool_tip="Guarda la lista seleccionada en un archivo para poder compartirla."/>
+ <button label="Lista nueva..." name="autoreplace_new_list" tool_tip="Crea una lista nueva."/>
+ <button label="Eliminar lista" name="autoreplace_delete_list" tool_tip="Elimina la lista seleccionada."/>
+ <button name="autoreplace_list_up" tool_tip="Aumenta la prioridad de esta lista."/>
+ <button name="autoreplace_list_down" tool_tip="Baja la prioridad de esta lista."/>
+ <scroll_list name="autoreplace_list_replacements">
+ <scroll_list.columns label="Palabra clave" name="keyword"/>
+ <scroll_list.columns label="Reemplazo" name="replacement"/>
+ </scroll_list>
+ <button label="Añadir..." name="autoreplace_add_entry"/>
+ <button label="Eliminar" name="autoreplace_delete_entry"/>
+ <button label="Guardar entrada" name="autoreplace_save_entry" tool_tip="Guarda esta entrada."/>
+ <button label="Guardar cambios" name="autoreplace_save_changes" tool_tip="Guarda todos los cambios."/>
+ <button label="Cancelar" name="autoreplace_cancel" tool_tip="Descarta todos los cambios."/>
+</floater>
+<!--
+ <text
+ top_pad="10"
+ left="10"
+ height="16"
+ width="260"
+ follows="left|top"
+ halign="center"
+ mouse_opaque="true"
+ name="autoreplace_text2">
+ Entries
+ </text>
+-->
diff --git a/indra/newview/skins/default/xui/es/floater_inventory.xml b/indra/newview/skins/default/xui/es/floater_inventory.xml
deleted file mode 100644
index 0f0ba2fce6..0000000000
--- a/indra/newview/skins/default/xui/es/floater_inventory.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="MI INVENTARIO">
- <floater.string name="Title">
- MI INVENTARIO
- </floater.string>
- <floater.string name="TitleFetching">
- MI INVENTARIO (obteniendo [ITEM_COUNT] ítems...) [FILTER]
- </floater.string>
- <floater.string name="TitleCompleted">
- MI INVENTARIO ([ITEM_COUNT] ítems) [FILTER]
- </floater.string>
- <floater.string name="Fetched">
- Obtenido
- </floater.string>
- <panel label="Panel del inventario" name="Inventory Panel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_model_preview.xml b/indra/newview/skins/default/xui/es/floater_model_preview.xml
index ab3ba5aed7..e2313bce99 100644
--- a/indra/newview/skins/default/xui/es/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_model_preview.xml
@@ -92,19 +92,54 @@
<text initial_value="Triángulos" name="triangles" value="Triángulos"/>
<text initial_value="Vértices" name="vertices" value="Vértices"/>
<text initial_value="Alto" name="high_label" value="Alto"/>
+ <combo_box name="lod_source_high">
+ <item name="Load from file" value="Cargar desde archivo"/>
+ <item name="Generate" value="Generar"/>
+ </combo_box>
<button label="Buscar..." name="lod_browse_high"/>
+ <combo_box name="lod_mode_high">
+ <item name="Triangle Limit" value="Límite de triángulo"/>
+ <item name="Error Threshold" value="Margen de error"/>
+ </combo_box>
<text initial_value="0" name="high_triangles" value="0"/>
<text initial_value="0" name="high_vertices" value="0"/>
<text initial_value="Medio" name="medium_label" value="Medio"/>
+ <combo_box name="lod_source_medium">
+ <item name="Load from file" value="Cargar desde archivo"/>
+ <item name="Generate" value="Generar"/>
+ <item name="Use LoD above" value="Usar nivel de detalle superior"/>
+ </combo_box>
<button label="Buscar..." name="lod_browse_medium"/>
+ <combo_box name="lod_mode_medium">
+ <item name="Triangle Limit" value="Límite de triángulo"/>
+ <item name="Error Threshold" value="Margen de error"/>
+ </combo_box>
<text initial_value="0" name="medium_triangles" value="0"/>
<text initial_value="0" name="medium_vertices" value="0"/>
<text initial_value="Bajo" name="low_label" value="Bajo"/>
+ <combo_box name="lod_source_low">
+ <item name="Load from file" value="Cargar desde archivo"/>
+ <item name="Generate" value="Generar"/>
+ <item name="Use LoD above" value="Usar nivel de detalle superior"/>
+ </combo_box>
<button label="Buscar..." name="lod_browse_low"/>
+ <combo_box name="lod_mode_low">
+ <item name="Triangle Limit" value="Límite de triángulo"/>
+ <item name="Error Threshold" value="Margen de error"/>
+ </combo_box>
<text initial_value="0" name="low_triangles" value="0"/>
<text initial_value="0" name="low_vertices" value="0"/>
<text initial_value="Mínimo" name="lowest_label" value="Mínimo"/>
+ <combo_box name="lod_source_lowest">
+ <item name="Load from file" value="Cargar desde archivo"/>
+ <item name="Generate" value="Generar"/>
+ <item name="Use LoD above" value="Usar nivel de detalle superior"/>
+ </combo_box>
<button label="Buscar..." name="lod_browse_lowest"/>
+ <combo_box name="lod_mode_lowest">
+ <item name="Triangle Limit" value="Límite de triángulo"/>
+ <item name="Error Threshold" value="Margen de error"/>
+ </combo_box>
<text initial_value="0" name="lowest_triangles" value="0"/>
<text initial_value="0" name="lowest_vertices" value="0"/>
<check_box label="Generar normales" name="gen_normals"/>
diff --git a/indra/newview/skins/default/xui/es/floater_nearby_chat.xml b/indra/newview/skins/default/xui/es/floater_nearby_chat.xml
deleted file mode 100644
index b3b8cdcfff..0000000000
--- a/indra/newview/skins/default/xui/es/floater_nearby_chat.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT">
- <check_box label="Traducir chat" name="translate_chat_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/es/floater_pathfinding_characters.xml
new file mode 100644
index 0000000000..e3ee0563d2
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_pathfinding_characters.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_characters" title="Personajes de pathfinding">
+ <floater.string name="messaging_get_inprogress">
+ Consultando los personajes de pathfinding...
+ </floater.string>
+ <floater.string name="messaging_get_error">
+ Se ha detectado un error al consultar los personajes de pathfinding.
+ </floater.string>
+ <floater.string name="messaging_complete_none_found">
+ No hay personajes de pathfinding.
+ </floater.string>
+ <floater.string name="messaging_complete_available">
+ [NUM_SELECTED] personajes seleccionados de [NUM_TOTAL].
+ </floater.string>
+ <floater.string name="messaging_not_enabled">
+ En esta región no está permitido el pathfinding.
+ </floater.string>
+ <floater.string name="character_cpu_time">
+ [CPU_TIME] µs
+ </floater.string>
+ <floater.string name="character_owner_loading">
+ [Cargando]
+ </floater.string>
+ <floater.string name="character_owner_unknown">
+ [Desconocido]
+ </floater.string>
+ <floater.string name="character_owner_group">
+ [grupo]
+ </floater.string>
+ <panel>
+ <scroll_list name="objects_scroll_list">
+ <scroll_list.columns label="Nombre" name="name"/>
+ <scroll_list.columns label="Descripción" name="description"/>
+ <scroll_list.columns label="Propietario" name="owner"/>
+ <scroll_list.columns label="CPU" name="cpu_time"/>
+ <scroll_list.columns label="Altitud" name="altitude"/>
+ </scroll_list>
+ <text name="messaging_status">
+ Personajes:
+ </text>
+ <button label="Actualizar la lista" name="refresh_objects_list"/>
+ <button label="Seleccionar todo" name="select_all_objects"/>
+ <button label="No seleccionar ninguno" name="select_none_objects"/>
+ </panel>
+ <panel>
+ <text name="actions_label">
+ Acciones en los personajes seleccionados:
+ </text>
+ <check_box label="Mostrar baliza" name="show_beacon"/>
+ <check_box label="Mostrar la cápsula de física" name="show_physics_capsule"/>
+ <button label="Tomar" name="take_objects"/>
+ <button label="Tomar una copia" name="take_copy_objects"/>
+ <button label="Teleportarme a él" name="teleport_me_to_object" tool_tip="Se habilita solo cuando está seleccionado un personaje."/>
+ <button label="Devolver" name="return_objects"/>
+ <button label="Eliminar" name="delete_objects"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml
new file mode 100644
index 0000000000..e93ecc9e10
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_console" title="Vista/prueba de pathfinding">
+ <floater.string name="navmesh_viewer_status_library_not_implemented">
+ No se encuentra la implementación de la biblioteca de localización de rutas.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_region_not_enabled">
+ En esta región no está permitido el pathfinding.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_region_loading">
+ Esperando a que termine la carga de la región.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_checking_version">
+ Comprobando el estado del navmesh.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_downloading">
+ Descargando el navmesh.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_updating">
+ El navmesh se ha modificado en el servidor. Descargando el último navmesh.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_has_navmesh">
+ Se ha descargado el último navmesh.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_error">
+ No se puede descargar el navmesh correctamente.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_pending">
+ El navmesh tiene cambios pendientes.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_building">
+ El navmesh se está construyendo.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_some_pending">
+ Algunas regiones del navmesh tienen cambios pendientes.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_some_building">
+ Algunas regiones del navmesh se están construyendo.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_pending_and_building">
+ Algunas regiones del navmesh tienen cambios pendientes y otras se están construyendo.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_complete">
+ El navmesh está actualizado.
+ </floater.string>
+ <floater.string name="pathing_library_not_implemented">
+ No se encuentra la implementación de la biblioteca de localización de rutas.
+ </floater.string>
+ <floater.string name="pathing_region_not_enabled">
+ En esta región no está permitido el pathfinding.
+ </floater.string>
+ <floater.string name="pathing_choose_start_and_end_points">
+ Elige los puntos inicial y final.
+ </floater.string>
+ <floater.string name="pathing_choose_start_point">
+ Elige el punto inicial.
+ </floater.string>
+ <floater.string name="pathing_choose_end_point">
+ Elige el punto final.
+ </floater.string>
+ <floater.string name="pathing_path_valid">
+ La ruta se muestra de color naranja.
+ </floater.string>
+ <floater.string name="pathing_path_invalid">
+ No se encuentra una ruta entre los puntos seleccionados.
+ </floater.string>
+ <floater.string name="pathing_error">
+ Error durante la generación de la ruta.
+ </floater.string>
+ <tab_container name="view_test_tab_container">
+ <panel label="Vista" name="view_panel">
+ <text name="show_label">
+ Mostrar:
+ </text>
+ <check_box label="Mundo virtual" name="show_world"/>
+ <check_box label="Solamente los objetos movibles" name="show_world_movables_only"/>
+ <check_box label="Navmesh" name="show_navmesh"/>
+ <text name="show_walkability_label">
+ Mostrar el mapa de transitabilidad:
+ </text>
+ <combo_box name="show_heatmap_mode">
+ <combo_box.item label="No mostrar" name="show_heatmap_mode_none"/>
+ <combo_box.item label="Personaje de tipo A" name="show_heatmap_mode_a"/>
+ <combo_box.item label="Personaje de tipo B" name="show_heatmap_mode_b"/>
+ <combo_box.item label="Personaje de tipo C" name="show_heatmap_mode_c"/>
+ <combo_box.item label="Personaje de tipo D" name="show_heatmap_mode_d"/>
+ </combo_box>
+ <check_box label="Objetos transitables" name="show_walkables"/>
+ <check_box label="Volúmenes materiales" name="show_material_volumes"/>
+ <check_box label="Obstáculos estáticos" name="show_static_obstacles"/>
+ <check_box label="Volúmenes de exclusión" name="show_exclusion_volumes"/>
+ <check_box label="Plano de agua" name="show_water_plane"/>
+ <check_box label="Con visión de rayos X" name="show_xray"/>
+ </panel>
+ <panel label="Probar ruta" name="test_panel">
+ <text name="ctrl_click_label">
+ Ctrl-clic para seleccionar el punto inicial.
+ </text>
+ <text name="shift_click_label">
+ Mayús-clic para seleccionar el punto final.
+ </text>
+ <text name="character_width_label">
+ Ancho del personaje
+ </text>
+ <slider name="character_width" value="1"/>
+ <text name="character_width_unit_label">
+ m
+ </text>
+ <text name="character_type_label">
+ Tipo de personaje
+ </text>
+ <combo_box name="path_character_type">
+ <combo_box.item label="Ninguno" name="path_character_type_none"/>
+ <combo_box.item label="A" name="path_character_type_a"/>
+ <combo_box.item label="B" name="path_character_type_b"/>
+ <combo_box.item label="C" name="path_character_type_c"/>
+ <combo_box.item label="D" name="path_character_type_d"/>
+ </combo_box>
+ <button label="Borrar ruta" name="clear_path"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/es/floater_pathfinding_linksets.xml
new file mode 100644
index 0000000000..266e8138c9
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_pathfinding_linksets.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_linksets" title="Linksets de pathfinding">
+ <floater.string name="messaging_get_inprogress">
+ Consultando los linksets de pathfinding...
+ </floater.string>
+ <floater.string name="messaging_get_error">
+ Se ha detectado un error al consultar los linksets de pathfinding.
+ </floater.string>
+ <floater.string name="messaging_set_inprogress">
+ Modificando los linksets de pathfinding seleccionados...
+ </floater.string>
+ <floater.string name="messaging_set_error">
+ Se ha detectado un error al modificar los linksets de pathfinding seleccionados.
+ </floater.string>
+ <floater.string name="messaging_complete_none_found">
+ No hay linksets de pathfinding.
+ </floater.string>
+ <floater.string name="messaging_complete_available">
+ [NUM_SELECTED] linksets seleccionados de [NUM_TOTAL].
+ </floater.string>
+ <floater.string name="messaging_not_enabled">
+ En esta región no está permitido el pathfinding.
+ </floater.string>
+ <floater.string name="linkset_terrain_name">
+ [Terreno]
+ </floater.string>
+ <floater.string name="linkset_terrain_description">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_owner">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_land_impact">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_dist_from_you">
+ --
+ </floater.string>
+ <floater.string name="linkset_owner_loading">
+ [Cargando]
+ </floater.string>
+ <floater.string name="linkset_owner_unknown">
+ [Desconocido]
+ </floater.string>
+ <floater.string name="linkset_owner_group">
+ [grupo]
+ </floater.string>
+ <floater.string name="linkset_use_walkable">
+ Objeto transitable
+ </floater.string>
+ <floater.string name="linkset_use_static_obstacle">
+ Obstáculo estático
+ </floater.string>
+ <floater.string name="linkset_use_dynamic_obstacle">
+ Obstáculo móvil
+ </floater.string>
+ <floater.string name="linkset_use_material_volume">
+ Volumen material
+ </floater.string>
+ <floater.string name="linkset_use_exclusion_volume">
+ Volumen de exclusión
+ </floater.string>
+ <floater.string name="linkset_use_dynamic_phantom">
+ Inmaterial móvil
+ </floater.string>
+ <floater.string name="linkset_is_terrain">
+ [no modificable]
+ </floater.string>
+ <floater.string name="linkset_is_restricted_state">
+ [restringido]
+ </floater.string>
+ <floater.string name="linkset_is_non_volume_state">
+ [cóncavo]
+ </floater.string>
+ <floater.string name="linkset_is_restricted_non_volume_state">
+ [restringido,cóncavo]
+ </floater.string>
+ <floater.string name="linkset_choose_use">
+ Elegir la utilización del linkset...
+ </floater.string>
+ <panel>
+ <combo_box name="filter_by_linkset_use">
+ <combo_box.item label="Filtrar por utilización de linkset..." name="filter_by_linkset_use_none"/>
+ <combo_box.item label="Objeto transitable" name="filter_by_linkset_use_walkable"/>
+ <combo_box.item label="Obstáculo estático" name="filter_by_linkset_use_static_obstacle"/>
+ <combo_box.item label="Obstáculo móvil" name="filter_by_linkset_use_dynamic_obstacle"/>
+ <combo_box.item label="Volumen material" name="filter_by_linkset_use_material_volume"/>
+ <combo_box.item label="Volumen de exclusión" name="filter_by_linkset_use_exclusion_volume"/>
+ <combo_box.item label="Inmaterial móvil" name="filter_by_linkset_use_dynamic_phantom"/>
+ </combo_box>
+ <button label="Aplicar" name="apply_filters"/>
+ <button label="Limpiar" name="clear_filters"/>
+ <scroll_list name="objects_scroll_list">
+ <scroll_list.columns label="Nombre (prim raíz)" name="name"/>
+ <scroll_list.columns label="Descripción (prim raíz)" name="description"/>
+ <scroll_list.columns label="Propietario" name="owner"/>
+ <scroll_list.columns label="Impacto" name="land_impact"/>
+ <scroll_list.columns label="Distancia" name="dist_from_you"/>
+ <scroll_list.columns label="Utilización de linkset" name="linkset_use"/>
+ <scroll_list.columns label="A %" name="a_percent"/>
+ <scroll_list.columns label="B %" name="b_percent"/>
+ <scroll_list.columns label="C %" name="c_percent"/>
+ <scroll_list.columns label="D %" name="d_percent"/>
+ </scroll_list>
+ <text name="messaging_status">
+ Linksets:
+ </text>
+ <button label="Actualizar la lista" name="refresh_objects_list"/>
+ <button label="Seleccionar todo" name="select_all_objects"/>
+ <button label="No seleccionar ninguno" name="select_none_objects"/>
+ </panel>
+ <panel>
+ <check_box label="Mostrar baliza" name="show_beacon"/>
+ <button label="Tomar" name="take_objects"/>
+ <button label="Tomar una copia" name="take_copy_objects"/>
+ <button label="Teleportarme a él" name="teleport_me_to_object"/>
+ <button label="Devolver" name="return_objects"/>
+ <button label="Eliminar" name="delete_objects"/>
+ </panel>
+ <panel>
+ <text name="walkability_coefficients_label">
+ Transitabilidad:
+ </text>
+ <text name="edit_a_label">
+ A
+ </text>
+ <line_editor name="edit_a_value" tool_tip="Transitabilidad de los personajes de tipo A. El tipo del personaje del ejemplo es humanoide."/>
+ <text name="edit_b_label">
+ B
+ </text>
+ <line_editor name="edit_b_value" tool_tip="Transitabilidad de los personajes de tipo B. El tipo del personaje del ejemplo es criatura."/>
+ <text name="edit_c_label">
+ C
+ </text>
+ <line_editor name="edit_c_value" tool_tip="Transitabilidad de los personajes de tipo C. El tipo del personaje del ejemplo es mecánico."/>
+ <text name="edit_d_label">
+ D
+ </text>
+ <line_editor name="edit_d_value" tool_tip="Transitabilidad de los personajes de tipo D. El tipo del personaje del ejemplo es otro."/>
+ <button label="Aplicar cambios" name="apply_edit_values"/>
+ <text name="suggested_use_a_label">
+ (Humanoide)
+ </text>
+ <text name="suggested_use_b_label">
+ (Criatura)
+ </text>
+ <text name="suggested_use_c_label">
+ (Mecánico)
+ </text>
+ <text name="suggested_use_d_label">
+ (Otro)
+ </text>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_postcard.xml b/indra/newview/skins/default/xui/es/floater_postcard.xml
deleted file mode 100644
index b5b9805fe2..0000000000
--- a/indra/newview/skins/default/xui/es/floater_postcard.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="FOTO POR CORREO">
- <text name="to_label">
- Correo del destinatario:
- </text>
- <text name="from_label">
- Su correo:
- </text>
- <text name="name_label">
- Su nombre:
- </text>
- <text name="subject_label">
- Asunto:
- </text>
- <line_editor label="Escriba aquí el asunto." name="subject_form"/>
- <text name="msg_label">
- Mensaje:
- </text>
- <text_editor name="msg_form">
- Escriba aquí el mensaje.
- </text_editor>
- <text name="fine_print">
- Si su destinatario se registra en [SECOND_LIFE],
-usted conseguirá un bono de referido.
- </text>
- <button label="Cancelar" name="cancel_btn"/>
- <button label="Enviar" name="send_btn"/>
- <string name="default_subject">
- Postal desde [SECOND_LIFE].
- </string>
- <string name="default_message">
- ¡Mira esto!
- </string>
- <string name="upload_message">
- Enviando...
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_spellcheck.xml b/indra/newview/skins/default/xui/es/floater_spellcheck.xml
new file mode 100644
index 0000000000..b664b96928
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_spellcheck.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="spellcheck_floater" title="Configuración del corrector ortográfico">
+ <check_box label="Habilitar la revisión ortográfica" name="spellcheck_enable"/>
+ <text name="spellcheck_main">
+ Diccionario principal:
+ </text>
+ <text label="Registros:" name="spellcheck_additional">
+ Diccionarios adicionales:
+ </text>
+ <text name="spellcheck_available">
+ Disponibles
+ </text>
+ <text name="spellcheck_active">
+ Activos
+ </text>
+ <button label="Eliminar" name="spellcheck_remove_btn"/>
+ <button label="Importar..." name="spellcheck_import_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/es/floater_spellcheck_import.xml
new file mode 100644
index 0000000000..bd86ed00da
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_spellcheck_import.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="spellcheck_import" title="Importar diccionario">
+ <button label="Examinar" label_selected="Examinar" name="dictionary_path_browse"/>
+ <button label="Importar" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_stats.xml b/indra/newview/skins/default/xui/es/floater_stats.xml
index d53ae88126..00601920f2 100644
--- a/indra/newview/skins/default/xui/es/floater_stats.xml
+++ b/indra/newview/skins/default/xui/es/floater_stats.xml
@@ -47,6 +47,12 @@
<stat_bar label="Objetos con bajo nivel de detalle" name="physicslodtasks"/>
<stat_bar label="Memoria asignada" name="physicsmemoryallocated"/>
</stat_view>
+ <stat_bar label="Scripts ejecutados" name="simpctscriptsrun"/>
+ <stat_view label="Pathfinding" name="simpathfinding">
+ <stat_bar label="Tiempo de paso de IA" name="simsimaistepmsec"/>
+ <stat_bar label="Pasos de silueta omitidos" name="simsimskippedsilhouettesteps"/>
+ <stat_bar label="Personajes actualizados" name="simsimpctsteppedcharacters"/>
+ </stat_view>
<stat_view label="Tiempo (ms)" name="simperf">
<stat_bar label="Tiempo total de los frames" name="simframemsec"/>
<stat_bar label="Tiempo de red" name="simnetmsec"/>
diff --git a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
index 1e566e3e31..93bc9f293c 100644
--- a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
@@ -20,6 +20,8 @@
<button label="Blanca" label_selected="Blanca" name="Blank"/>
<button label="Ninguna" label_selected="Ninguna" left="90" name="None"/>
<button label="" label_selected="" name="Pipette"/>
+ <check_box initial_value="true" label="Vista previa inmediata" name="apply_immediate_check"/>
+ <text name="preview_disabled" value="Vista previa inhabilitada"/>
<filter_editor label="Filtrar las texturas" name="inventory search editor"/>
<check_box initial_value="false" label="Ver las carpetas" name="show_folders_check"/>
<button label="Añadir" label_selected="Añadir" name="l_add_btn"/>
@@ -31,5 +33,4 @@
</scroll_list>
<button label="OK" label_selected="OK" name="Select"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
- <check_box initial_value="true" label="Aplicarlo ahora" name="apply_immediate_check"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 650b4b457d..15462c3726 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -128,6 +128,12 @@
<panel.string name="text modify info 4">
No puedes modificar estos objetos
</panel.string>
+ <panel.string name="text modify info 5">
+ No se puede modificar este objeto a través del límite de una región
+ </panel.string>
+ <panel.string name="text modify info 6">
+ No se pueden modificar estos objetos a través del límite de una región
+ </panel.string>
<panel.string name="text modify warning">
Para configurar los permisos, debes seleccionar el objeto completo
</panel.string>
@@ -177,12 +183,12 @@
<combo_box.item label="Zoom" name="Zoom"/>
</combo_box>
<check_box label="En venta:" name="checkbox for sale"/>
+ <spinner label="L$" name="Edit Cost"/>
<combo_box name="sale type">
<combo_box.item label="Copia" name="Copy"/>
<combo_box.item label="Contenidos" name="Contents"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
- <spinner label="Precio: L$" name="Edit Cost"/>
<check_box label="Mostrar en la búsqueda" name="search_check" tool_tip="Dejar que la gente vea este objeto en los resultados de la búsqueda"/>
<panel name="perms_build">
<text name="perm_modify">
@@ -218,6 +224,11 @@
F:
</text>
</panel>
+ <panel name="pathfinding_attrs_panel">
+ <text name="pathfinding_attributes_label">
+ Atributos de pathfinding:
+ </text>
+ </panel>
</panel>
<panel label="Objeto" name="Object">
<check_box label="Bloqueado" name="checkbox locked" tool_tip="Previene que el objeto sea movido o borrado. Suele ser útil mientras se construye, para prevenir que se modifique sin querer."/>
diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml
index 033633bd22..bb53f116c2 100644
--- a/indra/newview/skins/default/xui/es/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/es/floater_top_objects.xml
@@ -9,9 +9,6 @@
<floater.string name="scripts_score_label">
Tiempo
</floater.string>
- <floater.string name="scripts_mono_time_label">
- Tiempo en Mono
- </floater.string>
<floater.string name="top_colliders_title">
Objetos que colisionan
</floater.string>
@@ -32,9 +29,10 @@
<scroll_list.columns label="Nombre" name="name"/>
<scroll_list.columns label="Propietario" name="owner"/>
<scroll_list.columns label="Posición" name="location"/>
+ <scroll_list.columns label="Parcela" name="parcel"/>
<scroll_list.columns label="Tiempo" name="time"/>
- <scroll_list.columns label="Tiempo en Mono" name="mono_time"/>
<scroll_list.columns label="URLs" name="URLs"/>
+ <scroll_list.columns label="Memoria (KB)" name="memory"/>
</scroll_list>
<text name="id_text">
ID del objeto:
@@ -48,6 +46,10 @@
Propietario:
</text>
<button label="Filtro" name="filter_owner_btn"/>
+ <text name="parcel_name_text">
+ Parcela:
+ </text>
+ <button label="Filtro" name="filter_parcel_btn"/>
<button label="Actualizar" name="refresh_btn"/>
<button label="Devolver lo seleccionado" name="return_selected_btn" width="170"/>
<button label="Devolver todo" left="190" name="return_all_btn"/>
diff --git a/indra/newview/skins/default/xui/es/menu_bottomtray.xml b/indra/newview/skins/default/xui/es/menu_bottomtray.xml
deleted file mode 100644
index 40058a1749..0000000000
--- a/indra/newview/skins/default/xui/es/menu_bottomtray.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="hide_camera_move_controls_menu">
- <menu_item_check label="Botón Hablar" name="EnableVoiceChat"/>
- <menu_item_check label="Botón Gestos" name="ShowGestureButton"/>
- <menu_item_check label="Botón Moverse" name="ShowMoveButton"/>
- <menu_item_check label="Botón Vista" name="ShowCameraButton"/>
- <menu_item_check label="Botón Foto" name="ShowSnapshotButton"/>
- <menu_item_check label="Botón Construir" name="ShowBuildButton"/>
- <menu_item_check label="Botón Buscar" name="ShowSearchButton"/>
- <menu_item_check label="Botón Mapa" name="ShowWorldMapButton"/>
- <menu_item_check label="Botón Minimapa" name="ShowMiniMapButton"/>
- <menu_item_call label="Cortar" name="NearbyChatBar_Cut"/>
- <menu_item_call label="Copiar" name="NearbyChatBar_Copy"/>
- <menu_item_call label="Pegar" name="NearbyChatBar_Paste"/>
- <menu_item_call label="Borrar" name="NearbyChatBar_Delete"/>
- <menu_item_call label="Seleccionar todo" name="NearbyChatBar_Select_All"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_mode_change.xml b/indra/newview/skins/default/xui/es/menu_mode_change.xml
deleted file mode 100644
index 608505d192..0000000000
--- a/indra/newview/skins/default/xui/es/menu_mode_change.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Mode Change">
- <menu_item_check label="Básico" name="BasicMode"/>
- <menu_item_check label="Avanzado" name="AdvancedMode"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml
index d8c75eaf47..33ea8c88d8 100644
--- a/indra/newview/skins/default/xui/es/menu_object.xml
+++ b/indra/newview/skins/default/xui/es/menu_object.xml
@@ -5,6 +5,8 @@
</menu_item_call>
<menu_item_call label="Editar" name="Edit..."/>
<menu_item_call label="Construir" name="Build"/>
+ <menu_item_call label="Mostrar en linksets" name="show_in_linksets"/>
+ <menu_item_call label="Mostrar en personajes" name="show_in_characters"/>
<menu_item_call label="Abrir" name="Open"/>
<menu_item_call label="Sentarme aquí" name="Object Sit"/>
<menu_item_call label="Levantarme" name="Object Stand Up"/>
diff --git a/indra/newview/skins/default/xui/es/menu_text_editor.xml b/indra/newview/skins/default/xui/es/menu_text_editor.xml
index 095e461734..6253463725 100644
--- a/indra/newview/skins/default/xui/es/menu_text_editor.xml
+++ b/indra/newview/skins/default/xui/es/menu_text_editor.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Text editor context menu">
+ <menu_item_call label="(desconocido)" name="Suggestion 1"/>
+ <menu_item_call label="(desconocido)" name="Suggestion 2"/>
+ <menu_item_call label="(desconocido)" name="Suggestion 3"/>
+ <menu_item_call label="(desconocido)" name="Suggestion 4"/>
+ <menu_item_call label="(desconocido)" name="Suggestion 5"/>
+ <menu_item_call label="Añadir al diccionario" name="Add to Dictionary"/>
+ <menu_item_call label="Añadir a ignorados" name="Add to Ignore"/>
<menu_item_call label="Cortar" name="Cut"/>
<menu_item_call label="Copiar" name="Copy"/>
<menu_item_call label="Pegar" name="Paste"/>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 740bd35cbb..d80150ef6d 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -27,6 +27,7 @@
<menu_item_call label="Preferencias..." name="Preferences"/>
<menu_item_call label="Botones de la barra de herramientas..." name="Toolbars"/>
<menu_item_call label="Ocultar todos los controles" name="Hide UI"/>
+ <menu_item_check label="Mostrar los HUD anexados" name="Show HUD Attachments"/>
<menu_item_call label="Salir de [APP_NAME]" name="Quit"/>
</menu>
<menu label="Comunicarme" name="Communicate">
@@ -38,6 +39,7 @@
<menu_item_call label="Amigos" name="My Friends"/>
<menu_item_call label="Grupos" name="My Groups"/>
<menu_item_call label="Gente cerca" name="Active Speakers"/>
+ <menu_item_call label="Lista de ignorados" name="Block List"/>
</menu>
<menu label="Mundo" name="World">
<menu_item_call label="Crear un hito de este sitio" name="Create Landmark Here"/>
@@ -123,6 +125,11 @@
<menu_item_call label="Definir los scripts a ejecutar" name="Set Scripts to Running"/>
<menu_item_call label="Configurar scripts como no ejecutándose" name="Set Scripts to Not Running"/>
</menu>
+ <menu label="Pathfinding" name="Pathfinding">
+ <menu_item_call label="Linksets..." name="pathfinding_linksets_menu_item"/>
+ <menu_item_call label="Personajes..." name="pathfinding_characters_menu_item"/>
+ <menu_item_call label="Ver/probar..." name="pathfinding_console_menu_item"/>
+ </menu>
<menu label="Opciones" name="Options">
<menu_item_check label="Mostrar los permisos avanzados" name="DebugPermissions"/>
<menu_item_check label="Seleccionar sólo mis objetos" name="Select Only My Objects"/>
@@ -173,7 +180,6 @@
<menu_item_check label="Ocultar las partículas" name="Hide Particles"/>
<menu_item_check label="Ocultar lo seleccionado" name="Hide Selected"/>
<menu_item_check label="Realzar las transparencias" name="Highlight Transparent"/>
- <menu_item_check label="Mostrar los HUD anexados" name="Show HUD Attachments"/>
<menu_item_check label="Mostrar el Punto de Mira en la vista subjetiva" name="ShowCrosshairs"/>
</menu>
<menu label="Objetos representados" name="Rendering Types">
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index af7a7b088a..991a079be5 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -37,6 +37,12 @@
<button name="Help" text="$helptext"/>
</form>
</template>
+ <template name="okhelpignore">
+ <form>
+ <button name="OK_okhelpignore" text="$yestext"/>
+ <button name="Help_okhelpignore" text="$helptext"/>
+ </form>
+ </template>
<template name="yesnocancelbuttons">
<form>
<button name="Yes" text="$yestext"/>
@@ -357,13 +363,19 @@ Tienes que volver a introducir el nombre de usuario de tu avatar.
Necesitas una cuenta para acceder a [SECOND_LIFE]. ¿Te gustaría crear una ahora?
<url name="url">
- https://join.secondlife.com/index.php?lang=es-ES
+ [create_account_url]
</url>
<usetemplate name="okcancelbuttons" notext="Volver a intentarlo" yestext="Crear una cuenta nueva"/>
</notification>
<notification name="InvalidCredentialFormat">
Escribe el nombre de usuario o el nombre y el apellido de tu avatar en el campo Nombre de usuario e inicia sesión otra vez.
</notification>
+ <notification name="InvalidGrid">
+ &apos;[GRID]&apos; no es un identificador de cuadrícula válido.
+ </notification>
+ <notification name="InvalidLocationSLURL">
+ Tu localización inicial no especifica una cuadrícula válida.
+ </notification>
<notification name="DeleteClassified">
¿Borrar el clasificado &apos;[NAME]&apos;?
No se reembolsan las cuotas pagadas.
@@ -467,8 +479,8 @@ El objeto debe de haber sido borrado o estar fuera de rango (&apos;out of range&
Al guardar un script compilado, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde..
</notification>
<notification name="StartRegionEmpty">
- Perdón, no está definida tu Posición inicial.
-Por favor, escribe el nombre de la región en el cajetín de Posición inicial, o elige para esa posición Mi Base o Mi última posición.
+ No está definida tu región inicial.
+Por favor, escribe el nombre de la región en el cuadro de Posición inicial o elige para esa posición Mi Base o Mi última posición.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CouldNotStartStopScript">
@@ -599,6 +611,9 @@ todos los objetos.
Por favor, asegúrate de que no hay ninguno bloqueado, y de que eres el propietario de todos.
</notification>
+ <notification name="CannotLinkPermanent">
+ No se pueden vincular objetos a través de límites de región.
+ </notification>
<notification name="CannotLinkDifferentOwners">
Imposible enlazarlos, porque hay objetos de distintos propietarios.
@@ -980,6 +995,41 @@ no tienes el permiso de comprar terreno para el grupo que tienes activado actual
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification label="Añadir lista de reemplazo automático" name="AddAutoReplaceList">
+ Nombre de la nueva lista:
+ <form name="form">
+ <button name="SetName" text="OK"/>
+ </form>
+ </notification>
+ <notification label="Cambiar nombre de la lista de reemplazo automático" name="RenameAutoReplaceList">
+ El nombre &apos;[DUPNAME]&apos; ya se está utilizando.
+ Escribe un nombre nuevo que sea único:
+ <form name="form">
+ <button name="ReplaceList" text="Reemplazar la lista actual"/>
+ <button name="SetName" text="Usar un nombre nuevo"/>
+ </form>
+ </notification>
+ <notification name="InvalidAutoReplaceEntry">
+ La palabra clave debe ser una palabra única y el reemplazo no puede estar vacío.
+ </notification>
+ <notification name="InvalidAutoReplaceList">
+ La lista de reemplazo no es válida.
+ </notification>
+ <notification name="SpellingDictImportRequired">
+ Debes especificar un archivo, un nombre y un idioma.
+ </notification>
+ <notification name="SpellingDictIsSecondary">
+ El diccionario [DIC_NAME] aparentemente no contiene un archivo &quot;aff&quot;, lo cual significa que es un diccionario &quot;secundario&quot;.
+Puedes utilizarlo como un diccionario adicional, pero no como el diccionario principal.
+
+Consulta https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries
+ </notification>
+ <notification name="SpellingDictImportFailed">
+ No se puede copiar
+ [FROM_NAME]
+ a
+ [TO_NAME]
+ </notification>
<notification label="Guardar el vestuario" name="SaveOutfitAs">
Guardar como un nuevo vestuario lo que estoy llevando:
<form name="form">
@@ -1180,7 +1230,6 @@ Puedes usar [SECOND_LIFE] de forma normal; los demás residentes te verán corre
Se ha completado la instalación de [SECOND_LIFE].
Si es la primera vez que usas [SECOND_LIFE], debes crear una cuenta antes de poder iniciar una sesión.
-¿Volver a [http://join.secondlife.com secondlife.com] para crear una cuenta nueva?
<usetemplate name="okcancelbuttons" notext="Continuar" yestext="Cuenta nueva..."/>
</notification>
<notification name="LoginPacketNeverReceived">
@@ -1703,83 +1752,128 @@ Se cambiarán miles de regiones, y se provocará un colapso en el espacio del se
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="RegionEntryAccessBlocked">
- No estás autorizado en esa región por su nivel de calificación. Puede deberse a que no hay información validada de tu edad.
-
-Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
+ Tus preferencias de contenido actuales te impiden visitar la región que has seleccionado. Puedes cambiar las preferencias en Yo &gt; Preferencias &gt; General.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="RegionEntryAccessBlocked_KB">
- No estás autorizado en esa región por su nivel de calificación.
-
-¿Quieres ir a la Base de Conocimientos para aprender más sobre el nivel de calificación?
+ <notification name="RegionEntryAccessBlocked_AdultsOnlyContent">
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], que solo es accesible para los adultos.
<url name="url">
- http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es
+ http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview
</url>
- <usetemplate ignoretext="No puedo entrar a esta región dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
+ <usetemplate ignoretext="Paso a otra región: la región que intentas visitar tiene un contenido solo accesible para los adultos." name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
</notification>
<notification name="RegionEntryAccessBlocked_Notify">
- No estás autorizado en esa región por su nivel de calificación.
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos.
+ </notification>
+ <notification name="RegionEntryAccessBlocked_NotifyAdultsOnly">
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], que solo es accesible para los adultos.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- No estás autorizado en esta región por tus preferencias sobre el nivel de calificación.
-
-Para entrar en la región que deseas, cambia tu preferencia de nivel de calificación. Esto te permitirá buscar contenidos [REGIONMATURITY] y tener acceso a ellos. Para deshacer los cambios, elige Yo &gt; Preferencias &gt; General.
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos. Podemos cambiar tus preferencias o tú puedes cancelar la visita. Después de cambiar tus preferencias, intenta otra vez acceder a la región.
<form name="form">
- <button name="OK" text="Cambiar las preferencias"/>
- <button default="true" name="Cancel" text="Cerrar"/>
- <ignore name="ignore" text="Mis preferencias sobre nivel de calificación me impiden entrar a esta región"/>
+ <button name="OK" text="Cambiar preferencias"/>
+ <button default="true" name="Cancel" text="Cancelar"/>
+ <ignore name="ignore" text="Paso a otra región: tus preferencias de contenido no te permiten visitar la región que has seleccionado."/>
</form>
</notification>
+ <notification name="RegionEntryAccessBlocked_PreferencesOutOfSync">
+ Estamos experimentando dificultades técnicas con el teleporte porque tus preferencias no están sincronizadas con el servidor.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked">
+ Tus preferencias de contenido actuales te impiden visitar la región que has seleccionado. Puedes cambiar las preferencias en Yo &gt; Preferencias &gt; General.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_AdultsOnlyContent">
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], que solo es accesible para los adultos.
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview
+ </url>
+ <usetemplate ignoretext="Teleportarme: la región que intentas visitar tiene un contenido solo accesible para los adultos." name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_Notify">
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos.
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_NotifyAdultsOnly">
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], que solo es accesible para los adultos.
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_ChangeAndReTeleport">
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos. Podemos cambiar tus preferencias y proceder a teleportarte o bien tú puedes cancelar el teleporte.
+ <form name="form">
+ <button name="OK" text="Cambiar y continuar"/>
+ <button name="Cancel" text="Cancelar"/>
+ <ignore name="ignore" text="Teleportar (reiniciable): tus preferencias de contenido no te permiten visitar la región que has seleccionado."/>
+ </form>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_Change">
+ La región que intentas visitar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos. Puedes cambiar tus preferencias o bien cancelar el teleporte. Después de cambiar tus preferencias, intenta teleportarte otra vez.
+ <form name="form">
+ <button name="OK" text="Cambiar preferencias"/>
+ <button name="Cancel" text="Cancelar"/>
+ <ignore name="ignore" text="Teleportar (no reiniciable): tus preferencias de contenido no te permiten visitar la región que has seleccionado."/>
+ </form>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_PreferencesOutOfSync">
+ Estamos experimentando dificultades técnicas con el teleporte porque tus preferencias no están sincronizadas con el servidor.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="PreferredMaturityChanged">
- Tu preferencia de nivel de calificación actual es [RATING].
+ No recibirás más notificaciones cuando vayas a visitar una región con un contenido [RATING]. En el futuro, puedes cambiar tus preferencias de contenido en Yo &gt; Preferencias &gt; General en la barra de menús.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MaturityChangeError">
+ En este momento no se pueden cambiar tus preferencias para ver el contenido [PREFERRED_MATURITY]. Tus preferencias se han restablecido para que puedas ver el contenido [ACTUAL_MATURITY]. Si deseas cambiar las preferencias otra vez, en la barra de menús, selecciona Yo &gt; Preferencias &gt; General.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LandClaimAccessBlocked">
- No puedes reclamar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de tu edad.
-
-Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
+ Tus preferencias actuales de calificación de contenido te impiden reclamar el terreno que has seleccionado. Puedes cambiar las preferencias en Yo &gt; Preferencias &gt; General.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="LandClaimAccessBlocked_KB">
- No puedes reclamar este terreno por su nivel de calificación.
-
-¿Quieres ir a la Base de Conocimientos para más información sobre el nivel de calificación?
+ <notification name="LandClaimAccessBlocked_AdultsOnlyContent">
+ Solo los adultos pueden reclamar este terreno.
<url name="url">
- http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es
+ http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview
</url>
- <usetemplate ignoretext="No puedo reclamar este terreno dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
+ <usetemplate ignoretext="Solo los adultos pueden reclamar este terreno." name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
</notification>
<notification name="LandClaimAccessBlocked_Notify">
- No puedes reclamar este terreno debido a su nivel de calificación.
+ El terreno que intentas reclamar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos.
+ </notification>
+ <notification name="LandClaimAccessBlocked_NotifyAdultsOnly">
+ El terreno que intentas reclamar tiene un contenido [REGIONMATURITY], que solo es accesible para los adultos.
</notification>
<notification name="LandClaimAccessBlocked_Change">
- No puedes reclamar este terreno por tus preferencias sobre el nivel de calificación.
-
-Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferencias del nivel de calificación y, así, poder entrar. En adelante, podrás buscar y acceder a contenido [REGIONMATURITY]. Si más adelante quieres deshacer este cambio, ve a Yo &gt; Preferencias &gt; General.
- <usetemplate ignoretext="Mis preferencias sobre el nivel de calificación me impiden reclamar este terreno" name="okcancelignore" notext="Cerrar" yestext="Cambiar preferencia"/>
+ El terreno que intentas reclamar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos. Podemos cambiar tus preferencias y después puedes volver a intentar reclamar el terreno.
+ <form name="form">
+ <button name="OK" text="Cambiar preferencias"/>
+ <button name="Cancel" text="Cancelar"/>
+ <ignore name="ignore" text="Tus preferencias de contenido no te permiten reclamar el terreno que has seleccionado."/>
+ </form>
</notification>
<notification name="LandBuyAccessBlocked">
- No puedes comprar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de tu edad.
-
-Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
+ Tus preferencias actuales de calificación de contenido te impiden comprar el terreno que has seleccionado. Puedes cambiar las preferencias en Yo &gt; Preferencias &gt; General.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="LandBuyAccessBlocked_KB">
- No puedes comprar este terreno por tus preferencias de nivel de calificación.
-
-¿Quieres ir a la Base de Conocimientos para más información sobre el nivel de calificación?
+ <notification name="LandBuyAccessBlocked_AdultsOnlyContent">
+ Solo los adultos pueden comprar este terreno.
<url name="url">
- http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es
+ http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview
</url>
- <usetemplate ignoretext="No puedo comprar este terreno dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
+ <usetemplate ignoretext="Solo los adultos pueden comprar este terreno." name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
</notification>
<notification name="LandBuyAccessBlocked_Notify">
- No puedes comprar este terreno por su nivel de calificación.
+ El terreno que intentas comprar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos.
+ </notification>
+ <notification name="LandBuyAccessBlocked_NotifyAdultsOnly">
+ El terreno que intentas comprar tiene un contenido [REGIONMATURITY], que solo es accesible para los adultos.
</notification>
<notification name="LandBuyAccessBlocked_Change">
- No puedes comprar este terreno por tus preferencias sobre el nivel de calificación.
-
-Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferencias del nivel de calificación y, así, poder entrar. En adelante, podrás buscar y acceder a contenido [REGIONMATURITY]. Si más adelante quieres deshacer este cambio, ve a Yo &gt; Preferencias &gt; General.
- <usetemplate ignoretext="Mis preferencias sobre el nivel de calificación me impiden comprar el terreno" name="okcancelignore" notext="Cerrar" yestext="Cambiar preferencia"/>
+ El terreno que intentas comprar tiene un contenido [REGIONMATURITY], pero tus preferencias actuales no te autorizan a ver este tipo de contenidos. Podemos cambiar tus preferencias y después puedes volver a intentar comprar el terreno.
+ <form name="form">
+ <button name="OK" text="Cambiar preferencias"/>
+ <button name="Cancel" text="Cancelar"/>
+ <ignore name="ignore" text="Tus preferencias de contenido no te permiten comprar el terreno que has seleccionado."/>
+ </form>
</notification>
<notification name="TooManyPrimsSelected">
Hay demasiados prims seleccionados. Por favor, selecciona [MAX_PRIM_COUNT] o menos y vuelve a intentarlo
@@ -1834,10 +1928,9 @@ Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferen
</form>
</notification>
<notification label="Cambiada la calificación de la región" name="RegionMaturityChange">
- Se ha actualizado el nivel de calificación de esta región.
+ Se ha cambiando el nivel de calificación de esta región.
Puede que lleve algún tiempo hasta que el cambio se vea reflejado en el mapa.
-
-Para entrar a regiones Adultas, los Residentes deben haber verificado su cuenta, bien verificando la edad o bien verificando una forma de pago.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification label="Desajuste en la versión de voz" name="VoiceVersionMismatch">
Esta versión de [APP_NAME] no es compatible con la prestación de voz de esta región. Para que el chat de voz funcione correctamente debes actualizar [APP_NAME].
@@ -2126,14 +2219,11 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
<usetemplate ignoretext="Ponerme la ropa que estoy creando mientras modifico mi apariencia" name="okcancelignore" notext="No" yestext="Sí"/>
</notification>
<notification name="NotAgeVerified">
- Para acceder al contenido Adulto y los lugares de Second Life con dicho carácter, debes tener por lo menos 18 años. Visita la página de verificación de edad para confirmar que tienes más de 18 años.
-Al hacerlo se iniciará el navegador web.
-
-[_URL]
- <url name="url" option="0">
- https://secondlife.com/my/account/verification.php
- </url>
- <usetemplate ignoretext="No he verificado mi edad" name="okcancelignore" notext="Cancelar" yestext="Ir a Verificación de la edad"/>
+ El lugar que intentas visitar tiene el acceso restringido a los Residentes mayores de 18 años.
+ <usetemplate ignoretext="No tengo la edad suficiente para visitar áreas restringidas por edad." name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="NotAgeVerified_Notify">
+ Localización restringida para mayores de 18 años.
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Para visitar este sitio debes haber aportado información de pago en tu cuenta. ¿Quieres ir al sitio web de [SECOND_LIFE] y configurar esto?
@@ -2394,6 +2484,23 @@ Aquí no puedes volar.
<notification name="NoBuild">
Este terreno tiene desactivado el poder construir. Aquí no puedes ni construir ni crear objetos.
</notification>
+ <notification name="PathfindingDirty">
+ La región contiene cambios de pathfinding pendientes. Si tienes derechos de construcción, puedes recargarla pulsando el botón “Recargar región”.
+ </notification>
+ <notification name="DynamicPathfindingDisabled">
+ Esta región no tiene activado el pathfinding dinámico. Los objetos programados que utilicen llamadas LSL de pathfinding pueden tener un comportamiento inesperado en ella.
+ </notification>
+ <notification name="PathfindingRebakeNavmesh">
+ Si cambias ciertos objetos en esta región, otros objetos móviles podrían tener un comportamiento incorrecto. Para que los objetos móviles se comporten correctamente, pulsa el botón “Recargar la región”. Si quieres más información, elige “Ayuda”.
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
+ </url>
+ <usetemplate helptext="Ayuda" ignoretext="Si cambias ciertos objetos en esta región, otros objetos móviles podrían tener un comportamiento incorrecto." name="okhelpignore" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingCannotRebakeNavmesh">
+ Se ha producido un error. Puede haber ocurrido un problema en la red o el servidor, o quizás no tengas derechos de construcción. Este problema podría resolverse cerrando la sesión e iniciando una sesión nueva.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="SeeAvatars">
Esta parcela oculta los avatares y el chat de texto de otras parcelas. No podrás ver a los residentes que estén fuera la parcela ni ellos podrán verte a ti. El chat de texto regular del canal 0 también está bloqueado.
</notification>
@@ -2412,9 +2519,7 @@ Los scripts no funcionan aquí, excepto los pertenecientes al propietario del te
Sólo puedes reclamar terreno público de la región en que estás.
</notification>
<notification name="RegionTPAccessBlocked">
- No estás autorizado en esa región por su nivel de calificación. Debes validar tu edad y/o instalar el último visor.
-
-Por favor, dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
+ Tus preferencias de contenido actuales te impiden visitar la región que has seleccionado. Puedes cambiar las preferencias en Yo &gt; Preferencias &gt; General.
</notification>
<notification name="URBannedFromRegion">
Se te ha prohibido el acceso a la región.
@@ -2425,11 +2530,11 @@ Por favor, dirígete a la Base de Conocimientos para más detalles sobre el acce
<notification name="ImproperPaymentStatus">
No tienes el estado de pago adecuado para entrar a esta región.
</notification>
- <notification name="MustGetAgeRgion">
- Debes tener verificada la edad para entrar a esta región
+ <notification name="MustGetAgeRegion">
+ Solo pueden acceder a esta región los mayores de 18 años.
</notification>
<notification name="MustGetAgeParcel">
- Debes haber verificado tu edad para entrar a esta parcela.
+ Para acceder a esta parcela debes ser mayor de 18 años.
</notification>
<notification name="NoDestRegion">
No se ha encontrada la región de destino.
@@ -2529,14 +2634,35 @@ Por favor, vuelve a intentarlo en unos momentos.
</form>
</notification>
<notification name="TeleportOffered">
- [NAME_SLURL] te ha ofrecido teleportarte a su posición:
+ [NAME_SLURL] te ofrece teleportarte a su localización:
-[MESSAGE] - [MATURITY_STR] &lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;
+“[MESSAGE]”
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; - [MATURITY_STR]
<form name="form">
<button name="Teleport" text="Teleportar"/>
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification name="TeleportOffered_MaturityExceeded">
+ [NAME_SLURL] te ofrece teleportarte a su localización:
+
+“[MESSAGE]”
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; - [MATURITY_STR]
+
+Esta región tiene un contenido [REGION_CONTENT_MATURITY, pero tus preferencias actuales no te autorizan a ver los contenidos [REGION_CONTENT_MATURITY]. Podemos cambiar tus preferencias y proceder a teleportarte o bien tú puedes cancelar el teleporte.
+ <form name="form">
+ <button name="Teleport" text="Cambiar y continuar"/>
+ <button name="Cancel" text="Cancelar"/>
+ </form>
+ </notification>
+ <notification name="TeleportOffered_MaturityBlocked">
+ [NAME_SLURL] te ofrece teleportarte a su localización:
+
+“[MESSAGE]”
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; - [MATURITY_STR]
+
+No obstante, el contenido de esta región solo es accesible para los adultos.
+ </notification>
<notification name="TeleportOfferSent">
Teleporte ofrecido a [TO_NAME]
</notification>
@@ -2933,6 +3059,10 @@ Has actualizado una textura obtenida mediante bake de [RESOLUTION] para &apos;[B
( [EXISTENCE] segundos con vida )
Has actualizado de manera local una textura obtenida mediante bake de [RESOLUTION] para &apos;[BODYREGION]&apos; después de [TIME] segundos.
</notification>
+ <notification name="LivePreviewUnavailable">
+ No se puede mostrar una vista previa de esta textura porque es de tipo &apos;no copiable&apos; y/o &apos;no transferible&apos;.
+ <usetemplate ignoretext="Advertirme si el modo Vista previa inmediata no está disponible para las texturas &apos;no copiable&apos; y/o &apos;no transferible&apos;" name="okignore" yestext="OK"/>
+ </notification>
<notification name="ConfirmLeaveCall">
¿Estás seguro de que deseas salir de esta multiconferencia?
<usetemplate ignoretext="Confirma antes de salir de la llamada" name="okcancelignore" notext="No" yestext="Sí"/>
@@ -3101,6 +3231,23 @@ Al ocultar el botón Hablar se desactiva la función de voz.
Esta acción ocultará todos los botones y elementos de menú. Para restaurarlos, pulsa otra vez en [SHORTCUT].
<usetemplate ignoretext="Confirmar antes de ocultar la IU" name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted">
+ Algunos de los linksets seleccionados no pueden configurarse como &apos;[REQUESTED_TYPE]&apos; debido a restricciones de los permisos del linkset. Estos linksets se configurarán como &apos;[RESTRICTED_TYPE]&apos;.
+ <usetemplate ignoretext="Algunos de los linksets seleccionados no pueden configurarse debido a restricciones de los permisos del linkset." name="okcancelignore" notext="Cancelar" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnVolume">
+ Algunos de los linksets seleccionados no pueden configurarse como &apos;[REQUESTED_TYPE]&apos; porque su forma no es convexa.
+ <usetemplate ignoretext="Algunos de los linksets seleccionados no pueden configurarse porque su forma no es convexa." name="okcancelignore" notext="Cancelar" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume">
+ Algunos de los linksets seleccionados no pueden configurarse como &apos;[REQUESTED_TYPE]&apos; debido a restricciones de los permisos del linkset. Estos linksets se configurarán como &apos;[RESTRICTED_TYPE]&apos;.
+ Algunos de los linksets seleccionados no pueden configurarse como &apos;[REQUESTED_TYPE]&apos; porque su forma no es convexa. Los tipos de utilización de estos linksets no cambiarán.
+ <usetemplate ignoretext="Algunos de los linksets seleccionados no pueden configurarse debido a restricciones de los permisos del linkset y porque su forma no es convexa." name="okcancelignore" notext="Cancelar" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_ChangeToFlexiblePath">
+ El objeto que has seleccionado afecta al navmesh. Al cambiarlo a una Ruta flexible se eliminará del navmesh.
+ <usetemplate ignoretext="El objeto que has seleccionado afecta al navmesh. Al cambiarlo a una Ruta flexible se eliminará del navmesh." name="okcancelignore" notext="Cancelar" yestext="OK"/>
+ </notification>
<global name="UnsupportedGLRequirements">
Parece que no tienes el hardware apropiado para [APP_NAME]. [APP_NAME] requiere una tarjeta gráfica OpenGL que admita texturas múltiples (&apos;multitexture support&apos;). Si la tienes, comprueba que tienes los últimos &apos;drivers&apos; para tu tarjeta gráfica, así como los últimos parches y &apos;service packs&apos; para tu sistema operativo.
@@ -3137,4 +3284,12 @@ Desactivando futuras actualizaciones de este archivo.
Se ha intentado añadir un archivo de imagen [FNAME] no válido o ilegible, que no se puede abrir ni descodificar.
Intento cancelado.
</notification>
+ <notification name="PathfindingReturnMultipleItems">
+ Vas a devolver [NUM_ITEMS] objetos. ¿Estás seguro de que deseas continuar?
+ <usetemplate ignoretext="¿Estás seguro de que quieres devolver varios objetos?" name="okcancelignore" notext="No" yestext="Sí"/>
+ </notification>
+ <notification name="PathfindingDeleteMultipleItems">
+ Vas a eliminar [NUM_ITEMS] objetos. ¿Estás seguro de que deseas continuar?
+ <usetemplate ignoretext="¿Estás seguro de que quieres eliminar varios elementos?" name="okcancelignore" notext="No" yestext="Sí"/>
+ </notification>
</notifications>
diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray.xml b/indra/newview/skins/default/xui/es/panel_bottomtray.xml
deleted file mode 100644
index 2b1d017a2d..0000000000
--- a/indra/newview/skins/default/xui/es/panel_bottomtray.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="bottom_tray">
- <string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
- <string name="SpeakBtnToolTip" value="Activa/Desactiva el micrófono"/>
- <string name="VoiceControlBtnToolTip" value="Muestra/Oculta el panel del control de voz"/>
- <layout_stack name="toolbar_stack">
- <layout_panel name="speak_panel">
- <talk_button name="talk">
- <speak_button label="Hablar" label_selected="Hablar" name="speak_btn"/>
- </talk_button>
- </layout_panel>
- <layout_panel name="gesture_panel">
- <gesture_combo_list label="Gestos" name="Gesture" tool_tip="Muestra/Oculta los gestos"/>
- </layout_panel>
- <layout_panel name="movement_panel">
- <bottomtray_button label="Moverme" name="movement_btn" tool_tip="Muestra/Oculta los controles del movimiento"/>
- </layout_panel>
- <layout_panel name="cam_panel">
- <bottomtray_button label="Visión" name="camera_btn" tool_tip="Muestra/Oculta los controles de la cámara"/>
- </layout_panel>
- <layout_panel name="snapshot_panel">
- <bottomtray_button label="" name="snapshots" tool_tip="Hacer una foto"/>
- </layout_panel>
- <layout_panel name="build_btn_panel">
- <bottomtray_button label="Construir" name="build_btn" tool_tip="Muestra/Oculta las herramientas de construcción"/>
- </layout_panel>
- <layout_panel name="search_btn_panel">
- <bottomtray_button label="Buscar" name="search_btn" tool_tip="Muestra/Oculta la búsqueda"/>
- </layout_panel>
- <layout_panel name="world_map_btn_panel">
- <bottomtray_button label="Mapa" name="world_map_btn" tool_tip="Muestra/Oculta el mapa del mundo"/>
- </layout_panel>
- <layout_panel name="mini_map_btn_panel">
- <bottomtray_button label="Minimapa" name="mini_map_btn" tool_tip="Muestra/Oculta el minimapa"/>
- </layout_panel>
- <layout_panel name="im_well_panel">
- <chiclet_im_well name="im_well">
- <button name="Unread IM messages" tool_tip="Conversaciones"/>
- </chiclet_im_well>
- </layout_panel>
- <layout_panel name="notification_well_panel">
- <chiclet_notification name="notification_well">
- <button name="Unread" tool_tip="Notificaciones"/>
- </chiclet_notification>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_invite.xml b/indra/newview/skins/default/xui/es/panel_group_invite.xml
index 0d877f78f2..319e9d0f1b 100644
--- a/indra/newview/skins/default/xui/es/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_invite.xml
@@ -9,6 +9,9 @@
<panel.string name="already_in_group">
Alguno de los Residentes que has elegido ya están en el grupo: no se les enviará la invitación.
</panel.string>
+ <panel.string name="invite_selection_too_large">
+ Las invitaciones al grupo no se han enviado: has seleccionado demasiados Residentes. Solo se permiten 100 invitaciones al grupo por solicitud.
+ </panel.string>
<text bottom_delta="-96" height="72" name="help_text" width="214">
Puedes elegir a varios Residentes para invitarles a tu grupo. Para empezar, pulsa &apos;Abrir el selector de residentes&apos;.
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml
index 0e94cbe70b..683e0a096a 100644
--- a/indra/newview/skins/default/xui/es/panel_login.xml
+++ b/indra/newview/skins/default/xui/es/panel_login.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_login">
- <panel.string name="create_account_url">
- http://join.secondlife.com/index.php?lang=es-ES
- </panel.string>
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php?lang=es
</panel.string>
<layout_stack name="login_widgets">
<layout_panel name="login">
+ <text name="log_in_text">
+ INICIAR SESIÓN
+ </text>
<text name="username_text">
Nombre de usuario:
</text>
@@ -15,15 +15,8 @@
<text name="password_text">
Contraseña:
</text>
- <check_box label="Recordar la contraseña" name="remember_check"/>
- <button label="Iniciar sesión" name="connect_btn"/>
- <text name="mode_selection_text">
- Modo:
- </text>
- <combo_box name="mode_combo" tool_tip="Selecciona el modo. Elige Básico para una exploración rápida y fácil y para chatear. Elige Avanzado para tener acceso a más funciones.">
- <combo_box.item label="Básico" name="Basic"/>
- <combo_box.item label="Avanzado" name="Advanced"/>
- </combo_box>
+ </layout_panel>
+ <layout_panel name="start_location_panel">
<text name="start_location_text">
Empezar en:
</text>
@@ -33,16 +26,21 @@
<combo_box.item label="&lt;Escribe en qué región&gt;" name="Typeregionname"/>
</combo_box>
</layout_panel>
- <layout_panel name="links">
- <text name="create_new_account_text">
- Registrarme
+ <layout_panel name="links_login_panel">
+ <text name="login_help">
+ ¿Necesitas ayuda para conectarte?
</text>
<text name="forgot_password_text">
¿Olvidaste el nombre de usuario o la contraseña?
</text>
- <text name="login_help">
- ¿Necesitas ayuda para conectarte?
+ <button label="Iniciar sesión" name="connect_btn"/>
+ <check_box label="Recordar la contraseña" name="remember_check"/>
+ </layout_panel>
+ <layout_panel name="links">
+ <text name="create_account_text">
+ CREATE YǾUR ACCǾUNT
</text>
+ <button name="create_new_account_btn" label="Registrarme"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_navmesh_rebake.xml b/indra/newview/skins/default/xui/es/panel_navmesh_rebake.xml
new file mode 100644
index 0000000000..96df844512
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_navmesh_rebake.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_navmesh_rebake">
+ <button label="Recargar la región" name="navmesh_btn" tool_tip="Pulsa para recargar el navmesh de la región."/>
+ <button label="Solicitando recarga" name="navmesh_btn_sending" tool_tip="Enviando la solicitud de recarga al servidor."/>
+ <button label="La región se está recargando" name="navmesh_btn_baking" tool_tip="La región se está recargando. Este botón desaparecerá cuando finalice la recarga."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
index aea9b9ce4a..b0b6114e88 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -29,5 +29,7 @@
<check_box label="Chats de MI" name="EnableIMChatPopups" tool_tip="Activa esta casilla para ver una ventana emergente cada vez que recibas un mensaje instantáneo"/>
<spinner label="Duración de los interlocutores favoritos:" name="nearby_toasts_lifetime"/>
<spinner label="Tiempo de los otros interlocutores:" name="nearby_toasts_fadingtime"/>
- <button label="Configuración de la traducción del chat" name="ok_btn"/>
+ <button label="Traducción…" name="ok_btn"/>
+ <button label="Reemplazo automático..." name="autoreplace_showgui"/>
+ <button label="Revisión ortográfica..." name="spellcheck_showgui"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_debug.xml b/indra/newview/skins/default/xui/es/panel_region_debug.xml
index 64162220a6..f07f3d3951 100644
--- a/indra/newview/skins/default/xui/es/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_debug.xml
@@ -36,5 +36,5 @@
<button label="?" left="297" name="top_scripts_help"/>
<button label="Reiniciar la región" name="restart_btn" tool_tip="Cuenta atrás de 2 minutos y reiniciar la región"/>
<button label="?" name="restart_help"/>
- <button label="Retrasar el reinicio" name="cancel_restart_btn" tool_tip="Retrasar una hora el reinicio de la región"/>
+ <button label="Cancelar reinicio" name="cancel_restart_btn" tool_tip="Retrasar una hora el reinicio de la región"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml
index 84c1ed7686..6089dfb8db 100644
--- a/indra/newview/skins/default/xui/es/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml
@@ -26,7 +26,7 @@
Permitir únicamente el acceso a los Residentes que:
</text>
<check_box label="Han aportado la información de pago." name="limit_payment" tool_tip="Para poder acceder a este estado los Residentes deben haber aportado información de pago en su cuenta. Para más información, ver [SUPPORT_SITE]."/>
- <check_box label="Han verificado su edad" name="limit_age_verified" tool_tip="Para poder acceder a este estado los Residentes deben haber verificado su edad. Para más información, ver [SUPPORT_SITE]."/>
+ <check_box label="Son mayores de 18 años" name="limit_age_verified" tool_tip="Para poder acceder a este estado, los Residentes deben ser mayores de 18 años. Para más información, consulta [SUPPORT_SITE]."/>
<check_box label="Permitir el chat de voz" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Permitir el teleporte a cualquier punto" name="allow_direct_teleport"/>
diff --git a/indra/newview/skins/default/xui/es/panel_region_texture.xml b/indra/newview/skins/default/xui/es/panel_region_texture.xml
deleted file mode 100644
index 047e8f2f30..0000000000
--- a/indra/newview/skins/default/xui/es/panel_region_texture.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Texturas del terreno" name="Textures">
- <text name="region_text_lbl">
- Región:
- </text>
- <text name="region_text">
- desconocida
- </text>
- <text name="detail_texture_text" width="380">
- Texturas del terreno (se requieren archivos .tga de 512x512 y 24 bites)
- </text>
- <text name="height_text_lbl">
- 1 (Baja)
- </text>
- <text name="height_text_lbl2">
- 2
- </text>
- <text name="height_text_lbl3">
- 3
- </text>
- <text name="height_text_lbl4">
- 4 (Alta)
- </text>
- <text name="height_text_lbl5">
- Rangos de la elevación de la textura
- </text>
- <text name="height_text_lbl6">
- Noroeste
- </text>
- <text name="height_text_lbl7">
- Noreste
- </text>
- <text name="height_text_lbl8">
- Suroeste
- </text>
- <text name="height_text_lbl9">
- Sureste
- </text>
- <spinner label="Baja" name="height_start_spin_0"/>
- <spinner label="Baja" name="height_start_spin_1"/>
- <spinner label="Baja" name="height_start_spin_2"/>
- <spinner label="Baja" name="height_start_spin_3"/>
- <spinner label="Alta" name="height_range_spin_0"/>
- <spinner label="Alta" name="height_range_spin_1"/>
- <spinner label="Alta" name="height_range_spin_2"/>
- <spinner label="Alta" name="height_range_spin_3"/>
- <text name="height_text_lbl10">
- Estos valores representan la gama de mezclas para las texturas superiores.
- </text>
- <text name="height_text_lbl11">
- Midiendo en metros, el valor BAJA es la altura MÁXIMA de la textura #1, y el valor ALTA es la altura MÍNIMA de la textura #4.
- </text>
- <text name="height_text_lbl12">
- y el valor ALTA es la altura MÍNIMA de la textura #4.
- </text>
- <button label="Aplicar" name="apply_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_side_tray.xml b/indra/newview/skins/default/xui/es/panel_side_tray.xml
deleted file mode 100644
index cf5afb3cd1..0000000000
--- a/indra/newview/skins/default/xui/es/panel_side_tray.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- Side tray cannot show background because it is always
- partially on screen to hold tab buttons. -->
-<side_tray name="sidebar">
- <sidetray_tab description="Manejar la barra lateral." name="sidebar_openclose" tab_title="Barra lateral"/>
- <sidetray_tab description="Inicio." name="sidebar_home" tab_title="Inicio">
- <panel label="Inicio" name="panel_home"/>
- </sidetray_tab>
- <sidetray_tab description="Edita tu perfil público y tus destacados." name="sidebar_me" tab_title="Mi perfil">
- <panel_container name="panel_container">
- <panel label="Yo" name="panel_me"/>
- </panel_container>
- </sidetray_tab>
- <sidetray_tab description="Encuentra a tus amigos, contactos y gente que esté cerca." name="sidebar_people" tab_title="Gente">
- <panel_container name="panel_container">
- <panel label="Perfil del grupo" name="panel_group_info_sidetray"/>
- <panel label="Residentes y objetos ignorados" name="panel_block_list_sidetray"/>
- </panel_container>
- </sidetray_tab>
- <sidetray_tab description="Encontrar lugares donde ir o que ya visitaste." label="Lugares" name="sidebar_places" tab_title="Lugares">
- <panel label="Lugares" name="panel_places"/>
- </sidetray_tab>
- <sidetray_tab description="Mira tu inventario." name="sidebar_inventory" tab_title="Mi inventario">
- <panel label="Modificar el inventario" name="sidepanel_inventory"/>
- </sidetray_tab>
- <sidetray_tab description="Cambia tu apariencia y tu &apos;look&apos; actual." name="sidebar_appearance" tab_title="Mi apariencia">
- <panel label="Modificar la apariencia" name="sidepanel_appearance"/>
- </sidetray_tab>
-</side_tray>
diff --git a/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml
new file mode 100644
index 0000000000..9193da6cde
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="volumepulldown_floater" width="215">
+ <slider label="Maestro" name="System Volume" label_width="55" width="155"/>
+ <slider label="Botones" name="UI Volume" label_width="55" width="155"/>
+ <slider label="Ambiente" name="Wind Volume" label_width="55" width="155"/>
+ <slider label="Sonidos" name="SFX Volume" label_width="55" width="155"/>
+ <check_box name="gesture_audio_play_btn" tool_tip="Activa el sonido de los gestos"/>
+ <slider label="Música" name="Music Volume" label_width="55" width="155"/>
+ <check_box tool_tip="Activa el flujo de audio" name="enable_music"/>
+ <slider label="Medios" name="Media Volume" label_width="55" width="155"/>
+ <check_box tool_tip="Activa el flujo de medios" name="enable_media"/>
+ <slider label="Voz" name="Voice Volume" label_width="55" width="155"/>
+ <check_box tool_tip="Activar chat de voz" name="enable_voice_check"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
index ef7c6781be..176247f90e 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
@@ -3,6 +3,9 @@
<panel.string name="unknown">
(desconocidas)
</panel.string>
+ <panel.string name="unknown_multiple">
+ (desconocido/múltiple)
+ </panel.string>
<panel.string name="public">
(público)
</panel.string>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
index bd814ecc66..9da2958953 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
@@ -18,6 +18,12 @@
<panel.string name="text modify info 4">
No puedes modificar estos objetos
</panel.string>
+ <panel.string name="text modify info 5">
+ No se puede modificar este objeto a través del límite de una región
+ </panel.string>
+ <panel.string name="text modify info 6">
+ No se pueden modificar estos objetos a través del límite de una región
+ </panel.string>
<panel.string name="text modify warning">
Este objeto tiene partes enlazadas
</panel.string>
@@ -95,6 +101,9 @@
</combo_box>
<spinner label="Precio: L$" name="Edit Cost"/>
<check_box label="Mostrar en la búsqueda" name="search_check" tool_tip="Permitir que la gente vea este objeto en los resultados de la búsqueda"/>
+ <text name="pathfinding_attributes_label">
+ Atributos de pathfinding:
+ </text>
<text name="B:">
B:
</text>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index adc32ba168..d4698b8cb3 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -988,6 +988,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="script_files">
Scripts
</string>
+ <string name="dictionary_files">
+ Diccionarios
+ </string>
<string name="AvatarSetNotAway">
Salir del estado ausente
</string>
@@ -3780,6 +3783,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="LocationCtrlSeeAVsTooltip">
Los avatares están visibles y está permitido el chat fuera de esta parcela
</string>
+ <string name="LocationCtrlPathfindingDirtyTooltip">
+ Los objetos que se mueven pueden presentar un comportamiento incorrecto en la región hasta que ésta se recargue.
+ </string>
+ <string name="LocationCtrlPathfindingDisabledTooltip">
+ Esta región no tiene activado el pathfinding dinámico.
+ </string>
<string name="UpdaterWindowTitle">
Actualizar [APP_NAME]
</string>
@@ -4913,6 +4922,21 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="Normal">
Normal
</string>
+ <string name="Pathfinding_Wiki_URL">
+ http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
+ </string>
+ <string name="Pathfinding_Object_Attr_None">
+ Ninguno
+ </string>
+ <string name="Pathfinding_Object_Attr_Permanent">
+ Afecta al navmesh
+ </string>
+ <string name="Pathfinding_Object_Attr_Character">
+ Personaje
+ </string>
+ <string name="Pathfinding_Object_Attr_MultiSelect">
+ (Múltiple)
+ </string>
<string name="snapshot_quality_very_low">
Muy bajo
</string>
@@ -4928,4 +4952,10 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="snapshot_quality_very_high">
Muy alto
</string>
+ <string name="TeleportMaturityExceeded">
+ El Residente no puede visitar esta región.
+ </string>
+ <string name="UserDictionary">
+ [Usuario]
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/es/teleport_strings.xml b/indra/newview/skins/default/xui/es/teleport_strings.xml
index a23d9c43d0..94975a83f8 100644
--- a/indra/newview/skins/default/xui/es/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/es/teleport_strings.xml
@@ -44,6 +44,9 @@ Para repetir el tutorial, visita la isla de bienvenida pública.
<message name="no_inventory_host">
En estos momentos no está disponible el sistema del inventario.
</message>
+ <message name="MustGetAgeRegion">
+ Solo pueden acceder a esta región los mayores de 18 años.
+ </message>
</message_set>
<message_set name="progress">
<message name="sending_dest">
@@ -79,5 +82,8 @@ Para repetir el tutorial, visita la isla de bienvenida pública.
<message name="requesting">
Solicitando teleporte...
</message>
+ <message name="pending">
+ Teleporte pendiente...
+ </message>
</message_set>
</teleport_messages>
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
index 4409949584..a659cb4245 100644
--- a/indra/newview/skins/default/xui/fr/floater_about.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about.xml
@@ -66,27 +66,26 @@ Version serveur vocal : [VOICE_VERSION]
</panel>
<panel label="Licences" name="licenses_panel">
<text_editor name="credits_editor">
- 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
- APR Copyright (C) 2000-2004 The Apache Software Foundation
- Collada DOM Copyright 2005 Sony Computer Entertainment Inc.
- cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+ 3Dconnexion SDK Copyright (C) 1992-2009 3Dconnexion
+ APR Copyright (C) 2011 The Apache Software Foundation
+ Collada DOM Copyright 2006 Sony Computer Entertainment Inc.
+ cURL Copyright (C) 1996-2010, Daniel Stenberg, (daniel@haxx.se)
DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.
expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
- FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+ FreeType Copyright (C) 1996-2002, 2006 David Turner, Robert Wilhelm et Werner Lemberg.
GL Copyright (C) 1999-2004 Brian Paul.
- GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University et David Luebke, Brenden Schubert, University of Virginia.
+ GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University, et David Luebke, Brenden Schubert, University of Virginia.
google-perftools Copyright (c) 2005, Google Inc.
Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
- ogg/vorbis Copyright (C) 2001, Xiphophorus
- OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
- PCRE Copyright (c) 1997-2008 University of Cambridge
+ ogg/vorbis Copyright (C) 2002, Xiphophorus
+ OpenSSL Copyright (C) 1998-2008 The OpenSSL Project.
+ PCRE Copyright (c) 1997-2012 University of Cambridge
SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
- zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler.
- google-perftools Copyright (c) 2005, Google Inc.
+ zlib Copyright (C) 1995-2012 Jean-Loup Gailly et Mark Adler.
Le client Second Life utilise Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (et ses concédants de licence). Tous droits réservés. Pour plus de détails, consultez le site Web www.havok.com.
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index c86f31b429..26844d9849 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -470,7 +470,7 @@ musique :
Conditions d&apos;accès des résidents :
</text>
<check_box label="Informations de paiement enregistrées [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Pour pouvoir accéder à cette parcelle, les résidents doivent avoir enregistré des informations de paiement. Consultez le [SUPPORT_SITE] pour plus d&apos;informations."/>
- <check_box label="Âge vérifié [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Pour que les résidents puissent accéder à cette parcelle, leur âge doit avoir fait l&apos;objet d&apos;une vérification. Consultez le [SUPPORT_SITE] pour plus d&apos;informations."/>
+ <check_box label="Avoir plus de 18 ans [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Pour accéder à cette parcelle, les résidents doivent avoir au moins 18 ans. Consultez le [SUPPORT_SITE] pour plus d&apos;informations."/>
<check_box label="Autoriser l&apos;accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l&apos;onglet Général."/>
<check_box label="Vendre des pass à :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/>
<combo_box name="pass_combo" width="110">
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
deleted file mode 100644
index aa42fe6150..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Animation Preview" title="">
- <floater.string name="failed_to_initialize">
- Echec de l&apos;initialisation du mouvement
- </floater.string>
- <floater.string name="anim_too_long">
- Le fichier d&apos;animation fait [LENGTH] secondes.
-
-La longueur maximale est de [MAX_LENGTH] secondes.
- </floater.string>
- <floater.string name="failed_file_read">
- Impossible de lire le fichier d&apos;animation.
-
-[STATUS]
- </floater.string>
- <floater.string name="E_ST_OK">
- Ok
- </floater.string>
- <floater.string name="E_ST_EOF">
- Fichier incomplet.
- </floater.string>
- <floater.string name="E_ST_NO_CONSTRAINT">
- Impossible de lire la définition des contraintes.
- </floater.string>
- <floater.string name="E_ST_NO_FILE">
- Impossible d&apos;ouvrir le fichier BVH.
- </floater.string>
- <floater.string name="E_ST_NO_HIER">
- En-tête HIERARCHY non valide.
- </floater.string>
- <floater.string name="E_ST_NO_JOINT">
- Impossible de trouver ROOT ou JOINT.
- </floater.string>
- <floater.string name="E_ST_NO_NAME">
- Impossible de trouver le nom JOINT.
- </floater.string>
- <floater.string name="E_ST_NO_OFFSET">
- Impossible de trouver OFFSET.
- </floater.string>
- <floater.string name="E_ST_NO_CHANNELS">
- Impossible de trouver les CHANNELS.
- </floater.string>
- <floater.string name="E_ST_NO_ROTATION">
- Impossible d&apos;obtenir l&apos;ordre de rotation.
- </floater.string>
- <floater.string name="E_ST_NO_AXIS">
- Impossible d&apos;obtenir l&apos;axe de rotation.
- </floater.string>
- <floater.string name="E_ST_NO_MOTION">
- Impossible de trouver MOTION.
- </floater.string>
- <floater.string name="E_ST_NO_FRAMES">
- Impossible d&apos;obtenir le nombre de cadres.
- </floater.string>
- <floater.string name="E_ST_NO_FRAME_TIME">
- Impossible d&apos;obtenir le temps du cadre.
- </floater.string>
- <floater.string name="E_ST_NO_POS">
- Impossible de trouver les valeurs de la position.
- </floater.string>
- <floater.string name="E_ST_NO_ROT">
- Impossible de trouver les valeurs de rotation.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_FILE">
- Impossible d&apos;ouvrir le fichier de traduction.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_HEADER">
- Impossible de lire l&apos;en-tête de traduction.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_NAME">
- Impossible de lire la traduction.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_IGNORE">
- Impossible de lire la traduction.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_RELATIVE">
- Impossible de lire la valeur de traduction relative.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_OUTNAME">
- Impossible de lire la traduction.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MATRIX">
- Impossible de lire la matrice de traduction.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MERGECHILD">
- Impossible de trouver le nom mergechild.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MERGEPARENT">
- Impossible de trouver le nom mergeparent.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_PRIORITY">
- Impossible de définir la valeur de la priorité.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_LOOP">
- Impossible de définir la valeur de la boucle
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EASEIN">
- Impossible de trouver les valeurs easeIn.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EASEOUT">
- Impossible de trouver les valeurs easeOut.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_HAND">
- Impossible d&apos;obtenir la valeur hand morph.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EMOTE">
- Impossible de lire le nom emote.
- </floater.string>
- <floater.string name="E_ST_BAD_ROOT">
- Nom de racine incorrect.
- </floater.string>
- <text name="name_label">
- Nom :
- </text>
- <text name="description_label">
- Description :
- </text>
- <spinner label="Priorité" name="priority" tool_tip="Contrôle quelles autres animations peuvent être remplacées par cette animation"/>
- <check_box label="Boucle" left="6" name="loop_check" tool_tip="Lit cette animation en boucle"/>
- <spinner label="Début (%)" label_width="65" name="loop_in_point" tool_tip="Définit un point de l&apos;animation auquel retourne la boucle" width="105"/>
- <spinner label="Fin (%)" name="loop_out_point" tool_tip="Définit un point de l&apos;animation qui met fin à la boucle"/>
- <text name="hand_label">
- Mouvement de
-main
- </text>
- <combo_box label="" name="hand_pose_combo" tool_tip="Contrôle ce que font les mains pendant l&apos;animation">
- <combo_box.item label="Espacement" name="Spread"/>
- <combo_box.item label="Détendues" name="Relaxed"/>
- <combo_box.item label="Pointer (les deux)" name="PointBoth"/>
- <combo_box.item label="Poing" name="Fist"/>
- <combo_box.item label="Détendue (gauche)" name="RelaxedLeft"/>
- <combo_box.item label="Pointer (gauche)" name="PointLeft"/>
- <combo_box.item label="Poing (gauche)" name="FistLeft"/>
- <combo_box.item label="Détendue (droite)" name="RelaxedRight"/>
- <combo_box.item label="Pointer (droite)" name="PointRight"/>
- <combo_box.item label="Poing (droite)" name="FistRight"/>
- <combo_box.item label="Saluer (droite)" name="SaluteRight"/>
- <combo_box.item label="Taper" name="Typing"/>
- <combo_box.item label="Paix (main droite)" name="PeaceRight"/>
- </combo_box>
- <text name="emote_label">
- Expression
- </text>
- <combo_box label="" name="emote_combo" tool_tip="Contrôle ce que fait le visage pendant l&apos;animation">
- <item label="(aucun)" name="[None]" value=""/>
- <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
- <item label="Effrayé" name="Afraid" value="Effrayé"/>
- <item label="En colère" name="Angry" value="En colère"/>
- <item label="Grand sourire" name="BigSmile" value="Grand sourire"/>
- <item label="Ennui" name="Bored" value="Ennui"/>
- <item label="Pleurer" name="Cry" value="Pleurer"/>
- <item label="Mépris" name="Disdain" value="Mépris"/>
- <item label="Gêne" name="Embarrassed" value="Gêne"/>
- <item label="Froncer les sourcils" name="Frown" value="Froncer les sourcils"/>
- <item label="Embrasser" name="Kiss" value="Embrasser"/>
- <item label="Rire" name="Laugh" value="Rire"/>
- <item label="Plllppt" name="Plllppt" value="Tirer la langue"/>
- <item label="Dégoût" name="Repulsed" value="Dégoût"/>
- <item label="Triste" name="Sad" value="Triste"/>
- <item label="Hausser les épaules" name="Shrug" value="Hausser les épaules"/>
- <item label="Sourire" name="Smile" value="Sourire"/>
- <item label="Surprise" name="Surprise" value="Surprise"/>
- <item label="Clin d&apos;œil" name="Wink" value="Clin d&apos;œil"/>
- <item label="Soucis" name="Worry" value="Inquiétude"/>
- </combo_box>
- <text name="preview_label">
- Prévisualiser
-pendant
- </text>
- <combo_box label="" name="preview_base_anim" tool_tip="Utilisez cette option pour tester votre animation pendant que votre avatar fait des choses banales.">
- <item label="Debout" name="Standing" value="Debout"/>
- <item label="Marche" name="Walking" value="Marche"/>
- <item label="Assis" name="Sitting" value="Assis"/>
- <item label="Vol" name="Flying" value="Vol"/>
- </combo_box>
- <spinner label="Transition début (s)" name="ease_in_time" tool_tip="Durée (en secondes) de l&apos;entrée en fondu de l&apos;animation"/>
- <spinner label="Transition fin (s)" name="ease_out_time" tool_tip="Durée (en secondes) de la sortie en fondu de l&apos;animation"/>
- <button label="" name="play_btn" tool_tip="Lire votre animation"/>
- <button name="pause_btn" tool_tip="Pauser votre animation"/>
- <button label="" name="stop_btn" tool_tip="Arrêter le playback"/>
- <slider label="" name="playback_slider"/>
- <text name="bad_animation_text">
- Impossible de lire le fichier d&apos;animation.
-
-Nous recommandons les fichiers BVH extraits de Poser 4.
- </text>
- <button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
- <button label="Annuler" name="cancel_btn"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_autoreplace.xml b/indra/newview/skins/default/xui/fr/floater_autoreplace.xml
new file mode 100644
index 0000000000..1d19181692
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_autoreplace.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="autoreplace_floater" title="Paramètres Rechercher/Remplacer">
+ <check_box label="Activer la fonction Rechercher/Remplacer" name="autoreplace_enable" tool_tip="Lors de la saisie du texte d&apos;un chat, remplace chaque mot-clé spécifié par la valeur correspondante."/>
+ <button label="Importer une liste..." name="autoreplace_import_list" tool_tip="Charger une liste précédemment exportée à partir d&apos;un fichier."/>
+ <button label="Exporter la liste..." name="autoreplace_export_list" tool_tip="Enregistrer la liste sélectionnée dans un fichier afin de pouvoir la partager."/>
+ <button label="Nouvelle liste..." name="autoreplace_new_list" tool_tip="Créer une nouvelle liste."/>
+ <button label="Supprimer la liste" name="autoreplace_delete_list" tool_tip="Supprimer la liste sélectionnée."/>
+ <button name="autoreplace_list_up" tool_tip="Augmenter la priorité de cette liste."/>
+ <button name="autoreplace_list_down" tool_tip="Diminuer la priorité de cette liste."/>
+ <scroll_list name="autoreplace_list_replacements">
+ <scroll_list.columns label="Mot-clé" name="keyword"/>
+ <scroll_list.columns label="Remplacement" name="replacement"/>
+ </scroll_list>
+ <button label="Ajouter..." name="autoreplace_add_entry"/>
+ <button label="Supprimer" name="autoreplace_delete_entry"/>
+ <button label="Enregistrer" name="autoreplace_save_entry" tool_tip="Enregistrer cette entrée."/>
+ <button label="Enregistrer les modifications" name="autoreplace_save_changes" tool_tip="Enregistrer toutes les modifications."/>
+ <button label="Annuler" name="autoreplace_cancel" tool_tip="Ignorer toutes les modifications."/>
+</floater>
+<!--
+ <text
+ top_pad="10"
+ left="10"
+ height="16"
+ width="260"
+ follows="left|top"
+ halign="center"
+ mouse_opaque="true"
+ name="autoreplace_text2">
+ Entries
+ </text>
+-->
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory.xml b/indra/newview/skins/default/xui/fr/floater_inventory.xml
deleted file mode 100644
index 200c07e522..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_inventory.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="MON INVENTAIRE">
- <floater.string name="Title">
- MON INVENTAIRE
- </floater.string>
- <floater.string name="TitleFetching">
- MON INVENTAIRE (récupération de [ITEM_COUNT] articles en cours) [FILTER]
- </floater.string>
- <floater.string name="TitleCompleted">
- MON INVENTAIRE ([ITEM_COUNT] articles) [FILTER]
- </floater.string>
- <floater.string name="Fetched">
- Récupéré
- </floater.string>
- <panel label="Panneau Inventaire" name="Inventory Panel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_model_preview.xml b/indra/newview/skins/default/xui/fr/floater_model_preview.xml
index 0f272891c7..0f717cb2cd 100644
--- a/indra/newview/skins/default/xui/fr/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_model_preview.xml
@@ -92,19 +92,54 @@
<text initial_value="Triangles" name="triangles" value="Triangles"/>
<text initial_value="Sommets" name="vertices" value="Sommets"/>
<text initial_value="Élevé" name="high_label" value="Élevé"/>
+ <combo_box name="lod_source_high">
+ <item name="Load from file" value="Depuis un fichier"/>
+ <item name="Generate" value="Génération"/>
+ </combo_box>
<button label="Parcourir..." name="lod_browse_high"/>
+ <combo_box name="lod_mode_high">
+ <item name="Triangle Limit" value="Triangles max"/>
+ <item name="Error Threshold" value="Seuil d&apos;erreur"/>
+ </combo_box>
<text initial_value="0" name="high_triangles" value="0"/>
<text initial_value="0" name="high_vertices" value="0"/>
<text initial_value="Moyen" name="medium_label" value="Moyen"/>
+ <combo_box name="lod_source_medium">
+ <item name="Load from file" value="Depuis un fichier"/>
+ <item name="Generate" value="Génération"/>
+ <item name="Use LoD above" value="Niveau de détail du dessus"/>
+ </combo_box>
<button label="Parcourir..." name="lod_browse_medium"/>
+ <combo_box name="lod_mode_medium">
+ <item name="Triangle Limit" value="Triangles max"/>
+ <item name="Error Threshold" value="Seuil d&apos;erreur"/>
+ </combo_box>
<text initial_value="0" name="medium_triangles" value="0"/>
<text initial_value="0" name="medium_vertices" value="0"/>
<text initial_value="Faible" name="low_label" value="Faible"/>
+ <combo_box name="lod_source_low">
+ <item name="Load from file" value="Depuis un fichier"/>
+ <item name="Generate" value="Génération"/>
+ <item name="Use LoD above" value="Niveau de détail du dessus"/>
+ </combo_box>
<button label="Parcourir..." name="lod_browse_low"/>
+ <combo_box name="lod_mode_low">
+ <item name="Triangle Limit" value="Triangles max"/>
+ <item name="Error Threshold" value="Seuil d&apos;erreur"/>
+ </combo_box>
<text initial_value="0" name="low_triangles" value="0"/>
<text initial_value="0" name="low_vertices" value="0"/>
<text initial_value="Le plus faible" name="lowest_label" value="Le plus faible"/>
+ <combo_box name="lod_source_lowest">
+ <item name="Load from file" value="Depuis un fichier"/>
+ <item name="Generate" value="Génération"/>
+ <item name="Use LoD above" value="Niveau de détail du dessus"/>
+ </combo_box>
<button label="Parcourir..." name="lod_browse_lowest"/>
+ <combo_box name="lod_mode_lowest">
+ <item name="Triangle Limit" value="Triangles max"/>
+ <item name="Error Threshold" value="Seuil d&apos;erreur"/>
+ </combo_box>
<text initial_value="0" name="lowest_triangles" value="0"/>
<text initial_value="0" name="lowest_vertices" value="0"/>
<check_box label="Génération de normales" name="gen_normals"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml b/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml
deleted file mode 100644
index 8bbd34baae..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT PRÈS DE MOI">
- <check_box label="Traduction du chat" name="translate_chat_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/fr/floater_pathfinding_characters.xml
new file mode 100644
index 0000000000..7c9109c011
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_pathfinding_characters.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_characters" title="Personnages de recherche de chemin">
+ <floater.string name="messaging_get_inprogress">
+ Requête relative aux personnages de recherche de chemin en cours...
+ </floater.string>
+ <floater.string name="messaging_get_error">
+ Erreur lors de la requête relative aux personnages de recherche de chemin.
+ </floater.string>
+ <floater.string name="messaging_complete_none_found">
+ Aucun personnage de recherche de chemin.
+ </floater.string>
+ <floater.string name="messaging_complete_available">
+ [NUM_SELECTED] personnages sélectionnés sur [NUM_TOTAL].
+ </floater.string>
+ <floater.string name="messaging_not_enabled">
+ La recherche de chemin n&apos;a pas été activée pour cette région.
+ </floater.string>
+ <floater.string name="character_cpu_time">
+ [CPU_TIME] µs
+ </floater.string>
+ <floater.string name="character_owner_loading">
+ [Chargement]
+ </floater.string>
+ <floater.string name="character_owner_unknown">
+ [Inconnu]
+ </floater.string>
+ <floater.string name="character_owner_group">
+ [Groupe]
+ </floater.string>
+ <panel>
+ <scroll_list name="objects_scroll_list">
+ <scroll_list.columns label="Nom" name="name"/>
+ <scroll_list.columns label="Description" name="description"/>
+ <scroll_list.columns label="Propriétaire" name="owner"/>
+ <scroll_list.columns label="CPU" name="cpu_time"/>
+ <scroll_list.columns label="Altitude" name="altitude"/>
+ </scroll_list>
+ <text name="messaging_status">
+ Personnages :
+ </text>
+ <button label="Actualiser" name="refresh_objects_list"/>
+ <button label="Tout sélectionner" name="select_all_objects"/>
+ <button label="Ne rien sélectionner" name="select_none_objects"/>
+ </panel>
+ <panel>
+ <text name="actions_label">
+ Actions sur les personnages sélectionnés :
+ </text>
+ <check_box label="Afficher la balise" name="show_beacon"/>
+ <check_box label="Afficher la capsule physique" name="show_physics_capsule"/>
+ <button label="Prendre" name="take_objects"/>
+ <button label="Prendre une copie" name="take_copy_objects"/>
+ <button label="M&apos;y téléporter" name="teleport_me_to_object" tool_tip="Activé uniquement lorsqu&apos;un personnage est sélectionné."/>
+ <button label="Renvoyer" name="return_objects"/>
+ <button label="Supprimer" name="delete_objects"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml
new file mode 100644
index 0000000000..6d85f8035d
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_console" title="Vue / test de recherche de chemin">
+ <floater.string name="navmesh_viewer_status_library_not_implemented">
+ Implémentation de la bibliothèque de recherche de chemin introuvable
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_region_not_enabled">
+ La recherche de chemin n&apos;a pas été activée pour cette région.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_region_loading">
+ En attente de fin de chargement de la région.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_checking_version">
+ Vérification de l&apos;état du maillage de navigation.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_downloading">
+ Téléchargement du maillage de navigation.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_updating">
+ Maillage de navigation modifié sur le serveur. Téléchargement du plus récent.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_has_navmesh">
+ Le maillage de navigation le plus récent a été téléchargé.
+ </floater.string>
+ <floater.string name="navmesh_viewer_status_error">
+ Impossible de télécharger le maillage de navigation.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_pending">
+ Des modifications sont en attente concernant le maillage de navigation.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_building">
+ Maillage de navigation en cours de création.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_some_pending">
+ Des modifications sont en attente pour certaines régions de maillage de navigation.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_some_building">
+ Certaines régions de maillage de navigation sont en cours de création.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_pending_and_building">
+ Des modifications sont en attente pour certaines régions de maillage de navigation et d&apos;autres sont en cours de création.
+ </floater.string>
+ <floater.string name="navmesh_simulator_status_complete">
+ Maillage de navigation à jour.
+ </floater.string>
+ <floater.string name="pathing_library_not_implemented">
+ Implémentation de la bibliothèque de recherche de chemin introuvable
+ </floater.string>
+ <floater.string name="pathing_region_not_enabled">
+ La recherche de chemin n&apos;a pas été activée pour cette région.
+ </floater.string>
+ <floater.string name="pathing_choose_start_and_end_points">
+ Choisissez un point de départ et un point d&apos;arrivée.
+ </floater.string>
+ <floater.string name="pathing_choose_start_point">
+ Choisissez un point de départ.
+ </floater.string>
+ <floater.string name="pathing_choose_end_point">
+ Choisissez un point d&apos;arrivée.
+ </floater.string>
+ <floater.string name="pathing_path_valid">
+ Le chemin s&apos;affiche en orange.
+ </floater.string>
+ <floater.string name="pathing_path_invalid">
+ Impossible de trouver un chemin entre les points choisis.
+ </floater.string>
+ <floater.string name="pathing_error">
+ Erreur lors de la génération du chemin.
+ </floater.string>
+ <tab_container name="view_test_tab_container">
+ <panel label="Vue" name="view_panel">
+ <text name="show_label">
+ Afficher :
+ </text>
+ <check_box label="Monde" name="show_world"/>
+ <check_box label="Mobiles uniquement" name="show_world_movables_only"/>
+ <check_box label="Maillage de navigation" name="show_navmesh"/>
+ <text name="show_walkability_label">
+ Où marcher est possible :
+ </text>
+ <combo_box name="show_heatmap_mode">
+ <combo_box.item label="Ne pas afficher" name="show_heatmap_mode_none"/>
+ <combo_box.item label="Type de personnage A" name="show_heatmap_mode_a"/>
+ <combo_box.item label="Type de personnage B" name="show_heatmap_mode_b"/>
+ <combo_box.item label="Type de personnage C" name="show_heatmap_mode_c"/>
+ <combo_box.item label="Type de personnage D" name="show_heatmap_mode_d"/>
+ </combo_box>
+ <check_box label="Marche possible" name="show_walkables"/>
+ <check_box label="Volumes de matériau" name="show_material_volumes"/>
+ <check_box label="Obstacles statiques" name="show_static_obstacles"/>
+ <check_box label="Volumes d&apos;exclusion" name="show_exclusion_volumes"/>
+ <check_box label="Plan de l&apos;eau" name="show_water_plane"/>
+ <check_box label="Mode rayons X" name="show_xray"/>
+ </panel>
+ <panel label="Chemin test" name="test_panel">
+ <text name="ctrl_click_label">
+ Ctrl-clic : sélection du point de départ
+ </text>
+ <text name="shift_click_label">
+ Maj-clic : sélection du point d&apos;arrivée
+ </text>
+ <text name="character_width_label">
+ Largeur du personnage
+ </text>
+ <slider name="character_width" value="1"/>
+ <text name="character_width_unit_label">
+ m
+ </text>
+ <text name="character_type_label">
+ Type de personnage
+ </text>
+ <combo_box name="path_character_type">
+ <combo_box.item label="Aucun" name="path_character_type_none"/>
+ <combo_box.item label="A" name="path_character_type_a"/>
+ <combo_box.item label="B" name="path_character_type_b"/>
+ <combo_box.item label="C" name="path_character_type_c"/>
+ <combo_box.item label="D" name="path_character_type_d"/>
+ </combo_box>
+ <button label="Effacer le chemin" name="clear_path"/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/fr/floater_pathfinding_linksets.xml
new file mode 100644
index 0000000000..3abddd54ce
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_pathfinding_linksets.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_pathfinding_linksets" title="Groupes de liens de recherche de chemin">
+ <floater.string name="messaging_get_inprogress">
+ Requête relative aux groupes de liens de recherche de chemin en cours...
+ </floater.string>
+ <floater.string name="messaging_get_error">
+ Erreur lors de la requête relative aux groupes de liens de recherche de chemin.
+ </floater.string>
+ <floater.string name="messaging_set_inprogress">
+ Modification des groupes de liens de recherche de chemin sélectionnés...
+ </floater.string>
+ <floater.string name="messaging_set_error">
+ Erreur lors de la modification des groupes de liens de recherche de chemin sélectionnés.
+ </floater.string>
+ <floater.string name="messaging_complete_none_found">
+ Aucun groupe de liens de recherche de chemin.
+ </floater.string>
+ <floater.string name="messaging_complete_available">
+ [NUM_SELECTED] groupes de liens sélectionnés sur [NUM_TOTAL].
+ </floater.string>
+ <floater.string name="messaging_not_enabled">
+ La recherche de chemin n&apos;a pas été activée pour cette région.
+ </floater.string>
+ <floater.string name="linkset_terrain_name">
+ [Terrain]
+ </floater.string>
+ <floater.string name="linkset_terrain_description">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_owner">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_land_impact">
+ --
+ </floater.string>
+ <floater.string name="linkset_terrain_dist_from_you">
+ --
+ </floater.string>
+ <floater.string name="linkset_owner_loading">
+ [Chargement]
+ </floater.string>
+ <floater.string name="linkset_owner_unknown">
+ [Inconnu]
+ </floater.string>
+ <floater.string name="linkset_owner_group">
+ [Groupe]
+ </floater.string>
+ <floater.string name="linkset_use_walkable">
+ Marche possible
+ </floater.string>
+ <floater.string name="linkset_use_static_obstacle">
+ Obstacle statique
+ </floater.string>
+ <floater.string name="linkset_use_dynamic_obstacle">
+ Obstacle mobile
+ </floater.string>
+ <floater.string name="linkset_use_material_volume">
+ Volume de matériau
+ </floater.string>
+ <floater.string name="linkset_use_exclusion_volume">
+ Volume d&apos;exclusion
+ </floater.string>
+ <floater.string name="linkset_use_dynamic_phantom">
+ Fantôme mobile
+ </floater.string>
+ <floater.string name="linkset_is_terrain">
+ [Non modifiable]
+ </floater.string>
+ <floater.string name="linkset_is_restricted_state">
+ [Restriction]
+ </floater.string>
+ <floater.string name="linkset_is_non_volume_state">
+ [Concave]
+ </floater.string>
+ <floater.string name="linkset_is_restricted_non_volume_state">
+ [Restriction,Concave]
+ </floater.string>
+ <floater.string name="linkset_choose_use">
+ Choisir un usage de groupe de liens...
+ </floater.string>
+ <panel>
+ <combo_box name="filter_by_linkset_use">
+ <combo_box.item label="Filtrer par usage..." name="filter_by_linkset_use_none"/>
+ <combo_box.item label="Marche possible" name="filter_by_linkset_use_walkable"/>
+ <combo_box.item label="Obstacle statique" name="filter_by_linkset_use_static_obstacle"/>
+ <combo_box.item label="Obstacle mobile" name="filter_by_linkset_use_dynamic_obstacle"/>
+ <combo_box.item label="Volume de matériau" name="filter_by_linkset_use_material_volume"/>
+ <combo_box.item label="Volume d&apos;exclusion" name="filter_by_linkset_use_exclusion_volume"/>
+ <combo_box.item label="Fantôme mobile" name="filter_by_linkset_use_dynamic_phantom"/>
+ </combo_box>
+ <button label="Appliquer" name="apply_filters"/>
+ <button label="Effacer" name="clear_filters"/>
+ <scroll_list name="objects_scroll_list">
+ <scroll_list.columns label="Nom (prim racine)" name="name"/>
+ <scroll_list.columns label="Description (prim racine)" name="description"/>
+ <scroll_list.columns label="Propriétaire" name="owner"/>
+ <scroll_list.columns label="Impact" name="land_impact"/>
+ <scroll_list.columns label="Distance" name="dist_from_you"/>
+ <scroll_list.columns label="Usage du groupe de liens" name="linkset_use"/>
+ <scroll_list.columns label="% A" name="a_percent"/>
+ <scroll_list.columns label="% B" name="b_percent"/>
+ <scroll_list.columns label="% C" name="c_percent"/>
+ <scroll_list.columns label="% D" name="d_percent"/>
+ </scroll_list>
+ <text name="messaging_status">
+ Groupes de liens :
+ </text>
+ <button label="Actualiser" name="refresh_objects_list"/>
+ <button label="Tout sélectionner" name="select_all_objects"/>
+ <button label="Ne rien sélectionner" name="select_none_objects"/>
+ </panel>
+ <panel>
+ <check_box label="Afficher la balise" name="show_beacon"/>
+ <button label="Prendre" name="take_objects"/>
+ <button label="Prendre une copie" name="take_copy_objects"/>
+ <button label="M&apos;y téléporter" name="teleport_me_to_object"/>
+ <button label="Renvoyer" name="return_objects"/>
+ <button label="Supprimer" name="delete_objects"/>
+ </panel>
+ <panel>
+ <text name="walkability_coefficients_label">
+ Marche possible :
+ </text>
+ <text name="edit_a_label">
+ A
+ </text>
+ <line_editor name="edit_a_value" tool_tip="Marche possible pour les personnages de type A. Exemple de type de personnage : humanoïde."/>
+ <text name="edit_b_label">
+ B
+ </text>
+ <line_editor name="edit_b_value" tool_tip="Marche possible pour les personnages de type B. Exemple de type de personnage : créature."/>
+ <text name="edit_c_label">
+ C
+ </text>
+ <line_editor name="edit_c_value" tool_tip="Marche possible pour les personnages de type C. Exemple de type de personnage : mécanique."/>
+ <text name="edit_d_label">
+ D
+ </text>
+ <line_editor name="edit_d_value" tool_tip="Marche possible pour les personnages de type D. Exemple de type de personnage : autre."/>
+ <button label="Appliquer les changements" name="apply_edit_values"/>
+ <text name="suggested_use_a_label">
+ (Humanoïde)
+ </text>
+ <text name="suggested_use_b_label">
+ (Créature)
+ </text>
+ <text name="suggested_use_c_label">
+ (Mécanique)
+ </text>
+ <text name="suggested_use_d_label">
+ (Autre)
+ </text>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml
deleted file mode 100644
index e65dfb09b4..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_postcard.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="ENVOYER LA PHOTO PAR E-MAIL">
- <text name="to_label">
- E-mail du destinataire :
- </text>
- <text name="from_label">
- Votre e-mail :
- </text>
- <text name="name_label">
- Votre nom :
- </text>
- <text name="subject_label">
- Objet :
- </text>
- <line_editor label="Saisir ici votre objet" name="subject_form"/>
- <text name="msg_label">
- Message :
- </text>
- <text_editor name="msg_form">
- Saisir ici votre message
- </text_editor>
- <text name="fine_print">
- Si le destinataire s&apos;inscrit sur [SECOND_LIFE], vous recevrez un bonus.
- </text>
- <button label="Annuler" name="cancel_btn"/>
- <button label="Envoyer" name="send_btn"/>
- <string name="default_subject">
- Carte postale de [SECOND_LIFE].
- </string>
- <string name="default_message">
- Ouvrez-moi !
- </string>
- <string name="upload_message">
- Envoi en cours...
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_spellcheck.xml b/indra/newview/skins/default/xui/fr/floater_spellcheck.xml
new file mode 100644
index 0000000000..077ce25828
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_spellcheck.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="spellcheck_floater" title="Paramètres du vérificateur orthographique">
+ <check_box label="Activer le vérificateur orthographique" name="spellcheck_enable"/>
+ <text name="spellcheck_main">
+ Dictionnaire principal :
+ </text>
+ <text label="Journaux :" name="spellcheck_additional">
+ Dictionnaires supplémentaires :
+ </text>
+ <text name="spellcheck_available">
+ Disponibles
+ </text>
+ <text name="spellcheck_active">
+ Actifs
+ </text>
+ <button label="Supprimer" name="spellcheck_remove_btn"/>
+ <button label="Importer..." name="spellcheck_import_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/fr/floater_spellcheck_import.xml
new file mode 100644
index 0000000000..c8c76c672d
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_spellcheck_import.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="spellcheck_import" title="Importation d&apos;un dictionnaire">
+ <button label="Parcourir" label_selected="Parcourir" name="dictionary_path_browse"/>
+ <button label="Importer" name="ok_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml
index 56fa062d46..d6bd187956 100644
--- a/indra/newview/skins/default/xui/fr/floater_stats.xml
+++ b/indra/newview/skins/default/xui/fr/floater_stats.xml
@@ -53,7 +53,13 @@
<stat_bar label="Objets" name="simobjects"/>
<stat_bar label="Objets actifs" name="simactiveobjects"/>
<stat_bar label="Scripts actifs" name="simactivescripts"/>
+ <stat_bar label="Scripts exécutés" name="simpctscriptsrun"/>
<stat_bar label="Événements de scripts" name="simscripteps"/>
+ <stat_view label="Recherche de chemin" name="simpathfinding">
+ <stat_bar label="Durée de l&apos;étape IA" name="simsimaistepmsec"/>
+ <stat_bar label="Étapes de silhouette ignorées" name="simsimskippedsilhouettesteps"/>
+ <stat_bar label="Personnages mis à jour" name="simsimpctsteppedcharacters"/>
+ </stat_view>
<stat_bar label="Paquets en entrée" name="siminpps"/>
<stat_bar label="Paquets en sortie" name="simoutpps"/>
<stat_bar label="Téléchargements en attente" name="simpendingdownloads"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
index ca0fbd3589..43397c2acd 100644
--- a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
@@ -20,6 +20,8 @@
<button label="Vierge" label_selected="Vierge" name="Blank" width="60"/>
<button label="Aucune" label_selected="Aucune" left="68" name="None" width="60"/>
<button bottom="-240" label="" label_selected="" name="Pipette"/>
+ <check_box initial_value="true" label="Aperçu en direct" name="apply_immediate_check"/>
+ <text name="preview_disabled" value="Aperçu désactivé"/>
<filter_editor label="Filtrer les textures" name="inventory search editor"/>
<check_box initial_value="false" label="Afficher les dossiers" name="show_folders_check"/>
<button label="Ajouter" label_selected="Ajouter" name="l_add_btn"/>
@@ -31,5 +33,4 @@
</scroll_list>
<button label="OK" label_selected="OK" name="Select"/>
<button label="Annuler" label_selected="Annuler" name="Cancel"/>
- <check_box initial_value="true" label="Appliquer maintenant" name="apply_immediate_check"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 9643c51fb3..bcc3423862 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -148,6 +148,12 @@
<panel.string name="text modify info 4">
Vous ne pouvez pas modifier ces objets
</panel.string>
+ <panel.string name="text modify info 5">
+ Impossible de modifier cet objet au-delà de la frontière d&apos;une région
+ </panel.string>
+ <panel.string name="text modify info 6">
+ Impossible de modifier ces objets au-delà de la frontière d&apos;une région
+ </panel.string>
<panel.string name="text modify warning">
Sélectionnez l&apos;objet en entier
</panel.string>
@@ -197,12 +203,12 @@
<combo_box.item label="Zoomer" name="Zoom"/>
</combo_box>
<check_box label="À vendre :" name="checkbox for sale"/>
+ <spinner label="L$" name="Edit Cost"/>
<combo_box name="sale type">
<combo_box.item label="Copie" name="Copy"/>
<combo_box.item label="Contenus" name="Contents"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
- <spinner label="Prix : L$" name="Edit Cost"/>
<check_box label="Afficher dans la recherche" name="search_check" tool_tip="Afficher l&apos;objet dans les résultats de recherche"/>
<panel name="perms_build">
<text name="perm_modify">
@@ -238,6 +244,11 @@
F :
</text>
</panel>
+ <panel name="pathfinding_attrs_panel">
+ <text name="pathfinding_attributes_label">
+ Attributs de recherche de chemin :
+ </text>
+ </panel>
</panel>
<panel label="Objet" name="Object">
<check_box label="Verrouillé" name="checkbox locked" tool_tip="Empêche l&apos;objet d&apos;être déplacé ou supprimé. Utile pendant la construction pour éviter les modifications involontaires."/>
diff --git a/indra/newview/skins/default/xui/fr/floater_top_objects.xml b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
index b40d585310..aeeb462ac6 100644
--- a/indra/newview/skins/default/xui/fr/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
@@ -9,9 +9,6 @@
<floater.string name="scripts_score_label">
Temps
</floater.string>
- <floater.string name="scripts_mono_time_label">
- Temps Mono
- </floater.string>
<floater.string name="top_colliders_title">
Collisions les plus consommatrices
</floater.string>
@@ -32,9 +29,10 @@
<scroll_list.columns label="Nom" name="name"/>
<scroll_list.columns label="Propriétaire" name="owner"/>
<scroll_list.columns label="Lieu" name="location"/>
+ <scroll_list.columns label="Parcelle" name="parcel"/>
<scroll_list.columns label="Temps" name="time"/>
- <scroll_list.columns label="Temps Mono" name="mono_time"/>
<scroll_list.columns label="URL" name="URLs"/>
+ <scroll_list.columns label="Mémoire (Ko)" name="memory"/>
</scroll_list>
<text name="id_text">
ID de l&apos;objet :
@@ -48,6 +46,10 @@
Propriétaire :
</text>
<button label="Filtre" name="filter_owner_btn"/>
+ <text name="parcel_name_text">
+ Parcelle :
+ </text>
+ <button label="Filtrer" name="filter_parcel_btn"/>
<button label="Rafraîchir" name="refresh_btn"/>
<button label="Renvoyer" name="return_selected_btn"/>
<button label="Tout renvoyer" name="return_all_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_bottomtray.xml b/indra/newview/skins/default/xui/fr/menu_bottomtray.xml
deleted file mode 100644
index d0d245b286..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_bottomtray.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="hide_camera_move_controls_menu">
- <menu_item_check label="Bouton Parler" name="EnableVoiceChat"/>
- <menu_item_check label="Bouton Geste" name="ShowGestureButton"/>
- <menu_item_check label="Bouton Bouger" name="ShowMoveButton"/>
- <menu_item_check label="Bouton Affichage" name="ShowCameraButton"/>
- <menu_item_check label="Bouton Photo" name="ShowSnapshotButton"/>
- <menu_item_check label="Bouton Construire" name="ShowBuildButton"/>
- <menu_item_check label="Bouton Rechercher" name="ShowSearchButton"/>
- <menu_item_check label="Bouton Carte" name="ShowWorldMapButton"/>
- <menu_item_check label="Bouton Mini-carte" name="ShowMiniMapButton"/>
- <menu_item_call label="Couper" name="NearbyChatBar_Cut"/>
- <menu_item_call label="Copier" name="NearbyChatBar_Copy"/>
- <menu_item_call label="Coller" name="NearbyChatBar_Paste"/>
- <menu_item_call label="Supprimer" name="NearbyChatBar_Delete"/>
- <menu_item_call label="Tout sélectionner" name="NearbyChatBar_Select_All"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_mode_change.xml b/indra/newview/skins/default/xui/fr/menu_mode_change.xml
deleted file mode 100644
index 982a331c5b..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_mode_change.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Mode Change">
- <menu_item_check label="Basique" name="BasicMode"/>
- <menu_item_check label="Avancé" name="AdvancedMode"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml
index c6db48a31c..573b6da582 100644
--- a/indra/newview/skins/default/xui/fr/menu_object.xml
+++ b/indra/newview/skins/default/xui/fr/menu_object.xml
@@ -5,6 +5,8 @@
</menu_item_call>
<menu_item_call label="Modifier" name="Edit..."/>
<menu_item_call label="Construire" name="Build"/>
+ <menu_item_call label="Voir parmi les groupes de liens" name="show_in_linksets"/>
+ <menu_item_call label="Voir parmi les personnages" name="show_in_characters"/>
<menu_item_call label="Ouvrir" name="Open"/>
<menu_item_call label="M&apos;asseoir ici" name="Object Sit"/>
<menu_item_call label="Me lever" name="Object Stand Up"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_text_editor.xml b/indra/newview/skins/default/xui/fr/menu_text_editor.xml
index b6f429aec9..c31b0c8556 100644
--- a/indra/newview/skins/default/xui/fr/menu_text_editor.xml
+++ b/indra/newview/skins/default/xui/fr/menu_text_editor.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Text editor context menu">
+ <menu_item_call label="(inconnu)" name="Suggestion 1"/>
+ <menu_item_call label="(inconnu)" name="Suggestion 2"/>
+ <menu_item_call label="(inconnu)" name="Suggestion 3"/>
+ <menu_item_call label="(inconnu)" name="Suggestion 4"/>
+ <menu_item_call label="(inconnu)" name="Suggestion 5"/>
+ <menu_item_call label="Ajouter au dictionnaire" name="Add to Dictionary"/>
+ <menu_item_call label="Ajouter aux éléments à ignorer" name="Add to Ignore"/>
<menu_item_call label="Couper" name="Cut"/>
<menu_item_call label="Copier" name="Copy"/>
<menu_item_call label="Coller" name="Paste"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 346b6ec2c7..3982a6159f 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -28,6 +28,7 @@
<menu_item_call label="Préférences..." name="Preferences"/>
<menu_item_call label="Boutons des barres d&apos;outils..." name="Toolbars"/>
<menu_item_call label="Masquer tous les contrôles" name="Hide UI"/>
+ <menu_item_check label="Afficher les éléments HUD" name="Show HUD Attachments"/>
<menu_item_call label="Quitter [APP_NAME]" name="Quit"/>
</menu>
<menu label="Communiquer" name="Communicate">
@@ -39,6 +40,7 @@
<menu_item_call label="Amis" name="My Friends"/>
<menu_item_call label="Groupes" name="My Groups"/>
<menu_item_call label="Personnes près de vous" name="Active Speakers"/>
+ <menu_item_call label="Liste des ignorés" name="Block List"/>
</menu>
<menu label="Monde" name="World">
<menu_item_call label="Créer un repère pour ce lieu" name="Create Landmark Here"/>
@@ -124,6 +126,11 @@
<menu_item_call label="Définir les scripts sur Exécution" name="Set Scripts to Running"/>
<menu_item_call label="Définir les scripts sur Pas d&apos;exécution" name="Set Scripts to Not Running"/>
</menu>
+ <menu label="Recherche de chemin" name="Pathfinding">
+ <menu_item_call label="Groupes de liens..." name="pathfinding_linksets_menu_item"/>
+ <menu_item_call label="Personnages..." name="pathfinding_characters_menu_item"/>
+ <menu_item_call label="Vue / test..." name="pathfinding_console_menu_item"/>
+ </menu>
<menu label="Options" name="Options">
<menu_item_check label="Afficher les droits avancés" name="DebugPermissions"/>
<menu_item_check label="Sélectionner mes objets uniquement" name="Select Only My Objects"/>
@@ -174,7 +181,6 @@
<menu_item_check label="Masquer les particules" name="Hide Particles"/>
<menu_item_check label="Masquer la sélection" name="Hide Selected"/>
<menu_item_check label="Mettre la transparence en surbrillance" name="Highlight Transparent"/>
- <menu_item_check label="Afficher les éléments HUD" name="Show HUD Attachments"/>
<menu_item_check label="Afficher le réticule de la vue subjective" name="ShowCrosshairs"/>
</menu>
<menu label="Types de rendu" name="Rendering Types">
@@ -377,7 +383,6 @@
<menu_item_call label="Basculer la géométrie des personnages" name="Toggle Character Geometry"/>
<menu_item_call label="Test homme" name="Test Male"/>
<menu_item_call label="Test femme" name="Test Female"/>
- <menu_item_call label="Activer/désactiver PG" name="Toggle PG"/>
<menu_item_check label="Autoriser la sélection de l&apos;avatar" name="Allow Select Avatar"/>
</menu>
<menu_item_call label="Forcer les paramètres par défaut" name="Force Params to Default"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 729c06b50f..bb23a1063d 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -37,6 +37,12 @@
<button name="Help" text="$helptext"/>
</form>
</template>
+ <template name="okhelpignore">
+ <form>
+ <button name="OK_okhelpignore" text="$yestext"/>
+ <button name="Help_okhelpignore" text="$helptext"/>
+ </form>
+ </template>
<template name="yesnocancelbuttons">
<form>
<button name="Yes" text="$yestext"/>
@@ -359,13 +365,19 @@ Vous devez saisir le nom d&apos;utilisateur de votre avatar.
Pour entrer dans [SECOND_LIFE], vous devez disposer d&apos;un compte. Voulez-vous en créer un maintenant ?
<url name="url">
- https://join.secondlife.com/index.php?lang=fr-FR
+ [create_account_url]
</url>
<usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/>
</notification>
<notification name="InvalidCredentialFormat">
Saisissez soit le nom d&apos;utilisateur soit à la fois le prénom et le nom de votre avatar dans le champ Nom d&apos;utilisateur, puis connectez-vous.
</notification>
+ <notification name="InvalidGrid">
+ [GRID] n&apos;est pas un identifiant de grille valide.
+ </notification>
+ <notification name="InvalidLocationSLURL">
+ Grille non valide spécifiée au niveau du lieu de départ.
+ </notification>
<notification name="DeleteClassified">
Supprimer l&apos;annonce [NAME] ?
Une fois payés, les frais ne sont pas remboursables.
@@ -472,7 +484,7 @@ L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
</notification>
<notification name="StartRegionEmpty">
Vous n&apos;avez pas défini de région de départ.
-Veuillez saisir le nom de la région dans la case Lieu de départ, ou choisissez Dernier emplacement ou Domicile comme Lieu de départ.
+Saisissez le nom de la région voulue dans la case Lieu de départ ou choisissez Dernier emplacement ou Domicile comme lieu de départ.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CouldNotStartStopScript">
@@ -599,6 +611,9 @@ Vous pouvez lier un maximum de [MAX] objets.
Assurez-vous que vous êtes le propriétaire de tous les objets et qu&apos;aucun d&apos;eux n&apos;est verrouillé.
</notification>
+ <notification name="CannotLinkPermanent">
+ Impossible de lier des objets d&apos;une région à une autre.
+ </notification>
<notification name="CannotLinkDifferentOwners">
Impossible de lier car les objets n&apos;ont pas tous le même propriétaire.
@@ -979,6 +994,41 @@ Proposer à [NAME] de devenir votre ami(e) ?
<button name="Cancel" text="Annuler"/>
</form>
</notification>
+ <notification label="Ajouter une liste Rechercher/Remplacer" name="AddAutoReplaceList">
+ Nom de la nouvelle liste :
+ <form name="form">
+ <button name="SetName" text="OK"/>
+ </form>
+ </notification>
+ <notification label="Renommer la liste Rechercher/Remplacer" name="RenameAutoReplaceList">
+ Le nom [DUPNAME] est déjà utilisé.
+ Saisissez un nouveau nom unique :
+ <form name="form">
+ <button name="ReplaceList" text="Remplacer la liste actuelle"/>
+ <button name="SetName" text="Utiliser le nouveau nom"/>
+ </form>
+ </notification>
+ <notification name="InvalidAutoReplaceEntry">
+ Le mot-clé doit être constitué d&apos;un seul mot et sa valeur de remplacement doit être renseignée.
+ </notification>
+ <notification name="InvalidAutoReplaceList">
+ Liste de remplacement non valide.
+ </notification>
+ <notification name="SpellingDictImportRequired">
+ Spécifiez un fichier, un nom et une langue.
+ </notification>
+ <notification name="SpellingDictIsSecondary">
+ Le dictionnaire [DIC_NAME] ne semble pas contenir de fichier &quot;aff&quot; ; il s&apos;agit donc d&apos;un dictionnaire « secondaire ».
+Vous pouvez l&apos;utiliser comme dictionnaire supplémentaire mais pas comme dictionnaire principal.
+
+Voir https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries
+ </notification>
+ <notification name="SpellingDictImportFailed">
+ Impossible de copier
+ [FROM_NAME]
+ vers
+ [TO_NAME]
+ </notification>
<notification label="Enregistrer la tenue" name="SaveOutfitAs">
Enregistrer ce que je porte comme nouvelle tenue :
<form name="form">
@@ -1171,7 +1221,6 @@ Vous pouvez utiliser [SECOND_LIFE] normalement, les autres résidents vous voien
L&apos;installation de [APP_NAME] est terminée.
Si vous utilisez [SECOND_LIFE] pour la première fois, vous devez ouvrir un compte avant de pouvoir vous connecter.
-Retourner sur [http://join.secondlife.com secondlife.com] pour ouvrir un nouveau compte ?
<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Nouveau compte..."/>
</notification>
<notification name="LoginPacketNeverReceived">
@@ -1693,83 +1742,128 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="RegionEntryAccessBlocked">
- Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+ La région que vous essayez de visiter comporte du contenu dont le niveau dépasse celui de vos préférences actuelles. Vous pouvez modifier vos préférences en accédant à Moi &gt; Préférences &gt; Général.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="RegionEntryAccessBlocked_KB">
- Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+ <notification name="RegionEntryAccessBlocked_AdultsOnlyContent">
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] uniquement accessible aux adultes.
<url name="url">
- http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/fr
+ http://community.secondlife.com/t5/Base-de-connaissances/Cat%C3%A9gories-niveaux-de-contenu/ta-p/700311
</url>
- <usetemplate ignoretext="Je ne peux pas pénétrer dans cette région car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+ <usetemplate ignoretext="Passage à une autre région : la région que vous essayez de visiter comporte du contenu uniquement accessible aux adultes." name="okcancelignore" notext="Fermer" yestext="Accéder à la Base de connaissances"/>
</notification>
<notification name="RegionEntryAccessBlocked_Notify">
- Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY].
+ </notification>
+ <notification name="RegionEntryAccessBlocked_NotifyAdultsOnly">
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] uniquement accessible aux adultes.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- La catégorie de contenu définie dans vos préférences ne vous permet pas de pénétrer dans cette région.
-
-Pour cela, vous devez modifier votre paramètre de catégorie de contenu. Vous pourrez alors rechercher du contenu [REGIONMATURITY] et y accéder. Pour annuler vos modifications, accédez à Moi &gt; Préférences &gt; Général.
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY]. Il est possible de modifier vos préférences ou d&apos;annuler l&apos;action. Une fois vos préférences modifiées, vous pouvez réessayer d&apos;accéder à la région.
<form name="form">
<button name="OK" text="Modifier les préférences"/>
- <button default="true" name="Cancel" text="Fermer"/>
- <ignore name="ignore" text="La catégorie de contenu que j&apos;ai choisie m&apos;empêche de pénétrer dans une région"/>
+ <button default="true" name="Cancel" text="Annuler"/>
+ <ignore name="ignore" text="Passage à une autre région : la région que vous essayez de visiter comporte du contenu dont le niveau est exclu de vos préférences actuelles."/>
</form>
</notification>
+ <notification name="RegionEntryAccessBlocked_PreferencesOutOfSync">
+ Nous rencontrons des difficultés techniques au niveau de votre téléportation car vos préférences ne sont pas synchronisées avec le serveur.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked">
+ La région que vous essayez de visiter comporte du contenu dont le niveau dépasse celui de vos préférences actuelles. Vous pouvez modifier vos préférences en accédant à Moi &gt; Préférences &gt; Général.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_AdultsOnlyContent">
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] uniquement accessible aux adultes.
+ <url name="url">
+ http://community.secondlife.com/t5/Base-de-connaissances/Cat%C3%A9gories-niveaux-de-contenu/ta-p/700311
+ </url>
+ <usetemplate ignoretext="Téléportation : la région que vous essayez de visiter comporte du contenu uniquement accessible aux adultes." name="okcancelignore" notext="Fermer" yestext="Accéder à la Base de connaissances"/>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_Notify">
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY].
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_NotifyAdultsOnly">
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] uniquement accessible aux adultes.
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_ChangeAndReTeleport">
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY]. Il est possible de modifier vos préférences afin de poursuivre la téléportation ou d&apos;annuler la téléportation.
+ <form name="form">
+ <button name="OK" text="Modifier et continuer"/>
+ <button name="Cancel" text="Annuler"/>
+ <ignore name="ignore" text="Téléportation (redémarrage possible) : la région que vous essayez de visiter comporte du contenu dont le niveau est exclu de vos préférences."/>
+ </form>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_Change">
+ La région que vous essayez de visiter comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY]. Il est possible de modifier vos préférences ou d&apos;annuler la téléportation. Une fois vos préférences modifiées, vous devrez réessayer de vous téléporter.
+ <form name="form">
+ <button name="OK" text="Modifier les préférences"/>
+ <button name="Cancel" text="Annuler"/>
+ <ignore name="ignore" text="Téléportation (redémarrage impossible) : la région que vous essayez de visiter comporte du contenu dont le niveau est exclu de vos préférences."/>
+ </form>
+ </notification>
+ <notification name="TeleportEntryAccessBlocked_PreferencesOutOfSync">
+ Nous rencontrons des difficultés techniques au niveau de votre téléportation car vos préférences ne sont pas synchronisées avec le serveur.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="PreferredMaturityChanged">
- Votre préférence de catégorie de contenu est désormais [RATING].
+ Aucune autre notification vous informant que vous allez visiter une région au contenu [RATING] ne vous sera envoyée. Vous pouvez modifier vos préférences de contenu à l&apos;avenir en accédant à Moi &gt; Préférences &gt; Général, à partir de la barre de menus.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="MaturityChangeError">
+ Impossible de modifier vos préférences afin d&apos;afficher le contenu [PREFERRED_MATURITY] à l&apos;heure actuelle. Le paramètre [ACTUAL_MATURITY] a été rétabli. Vous pouvez réessayer de modifier vos préférences en accédant à Moi &gt; Préférences &gt; Général, à partir de la barre de menus.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LandClaimAccessBlocked">
- Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+ Le niveau de contenu du terrain que vous essayez de revendiquer dépasse celui défini dans vos préférences actuelles. Vous pouvez modifier vos préférences en accédant à Moi &gt; Préférences &gt; Général.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="LandClaimAccessBlocked_KB">
- Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+ <notification name="LandClaimAccessBlocked_AdultsOnlyContent">
+ Seuls les adultes sont autorisés à revendiquer ce terrain.
<url name="url">
- http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/fr
+ http://community.secondlife.com/t5/Base-de-connaissances/Cat%C3%A9gories-niveaux-de-contenu/ta-p/700311
</url>
- <usetemplate ignoretext="Je ne peux pas réclamer cette région car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+ <usetemplate ignoretext="Seuls les adultes sont autorisés à revendiquer ce terrain." name="okcancelignore" notext="Fermer" yestext="Accéder à la Base de connaissances"/>
</notification>
<notification name="LandClaimAccessBlocked_Notify">
- Votre catégorie d&apos;accès ne vous autorise pas à réclamer cette région.
+ Le terrain que vous essayez de revendiquer comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY].
+ </notification>
+ <notification name="LandClaimAccessBlocked_NotifyAdultsOnly">
+ Le terrain que vous essayez de revendiquer comporte du contenu [REGIONMATURITY] uniquement accessible aux adultes.
</notification>
<notification name="LandClaimAccessBlocked_Change">
- Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Moi &gt; Préférences &gt; Général.
- <usetemplate ignoretext="La catégorie de contenu que j&apos;ai choisie m&apos;empêche de réclamer un terrain" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
+ Le terrain que vous essayez de revendiquer comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY]. Il est possible de modifier vos préférences, puis d&apos;essayer de revendiquer ce terrain à nouveau.
+ <form name="form">
+ <button name="OK" text="Modifier les préférences"/>
+ <button name="Cancel" text="Annuler"/>
+ <ignore name="ignore" text="Le terrain que vous essayez de revendiquer comporte du contenu dont le niveau est exclu de vos préférences."/>
+ </form>
</notification>
<notification name="LandBuyAccessBlocked">
- Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+ Le niveau de contenu du terrain que vous essayez d&apos;acheter dépasse celui défini dans vos préférences actuelles. Vous pouvez modifier vos préférences en accédant à Moi &gt; Préférences &gt; Général.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="LandBuyAccessBlocked_KB">
- Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+ <notification name="LandBuyAccessBlocked_AdultsOnlyContent">
+ Seuls les adultes sont autorisés à acheter ce terrain.
<url name="url">
- http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/fr
+ http://community.secondlife.com/t5/Base-de-connaissances/Cat%C3%A9gories-niveaux-de-contenu/ta-p/700311
</url>
- <usetemplate ignoretext="Je ne peux pas acheter ce terrain car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+ <usetemplate ignoretext="Seuls les adultes sont autorisés à acheter ce terrain." name="okcancelignore" notext="Fermer" yestext="Accéder à la Base de connaissances"/>
</notification>
<notification name="LandBuyAccessBlocked_Notify">
- Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
+ Le terrain que vous essayez d&apos;acheter comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY].
+ </notification>
+ <notification name="LandBuyAccessBlocked_NotifyAdultsOnly">
+ Le terrain que vous essayez d&apos;acheter comporte du contenu [REGIONMATURITY] uniquement accessible aux adultes.
</notification>
<notification name="LandBuyAccessBlocked_Change">
- Votre catégorie d&apos;accès ne vous autorise pas à acheter cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Moi &gt; Préférences &gt; Général.
- <usetemplate ignoretext="La catégorie de contenu que j&apos;ai choisie m&apos;empêche d&apos;acheter un terrain" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
+ Le terrain que vous essayez d&apos;acheter comporte du contenu [REGIONMATURITY] alors que les préférences que vous avez définies excluent tout contenu [REGIONMATURITY]. Il est possible de modifier vos préférences, puis d&apos;essayer d&apos;acheter ce terrain à nouveau.
+ <form name="form">
+ <button name="OK" text="Modifier les préférences"/>
+ <button name="Cancel" text="Annuler"/>
+ <ignore name="ignore" text="Le terrain que vous essayez d&apos;acheter comporte du contenu dont le niveau est exclu de vos préférences."/>
+ </form>
</notification>
<notification name="TooManyPrimsSelected">
Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer.
@@ -1824,10 +1918,9 @@ Publier cette petite annonce maintenant pour [AMOUNT] L$ ?
</form>
</notification>
<notification label="Catégorie de la région modifiée" name="RegionMaturityChange">
- Le niveau de maturité de cette région a été mis à jour.
-Ce changement n&apos;apparaîtra pas immédiatement sur la carte.
-
-Pour entrer dans les régions Adultes, le résident doit avoir vérifié son compte, que ce soit par vérification de l&apos;âge ou du mode de paiement.
+ Le niveau de contenu de cette région a changé.
+Il se peut que l&apos;affichage de cette modification sur la carte prenne quelque temps.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification label="Versions de voix non compatibles" name="VoiceVersionMismatch">
Cette version de [APP_NAME] n&apos;est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour [APP_NAME] pour que le chat vocal fonctionne correctement.
@@ -2117,14 +2210,11 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
<usetemplate ignoretext="Porter automatiquement tout en modifiant mon apparence" name="okcancelignore" notext="Non" yestext="Oui"/>
</notification>
<notification name="NotAgeVerified">
- Vous devez avoir au moins 18 ans pour accéder au contenu et aux zones Adulte dans Second Life. Visitez la page de vérification de l&apos;âge afin de confirmer que vous avez plus de 18 ans.
-Cette opération lancera votre navigateur Web.
-
-[_URL]
- <url name="url" option="0">
- https://secondlife.com/my/account/verification.php
- </url>
- <usetemplate ignoretext="Je n&apos;ai pas procédé à la vérification de mon âge" name="okcancelignore" notext="Annuler" yestext="Accéder à la page de vérification de l&apos;âge"/>
+ L&apos;accès à l&apos;endroit que vous essayez de visiter est limité aux résidents de plus de 18 ans.
+ <usetemplate ignoretext="Je n&apos;ai pas l&apos;âge requis pour visiter les zones d&apos;accès limité en fonction de l&apos;âge." name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="NotAgeVerified_Notify">
+ L&apos;accès à cet endroit est limité aux plus de 18 ans.
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Pour pouvoir pénétrer dans cette zone, vous devez avoir enregistré vos informations de paiement. Souhaitez-vous aller sur [SECOND_LIFE] et enregistrer vos informations de paiement ?
@@ -2386,6 +2476,23 @@ Vous ne pouvez pas voler ici.
<notification name="NoBuild">
La construction est interdite dans cette zone. Vous ne pouvez pas construite ou rezzer d&apos;objets ici.
</notification>
+ <notification name="PathfindingDirty">
+ Des modifications de recherche de chemin sont en attente concernant cette région. Si vous disposez de droits de construction, vous pouvez la figer de nouveau en cliquant sur le bouton Refiger la région.
+ </notification>
+ <notification name="DynamicPathfindingDisabled">
+ La recherche de chemin dynamique n&apos;est pas activée dans cette région. Il se peut que les objets scriptés utilisant des appels LSL de recherche de chemin ne fonctionnent pas comme prévu pour cette région.
+ </notification>
+ <notification name="PathfindingRebakeNavmesh">
+ La modification de certains objets de cette région risque d&apos;entraîner un comportement incorrect des autres objets mobiles. Pour que les objets mobiles se comportent correctement, cliquez sur Refiger la région. Pour plus d&apos;informations, choisissez Aide.
+ <url name="url">
+ http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
+ </url>
+ <usetemplate helptext="Aide" ignoretext="La modification de certains objets de cette région risque d&apos;entraîner un comportement incorrect des autres objets mobiles." name="okhelpignore" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingCannotRebakeNavmesh">
+ Une erreur est survenue. Un problème réseau ou serveur s&apos;est peut-être produit ou vous ne disposez pas de droits de construction. Se déconnecter puis se reconnecter permet parfois de résoudre le problème.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="SeeAvatars">
Cette parcelle masque les avatars et le chat écrit des autres parcelles. Vous ne pouvez pas voir les résidents qui se trouvent en dehors, et ceux qui se trouvent en dehors ne peuvent pas vous voir. Le chat écrit habituel sur le canal 0 est également bloqué.
</notification>
@@ -2404,9 +2511,7 @@ Aucun script ne marche ici à part ceux du propriétaire du terrain.
Vous ne pouvez réclamer qu&apos;un terrain public dans la région où vous vous trouvez actuellement.
</notification>
<notification name="RegionTPAccessBlocked">
- Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client.
-
-Pour savoir comment accéder aux zones ayant un tel niveau d&apos;accès, veuillez consulter les pages d&apos;aide.
+ La région que vous essayez de visiter comporte du contenu dont le niveau dépasse celui de vos préférences actuelles. Vous pouvez modifier vos préférences en accédant à Moi &gt; Préférences &gt; Général.
</notification>
<notification name="URBannedFromRegion">
Vous avez été banni de cette région.
@@ -2417,11 +2522,11 @@ Pour savoir comment accéder aux zones ayant un tel niveau d&apos;accès, veuill
<notification name="ImproperPaymentStatus">
Vous n&apos;avez pas le statut de paiement approprié pour pénétrer dans cette région.
</notification>
- <notification name="MustGetAgeRgion">
- Pour pouvoir pénétrer dans cette région, vous devez avoir procédé à la vérification de votre âge.
+ <notification name="MustGetAgeRegion">
+ Pour accéder à cette région, vous devez avoir au moins 18 ans.
</notification>
<notification name="MustGetAgeParcel">
- Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge.
+ Pour accéder à cette parcelle, vous devez avoir au moins 18 ans.
</notification>
<notification name="NoDestRegion">
Région de destination introuvable.
@@ -2523,12 +2628,33 @@ Veuillez réessayer dans quelques minutes.
<notification name="TeleportOffered">
[NAME_SLURL] propose de vous téléporter à son emplacement :
-[MESSAGE] - [MATURITY_STR] &lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;
+« [MESSAGE] »
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; - [MATURITY_STR]
<form name="form">
<button name="Teleport" text="Téléporter"/>
<button name="Cancel" text="Annuler"/>
</form>
</notification>
+ <notification name="TeleportOffered_MaturityExceeded">
+ [NAME_SLURL] propose de vous téléporter à son emplacement :
+
+« [MESSAGE] »
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; - [MATURITY_STR]
+
+Cette région comporte du contenu [REGION_CONTENT_MATURITY] alors que vos préférences actuelles excluent tout contenu [REGION_CONTENT_MATURITY]. Il est possible de modifier vos préférences afin de poursuivre la téléportation ou d&apos;annuler la téléportation.
+ <form name="form">
+ <button name="Teleport" text="Modifier et continuer"/>
+ <button name="Cancel" text="Annuler"/>
+ </form>
+ </notification>
+ <notification name="TeleportOffered_MaturityBlocked">
+ [NAME_SLURL] propose de vous téléporter à son emplacement :
+
+« [MESSAGE] »
+&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt; - [MATURITY_STR]
+
+Toutefois, cette région comporte du contenu uniquement accessible aux adultes.
+ </notification>
<notification name="TeleportOfferSent">
Offre de téléportation envoyée à [TO_NAME]
</notification>
@@ -2932,6 +3058,10 @@ Texture figée de [RESOLUTION] chargée pour [BODYREGION] au bout de [TIME] seco
([EXISTENCE] secondes d&apos;existence)
Texture figée de [RESOLUTION] mise à jour localement pour [BODYREGION] au bout de [TIME] secondes.
</notification>
+ <notification name="LivePreviewUnavailable">
+ Impossible d&apos;afficher un aperçu de cette texture car il s&apos;agit d&apos;une texture sans copie et/ou transfert.
+ <usetemplate ignoretext="M&apos;avertir que le mode Aperçu en direct n&apos;est pas disponible pour les textures sans copie et/ou transfert" name="okignore" yestext="OK"/>
+ </notification>
<notification name="ConfirmLeaveCall">
Voulez-vous vraiment quitter cet appel ?
<usetemplate ignoretext="Confirmer avant de quitter l&apos;appel" name="okcancelignore" notext="Non" yestext="Oui"/>
@@ -3103,6 +3233,23 @@ Cliquez sur un point dans le monde et faites glisser votre souris pour faire tou
Cette action masquera tous les boutons et articles de menu. Pour les récupérer, cliquez de nouveau sur [SHORTCUT].
<usetemplate ignoretext="Confirmer avant de masquer l&apos;interface" name="okcancelignore" notext="Annuler" yestext="OK"/>
</notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted">
+ Certains groupes de liens sélectionnés ne peuvent pas être définis sur [REQUESTED_TYPE] en raison des restrictions d&apos;autorisation définies les concernant. Ces groupes de liens seront définis sur [RESTRICTED_TYPE].
+ <usetemplate ignoretext="Certains groupes de liens sélectionnés ne peuvent pas être définis en raison des restrictions d&apos;autorisation les concernant." name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnVolume">
+ Certains groupes de liens sélectionnés ne peuvent pas être définis sur [REQUESTED_TYPE] en raison d&apos;une forme non convexe.
+ <usetemplate ignoretext="Certains groupes de liens sélectionnés ne peuvent pas être définis en raison d&apos;une forme non convexe." name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume">
+ Certains groupes de liens sélectionnés ne peuvent pas être définis sur [REQUESTED_TYPE] en raison des restrictions d&apos;autorisation les concernant. Ces groupes de liens seront définis sur [RESTRICTED_TYPE].
+ Certains groupes de liens sélectionnés ne peuvent pas être définis sur [REQUESTED_TYPE] en raison d&apos;une forme non convexe. Les types d&apos;usage de ces groupes de liens ne seront pas modifiés.
+ <usetemplate ignoretext="Certains groupes de liens sélectionnés ne peuvent pas être définis en raison des restrictions d&apos;autorisation les concernant et d&apos;une forme non convexe." name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="PathfindingLinksets_ChangeToFlexiblePath">
+ L&apos;objet sélectionné affecte le maillage de navigation. Si vous le modifiez en Flexibilité, il sera supprimé de ce maillage.
+ <usetemplate ignoretext="L&apos;objet sélectionné affecte le maillage de navigation. Si vous le modifiez en Flexibilité, il sera supprimé de ce maillage." name="okcancelignore" notext="Annuler" yestext="OK"/>
+ </notification>
<global name="UnsupportedGLRequirements">
Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les pilotes les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d&apos;exploitation.
@@ -3138,4 +3285,12 @@ Désactivation des mises à jour futures de ce fichier...
<notification name="LocalBitmapsVerifyFail">
Tentative d&apos;ajout d&apos;un fichier image [FNAME] non valide ou illisible n&apos;ayant pas pu être ouvert ou décodé. Tentative annulée.
</notification>
+ <notification name="PathfindingReturnMultipleItems">
+ Vous allez renvoyer [NUM_ITEMS] articles. Voulez-vous vraiment continuer ?
+ <usetemplate ignoretext="Voulez-vous vraiment renvoyer plusieurs articles ?" name="okcancelignore" notext="Non" yestext="Oui"/>
+ </notification>
+ <notification name="PathfindingDeleteMultipleItems">
+ Vous allez supprimer [NUM_ITEMS] articles. Voulez-vous vraiment continuer ?
+ <usetemplate ignoretext="Voulez-vous vraiment supprimer plusieurs articles ?" name="okcancelignore" notext="Non" yestext="Oui"/>
+ </notification>
</notifications>
diff --git a/indra/newview/skins/default/xui/fr/panel_bottomtray.xml b/indra/newview/skins/default/xui/fr/panel_bottomtray.xml
deleted file mode 100644
index c4537861e3..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_bottomtray.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="bottom_tray">
- <string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
- <string name="SpeakBtnToolTip" value="Active/Désactive le micro"/>
- <string name="VoiceControlBtnToolTip" value="Affiche/Masque le panneau de contrôle de la voix"/>
- <layout_stack name="toolbar_stack">
- <layout_panel name="speak_panel">
- <talk_button name="talk">
- <speak_button label="Parler" label_selected="Parler" name="speak_btn"/>
- </talk_button>
- </layout_panel>
- <layout_panel name="gesture_panel">
- <gesture_combo_list label="Geste" name="Gesture" tool_tip="Affiche/Masque les gestes"/>
- </layout_panel>
- <layout_panel name="movement_panel">
- <bottomtray_button label="Bouger" name="movement_btn" tool_tip="Affiche/Masque le contrôle des déplacements"/>
- </layout_panel>
- <layout_panel name="cam_panel">
- <bottomtray_button label="Affichage" name="camera_btn" tool_tip="Affiche/Masque le contrôle de la caméra"/>
- </layout_panel>
- <layout_panel name="snapshot_panel">
- <bottomtray_button label="" name="snapshots" tool_tip="Prendre une photo"/>
- </layout_panel>
- <layout_panel name="build_btn_panel">
- <bottomtray_button label="Construire" name="build_btn" tool_tip="Affiche/Masque les outils pour la construction"/>
- </layout_panel>
- <layout_panel name="search_btn_panel">
- <bottomtray_button label="Rechercher" name="search_btn" tool_tip="Affiche/Masque la recherche"/>
- </layout_panel>
- <layout_panel name="world_map_btn_panel">
- <bottomtray_button label="Carte" name="world_map_btn" tool_tip="Affiche/Masque la carte du monde"/>
- </layout_panel>
- <layout_panel name="mini_map_btn_panel">
- <bottomtray_button label="Mini-carte" name="mini_map_btn" tool_tip="Affiche/Masque la mini-carte"/>
- </layout_panel>
- <layout_panel name="im_well_panel">
- <chiclet_im_well name="im_well">
- <button name="Unread IM messages" tool_tip="Conversations"/>
- </chiclet_im_well>
- </layout_panel>
- <layout_panel name="notification_well_panel">
- <chiclet_notification name="notification_well">
- <button name="Unread" tool_tip="Notifications"/>
- </chiclet_notification>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml