summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2012-02-02 10:57:09 -0500
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2012-02-02 10:57:09 -0500
commitb9376ab990707aafb041ef630d321b886bed6128 (patch)
tree75cb218be1507c60d79ed543a13ca6bcae1d6e54
parentb0d94fa706efd7794b4ba5b9160ddcfc33233ca4 (diff)
parent0e609cc95b08c28bd51f5ab48160fd93df7a6b28 (diff)
merge
-rw-r--r--.hgtags14
-rw-r--r--doc/contributions.txt3
-rw-r--r--indra/llaudio/llaudioengine.cpp23
-rw-r--r--indra/llaudio/llaudioengine.h1
-rw-r--r--indra/llcommon/llqueuedthread.cpp4
-rw-r--r--indra/llcommon/llqueuedthread.h4
-rw-r--r--indra/llcommon/llsys.cpp18
-rw-r--r--indra/llcommon/llthread.cpp15
-rw-r--r--indra/llcommon/llthread.h1
-rw-r--r--indra/llcommon/llversionviewer.h2
-rw-r--r--indra/llcommon/llworkerthread.cpp2
-rw-r--r--indra/llcommon/llworkerthread.h2
-rw-r--r--indra/llimage/llimageworker.cpp2
-rw-r--r--indra/llimage/llimageworker.h2
-rw-r--r--indra/llmath/lloctree.h36
-rwxr-xr-xindra/llmath/llvolume.cpp85
-rw-r--r--indra/llmessage/llbuffer.cpp90
-rw-r--r--indra/llmessage/llbuffer.h25
-rw-r--r--indra/llmessage/llbufferstream.cpp8
-rw-r--r--indra/llmessage/llcurl.cpp331
-rw-r--r--indra/llmessage/llcurl.h31
-rw-r--r--indra/llmessage/llhttpassetstorage.cpp10
-rw-r--r--indra/llmessage/llhttpclient.cpp12
-rw-r--r--indra/llmessage/lliohttpserver.cpp4
-rw-r--r--indra/llmessage/lliopipe.cpp6
-rw-r--r--indra/llmessage/lliopipe.h2
-rw-r--r--indra/llmessage/lliosocket.cpp3
-rw-r--r--indra/llmessage/llpumpio.cpp51
-rw-r--r--indra/llmessage/llpumpio.h13
-rw-r--r--indra/llmessage/llsdrpcclient.h22
-rw-r--r--indra/llmessage/llurlrequest.cpp30
-rw-r--r--indra/llmessage/llurlrequest.h2
-rw-r--r--indra/llrender/llglslshader.cpp2
-rw-r--r--indra/llrender/llglslshader.h1
-rw-r--r--indra/llrender/llrender.cpp2
-rw-r--r--indra/llrender/llrendertarget.cpp3
-rw-r--r--indra/llrender/llshadermgr.cpp20
-rw-r--r--indra/llui/lllayoutstack.cpp829
-rw-r--r--indra/llui/lllayoutstack.h91
-rw-r--r--indra/llui/llresizebar.cpp4
-rw-r--r--indra/llui/llresizebar.h1
-rw-r--r--indra/llui/llscrollcontainer.cpp97
-rw-r--r--indra/llui/lltoolbar.cpp9
-rw-r--r--indra/llui/lltoolbar.h1
-rw-r--r--indra/llui/llview.cpp16
-rw-r--r--indra/llui/llwindowshade.cpp11
-rw-r--r--indra/llui/llwindowshade.h3
-rw-r--r--indra/llwindow/llwindowwin32.cpp33
-rwxr-xr-xindra/newview/CMakeLists.txt8
-rw-r--r--indra/newview/app_settings/commands.xml10
-rw-r--r--indra/newview/app_settings/settings.xml76
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl3
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cofF.glsl7
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl40
-rw-r--r--indra/newview/llagentwearablesfetch.cpp6
-rw-r--r--indra/newview/llappviewer.cpp18
-rwxr-xr-xindra/newview/llavataractions.cpp2
-rwxr-xr-x[-rw-r--r--]indra/newview/llavatariconctrl.cpp3
-rw-r--r--indra/newview/llchathistory.cpp1
-rw-r--r--indra/newview/llchicletbar.cpp29
-rw-r--r--indra/newview/lldrawpoolbump.cpp79
-rw-r--r--indra/newview/llfloaterimagepreview.cpp11
-rw-r--r--indra/newview/llfloaterland.cpp22
-rw-r--r--indra/newview/llfloaternotificationsconsole.cpp2
-rw-r--r--indra/newview/llfloateroutbox.cpp567
-rw-r--r--indra/newview/llfloateroutbox.h114
-rw-r--r--indra/newview/llfloateruipreview.cpp6
-rw-r--r--indra/newview/llfolderview.cpp39
-rw-r--r--indra/newview/llfolderview.h7
-rw-r--r--indra/newview/llfolderviewitem.cpp438
-rw-r--r--indra/newview/llfolderviewitem.h25
-rw-r--r--indra/newview/llimfloater.cpp9
-rw-r--r--indra/newview/llinspectremoteobject.cpp24
-rw-r--r--indra/newview/llinventorybridge.cpp933
-rw-r--r--indra/newview/llinventorybridge.h20
-rw-r--r--indra/newview/llinventoryfunctions.cpp128
-rw-r--r--indra/newview/llinventoryfunctions.h5
-rw-r--r--indra/newview/llinventorymodel.cpp32
-rw-r--r--indra/newview/llinventorymodel.h4
-rw-r--r--indra/newview/llinventorypanel.cpp11
-rw-r--r--indra/newview/llinventorypanel.h3
-rw-r--r--indra/newview/llmarketplacefunctions.cpp463
-rw-r--r--indra/newview/llmarketplacefunctions.h94
-rw-r--r--indra/newview/llmarketplacenotifications.cpp90
-rw-r--r--indra/newview/llmarketplacenotifications.h57
-rw-r--r--indra/newview/llmeshrepository.cpp131
-rw-r--r--indra/newview/llmeshrepository.h4
-rw-r--r--indra/newview/llnotificationhandler.h10
-rw-r--r--indra/newview/llnotificationmanager.cpp2
-rw-r--r--indra/newview/llpanelmaininventory.cpp2
-rw-r--r--indra/newview/llpanelmarketplaceinbox.cpp21
-rw-r--r--indra/newview/llpanelmarketplaceinbox.h7
-rw-r--r--indra/newview/llpanelmarketplaceoutbox.cpp363
-rw-r--r--indra/newview/llpanelmarketplaceoutbox.h90
-rw-r--r--indra/newview/llpanelmarketplaceoutboxinventory.cpp133
-rw-r--r--indra/newview/llpanelmarketplaceoutboxinventory.h27
-rw-r--r--indra/newview/llsidepanelinventory.cpp387
-rw-r--r--indra/newview/llsidepanelinventory.h26
-rwxr-xr-xindra/newview/llspatialpartition.cpp52
-rwxr-xr-xindra/newview/llspatialpartition.h2
-rw-r--r--indra/newview/llstartup.cpp5
-rw-r--r--indra/newview/lltexturecache.cpp2
-rw-r--r--indra/newview/lltexturecache.h2
-rw-r--r--indra/newview/lltexturefetch.cpp2
-rw-r--r--indra/newview/lltexturefetch.h2
-rw-r--r--indra/newview/lltooldraganddrop.cpp27
-rw-r--r--indra/newview/lltooldraganddrop.h5
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/llviewermedia.cpp125
-rw-r--r--indra/newview/llviewermenu.cpp28
-rw-r--r--indra/newview/llviewershadermgr.cpp5
-rw-r--r--indra/newview/llviewertexture.cpp54
-rw-r--r--indra/newview/llviewertexturelist.cpp3
-rw-r--r--indra/newview/llviewerwindow.cpp14
-rw-r--r--indra/newview/llwearablelist.cpp2
-rw-r--r--indra/newview/llxmlrpctransaction.cpp19
-rw-r--r--indra/newview/pipeline.cpp29
-rw-r--r--indra/newview/skins/default/textures/textures.xml20
-rw-r--r--indra/newview/skins/default/textures/toolbar_icons/outbox.pngbin0 -> 1521 bytes
-rw-r--r--indra/newview/skins/default/xui/da/menu_viewer.xml68
-rw-r--r--indra/newview/skins/default/xui/de/floater_about.xml48
-rw-r--r--indra/newview/skins/default/xui/de/floater_about_land.xml17
-rw-r--r--indra/newview/skins/default/xui/de/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_camera.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_hardware_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_model_preview.xml5
-rw-r--r--indra/newview/skins/default/xui/de/floater_model_wizard.xml3
-rw-r--r--indra/newview/skins/default/xui/de/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_snapshot.xml122
-rw-r--r--indra/newview/skins/default/xui/de/floater_toybox.xml3
-rw-r--r--indra/newview/skins/default/xui/de/floater_translation_settings.xml58
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/de/menu_toolbars.xml3
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml58
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml34
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_skin.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_postcard_message.xml21
-rw-r--r--indra/newview/skins/default/xui/de/panel_postcard_settings.xml23
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_chat.xml27
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml21
-rw-r--r--indra/newview/skins/default/xui/de/panel_snapshot_local.xml39
-rw-r--r--indra/newview/skins/default/xui/de/panel_snapshot_options.xml7
-rw-r--r--indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml17
-rw-r--r--indra/newview/skins/default/xui/de/panel_snapshot_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml61
-rw-r--r--indra/newview/skins/default/xui/de/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml54
-rw-r--r--indra/newview/skins/default/xui/en/floater_help_browser.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml5
-rw-r--r--indra/newview/skins/default/xui/en/floater_media_browser.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_merchant_outbox.xml152
-rw-r--r--indra/newview/skins/default/xui/en/floater_model_wizard.xml32
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml206
-rw-r--r--indra/newview/skins/default/xui/en/floater_toybox.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_ui_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml5
-rw-r--r--indra/newview/skins/default/xui/en/floater_web_content.xml5
-rw-r--r--indra/newview/skins/default/xui/en/main_view.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml9
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory.xml6
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory_add.xml1
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml156
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml78
-rw-r--r--indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_chiclet_bar.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified_info.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_classified.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_wearable.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_control_panel.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_im_control_panel.xml23
-rw-r--r--indra/newview/skins/default/xui/en/panel_landmarks.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_main_inventory.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml238
-rw-r--r--indra/newview/skins/default/xui/en/panel_nearby_media.xml10
-rw-r--r--indra/newview/skins/default/xui/en/panel_outbox_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfit_edit.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_info.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_picks.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml10
-rw-r--r--indra/newview/skins/default/xui/en/panel_postcard_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml35
-rw-r--r--indra/newview/skins/default/xui/en/panel_progress.xml33
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_estate.xml10
-rw-r--r--indra/newview/skins/default/xui/en/panel_snapshot_local.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_snapshot_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_toolbar_view.xml5
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml189
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml70
-rw-r--r--indra/newview/skins/default/xui/en/widgets/outbox_folder_view_folder.xml10
-rw-r--r--indra/newview/skins/default/xui/en/widgets/outbox_inventory_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_about.xml48
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml17
-rw-r--r--indra/newview/skins/default/xui/es/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_camera.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_hardware_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_model_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/es/floater_model_wizard.xml3
-rw-r--r--indra/newview/skins/default/xui/es/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_snapshot.xml122
-rw-r--r--indra/newview/skins/default/xui/es/floater_toybox.xml3
-rw-r--r--indra/newview/skins/default/xui/es/floater_translation_settings.xml58
-rw-r--r--indra/newview/skins/default/xui/es/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/es/menu_toolbars.xml3
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml58
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml38
-rw-r--r--indra/newview/skins/default/xui/es/panel_edit_skin.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_nearby_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_postcard_message.xml21
-rw-r--r--indra/newview/skins/default/xui/es/panel_postcard_settings.xml23
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_chat.xml27
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml21
-rw-r--r--indra/newview/skins/default/xui/es/panel_snapshot_local.xml39
-rw-r--r--indra/newview/skins/default/xui/es/panel_snapshot_options.xml7
-rw-r--r--indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml17
-rw-r--r--indra/newview/skins/default/xui/es/panel_snapshot_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml61
-rw-r--r--indra/newview/skins/default/xui/es/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about.xml48
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about_land.xml17
-rw-r--r--indra/newview/skins/default/xui/fr/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_buy_currency.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/floater_camera.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_hardware_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_model_preview.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/floater_model_wizard.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_snapshot.xml122
-rw-r--r--indra/newview/skins/default/xui/fr/floater_toybox.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/floater_translation_settings.xml58
-rw-r--r--indra/newview/skins/default/xui/fr/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/menu_toolbars.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml60
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml42
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_skin.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_nearby_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_postcard_message.xml21
-rw-r--r--indra/newview/skins/default/xui/fr/panel_postcard_settings.xml23
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_chat.xml27
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml21
-rw-r--r--indra/newview/skins/default/xui/fr/panel_snapshot_local.xml39
-rw-r--r--indra/newview/skins/default/xui/fr/panel_snapshot_options.xml7
-rw-r--r--indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml17
-rw-r--r--indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml61
-rw-r--r--indra/newview/skins/default/xui/fr/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_about.xml48
-rw-r--r--indra/newview/skins/default/xui/it/floater_about_land.xml17
-rw-r--r--indra/newview/skins/default/xui/it/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_camera.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_hardware_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_model_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/it/floater_model_wizard.xml3
-rw-r--r--indra/newview/skins/default/xui/it/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_snapshot.xml122
-rw-r--r--indra/newview/skins/default/xui/it/floater_toybox.xml3
-rw-r--r--indra/newview/skins/default/xui/it/floater_translation_settings.xml58
-rw-r--r--indra/newview/skins/default/xui/it/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_toolbars.xml3
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml66
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml46
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_skin.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_postcard_message.xml21
-rw-r--r--indra/newview/skins/default/xui/it/panel_postcard_settings.xml23
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_chat.xml27
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml21
-rw-r--r--indra/newview/skins/default/xui/it/panel_snapshot_local.xml39
-rw-r--r--indra/newview/skins/default/xui/it/panel_snapshot_options.xml7
-rw-r--r--indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml17
-rw-r--r--indra/newview/skins/default/xui/it/panel_snapshot_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml61
-rw-r--r--indra/newview/skins/default/xui/it/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml17
-rw-r--r--indra/newview/skins/default/xui/ja/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_camera.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_hardware_settings.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_model_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/floater_model_wizard.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_snapshot.xml122
-rw-r--r--indra/newview/skins/default/xui/ja/floater_toybox.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/floater_translation_settings.xml58
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_controls.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/menu_toolbars.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml56
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml40
-rw-r--r--indra/newview/skins/default/xui/ja/panel_edit_skin.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_postcard_message.xml21
-rw-r--r--indra/newview/skins/default/xui/ja/panel_postcard_settings.xml23
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_chat.xml27
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_general.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml21
-rw-r--r--indra/newview/skins/default/xui/ja/panel_snapshot_local.xml39
-rw-r--r--indra/newview/skins/default/xui/ja/panel_snapshot_options.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml17
-rw-r--r--indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml61
-rw-r--r--indra/newview/skins/default/xui/ja/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_viewer.xml68
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about.xml30
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_camera.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_hardware_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_model_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_model_wizard.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_snapshot.xml122
-rw-r--r--indra/newview/skins/default/xui/pt/floater_toybox.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_translation_settings.xml58
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/menu_toolbars.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml84
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml40
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_skin.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_postcard_message.xml21
-rw-r--r--indra/newview/skins/default/xui/pt/panel_postcard_settings.xml23
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_chat.xml27
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml21
-rw-r--r--indra/newview/skins/default/xui/pt/panel_snapshot_local.xml39
-rw-r--r--indra/newview/skins/default/xui/pt/panel_snapshot_options.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml61
-rw-r--r--indra/newview/skins/default/xui/pt/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/floater_about.xml46
-rw-r--r--indra/newview/skins/default/xui/ru/floater_about_land.xml17
-rw-r--r--indra/newview/skins/default/xui/ru/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_camera.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_hardware_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_model_preview.xml5
-rw-r--r--indra/newview/skins/default/xui/ru/floater_model_wizard.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_snapshot.xml121
-rw-r--r--indra/newview/skins/default/xui/ru/floater_toybox.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/floater_translation_settings.xml58
-rw-r--r--indra/newview/skins/default/xui/ru/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/ru/menu_toolbars.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/menu_viewer.xml54
-rw-r--r--indra/newview/skins/default/xui/ru/notifications.xml38
-rw-r--r--indra/newview/skins/default/xui/ru/panel_edit_skin.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/panel_nearby_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_postcard_message.xml21
-rw-r--r--indra/newview/skins/default/xui/ru/panel_postcard_settings.xml23
-rw-r--r--indra/newview/skins/default/xui/ru/panel_preferences_chat.xml26
-rw-r--r--indra/newview/skins/default/xui/ru/panel_preferences_general.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml21
-rw-r--r--indra/newview/skins/default/xui/ru/panel_snapshot_local.xml39
-rw-r--r--indra/newview/skins/default/xui/ru/panel_snapshot_options.xml7
-rw-r--r--indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml17
-rw-r--r--indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/ru/strings.xml59
-rw-r--r--indra/newview/skins/default/xui/ru/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_about.xml48
-rw-r--r--indra/newview/skins/default/xui/tr/floater_about_land.xml17
-rw-r--r--indra/newview/skins/default/xui/tr/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_camera.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_hardware_settings.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_model_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/floater_model_wizard.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_snapshot.xml121
-rw-r--r--indra/newview/skins/default/xui/tr/floater_toybox.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/floater_translation_settings.xml58
-rw-r--r--indra/newview/skins/default/xui/tr/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/tr/menu_toolbars.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/menu_viewer.xml58
-rw-r--r--indra/newview/skins/default/xui/tr/notifications.xml38
-rw-r--r--indra/newview/skins/default/xui/tr/panel_edit_skin.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/panel_postcard_message.xml21
-rw-r--r--indra/newview/skins/default/xui/tr/panel_postcard_settings.xml23
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_chat.xml26
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml21
-rw-r--r--indra/newview/skins/default/xui/tr/panel_snapshot_local.xml39
-rw-r--r--indra/newview/skins/default/xui/tr/panel_snapshot_options.xml7
-rw-r--r--indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml17
-rw-r--r--indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/tr/strings.xml61
-rw-r--r--indra/newview/skins/default/xui/tr/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_viewer.xml70
-rw-r--r--indra/viewer_components/updater/llupdatedownloader.cpp23
405 files changed, 8779 insertions, 4899 deletions
diff --git a/.hgtags b/.hgtags
index f4ffb61aa6..33cd4d37a5 100644
--- a/.hgtags
+++ b/.hgtags
@@ -228,6 +228,10 @@ c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
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-start
a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release
fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release
@@ -244,4 +248,14 @@ bd6bcde2584491fd9228f1fa51c4575f4e764e19 3.2.4-release
3d2d5d244c6398a4214c666d5dd3965b0918709a 3.2.5-beta1
65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d DRTVWR-107_3.2.5-beta2
65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d 3.2.5-beta2
+c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release
+c6175c955a19e9b9353d242889ec1779b5762522 3.2.5-release
2174ed1c7129562428a5cfe8651ed77b8d26ae18 3.2.6-start
+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
+89980333c99dbaf1787fe20784f1d8849e9b5d4f 3.2.8-start
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 84f399cc89..c5db396c97 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -607,6 +607,9 @@ Jonathan Yap
STORM-1737
STORM-1733
STORM-1790
+ STORM-1788
+ STORM-1799
+ STORM-1796
Kadah Coba
STORM-1060
Jondan Lundquist
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index 5e540ad8c5..5fa28cb902 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -1264,6 +1264,7 @@ LLAudioSource::LLAudioSource(const LLUUID& id, const LLUUID& owner_id, const F32
mSyncSlave(false),
mQueueSounds(false),
mPlayedOnce(false),
+ mCorrupted(false),
mType(type),
mChannelp(NULL),
mCurrentDatap(NULL),
@@ -1296,16 +1297,25 @@ void LLAudioSource::setChannel(LLAudioChannel *channelp)
void LLAudioSource::update()
{
+ if(mCorrupted)
+ {
+ return ; //no need to update
+ }
+
if (!getCurrentBuffer())
{
if (getCurrentData())
{
// Hack - try and load the sound. Will do this as a callback
// on decode later.
- if (getCurrentData()->load())
+ if (getCurrentData()->load() && getCurrentData()->getBuffer())
{
play(getCurrentData()->getID());
- }
+ }
+ else
+ {
+ mCorrupted = true ;
+ }
}
}
}
@@ -1421,6 +1431,11 @@ bool LLAudioSource::play(const LLUUID &audio_uuid)
bool LLAudioSource::isDone() const
{
+ if(mCorrupted)
+ {
+ return true ;
+ }
+
const F32 MAX_AGE = 60.f;
const F32 MAX_UNPLAYED_AGE = 15.f;
const F32 MAX_MUTED_AGE = 11.f;
@@ -1736,7 +1751,7 @@ LLAudioData::LLAudioData(const LLUUID &uuid) :
}
}
-
+//return false when the audio file is corrupted.
bool LLAudioData::load()
{
// For now, just assume we're going to use one buffer per audiodata.
@@ -1752,7 +1767,7 @@ bool LLAudioData::load()
{
// No free buffers, abort.
llinfos << "Not able to allocate a new audio buffer, aborting." << llendl;
- return false;
+ return true;
}
std::string uuid_str;
diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h
index 30d2490635..a47ee7ca7c 100644
--- a/indra/llaudio/llaudioengine.h
+++ b/indra/llaudio/llaudioengine.h
@@ -334,6 +334,7 @@ protected:
bool mSyncSlave;
bool mQueueSounds;
bool mPlayedOnce;
+ bool mCorrupted;
S32 mType;
LLVector3d mPositionGlobal;
LLVector3 mVelocity;
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 5dee7a3541..1738c16dea 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -109,7 +109,7 @@ void LLQueuedThread::shutdown()
// MAIN THREAD
// virtual
-S32 LLQueuedThread::update(U32 max_time_ms)
+S32 LLQueuedThread::update(F32 max_time_ms)
{
if (!mStarted)
{
@@ -122,7 +122,7 @@ S32 LLQueuedThread::update(U32 max_time_ms)
return updateQueue(max_time_ms);
}
-S32 LLQueuedThread::updateQueue(U32 max_time_ms)
+S32 LLQueuedThread::updateQueue(F32 max_time_ms)
{
F64 max_time = (F64)max_time_ms * .001;
LLTimer timer;
diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h
index 499d13a792..d3704b0fe2 100644
--- a/indra/llcommon/llqueuedthread.h
+++ b/indra/llcommon/llqueuedthread.h
@@ -173,8 +173,8 @@ protected:
public:
bool waitForResult(handle_t handle, bool auto_complete = true);
- virtual S32 update(U32 max_time_ms);
- S32 updateQueue(U32 max_time_ms);
+ virtual S32 update(F32 max_time_ms);
+ S32 updateQueue(F32 max_time_ms);
void waitOnPending();
void printQueueStats();
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index 19075afa68..6073bcd0a6 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -1364,11 +1364,21 @@ BOOL gzip_file(const std::string& srcfile, const std::string& dstfile)
src = LLFile::fopen(srcfile, "rb"); /* Flawfinder: ignore */
if (! src) goto err;
- do
+ while ((bytes = (S32)fread(buffer, sizeof(U8), COMPRESS_BUFFER_SIZE, src)) > 0)
{
- bytes = (S32)fread(buffer, sizeof(U8), COMPRESS_BUFFER_SIZE,src);
- gzwrite(dst, buffer, bytes);
- } while(feof(src) == 0);
+ if (gzwrite(dst, buffer, bytes) <= 0)
+ {
+ llwarns << "gzwrite failed: " << gzerror(dst, NULL) << llendl;
+ goto err;
+ }
+ }
+
+ if (ferror(src))
+ {
+ llwarns << "Error reading " << srcfile << llendl;
+ goto err;
+ }
+
gzclose(dst);
dst = NULL;
#if LL_WINDOWS
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index 4063cc730b..a6ad6b125c 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -337,11 +337,7 @@ LLMutex::~LLMutex()
void LLMutex::lock()
{
-#if LL_DARWIN
- if (mLockingThread == LLThread::currentID())
-#else
- if (mLockingThread == sThreadID)
-#endif
+ if(isSelfLocked())
{ //redundant lock
mCount++;
return;
@@ -398,6 +394,15 @@ bool LLMutex::isLocked()
}
}
+bool LLMutex::isSelfLocked()
+{
+#if LL_DARWIN
+ return mLockingThread == LLThread::currentID();
+#else
+ return mLockingThread == sThreadID;
+#endif
+}
+
U32 LLMutex::lockingThread() const
{
return mLockingThread;
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index f0e0de6173..b52e70ab2e 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -151,6 +151,7 @@ public:
void lock(); // blocks
void unlock();
bool isLocked(); // non-blocking, but does do a lock/unlock so not free
+ bool isSelfLocked(); //return true if locked in a same thread
U32 lockingThread() const; //get ID of locking thread
protected:
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 7bba3d298f..27cdfcaa4e 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -29,7 +29,7 @@
const S32 LL_VERSION_MAJOR = 3;
const S32 LL_VERSION_MINOR = 2;
-const S32 LL_VERSION_PATCH = 7;
+const S32 LL_VERSION_PATCH = 9;
const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 4988bdf570..3d05a30ac2 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -81,7 +81,7 @@ void LLWorkerThread::clearDeleteList()
}
// virtual
-S32 LLWorkerThread::update(U32 max_time_ms)
+S32 LLWorkerThread::update(F32 max_time_ms)
{
S32 res = LLQueuedThread::update(max_time_ms);
// Delete scheduled workers
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index 78a4781d15..be46394d6e 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -86,7 +86,7 @@ public:
LLWorkerThread(const std::string& name, bool threaded = true, bool should_pause = false);
~LLWorkerThread();
- /*virtual*/ S32 update(U32 max_time_ms);
+ /*virtual*/ S32 update(F32 max_time_ms);
handle_t addWorkRequest(LLWorkerClass* workerclass, S32 param, U32 priority = PRIORITY_NORMAL);
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index 28dc3bd313..ad2eb0f69c 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -46,7 +46,7 @@ LLImageDecodeThread::~LLImageDecodeThread()
// MAIN THREAD
// virtual
-S32 LLImageDecodeThread::update(U32 max_time_ms)
+S32 LLImageDecodeThread::update(F32 max_time_ms)
{
LLMutexLock lock(mCreationMutex);
for (creation_list_t::iterator iter = mCreationList.begin();
diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h
index c684222fa5..1bfb0ddfd3 100644
--- a/indra/llimage/llimageworker.h
+++ b/indra/llimage/llimageworker.h
@@ -78,7 +78,7 @@ public:
handle_t decodeImage(LLImageFormatted* image,
U32 priority, S32 discard, BOOL needs_aux,
Responder* responder);
- S32 update(U32 max_time_ms);
+ S32 update(F32 max_time_ms);
// Used by unit tests to check the consistency of the thread instance
S32 tut_size();
diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h
index 374858be51..6c7744cdf1 100644
--- a/indra/llmath/lloctree.h
+++ b/indra/llmath/lloctree.h
@@ -80,8 +80,8 @@ public:
typedef LLOctreeTraveler<T> oct_traveler;
typedef LLTreeTraveler<T> tree_traveler;
typedef typename std::set<LLPointer<T> > element_list;
- typedef typename std::set<LLPointer<T> >::iterator element_iter;
- typedef typename std::set<LLPointer<T> >::const_iterator const_element_iter;
+ typedef typename element_list::iterator element_iter;
+ typedef typename element_list::const_iterator const_element_iter;
typedef typename std::vector<LLTreeListener<T>*>::iterator tree_listener_iter;
typedef typename std::vector<LLOctreeNode<T>* > child_list;
typedef LLTreeNode<T> BaseType;
@@ -114,6 +114,8 @@ public:
mOctant = ((oct_node*) mParent)->getOctant(mCenter);
}
+ mElementCount = 0;
+
clearChildren();
}
@@ -219,11 +221,11 @@ public:
void accept(oct_traveler* visitor) { visitor->visit(this); }
virtual bool isLeaf() const { return mChild.empty(); }
- U32 getElementCount() const { return mData.size(); }
+ U32 getElementCount() const { return mElementCount; }
element_list& getData() { return mData; }
const element_list& getData() const { return mData; }
- U32 getChildCount() const { return mChild.size(); }
+ U32 getChildCount() const { return mChildCount; }
oct_node* getChild(U32 index) { return mChild[index]; }
const oct_node* getChild(U32 index) const { return mChild[index]; }
child_list& getChildren() { return mChild; }
@@ -300,17 +302,13 @@ public:
if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) ||
(data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= gOctreeMaxCapacity)))
{ //it belongs here
-#if LL_OCTREE_PARANOIA_CHECK
//if this is a redundant insertion, error out (should never happen)
- if (mData.find(data) != mData.end())
- {
- llwarns << "Redundant octree insertion detected. " << data << llendl;
- return false;
- }
-#endif
+ llassert(mData.find(data) == mData.end());
mData.insert(data);
BaseType::insert(data);
+
+ mElementCount = mData.size();
return true;
}
else
@@ -346,6 +344,8 @@ public:
{
mData.insert(data);
BaseType::insert(data);
+
+ mElementCount = mData.size();
return true;
}
@@ -399,6 +399,7 @@ public:
if (mData.find(data) != mData.end())
{ //we have data
mData.erase(data);
+ mElementCount = mData.size();
notifyRemoval(data);
checkAlive();
return true;
@@ -436,6 +437,7 @@ public:
if (mData.find(data) != mData.end())
{
mData.erase(data);
+ mElementCount = mData.size();
notifyRemoval(data);
llwarns << "FOUND!" << llendl;
checkAlive();
@@ -452,7 +454,7 @@ public:
void clearChildren()
{
mChild.clear();
-
+ mChildCount = 0;
U32* foo = (U32*) mChildMap;
foo[0] = foo[1] = 0xFFFFFFFF;
}
@@ -512,9 +514,10 @@ public:
}
#endif
- mChildMap[child->getOctant()] = (U8) mChild.size();
+ mChildMap[child->getOctant()] = mChildCount;
mChild.push_back(child);
+ ++mChildCount;
child->setParent(this);
if (!silent)
@@ -534,21 +537,20 @@ public:
oct_listener* listener = getOctListener(i);
listener->handleChildRemoval(this, getChild(index));
}
-
-
if (destroy)
{
mChild[index]->destroy();
delete mChild[index];
}
mChild.erase(mChild.begin() + index);
+ --mChildCount;
//rebuild child map
U32* foo = (U32*) mChildMap;
foo[0] = foo[1] = 0xFFFFFFFF;
- for (U32 i = 0; i < mChild.size(); ++i)
+ for (U32 i = 0; i < mChildCount; ++i)
{
mChildMap[mChild[i]->getOctant()] = i;
}
@@ -601,8 +603,10 @@ protected:
child_list mChild;
U8 mChildMap[8];
+ U32 mChildCount;
element_list mData;
+ U32 mElementCount;
};
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 9499ca29ac..5893caecc7 100755
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -4606,18 +4606,83 @@ S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& en
genBinormals(i);
}
- if (!face.mOctree)
- {
- face.createOctree();
- }
-
- //LLVector4a* p = (LLVector4a*) face.mPositions;
+ if (isUnique())
+ { //don't bother with an octree for flexi volumes
+ U32 tri_count = face.mNumIndices/3;
+
+ for (U32 j = 0; j < tri_count; ++j)
+ {
+ U16 idx0 = face.mIndices[j*3+0];
+ U16 idx1 = face.mIndices[j*3+1];
+ U16 idx2 = face.mIndices[j*3+2];
+
+ const LLVector4a& v0 = face.mPositions[idx0];
+ const LLVector4a& v1 = face.mPositions[idx1];
+ const LLVector4a& v2 = face.mPositions[idx2];
+
+ F32 a,b,t;
+
+ if (LLTriangleRayIntersect(v0, v1, v2,
+ start, dir, a, b, t))
+ {
+ if ((t >= 0.f) && // if hit is after start
+ (t <= 1.f) && // and before end
+ (t < closest_t)) // and this hit is closer
+ {
+ closest_t = t;
+ hit_face = i;
+
+ if (intersection != NULL)
+ {
+ LLVector4a intersect = dir;
+ intersect.mul(closest_t);
+ intersect.add(start);
+ intersection->set(intersect.getF32ptr());
+ }
+
+
+ if (tex_coord != NULL)
+ {
+ LLVector2* tc = (LLVector2*) face.mTexCoords;
+ *tex_coord = ((1.f - a - b) * tc[idx0] +
+ a * tc[idx1] +
+ b * tc[idx2]);
- LLOctreeTriangleRayIntersect intersect(start, dir, &face, &closest_t, intersection, tex_coord, normal, bi_normal);
- intersect.traverse(face.mOctree);
- if (intersect.mHitFace)
+ }
+
+ if (normal!= NULL)
+ {
+ LLVector4* norm = (LLVector4*) face.mNormals;
+
+ *normal = ((1.f - a - b) * LLVector3(norm[idx0]) +
+ a * LLVector3(norm[idx1]) +
+ b * LLVector3(norm[idx2]));
+ }
+
+ if (bi_normal != NULL)
+ {
+ LLVector4* binormal = (LLVector4*) face.mBinormals;
+ *bi_normal = ((1.f - a - b) * LLVector3(binormal[idx0]) +
+ a * LLVector3(binormal[idx1]) +
+ b * LLVector3(binormal[idx2]));
+ }
+ }
+ }
+ }
+ }
+ else
{
- hit_face = i;
+ if (!face.mOctree)
+ {
+ face.createOctree();
+ }
+
+ LLOctreeTriangleRayIntersect intersect(start, dir, &face, &closest_t, intersection, tex_coord, normal, bi_normal);
+ intersect.traverse(face.mOctree);
+ if (intersect.mHitFace)
+ {
+ hit_face = i;
+ }
}
}
}
diff --git a/indra/llmessage/llbuffer.cpp b/indra/llmessage/llbuffer.cpp
index 0316797f00..250cace6e9 100644
--- a/indra/llmessage/llbuffer.cpp
+++ b/indra/llmessage/llbuffer.cpp
@@ -32,6 +32,9 @@
#include "llmath.h"
#include "llmemtype.h"
#include "llstl.h"
+#include "llthread.h"
+
+#define ASSERT_LLBUFFERARRAY_MUTEX_LOCKED llassert(!mMutexp || mMutexp->isSelfLocked());
/**
* LLSegment
@@ -224,7 +227,8 @@ void LLHeapBuffer::allocate(S32 size)
* LLBufferArray
*/
LLBufferArray::LLBufferArray() :
- mNextBaseChannel(0)
+ mNextBaseChannel(0),
+ mMutexp(NULL)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
}
@@ -233,6 +237,8 @@ LLBufferArray::~LLBufferArray()
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
std::for_each(mBuffers.begin(), mBuffers.end(), DeletePointer());
+
+ delete mMutexp;
}
// static
@@ -243,14 +249,57 @@ LLChannelDescriptors LLBufferArray::makeChannelConsumer(
return rv;
}
+void LLBufferArray::lock()
+{
+ if(mMutexp)
+ {
+ mMutexp->lock() ;
+ }
+}
+
+void LLBufferArray::unlock()
+{
+ if(mMutexp)
+ {
+ mMutexp->unlock() ;
+ }
+}
+
+LLMutex* LLBufferArray::getMutex()
+{
+ return mMutexp ;
+}
+
+void LLBufferArray::setThreaded(bool threaded)
+{
+ if(threaded)
+ {
+ if(!mMutexp)
+ {
+ mMutexp = new LLMutex(NULL);
+ }
+ }
+ else
+ {
+ if(mMutexp)
+ {
+ delete mMutexp ;
+ mMutexp = NULL ;
+ }
+ }
+}
+
LLChannelDescriptors LLBufferArray::nextChannel()
{
LLChannelDescriptors rv(mNextBaseChannel++);
return rv;
}
+//mMutexp should be locked before calling this.
S32 LLBufferArray::capacity() const
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
+
S32 total = 0;
const_buffer_iterator_t iter = mBuffers.begin();
const_buffer_iterator_t end = mBuffers.end();
@@ -263,6 +312,8 @@ S32 LLBufferArray::capacity() const
bool LLBufferArray::append(S32 channel, const U8* src, S32 len)
{
+ LLMutexLock lock(mMutexp) ;
+
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
std::vector<LLSegment> segments;
if(copyIntoBuffers(channel, src, len, segments))
@@ -273,8 +324,11 @@ bool LLBufferArray::append(S32 channel, const U8* src, S32 len)
return false;
}
+//mMutexp should be locked before calling this.
bool LLBufferArray::prepend(S32 channel, const U8* src, S32 len)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
+
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
std::vector<LLSegment> segments;
if(copyIntoBuffers(channel, src, len, segments))
@@ -293,6 +347,8 @@ bool LLBufferArray::insertAfter(
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
std::vector<LLSegment> segments;
+
+ LLMutexLock lock(mMutexp) ;
if(mSegments.end() != segment)
{
++segment;
@@ -305,8 +361,11 @@ bool LLBufferArray::insertAfter(
return false;
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::splitAfter(U8* address)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
+
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
segment_iterator_t end = mSegments.end();
segment_iterator_t it = getSegment(address);
@@ -335,20 +394,26 @@ LLBufferArray::segment_iterator_t LLBufferArray::splitAfter(U8* address)
return rv;
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::beginSegment()
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
return mSegments.begin();
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::endSegment()
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
return mSegments.end();
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::constructSegmentAfter(
U8* address,
LLSegment& segment)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
segment_iterator_t rv = mSegments.begin();
segment_iterator_t end = mSegments.end();
@@ -395,8 +460,10 @@ LLBufferArray::segment_iterator_t LLBufferArray::constructSegmentAfter(
return rv;
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::getSegment(U8* address)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
segment_iterator_t end = mSegments.end();
if(!address)
{
@@ -414,9 +481,11 @@ LLBufferArray::segment_iterator_t LLBufferArray::getSegment(U8* address)
return end;
}
+//mMutexp should be locked before calling this.
LLBufferArray::const_segment_iterator_t LLBufferArray::getSegment(
U8* address) const
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
const_segment_iterator_t end = mSegments.end();
if(!address)
{
@@ -466,6 +535,8 @@ S32 LLBufferArray::countAfter(S32 channel, U8* start) const
S32 count = 0;
S32 offset = 0;
const_segment_iterator_t it;
+
+ LLMutexLock lock(mMutexp) ;
const_segment_iterator_t end = mSegments.end();
if(start)
{
@@ -517,6 +588,8 @@ U8* LLBufferArray::readAfter(
len = 0;
S32 bytes_to_copy = 0;
const_segment_iterator_t it;
+
+ LLMutexLock lock(mMutexp) ;
const_segment_iterator_t end = mSegments.end();
if(start)
{
@@ -568,6 +641,7 @@ U8* LLBufferArray::seek(
U8* start,
S32 delta) const
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
const_segment_iterator_t it;
const_segment_iterator_t end = mSegments.end();
@@ -709,9 +783,14 @@ U8* LLBufferArray::seek(
return rv;
}
+//test use only
bool LLBufferArray::takeContents(LLBufferArray& source)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
+
+ LLMutexLock lock(mMutexp);
+ source.lock();
+
std::copy(
source.mBuffers.begin(),
source.mBuffers.end(),
@@ -723,13 +802,17 @@ bool LLBufferArray::takeContents(LLBufferArray& source)
std::back_insert_iterator<segment_list_t>(mSegments));
source.mSegments.clear();
source.mNextBaseChannel = 0;
+ source.unlock();
+
return true;
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::makeSegment(
S32 channel,
S32 len)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
// start at the end of the buffers, because it is the most likely
// to have free space.
@@ -765,8 +848,10 @@ LLBufferArray::segment_iterator_t LLBufferArray::makeSegment(
return send;
}
+//mMutexp should be locked before calling this.
bool LLBufferArray::eraseSegment(const segment_iterator_t& erase_iter)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
// Find out which buffer contains the segment, and if it is found,
@@ -792,13 +877,14 @@ bool LLBufferArray::eraseSegment(const segment_iterator_t& erase_iter)
return rv;
}
-
+//mMutexp should be locked before calling this.
bool LLBufferArray::copyIntoBuffers(
S32 channel,
const U8* src,
S32 len,
std::vector<LLSegment>& segments)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
if(!src || !len) return false;
S32 copied = 0;
diff --git a/indra/llmessage/llbuffer.h b/indra/llmessage/llbuffer.h
index 1c42b6fbc6..ccdb9fa7ee 100644
--- a/indra/llmessage/llbuffer.h
+++ b/indra/llmessage/llbuffer.h
@@ -39,6 +39,7 @@
#include <list>
#include <vector>
+class LLMutex;
/**
* @class LLChannelDescriptors
* @brief A way simple interface to accesss channels inside a buffer
@@ -564,6 +565,29 @@ public:
* @return Returns true on success.
*/
bool eraseSegment(const segment_iterator_t& iter);
+
+ /**
+ * @brief Lock the mutex if it exists
+ * This method locks mMutexp to make accessing LLBufferArray thread-safe
+ */
+ void lock();
+
+ /**
+ * @brief Unlock the mutex if it exists
+ */
+ void unlock();
+
+ /**
+ * @brief Return mMutexp
+ */
+ LLMutex* getMutex();
+
+ /**
+ * @brief Set LLBufferArray to be shared across threads or not
+ * This method is to create mMutexp if is threaded.
+ * @param threaded Indicates this LLBufferArray instance is shared across threads if true.
+ */
+ void setThreaded(bool threaded);
//@}
protected:
@@ -595,6 +619,7 @@ protected:
S32 mNextBaseChannel;
buffer_list_t mBuffers;
segment_list_t mSegments;
+ LLMutex* mMutexp;
};
#endif // LL_LLBUFFER_H
diff --git a/indra/llmessage/llbufferstream.cpp b/indra/llmessage/llbufferstream.cpp
index 6257983c43..8d8ad05ad5 100644
--- a/indra/llmessage/llbufferstream.cpp
+++ b/indra/llmessage/llbufferstream.cpp
@@ -31,6 +31,7 @@
#include "llbuffer.h"
#include "llmemtype.h"
+#include "llthread.h"
static const S32 DEFAULT_OUTPUT_SEGMENT_SIZE = 1024 * 4;
@@ -62,6 +63,7 @@ int LLBufferStreamBuf::underflow()
return EOF;
}
+ LLMutexLock lock(mBuffer->getMutex());
LLBufferArray::segment_iterator_t iter;
LLBufferArray::segment_iterator_t end = mBuffer->endSegment();
U8* last_pos = (U8*)gptr();
@@ -149,6 +151,7 @@ int LLBufferStreamBuf::overflow(int c)
// since we got here, we have a buffer, and we have a character to
// put on it.
LLBufferArray::segment_iterator_t it;
+ LLMutexLock lock(mBuffer->getMutex());
it = mBuffer->makeSegment(mChannels.out(), DEFAULT_OUTPUT_SEGMENT_SIZE);
if(it != mBuffer->endSegment())
{
@@ -210,6 +213,7 @@ int LLBufferStreamBuf::sync()
// *NOTE: I bet we could just --address if address is not NULL.
// Need to think about that.
+ LLMutexLock lock(mBuffer->getMutex());
address = mBuffer->seek(mChannels.out(), address, -1);
if(address)
{
@@ -273,6 +277,8 @@ streampos LLBufferStreamBuf::seekoff(
// NULL is fine
break;
}
+
+ LLMutexLock lock(mBuffer->getMutex());
address = mBuffer->seek(mChannels.in(), base_addr, off);
if(address)
{
@@ -304,6 +310,8 @@ streampos LLBufferStreamBuf::seekoff(
// NULL is fine
break;
}
+
+ LLMutexLock lock(mBuffer->getMutex());
address = mBuffer->seek(mChannels.out(), base_addr, off);
if(address)
{
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index f569630766..3bcaffc275 100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -72,10 +72,9 @@
static const U32 EASY_HANDLE_POOL_SIZE = 5;
static const S32 MULTI_PERFORM_CALL_REPEAT = 5;
-static const S32 CURL_REQUEST_TIMEOUT = 30; // seconds
+static const S32 CURL_REQUEST_TIMEOUT = 30; // seconds per operation
static const S32 MAX_ACTIVE_REQUEST_COUNT = 100;
-static
// DEBUG //
S32 gCurlEasyCount = 0;
S32 gCurlMultiCount = 0;
@@ -87,6 +86,11 @@ std::vector<LLMutex*> LLCurl::sSSLMutex;
std::string LLCurl::sCAPath;
std::string LLCurl::sCAFile;
LLCurlThread* LLCurl::sCurlThread = NULL ;
+LLMutex* LLCurl::sHandleMutexp = NULL ;
+S32 LLCurl::sTotalHandles = 0 ;
+bool LLCurl::sNotQuitting = true;
+F32 LLCurl::sCurlRequestTimeOut = 120.f; //seonds
+S32 LLCurl::sMaxHandles = 256; //max number of handles, (multi handles and easy handles combined).
void check_curl_code(CURLcode code)
{
@@ -224,13 +228,15 @@ LLMutex* LLCurl::Easy::sHandleMutexp = NULL ;
//static
CURL* LLCurl::Easy::allocEasyHandle()
{
+ llassert(LLCurl::getCurlThread()) ;
+
CURL* ret = NULL;
LLMutexLock lock(sHandleMutexp) ;
if (sFreeHandles.empty())
{
- ret = curl_easy_init();
+ ret = LLCurl::newEasyHandle();
}
else
{
@@ -250,16 +256,27 @@ CURL* LLCurl::Easy::allocEasyHandle()
//static
void LLCurl::Easy::releaseEasyHandle(CURL* handle)
{
+ static const S32 MAX_NUM_FREE_HANDLES = 32 ;
+
if (!handle)
{
- llerrs << "handle cannot be NULL!" << llendl;
+ return ; //handle allocation failed.
+ //llerrs << "handle cannot be NULL!" << llendl;
}
LLMutexLock lock(sHandleMutexp) ;
if (sActiveHandles.find(handle) != sActiveHandles.end())
{
sActiveHandles.erase(handle);
- sFreeHandles.insert(handle);
+
+ if(sFreeHandles.size() < MAX_NUM_FREE_HANDLES)
+ {
+ sFreeHandles.insert(handle);
+ }
+ else
+ {
+ LLCurl::deleteEasyHandle(handle) ;
+ }
}
else
{
@@ -302,6 +319,14 @@ LLCurl::Easy::~Easy()
--gCurlEasyCount;
curl_slist_free_all(mHeaders);
for_each(mStrings.begin(), mStrings.end(), DeletePointerArray());
+
+ if (mResponder && LLCurl::sNotQuitting) //aborted
+ {
+ std::string reason("Request timeout, aborted.") ;
+ mResponder->completedRaw(408, //HTTP_REQUEST_TIME_OUT, timeout, abort
+ reason, mChannels, mOutput);
+ }
+ mResponder = NULL;
}
void LLCurl::Easy::resetState()
@@ -474,6 +499,7 @@ void LLCurl::Easy::prepRequest(const std::string& url,
LLProxy::getInstance()->applyProxySettings(this);
mOutput.reset(new LLBufferArray);
+ mOutput->setThreaded(true);
setopt(CURLOPT_WRITEFUNCTION, (void*)&curlWriteCallback);
setopt(CURLOPT_WRITEDATA, (void*)this);
@@ -517,8 +543,7 @@ void LLCurl::Easy::prepRequest(const std::string& url,
}
////////////////////////////////////////////////////////////////////////////
-LLMutex* LLCurl::Multi::sMultiInitMutexp = NULL ;
-LLCurl::Multi::Multi()
+LLCurl::Multi::Multi(F32 idle_time_out)
: mQueued(0),
mErrorCount(0),
mState(STATE_READY),
@@ -527,28 +552,47 @@ LLCurl::Multi::Multi()
mDeletionMutexp(NULL),
mEasyMutexp(NULL)
{
- mCurlMultiHandle = initMulti();
+ mCurlMultiHandle = LLCurl::newMultiHandle();
if (!mCurlMultiHandle)
{
llwarns << "curl_multi_init() returned NULL! Easy handles: " << gCurlEasyCount << " Multi handles: " << gCurlMultiCount << llendl;
- mCurlMultiHandle = initMulti();
+ mCurlMultiHandle = LLCurl::newMultiHandle();
}
- llassert_always(mCurlMultiHandle);
-
- if(LLCurl::getCurlThread()->getThreaded())
+ //llassert_always(mCurlMultiHandle);
+
+ if(mCurlMultiHandle)
{
- mMutexp = new LLMutex(NULL) ;
- mDeletionMutexp = new LLMutex(NULL) ;
- mEasyMutexp = new LLMutex(NULL) ;
- }
- LLCurl::getCurlThread()->addMulti(this) ;
+ if(LLCurl::getCurlThread()->getThreaded())
+ {
+ mMutexp = new LLMutex(NULL) ;
+ mDeletionMutexp = new LLMutex(NULL) ;
+ mEasyMutexp = new LLMutex(NULL) ;
+ }
+ LLCurl::getCurlThread()->addMulti(this) ;
- ++gCurlMultiCount;
+ mIdleTimeOut = idle_time_out ;
+ if(mIdleTimeOut < LLCurl::sCurlRequestTimeOut)
+ {
+ mIdleTimeOut = LLCurl::sCurlRequestTimeOut ;
+ }
+
+ ++gCurlMultiCount;
+ }
}
LLCurl::Multi::~Multi()
{
+ cleanup() ;
+}
+
+void LLCurl::Multi::cleanup()
+{
+ if(!mCurlMultiHandle)
+ {
+ return ; //nothing to clean.
+ }
+
// Clean up active
for(easy_active_list_t::iterator iter = mEasyActiveList.begin();
iter != mEasyActiveList.end(); ++iter)
@@ -564,7 +608,8 @@ LLCurl::Multi::~Multi()
for_each(mEasyFreeList.begin(), mEasyFreeList.end(), DeletePointer());
mEasyFreeList.clear();
- check_curl_multi_code(curl_multi_cleanup(mCurlMultiHandle));
+ check_curl_multi_code(LLCurl::deleteMultiHandle(mCurlMultiHandle));
+ mCurlMultiHandle = NULL ;
delete mMutexp ;
mMutexp = NULL ;
@@ -572,15 +617,13 @@ LLCurl::Multi::~Multi()
mDeletionMutexp = NULL ;
delete mEasyMutexp ;
mEasyMutexp = NULL ;
-
+
+ mQueued = 0 ;
+ mState = STATE_COMPLETED;
+
--gCurlMultiCount;
-}
-
-CURLM* LLCurl::Multi::initMulti()
-{
- LLMutexLock lock(sMultiInitMutexp) ;
- return curl_multi_init() ;
+ return ;
}
void LLCurl::Multi::lock()
@@ -604,6 +647,7 @@ void LLCurl::Multi::markDead()
LLMutexLock lock(mDeletionMutexp) ;
mDead = TRUE ;
+ LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_URGENT) ;
}
void LLCurl::Multi::setState(LLCurl::Multi::ePerformState state)
@@ -630,6 +674,11 @@ bool LLCurl::Multi::isCompleted()
bool LLCurl::Multi::waitToComplete()
{
+ if(!isValid())
+ {
+ return true ;
+ }
+
if(!mMutexp) //not threaded
{
doPerform() ;
@@ -639,7 +688,7 @@ bool LLCurl::Multi::waitToComplete()
bool completed = (STATE_COMPLETED == mState) ;
if(!completed)
{
- LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_URGENT) ;
+ LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_HIGH) ;
}
return completed;
@@ -675,6 +724,10 @@ bool LLCurl::Multi::doPerform()
call_count++)
{
LLMutexLock lock(mMutexp) ;
+
+ //WARNING: curl_multi_perform will block for many hundreds of milliseconds
+ // NEVER call this from the main thread, and NEVER allow the main thread to
+ // wait on a mutex held by this thread while curl_multi_perform is executing
CURLMcode code = curl_multi_perform(mCurlMultiHandle, &q);
if (CURLM_CALL_MULTI_PERFORM != code || q == 0)
{
@@ -685,7 +738,12 @@ bool LLCurl::Multi::doPerform()
}
mQueued = q;
- setState(STATE_COMPLETED) ;
+ setState(STATE_COMPLETED) ;
+ mIdleTimer.reset() ;
+ }
+ else if(mIdleTimer.getElapsedTimeF32() > mIdleTimeOut) //idle for too long, remove it.
+ {
+ dead = true ;
}
return dead ;
@@ -693,6 +751,11 @@ bool LLCurl::Multi::doPerform()
S32 LLCurl::Multi::process()
{
+ if(!isValid())
+ {
+ return 0 ;
+ }
+
waitToComplete() ;
if (getState() != STATE_COMPLETED)
@@ -845,7 +908,11 @@ bool LLCurlThread::CurlRequest::processRequest()
if(mMulti)
{
completed = mCurlThread->doMultiPerform(mMulti) ;
- setPriority(LLQueuedThread::PRIORITY_LOW) ;
+
+ if(!completed)
+ {
+ setPriority(LLQueuedThread::PRIORITY_LOW) ;
+ }
}
return completed ;
@@ -853,27 +920,29 @@ bool LLCurlThread::CurlRequest::processRequest()
void LLCurlThread::CurlRequest::finishRequest(bool completed)
{
- mCurlThread->deleteMulti(mMulti) ;
+ if(mMulti->isDead())
+ {
+ mCurlThread->deleteMulti(mMulti) ;
+ }
+ else
+ {
+ mCurlThread->cleanupMulti(mMulti) ; //being idle too long, remove the request.
+ }
+
mMulti = NULL ;
}
LLCurlThread::LLCurlThread(bool threaded) :
LLQueuedThread("curlthread", threaded)
{
- if(!LLCurl::Multi::sMultiInitMutexp)
- {
- LLCurl::Multi::sMultiInitMutexp = new LLMutex(NULL) ;
- }
}
//virtual
LLCurlThread::~LLCurlThread()
{
- delete LLCurl::Multi::sMultiInitMutexp ;
- LLCurl::Multi::sMultiInitMutexp = NULL ;
}
-S32 LLCurlThread::update(U32 max_time_ms)
+S32 LLCurlThread::update(F32 max_time_ms)
{
return LLQueuedThread::update(max_time_ms);
}
@@ -892,7 +961,19 @@ void LLCurlThread::addMulti(LLCurl::Multi* multi)
void LLCurlThread::killMulti(LLCurl::Multi* multi)
{
- multi->markDead() ;
+ if(!multi)
+ {
+ return ;
+ }
+
+ if(multi->isValid())
+ {
+ multi->markDead() ;
+ }
+ else
+ {
+ deleteMulti(multi) ;
+ }
}
//private
@@ -906,6 +987,13 @@ void LLCurlThread::deleteMulti(LLCurl::Multi* multi)
{
delete multi ;
}
+
+//private
+void LLCurlThread::cleanupMulti(LLCurl::Multi* multi)
+{
+ multi->cleanup() ;
+}
+
//------------------------------------------------------------
//static
@@ -938,7 +1026,14 @@ LLCurlRequest::~LLCurlRequest()
void LLCurlRequest::addMulti()
{
LLCurl::Multi* multi = new LLCurl::Multi();
-
+ if(!multi->isValid())
+ {
+ LLCurl::getCurlThread()->killMulti(multi) ;
+ mActiveMulti = NULL ;
+ mActiveRequestCount = 0 ;
+ return;
+ }
+
mMultiSet.insert(multi);
mActiveMulti = multi;
mActiveRequestCount = 0;
@@ -952,7 +1047,12 @@ LLCurl::Easy* LLCurlRequest::allocEasy()
{
addMulti();
}
- llassert_always(mActiveMulti);
+ if(!mActiveMulti)
+ {
+ return NULL ;
+ }
+
+ //llassert_always(mActiveMulti);
++mActiveRequestCount;
LLCurl::Easy* easy = mActiveMulti->allocEasy();
return easy;
@@ -1062,6 +1162,19 @@ S32 LLCurlRequest::process()
{
curlmulti_set_t::iterator curiter = iter++;
LLCurl::Multi* multi = *curiter;
+
+ if(!multi->isValid())
+ {
+ if(multi == mActiveMulti)
+ {
+ mActiveMulti = NULL ;
+ mActiveRequestCount = 0 ;
+ }
+ mMultiSet.erase(curiter) ;
+ LLCurl::getCurlThread()->killMulti(multi) ;
+ continue ;
+ }
+
S32 tres = multi->process();
res += tres;
if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0)
@@ -1082,6 +1195,19 @@ S32 LLCurlRequest::getQueued()
{
curlmulti_set_t::iterator curiter = iter++;
LLCurl::Multi* multi = *curiter;
+
+ if(!multi->isValid())
+ {
+ if(multi == mActiveMulti)
+ {
+ mActiveMulti = NULL ;
+ mActiveRequestCount = 0 ;
+ }
+ LLCurl::getCurlThread()->killMulti(multi);
+ mMultiSet.erase(curiter) ;
+ continue ;
+ }
+
queued += multi->mQueued;
if (multi->getState() != LLCurl::Multi::STATE_READY)
{
@@ -1101,13 +1227,22 @@ LLCurlEasyRequest::LLCurlEasyRequest()
{
mMulti = new LLCurl::Multi();
- mEasy = mMulti->allocEasy();
- if (mEasy)
+ if(mMulti->isValid())
{
- mEasy->setErrorBuffer();
- mEasy->setCA();
- // Set proxy settings if configured to do so.
- LLProxy::getInstance()->applyProxySettings(mEasy);
+ mEasy = mMulti->allocEasy();
+ if (mEasy)
+ {
+ mEasy->setErrorBuffer();
+ mEasy->setCA();
+ // Set proxy settings if configured to do so.
+ LLProxy::getInstance()->applyProxySettings(mEasy);
+ }
+ }
+ else
+ {
+ LLCurl::getCurlThread()->killMulti(mMulti) ;
+ mEasy = NULL ;
+ mMulti = NULL ;
}
}
@@ -1118,7 +1253,7 @@ LLCurlEasyRequest::~LLCurlEasyRequest()
void LLCurlEasyRequest::setopt(CURLoption option, S32 value)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(option, value);
}
@@ -1126,7 +1261,7 @@ void LLCurlEasyRequest::setopt(CURLoption option, S32 value)
void LLCurlEasyRequest::setoptString(CURLoption option, const std::string& value)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setoptString(option, value);
}
@@ -1134,7 +1269,7 @@ void LLCurlEasyRequest::setoptString(CURLoption option, const std::string& value
void LLCurlEasyRequest::setPost(char* postdata, S32 size)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_POST, 1);
mEasy->setopt(CURLOPT_POSTFIELDS, postdata);
@@ -1144,7 +1279,7 @@ void LLCurlEasyRequest::setPost(char* postdata, S32 size)
void LLCurlEasyRequest::setHeaderCallback(curl_header_callback callback, void* userdata)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_HEADERFUNCTION, (void*)callback);
mEasy->setopt(CURLOPT_HEADERDATA, userdata); // aka CURLOPT_WRITEHEADER
@@ -1153,7 +1288,7 @@ void LLCurlEasyRequest::setHeaderCallback(curl_header_callback callback, void* u
void LLCurlEasyRequest::setWriteCallback(curl_write_callback callback, void* userdata)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_WRITEFUNCTION, (void*)callback);
mEasy->setopt(CURLOPT_WRITEDATA, userdata);
@@ -1162,7 +1297,7 @@ void LLCurlEasyRequest::setWriteCallback(curl_write_callback callback, void* use
void LLCurlEasyRequest::setReadCallback(curl_read_callback callback, void* userdata)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_READFUNCTION, (void*)callback);
mEasy->setopt(CURLOPT_READDATA, userdata);
@@ -1171,7 +1306,7 @@ void LLCurlEasyRequest::setReadCallback(curl_read_callback callback, void* userd
void LLCurlEasyRequest::setSSLCtxCallback(curl_ssl_ctx_callback callback, void* userdata)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_SSL_CTX_FUNCTION, (void*)callback);
mEasy->setopt(CURLOPT_SSL_CTX_DATA, userdata);
@@ -1180,7 +1315,7 @@ void LLCurlEasyRequest::setSSLCtxCallback(curl_ssl_ctx_callback callback, void*
void LLCurlEasyRequest::slist_append(const char* str)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->slist_append(str);
}
@@ -1191,7 +1326,7 @@ void LLCurlEasyRequest::sendRequest(const std::string& url)
llassert_always(!mRequestSent);
mRequestSent = true;
lldebugs << url << llendl;
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setHeaders();
mEasy->setoptString(CURLOPT_URL, url);
@@ -1203,7 +1338,7 @@ void LLCurlEasyRequest::requestComplete()
{
llassert_always(mRequestSent);
mRequestSent = false;
- if (mEasy)
+ if (isValid() && mEasy)
{
mMulti->removeEasy(mEasy);
}
@@ -1212,6 +1347,10 @@ void LLCurlEasyRequest::requestComplete()
// Usage: Call getRestult until it returns false (no more messages)
bool LLCurlEasyRequest::getResult(CURLcode* result, LLCurl::TransferInfo* info)
{
+ if(!isValid())
+ {
+ return false ;
+ }
if (!mMulti->isCompleted())
{ //we're busy, try again later
return false;
@@ -1276,7 +1415,7 @@ CURLMsg* LLCurlEasyRequest::info_read(S32* q, LLCurl::TransferInfo* info)
std::string LLCurlEasyRequest::getErrorString()
{
- return mEasy ? std::string(mEasy->getErrorBuffer()) : std::string();
+ return isValid() && mEasy ? std::string(mEasy->getErrorBuffer()) : std::string();
}
////////////////////////////////////////////////////////////////////////////
@@ -1302,8 +1441,11 @@ unsigned long LLCurl::ssl_thread_id(void)
}
#endif
-void LLCurl::initClass(bool multi_threaded)
+void LLCurl::initClass(F32 curl_reuest_timeout, S32 max_number_handles, bool multi_threaded)
{
+ sCurlRequestTimeOut = curl_reuest_timeout ; //seconds
+ sMaxHandles = max_number_handles ; //max number of handles, (multi handles and easy handles combined).
+
// Do not change this "unless you are familiar with and mean to control
// internal operations of libcurl"
// - http://curl.haxx.se/libcurl/c/curl_global_init.html
@@ -1324,12 +1466,15 @@ void LLCurl::initClass(bool multi_threaded)
sCurlThread = new LLCurlThread(multi_threaded) ;
if(multi_threaded)
{
+ sHandleMutexp = new LLMutex(NULL) ;
Easy::sHandleMutexp = new LLMutex(NULL) ;
}
}
void LLCurl::cleanupClass()
{
+ sNotQuitting = false; //set quitting
+
//shut down curl thread
while(1)
{
@@ -1350,7 +1495,7 @@ void LLCurl::cleanupClass()
for (std::set<CURL*>::iterator iter = Easy::sFreeHandles.begin(); iter != Easy::sFreeHandles.end(); ++iter)
{
CURL* curl = *iter;
- curl_easy_cleanup(curl);
+ LLCurl::deleteEasyHandle(curl);
}
Easy::sFreeHandles.clear();
@@ -1358,9 +1503,77 @@ void LLCurl::cleanupClass()
delete Easy::sHandleMutexp ;
Easy::sHandleMutexp = NULL ;
+ delete sHandleMutexp ;
+ sHandleMutexp = NULL ;
+
llassert(Easy::sActiveHandles.empty());
}
+//static
+CURLM* LLCurl::newMultiHandle()
+{
+ LLMutexLock lock(sHandleMutexp) ;
+
+ if(sTotalHandles + 1 > sMaxHandles)
+ {
+ llwarns << "no more handles available." << llendl ;
+ return NULL ; //failed
+ }
+ sTotalHandles++;
+
+ CURLM* ret = curl_multi_init() ;
+ if(!ret)
+ {
+ llwarns << "curl_multi_init failed." << llendl ;
+ }
+
+ return ret ;
+}
+
+//static
+CURLMcode LLCurl::deleteMultiHandle(CURLM* handle)
+{
+ if(handle)
+ {
+ LLMutexLock lock(sHandleMutexp) ;
+ sTotalHandles-- ;
+ return curl_multi_cleanup(handle) ;
+ }
+ return CURLM_OK ;
+}
+
+//static
+CURL* LLCurl::newEasyHandle()
+{
+ LLMutexLock lock(sHandleMutexp) ;
+
+ if(sTotalHandles + 1 > sMaxHandles)
+ {
+ llwarns << "no more handles available." << llendl ;
+ return NULL ; //failed
+ }
+ sTotalHandles++;
+
+ CURL* ret = curl_easy_init() ;
+ if(!ret)
+ {
+ llwarns << "curl_easy_init failed." << llendl ;
+ }
+
+ return ret ;
+}
+
+//static
+void LLCurl::deleteEasyHandle(CURL* handle)
+{
+ if(handle)
+ {
+ LLMutexLock lock(sHandleMutexp) ;
+ curl_easy_cleanup(handle) ;
+ sTotalHandles-- ;
+ }
+}
+
const unsigned int LLCurl::MAX_REDIRECTS = 5;
// Provide access to LLCurl free functions outside of llcurl.cpp without polluting the global namespace.
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index 705cdcbbcc..fd664c0fa1 100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -43,6 +43,7 @@
#include "llsd.h"
#include "llthread.h"
#include "llqueuedthread.h"
+#include "llframetimer.h"
class LLMutex;
class LLCurlThread;
@@ -162,7 +163,7 @@ public:
/**
* @ brief Initialize LLCurl class
*/
- static void initClass(bool multi_threaded = false);
+ static void initClass(F32 curl_reuest_timeout = 120.f, S32 max_number_handles = 256, bool multi_threaded = false);
/**
* @ brief Cleanup LLCurl class
@@ -182,11 +183,24 @@ public:
static unsigned long ssl_thread_id(void);
static LLCurlThread* getCurlThread() { return sCurlThread ;}
+
+ static CURLM* newMultiHandle() ;
+ static CURLMcode deleteMultiHandle(CURLM* handle) ;
+ static CURL* newEasyHandle() ;
+ static void deleteEasyHandle(CURL* handle) ;
+
private:
static std::string sCAPath;
static std::string sCAFile;
static const unsigned int MAX_REDIRECTS;
static LLCurlThread* sCurlThread;
+
+ static LLMutex* sHandleMutexp ;
+ static S32 sTotalHandles ;
+ static S32 sMaxHandles;
+public:
+ static bool sNotQuitting;
+ static F32 sCurlRequestTimeOut;
};
class LLCurl::Easy
@@ -277,7 +291,7 @@ public:
STATE_COMPLETED=2
} ePerformState;
- Multi();
+ Multi(F32 idle_time_out = 0.f);
LLCurl::Easy* allocEasy();
bool addEasy(LLCurl::Easy* easy);
@@ -288,7 +302,10 @@ public:
void setState(ePerformState state) ;
ePerformState getState() ;
+
bool isCompleted() ;
+ bool isValid() {return mCurlMultiHandle != NULL ;}
+ bool isDead() {return mDead;}
bool waitToComplete() ;
@@ -299,9 +316,9 @@ public:
S32 mQueued;
S32 mErrorCount;
- static CURLM* initMulti() ;
private:
void easyFree(LLCurl::Easy*);
+ void cleanup() ;
CURLM* mCurlMultiHandle;
@@ -319,8 +336,8 @@ private:
LLMutex* mMutexp ;
LLMutex* mDeletionMutexp ;
LLMutex* mEasyMutexp ;
-
- static LLMutex* sMultiInitMutexp ;
+ LLFrameTimer mIdleTimer ;
+ F32 mIdleTimeOut;
};
class LLCurlThread : public LLQueuedThread
@@ -349,7 +366,7 @@ public:
LLCurlThread(bool threaded = true) ;
virtual ~LLCurlThread() ;
- S32 update(U32 max_time_ms);
+ S32 update(F32 max_time_ms);
void addMulti(LLCurl::Multi* multi) ;
void killMulti(LLCurl::Multi* multi) ;
@@ -357,6 +374,7 @@ public:
private:
bool doMultiPerform(LLCurl::Multi* multi) ;
void deleteMulti(LLCurl::Multi* multi) ;
+ void cleanupMulti(LLCurl::Multi* multi) ;
} ;
namespace boost
@@ -414,6 +432,7 @@ public:
std::string getErrorString();
bool isCompleted() {return mMulti->isCompleted() ;}
bool wait() { return mMulti->waitToComplete(); }
+ bool isValid() {return mMulti && mMulti->isValid(); }
LLCurl::Easy* getEasy() const { return mEasy; }
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
index 2bca517e97..612d765969 100644
--- a/indra/llmessage/llhttpassetstorage.cpp
+++ b/indra/llmessage/llhttpassetstorage.cpp
@@ -232,7 +232,8 @@ LLSD LLHTTPAssetRequest::getFullDetails() const
void LLHTTPAssetRequest::setupCurlHandle()
{
// *NOTE: Similar code exists in mapserver/llcurlutil.cpp JC
- mCurlHandle = curl_easy_init();
+ mCurlHandle = LLCurl::newEasyHandle();
+ llassert_always(mCurlHandle != NULL) ;
// Apply proxy settings if configured to do so
LLProxy::getInstance()->applyProxySettings(mCurlHandle);
@@ -278,7 +279,7 @@ void LLHTTPAssetRequest::setupCurlHandle()
void LLHTTPAssetRequest::cleanupCurlHandle()
{
- curl_easy_cleanup(mCurlHandle);
+ LLCurl::deleteEasyHandle(mCurlHandle);
if (mAssetStoragep)
{
// Terminating a request. Thus upload or download is no longer pending.
@@ -429,12 +430,13 @@ void LLHTTPAssetStorage::_init(const std::string& web_host, const std::string& l
// curl_global_init moved to LLCurl::initClass()
- mCurlMultiHandle = curl_multi_init();
+ mCurlMultiHandle = LLCurl::newMultiHandle() ;
+ llassert_always(mCurlMultiHandle != NULL) ;
}
LLHTTPAssetStorage::~LLHTTPAssetStorage()
{
- curl_multi_cleanup(mCurlMultiHandle);
+ LLCurl::deleteMultiHandle(mCurlMultiHandle);
mCurlMultiHandle = NULL;
// curl_global_cleanup moved to LLCurl::initClass()
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index dd4e3a6300..231cb7ca8f 100644
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -228,6 +228,12 @@ static void request(
LLPumpIO::chain_t chain;
LLURLRequest* req = new LLURLRequest(method, url);
+ if(!req->isValid())//failed
+ {
+ delete req ;
+ return ;
+ }
+
req->setSSLVerifyCallback(LLHTTPClient::getCertVerifyCallback(), (void *)req);
@@ -423,7 +429,9 @@ static LLSD blocking_request(
{
lldebugs << "blockingRequest of " << url << llendl;
char curl_error_buffer[CURL_ERROR_SIZE] = "\0";
- CURL* curlp = curl_easy_init();
+ CURL* curlp = LLCurl::newEasyHandle();
+ llassert_always(curlp != NULL) ;
+
LLHTTPBuffer http_buffer;
std::string body_str;
@@ -517,7 +525,7 @@ static LLSD blocking_request(
}
// * Cleanup
- curl_easy_cleanup(curlp);
+ LLCurl::deleteEasyHandle(curlp);
return response;
}
diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp
index 73e8a69085..987f386aa3 100644
--- a/indra/llmessage/lliohttpserver.cpp
+++ b/indra/llmessage/lliohttpserver.cpp
@@ -818,6 +818,8 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
// Copy everything after mLast read to the out.
LLBufferArray::segment_iterator_t seg_iter;
+
+ buffer->lock();
seg_iter = buffer->splitAfter(mLastRead);
if(seg_iter != buffer->endSegment())
{
@@ -838,7 +840,7 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
}
#endif
}
-
+ buffer->unlock();
//
// *FIX: get rid of extra bytes off the end
//
diff --git a/indra/llmessage/lliopipe.cpp b/indra/llmessage/lliopipe.cpp
index 6e4eec74a6..8f827f7a30 100644
--- a/indra/llmessage/lliopipe.cpp
+++ b/indra/llmessage/lliopipe.cpp
@@ -75,6 +75,12 @@ LLIOPipe::~LLIOPipe()
//lldebugs << "destroying LLIOPipe" << llendl;
}
+//virtual
+bool LLIOPipe::isValid()
+{
+ return true ;
+}
+
// static
std::string LLIOPipe::lookupStatusString(EStatus status)
{
diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h
index 8e656b6da1..cbd17b5a3d 100644
--- a/indra/llmessage/lliopipe.h
+++ b/indra/llmessage/lliopipe.h
@@ -231,6 +231,8 @@ public:
*/
virtual ~LLIOPipe();
+ virtual bool isValid() ;
+
protected:
/**
* @brief Base Constructor.
diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp
index 54ceab3422..d5b4d45821 100644
--- a/indra/llmessage/lliosocket.cpp
+++ b/indra/llmessage/lliosocket.cpp
@@ -445,6 +445,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
// efficient - not only because writev() is better, but also
// because we won't have to do as much work to find the start
// address.
+ buffer->lock();
LLBufferArray::segment_iterator_t it;
LLBufferArray::segment_iterator_t end = buffer->endSegment();
LLSegment segment;
@@ -524,6 +525,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
}
}
+ buffer->unlock();
+
PUMP_DEBUG;
if(done && eos)
{
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index a8d2a0a224..f3ef4f2684 100644
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
@@ -195,7 +195,7 @@ bool LLPumpIO::prime(apr_pool_t* pool)
return ((pool == NULL) ? false : true);
}
-bool LLPumpIO::addChain(const chain_t& chain, F32 timeout)
+bool LLPumpIO::addChain(const chain_t& chain, F32 timeout, bool has_curl_request)
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(chain.empty()) return false;
@@ -204,8 +204,10 @@ bool LLPumpIO::addChain(const chain_t& chain, F32 timeout)
LLScopedLock lock(mChainsMutex);
#endif
LLChainInfo info;
+ info.mHasCurlRequest = has_curl_request;
info.setTimeoutSeconds(timeout);
info.mData = LLIOPipe::buffer_ptr_t(new LLBufferArray);
+ info.mData->setThreaded(has_curl_request);
LLLinkInfo link;
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
lldebugs << "LLPumpIO::addChain() " << chain[0] << " '"
@@ -440,6 +442,15 @@ void LLPumpIO::pump()
static LLFastTimer::DeclareTimer FTM_PUMP_IO("Pump IO");
+LLPumpIO::current_chain_t LLPumpIO::removeRunningChain(LLPumpIO::current_chain_t& run_chain)
+{
+ std::for_each(
+ (*run_chain).mDescriptors.begin(),
+ (*run_chain).mDescriptors.end(),
+ ll_delete_apr_pollset_fd_client_data());
+ return mRunningChains.erase(run_chain);
+}
+
//timeout is in microseconds
void LLPumpIO::pump(const S32& poll_timeout)
{
@@ -585,10 +596,16 @@ void LLPumpIO::pump(const S32& poll_timeout)
// << (*run_chain).mChainLinks[0].mPipe
// << " because we reached the end." << llendl;
#endif
- run_chain = mRunningChains.erase(run_chain);
+ run_chain = removeRunningChain(run_chain);
continue;
}
}
+ else if(isChainExpired(*run_chain))
+ {
+ run_chain = removeRunningChain(run_chain);
+ continue;
+ }
+
PUMP_DEBUG;
if((*run_chain).mLock)
{
@@ -696,11 +713,7 @@ void LLPumpIO::pump(const S32& poll_timeout)
PUMP_DEBUG;
// This chain is done. Clean up any allocated memory and
// erase the chain info.
- std::for_each(
- (*run_chain).mDescriptors.begin(),
- (*run_chain).mDescriptors.end(),
- ll_delete_apr_pollset_fd_client_data());
- run_chain = mRunningChains.erase(run_chain);
+ run_chain = removeRunningChain(run_chain);
// *NOTE: may not always need to rebuild the pollset.
mRebuildPollset = true;
@@ -1095,6 +1108,24 @@ void LLPumpIO::processChain(LLChainInfo& chain)
PUMP_DEBUG;
}
+bool LLPumpIO::isChainExpired(LLChainInfo& chain)
+{
+ if(!chain.mHasCurlRequest)
+ {
+ return false ;
+ }
+
+ for(links_t::iterator iter = chain.mChainLinks.begin(); iter != chain.mChainLinks.end(); ++iter)
+ {
+ if(!(*iter).mPipe->isValid())
+ {
+ return true ;
+ }
+ }
+
+ return false ;
+}
+
bool LLPumpIO::handleChainError(
LLChainInfo& chain,
LLIOPipe::EStatus error)
@@ -1136,6 +1167,9 @@ bool LLPumpIO::handleChainError(
#endif
keep_going = false;
break;
+ case LLIOPipe::STATUS_EXPIRED:
+ keep_going = false;
+ break ;
default:
if(LLIOPipe::isSuccess(error))
{
@@ -1157,7 +1191,8 @@ bool LLPumpIO::handleChainError(
LLPumpIO::LLChainInfo::LLChainInfo() :
mInit(false),
mLock(0),
- mEOS(false)
+ mEOS(false),
+ mHasCurlRequest(false)
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
mTimer.setTimerExpirySec(DEFAULT_CHAIN_EXPIRY_SECS);
diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h
index 9303c9d7fc..d2c5d37571 100644
--- a/indra/llmessage/llpumpio.h
+++ b/indra/llmessage/llpumpio.h
@@ -111,9 +111,10 @@ public:
* @param chain The pipes for the chain
* @param timeout The number of seconds in the future to
* expire. Pass in 0.0f to never expire.
+ * @param has_curl_request The chain contains LLURLRequest if true.
* @return Returns true if anything was added to the pump.
*/
- bool addChain(const chain_t& chain, F32 timeout);
+ bool addChain(const chain_t& chain, F32 timeout, bool has_curl_request = false);
/**
* @brief Struct to associate a pipe with it's buffer io indexes.
@@ -356,12 +357,13 @@ protected:
// basic member data
bool mInit;
+ bool mEOS;
+ bool mHasCurlRequest;
S32 mLock;
LLFrameTimer mTimer;
links_t::iterator mHead;
links_t mChainLinks;
- LLIOPipe::buffer_ptr_t mData;
- bool mEOS;
+ LLIOPipe::buffer_ptr_t mData;
LLSD mContext;
// tracking inside the pump
@@ -402,7 +404,7 @@ protected:
protected:
void initialize(apr_pool_t* pool);
void cleanup();
-
+ current_chain_t removeRunningChain(current_chain_t& chain) ;
/**
* @brief Given the internal state of the chains, rebuild the pollset
* @see setConditional()
@@ -429,6 +431,9 @@ protected:
*/
bool handleChainError(LLChainInfo& chain, LLIOPipe::EStatus error);
+ //if the chain is expired, remove it
+ bool isChainExpired(LLChainInfo& chain) ;
+
public:
/**
* @brief Return number of running chains.
diff --git a/indra/llmessage/llsdrpcclient.h b/indra/llmessage/llsdrpcclient.h
index 9fb49a5c33..0cecf4f688 100644
--- a/indra/llmessage/llsdrpcclient.h
+++ b/indra/llmessage/llsdrpcclient.h
@@ -240,9 +240,16 @@ public:
virtual bool build(LLPumpIO::chain_t& chain, LLSD context) const
{
lldebugs << "LLSDRPCClientFactory::build" << llendl;
- LLIOPipe::ptr_t service(new Client);
- chain.push_back(service);
LLURLRequest* http(new LLURLRequest(LLURLRequest::HTTP_POST));
+ if(!http->isValid())
+ {
+ llwarns << "Creating LLURLRequest failed." << llendl ;
+ delete http;
+ return false;
+ }
+
+ LLIOPipe::ptr_t service(new Client);
+ chain.push_back(service);
LLIOPipe::ptr_t http_pipe(http);
http->addHeader("Content-Type: text/llsd");
if(mURL.empty())
@@ -283,9 +290,16 @@ public:
virtual bool build(LLPumpIO::chain_t& chain, LLSD context) const
{
lldebugs << "LLXMLSDRPCClientFactory::build" << llendl;
- LLIOPipe::ptr_t service(new Client);
- chain.push_back(service);
+
LLURLRequest* http(new LLURLRequest(LLURLRequest::HTTP_POST));
+ if(!http->isValid())
+ {
+ llwarns << "Creating LLURLRequest failed." << llendl ;
+ delete http;
+ return false ;
+ }
+ LLIOPipe::ptr_t service(new Client);
+ chain.push_back(service);
LLIOPipe::ptr_t http_pipe(http);
http->addHeader("Content-Type: text/xml");
if(mURL.empty())
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index a3a2b2b1b8..a16f5c7bf0 100644
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -64,7 +64,7 @@ public:
~LLURLRequestDetail();
std::string mURL;
LLCurlEasyRequest* mCurlRequest;
- LLBufferArray* mResponseBuffer;
+ LLIOPipe::buffer_ptr_t mResponseBuffer;
LLChannelDescriptors mChannels;
U8* mLastRead;
U32 mBodyLimit;
@@ -75,7 +75,6 @@ public:
LLURLRequestDetail::LLURLRequestDetail() :
mCurlRequest(NULL),
- mResponseBuffer(NULL),
mLastRead(NULL),
mBodyLimit(0),
mByteAccumulator(0),
@@ -84,13 +83,18 @@ LLURLRequestDetail::LLURLRequestDetail() :
{
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
mCurlRequest = new LLCurlEasyRequest();
+
+ if(!mCurlRequest->isValid()) //failed.
+ {
+ delete mCurlRequest ;
+ mCurlRequest = NULL ;
+ }
}
LLURLRequestDetail::~LLURLRequestDetail()
{
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
delete mCurlRequest;
- mResponseBuffer = NULL;
mLastRead = NULL;
}
@@ -252,12 +256,24 @@ void LLURLRequest::allowCookies()
mDetail->mCurlRequest->setoptString(CURLOPT_COOKIEFILE, "");
}
+//virtual
+bool LLURLRequest::isValid()
+{
+ return mDetail->mCurlRequest && mDetail->mCurlRequest->isValid();
+}
+
// virtual
LLIOPipe::EStatus LLURLRequest::handleError(
LLIOPipe::EStatus status,
LLPumpIO* pump)
{
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
+
+ if(!isValid())
+ {
+ return STATUS_EXPIRED ;
+ }
+
if(mCompletionCallback && pump)
{
LLURLRequestComplete* complete = NULL;
@@ -326,7 +342,7 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
// *FIX: bit of a hack, but it should work. The configure and
// callback method expect this information to be ready.
- mDetail->mResponseBuffer = buffer.get();
+ mDetail->mResponseBuffer = buffer;
mDetail->mChannels = channels;
if(!configure())
{
@@ -443,6 +459,12 @@ void LLURLRequest::initialize()
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
mState = STATE_INITIALIZED;
mDetail = new LLURLRequestDetail;
+
+ if(!isValid())
+ {
+ return ;
+ }
+
mDetail->mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
mDetail->mCurlRequest->setWriteCallback(&downCallback, (void*)this);
mDetail->mCurlRequest->setReadCallback(&upCallback, (void*)this);
diff --git a/indra/llmessage/llurlrequest.h b/indra/llmessage/llurlrequest.h
index ec5c2c1941..44d358d906 100644
--- a/indra/llmessage/llurlrequest.h
+++ b/indra/llmessage/llurlrequest.h
@@ -188,6 +188,8 @@ public:
*/
void allowCookies();
+ /*virtual*/ bool isValid() ;
+
public:
/**
* @brief Give this pipe a chance to handle a generated error
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 5a6f3d8292..6b2852670a 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -66,7 +66,7 @@ BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)
LLShaderFeatures::LLShaderFeatures()
: calculatesLighting(false), isShiny(false), isFullbright(false), hasWaterFog(false),
hasTransport(false), hasSkinning(false), hasObjectSkinning(false), hasAtmospherics(false), isSpecular(false),
-hasGamma(false), hasLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false),
+hasGamma(false), hasLighting(false), isAlphaLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false),
hasAlphaMask(false)
{
}
diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h
index 2a6c050eac..00b4b0dbd4 100644
--- a/indra/llrender/llglslshader.h
+++ b/indra/llrender/llglslshader.h
@@ -36,6 +36,7 @@ public:
bool calculatesLighting;
bool calculatesAtmospherics;
bool hasLighting; // implies no transport (it's possible to have neither though)
+ bool isAlphaLighting; // indicates lighting shaders need not be linked in (lighting performed directly in alpha shader to match deferred lighting functions)
bool isShiny;
bool isFullbright; // implies no lighting
bool isSpecular;
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index cd827f5091..03a9884c2b 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -1434,6 +1434,8 @@ void LLRender::loadIdentity()
flush();
{
+ llassert_always(mMatrixMode < NUM_MATRIX_MODES) ;
+
mMatrix[mMatrixMode][mMatIdx[mMatrixMode]].make_identity();
mMatHash[mMatrixMode]++;
}
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index 1aa12614ea..ef2a7395da 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -457,7 +457,8 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0,
gGL.flush();
if (!source.mFBO || !mFBO)
{
- llerrs << "Cannot copy framebuffer contents for non FBO render targets." << llendl;
+ llwarns << "Cannot copy framebuffer contents for non FBO render targets." << llendl;
+ return;
}
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index ac9dc9544d..1a03aeebb7 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -107,10 +107,13 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
{
return FALSE;
}
-
- if (!shader->attachObject("lighting/sumLightsSpecularV.glsl"))
+
+ if (!features->isAlphaLighting)
{
- return FALSE;
+ if (!shader->attachObject("lighting/sumLightsSpecularV.glsl"))
+ {
+ return FALSE;
+ }
}
if (!shader->attachObject("lighting/lightSpecularV.glsl"))
@@ -125,9 +128,12 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
return FALSE;
}
- if (!shader->attachObject("lighting/sumLightsV.glsl"))
+ if (!features->isAlphaLighting)
{
- return FALSE;
+ if (!shader->attachObject("lighting/sumLightsV.glsl"))
+ {
+ return FALSE;
+ }
}
if (!shader->attachObject("lighting/lightV.glsl"))
@@ -296,7 +302,7 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
}
shader->mFeatures.mIndexedTextureChannels = llmax(LLGLSLShader::sIndexedTextureChannels-1, 1);
}
- }
+ }
}
// NOTE order of shader object attaching is VERY IMPORTANT!!!
@@ -579,7 +585,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
text[count++] = strdup("#define ATTRIBUTE attribute\n");
text[count++] = strdup("#define VARYING varying\n");
}
- else if (version < 3.f)
+ else if (version < 3.3f)
{
//set version to 1.20
text[count++] = strdup("#version 120\n");
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 0e7060e22c..2f1c2a47c9 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -34,6 +34,10 @@
#include "llpanel.h"
#include "llresizebar.h"
#include "llcriticaldamp.h"
+#include "boost/foreach.hpp"
+
+static const F32 MIN_FRACTIONAL_SIZE = 0.0001f;
+static const F32 MAX_FRACTIONAL_SIZE = 1.f;
static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("layout_stack");
static LLLayoutStack::LayoutStackRegistry::Register<LLLayoutPanel> register_layout_panel("layout_panel");
@@ -49,39 +53,29 @@ void LLLayoutStack::OrientationNames::declareValues()
//
LLLayoutPanel::Params::Params()
: expanded_min_dim("expanded_min_dim", 0),
- min_dim("min_dim", 0),
- max_dim("max_dim", S32_MAX),
- user_resize("user_resize", true),
+ min_dim("min_dim", -1),
+ user_resize("user_resize", false),
auto_resize("auto_resize", true)
{
addSynonym(min_dim, "min_width");
addSynonym(min_dim, "min_height");
- addSynonym(max_dim, "max_width");
- addSynonym(max_dim, "max_height");
}
LLLayoutPanel::LLLayoutPanel(const Params& p)
: LLPanel(p),
- mExpandedMinDimSpecified(false),
- mExpandedMinDim(p.min_dim),
+ mExpandedMinDim(p.expanded_min_dim.isProvided() ? p.expanded_min_dim : p.min_dim),
mMinDim(p.min_dim),
- mMaxDim(p.max_dim),
mAutoResize(p.auto_resize),
mUserResize(p.user_resize),
mCollapsed(FALSE),
mCollapseAmt(0.f),
mVisibleAmt(1.f), // default to fully visible
mResizeBar(NULL),
- mFractionalSize(0.f),
+ mFractionalSize(MIN_FRACTIONAL_SIZE),
+ mTargetDim(0),
+ mIgnoreReshape(false),
mOrientation(LLLayoutStack::HORIZONTAL)
{
- // Set the expanded min dim if it is provided, otherwise it gets the p.min_dim value
- if (p.expanded_min_dim.isProvided())
- {
- mExpandedMinDimSpecified = true;
- mExpandedMinDim = p.expanded_min_dim();
- }
-
// panels initialized as hidden should not start out partially visible
if (!getVisible())
{
@@ -103,33 +97,83 @@ LLLayoutPanel::~LLLayoutPanel()
mResizeBar = NULL;
}
-void LLLayoutPanel::reshape(S32 width, S32 height, BOOL called_from_parent)
+F32 LLLayoutPanel::getAutoResizeFactor() const
+{
+ return mVisibleAmt * (1.f - mCollapseAmt);
+}
+
+F32 LLLayoutPanel::getVisibleAmount() const
+{
+ return mVisibleAmt;
+}
+
+S32 LLLayoutPanel::getLayoutDim() const
+{
+ return llround((F32)((mOrientation == LLLayoutStack::HORIZONTAL)
+ ? getRect().getWidth()
+ : getRect().getHeight()));
+}
+
+S32 LLLayoutPanel::getVisibleDim() const
+{
+ F32 min_dim = getRelevantMinDim();
+ return llround(mVisibleAmt
+ * (min_dim
+ + (((F32)mTargetDim - min_dim) * (1.f - mCollapseAmt))));
+}
+
+void LLLayoutPanel::setOrientation( LLLayoutStack::ELayoutOrientation orientation )
+{
+ mOrientation = orientation;
+ S32 layout_dim = llround((F32)((mOrientation == LLLayoutStack::HORIZONTAL)
+ ? getRect().getWidth()
+ : getRect().getHeight()));
+
+ mTargetDim = llmax(layout_dim, getMinDim());
+}
+
+void LLLayoutPanel::setVisible( BOOL visible )
{
- if (mOrientation == LLLayoutStack::HORIZONTAL)
+ if (visible != getVisible())
{
- mFractionalSize += width - llround(mFractionalSize);
+ LLLayoutStack* stackp = dynamic_cast<LLLayoutStack*>(getParent());
+ if (stackp)
+ {
+ stackp->mNeedsLayout = true;
+ }
}
- else
+ LLPanel::setVisible(visible);
+}
+
+void LLLayoutPanel::reshape( S32 width, S32 height, BOOL called_from_parent /*= TRUE*/ )
+{
+ if (width == getRect().getWidth() && height == getRect().getHeight()) return;
+
+ if (!mIgnoreReshape && mAutoResize == false)
{
- mFractionalSize += height - llround(mFractionalSize);
+ mTargetDim = (mOrientation == LLLayoutStack::HORIZONTAL) ? width : height;
+ LLLayoutStack* stackp = dynamic_cast<LLLayoutStack*>(getParent());
+ if (stackp)
+ {
+ stackp->mNeedsLayout = true;
+ }
}
LLPanel::reshape(width, height, called_from_parent);
}
-F32 LLLayoutPanel::getCollapseFactor()
+void LLLayoutPanel::handleReshape(const LLRect& new_rect, bool by_user)
{
- if (mOrientation == LLLayoutStack::HORIZONTAL)
+ LLLayoutStack* stackp = dynamic_cast<LLLayoutStack*>(getParent());
+ if (stackp)
{
- F32 collapse_amt =
- clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)getRelevantMinDim() / (F32)llmax(1, getRect().getWidth()));
- return mVisibleAmt * collapse_amt;
- }
- else
- {
- F32 collapse_amt =
- clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)getRelevantMinDim() / (F32)llmax(1, getRect().getHeight())));
- return mVisibleAmt * collapse_amt;
+ stackp->mNeedsLayout = true;
+ if (by_user)
+ {
+ // tell layout stack to account for new shape
+ stackp->updatePanelRect(this, new_rect);
+ }
}
+ LLPanel::handleReshape(new_rect, by_user);
}
//
@@ -142,20 +186,21 @@ LLLayoutStack::Params::Params()
clip("clip", true),
open_time_constant("open_time_constant", 0.02f),
close_time_constant("close_time_constant", 0.03f),
+ resize_bar_overlap("resize_bar_overlap", 1),
border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0))
{}
LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
: LLView(p),
- mMinWidth(0),
- mMinHeight(0),
mPanelSpacing(p.border_size),
mOrientation(p.orientation),
mAnimate(p.animate),
mAnimatedThisFrame(false),
+ mNeedsLayout(true),
mClip(p.clip),
mOpenTimeConstant(p.open_time_constant),
- mCloseTimeConstant(p.close_time_constant)
+ mCloseTimeConstant(p.close_time_constant),
+ mResizeBarOverlap(p.resize_bar_overlap)
{}
LLLayoutStack::~LLLayoutStack()
@@ -169,26 +214,26 @@ void LLLayoutStack::draw()
{
updateLayout();
- e_panel_list_t::iterator panel_it;
- for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+ // always clip to stack itself
+ LLLocalClipRect clip(getLocalRect());
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
{
// clip to layout rectangle, not bounding rectangle
- LLRect clip_rect = (*panel_it)->getRect();
+ LLRect clip_rect = panelp->getRect();
// scale clipping rectangle by visible amount
if (mOrientation == HORIZONTAL)
{
- clip_rect.mRight = clip_rect.mLeft + llround((F32)clip_rect.getWidth() * (*panel_it)->getCollapseFactor());
+ clip_rect.mRight = clip_rect.mLeft + panelp->getVisibleDim();
}
else
{
- clip_rect.mBottom = clip_rect.mTop - llround((F32)clip_rect.getHeight() * (*panel_it)->getCollapseFactor());
+ clip_rect.mBottom = clip_rect.mTop - panelp->getVisibleDim();
}
- LLPanel* panelp = (*panel_it);
-
- LLLocalClipRect clip(clip_rect, mClip);
- // only force drawing invisible children if visible amount is non-zero
- drawChild(panelp, 0, 0, !clip_rect.isEmpty());
+ {LLLocalClipRect clip(clip_rect, mClip);
+ // only force drawing invisible children if visible amount is non-zero
+ drawChild(panelp, 0, 0, !clip_rect.isEmpty());
+ }
}
mAnimatedThisFrame = false;
}
@@ -201,12 +246,10 @@ void LLLayoutStack::removeChild(LLView* view)
{
mPanels.erase(std::find(mPanels.begin(), mPanels.end(), embedded_panelp));
delete embedded_panelp;
+ updateFractionalSizes();
+ mNeedsLayout = true;
}
- // need to update resizebars
-
- calcMinExtents();
-
LLView::removeChild(view);
}
@@ -221,29 +264,15 @@ bool LLLayoutStack::addChild(LLView* child, S32 tab_group)
LLLayoutPanel* panelp = dynamic_cast<LLLayoutPanel*>(child);
if (panelp)
{
- panelp->mFractionalSize = (mOrientation == HORIZONTAL)
- ? panelp->getRect().getWidth()
- : panelp->getRect().getHeight();
panelp->setOrientation(mOrientation);
mPanels.push_back(panelp);
+ createResizeBar(panelp);
+ mNeedsLayout = true;
}
- return LLView::addChild(child, tab_group);
-}
+ BOOL result = LLView::addChild(child, tab_group);
-void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front)
-{
- LLLayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move);
- LLLayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel);
-
- if (!embedded_panel_to_move || !embedded_target_panel || embedded_panel_to_move == embedded_target_panel)
- {
- llwarns << "One of the panels was not found in stack or NULL was passed instead of valid panel" << llendl;
- return;
- }
- e_panel_list_t::iterator it = std::find(mPanels.begin(), mPanels.end(), embedded_panel_to_move);
- mPanels.erase(it);
- it = move_to_front ? mPanels.begin() : std::find(mPanels.begin(), mPanels.end(), embedded_target_panel);
- mPanels.insert(it, embedded_panel_to_move);
+ updateFractionalSizes();
+ return result;
}
void LLLayoutStack::addPanel(LLLayoutPanel* panel, EAnimate animate)
@@ -258,84 +287,274 @@ void LLLayoutStack::addPanel(LLLayoutPanel* panel, EAnimate animate)
}
}
-void LLLayoutStack::removePanel(LLPanel* panel)
-{
- removeChild(panel);
-}
-
void LLLayoutStack::collapsePanel(LLPanel* panel, BOOL collapsed)
{
LLLayoutPanel* panel_container = findEmbeddedPanel(panel);
if (!panel_container) return;
panel_container->mCollapsed = collapsed;
+ mNeedsLayout = true;
}
-void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize)
-{
- LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks");
- if (panel)
+void LLLayoutStack::updateLayout()
+{
+ LLFastTimer ft(FTM_UPDATE_LAYOUT);
+
+ if (!mNeedsLayout) return;
+
+ bool animation_in_progress = animatePanels();
+ F32 total_visible_fraction = 0.f;
+ F32 total_open_fraction = 0.f;
+ S32 space_to_distribute = (mOrientation == HORIZONTAL)
+ ? getRect().getWidth()
+ : getRect().getHeight();
+
+ // first, assign minimum dimensions
+ LLLayoutPanel* panelp = NULL;
+ BOOST_FOREACH(panelp, mPanels)
{
- panel->mAutoResize = auto_resize;
+ if (panelp->mAutoResize)
+ {
+ panelp->mTargetDim = panelp->getRelevantMinDim();
+ if (!panelp->mCollapsed && panelp->getVisible())
+ {
+ total_open_fraction += panelp->mFractionalSize;
+ }
+ }
+ space_to_distribute -= panelp->getVisibleDim() + llround((F32)mPanelSpacing * panelp->getVisibleAmount());
+ total_visible_fraction += panelp->mFractionalSize;
}
-}
-void LLLayoutStack::setPanelUserResize(const std::string& panel_name, BOOL user_resize)
+ llassert(total_visible_fraction < 1.01f);
+
+ // don't need spacing after last panel
+ space_to_distribute += panelp ? llround((F32)mPanelSpacing * panelp->getVisibleAmount()) : 0;
+
+ F32 fraction_distributed = 0.f;
+ if (space_to_distribute > 0 && total_visible_fraction > 0.f)
+ { // give space proportionally to visible auto resize panels
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
+ {
+ if (panelp->mAutoResize)
+ {
+ F32 fraction_to_distribute = (panelp->mFractionalSize * panelp->getAutoResizeFactor()) / (total_visible_fraction);
+ S32 delta = llround((F32)space_to_distribute * fraction_to_distribute);
+ fraction_distributed += fraction_to_distribute;
+ panelp->mTargetDim += delta;
+ }
+ }
+ }
+
+ if (fraction_distributed < total_visible_fraction)
+ { // distribute any left over pixels to non-collapsed, visible panels
+ F32 fraction_left = total_visible_fraction - fraction_distributed;
+ S32 space_left = llround((F32)space_to_distribute * (fraction_left / total_visible_fraction));
+
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
+ {
+ if (panelp->mAutoResize
+ && !panelp->mCollapsed
+ && panelp->getVisible())
+ {
+ S32 space_for_panel = llmax(0, llround((F32)space_left * (panelp->mFractionalSize / total_open_fraction)));
+ panelp->mTargetDim += space_for_panel;
+ space_left -= space_for_panel;
+ total_open_fraction -= panelp->mFractionalSize;
+ }
+ }
+ }
+
+ F32 cur_pos = (mOrientation == HORIZONTAL) ? 0.f : (F32)getRect().getHeight();
+
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
+ {
+ F32 panel_dim = llmax(panelp->getExpandedMinDim(), panelp->mTargetDim);
+ F32 panel_visible_dim = panelp->getVisibleDim();
+
+ LLRect panel_rect;
+ if (mOrientation == HORIZONTAL)
+ {
+ panel_rect.setLeftTopAndSize(llround(cur_pos),
+ getRect().getHeight(),
+ llround(panel_dim),
+ getRect().getHeight());
+ }
+ else
+ {
+ panel_rect.setLeftTopAndSize(0,
+ llround(cur_pos),
+ getRect().getWidth(),
+ llround(panel_dim));
+ }
+ panelp->setIgnoreReshape(true);
+ panelp->setShape(panel_rect);
+ panelp->setIgnoreReshape(false);
+
+ LLRect resize_bar_rect(panel_rect);
+
+ F32 panel_spacing = (F32)mPanelSpacing * panelp->getVisibleAmount();
+ if (mOrientation == HORIZONTAL)
+ {
+ resize_bar_rect.mLeft = panel_rect.mRight - mResizeBarOverlap;
+ resize_bar_rect.mRight = panel_rect.mRight + (S32)(llround(panel_spacing)) + mResizeBarOverlap;
+
+ cur_pos += panel_visible_dim + panel_spacing;
+ }
+ else //VERTICAL
+ {
+ resize_bar_rect.mTop = panel_rect.mBottom + mResizeBarOverlap;
+ resize_bar_rect.mBottom = panel_rect.mBottom - (S32)(llround(panel_spacing)) - mResizeBarOverlap;
+
+ cur_pos -= panel_visible_dim + panel_spacing;
+ }
+ panelp->mResizeBar->setShape(resize_bar_rect);
+ }
+
+ updateResizeBarLimits();
+
+ // clear animation flag at end, since panel resizes will set it
+ // and leave it set if there is any animation in progress
+ mNeedsLayout = animation_in_progress;
+} // end LLLayoutStack::updateLayout
+
+LLLayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
{
- LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+ if (!panelp) return NULL;
- if (panel)
+ e_panel_list_t::const_iterator panel_it;
+ BOOST_FOREACH(LLLayoutPanel* p, mPanels)
{
- panel->mUserResize = user_resize;
+ if (p == panelp)
+ {
+ return p;
+ }
}
+ return NULL;
}
-bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_dimp)
+LLLayoutPanel* LLLayoutStack::findEmbeddedPanelByName(const std::string& name) const
{
- LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+ LLLayoutPanel* result = NULL;
- if (panel && min_dimp)
+ BOOST_FOREACH(LLLayoutPanel* p, mPanels)
{
- *min_dimp = panel->getRelevantMinDim();
+ if (p->getName() == name)
+ {
+ result = p;
+ break;
+ }
}
- return NULL != panel;
+ return result;
}
-bool LLLayoutStack::getPanelMaxSize(const std::string& panel_name, S32* max_dimp)
+void LLLayoutStack::createResizeBar(LLLayoutPanel* panelp)
{
- LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+ BOOST_FOREACH(LLLayoutPanel* lp, mPanels)
+ {
+ if (lp->mResizeBar == NULL)
+ {
+ LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
+ LLRect resize_bar_rect = getRect();
- if (panel)
+ LLResizeBar::Params resize_params;
+ resize_params.name("resize");
+ resize_params.resizing_view(lp);
+ resize_params.min_size(lp->getRelevantMinDim());
+ resize_params.side(side);
+ resize_params.snapping_enabled(false);
+ LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);
+ lp->mResizeBar = resize_bar;
+ LLView::addChild(resize_bar, 0);
+ }
+ }
+ // bring all resize bars to the front so that they are clickable even over the panels
+ // with a bit of overlap
+ for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
{
- if (max_dimp) *max_dimp = panel->mMaxDim;
+ LLResizeBar* resize_barp = (*panel_it)->mResizeBar;
+ sendChildToFront(resize_barp);
}
+}
- return NULL != panel;
+// update layout stack animations, etc. once per frame
+// NOTE: we use this to size world view based on animating UI, *before* we draw the UI
+// we might still need to call updateLayout during UI draw phase, in case UI elements
+// are resizing themselves dynamically
+//static
+void LLLayoutStack::updateClass()
+{
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
+ {
+ it->updateLayout();
+ }
}
-static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks");
-void LLLayoutStack::updateLayout(BOOL force_resize)
+void LLLayoutStack::updateFractionalSizes()
{
- LLFastTimer ft(FTM_UPDATE_LAYOUT);
- static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0);
- calcMinExtents();
- createResizeBars();
+ F32 total_resizable_dim = 0;
+ S32 num_auto_resize_panels = 0;
- // calculate current extents
- F32 total_size = 0.f;
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
+ {
+ if (panelp->mAutoResize)
+ {
+ total_resizable_dim += llmax(0, panelp->getLayoutDim() - panelp->getRelevantMinDim());
+ num_auto_resize_panels++;
+ }
+ }
+ F32 total_fractional_size = 0.f;
+
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
+ {
+ if (panelp->mAutoResize)
+ {
+ F32 panel_resizable_dim = llmax(MIN_FRACTIONAL_SIZE, (F32)(panelp->getLayoutDim() - panelp->getRelevantMinDim()));
+ panelp->mFractionalSize = panel_resizable_dim > 0.f
+ ? llclamp(panel_resizable_dim / total_resizable_dim, MIN_FRACTIONAL_SIZE, MAX_FRACTIONAL_SIZE)
+ : MIN_FRACTIONAL_SIZE;
+ total_fractional_size += panelp->mFractionalSize;
+ llassert(!llisnan(panelp->mFractionalSize));
+ }
+ }
+
+ if (total_fractional_size == 0.f)
+ { // equal distribution
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
+ {
+ if (panelp->mAutoResize)
+ {
+ panelp->mFractionalSize = MAX_FRACTIONAL_SIZE / (F32)num_auto_resize_panels;
+ }
+ }
+ }
+ else
+ { // renormalize
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
+ {
+ if (panelp->mAutoResize)
+ {
+ panelp->mFractionalSize /= total_fractional_size;
+ }
+ }
+ }
+}
+
+bool LLLayoutStack::animatePanels()
+{
+ bool animation_in_progress = false;
+
//
// animate visibility
//
- e_panel_list_t::iterator panel_it;
- for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
{
- LLLayoutPanel* panelp = (*panel_it);
- if (panelp->getVisible())
+ if (panelp->getVisible())
{
- if (mAnimate)
+ if (mAnimate && panelp->mVisibleAmt < 1.f)
{
if (!mAnimatedThisFrame)
{
@@ -345,15 +564,21 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
panelp->mVisibleAmt = 1.f;
}
}
+
+ animation_in_progress = true;
}
else
{
- panelp->mVisibleAmt = 1.f;
+ if (panelp->mVisibleAmt != 1.f)
+ {
+ panelp->mVisibleAmt = 1.f;
+ animation_in_progress = true;
+ }
}
}
else // not visible
{
- if (mAnimate)
+ if (mAnimate && panelp->mVisibleAmt > 0.f)
{
if (!mAnimatedThisFrame)
{
@@ -363,297 +588,213 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
panelp->mVisibleAmt = 0.f;
}
}
+
+ animation_in_progress = true;
}
else
{
- panelp->mVisibleAmt = 0.f;
+ if (panelp->mVisibleAmt != 0.f)
+ {
+ panelp->mVisibleAmt = 0.f;
+ animation_in_progress = true;
+ }
}
}
F32 collapse_state = panelp->mCollapsed ? 1.f : 0.f;
- panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, collapse_state, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
-
- total_size += panelp->mFractionalSize * panelp->getCollapseFactor();
- // want n-1 panel gaps for n panels
- if (panel_it != mPanels.begin())
- {
- total_size += mPanelSpacing;
- }
- }
-
- S32 num_resizable_panels = 0;
- F32 shrink_headroom_available = 0.f;
- F32 shrink_headroom_total = 0.f;
- for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
- {
- LLLayoutPanel* panelp = (*panel_it);
-
- // panels that are not fully visible do not count towards shrink headroom
- if (panelp->getCollapseFactor() < 1.f)
- {
- continue;
- }
-
- F32 cur_size = panelp->mFractionalSize;
- F32 min_size = (F32)panelp->getRelevantMinDim();
-
- // if currently resizing a panel or the panel is flagged as not automatically resizing
- // only track total available headroom, but don't use it for automatic resize logic
- if (panelp->mResizeBar->hasMouseCapture()
- || (!panelp->mAutoResize
- && !force_resize))
- {
- shrink_headroom_total += cur_size - min_size;
- }
- else
- {
- num_resizable_panels++;
-
- shrink_headroom_available += cur_size - min_size;
- shrink_headroom_total += cur_size - min_size;
- }
- }
-
- // calculate how many pixels need to be distributed among layout panels
- // positive means panels need to grow, negative means shrink
- F32 pixels_to_distribute = (mOrientation == HORIZONTAL)
- ? getRect().getWidth() - total_size
- : getRect().getHeight() - total_size;
-
- // now we distribute the pixels...
- F32 cur_x = 0.f;
- F32 cur_y = (F32)getRect().getHeight();
-
- for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
- {
- LLLayoutPanel* panelp = (*panel_it);
-
- F32 min_size = panelp->getRelevantMinDim();
- F32 delta_size = 0.f;
-
- // if panel can automatically resize (not animating, and resize flag set)...
- if (panelp->getCollapseFactor() == 1.f
- && (force_resize || panelp->mAutoResize)
- && !panelp->mResizeBar->hasMouseCapture())
+ if (panelp->mCollapseAmt != collapse_state)
{
- if (pixels_to_distribute < 0.f)
+ if (!mAnimatedThisFrame)
{
- // shrink proportionally to amount over minimum
- // so we can do this in one pass
- delta_size = (shrink_headroom_available > 0.f)
- ? pixels_to_distribute * ((F32)(panelp->mFractionalSize - min_size) / shrink_headroom_available)
- : 0.f;
- shrink_headroom_available -= (panelp->mFractionalSize - min_size);
+ panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, collapse_state, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
}
- else
+ animation_in_progress = true;
+
+ if (llabs(panelp->mCollapseAmt - collapse_state) < 0.001f)
{
- // grow all elements equally
- delta_size = pixels_to_distribute / (F32)num_resizable_panels;
- num_resizable_panels--;
+ panelp->mCollapseAmt = collapse_state;
}
-
- panelp->mFractionalSize = llmax(min_size, panelp->mFractionalSize + delta_size);
- pixels_to_distribute -= delta_size;
}
+ }
- // adjust running headroom count based on new sizes
- shrink_headroom_total += delta_size;
+ mAnimatedThisFrame = true;
- LLRect panel_rect;
- if (mOrientation == HORIZONTAL)
- {
- panel_rect.setLeftTopAndSize(llround(cur_x),
- llround(cur_y),
- llround(panelp->mFractionalSize),
- getRect().getHeight());
- }
- else
- {
- panel_rect.setLeftTopAndSize(llround(cur_x),
- llround(cur_y),
- getRect().getWidth(),
- llround(panelp->mFractionalSize));
- }
- panelp->setShape(panel_rect);
+ return animation_in_progress;
+}
- LLRect resize_bar_rect = panel_rect;
- if (mOrientation == HORIZONTAL)
- {
- resize_bar_rect.mLeft = panel_rect.mRight - resize_bar_overlap;
- resize_bar_rect.mRight = panel_rect.mRight + mPanelSpacing + resize_bar_overlap;
- }
- else
- {
- resize_bar_rect.mTop = panel_rect.mBottom + resize_bar_overlap;
- resize_bar_rect.mBottom = panel_rect.mBottom - mPanelSpacing - resize_bar_overlap;
- }
- (*panel_it)->mResizeBar->setRect(resize_bar_rect);
+void LLLayoutStack::updatePanelRect( LLLayoutPanel* resized_panel, const LLRect& new_rect )
+{
+ S32 new_dim = (mOrientation == HORIZONTAL)
+ ? new_rect.getWidth()
+ : new_rect.getHeight();
+ S32 delta_dim = new_dim - resized_panel->getVisibleDim();
+ if (delta_dim == 0) return;
- F32 size = ((*panel_it)->mFractionalSize * (*panel_it)->getCollapseFactor()) + (F32)mPanelSpacing;
- if (mOrientation == HORIZONTAL)
- {
- cur_x += size;
- }
- else //VERTICAL
- {
- cur_y -= size;
- }
- }
+ F32 total_visible_fraction = 0.f;
+ F32 delta_auto_resize_headroom = 0.f;
+ F32 total_auto_resize_headroom = 0.f;
- // update resize bars with new limits
- LLLayoutPanel* last_resizeable_panel = NULL;
- for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
- {
- LLLayoutPanel* panelp = (*panel_it);
- S32 relevant_min = panelp->getRelevantMinDim();
+ LLLayoutPanel* other_resize_panel = NULL;
+ LLLayoutPanel* following_panel = NULL;
- if (mOrientation == HORIZONTAL)
+ BOOST_REVERSE_FOREACH(LLLayoutPanel* panelp, mPanels)
+ {
+ if (panelp->mAutoResize)
{
- (*panel_it)->mResizeBar->setResizeLimits(
- relevant_min,
- relevant_min + llround(shrink_headroom_total));
+ total_auto_resize_headroom += (F32)(panelp->mTargetDim - panelp->getRelevantMinDim());
+ total_visible_fraction += panelp->mFractionalSize * panelp->getAutoResizeFactor();
}
- else //VERTICAL
+
+ if (panelp == resized_panel)
{
- (*panel_it)->mResizeBar->setResizeLimits(
- relevant_min,
- relevant_min + llround(shrink_headroom_total));
+ other_resize_panel = following_panel;
}
- // toggle resize bars based on panel visibility, resizability, etc
- BOOL resize_bar_enabled = panelp->getVisible() && (*panel_it)->mUserResize;
- (*panel_it)->mResizeBar->setVisible(resize_bar_enabled);
-
- if ((*panel_it)->mUserResize || (*panel_it)->mAutoResize)
+ if (panelp->getVisible() && !panelp->mCollapsed)
{
- last_resizeable_panel = (*panel_it);
+ following_panel = panelp;
}
}
- // hide last resize bar as there is nothing past it
- // resize bars need to be in between two resizable panels
- if (last_resizeable_panel)
+ if (resized_panel->mAutoResize == FALSE)
{
- last_resizeable_panel->mResizeBar->setVisible(FALSE);
+ delta_auto_resize_headroom += -delta_dim;
}
-
- // not enough room to fit existing contents
- if (force_resize == FALSE
- // layout did not complete by reaching target position
- && ((mOrientation == VERTICAL && llround(cur_y) != -mPanelSpacing)
- || (mOrientation == HORIZONTAL && llround(cur_x) != getRect().getWidth() + mPanelSpacing)))
+ if (other_resize_panel && other_resize_panel->mAutoResize == FALSE)
{
- // do another layout pass with all stacked elements contributing
- // even those that don't usually resize
- llassert_always(force_resize == FALSE);
- updateLayout(TRUE);
+ delta_auto_resize_headroom += delta_dim;
}
- mAnimatedThisFrame = true;
-} // end LLLayoutStack::updateLayout
+ F32 fraction_given_up = 0.f;
+ F32 fraction_remaining = 1.f;
+ F32 updated_auto_resize_headroom = total_auto_resize_headroom + delta_auto_resize_headroom;
-
-LLLayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
-{
- if (!panelp) return NULL;
-
- e_panel_list_t::const_iterator panel_it;
- for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+ enum
{
- if ((*panel_it) == panelp)
- {
- return *panel_it;
- }
- }
- return NULL;
-}
+ BEFORE_RESIZED_PANEL,
+ RESIZED_PANEL,
+ NEXT_PANEL,
+ AFTER_RESIZED_PANEL
+ } which_panel = BEFORE_RESIZED_PANEL;
-LLLayoutPanel* LLLayoutStack::findEmbeddedPanelByName(const std::string& name) const
-{
- LLLayoutPanel* result = NULL;
-
- for (e_panel_list_t::const_iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+ BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
{
- LLLayoutPanel* p = *panel_it;
+ if (!panelp->getVisible() || panelp->mCollapsed) continue;
- if (p->getName() == name)
+ if (panelp == resized_panel)
{
- result = p;
- break;
+ which_panel = RESIZED_PANEL;
}
- }
-
- return result;
-}
-
-// Compute sum of min_width or min_height of children
-void LLLayoutStack::calcMinExtents()
-{
- mMinWidth = 0;
- mMinHeight = 0;
- e_panel_list_t::iterator panel_it;
- for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
- {
- if (mOrientation == HORIZONTAL)
+ switch(which_panel)
{
- mMinWidth += (*panel_it)->getRelevantMinDim();
- if (panel_it != mPanels.begin())
+ case BEFORE_RESIZED_PANEL:
+ if (panelp->mAutoResize)
+ { // freeze current size as fraction of overall auto_resize space
+ F32 fractional_adjustment_factor = total_auto_resize_headroom / updated_auto_resize_headroom;
+ F32 new_fractional_size = llclamp(panelp->mFractionalSize * fractional_adjustment_factor,
+ MIN_FRACTIONAL_SIZE,
+ MAX_FRACTIONAL_SIZE);
+ F32 fraction_delta = (new_fractional_size - panelp->mFractionalSize);
+ fraction_given_up -= fraction_delta;
+ fraction_remaining -= panelp->mFractionalSize;
+ panelp->mFractionalSize += fraction_delta;
+ llassert(!llisnan(panelp->mFractionalSize));
+ }
+ else
{
- mMinWidth += mPanelSpacing;
+ // leave non auto-resize panels alone
}
- }
- else //VERTICAL
- {
- mMinHeight += (*panel_it)->getRelevantMinDim();
- if (panel_it != mPanels.begin())
+ break;
+ case RESIZED_PANEL:
+ if (panelp->mAutoResize)
+ { // freeze new size as fraction
+ F32 new_fractional_size = (updated_auto_resize_headroom == 0.f)
+ ? MAX_FRACTIONAL_SIZE
+ : llclamp((F32)(new_dim - panelp->getRelevantMinDim()) / updated_auto_resize_headroom, MIN_FRACTIONAL_SIZE, MAX_FRACTIONAL_SIZE);
+ fraction_given_up -= new_fractional_size - panelp->mFractionalSize;
+ fraction_remaining -= panelp->mFractionalSize;
+ panelp->mFractionalSize = new_fractional_size;
+ llassert(!llisnan(panelp->mFractionalSize));
+ }
+ else
+ { // freeze new size as original size
+ panelp->mTargetDim = new_dim;
+ fraction_remaining -= fraction_given_up;
+ }
+ which_panel = NEXT_PANEL;
+ break;
+ case NEXT_PANEL:
+ if (panelp->mAutoResize)
+ {
+ fraction_remaining -= panelp->mFractionalSize;
+ if (fraction_given_up != 0.f)
+ {
+ panelp->mFractionalSize = llclamp(panelp->mFractionalSize + fraction_given_up, MIN_FRACTIONAL_SIZE, MAX_FRACTIONAL_SIZE);
+ fraction_given_up = 0.f;
+ }
+ else
+ {
+ F32 new_fractional_size = llclamp((F32)(panelp->mTargetDim - panelp->getRelevantMinDim() + delta_auto_resize_headroom)
+ / updated_auto_resize_headroom,
+ MIN_FRACTIONAL_SIZE,
+ MAX_FRACTIONAL_SIZE);
+ fraction_given_up -= new_fractional_size - panelp->mFractionalSize;
+ panelp->mFractionalSize = new_fractional_size;
+ }
+ }
+ else
+ {
+ panelp->mTargetDim -= delta_dim;
+ }
+ which_panel = AFTER_RESIZED_PANEL;
+ break;
+ case AFTER_RESIZED_PANEL:
+ if (panelp->mAutoResize)
{
- mMinHeight += mPanelSpacing;
+ panelp->mFractionalSize = llclamp(panelp->mFractionalSize + (panelp->mFractionalSize / fraction_remaining) * fraction_given_up,
+ MIN_FRACTIONAL_SIZE,
+ MAX_FRACTIONAL_SIZE);
}
+ default:
+ break;
}
}
}
-void LLLayoutStack::createResizeBars()
+void LLLayoutStack::reshape(S32 width, S32 height, BOOL called_from_parent)
{
- for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+ mNeedsLayout = true;
+ LLView::reshape(width, height, called_from_parent);
+}
+
+void LLLayoutStack::updateResizeBarLimits()
+{
+ LLLayoutPanel* previous_visible_panelp = NULL;
+ BOOST_REVERSE_FOREACH(LLLayoutPanel* visible_panelp, mPanels)
{
- LLLayoutPanel* lp = (*panel_it);
- if (lp->mResizeBar == NULL)
+ if (!visible_panelp->getVisible() || visible_panelp->mCollapsed)
{
- LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
- LLRect resize_bar_rect = getRect();
-
- LLResizeBar::Params resize_params;
- resize_params.name("resize");
- resize_params.resizing_view(lp);
- resize_params.min_size(lp->getRelevantMinDim());
- resize_params.side(side);
- resize_params.snapping_enabled(false);
- LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);
- lp->mResizeBar = resize_bar;
- LLView::addChild(resize_bar, 0);
+ visible_panelp->mResizeBar->setVisible(FALSE);
+ continue;
+ }
- // bring all resize bars to the front so that they are clickable even over the panels
- // with a bit of overlap
- for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
- {
- LLResizeBar* resize_barp = (*panel_it)->mResizeBar;
- sendChildToFront(resize_barp);
- }
+ // toggle resize bars based on panel visibility, resizability, etc
+ if (previous_visible_panelp
+ && (visible_panelp->mUserResize || previous_visible_panelp->mUserResize) // one of the pair is user resizable
+ && (visible_panelp->mAutoResize || visible_panelp->mUserResize) // current panel is resizable
+ && (previous_visible_panelp->mAutoResize || previous_visible_panelp->mUserResize)) // previous panel is resizable
+ {
+ visible_panelp->mResizeBar->setVisible(TRUE);
+ S32 previous_panel_headroom = previous_visible_panelp->getVisibleDim() - previous_visible_panelp->getRelevantMinDim();
+ visible_panelp->mResizeBar->setResizeLimits(visible_panelp->getRelevantMinDim(),
+ visible_panelp->getVisibleDim() + previous_panel_headroom);
+ }
+ else
+ {
+ visible_panelp->mResizeBar->setVisible(FALSE);
}
- }
-}
-// update layout stack animations, etc. once per frame
-// NOTE: we use this to size world view based on animating UI, *before* we draw the UI
-// we might still need to call updateLayout during UI draw phase, in case UI elements
-// are resizing themselves dynamically
-//static
-void LLLayoutStack::updateClass()
-{
- for (instance_iter it = beginInstances(); it != endInstances(); ++it)
- {
- it->updateLayout();
+ previous_visible_panelp = visible_panelp;
}
}
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 3b308a359d..efe93f6def 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -5,7 +5,7 @@
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2010, Linden Reshasearch, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -60,6 +60,7 @@ public:
clip;
Optional<F32> open_time_constant,
close_time_constant;
+ Optional<S32> resize_bar_overlap;
Params();
};
@@ -72,12 +73,11 @@ public:
/*virtual*/ void removeChild(LLView*);
/*virtual*/ BOOL postBuild();
/*virtual*/ bool addChild(LLView* child, S32 tab_group = 0);
+ /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
+
static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL);
- S32 getMinWidth() const { return mMinWidth; }
- S32 getMinHeight() const { return mMinHeight; }
-
typedef enum e_animate
{
NO_ANIMATE,
@@ -85,47 +85,24 @@ public:
} EAnimate;
void addPanel(LLLayoutPanel* panel, EAnimate animate = NO_ANIMATE);
- void removePanel(LLPanel* panel);
void collapsePanel(LLPanel* panel, BOOL collapsed = TRUE);
S32 getNumPanels() { return mPanels.size(); }
- /**
- * Moves panel_to_move before target_panel inside layout stack (both panels should already be there).
- * If move_to_front is true target_panel is ignored and panel_to_move is moved to the beginning of mPanels
- */
- void movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front = false);
- void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize);
- void setPanelUserResize(const std::string& panel_name, BOOL user_resize);
-
- /**
- * Gets minimal dimension along layout_stack axis of the specified by name panel.
- *
- * @returns true if specified by panel_name internal panel exists, false otherwise.
- */
- bool getPanelMinSize(const std::string& panel_name, S32* min_dimp);
+ void updateLayout();
- /**
- * Gets maximal dimension along layout_stack axis of the specified by name panel.
- *
- * @returns true if specified by panel_name internal panel exists, false otherwise.
- */
- bool getPanelMaxSize(const std::string& panel_name, S32* max_dim);
-
- void updateLayout(BOOL force_resize = FALSE);
-
S32 getPanelSpacing() const { return mPanelSpacing; }
- BOOL getAnimate () const { return mAnimate; }
- void setAnimate (BOOL animate) { mAnimate = animate; }
static void updateClass();
protected:
LLLayoutStack(const Params&);
friend class LLUICtrlFactory;
+ friend class LLLayoutPanel;
private:
- void createResizeBars();
- void calcMinExtents();
+ void updateResizeBarLimits();
+ bool animatePanels();
+ void createResizeBar(LLLayoutPanel* panel);
const ELayoutOrientation mOrientation;
@@ -134,17 +111,19 @@ private:
LLLayoutPanel* findEmbeddedPanel(LLPanel* panelp) const;
LLLayoutPanel* findEmbeddedPanelByName(const std::string& name) const;
+ void updateFractionalSizes();
+ void updatePanelRect( LLLayoutPanel* param1, const LLRect& new_rect );
- S32 mMinWidth; // calculated by calcMinExtents
- S32 mMinHeight; // calculated by calcMinExtents
S32 mPanelSpacing;
// true if we already applied animation this frame
bool mAnimatedThisFrame;
bool mAnimate;
bool mClip;
- F32 mOpenTimeConstant;
- F32 mCloseTimeConstant;
+ F32 mOpenTimeConstant;
+ F32 mCloseTimeConstant;
+ bool mNeedsLayout;
+ S32 mResizeBarOverlap;
}; // end class LLLayoutStack
@@ -156,8 +135,7 @@ public:
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
{
Optional<S32> expanded_min_dim,
- min_dim,
- max_dim;
+ min_dim;
Optional<bool> user_resize,
auto_resize;
@@ -168,16 +146,19 @@ public:
void initFromParams(const Params& p);
+ void handleReshape(const LLRect& new_rect, bool by_user);
+
void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
+
- S32 getMinDim() const { return mMinDim; }
- void setMinDim(S32 value) { mMinDim = value; if (!mExpandedMinDimSpecified) mExpandedMinDim = value; }
+ void setVisible(BOOL visible);
- S32 getMaxDim() const { return mMaxDim; }
- void setMaxDim(S32 value) { mMaxDim = value; }
+ S32 getLayoutDim() const;
+ S32 getMinDim() const { return (mMinDim >= 0 || mAutoResize) ? llmax(0, mMinDim) : getLayoutDim(); }
+ void setMinDim(S32 value) { mMinDim = value; }
- S32 getExpandedMinDim() const { return mExpandedMinDim; }
- void setExpandedMinDim(S32 value) { mExpandedMinDim = value; mExpandedMinDimSpecified = true; }
+ S32 getExpandedMinDim() const { return mExpandedMinDim >= 0 ? mExpandedMinDim : mMinDim; }
+ void setExpandedMinDim(S32 value) { mExpandedMinDim = value; }
S32 getRelevantMinDim() const
{
@@ -185,29 +166,35 @@ public:
if (!mCollapsed)
{
- min_dim = mExpandedMinDim;
+ min_dim = getExpandedMinDim();
}
return min_dim;
}
- F32 getCollapseFactor();
- void setOrientation(LLLayoutStack::ELayoutOrientation orientation) { mOrientation = orientation; }
+ F32 getAutoResizeFactor() const;
+ F32 getVisibleAmount() const;
+ S32 getVisibleDim() const;
+
+ void setOrientation(LLLayoutStack::ELayoutOrientation orientation);
+ void storeOriginalDim();
+
+ void setIgnoreReshape(bool ignore) { mIgnoreReshape = ignore; }
protected:
LLLayoutPanel(const Params& p);
- bool mExpandedMinDimSpecified;
+ const bool mAutoResize;
+ const bool mUserResize;
+
S32 mExpandedMinDim;
-
S32 mMinDim;
- S32 mMaxDim;
- bool mAutoResize;
- bool mUserResize;
bool mCollapsed;
F32 mVisibleAmt;
F32 mCollapseAmt;
F32 mFractionalSize;
+ S32 mTargetDim;
+ bool mIgnoreReshape;
LLLayoutStack::ELayoutOrientation mOrientation;
class LLResizeBar* mResizeBar;
};
diff --git a/indra/llui/llresizebar.cpp b/indra/llui/llresizebar.cpp
index 02f60c76fa..87aeb4d7a7 100644
--- a/indra/llui/llresizebar.cpp
+++ b/indra/llui/llresizebar.cpp
@@ -79,6 +79,8 @@ LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)
BOOL LLResizeBar::handleMouseDown(S32 x, S32 y, MASK mask)
{
+ if (!canResize()) return FALSE;
+
// Route future Mouse messages here preemptively. (Release on mouse up.)
// No handler needed for focus lost since this clas has no state that depends on it.
gFocusMgr.setMouseCapture( this );
@@ -243,7 +245,7 @@ BOOL LLResizeBar::handleHover(S32 x, S32 y, MASK mask)
handled = TRUE;
}
- if( handled )
+ if( handled && canResize() )
{
switch( mSide )
{
diff --git a/indra/llui/llresizebar.h b/indra/llui/llresizebar.h
index 0725fbd846..6daf191918 100644
--- a/indra/llui/llresizebar.h
+++ b/indra/llui/llresizebar.h
@@ -70,6 +70,7 @@ public:
void setResizeLimits( S32 min_size, S32 max_size ) { mMinSize = min_size; mMaxSize = max_size; }
void setEnableSnapping(BOOL enable) { mSnappingEnabled = enable; }
void setAllowDoubleClickSnapping(BOOL allow) { mAllowDoubleClickSnapping = allow; }
+ bool canResize() { return getEnabled() && mMaxSize > mMinSize; }
private:
S32 mDragLastScreenX;
diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp
index fe3f688fc5..ad4cc20d9a 100644
--- a/indra/llui/llscrollcontainer.cpp
+++ b/indra/llui/llscrollcontainer.cpp
@@ -424,63 +424,66 @@ void LLScrollContainer::draw()
focusFirstItem();
}
- // Draw background
- if( mIsOpaque )
+ if (getRect().isValid())
{
- F32 alpha = getCurrentTransparency();
-
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gl_rect_2d(mInnerRect, mBackgroundColor.get() % alpha);
- }
-
- // Draw mScrolledViews and update scroll bars.
- // get a scissor region ready, and draw the scrolling view. The
- // scissor region ensures that we don't draw outside of the bounds
- // of the rectangle.
- if( mScrolledView )
- {
- updateScroll();
-
- // Draw the scrolled area.
+ // Draw background
+ if( mIsOpaque )
{
- S32 visible_width = 0;
- S32 visible_height = 0;
- BOOL show_v_scrollbar = FALSE;
- BOOL show_h_scrollbar = FALSE;
- calcVisibleSize( &visible_width, &visible_height, &show_h_scrollbar, &show_v_scrollbar );
+ F32 alpha = getCurrentTransparency();
- LLLocalClipRect clip(LLRect(mInnerRect.mLeft,
- mInnerRect.mBottom + (show_h_scrollbar ? scrollbar_size : 0) + visible_height,
- mInnerRect.mRight - (show_v_scrollbar ? scrollbar_size: 0),
- mInnerRect.mBottom + (show_h_scrollbar ? scrollbar_size : 0)
- ));
- drawChild(mScrolledView);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gl_rect_2d(mInnerRect, mBackgroundColor.get() % alpha);
}
- }
+
+ // Draw mScrolledViews and update scroll bars.
+ // get a scissor region ready, and draw the scrolling view. The
+ // scissor region ensures that we don't draw outside of the bounds
+ // of the rectangle.
+ if( mScrolledView )
+ {
+ updateScroll();
- // Highlight border if a child of this container has keyboard focus
- if( mBorder->getVisible() )
- {
- mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus(this) );
- }
+ // Draw the scrolled area.
+ {
+ S32 visible_width = 0;
+ S32 visible_height = 0;
+ BOOL show_v_scrollbar = FALSE;
+ BOOL show_h_scrollbar = FALSE;
+ calcVisibleSize( &visible_width, &visible_height, &show_h_scrollbar, &show_v_scrollbar );
- // Draw all children except mScrolledView
- // Note: scrollbars have been adjusted by above drawing code
- for (child_list_const_reverse_iter_t child_iter = getChildList()->rbegin();
- child_iter != getChildList()->rend(); ++child_iter)
- {
- LLView *viewp = *child_iter;
- if( sDebugRects )
- {
- sDepth++;
+ LLLocalClipRect clip(LLRect(mInnerRect.mLeft,
+ mInnerRect.mBottom + (show_h_scrollbar ? scrollbar_size : 0) + visible_height,
+ mInnerRect.mRight - (show_v_scrollbar ? scrollbar_size: 0),
+ mInnerRect.mBottom + (show_h_scrollbar ? scrollbar_size : 0)
+ ));
+ drawChild(mScrolledView);
+ }
}
- if( (viewp != mScrolledView) && viewp->getVisible() )
+
+ // Highlight border if a child of this container has keyboard focus
+ if( mBorder->getVisible() )
{
- drawChild(viewp);
+ mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus(this) );
}
- if( sDebugRects )
+
+ // Draw all children except mScrolledView
+ // Note: scrollbars have been adjusted by above drawing code
+ for (child_list_const_reverse_iter_t child_iter = getChildList()->rbegin();
+ child_iter != getChildList()->rend(); ++child_iter)
{
- sDepth--;
+ LLView *viewp = *child_iter;
+ if( sDebugRects )
+ {
+ sDepth++;
+ }
+ if( (viewp != mScrolledView) && viewp->getVisible() )
+ {
+ drawChild(viewp);
+ }
+ if( sDebugRects )
+ {
+ sDepth--;
+ }
}
}
} // end draw
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index 7f96c1373c..9b31a6449d 100644
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -151,14 +151,20 @@ void LLToolBar::createContextMenu()
if (menu)
{
menu->setBackgroundColor(LLUIColorTable::instance().getColor("MenuPopupBgColor"));
-
mPopupMenuHandle = menu->getHandle();
+ mRemoveButtonHandle = menu->getChild<LLView>("Remove button")->getHandle();
}
else
{
llwarns << "Unable to load toolbars context menu." << llendl;
}
}
+
+ if (mRemoveButtonHandle.get())
+ {
+ // Disable/Enable the "Remove button" menu item depending on whether or not a button was clicked
+ mRemoveButtonHandle.get()->setEnabled(mRightMouseTargetButton != NULL);
+ }
}
void LLToolBar::initFromParams(const LLToolBar::Params& p)
@@ -401,6 +407,7 @@ BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
// Determine which button the mouse was over during the click in case the context menu action
// is intended to affect the button.
+ mRightMouseTargetButton = NULL;
BOOST_FOREACH(LLToolBarButton* button, mButtons)
{
LLRect button_rect;
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 51fe23ddd1..a50c60282c 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -271,6 +271,7 @@ private:
LLLayoutStack* mCenteringStack;
LLPanel* mButtonPanel;
LLHandle<class LLContextMenu> mPopupMenuHandle;
+ LLHandle<class LLView> mRemoveButtonHandle;
LLToolBarButton* mRightMouseTargetButton;
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 7abe4ecd9f..e1ee0a5b14 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -282,9 +282,6 @@ void LLView::moveChildToBackOfTabGroup(LLUICtrl* child)
// virtual
bool LLView::addChild(LLView* child, S32 tab_group)
{
- // NOTE: Changed this to not crash in release mode
- //llassert(mInDraw == false);
-
if (!child)
{
return false;
@@ -334,10 +331,11 @@ bool LLView::addChildInBack(LLView* child, S32 tab_group)
// remove the specified child from the view, and set it's parent to NULL.
void LLView::removeChild(LLView* child)
{
- llassert_always(mInDraw == false);
//llassert_always(sDepth == 0); // Avoid re-ordering while drawing; it can cause subtle iterator bugs
if (child->mParentView == this)
{
+ // if we are removing an item we are currently iterating over, that would be bad
+ llassert(child->mInDraw == false);
mChildList.remove( child );
child->mParentView = NULL;
if (child->isCtrl())
@@ -1086,7 +1084,6 @@ void LLView::draw()
void LLView::drawChildren()
{
- mInDraw = true;
if (!mChildList.empty())
{
LLView* rootp = LLUI::getRootView();
@@ -1096,6 +1093,11 @@ void LLView::drawChildren()
{
child_list_reverse_iter_t child = child_iter++;
LLView *viewp = *child;
+
+ if (viewp == NULL)
+ {
+ continue;
+ }
if (viewp->getVisible() && viewp->getRect().isValid())
{
@@ -1105,7 +1107,10 @@ void LLView::drawChildren()
LLUI::pushMatrix();
{
LLUI::translate((F32)viewp->getRect().mLeft, (F32)viewp->getRect().mBottom, 0.f);
+ // flag the fact we are in draw here, in case overridden draw() method attempts to remove this widget
+ viewp->mInDraw = true;
viewp->draw();
+ viewp->mInDraw = false;
if (sDebugRects)
{
@@ -1125,7 +1130,6 @@ void LLView::drawChildren()
}
--sDepth;
}
- mInDraw = false;
}
void LLView::dirtyRect()
diff --git a/indra/llui/llwindowshade.cpp b/indra/llui/llwindowshade.cpp
index ae8b30b1ba..f5c463c961 100644
--- a/indra/llui/llwindowshade.cpp
+++ b/indra/llui/llwindowshade.cpp
@@ -160,7 +160,7 @@ void LLWindowShade::draw()
notification_area->reshape(notification_area->getRect().getWidth(),
llclamp(message_rect.getHeight() + 15,
- llmin(mFormHeight, MAX_NOTIFICATION_AREA_HEIGHT),
+ llmax(mFormHeight, MIN_NOTIFICATION_AREA_HEIGHT),
MAX_NOTIFICATION_AREA_HEIGHT));
LLUICtrl::draw();
@@ -176,12 +176,12 @@ void LLWindowShade::draw()
{
hide();
}
- else if (notification_area->getCollapseFactor() < 0.01f)
+ else if (notification_area->getVisibleAmount() < 0.01f)
{
displayLatestNotification();
}
- if (!notification_area->getVisible() && (notification_area->getCollapseFactor() < 0.001f))
+ if (!notification_area->getVisible() && (notification_area->getVisibleAmount() < 0.001f))
{
getChildRef<LLLayoutPanel>("background_area").setBackgroundVisible(false);
setMouseOpaque(false);
@@ -371,6 +371,11 @@ void LLWindowShade::setTextColor(LLColor4 color)
getChild<LLTextBox>("notification_text")->setColor(color);
}
+bool LLWindowShade::isShown() const
+{
+ return getChildRef<LLLayoutPanel>("notification_area").getVisible();
+}
+
void LLWindowShade::setCanClose(bool can_close)
{
getChildView("close_panel")->setVisible(can_close);
diff --git a/indra/llui/llwindowshade.h b/indra/llui/llwindowshade.h
index 1ae84028dd..6d753d1161 100644
--- a/indra/llui/llwindowshade.h
+++ b/indra/llui/llwindowshade.h
@@ -48,6 +48,9 @@ public:
void show(LLNotificationPtr);
/*virtual*/ void draw();
void hide();
+
+ bool isShown() const;
+
void setBackgroundImage(LLUIImage* image);
void setTextColor(LLColor4 color);
void setCanClose(bool can_close);
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 52c27b6736..228fbefd19 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -1083,6 +1083,37 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
return FALSE;
}
+ // (EXP-1765) dump pixel data to see if there is a pattern that leads to unreproducible crash
+ LL_INFOS("Window") << "--- begin pixel format dump ---" << llendl ;
+ LL_INFOS("Window") << "pixel_format is " << pixel_format << llendl ;
+ LL_INFOS("Window") << "pfd.nSize: " << pfd.nSize << llendl ;
+ LL_INFOS("Window") << "pfd.nVersion: " << pfd.nVersion << llendl ;
+ LL_INFOS("Window") << "pfd.dwFlags: 0x" << std::hex << pfd.dwFlags << std::dec << llendl ;
+ LL_INFOS("Window") << "pfd.iPixelType: " << (int)pfd.iPixelType << llendl ;
+ LL_INFOS("Window") << "pfd.cColorBits: " << (int)pfd.cColorBits << llendl ;
+ LL_INFOS("Window") << "pfd.cRedBits: " << (int)pfd.cRedBits << llendl ;
+ LL_INFOS("Window") << "pfd.cRedShift: " << (int)pfd.cRedShift << llendl ;
+ LL_INFOS("Window") << "pfd.cGreenBits: " << (int)pfd.cGreenBits << llendl ;
+ LL_INFOS("Window") << "pfd.cGreenShift: " << (int)pfd.cGreenShift << llendl ;
+ LL_INFOS("Window") << "pfd.cBlueBits: " << (int)pfd.cBlueBits << llendl ;
+ LL_INFOS("Window") << "pfd.cBlueShift: " << (int)pfd.cBlueShift << llendl ;
+ LL_INFOS("Window") << "pfd.cAlphaBits: " << (int)pfd.cAlphaBits << llendl ;
+ LL_INFOS("Window") << "pfd.cAlphaShift: " << (int)pfd.cAlphaShift << llendl ;
+ LL_INFOS("Window") << "pfd.cAccumBits: " << (int)pfd.cAccumBits << llendl ;
+ LL_INFOS("Window") << "pfd.cAccumRedBits: " << (int)pfd.cAccumRedBits << llendl ;
+ LL_INFOS("Window") << "pfd.cAccumGreenBits: " << (int)pfd.cAccumGreenBits << llendl ;
+ LL_INFOS("Window") << "pfd.cAccumBlueBits: " << (int)pfd.cAccumBlueBits << llendl ;
+ LL_INFOS("Window") << "pfd.cAccumAlphaBits: " << (int)pfd.cAccumAlphaBits << llendl ;
+ LL_INFOS("Window") << "pfd.cDepthBits: " << (int)pfd.cDepthBits << llendl ;
+ LL_INFOS("Window") << "pfd.cStencilBits: " << (int)pfd.cStencilBits << llendl ;
+ LL_INFOS("Window") << "pfd.cAuxBuffers: " << (int)pfd.cAuxBuffers << llendl ;
+ LL_INFOS("Window") << "pfd.iLayerType: " << (int)pfd.iLayerType << llendl ;
+ LL_INFOS("Window") << "pfd.bReserved: " << (int)pfd.bReserved << llendl ;
+ LL_INFOS("Window") << "pfd.dwLayerMask: " << pfd.dwLayerMask << llendl ;
+ LL_INFOS("Window") << "pfd.dwVisibleMask: " << pfd.dwVisibleMask << llendl ;
+ LL_INFOS("Window") << "pfd.dwDamageMask: " << pfd.dwDamageMask << llendl ;
+ LL_INFOS("Window") << "--- end pixel format dump ---" << llendl ;
+
if (pfd.cColorBits < 32)
{
close();
@@ -1716,7 +1747,7 @@ void LLWindowWin32::gatherInput()
LLMemType m1(LLMemType::MTYPE_GATHER_INPUT);
- while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && msg_count < MAX_MESSAGE_PER_UPDATE)
+ while ((msg_count < MAX_MESSAGE_PER_UPDATE) && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
mCallbacks->handlePingWatchdog(this, "Main:TranslateGatherInput");
TranslateMessage(&msg);
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 3e8b365f3a..b12145d5f1 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -216,6 +216,7 @@ set(viewer_SOURCE_FILES
llfloaternotificationsconsole.cpp
llfloaterobjectweights.cpp
llfloateropenobject.cpp
+ llfloateroutbox.cpp
llfloaterpay.cpp
llfloaterperms.cpp
llfloaterpostprocess.cpp
@@ -314,6 +315,8 @@ set(viewer_SOURCE_FILES
llmaniprotate.cpp
llmanipscale.cpp
llmaniptranslate.cpp
+ llmarketplacefunctions.cpp
+ llmarketplacenotifications.cpp
llmediactrl.cpp
llmediadataclient.cpp
llmemoryview.cpp
@@ -370,7 +373,6 @@ set(viewer_SOURCE_FILES
llpanelmaininventory.cpp
llpanelmarketplaceinbox.cpp
llpanelmarketplaceinboxinventory.cpp
- llpanelmarketplaceoutbox.cpp
llpanelmarketplaceoutboxinventory.cpp
llpanelmediasettingsgeneral.cpp
llpanelmediasettingspermissions.cpp
@@ -770,6 +772,7 @@ set(viewer_HEADER_FILES
llfloaternotificationsconsole.h
llfloaterobjectweights.h
llfloateropenobject.h
+ llfloateroutbox.h
llfloaterpay.h
llfloaterperms.h
llfloaterpostprocess.h
@@ -868,6 +871,8 @@ set(viewer_HEADER_FILES
llmaniprotate.h
llmanipscale.h
llmaniptranslate.h
+ llmarketplacefunctions.h
+ llmarketplacenotifications.h
llmediactrl.h
llmediadataclient.h
llmemoryview.h
@@ -918,7 +923,6 @@ set(viewer_HEADER_FILES
llpanelmaininventory.h
llpanelmarketplaceinbox.h
llpanelmarketplaceinboxinventory.h
- llpanelmarketplaceoutbox.h
llpanelmarketplaceoutboxinventory.h
llpanelmediasettingsgeneral.h
llpanelmediasettingspermissions.h
diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
index a44b895f7b..1d1d39c786 100644
--- a/indra/newview/app_settings/commands.xml
+++ b/indra/newview/app_settings/commands.xml
@@ -135,6 +135,16 @@
is_running_function="Floater.IsOpen"
is_running_parameters="moveview"
/>
+ <command name="outbox"
+ available_in_toybox="false"
+ icon="Command_Outbox_Icon"
+ label_ref="Command_Outbox_Label"
+ tooltip_ref="Command_Outbox_Tooltip"
+ execute_function="Floater.ToggleOrBringToFront"
+ execute_parameters="outbox"
+ is_running_function="Floater.IsOpen"
+ is_running_parameters="outbox"
+ />
<command name="people"
available_in_toybox="true"
icon="Command_People_Icon"
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 1ea623791d..ea00a0204d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1828,6 +1828,28 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>CurlMaximumNumberOfHandles</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of handles curl can use (requires restart)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>256</integer>
+ </map>
+ <key>CurlRequestTimeOut</key>
+ <map>
+ <key>Comment</key>
+ <string>Max idle time of a curl request before killed (requires restart)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>120.0</real>
+ </map>
<key>CurlUseMultipleThreads</key>
<map>
<key>Comment</key>
@@ -4271,16 +4293,49 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>InventoryMarketplaceUserStatus</key>
+ <key>InventoryOutboxLogging</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable debug output associated with the Merchant Outbox.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>InventoryOutboxMaxFolderCount</key>
<map>
<key>Comment</key>
- <string>Marketplace user status.</string>
+ <string>Maximum number of subfolders allowed in a listing in the merchant outbox.</string>
<key>Persist</key>
- <integer>1</integer>
+ <integer>0</integer>
<key>Type</key>
- <string>String</string>
+ <string>U32</string>
<key>Value</key>
- <string />
+ <integer>21</integer>
+ </map>
+ <key>InventoryOutboxMaxFolderDepth</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of nested levels of subfolders allowed in a listing in the merchant outbox.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>4</integer>
+ </map>
+ <key>InventoryOutboxMaxItemCount</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of items allowed in a listing in the merchant outbox.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>200</integer>
</map>
<key>InventorySortOrder</key>
<map>
@@ -11345,17 +11400,6 @@
<key>Value</key>
<real>3</real>
</map>
- <key>UIResizeBarOverlap</key>
- <map>
- <key>Comment</key>
- <string>Size of UI resize bar overlap</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <real>1</real>
- </map>
<key>UIScaleFactor</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
index b09441f7eb..0170ad4b55 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
@@ -30,7 +30,6 @@ ATTRIBUTE vec3 normal;
ATTRIBUTE vec4 diffuse_color;
ATTRIBUTE vec2 texcoord0;
-vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
mat4 getObjectSkinnedTransform();
void calcAtmospherics(vec3 inPositionEye);
@@ -38,8 +37,6 @@ float calcDirectionalLight(vec3 n, vec3 l);
vec3 atmosAmbient(vec3 light);
vec3 atmosAffectDirectionalLight(float lightIntensity);
-vec3 scaleDownLight(vec3 light);
-vec3 scaleUpLight(vec3 light);
VARYING vec3 vary_position;
VARYING vec3 vary_ambient;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
index 88fe3c3dee..e612efba61 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
@@ -57,7 +57,7 @@ float getDepth(vec2 pos_screen)
float calc_cof(float depth)
{
- float sc = abs(depth-focal_distance)/-depth*blur_constant;
+ float sc = (depth-focal_distance)/-depth*blur_constant;
sc /= magnification;
@@ -79,9 +79,10 @@ void main()
vec4 diff = texture2DRect(diffuseRect, vary_fragcoord.xy);
float sc = calc_cof(depth);
- sc = min(abs(sc), max_cof);
+ sc = min(sc, max_cof);
+ sc = max(sc, -max_cof);
vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy/screen_res);
gl_FragColor.rgb = diff.rgb + bloom.rgb;
- gl_FragColor.a = sc/max_cof;
+ gl_FragColor.a = sc/max_cof*0.5+0.5;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl b/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
index 21453aefaa..01e3505359 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
@@ -48,7 +48,7 @@ void main()
vec4 diff = texture2DRect(lightMap, vary_fragcoord.xy);
- float a = min(diff.a * max_cof*res_scale*res_scale, 1.0);
+ float a = min(abs(diff.a*2.0-1.0) * max_cof*res_scale*res_scale, 1.0);
if (a > 0.25 && a < 0.75)
{ //help out the transition a bit
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
index 4603d99c5e..18d451bf87 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
@@ -42,7 +42,7 @@ void dofSample(inout vec4 diff, inout float w, float min_sc, vec2 tc)
{
vec4 s = texture2DRect(diffuseRect, tc);
- float sc = s.a*max_cof;
+ float sc = abs(s.a*2.0-1.0)*max_cof;
if (sc > min_sc) //sampled pixel is more "out of focus" than current sample radius
{
@@ -57,6 +57,20 @@ void dofSample(inout vec4 diff, inout float w, float min_sc, vec2 tc)
}
}
+void dofSampleNear(inout vec4 diff, inout float w, float min_sc, vec2 tc)
+{
+ vec4 s = texture2DRect(diffuseRect, tc);
+
+ float wg = 0.25;
+
+ // de-weight dull areas to make highlights 'pop'
+ wg += s.r+s.g+s.b;
+
+ diff += wg*s;
+
+ w += wg;
+}
+
void main()
{
vec2 tc = vary_fragcoord.xy;
@@ -66,12 +80,30 @@ void main()
{
float w = 1.0;
- float sc = diff.a*max_cof;
-
+ float sc = (diff.a*2.0-1.0)*max_cof;
+
float PI = 3.14159265358979323846264;
// sample quite uniformly spaced points within a circle, for a circular 'bokeh'
+ if (sc > 0.5)
+ {
+ while (sc > 0.5)
+ {
+ int its = int(max(1.0,(sc*3.7)));
+ for (int i=0; i<its; ++i)
+ {
+ float ang = sc+i*2*PI/its; // sc is added for rotary perturbance
+ float samp_x = sc*sin(ang);
+ float samp_y = sc*cos(ang);
+ // you could test sample coords against an interesting non-circular aperture shape here, if desired.
+ dofSampleNear(diff, w, sc, vary_fragcoord.xy + vec2(samp_x,samp_y));
+ }
+ sc -= 1.0;
+ }
+ }
+ else if (sc < -0.5)
{
+ sc = abs(sc);
while (sc > 0.5)
{
int its = int(max(1.0,(sc*3.7)));
@@ -86,7 +118,7 @@ void main()
sc -= 1.0;
}
}
-
+
diff /= w;
}
diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp
index 1edc96e165..4097ff707c 100644
--- a/indra/newview/llagentwearablesfetch.cpp
+++ b/indra/newview/llagentwearablesfetch.cpp
@@ -111,6 +111,12 @@ void LLInitialWearablesFetch::add(InitialWearableData &data)
void LLInitialWearablesFetch::processContents()
{
+ if(!gAgentAvatarp) //no need to process wearables if the agent avatar is deleted.
+ {
+ delete this;
+ return ;
+ }
+
// Fetch the wearable items from the Current Outfit Folder
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t wearable_array;
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 0861fe85a8..49fbdbf1df 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -45,6 +45,8 @@
#include "llwindow.h"
#include "llviewerstats.h"
#include "llviewerstatsrecorder.h"
+#include "llmarketplacefunctions.h"
+#include "llmarketplacenotifications.h"
#include "llmd5.h"
#include "llmeshrepository.h"
#include "llpumpio.h"
@@ -720,7 +722,9 @@ bool LLAppViewer::init()
// *NOTE:Mani - LLCurl::initClass is not thread safe.
// Called before threads are created.
- LLCurl::initClass(gSavedSettings.getBOOL("CurlUseMultipleThreads"));
+ LLCurl::initClass(gSavedSettings.getF32("CurlRequestTimeOut"),
+ gSavedSettings.getS32("CurlMaximumNumberOfHandles"),
+ gSavedSettings.getBOOL("CurlUseMultipleThreads"));
LL_INFOS("InitInfo") << "LLCurl initialized." << LL_ENDL ;
LLMachineID::init();
@@ -1346,17 +1350,19 @@ bool LLAppViewer::mainLoop()
{
S32 work_pending = 0;
S32 io_pending = 0;
+ F32 max_time = llmin(gFrameIntervalSeconds*10.f, 1.f);
+
{
LLFastTimer ftm(FTM_TEXTURE_CACHE);
- work_pending += LLAppViewer::getTextureCache()->update(1); // unpauses the texture cache thread
+ work_pending += LLAppViewer::getTextureCache()->update(max_time); // unpauses the texture cache thread
}
{
LLFastTimer ftm(FTM_DECODE);
- work_pending += LLAppViewer::getImageDecodeThread()->update(1); // unpauses the image thread
+ work_pending += LLAppViewer::getImageDecodeThread()->update(max_time); // unpauses the image thread
}
{
LLFastTimer ftm(FTM_DECODE);
- work_pending += LLAppViewer::getTextureFetch()->update(1); // unpauses the texture fetch thread
+ work_pending += LLAppViewer::getTextureFetch()->update(max_time); // unpauses the texture fetch thread
}
{
@@ -4402,6 +4408,10 @@ void LLAppViewer::idle()
// update media focus
LLViewerMediaFocus::getInstance()->update();
+
+ // Update marketplace
+ LLMarketplaceInventoryImporter::update();
+ LLMarketplaceInventoryNotifications::update();
// objects and camera should be in sync, do LOD calculations now
{
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 7abecc643b..9a7cdcfa21 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -724,7 +724,7 @@ std::set<LLUUID> LLAvatarActions::getInventorySelectedUUIDs()
LLSidepanelInventory *sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
if (sidepanel_inventory)
{
- inventory_selected_uuids = sidepanel_inventory->getInboxOrOutboxSelectionList();
+ inventory_selected_uuids = sidepanel_inventory->getInboxSelectionList();
}
}
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 42e7decec1..b539ac38ed 100644..100755
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -75,6 +75,9 @@ void LLAvatarIconIDCache::load ()
LLUUID icon_id;
LLDate date;
+ if (line.length()<=uuid_len*2)
+ continue; // short line, bail out to prevent substr calls throwing exception.
+
std::string avatar_id_str = line.substr(0,uuid_len);
std::string icon_id_str = line.substr(uuid_len,uuid_len);
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 42de47e777..f530d10ddc 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -621,7 +621,6 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
panel_p.has_border = false;
panel_p.mouse_opaque = false;
panel_p.min_dim = 30;
- panel_p.max_dim = S32_MAX;
panel_p.auto_resize = true;
panel_p.user_resize = false;
diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp
index a879651060..f1bc51fbe7 100644
--- a/indra/newview/llchicletbar.cpp
+++ b/indra/newview/llchicletbar.cpp
@@ -42,28 +42,6 @@ namespace
{
const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel";
- S32 get_panel_min_width(LLLayoutStack* stack, LLView* panel)
- {
- S32 minimal_width = 0;
- llassert(stack);
- if ( stack && panel && panel->getVisible() )
- {
- stack->getPanelMinSize(panel->getName(), &minimal_width);
- }
- return minimal_width;
- }
-
- S32 get_panel_max_width(LLLayoutStack* stack, LLPanel* panel)
- {
- S32 max_width = 0;
- llassert(stack);
- if ( stack && panel && panel->getVisible() )
- {
- stack->getPanelMaxSize(panel->getName(), &max_width);
- }
- return max_width;
- }
-
S32 get_curr_width(LLUICtrl* ctrl)
{
S32 cur_width = 0;
@@ -234,15 +212,8 @@ void LLChicletBar::reshape(S32 width, S32 height, BOOL called_from_parent)
{
// Firstly, update layout stack to ensure we deal with correct panel sizes.
{
- BOOL saved_anim = mToolbarStack->getAnimate();
- // Set chiclet panel to be autoresized by default.
- mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE);
- // Disable animation to prevent layout updating in several frames.
- mToolbarStack->setAnimate(FALSE);
// Force the updating of layout to reset panels collapse factor.
mToolbarStack->updateLayout();
- // Restore animate state.
- mToolbarStack->setAnimate(saved_anim);
}
// chiclet bar is narrowed
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index b696b90d84..b58efe62ab 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -1036,51 +1036,48 @@ LLViewerTexture* LLBumpImageList::getBrightnessDarknessImage(LLViewerFetchedText
llassert( (bump_code == BE_BRIGHTNESS) || (bump_code == BE_DARKNESS) );
LLViewerTexture* bump = NULL;
- const F32 BRIGHTNESS_DARKNESS_PIXEL_AREA_THRESHOLD = 1000;
- if( src_image->getMaxVirtualSize() > BRIGHTNESS_DARKNESS_PIXEL_AREA_THRESHOLD )
- {
- bump_image_map_t* entries_list = NULL;
- void (*callback_func)( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata ) = NULL;
+
+ bump_image_map_t* entries_list = NULL;
+ void (*callback_func)( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata ) = NULL;
- switch( bump_code )
- {
- case BE_BRIGHTNESS:
- entries_list = &mBrightnessEntries;
- callback_func = LLBumpImageList::onSourceBrightnessLoaded;
- break;
- case BE_DARKNESS:
- entries_list = &mDarknessEntries;
- callback_func = LLBumpImageList::onSourceDarknessLoaded;
- break;
- default:
- llassert(0);
- return NULL;
- }
+ switch( bump_code )
+ {
+ case BE_BRIGHTNESS:
+ entries_list = &mBrightnessEntries;
+ callback_func = LLBumpImageList::onSourceBrightnessLoaded;
+ break;
+ case BE_DARKNESS:
+ entries_list = &mDarknessEntries;
+ callback_func = LLBumpImageList::onSourceDarknessLoaded;
+ break;
+ default:
+ llassert(0);
+ return NULL;
+ }
- bump_image_map_t::iterator iter = entries_list->find(src_image->getID());
- if (iter != entries_list->end() && iter->second.notNull())
- {
- bump = iter->second;
- }
- else
- {
- LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,1);
- raw->clear(0x77, 0x77, 0xFF, 0xFF);
+ bump_image_map_t::iterator iter = entries_list->find(src_image->getID());
+ if (iter != entries_list->end() && iter->second.notNull())
+ {
+ bump = iter->second;
+ }
+ else
+ {
+ LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,1);
+ raw->clear(0x77, 0x77, 0xFF, 0xFF);
- (*entries_list)[src_image->getID()] = LLViewerTextureManager::getLocalTexture( raw.get(), TRUE);
- bump = (*entries_list)[src_image->getID()]; // In case callback was called immediately and replaced the image
- }
+ (*entries_list)[src_image->getID()] = LLViewerTextureManager::getLocalTexture( raw.get(), TRUE);
+ bump = (*entries_list)[src_image->getID()]; // In case callback was called immediately and replaced the image
+ }
- if (!src_image->hasCallbacks())
- { //if image has no callbacks but resolutions don't match, trigger raw image loaded callback again
- if (src_image->getWidth() != bump->getWidth() ||
- src_image->getHeight() != bump->getHeight())// ||
- //(LLPipeline::sRenderDeferred && bump->getComponents() != 4))
- {
- src_image->setBoostLevel(LLViewerTexture::BOOST_BUMP) ;
- src_image->setLoadedCallback( callback_func, 0, TRUE, FALSE, new LLUUID(src_image->getID()), NULL );
- src_image->forceToSaveRawImage(0) ;
- }
+ if (!src_image->hasCallbacks())
+ { //if image has no callbacks but resolutions don't match, trigger raw image loaded callback again
+ if (src_image->getWidth() != bump->getWidth() ||
+ src_image->getHeight() != bump->getHeight())// ||
+ //(LLPipeline::sRenderDeferred && bump->getComponents() != 4))
+ {
+ src_image->setBoostLevel(LLViewerTexture::BOOST_BUMP) ;
+ src_image->setLoadedCallback( callback_func, 0, TRUE, FALSE, new LLUUID(src_image->getID()), NULL );
+ src_image->forceToSaveRawImage(0) ;
}
}
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index 69de15d9ea..92ee8ddac6 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -63,6 +63,7 @@
const S32 PREVIEW_BORDER_WIDTH = 2;
const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH;
const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE;
+const S32 PREVIEW_VPAD = -24; // yuk, hard coded
const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16;
const S32 PREVIEW_TEXTURE_HEIGHT = 320;
@@ -99,7 +100,7 @@ BOOL LLFloaterImagePreview::postBuild()
childSetCommitCallback("clothing_type_combo", onPreviewTypeCommit, this);
mPreviewRect.set(PREVIEW_HPAD,
- PREVIEW_TEXTURE_HEIGHT,
+ PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD,
getRect().getWidth() - PREVIEW_HPAD,
PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
mPreviewImageRect.set(0.f, 1.f, 1.f, 0.f);
@@ -271,13 +272,13 @@ void LLFloaterImagePreview::draw()
gGL.begin( LLRender::QUADS );
{
gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mTop);
- gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT);
+ gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mBottom);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mBottom);
gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mTop);
- gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT);
+ gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
}
gGL.end();
@@ -303,13 +304,13 @@ void LLFloaterImagePreview::draw()
gGL.begin( LLRender::QUADS );
{
gGL.texCoord2f(0.f, 1.f);
- gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT);
+ gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
gGL.texCoord2f(0.f, 0.f);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.texCoord2f(1.f, 0.f);
gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
gGL.texCoord2f(1.f, 1.f);
- gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT);
+ gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
}
gGL.end();
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index b13a9aab88..95da8ff948 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -2025,7 +2025,6 @@ void LLPanelLandOptions::refresh()
}
mSeeAvatarsCtrl->set(parcel->getSeeAVs());
- mSeeAvatarsCtrl->setLabel(getString("see_avs_text"));
mSeeAvatarsCtrl->setEnabled(can_change_options && parcel->getHaveNewParcelLimitData());
BOOL can_change_landing_point = LLViewerParcelMgr::isParcelModifiableByAgent(parcel,
@@ -2475,27 +2474,6 @@ void LLPanelLandAccess::refresh()
mListBanned->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);
}
}
-
- LLCheckBoxWithTBAcess* maturity_checkbox = (LLCheckBoxWithTBAcess*) getChild<LLCheckBoxCtrl>( "public_access");
- LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
- if(region)
- {
- LLTextBox* maturity_textbox = maturity_checkbox->getTextBox();
- insert_maturity_into_textbox(maturity_textbox, gFloaterView->getParentFloater(this), getString("allow_public_access"));
- maturity_checkbox->reshape(maturity_checkbox->getRect().getWidth(), maturity_checkbox->getRect().getHeight(), FALSE);
- }
- else
- {
- std::string maturity_string = getString("allow_public_access");
- size_t maturity_pos = maturity_string.find(MATURITY);
-
- if (maturity_pos != std::string::npos)
- {
- maturity_string.replace(maturity_pos, MATURITY.length(), std::string(""));
- }
-
- maturity_checkbox->setLabel(maturity_string);
- }
if(parcel->getRegionDenyAnonymousOverride())
{
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
index 29af81d64c..2681d4b34d 100644
--- a/indra/newview/llfloaternotificationsconsole.cpp
+++ b/indra/newview/llfloaternotificationsconsole.cpp
@@ -220,7 +220,7 @@ void LLFloaterNotificationConsole::addChannel(const std::string& name, bool open
void LLFloaterNotificationConsole::removeChannel(const std::string& name)
{
LLPanel* panelp = getChild<LLPanel>(name);
- getChildRef<LLLayoutStack>("notification_channels").removePanel(panelp);
+ getChildRef<LLView>("notification_channels").removeChild(panelp);
delete panelp;
updateResizeLimits();
diff --git a/indra/newview/llfloateroutbox.cpp b/indra/newview/llfloateroutbox.cpp
new file mode 100644
index 0000000000..540f977305
--- /dev/null
+++ b/indra/newview/llfloateroutbox.cpp
@@ -0,0 +1,567 @@
+/**
+ * @file llfloateroutbox.cpp
+ * @brief Implementation of the merchant outbox window
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloateroutbox.h"
+
+#include "llfloaterreg.h"
+#include "llfolderview.h"
+#include "llinventorybridge.h"
+#include "llinventorymodelbackgroundfetch.h"
+#include "llinventoryobserver.h"
+#include "llinventorypanel.h"
+#include "llmarketplacefunctions.h"
+#include "llnotificationhandler.h"
+#include "llnotificationmanager.h"
+#include "llnotificationsutil.h"
+#include "lltextbox.h"
+#include "lltransientfloatermgr.h"
+#include "lltrans.h"
+#include "llviewernetwork.h"
+#include "llwindowshade.h"
+
+#define USE_WINDOWSHADE_DIALOGS 0
+
+
+///----------------------------------------------------------------------------
+/// LLOutboxNotification class
+///----------------------------------------------------------------------------
+
+bool LLNotificationsUI::LLOutboxNotification::processNotification(const LLSD& notify)
+{
+ LLFloaterOutbox* outbox_floater = LLFloaterReg::getTypedInstance<LLFloaterOutbox>("outbox");
+
+ outbox_floater->showNotification(notify);
+
+ return false;
+}
+
+
+///----------------------------------------------------------------------------
+/// LLOutboxAddedObserver helper class
+///----------------------------------------------------------------------------
+
+class LLOutboxAddedObserver : public LLInventoryCategoryAddedObserver
+{
+public:
+ LLOutboxAddedObserver(LLFloaterOutbox * outboxFloater)
+ : LLInventoryCategoryAddedObserver()
+ , mOutboxFloater(outboxFloater)
+ {
+ }
+
+ void done()
+ {
+ for (cat_vec_t::iterator it = mAddedCategories.begin(); it != mAddedCategories.end(); ++it)
+ {
+ LLViewerInventoryCategory* added_category = *it;
+
+ LLFolderType::EType added_category_type = added_category->getPreferredType();
+
+ if (added_category_type == LLFolderType::FT_OUTBOX)
+ {
+ mOutboxFloater->setupOutbox(added_category->getUUID());
+ }
+ }
+ }
+
+private:
+ LLFloaterOutbox * mOutboxFloater;
+};
+
+///----------------------------------------------------------------------------
+/// LLFloaterOutbox
+///----------------------------------------------------------------------------
+
+LLFloaterOutbox::LLFloaterOutbox(const LLSD& key)
+ : LLFloater(key)
+ , mCategoriesObserver(NULL)
+ , mCategoryAddedObserver(NULL)
+ , mImportBusy(false)
+ , mImportButton(NULL)
+ , mInventoryFolderCountText(NULL)
+ , mInventoryImportInProgress(NULL)
+ , mInventoryPlaceholder(NULL)
+ , mInventoryText(NULL)
+ , mInventoryTitle(NULL)
+ , mOutboxId(LLUUID::null)
+ , mOutboxInventoryPanel(NULL)
+ , mOutboxItemCount(0)
+ , mOutboxTopLevelDropZone(NULL)
+ , mWindowShade(NULL)
+{
+}
+
+LLFloaterOutbox::~LLFloaterOutbox()
+{
+ if (mCategoriesObserver && gInventory.containsObserver(mCategoriesObserver))
+ {
+ gInventory.removeObserver(mCategoriesObserver);
+ }
+ delete mCategoriesObserver;
+
+ if (mCategoryAddedObserver && gInventory.containsObserver(mCategoryAddedObserver))
+ {
+ gInventory.removeObserver(mCategoryAddedObserver);
+ }
+ delete mCategoryAddedObserver;
+}
+
+BOOL LLFloaterOutbox::postBuild()
+{
+ mInventoryFolderCountText = getChild<LLTextBox>("outbox_folder_count");
+ mInventoryImportInProgress = getChild<LLView>("import_progress_indicator");
+ mInventoryPlaceholder = getChild<LLView>("outbox_inventory_placeholder_panel");
+ mInventoryText = mInventoryPlaceholder->getChild<LLTextBox>("outbox_inventory_placeholder_text");
+ mInventoryTitle = mInventoryPlaceholder->getChild<LLTextBox>("outbox_inventory_placeholder_title");
+
+ mImportButton = getChild<LLButton>("outbox_import_btn");
+ mImportButton->setCommitCallback(boost::bind(&LLFloaterOutbox::onImportButtonClicked, this));
+
+ mOutboxTopLevelDropZone = getChild<LLPanel>("outbox_generic_drag_target");
+
+ LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLFloaterOutbox::onFocusReceived, this));
+
+ return TRUE;
+}
+
+void LLFloaterOutbox::onClose(bool app_quitting)
+{
+ if (mWindowShade)
+ {
+ delete mWindowShade;
+
+ mWindowShade = NULL;
+ }
+}
+
+void LLFloaterOutbox::onOpen(const LLSD& key)
+{
+ //
+ // Look for an outbox and set up the inventory API
+ //
+
+ if (mOutboxId.isNull())
+ {
+ const bool do_not_create_folder = false;
+ const bool do_not_find_in_library = false;
+
+ const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, do_not_create_folder, do_not_find_in_library);
+
+ if (outbox_id.isNull())
+ {
+ // Observe category creation to catch outbox creation
+ mCategoryAddedObserver = new LLOutboxAddedObserver(this);
+ gInventory.addObserver(mCategoryAddedObserver);
+ }
+ else
+ {
+ setupOutbox(outbox_id);
+ }
+ }
+
+ updateView();
+
+ //
+ // Trigger fetch of outbox contents
+ //
+
+ fetchOutboxContents();
+}
+
+void LLFloaterOutbox::onFocusReceived()
+{
+ fetchOutboxContents();
+}
+
+void LLFloaterOutbox::fetchOutboxContents()
+{
+ if (mOutboxId.notNull())
+ {
+ LLInventoryModelBackgroundFetch::instance().start(mOutboxId);
+ }
+}
+
+void LLFloaterOutbox::setupOutbox(const LLUUID& outboxId)
+{
+ llassert(outboxId.notNull());
+ llassert(mOutboxId.isNull());
+ llassert(mCategoriesObserver == NULL);
+
+ mOutboxId = outboxId;
+
+ // No longer need to observe new category creation
+ if (mCategoryAddedObserver && gInventory.containsObserver(mCategoryAddedObserver))
+ {
+ gInventory.removeObserver(mCategoryAddedObserver);
+ delete mCategoryAddedObserver;
+ mCategoryAddedObserver = NULL;
+ }
+
+ // Create observer for outbox modifications
+ mCategoriesObserver = new LLInventoryCategoriesObserver();
+ gInventory.addObserver(mCategoriesObserver);
+
+ mCategoriesObserver->addCategory(mOutboxId, boost::bind(&LLFloaterOutbox::onOutboxChanged, this));
+
+ //
+ // Set up the outbox inventory view
+ //
+
+ mOutboxInventoryPanel =
+ LLUICtrlFactory::createFromFile<LLInventoryPanel>("panel_outbox_inventory.xml",
+ mInventoryPlaceholder->getParent(),
+ LLInventoryPanel::child_registry_t::instance());
+
+ llassert(mOutboxInventoryPanel);
+
+ // Reshape the inventory to the proper size
+ LLRect inventory_placeholder_rect = mInventoryPlaceholder->getRect();
+ mOutboxInventoryPanel->setShape(inventory_placeholder_rect);
+
+ // Set the sort order newest to oldest
+ mOutboxInventoryPanel->setSortOrder(LLInventoryFilter::SO_FOLDERS_BY_NAME);
+ mOutboxInventoryPanel->getFilter()->markDefault();
+
+ fetchOutboxContents();
+
+ //
+ // Initialize the marketplace import API
+ //
+
+ LLMarketplaceInventoryImporter& importer = LLMarketplaceInventoryImporter::instance();
+
+ importer.setInitializationErrorCallback(boost::bind(&LLFloaterOutbox::initializationReportError, this, _1, _2));
+ importer.setStatusChangedCallback(boost::bind(&LLFloaterOutbox::importStatusChanged, this, _1));
+ importer.setStatusReportCallback(boost::bind(&LLFloaterOutbox::importReportResults, this, _1, _2));
+ importer.initialize();
+}
+
+void LLFloaterOutbox::setStatusString(const std::string& statusString)
+{
+ llassert(mInventoryFolderCountText != NULL);
+
+ mInventoryFolderCountText->setText(statusString);
+}
+
+void LLFloaterOutbox::updateFolderCount()
+{
+ S32 item_count = 0;
+
+ if (mOutboxId.notNull())
+ {
+ LLInventoryModel::cat_array_t * cats;
+ LLInventoryModel::item_array_t * items;
+ gInventory.getDirectDescendentsOf(mOutboxId, cats, items);
+
+ item_count = cats->count() + items->count();
+ }
+
+ mOutboxItemCount = item_count;
+
+ if (!mImportBusy)
+ {
+ updateFolderCountStatus();
+ }
+}
+
+void LLFloaterOutbox::updateFolderCountStatus()
+{
+ if (mOutboxInventoryPanel)
+ {
+ switch (mOutboxItemCount)
+ {
+ case 0: setStatusString(getString("OutboxFolderCount0")); break;
+ case 1: setStatusString(getString("OutboxFolderCount1")); break;
+ default:
+ {
+ std::string item_count_str = llformat("%d", mOutboxItemCount);
+
+ LLStringUtil::format_map_t args;
+ args["[NUM]"] = item_count_str;
+
+ setStatusString(getString("OutboxFolderCountN", args));
+ break;
+ }
+ }
+ }
+
+ mImportButton->setEnabled(mOutboxItemCount > 0);
+}
+
+void LLFloaterOutbox::updateView()
+{
+ updateFolderCount();
+
+ if (mOutboxItemCount > 0)
+ {
+ mOutboxInventoryPanel->setVisible(TRUE);
+ mInventoryPlaceholder->setVisible(FALSE);
+ }
+ else
+ {
+ if (mOutboxInventoryPanel)
+ {
+ mOutboxInventoryPanel->setVisible(FALSE);
+ }
+
+ mInventoryPlaceholder->setVisible(TRUE);
+
+ std::string outbox_text;
+ std::string outbox_title;
+ std::string outbox_tooltip;
+
+ const LLSD& subs = getMarketplaceStringSubstitutions();
+
+ if (mOutboxId.notNull())
+ {
+ outbox_text = LLTrans::getString("InventoryOutboxNoItems", subs);
+ outbox_title = LLTrans::getString("InventoryOutboxNoItemsTitle");
+ outbox_tooltip = LLTrans::getString("InventoryOutboxNoItemsTooltip");
+ }
+ else
+ {
+ outbox_text = LLTrans::getString("InventoryOutboxNotMerchant", subs);
+ outbox_title = LLTrans::getString("InventoryOutboxNotMerchantTitle");
+ outbox_tooltip = LLTrans::getString("InventoryOutboxNotMerchantTooltip");
+ }
+
+ mInventoryText->setValue(outbox_text);
+ mInventoryTitle->setValue(outbox_title);
+ mInventoryPlaceholder->getParent()->setToolTip(outbox_tooltip);
+ }
+}
+
+bool isAccepted(EAcceptance accept)
+{
+ return (accept >= ACCEPT_YES_COPY_SINGLE);
+}
+
+BOOL LLFloaterOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg)
+{
+ if ((mOutboxInventoryPanel == NULL) ||
+ (mWindowShade && mWindowShade->isShown()) ||
+ LLMarketplaceInventoryImporter::getInstance()->isImportInProgress())
+ {
+ return FALSE;
+ }
+
+ LLView * handled_view = childrenHandleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+ BOOL handled = (handled_view != NULL);
+
+ // Determine if the mouse is inside the inventory panel itself or just within the floater
+ bool pointInInventoryPanel = false;
+ bool pointInInventoryPanelChild = false;
+ LLFolderView * root_folder = mOutboxInventoryPanel->getRootFolder();
+ if (mOutboxInventoryPanel->getVisible())
+ {
+ S32 inv_x, inv_y;
+ localPointToOtherView(x, y, &inv_x, &inv_y, mOutboxInventoryPanel);
+
+ pointInInventoryPanel = mOutboxInventoryPanel->getRect().pointInRect(inv_x, inv_y);
+
+ LLView * inventory_panel_child_at_point = mOutboxInventoryPanel->childFromPoint(inv_x, inv_y, true);
+ pointInInventoryPanelChild = (inventory_panel_child_at_point != root_folder);
+ }
+
+ // Pass all drag and drop for this floater to the outbox inventory control
+ if (!handled || !isAccepted(*accept))
+ {
+ // Handle the drag and drop directly to the root of the outbox if we're not in the inventory panel
+ // (otherwise the inventory panel itself will handle the drag and drop operation, without any override)
+ if (!pointInInventoryPanel)
+ {
+ handled = root_folder->handleDragAndDropToThisFolder(mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+ }
+
+ mOutboxTopLevelDropZone->setBackgroundVisible(handled && !drop && isAccepted(*accept));
+ }
+ else
+ {
+ mOutboxTopLevelDropZone->setBackgroundVisible(!pointInInventoryPanelChild);
+ }
+
+ return handled;
+}
+
+BOOL LLFloaterOutbox::handleHover(S32 x, S32 y, MASK mask)
+{
+ mOutboxTopLevelDropZone->setBackgroundVisible(FALSE);
+
+ return LLFloater::handleHover(x, y, mask);
+}
+
+void LLFloaterOutbox::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ mOutboxTopLevelDropZone->setBackgroundVisible(FALSE);
+
+ LLFloater::onMouseLeave(x, y, mask);
+}
+
+void LLFloaterOutbox::onImportButtonClicked()
+{
+ mOutboxInventoryPanel->clearSelection();
+
+ mImportBusy = LLMarketplaceInventoryImporter::instance().triggerImport();
+}
+
+void LLFloaterOutbox::onOutboxChanged()
+{
+ llassert(!mOutboxId.isNull());
+
+ if (mOutboxInventoryPanel)
+ {
+ mOutboxInventoryPanel->requestSort();
+ }
+
+ fetchOutboxContents();
+
+ updateView();
+}
+
+void LLFloaterOutbox::importReportResults(U32 status, const LLSD& content)
+{
+ if (status == MarketplaceErrorCodes::IMPORT_DONE)
+ {
+ LLNotificationsUtil::add("OutboxImportComplete");
+ }
+ else if (status == MarketplaceErrorCodes::IMPORT_DONE_WITH_ERRORS)
+ {
+ const LLSD& subs = getMarketplaceStringSubstitutions();
+
+ LLNotificationsUtil::add("OutboxImportHadErrors", subs);
+ }
+ else
+ {
+ char status_string[16];
+ sprintf(status_string, "%d", status);
+
+ LLSD subs;
+ subs["[ERROR_CODE]"] = status_string;
+
+ LLNotificationsUtil::add("OutboxImportFailed", subs);
+ }
+
+ updateView();
+}
+
+void LLFloaterOutbox::importStatusChanged(bool inProgress)
+{
+ if (inProgress)
+ {
+ if (mImportBusy)
+ {
+ setStatusString(getString("OutboxImporting"));
+ }
+ else
+ {
+ setStatusString(getString("OutboxInitializing"));
+ }
+
+ mImportBusy = true;
+ mImportButton->setEnabled(false);
+ mInventoryImportInProgress->setVisible(true);
+ }
+ else
+ {
+ mImportBusy = false;
+ mImportButton->setEnabled(mOutboxItemCount > 0);
+ mInventoryImportInProgress->setVisible(false);
+ }
+
+ updateView();
+}
+
+void LLFloaterOutbox::initializationReportError(U32 status, const LLSD& content)
+{
+ if (status != MarketplaceErrorCodes::IMPORT_DONE)
+ {
+ char status_string[16];
+ sprintf(status_string, "%d", status);
+
+ LLSD subs;
+ subs["[ERROR_CODE]"] = status_string;
+
+ LLNotificationsUtil::add("OutboxInitFailed", subs);
+ }
+
+ updateView();
+}
+
+void LLFloaterOutbox::showNotification(const LLSD& notify)
+{
+ LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+
+ if (!notification)
+ {
+ llerrs << "Unable to find outbox notification!" << notify.asString() << llendl;
+
+ return;
+ }
+
+#if USE_WINDOWSHADE_DIALOGS
+
+ if (mWindowShade)
+ {
+ delete mWindowShade;
+ }
+
+ LLRect floater_rect = getLocalRect();
+ floater_rect.mTop -= getHeaderHeight();
+ floater_rect.stretch(-5, 0);
+
+ LLWindowShade::Params params;
+ params.name = "notification_shade";
+ params.rect = floater_rect;
+ params.follows.flags = FOLLOWS_ALL;
+ params.modal = true;
+ params.can_close = false;
+ params.shade_color = LLColor4::white % 0.25f;
+ params.text_color = LLColor4::white;
+
+ mWindowShade = LLUICtrlFactory::create<LLWindowShade>(params);
+
+ addChild(mWindowShade);
+ mWindowShade->show(notification);
+
+#else
+
+ LLNotificationsUI::LLEventHandler * handler =
+ LLNotificationsUI::LLNotificationManager::instance().getHandlerForNotification("alertmodal");
+
+ LLNotificationsUI::LLSysHandler * sys_handler = dynamic_cast<LLNotificationsUI::LLSysHandler *>(handler);
+ llassert(sys_handler);
+
+ sys_handler->processNotification(notify);
+
+#endif
+}
+
diff --git a/indra/newview/llfloateroutbox.h b/indra/newview/llfloateroutbox.h
new file mode 100644
index 0000000000..18baccf1c9
--- /dev/null
+++ b/indra/newview/llfloateroutbox.h
@@ -0,0 +1,114 @@
+/**
+ * @file llfloateroutbox.h
+ * @brief LLFloaterOutbox
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATEROUTBOX_H
+#define LL_LLFLOATEROUTBOX_H
+
+#include "llfloater.h"
+#include "llfoldertype.h"
+#include "llnotificationptr.h"
+
+
+class LLButton;
+class LLInventoryCategoriesObserver;
+class LLInventoryCategoryAddedObserver;
+class LLInventoryPanel;
+class LLLoadingIndicator;
+class LLNotification;
+class LLTextBox;
+class LLView;
+class LLWindowShade;
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLFloaterOutbox
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLFloaterOutbox : public LLFloater
+{
+public:
+ LLFloaterOutbox(const LLSD& key);
+ ~LLFloaterOutbox();
+
+ void setupOutbox(const LLUUID& outboxId);
+
+ // virtuals
+ BOOL postBuild();
+ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg);
+
+ void showNotification(const LLSD& notify);
+
+ BOOL handleHover(S32 x, S32 y, MASK mask);
+ void onMouseLeave(S32 x, S32 y, MASK mask);
+
+protected:
+ void fetchOutboxContents();
+
+ void importReportResults(U32 status, const LLSD& content);
+ void importStatusChanged(bool inProgress);
+ void initializationReportError(U32 status, const LLSD& content);
+
+ void onClose(bool app_quitting);
+ void onOpen(const LLSD& key);
+
+ void onFocusReceived();
+
+ void onImportButtonClicked();
+ void onOutboxChanged();
+
+ void setStatusString(const std::string& statusString);
+
+ void updateFolderCount();
+ void updateFolderCountStatus();
+ void updateView();
+
+private:
+ LLInventoryCategoriesObserver * mCategoriesObserver;
+ LLInventoryCategoryAddedObserver * mCategoryAddedObserver;
+
+ bool mImportBusy;
+ LLButton * mImportButton;
+
+ LLTextBox * mInventoryFolderCountText;
+ LLView * mInventoryImportInProgress;
+ LLView * mInventoryPlaceholder;
+ LLTextBox * mInventoryText;
+ LLTextBox * mInventoryTitle;
+
+ LLUUID mOutboxId;
+ LLInventoryPanel * mOutboxInventoryPanel;
+ U32 mOutboxItemCount;
+ LLPanel * mOutboxTopLevelDropZone;
+
+ LLWindowShade * mWindowShade;
+};
+
+#endif // LL_LLFLOATEROUTBOX_H
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 4c9c4cb154..d741b5b133 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -915,14 +915,16 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
{
panel->buildFromFile(path); // build it
LLRect new_size = panel->getRect(); // get its rectangle
- panel->setOrigin(0,0); // reset its origin point so it's not offset by -left or other XUI attributes
+ panel->setOrigin(2,2); // reset its origin point so it's not offset by -left or other XUI attributes
(*floaterp)->setTitle(path); // use the file name as its title, since panels have no guaranteed meaningful name attribute
panel->setUseBoundingRect(TRUE); // enable the use of its outer bounding rect (normally disabled because it's O(n) on the number of sub-elements)
panel->updateBoundingRect(); // update bounding rect
LLRect bounding_rect = panel->getBoundingRect(); // get the bounding rect
LLRect new_rect = panel->getRect(); // get the panel's rect
new_rect.unionWith(bounding_rect); // union them to make sure we get the biggest one possible
- (*floaterp)->reshape(new_rect.getWidth(), new_rect.getHeight() + floater_header_size); // reshape floater to match the union rect's dimensions
+ LLRect floater_rect = new_rect;
+ floater_rect.stretch(4, 4);
+ (*floaterp)->reshape(floater_rect.getWidth(), floater_rect.getHeight() + floater_header_size); // reshape floater to match the union rect's dimensions
panel->reshape(new_rect.getWidth(), new_rect.getHeight()); // reshape panel to match the union rect's dimensions as well (both are needed)
(*floaterp)->addChild(panel); // add panel as child
(*floaterp)->openFloater(); // open floater (needed?)
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index ecd4c2c3de..e0d7d67f7d 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -172,6 +172,7 @@ LLFolderView::Params::Params()
title("title"),
use_label_suffix("use_label_suffix"),
allow_multiselect("allow_multiselect", true),
+ show_empty_message("show_empty_message", true),
show_load_status("show_load_status", true),
use_ellipses("use_ellipses", false)
{
@@ -185,6 +186,7 @@ LLFolderView::LLFolderView(const Params& p)
mScrollContainer( NULL ),
mPopupMenuHandle(),
mAllowMultiSelect(p.allow_multiselect),
+ mShowEmptyMessage(p.show_empty_message),
mShowFolderHierarchy(FALSE),
mSourceID(p.task_id),
mRenameItem( NULL ),
@@ -349,10 +351,6 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
{
mFolders.insert(mFolders.begin(), folder);
}
- if (folder->numSelected())
- {
- recursiveIncrementNumDescendantsSelected(folder->numSelected());
- }
folder->setShowLoadStatus(mShowLoadStatus);
folder->setOrigin(0, 0);
folder->reshape(getRect().getWidth(), 0);
@@ -694,26 +692,6 @@ BOOL LLFolderView::changeSelection(LLFolderViewItem* selection, BOOL selected)
return rv;
}
-void LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items)
-{
- // now store resulting selection
- if (mAllowMultiSelect)
- {
- LLFolderViewItem *cur_selection = getCurSelectedItem();
- LLFolderViewFolder::extendSelection(selection, cur_selection, items);
- for (S32 i = 0; i < items.count(); i++)
- {
- addToSelectionList(items[i]);
- }
- }
- else
- {
- setSelection(selection, FALSE, FALSE);
- }
-
- mSignalSelectCallback = SIGNAL_KEYBOARD_FOCUS;
-}
-
static LLFastTimer::DeclareTimer FTM_SANITIZE_SELECTION("Sanitize Selection");
void LLFolderView::sanitizeSelection()
{
@@ -932,7 +910,7 @@ void LLFolderView::draw()
mStatusText.clear();
mStatusTextBox->setVisible( FALSE );
}
- else
+ else if (mShowEmptyMessage)
{
if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() || mCompletedFilterGeneration < mFilter->getMinRequiredGeneration())
{
@@ -966,7 +944,6 @@ void LLFolderView::draw()
// See EXT-7564, EXT-7047.
arrangeFromRoot();
}
-
}
// skip over LLFolderViewFolder::draw since we don't want the folder icon, label,
@@ -1222,7 +1199,9 @@ void LLFolderView::changeType(LLInventoryModel *model, LLFolderType::EType new_f
void LLFolderView::autoOpenItem( LLFolderViewFolder* item )
{
- if (mAutoOpenItems.check() == item || mAutoOpenItems.getDepth() >= (U32)AUTO_OPEN_STACK_DEPTH)
+ if ((mAutoOpenItems.check() == item) ||
+ (mAutoOpenItems.getDepth() >= (U32)AUTO_OPEN_STACK_DEPTH) ||
+ item->isOpen())
{
return;
}
@@ -1945,9 +1924,9 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
if (!handled)
{
if (getListener()->getUUID().notNull())
- {
- handled = LLFolderViewFolder::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
- }
+ {
+ handled = LLFolderViewFolder::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+ }
else
{
if (!mFolders.empty())
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 8af01e9102..1d018b5e6a 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -75,6 +75,7 @@ public:
Optional<std::string> title;
Optional<bool> use_label_suffix,
allow_multiselect,
+ show_empty_message,
show_load_status,
use_ellipses;
@@ -106,6 +107,8 @@ public:
U32 getSortOrder() const;
BOOL isFilterModified();
+ bool getAllowMultiSelect() { return mAllowMultiSelect; }
+
// Close all folders in the view
void closeAllFolders();
void openTopLevelFolders();
@@ -141,8 +144,6 @@ public:
// children, and keeps track of selected objects.
virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
- virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
-
virtual std::set<LLUUID> getSelectionList() const;
// make sure if ancestor is selected, descendents are not
@@ -156,7 +157,6 @@ public:
void setDraggingOverItem(LLFolderViewItem* item) { mDraggingOverItem = item; }
LLFolderViewItem* getDraggingOverItem() { return mDraggingOverItem; }
-
// deletion functionality
void removeSelectedItems();
@@ -282,6 +282,7 @@ protected:
selected_items_t mSelectedItems;
BOOL mKeyboardSelection;
BOOL mAllowMultiSelect;
+ BOOL mShowEmptyMessage;
BOOL mShowFolderHierarchy;
LLUUID mSourceID;
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index f27fd035db..8d6114c887 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -386,13 +386,6 @@ void LLFolderViewItem::changeSelectionFromRoot(LLFolderViewItem* selection, BOOL
getRoot()->changeSelection(selection, selected);
}
-void LLFolderViewItem::extendSelectionFromRoot(LLFolderViewItem* selection)
-{
- LLDynamicArray<LLFolderViewItem*> selected_items;
-
- getRoot()->extendSelection(selection, NULL, selected_items);
-}
-
std::set<LLUUID> LLFolderViewItem::getSelectionList() const
{
std::set<LLUUID> selection;
@@ -496,10 +489,6 @@ BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL openitem,
if (selection == this && !mIsSelected)
{
selectItem();
- if (mListener)
- {
- mListener->selectItem();
- }
}
else if (mIsSelected) // Deselect everything else.
{
@@ -510,7 +499,7 @@ BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL openitem,
BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selected)
{
- if (selection == this && mIsSelected != selected)
+ if (selection == this)
{
if (mIsSelected)
{
@@ -520,10 +509,6 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte
{
selectItem();
}
- if (mListener)
- {
- mListener->selectItem();
- }
return TRUE;
}
return FALSE;
@@ -531,29 +516,18 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte
void LLFolderViewItem::deselectItem(void)
{
- llassert(mIsSelected);
-
mIsSelected = FALSE;
-
- // Update ancestors' count of selected descendents.
- LLFolderViewFolder* parent_folder = getParentFolder();
- if (parent_folder)
- {
- parent_folder->recursiveIncrementNumDescendantsSelected(-1);
- }
}
void LLFolderViewItem::selectItem(void)
{
- llassert(!mIsSelected);
-
- mIsSelected = TRUE;
-
- // Update ancestors' count of selected descendents.
- LLFolderViewFolder* parent_folder = getParentFolder();
- if (parent_folder)
+ if (mIsSelected == FALSE)
{
- parent_folder->recursiveIncrementNumDescendantsSelected(1);
+ if (mListener)
+ {
+ mListener->selectItem();
+ }
+ mIsSelected = TRUE;
}
}
@@ -697,7 +671,7 @@ BOOL LLFolderViewItem::handleMouseDown( S32 x, S32 y, MASK mask )
}
else if (mask & MASK_SHIFT)
{
- extendSelectionFromRoot(this);
+ getParentFolder()->extendSelectionTo(this);
}
else
{
@@ -812,7 +786,7 @@ BOOL LLFolderViewItem::handleMouseUp( S32 x, S32 y, MASK mask )
}
else if (mask & MASK_SHIFT)
{
- extendSelectionFromRoot(this);
+ getParentFolder()->extendSelectionTo(this);
}
else
{
@@ -1125,7 +1099,6 @@ void LLFolderViewItem::draw()
LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ):
LLFolderViewItem( p ), // 0 = no create time
- mNumDescendantsSelected(0),
mIsOpen(FALSE),
mExpanderHighlighted(FALSE),
mCurHeight(0.f),
@@ -1572,21 +1545,6 @@ BOOL LLFolderViewFolder::hasFilteredDescendants()
return mMostFilteredDescendantGeneration >= getRoot()->getFilter()->getCurrentGeneration();
}
-void LLFolderViewFolder::recursiveIncrementNumDescendantsSelected(S32 increment)
-{
- LLFolderViewFolder* parent_folder = this;
- do
- {
- parent_folder->mNumDescendantsSelected += increment;
-
- // Make sure we don't have negative values.
- llassert(parent_folder->mNumDescendantsSelected >= 0);
-
- parent_folder = parent_folder->getParentFolder();
- }
- while(parent_folder);
-}
-
// Passes selection information on to children and record selection
// information if necessary.
BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem,
@@ -1599,10 +1557,6 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
{
selectItem();
}
- if (mListener)
- {
- mListener->selectItem();
- }
rv = TRUE;
}
else
@@ -1663,10 +1617,6 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, BOOL selec
deselectItem();
}
}
- if (mListener && selected)
- {
- mListener->selectItem();
- }
}
for (folders_t::iterator iter = mFolders.begin();
@@ -1690,119 +1640,261 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, BOOL selec
return rv;
}
-void LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& selected_items)
+LLFolderViewFolder* LLFolderViewFolder::getCommonAncestor(LLFolderViewItem* item_a, LLFolderViewItem* item_b, bool& reverse)
{
- // pass on to child folders first
- for (folders_t::iterator iter = mFolders.begin();
- iter != mFolders.end();)
+ if (!item_a->getParentFolder() || !item_b->getParentFolder()) return NULL;
+
+ std::deque<LLFolderViewFolder*> item_a_ancestors;
+
+ LLFolderViewFolder* parent = item_a->getParentFolder();
+ while(parent)
{
- folders_t::iterator fit = iter++;
- (*fit)->extendSelection(selection, last_selected, selected_items);
+ item_a_ancestors.push_back(parent);
+ parent = parent->getParentFolder();
}
- // handle selection of our immediate children...
- BOOL reverse_select = FALSE;
- BOOL found_last_selected = FALSE;
- BOOL found_selection = FALSE;
- LLDynamicArray<LLFolderViewItem*> items_to_select;
- LLFolderViewItem* item;
+ std::deque<LLFolderViewFolder*> item_b_ancestors;
+
+ parent = item_b->getParentFolder();
+ while(parent)
+ {
+ item_b_ancestors.push_back(parent);
+ parent = parent->getParentFolder();
+ }
- //...folders first...
- for (folders_t::iterator iter = mFolders.begin();
- iter != mFolders.end();)
+ LLFolderViewFolder* common_ancestor = item_a->getRoot();
+
+ while(item_a_ancestors.size() > item_b_ancestors.size())
{
- folders_t::iterator fit = iter++;
- item = (*fit);
- if(item == selection)
- {
- found_selection = TRUE;
- }
- else if (item == last_selected)
+ item_a = item_a_ancestors.front();
+ item_a_ancestors.pop_front();
+ }
+
+ while(item_b_ancestors.size() > item_a_ancestors.size())
+ {
+ item_b = item_b_ancestors.front();
+ item_b_ancestors.pop_front();
+ }
+
+ while(item_a_ancestors.size())
+ {
+ common_ancestor = item_a_ancestors.front();
+
+ if (item_a_ancestors.front() == item_b_ancestors.front())
{
- found_last_selected = TRUE;
- if (found_selection)
+ // which came first, sibling a or sibling b?
+ for (folders_t::iterator it = common_ancestor->mFolders.begin(), end_it = common_ancestor->mFolders.end();
+ it != end_it;
+ ++it)
{
- reverse_select = TRUE;
+ LLFolderViewItem* item = *it;
+
+ if (item == item_a)
+ {
+ reverse = false;
+ return common_ancestor;
+ }
+ if (item == item_b)
+ {
+ reverse = true;
+ return common_ancestor;
+ }
}
- }
- if (found_selection || found_last_selected)
- {
- // deselect currently selected items so they can be pushed back on queue
- if (item->isSelected())
+ for (items_t::iterator it = common_ancestor->mItems.begin(), end_it = common_ancestor->mItems.end();
+ it != end_it;
+ ++it)
{
- item->changeSelection(item, FALSE);
+ LLFolderViewItem* item = *it;
+
+ if (item == item_a)
+ {
+ reverse = false;
+ return common_ancestor;
+ }
+ if (item == item_b)
+ {
+ reverse = true;
+ return common_ancestor;
+ }
}
- items_to_select.put(item);
+ break;
}
- if (found_selection && found_last_selected)
- {
- break;
- }
+ item_a = item_a_ancestors.front();
+ item_a_ancestors.pop_front();
+ item_b = item_b_ancestors.front();
+ item_b_ancestors.pop_front();
}
- if (!(found_selection && found_last_selected))
+ return NULL;
+}
+
+void LLFolderViewFolder::gatherChildRangeExclusive(LLFolderViewItem* start, LLFolderViewItem* end, bool reverse, std::vector<LLFolderViewItem*>& items)
+{
+ bool selecting = start == NULL;
+ if (reverse)
{
- //,,,then items
- for (items_t::iterator iter = mItems.begin();
- iter != mItems.end();)
+ for (items_t::reverse_iterator it = mItems.rbegin(), end_it = mItems.rend();
+ it != end_it;
+ ++it)
{
- items_t::iterator iit = iter++;
- item = (*iit);
- if(item == selection)
+ if (*it == end)
{
- found_selection = TRUE;
+ return;
}
- else if (item == last_selected)
+ if (selecting)
{
- found_last_selected = TRUE;
- if (found_selection)
- {
- reverse_select = TRUE;
- }
+ items.push_back(*it);
}
- if (found_selection || found_last_selected)
+ if (*it == start)
{
- // deselect currently selected items so they can be pushed back on queue
- if (item->isSelected())
- {
- item->changeSelection(item, FALSE);
- }
- items_to_select.put(item);
+ selecting = true;
+ }
+ }
+ for (folders_t::reverse_iterator it = mFolders.rbegin(), end_it = mFolders.rend();
+ it != end_it;
+ ++it)
+ {
+ if (*it == end)
+ {
+ return;
}
- if (found_selection && found_last_selected)
+ if (selecting)
{
- break;
+ items.push_back(*it);
+ }
+
+ if (*it == start)
+ {
+ selecting = true;
}
}
}
-
- if (found_last_selected && found_selection)
+ else
{
- // we have a complete selection inside this folder
- for (S32 index = reverse_select ? items_to_select.getLength() - 1 : 0;
- reverse_select ? index >= 0 : index < items_to_select.getLength(); reverse_select ? index-- : index++)
+ for (folders_t::iterator it = mFolders.begin(), end_it = mFolders.end();
+ it != end_it;
+ ++it)
{
- LLFolderViewItem* item = items_to_select[index];
- if (item->changeSelection(item, TRUE))
+ if (*it == end)
{
- selected_items.put(item);
+ return;
+ }
+
+ if (selecting)
+ {
+ items.push_back(*it);
+ }
+
+ if (*it == start)
+ {
+ selecting = true;
+ }
+ }
+ for (items_t::iterator it = mItems.begin(), end_it = mItems.end();
+ it != end_it;
+ ++it)
+ {
+ if (*it == end)
+ {
+ return;
+ }
+
+ if (selecting)
+ {
+ items.push_back(*it);
+ }
+
+ if (*it == start)
+ {
+ selecting = true;
}
}
}
- else if (found_selection)
+}
+
+void LLFolderViewFolder::extendSelectionTo(LLFolderViewItem* new_selection)
+{
+ if (getRoot()->getAllowMultiSelect() == FALSE) return;
+
+ LLFolderViewItem* cur_selected_item = getRoot()->getCurSelectedItem();
+ if (cur_selected_item == NULL)
{
- // last selection was not in this folder....go ahead and select just the new item
- if (selection->changeSelection(selection, TRUE))
+ cur_selected_item = new_selection;
+ }
+
+
+ bool reverse = false;
+ LLFolderViewFolder* common_ancestor = getCommonAncestor(cur_selected_item, new_selection, reverse);
+ if (!common_ancestor) return;
+
+ LLFolderViewItem* last_selected_item_from_cur = cur_selected_item;
+ LLFolderViewFolder* cur_folder = cur_selected_item->getParentFolder();
+
+ std::vector<LLFolderViewItem*> items_to_select_forward;
+
+ while(cur_folder != common_ancestor)
+ {
+ cur_folder->gatherChildRangeExclusive(last_selected_item_from_cur, NULL, reverse, items_to_select_forward);
+
+ last_selected_item_from_cur = cur_folder;
+ cur_folder = cur_folder->getParentFolder();
+ }
+
+ std::vector<LLFolderViewItem*> items_to_select_reverse;
+
+ LLFolderViewItem* last_selected_item_from_new = new_selection;
+ cur_folder = new_selection->getParentFolder();
+ while(cur_folder != common_ancestor)
+ {
+ cur_folder->gatherChildRangeExclusive(last_selected_item_from_new, NULL, !reverse, items_to_select_reverse);
+
+ last_selected_item_from_new = cur_folder;
+ cur_folder = cur_folder->getParentFolder();
+ }
+
+ common_ancestor->gatherChildRangeExclusive(last_selected_item_from_cur, last_selected_item_from_new, reverse, items_to_select_forward);
+
+ for (std::vector<LLFolderViewItem*>::reverse_iterator it = items_to_select_reverse.rbegin(), end_it = items_to_select_reverse.rend();
+ it != end_it;
+ ++it)
+ {
+ items_to_select_forward.push_back(*it);
+ }
+
+ LLFolderView* root = getRoot();
+
+ for (std::vector<LLFolderViewItem*>::iterator it = items_to_select_forward.begin(), end_it = items_to_select_forward.end();
+ it != end_it;
+ ++it)
+ {
+ LLFolderViewItem* item = *it;
+ if (item->isSelected())
+ {
+ root->removeFromSelectionList(item);
+ }
+ else
{
- selected_items.put(selection);
+ item->selectItem();
}
+ root->addToSelectionList(item);
+ }
+
+ if (new_selection->isSelected())
+ {
+ root->removeFromSelectionList(new_selection);
+ }
+ else
+ {
+ new_selection->selectItem();
}
+ root->addToSelectionList(new_selection);
}
+
void LLFolderViewFolder::destroyView()
{
for (items_t::iterator iter = mItems.begin();
@@ -1874,19 +1966,11 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item )
ft = std::find(mFolders.begin(), mFolders.end(), f);
if (ft != mFolders.end())
{
- if ((*ft)->numSelected())
- {
- recursiveIncrementNumDescendantsSelected(-(*ft)->numSelected());
- }
mFolders.erase(ft);
}
}
else
{
- if ((*it)->isSelected())
- {
- recursiveIncrementNumDescendantsSelected(-1);
- }
mItems.erase(it);
}
//item has been removed, need to update filter
@@ -2055,11 +2139,6 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
{
mItems.push_back(item);
- if (item->isSelected())
- {
- recursiveIncrementNumDescendantsSelected(1);
- }
-
item->setRect(LLRect(0, 0, getRect().getWidth(), 0));
item->setVisible(FALSE);
@@ -2067,8 +2146,14 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
item->dirtyFilter();
- // Update the folder creation date if the child is newer than our current date
- setCreationDate(llmax<time_t>(mCreationDate, item->getCreationDate()));
+ // Update the folder creation date if the folder has no creation date
+ bool setting_date = false;
+ const time_t item_creation_date = item->getCreationDate();
+ if ((item_creation_date > 0) && (mCreationDate == 0))
+ {
+ setCreationDate(item_creation_date);
+ setting_date = true;
+ }
// Handle sorting
requestArrange();
@@ -2078,8 +2163,11 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
LLFolderViewFolder* parentp = getParentFolder();
while (parentp)
{
- // Update the folder creation date if the child is newer than our current date
- parentp->setCreationDate(llmax<time_t>(parentp->mCreationDate, item->getCreationDate()));
+ // Update the parent folder creation date
+ if (setting_date && (parentp->mCreationDate == 0))
+ {
+ parentp->setCreationDate(item_creation_date);
+ }
if (parentp->mSortFunction.isByDate())
{
@@ -2097,10 +2185,6 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
{
mFolders.push_back(folder);
- if (folder->numSelected())
- {
- recursiveIncrementNumDescendantsSelected(folder->numSelected());
- }
folder->setOrigin(0, 0);
folder->reshape(getRect().getWidth(), 0);
folder->setVisible(FALSE);
@@ -2276,33 +2360,16 @@ BOOL LLFolderViewFolder::handleDragAndDrop(S32 x, S32 y, MASK mask,
EAcceptance* accept,
std::string& tooltip_msg)
{
- LLFolderView* root_view = getRoot();
-
BOOL handled = FALSE;
- if(mIsOpen)
+
+ if (mIsOpen)
{
- handled = childrenHandleDragAndDrop(x, y, mask, drop, cargo_type,
- cargo_data, accept, tooltip_msg) != NULL;
+ handled = (childrenHandleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg) != NULL);
}
if (!handled)
{
- BOOL accepted = mListener && mListener->dragOrDrop(mask, drop,cargo_type,cargo_data, tooltip_msg);
-
- if (accepted)
- {
- mDragAndDropTarget = TRUE;
- *accept = ACCEPT_YES_MULTI;
- }
- else
- {
- *accept = ACCEPT_NO;
- }
-
- if (!drop && accepted)
- {
- root_view->autoOpenTest(this);
- }
+ handleDragAndDropToThisFolder(mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
lldebugst(LLERR_USER_INPUT) << "dragAndDrop handled by LLFolderViewFolder" << llendl;
}
@@ -2310,6 +2377,33 @@ BOOL LLFolderViewFolder::handleDragAndDrop(S32 x, S32 y, MASK mask,
return TRUE;
}
+BOOL LLFolderViewFolder::handleDragAndDropToThisFolder(MASK mask,
+ BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg)
+{
+ BOOL accepted = mListener && mListener->dragOrDrop(mask, drop, cargo_type, cargo_data, tooltip_msg);
+
+ if (accepted)
+ {
+ mDragAndDropTarget = TRUE;
+ *accept = ACCEPT_YES_MULTI;
+ }
+ else
+ {
+ *accept = ACCEPT_NO;
+ }
+
+ if (!drop && accepted)
+ {
+ getRoot()->autoOpenTest(this);
+ }
+
+ return TRUE;
+}
+
BOOL LLFolderViewFolder::handleRightMouseDown( S32 x, S32 y, MASK mask )
{
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 3433e3f7f3..2fc79f5765 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -122,6 +122,8 @@ public:
// Mostly for debugging printout purposes.
const std::string& getSearchableLabel() { return mSearchableLabel; }
+
+ BOOL isLoading() const { return mIsLoading; }
private:
BOOL mIsSelected;
@@ -164,9 +166,6 @@ protected:
// helper function to change the selection from the root.
void changeSelectionFromRoot(LLFolderViewItem* selection, BOOL selected);
- // helper function to change the selection from the root.
- void extendSelectionFromRoot(LLFolderViewItem* selection);
-
// this is an internal method used for adding items to folders. A
// no-op at this level, but reimplemented in derived classes.
virtual BOOL addItem(LLFolderViewItem*) { return FALSE; }
@@ -224,9 +223,6 @@ public:
// Returns TRUE if the selection state of this item was changed.
virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
- // this method is used to group select items
- virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items) { }
-
// this method is used to deselect this element
void deselectItem();
@@ -373,13 +369,6 @@ public:
typedef std::list<LLFolderViewItem*> items_t;
typedef std::list<LLFolderViewFolder*> folders_t;
-private:
- S32 mNumDescendantsSelected;
-
-public: // Accessed needed by LLFolderViewItem
- void recursiveIncrementNumDescendantsSelected(S32 increment);
- S32 numSelected(void) const { return mNumDescendantsSelected + (isSelected() ? 1 : 0); }
-
protected:
items_t mItems;
folders_t mFolders;
@@ -461,7 +450,7 @@ public:
virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
// this method is used to group select items
- virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
+ void extendSelectionTo(LLFolderViewItem* selection);
// Returns true is this object and all of its children can be removed.
virtual BOOL isRemovable();
@@ -547,11 +536,15 @@ public:
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg);
+ BOOL handleDragAndDropToThisFolder(MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg);
virtual void draw();
time_t getCreationDate() const;
bool isTrash() const;
- S32 getNumSelectedDescendants(void) const { return mNumDescendantsSelected; }
folders_t::const_iterator getFoldersBegin() const { return mFolders.begin(); }
folders_t::const_iterator getFoldersEnd() const { return mFolders.end(); }
@@ -560,6 +553,8 @@ public:
items_t::const_iterator getItemsBegin() const { return mItems.begin(); }
items_t::const_iterator getItemsEnd() const { return mItems.end(); }
items_t::size_type getItemsCount() const { return mItems.size(); }
+ LLFolderViewFolder* getCommonAncestor(LLFolderViewItem* item_a, LLFolderViewItem* item_b, bool& reverse);
+ void gatherChildRangeExclusive(LLFolderViewItem* start, LLFolderViewItem* end, bool reverse, std::vector<LLFolderViewItem*>& items);
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index f5cda52d44..f67464078b 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -234,12 +234,6 @@ LLIMFloater::~LLIMFloater()
//virtual
BOOL LLIMFloater::postBuild()
{
- // User-resizable control panels in P2P sessions look ugly (EXT-3470).
- if (mDialog == IM_NOTHING_SPECIAL || mDialog == IM_SESSION_P2P_INVITE)
- {
- getChild<LLLayoutStack>("im_panels")->setPanelUserResize("panel_im_control_panel", FALSE);
- }
-
const LLUUID& other_party_id = LLIMModel::getInstance()->getOtherParticipantID(mSessionID);
if (other_party_id.notNull())
{
@@ -385,9 +379,6 @@ void LLIMFloater::onSlide()
getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getParent()->getVisible());
getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getParent()->getVisible());
-
- LLLayoutStack* stack = getChild<LLLayoutStack>("im_panels");
- if (stack) stack->setAnimate(true);
}
//static
diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp
index bf6cf52298..a12ec390af 100644
--- a/indra/newview/llinspectremoteobject.cpp
+++ b/indra/newview/llinspectremoteobject.cpp
@@ -60,12 +60,10 @@ public:
private:
void update();
- void onNameCache(const LLUUID& id, const std::string& name, bool is_group);
private:
LLUUID mObjectID;
LLUUID mOwnerID;
- std::string mOwnerLegacyName;
std::string mSLurl;
std::string mName;
bool mGroupOwned;
@@ -75,7 +73,6 @@ LLInspectRemoteObject::LLInspectRemoteObject(const LLSD& sd) :
LLInspect(LLSD()),
mObjectID(NULL),
mOwnerID(NULL),
- mOwnerLegacyName(),
mSLurl(""),
mName(""),
mGroupOwned(false)
@@ -111,14 +108,6 @@ void LLInspectRemoteObject::onOpen(const LLSD& data)
mGroupOwned = data["group_owned"].asBoolean();
mSLurl = data["slurl"].asString();
- // work out the owner's name
- mOwnerLegacyName = "";
- if (gCacheName)
- {
- gCacheName->get(mOwnerID, mGroupOwned, // muting
- boost::bind(&LLInspectRemoteObject::onNameCache, this, _1, _2, _3));
- }
-
// update the inspector with the current object state
update();
@@ -144,8 +133,7 @@ void LLInspectRemoteObject::onClickMap()
void LLInspectRemoteObject::onClickBlock()
{
- LLMute::EType mute_type = mGroupOwned ? LLMute::GROUP : LLMute::AGENT;
- LLMute mute(mOwnerID, mOwnerLegacyName, mute_type);
+ LLMute mute(mObjectID, mName, LLMute::OBJECT);
LLMuteList::getInstance()->add(mute);
LLPanelBlockedList::showPanelAndSelect(mute.mID);
closeFloater();
@@ -156,12 +144,6 @@ void LLInspectRemoteObject::onClickClose()
closeFloater();
}
-void LLInspectRemoteObject::onNameCache(const LLUUID& id, const std::string& name, bool is_group)
-{
- mOwnerLegacyName = name;
- update();
-}
-
void LLInspectRemoteObject::update()
{
// show the object name as the inspector's title
@@ -198,8 +180,8 @@ void LLInspectRemoteObject::update()
// disable the Map button if we don't have a SLurl
getChild<LLUICtrl>("map_btn")->setEnabled(! mSLurl.empty());
- // disable the Block button if we don't have the owner ID
- getChild<LLUICtrl>("block_btn")->setEnabled(! mOwnerID.isNull());
+ // disable the Block button if we don't have the object ID (will this ever happen?)
+ getChild<LLUICtrl>("block_btn")->setEnabled(! mObjectID.isNull());
}
//////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index eaf9b53eb9..c0065a94e6 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -53,6 +53,7 @@
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
+#include "llmarketplacefunctions.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
#include "llpreviewanim.h"
@@ -60,6 +61,7 @@
#include "llpreviewtexture.h"
#include "llselectmgr.h"
#include "llsidepanelappearance.h"
+#include "lltooldraganddrop.h"
#include "lltrans.h"
#include "llviewerassettype.h"
#include "llviewerfoldertype.h"
@@ -71,7 +73,9 @@
#include "llwearablelist.h"
// Marketplace outbox current disabled
-#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU 0 // keep in sync with ENABLE_INVENTORY_DISPLAY_OUTBOX, ENABLE_MERCHANT_OUTBOX_PANEL
+#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU 1
+#define ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU 0
+#define BLOCK_WORN_ITEMS_IN_OUTBOX 1
typedef std::pair<LLUUID, LLUUID> two_uuids_t;
typedef std::list<two_uuids_t> two_uuids_list_t;
@@ -127,6 +131,11 @@ bool isMarketplaceCopyAction(const std::string& action)
return (("copy_to_outbox" == action) || ("move_to_outbox" == action));
}
+bool isMarketplaceSendAction(const std::string& action)
+{
+ return ("send_to_marketplace" == action);
+}
+
// +=================================================+
// | LLInvFVBridge |
// +=================================================+
@@ -462,14 +471,13 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
void hide_context_entries(LLMenuGL& menu,
const menuentry_vec_t &entries_to_show,
- const menuentry_vec_t &disabled_entries,
- BOOL append) // If append is TRUE, then new enabled entries
+ const menuentry_vec_t &disabled_entries)
{
const LLView::child_list_t *list = menu.getChildList();
// For removing double separators or leading separator. Start at true so that
// if the first element is a separator, it will not be shown.
- BOOL is_previous_entry_separator = TRUE;
+ bool is_previous_entry_separator = true;
for (LLView::child_list_t::const_iterator itor = list->begin();
itor != list->end();
@@ -485,7 +493,6 @@ void hide_context_entries(LLMenuGL& menu,
hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries);
}
-
bool found = false;
menuentry_vec_t::const_iterator itor2;
for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2)
@@ -493,6 +500,7 @@ void hide_context_entries(LLMenuGL& menu,
if (*itor2 == name)
{
found = true;
+ break;
}
}
@@ -500,9 +508,8 @@ void hide_context_entries(LLMenuGL& menu,
// between two separators).
if (found)
{
- const BOOL is_entry_separator = (dynamic_cast<LLMenuItemSeparatorGL *>(menu_item) != NULL);
- if (is_entry_separator && is_previous_entry_separator)
- found = false;
+ const bool is_entry_separator = (dynamic_cast<LLMenuItemSeparatorGL *>(menu_item) != NULL);
+ found = !(is_entry_separator && is_previous_entry_separator);
is_previous_entry_separator = is_entry_separator;
}
@@ -512,6 +519,7 @@ void hide_context_entries(LLMenuGL& menu,
{
menu_item->setVisible(FALSE);
}
+
menu_item->setEnabled(FALSE);
}
else
@@ -520,17 +528,14 @@ void hide_context_entries(LLMenuGL& menu,
// A bit of a hack so we can remember that some UI element explicitly set this to be visible
// so that some other UI element from multi-select doesn't later set this invisible.
menu_item->pushVisible(TRUE);
- if (append)
- {
- menu_item->setEnabled(TRUE);
- }
- for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2)
+
+ bool enabled = (menu_item->getEnabled() == TRUE);
+ for (itor2 = disabled_entries.begin(); enabled && (itor2 != disabled_entries.end()); ++itor2)
{
- if (*itor2 == name)
- {
- menu_item->setEnabled(FALSE);
- }
+ enabled &= (*itor2 != name);
}
+
+ menu_item->setEnabled(enabled);
}
}
}
@@ -598,25 +603,16 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
{
items.push_back(std::string("Marketplace Separator"));
- bool copyable = true;
- LLViewerInventoryItem* inv_item = gInventory.getItem(mUUID);
- if (inv_item)
- {
- copyable = inv_item->getPermissions().allowCopyBy(gAgent.getID());
- }
-
- const std::string merchant_action = ((copyable == true) ? "Merchant Copy" : "Merchant Move");
- items.push_back(merchant_action);
-
+ items.push_back(std::string("Merchant Copy"));
if (!canListOnMarketplaceNow())
{
- disabled_items.push_back(merchant_action);
+ disabled_items.push_back(std::string("Merchant Copy"));
}
}
}
}
- // Don't allow items to be pasted directly into the COF or the inbox
+ // Don't allow items to be pasted directly into the COF or the inbox/outbox
if (!isCOFFolder() && !isInboxFolder() && !isOutboxFolder())
{
items.push_back(std::string("Paste"));
@@ -657,7 +653,7 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
else if(isOutboxFolder())
{
- items.push_back(std::string("Delete"));
+ addOutboxContextMenuOptions(flags, items, disabled_items);
}
else
{
@@ -734,6 +730,32 @@ void LLInvFVBridge::addOpenRightClickMenuOption(menuentry_vec_t &items)
items.push_back(std::string("Open"));
}
+void LLInvFVBridge::addOutboxContextMenuOptions(U32 flags,
+ menuentry_vec_t &items,
+ menuentry_vec_t &disabled_items)
+{
+ items.push_back(std::string("Rename"));
+ items.push_back(std::string("Delete"));
+
+ if ((flags & FIRST_SELECTED_ITEM) == 0)
+ {
+ disabled_items.push_back(std::string("Rename"));
+ }
+
+#if ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU
+ if (isOutboxFolderDirectParent())
+ {
+ items.push_back(std::string("Marketplace Separator"));
+ items.push_back(std::string("Marketplace Send"));
+
+ if ((flags & FIRST_SELECTED_ITEM) == 0)
+ {
+ disabled_items.push_back(std::string("Marketplace Send"));
+ }
+ }
+#endif // ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU
+}
+
// *TODO: remove this
BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
{
@@ -854,6 +876,22 @@ BOOL LLInvFVBridge::isOutboxFolder() const
return gInventory.isObjectDescendentOf(mUUID, outbox_id);
}
+BOOL LLInvFVBridge::isOutboxFolderDirectParent() const
+{
+ BOOL outbox_is_parent = FALSE;
+
+ const LLInventoryCategory *cat = gInventory.getCategory(mUUID);
+
+ if (cat)
+ {
+ const LLUUID outbox_id = getOutboxFolder();
+
+ outbox_is_parent = (outbox_id.notNull() && (outbox_id == cat->getParentUUID()));
+ }
+
+ return outbox_is_parent;
+}
+
const LLUUID LLInvFVBridge::getOutboxFolder() const
{
const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
@@ -1040,82 +1078,134 @@ void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid)
}
}
-BOOL LLInvFVBridge::canShare() const
+bool LLInvFVBridge::canShare() const
{
- if (!isAgentInventory()) return FALSE;
+ bool can_share = false;
- const LLInventoryModel* model = getInventoryModel();
- if (!model) return FALSE;
-
- const LLViewerInventoryItem *item = model->getItem(mUUID);
- if (item)
+ if (isAgentInventory())
{
- if (!LLInventoryCollectFunctor::itemTransferCommonlyAllowed(item))
- return FALSE;
- return (BOOL)LLGiveInventory::isInventoryGiveAcceptable(item);
+ const LLInventoryModel* model = getInventoryModel();
+ if (model)
+ {
+ const LLViewerInventoryItem *item = model->getItem(mUUID);
+ if (item)
+ {
+ if (LLInventoryCollectFunctor::itemTransferCommonlyAllowed(item))
+ {
+ can_share = LLGiveInventory::isInventoryGiveAcceptable(item);
+ }
+ }
+ else
+ {
+ // Categories can be given.
+ can_share = (model->getCategory(mUUID) != NULL);
+ }
+ }
}
- // Categories can be given.
- if (model->getCategory(mUUID)) return TRUE;
-
- return FALSE;
+ return can_share;
}
-BOOL LLInvFVBridge::canListOnMarketplace() const
+bool LLInvFVBridge::canListOnMarketplace() const
{
#if ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU
+
LLInventoryModel * model = getInventoryModel();
+
const LLViewerInventoryCategory * cat = model->getCategory(mUUID);
if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
{
- return FALSE;
+ return false;
}
if (!isAgentInventory())
{
- return FALSE;
+ return false;
}
if (getOutboxFolder().isNull())
{
- return FALSE;
+ return false;
}
if (isInboxFolder() || isOutboxFolder())
{
- return FALSE;
+ return false;
}
-
+
LLViewerInventoryItem * item = model->getItem(mUUID);
- if (item && !item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
+ if (item)
{
- return FALSE;
+ if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
+ {
+ return false;
+ }
+
+ if (LLAssetType::AT_CALLINGCARD == item->getType())
+ {
+ return false;
+ }
}
- return TRUE;
+ return true;
+
#else
- return FALSE;
+ return false;
#endif
}
-BOOL LLInvFVBridge::canListOnMarketplaceNow() const
+bool LLInvFVBridge::canListOnMarketplaceNow() const
{
#if ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU
- if (get_is_item_worn(mUUID))
+
+ bool can_list = true;
+
+ // Do not allow listing while import is in progress
+ if (LLMarketplaceInventoryImporter::instanceExists())
{
- return FALSE;
+ can_list = !LLMarketplaceInventoryImporter::instance().isImportInProgress();
}
+
+ const LLInventoryObject* obj = getInventoryObject();
+ can_list &= (obj != NULL);
- // Loop through all items worn by avatar and check to see if they are descendants
- // of the item we are trying to list on the marketplace
- if (get_is_parent_to_worn_item(mUUID))
+ if (can_list)
{
- return FALSE;
+ const LLUUID& object_id = obj->getLinkedUUID();
+ can_list = object_id.notNull();
+
+ if (can_list)
+ {
+ LLFolderViewFolder * object_folderp = mRoot->getFolderByID(object_id);
+ if (object_folderp)
+ {
+ can_list = !object_folderp->isLoading();
+ }
+ }
+
+ if (can_list)
+ {
+ // Get outbox id
+ const LLUUID & outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
+ LLFolderViewItem * outbox_itemp = mRoot->getItemByID(outbox_id);
+
+ if (outbox_itemp)
+ {
+ MASK mask = 0x0;
+ BOOL drop = FALSE;
+ EDragAndDropType cargo_type = LLViewerAssetType::lookupDragAndDropType(obj->getActualType());
+ void * cargo_data = (void *) obj;
+ std::string tooltip_msg;
+
+ can_list = outbox_itemp->getListener()->dragOrDrop(mask, drop, cargo_type, cargo_data, tooltip_msg);
+ }
+ }
}
+
+ return can_list;
- return TRUE;
#else
- return FALSE;
+ return false;
#endif
}
@@ -1225,7 +1315,7 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
if (!itemp) return;
const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
- copy_item_to_outbox(itemp, outbox_id, LLUUID::null);
+ copy_item_to_outbox(itemp, outbox_id, LLUUID::null, LLToolDragAndDrop::getOperationId());
}
}
@@ -1235,6 +1325,7 @@ void LLItemBridge::selectItem()
if(item && !item->isFinished())
{
item->fetchFromServer();
+ //LLInventoryModelBackgroundFetch::instance().start(item->getUUID(), false);
}
}
@@ -1564,11 +1655,7 @@ BOOL LLItemBridge::isItemCopyable() const
return FALSE;
}
- // All items can be copied in god mode since you can
- // at least paste-as-link the item, though you
- // still may not be able paste the item.
- return TRUE;
- // return (item->getPermissions().allowCopyBy(gAgent.getID()));
+ return item->getPermissions().allowCopyBy(gAgent.getID()) || gSavedSettings.getBOOL("InventoryLinking");
}
return FALSE;
}
@@ -1681,12 +1768,8 @@ BOOL LLFolderBridge::isUpToDate() const
BOOL LLFolderBridge::isItemCopyable() const
{
- if (gSavedSettings.getBOOL("InventoryLinking"))
- {
- // Can copy folders to paste-as-link, but not for straight paste.
- return TRUE;
- }
- return FALSE;
+ // Can copy folders to paste-as-link, but not for straight paste.
+ return gSavedSettings.getBOOL("InventoryLinking");
}
BOOL LLFolderBridge::copyToClipboard() const
@@ -1787,30 +1870,41 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const
static BOOL can_move_to_outbox(LLInventoryItem* inv_item, std::string& tooltip_msg)
{
- bool worn = get_is_item_worn(inv_item->getUUID());
+ // Collapse links directly to items/folders
+ LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) inv_item;
+ LLViewerInventoryItem * linked_item = viewer_inv_item->getLinkedItem();
+ if (linked_item != NULL)
+ {
+ inv_item = linked_item;
+ }
+
bool allow_transfer = inv_item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID());
-
if (!allow_transfer)
{
tooltip_msg = LLTrans::getString("TooltipOutboxNoTransfer");
+ return false;
}
- else if(worn)
+
+#if BLOCK_WORN_ITEMS_IN_OUTBOX
+ bool worn = get_is_item_worn(inv_item->getUUID());
+ if (worn)
{
tooltip_msg = LLTrans::getString("TooltipOutboxWorn");
+ return false;
}
+#endif
- return !worn && allow_transfer;
-}
-
-
-
-void LLFolderBridge::dropFolderToOutbox(LLInventoryCategory* inv_cat)
-{
- copy_folder_to_outbox(inv_cat, getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false), inv_cat->getUUID());
+ bool calling_card = (LLAssetType::AT_CALLINGCARD == inv_item->getType());
+ if (calling_card)
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxCallingCard");
+ return false;
+ }
+
+ return true;
}
-
int get_folder_levels(LLInventoryCategory* inv_cat)
{
LLInventoryModel::cat_array_t* cats;
@@ -1865,54 +1959,78 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
if (!isAgentAvatarValid()) return FALSE;
if (!isAgentInventory()) return FALSE; // cannot drag categories into library
+ const LLUUID &cat_id = inv_cat->getUUID();
+ const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
+ const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
+
+ const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+ const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
+ const BOOL move_is_from_outbox = model->isObjectDescendentOf(cat_id, outbox_id);
// check to make sure source is agent inventory, and is represented there.
LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
- const BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL)
+ const BOOL is_agent_inventory = (model->getCategory(cat_id) != NULL)
&& (LLToolDragAndDrop::SOURCE_AGENT == source);
- const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
- const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-
BOOL accept = FALSE;
if (is_agent_inventory)
{
- const LLUUID &cat_id = inv_cat->getUUID();
const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
- const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
const BOOL move_is_into_outfit = getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_OUTFIT);
const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
- const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
- const BOOL move_is_from_outbox = model->isObjectDescendentOf(inv_cat->getUUID(), outbox_id);
//--------------------------------------------------------------------------------
// Determine if folder can be moved.
//
BOOL is_movable = TRUE;
- if (LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType()))
+
+ if (is_movable && (mUUID == cat_id))
+ {
+ is_movable = FALSE;
+ tooltip_msg = LLTrans::getString("TooltipDragOntoSelf");
+ }
+ if (is_movable && (model->isObjectDescendentOf(mUUID, cat_id)))
+ {
+ is_movable = FALSE;
+ tooltip_msg = LLTrans::getString("TooltipDragOntoOwnChild");
+ }
+ if (is_movable && LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType()))
+ {
is_movable = FALSE;
- if (move_is_into_outfit)
+ // tooltip?
+ }
+ if (is_movable && move_is_into_outfit)
+ {
is_movable = FALSE;
- if (mUUID == gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE))
+ // tooltip?
+ }
+ if (is_movable && (mUUID == model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE)))
+ {
is_movable = FALSE;
+ // tooltip?
+ }
+
LLInventoryModel::cat_array_t descendent_categories;
LLInventoryModel::item_array_t descendent_items;
- gInventory.collectDescendents(cat_id, descendent_categories, descendent_items, FALSE);
- for (S32 i=0; i < descendent_categories.count(); ++i)
+ if (is_movable)
{
- LLInventoryCategory* category = descendent_categories[i];
- if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
+ model->collectDescendents(cat_id, descendent_categories, descendent_items, FALSE);
+ for (S32 i=0; i < descendent_categories.count(); ++i)
{
- // Can't move "special folders" (e.g. Textures Folder).
- is_movable = FALSE;
- break;
+ LLInventoryCategory* category = descendent_categories[i];
+ if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
+ {
+ // Can't move "special folders" (e.g. Textures Folder).
+ is_movable = FALSE;
+ break;
+ }
}
}
- if (move_is_into_trash)
+ if (is_movable && move_is_into_trash)
{
for (S32 i=0; i < descendent_items.count(); ++i)
{
@@ -1924,7 +2042,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
}
- if (move_is_into_landmarks)
+ if (is_movable && move_is_into_landmarks)
{
for (S32 i=0; i < descendent_items.count(); ++i)
{
@@ -1939,35 +2057,100 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
}
- if (move_is_into_outbox)
+ if (is_movable && move_is_into_outbox)
{
- for (S32 i=0; i < descendent_items.count(); ++i)
+ const int nested_folder_levels = get_folder_path_length(outbox_id, mUUID) + get_folder_levels(inv_cat);
+
+ if (nested_folder_levels > gSavedSettings.getU32("InventoryOutboxMaxFolderDepth"))
{
- LLInventoryItem* item = descendent_items[i];
- if (!can_move_to_outbox(item, tooltip_msg))
- {
- is_movable = FALSE;
- break;
- }
+ tooltip_msg = LLTrans::getString("TooltipOutboxFolderLevels");
+ is_movable = FALSE;
}
+ else
+ {
+ int dragged_folder_count = descendent_categories.count();
+ int existing_item_count = 0;
+ int existing_folder_count = 0;
+
+ const LLViewerInventoryCategory * master_folder = model->getFirstDescendantOf(outbox_id, mUUID);
+
+ if (master_folder != NULL)
+ {
+ if (model->isObjectDescendentOf(cat_id, master_folder->getUUID()))
+ {
+ // Don't use count because we're already inside the same category anyway
+ dragged_folder_count = 0;
+ }
+ else
+ {
+ existing_folder_count = 1; // Include the master folder in the count!
+
+ // If we're in the drop operation as opposed to the drag without drop, we are doing a
+ // single category at a time so don't block based on the total amount of cargo data items
+ if (drop)
+ {
+ dragged_folder_count += 1;
+ }
+ else
+ {
+ // NOTE: The cargo id's count is a total of categories AND items but we err on the side of
+ // prevention rather than letting too many folders into the hierarchy of the outbox,
+ // when we're dragging the item to a new parent
+ dragged_folder_count += LLToolDragAndDrop::instance().getCargoIDsCount();
+ }
+ }
+
+ // Tally the total number of categories and items inside the master folder
- int nested_folder_levels = get_folder_path_length(outbox_id, mUUID) + get_folder_levels(inv_cat);
+ LLInventoryModel::cat_array_t existing_categories;
+ LLInventoryModel::item_array_t existing_items;
- if (nested_folder_levels > 4)
- {
- tooltip_msg = LLTrans::getString("TooltipOutboxFolderLevels");
- is_movable = FALSE;
+ model->collectDescendents(master_folder->getUUID(), existing_categories, existing_items, FALSE);
+
+ existing_folder_count += existing_categories.count();
+ existing_item_count += existing_items.count();
+ }
+ else
+ {
+ // Assume a single category is being dragged to the outbox since we evaluate one at a time
+ // when not putting them under a parent item.
+ dragged_folder_count += 1;
+ }
+
+ const int nested_folder_count = existing_folder_count + dragged_folder_count;
+ const int nested_item_count = existing_item_count + descendent_items.count();
+
+ if (nested_folder_count > gSavedSettings.getU32("InventoryOutboxMaxFolderCount"))
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxTooManyFolders");
+ is_movable = FALSE;
+ }
+ else if (nested_item_count > gSavedSettings.getU32("InventoryOutboxMaxItemCount"))
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxTooManyObjects");
+ is_movable = FALSE;
+ }
+
+ if (is_movable == TRUE)
+ {
+ for (S32 i=0; i < descendent_items.count(); ++i)
+ {
+ LLInventoryItem* item = descendent_items[i];
+ if (!can_move_to_outbox(item, tooltip_msg))
+ {
+ is_movable = FALSE;
+ break;
+ }
+ }
+ }
}
-
}
//
//--------------------------------------------------------------------------------
- accept = is_movable
- && (mUUID != cat_id) // Can't move a folder into itself
- && (mUUID != inv_cat->getParentUUID()) // Avoid moves that would change nothing
- && !(model->isObjectDescendentOf(mUUID, cat_id)); // Avoid circularity
+ accept = is_movable;
+
if (accept && drop)
{
// Look for any gestures and deactivate them
@@ -1999,7 +2182,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
// Recursively create links in target outfit.
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
- gInventory.collectDescendents(inv_cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH);
+ model->collectDescendents(cat_id, cats, items, LLInventoryModel::EXCLUDE_TRASH);
LLAppearanceMgr::instance().linkAll(mUUID,items,NULL);
}
}
@@ -2017,7 +2200,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
const std::string empty_description = "";
link_inventory_item(
gAgent.getID(),
- inv_cat->getUUID(),
+ cat_id,
mUUID,
inv_cat->getName(),
empty_description,
@@ -2029,13 +2212,13 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
else if (move_is_into_outbox && !move_is_from_outbox)
{
- dropFolderToOutbox(inv_cat);
+ copy_folder_to_outbox(inv_cat, mUUID, cat_id, LLToolDragAndDrop::getOperationId());
}
else
{
- if (gInventory.isObjectDescendentOf(inv_cat->getUUID(), gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false)))
+ if (model->isObjectDescendentOf(cat_id, model->findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false)))
{
- set_dad_inbox_object(inv_cat->getUUID());
+ set_dad_inbox_object(cat_id);
}
// Reparent the folder and restamp children if it's moving
@@ -2050,15 +2233,28 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
else if (LLToolDragAndDrop::SOURCE_WORLD == source)
{
- // content category has same ID as object itself
- LLUUID object_id = inv_cat->getUUID();
- LLUUID category_id = mUUID;
- accept = move_inv_category_world_to_agent(object_id, category_id, drop);
+ if (move_is_into_outbox)
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxNotInInventory");
+ accept = FALSE;
+ }
+ else
+ {
+ accept = move_inv_category_world_to_agent(cat_id, mUUID, drop);
+ }
}
else if (LLToolDragAndDrop::SOURCE_LIBRARY == source)
{
- // Accept folders that contain complete outfits.
- accept = move_is_into_current_outfit && LLAppearanceMgr::instance().getCanMakeFolderIntoOutfit(inv_cat->getUUID());
+ if (move_is_into_outbox)
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxNotInInventory");
+ accept = FALSE;
+ }
+ else
+ {
+ // Accept folders that contain complete outfits.
+ accept = move_is_into_current_outfit && LLAppearanceMgr::instance().getCanMakeFolderIntoOutfit(cat_id);
+ }
if (accept && drop)
{
@@ -2201,7 +2397,6 @@ public:
delete this;
}
-
protected:
LLUUID mCatID;
bool mCopyItems;
@@ -2450,8 +2645,19 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
if (!cat) return;
const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
- copy_folder_to_outbox(cat, outbox_id, cat->getUUID());
+ copy_folder_to_outbox(cat, outbox_id, cat->getUUID(), LLToolDragAndDrop::getOperationId());
}
+#if ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU
+ else if (isMarketplaceSendAction(action))
+ {
+ llinfos << "Send to marketplace action!" << llendl;
+
+ LLInventoryCategory * cat = gInventory.getCategory(mUUID);
+ if (!cat) return;
+
+ send_to_marketplace(cat);
+ }
+#endif // ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU
}
void LLFolderBridge::openItem()
@@ -2718,103 +2924,10 @@ void LLFolderBridge::pasteLinkFromClipboard()
void LLFolderBridge::staticFolderOptionsMenu()
{
LLFolderBridge* selfp = sSelf.get();
- if (selfp)
- {
- selfp->folderOptionsMenu();
- }
-}
-void LLFolderBridge::folderOptionsMenu()
-{
- LLInventoryModel* model = getInventoryModel();
- if(!model) return;
-
- const LLInventoryCategory* category = model->getCategory(mUUID);
- if(!category) return;
-
- const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if (trash_id == mUUID) return;
- if (isItemInTrash()) return;
- if (!isAgentInventory()) return;
- if (isOutboxFolder()) return;
-
- LLFolderType::EType type = category->getPreferredType();
- const bool is_system_folder = LLFolderType::lookupIsProtectedType(type);
- // BAP change once we're no longer treating regular categories as ensembles.
- const bool is_ensemble = (type == LLFolderType::FT_NONE ||
- LLFolderType::lookupIsEnsembleType(type));
-
- // Only enable calling-card related options for non-system folders.
- if (!is_system_folder)
- {
- LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
- if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
- {
- mItems.push_back(std::string("Calling Card Separator"));
- mItems.push_back(std::string("Conference Chat Folder"));
- mItems.push_back(std::string("IM All Contacts In Folder"));
- }
- }
-
- if (!isItemRemovable())
+ if (selfp && selfp->mRoot)
{
- mDisabledItems.push_back(std::string("Delete"));
- }
-
-#ifndef LL_RELEASE_FOR_DOWNLOAD
- if (LLFolderType::lookupIsProtectedType(type))
- {
- mItems.push_back(std::string("Delete System Folder"));
- }
-#endif
-
- // wearables related functionality for folders.
- //is_wearable
- LLFindWearables is_wearable;
- LLIsType is_object( LLAssetType::AT_OBJECT );
- LLIsType is_gesture( LLAssetType::AT_GESTURE );
-
- if (mWearables ||
- checkFolderForContentsOfType(model, is_wearable) ||
- checkFolderForContentsOfType(model, is_object) ||
- checkFolderForContentsOfType(model, is_gesture) )
- {
- mItems.push_back(std::string("Folder Wearables Separator"));
-
- // Only enable add/replace outfit for non-system folders.
- if (!is_system_folder)
- {
- // Adding an outfit onto another (versus replacing) doesn't make sense.
- if (type != LLFolderType::FT_OUTFIT)
- {
- mItems.push_back(std::string("Add To Outfit"));
- }
-
- mItems.push_back(std::string("Replace Outfit"));
- }
- if (is_ensemble)
- {
- mItems.push_back(std::string("Wear As Ensemble"));
- }
- mItems.push_back(std::string("Remove From Outfit"));
- if (!LLAppearanceMgr::getCanRemoveFromCOF(mUUID))
- {
- mDisabledItems.push_back(std::string("Remove From Outfit"));
- }
- if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID))
- {
- mDisabledItems.push_back(std::string("Replace Outfit"));
- }
- mItems.push_back(std::string("Outfit Separator"));
- }
- LLMenuGL* menup = dynamic_cast<LLMenuGL*>(mMenu.get());
- if (menup)
- {
- hide_context_entries(*menup, mItems, mDisabledItems, TRUE);
-
- // Reposition the menu, in case we're adding items to an existing menu.
- menup->needsArrange();
- menup->arrangeAndClear();
+ selfp->mRoot->updateMenu();
}
}
@@ -2830,17 +2943,11 @@ BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInv
return ((item_array.count() > 0) ? TRUE : FALSE );
}
-// Flags unused
-void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+void LLFolderBridge::buildContextMenuBaseOptions(U32 flags)
{
- mItems.clear();
- mDisabledItems.clear();
-
- lldebugs << "LLFolderBridge::buildContextMenu()" << llendl;
-
-// menuentry_vec_t disabled_items;
LLInventoryModel* model = getInventoryModel();
- if(!model) return;
+ llassert(model != NULL);
+
const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
@@ -2857,10 +2964,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
mDisabledItems.push_back(std::string("New Body Parts"));
}
- // clear out old menu and folder pointers
- mMenu.markDead();
- sSelf.markDead();
-
if(trash_id == mUUID)
{
// This is the trash.
@@ -2874,20 +2977,23 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
else if(isOutboxFolder())
{
- mItems.push_back(std::string("Delete"));
+ addOutboxContextMenuOptions(flags, mItems, mDisabledItems);
}
else if(isAgentInventory()) // do not allow creating in library
{
- LLViewerInventoryCategory *cat = getCategory();
+ LLViewerInventoryCategory *cat = getCategory();
// BAP removed protected check to re-enable standard ops in untyped folders.
// Not sure what the right thing is to do here.
if (!isCOFFolder() && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT))
{
- if (!isInboxFolder() && !isOutboxFolder()) // don't allow creation in inbox
+ if (!isInboxFolder() && !isOutboxFolder()) // don't allow creation in inbox or outbox
{
// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
+ {
mItems.push_back(std::string("New Folder"));
+ }
+
mItems.push_back(std::string("New Script"));
mItems.push_back(std::string("New Note"));
mItems.push_back(std::string("New Gesture"));
@@ -2958,34 +3064,138 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
mDisabledItems.push_back(std::string("Share"));
}
}
+}
- hide_context_entries(menu, mItems, mDisabledItems);
+void LLFolderBridge::buildContextMenuFolderOptions(U32 flags)
+{
+ // Build folder specific options back up
+ LLInventoryModel* model = getInventoryModel();
+ if(!model) return;
- // Add menu items that are dependent on the contents of the folder.
- uuid_vec_t folders;
- LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
- if (category)
+ const LLInventoryCategory* category = model->getCategory(mUUID);
+ if(!category) return;
+
+ const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ if (trash_id == mUUID) return;
+ if (isItemInTrash()) return;
+ if (!isAgentInventory()) return;
+ if (isOutboxFolder()) return;
+
+ LLFolderType::EType type = category->getPreferredType();
+ const bool is_system_folder = LLFolderType::lookupIsProtectedType(type);
+ // BAP change once we're no longer treating regular categories as ensembles.
+ const bool is_ensemble = (type == LLFolderType::FT_NONE ||
+ LLFolderType::lookupIsEnsembleType(type));
+
+ // Only enable calling-card related options for non-system folders.
+ if (!is_system_folder)
{
- folders.push_back(category->getUUID());
+ LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
+ if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
+ {
+ mItems.push_back(std::string("Calling Card Separator"));
+ mItems.push_back(std::string("Conference Chat Folder"));
+ mItems.push_back(std::string("IM All Contacts In Folder"));
+ }
}
- mMenu = menu.getHandle();
- sSelf = getHandle();
- LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(folders, FALSE);
- fetch->startFetch();
- inc_busy_count();
- if(fetch->isFinished())
+ if (!isItemRemovable())
{
- // everything is already here - call done.
- fetch->done();
+ mDisabledItems.push_back(std::string("Delete"));
}
- else
+
+#ifndef LL_RELEASE_FOR_DOWNLOAD
+ if (LLFolderType::lookupIsProtectedType(type))
{
- // it's all on its way - add an observer, and the inventory will call done for us when everything is here.
- gInventory.addObserver(fetch);
+ mItems.push_back(std::string("Delete System Folder"));
+ }
+#endif
+
+ // wearables related functionality for folders.
+ //is_wearable
+ LLFindWearables is_wearable;
+ LLIsType is_object( LLAssetType::AT_OBJECT );
+ LLIsType is_gesture( LLAssetType::AT_GESTURE );
+
+ if (mWearables ||
+ checkFolderForContentsOfType(model, is_wearable) ||
+ checkFolderForContentsOfType(model, is_object) ||
+ checkFolderForContentsOfType(model, is_gesture) )
+ {
+ mItems.push_back(std::string("Folder Wearables Separator"));
+
+ // Only enable add/replace outfit for non-system folders.
+ if (!is_system_folder)
+ {
+ // Adding an outfit onto another (versus replacing) doesn't make sense.
+ if (type != LLFolderType::FT_OUTFIT)
+ {
+ mItems.push_back(std::string("Add To Outfit"));
+ }
+
+ mItems.push_back(std::string("Replace Outfit"));
+ }
+ if (is_ensemble)
+ {
+ mItems.push_back(std::string("Wear As Ensemble"));
+ }
+ mItems.push_back(std::string("Remove From Outfit"));
+ if (!LLAppearanceMgr::getCanRemoveFromCOF(mUUID))
+ {
+ mDisabledItems.push_back(std::string("Remove From Outfit"));
+ }
+ if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID))
+ {
+ mDisabledItems.push_back(std::string("Replace Outfit"));
+ }
+ mItems.push_back(std::string("Outfit Separator"));
}
}
+// Flags unused
+void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+ sSelf.markDead();
+
+ mItems.clear();
+ mDisabledItems.clear();
+
+ lldebugs << "LLFolderBridge::buildContextMenu()" << llendl;
+
+ LLInventoryModel* model = getInventoryModel();
+ if(!model) return;
+
+ buildContextMenuBaseOptions(flags);
+
+ // Add menu items that are dependent on the contents of the folder.
+ LLViewerInventoryCategory* category = (LLViewerInventoryCategory *) model->getCategory(mUUID);
+ if (category)
+ {
+ uuid_vec_t folders;
+ folders.push_back(category->getUUID());
+
+ sSelf = getHandle();
+ LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(folders, FALSE);
+ fetch->startFetch();
+ inc_busy_count();
+ if (fetch->isFinished())
+ {
+ buildContextMenuFolderOptions(flags);
+ }
+ else
+ {
+ // it's all on its way - add an observer, and the inventory will call done for us when everything is here.
+ gInventory.addObserver(fetch);
+ }
+ }
+
+ hide_context_entries(menu, mItems, mDisabledItems);
+
+ // Reposition the menu, in case we're adding items to an existing menu.
+ menu.needsArrange();
+ menu.arrangeAndClear();
+}
+
BOOL LLFolderBridge::hasChildren() const
{
LLInventoryModel* model = getInventoryModel();
@@ -3306,8 +3516,8 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
{
LLInventoryModel* model = getInventoryModel();
- if(!model || !inv_item) return FALSE;
- if(!isAgentInventory()) return FALSE; // cannot drag into library
+ if (!model || !inv_item) return FALSE;
+ if (!isAgentInventory()) return FALSE; // cannot drag into library
if (!isAgentAvatarValid()) return FALSE;
const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
@@ -3375,10 +3585,14 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
accept = TRUE;
if (!is_movable)
+ {
accept = FALSE;
- if ((mUUID == inv_item->getParentUUID()) && !move_is_into_favorites)
+ }
+ else if ((mUUID == inv_item->getParentUUID()) && !move_is_into_favorites)
+ {
accept = FALSE;
- if (move_is_into_current_outfit || move_is_into_outfit)
+ }
+ else if (move_is_into_current_outfit || move_is_into_outfit)
{
accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
}
@@ -3389,9 +3603,32 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
else if (move_is_into_outbox)
{
accept = can_move_to_outbox(inv_item, tooltip_msg);
+
+ if (accept)
+ {
+ const LLViewerInventoryCategory * master_folder = model->getFirstDescendantOf(outbox_id, mUUID);
+
+ int existing_item_count = LLToolDragAndDrop::instance().getCargoIDsCount();
+
+ if (master_folder != NULL)
+ {
+ LLInventoryModel::cat_array_t existing_categories;
+ LLInventoryModel::item_array_t existing_items;
+
+ gInventory.collectDescendents(master_folder->getUUID(), existing_categories, existing_items, FALSE);
+
+ existing_item_count += existing_items.count();
+ }
+
+ if (existing_item_count > gSavedSettings.getU32("InventoryOutboxMaxItemCount"))
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxTooManyObjects");
+ accept = FALSE;
+ }
+ }
}
- if(accept && drop)
+ if (accept && drop)
{
if (inv_item->getType() == LLAssetType::AT_GESTURE
&& LLGestureMgr::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash)
@@ -3440,9 +3677,16 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
{
dropToOutfit(inv_item, move_is_into_current_outfit);
}
- else if (move_is_into_outbox && !move_is_from_outbox)
+ else if (move_is_into_outbox)
{
- copy_item_to_outbox(inv_item, outbox_id, LLUUID::null);
+ if (move_is_from_outbox)
+ {
+ move_item_within_outbox(inv_item, mUUID, LLToolDragAndDrop::getOperationId());
+ }
+ else
+ {
+ copy_item_to_outbox(inv_item, mUUID, LLUUID::null, LLToolDragAndDrop::getOperationId());
+ }
}
// NORMAL or TRASH folder
// (move the item, restamp if into trash)
@@ -3463,7 +3707,6 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
//
//--------------------------------------------------------------------------------
-
}
}
else if (LLToolDragAndDrop::SOURCE_WORLD == source)
@@ -3472,7 +3715,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// anonymous objects, it would be possible to bypass
// permissions.
object = gObjectList.findObject(inv_item->getParentUUID());
- if(!object)
+ if (!object)
{
llinfos << "Object not found for drop." << llendl;
return FALSE;
@@ -3482,10 +3725,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// move/copy this item.
LLPermissions perm(inv_item->getPermissions());
BOOL is_move = FALSE;
- if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
+ if ((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
&& perm.allowTransferTo(gAgent.getID())))
// || gAgent.isGodlike())
-
{
accept = TRUE;
}
@@ -3501,7 +3743,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// Don't allow placing an original item into Current Outfit or an outfit folder
// because they must contain only links to wearable items.
// *TODO: Probably we should create a link to an item if it was dragged to outfit or COF.
- if(move_is_into_current_outfit || move_is_into_outfit)
+ if (move_is_into_current_outfit || move_is_into_outfit)
{
accept = FALSE;
}
@@ -3512,8 +3754,13 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
{
accept = FALSE;
}
-
- if(drop && accept)
+ else if (move_is_into_outbox)
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxNotInInventory");
+ accept = FALSE;
+ }
+
+ if (accept && drop)
{
LLMoveInv* move_inv = new LLMoveInv;
move_inv->mObjectID = inv_item->getParentUUID();
@@ -3535,15 +3782,22 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
LLNotifications::instance().forceResponse(params, 0);
}
}
-
}
else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
{
- // Don't allow placing an original item from a notecard to Current Outfit or an outfit folder
- // because they must contain only links to wearable items.
- accept = !(move_is_into_current_outfit || move_is_into_outfit);
-
- if(accept && drop)
+ if (move_is_into_outbox)
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxNotInInventory");
+ accept = FALSE;
+ }
+ else
+ {
+ // Don't allow placing an original item from a notecard to Current Outfit or an outfit folder
+ // because they must contain only links to wearable items.
+ accept = !(move_is_into_current_outfit || move_is_into_outfit);
+ }
+
+ if (accept && drop)
{
copy_inventory_from_notecard(mUUID, // Drop to the chosen destination folder
LLToolDragAndDrop::getInstance()->getObjectID(),
@@ -3558,7 +3812,12 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
{
accept = TRUE;
- if (move_is_into_current_outfit || move_is_into_outfit)
+ if (move_is_into_outbox)
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutboxNotInInventory");
+ accept = FALSE;
+ }
+ else if (move_is_into_current_outfit || move_is_into_outfit)
{
accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
}
@@ -3649,7 +3908,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
else if(isOutboxFolder())
{
- items.push_back(std::string("Delete"));
+ addOutboxContextMenuOptions(flags, items, disabled_items);
}
else
{
@@ -3723,29 +3982,29 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
menuentry_vec_t items;
menuentry_vec_t disabled_items;
- if(isItemInTrash())
- {
- addTrashContextMenuOptions(items, disabled_items);
- }
- else if(isOutboxFolder())
+ if (isOutboxFolder())
{
- items.push_back(std::string("Delete"));
+ addOutboxContextMenuOptions(flags, items, disabled_items);
}
else
{
- items.push_back(std::string("Share"));
- if (!canShare())
+ if (isItemInTrash())
{
- disabled_items.push_back(std::string("Share"));
- }
- items.push_back(std::string("Sound Open"));
- items.push_back(std::string("Properties"));
+ addTrashContextMenuOptions(items, disabled_items);
+ }
+ else
+ {
+ items.push_back(std::string("Share"));
+ if (!canShare())
+ {
+ disabled_items.push_back(std::string("Share"));
+ }
+ items.push_back(std::string("Sound Open"));
+ items.push_back(std::string("Properties"));
- getClipboardEntries(true, items, disabled_items, flags);
- }
+ getClipboardEntries(true, items, disabled_items, flags);
+ }
- if (!isOutboxFolder())
- {
items.push_back(std::string("Sound Separator"));
items.push_back(std::string("Sound Play"));
}
@@ -3781,29 +4040,29 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
menuentry_vec_t disabled_items;
lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl;
- if(isItemInTrash())
- {
- addTrashContextMenuOptions(items, disabled_items);
- }
- else if(isOutboxFolder())
+ if(isOutboxFolder())
{
- items.push_back(std::string("Delete"));
+ addOutboxContextMenuOptions(flags, items, disabled_items);
}
else
{
- items.push_back(std::string("Share"));
- if (!canShare())
+ if(isItemInTrash())
{
- disabled_items.push_back(std::string("Share"));
- }
- items.push_back(std::string("Landmark Open"));
- items.push_back(std::string("Properties"));
+ addTrashContextMenuOptions(items, disabled_items);
+ }
+ else
+ {
+ items.push_back(std::string("Share"));
+ if (!canShare())
+ {
+ disabled_items.push_back(std::string("Share"));
+ }
+ items.push_back(std::string("Landmark Open"));
+ items.push_back(std::string("Properties"));
- getClipboardEntries(true, items, disabled_items, flags);
- }
+ getClipboardEntries(true, items, disabled_items, flags);
+ }
- if (!isOutboxFolder())
- {
items.push_back(std::string("Landmark Separator"));
items.push_back(std::string("About Landmark"));
}
@@ -4336,36 +4595,35 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
menuentry_vec_t disabled_items;
lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl;
- if(isItemInTrash())
- {
- addTrashContextMenuOptions(items, disabled_items);
- }
- else if(isOutboxFolder())
+ if(isOutboxFolder())
{
items.push_back(std::string("Delete"));
}
else
{
- items.push_back(std::string("Share"));
- if (!canShare())
+ if(isItemInTrash())
{
- disabled_items.push_back(std::string("Share"));
- }
- items.push_back(std::string("Animation Open"));
- items.push_back(std::string("Properties"));
+ addTrashContextMenuOptions(items, disabled_items);
+ }
+ else
+ {
+ items.push_back(std::string("Share"));
+ if (!canShare())
+ {
+ disabled_items.push_back(std::string("Share"));
+ }
+ items.push_back(std::string("Animation Open"));
+ items.push_back(std::string("Properties"));
- getClipboardEntries(true, items, disabled_items, flags);
- }
+ getClipboardEntries(true, items, disabled_items, flags);
+ }
- if (!isOutboxFolder())
- {
items.push_back(std::string("Animation Separator"));
items.push_back(std::string("Animation Play"));
items.push_back(std::string("Animation Audition"));
}
hide_context_entries(menu, items, disabled_items);
-
}
// virtual
@@ -5350,7 +5608,7 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
else if(isOutboxFolder())
{
- items.push_back(std::string("Delete"));
+ addOutboxContextMenuOptions(flags, items, disabled_items);
}
else
{
@@ -5359,7 +5617,6 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
getClipboardEntries(true, items, disabled_items, flags);
}
-
hide_context_entries(menu, items, disabled_items);
}
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 2d625befb4..871657a58a 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -69,9 +69,9 @@ public:
U32 flags = 0x00);
virtual ~LLInvFVBridge() {}
- BOOL canShare() const;
- BOOL canListOnMarketplace() const;
- BOOL canListOnMarketplaceNow() const;
+ bool canShare() const;
+ bool canListOnMarketplace() const;
+ bool canListOnMarketplaceNow() const;
//--------------------------------------------------------------------
// LLInvFVBridge functionality
@@ -131,6 +131,9 @@ protected:
virtual void addDeleteContextMenuOptions(menuentry_vec_t &items,
menuentry_vec_t &disabled_items);
virtual void addOpenRightClickMenuOption(menuentry_vec_t &items);
+ virtual void addOutboxContextMenuOptions(U32 flags,
+ menuentry_vec_t &items,
+ menuentry_vec_t &disabled_items);
protected:
LLInvFVBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid);
@@ -144,6 +147,7 @@ protected:
BOOL isCOFFolder() const; // true if COF or descendent of
BOOL isInboxFolder() const; // true if COF or descendent of marketplace inbox
BOOL isOutboxFolder() const; // true if COF or descendent of marketplace outbox
+ BOOL isOutboxFolderDirectParent() const;
const LLUUID getOutboxFolder() const;
virtual BOOL isItemPermissive() const;
@@ -278,6 +282,9 @@ public:
LLHandle<LLFolderBridge> getHandle() { mHandle.bind(this); return mHandle; }
protected:
+ void buildContextMenuBaseOptions(U32 flags);
+ void buildContextMenuFolderOptions(U32 flags);
+
//--------------------------------------------------------------------
// Menu callbacks
//--------------------------------------------------------------------
@@ -306,8 +313,6 @@ protected:
void dropToFavorites(LLInventoryItem* inv_item);
void dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
- void dropToOutbox(LLInventoryItem* inv_item);
- void dropFolderToOutbox(LLInventoryCategory* inv_cat);
//--------------------------------------------------------------------
// Messy hacks for handling folder options
@@ -315,12 +320,10 @@ protected:
public:
static LLHandle<LLFolderBridge> sSelf;
static void staticFolderOptionsMenu();
- void folderOptionsMenu();
private:
BOOL mCallingCards;
BOOL mWearables;
- LLHandle<LLView> mMenu;
menuentry_vec_t mItems;
menuentry_vec_t mDisabledItems;
LLRootHandle<LLFolderBridge> mHandle;
@@ -650,7 +653,6 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
// are set as enabled.
void hide_context_entries(LLMenuGL& menu,
const menuentry_vec_t &entries_to_show,
- const menuentry_vec_t &disabled_entries,
- BOOL append = FALSE);
+ const menuentry_vec_t &disabled_entries);
#endif // LL_LLINVENTORYBRIDGE_H
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 5fb3f15cd5..dd92188e9d 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -58,6 +58,7 @@
#include "llinventorymodel.h"
#include "llinventorypanel.h"
#include "lllineeditor.h"
+#include "llmarketplacenotifications.h"
#include "llmenugl.h"
#include "llnotificationsutil.h"
#include "llpanelmaininventory.h"
@@ -82,6 +83,8 @@
#include "llvoavatarself.h"
#include "llwearablelist.h"
+#include <boost/foreach.hpp>
+
BOOL LLInventoryState::sWearNewClothing = FALSE;
LLUUID LLInventoryState::sWearNewClothingTransactionID;
@@ -530,21 +533,37 @@ void show_item_original(const LLUUID& item_uuid)
}
}
-void move_to_outbox_cb(const LLSD& notification, const LLSD& response)
+
+void open_outbox()
+{
+ LLFloaterReg::showInstance("outbox");
+}
+
+LLUUID create_folder_in_outbox_for_item(LLInventoryItem* item, const LLUUID& destFolderId, S32 operation_id)
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if (option != 0) return; // canceled
+ llassert(item);
+ llassert(destFolderId.notNull());
+
+ LLUUID created_folder_id = gInventory.createNewCategory(destFolderId, LLFolderType::FT_NONE, item->getName());
+ gInventory.notifyObservers();
+
+ LLNotificationsUtil::add("OutboxFolderCreated");
+
+ return created_folder_id;
+}
- LLViewerInventoryItem * viitem = gInventory.getItem(notification["payload"]["item_id"].asUUID());
- LLUUID dest_folder_id = notification["payload"]["dest_folder_id"].asUUID();
+void move_to_outbox_cb_action(const LLSD& payload)
+{
+ LLViewerInventoryItem * viitem = gInventory.getItem(payload["item_id"].asUUID());
+ LLUUID dest_folder_id = payload["dest_folder_id"].asUUID();
if (viitem)
{
// when moving item directly into outbox create folder with that name
if (dest_folder_id == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false))
{
- dest_folder_id = gInventory.createNewCategory(dest_folder_id, LLFolderType::FT_NONE, viitem->getName());
- gInventory.notifyObservers();
+ S32 operation_id = payload["operation_id"].asInteger();
+ dest_folder_id = create_folder_in_outbox_for_item(viitem, dest_folder_id, operation_id);
}
LLUUID parent = viitem->getParentUUID();
@@ -555,12 +574,12 @@ void move_to_outbox_cb(const LLSD& notification, const LLSD& response)
dest_folder_id,
false);
- LLUUID top_level_folder = notification["payload"]["top_level_folder"].asUUID();
+ LLUUID top_level_folder = payload["top_level_folder"].asUUID();
if (top_level_folder != LLUUID::null)
{
LLViewerInventoryCategory* category;
-
+
while (parent.notNull())
{
LLInventoryModel::cat_array_t* cat_array;
@@ -589,42 +608,75 @@ void move_to_outbox_cb(const LLSD& notification, const LLSD& response)
}
}
+ open_outbox();
}
}
-
-void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder)
+void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder, S32 operation_id)
{
- if (inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
+ // Collapse links directly to items/folders
+ LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) inv_item;
+ LLViewerInventoryCategory * linked_category = viewer_inv_item->getLinkedCategory();
+ if (linked_category != NULL)
{
- // when moving item directly into outbox create folder with that name
- if (dest_folder == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false))
+ copy_folder_to_outbox(linked_category, dest_folder, top_level_folder, operation_id);
+ }
+ else
+ {
+ LLViewerInventoryItem * linked_item = viewer_inv_item->getLinkedItem();
+ if (linked_item != NULL)
{
- dest_folder = gInventory.createNewCategory(dest_folder, LLFolderType::FT_NONE, inv_item->getName());
- gInventory.notifyObservers();
+ inv_item = (LLInventoryItem *) linked_item;
}
+
+ // Check for copy permissions
+ if (inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
+ {
+ // when moving item directly into outbox create folder with that name
+ if (dest_folder == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false))
+ {
+ dest_folder = create_folder_in_outbox_for_item(inv_item, dest_folder, operation_id);
+ }
+
+ copy_inventory_item(gAgent.getID(),
+ inv_item->getPermissions().getOwner(),
+ inv_item->getUUID(),
+ dest_folder,
+ inv_item->getName(),
+ LLPointer<LLInventoryCallback>(NULL));
- copy_inventory_item(
- gAgent.getID(),
- inv_item->getPermissions().getOwner(),
- inv_item->getUUID(),
- dest_folder,
- inv_item->getName(),
- LLPointer<LLInventoryCallback>(NULL));
+ open_outbox();
+ }
+ else
+ {
+ LLSD payload;
+ payload["item_id"] = inv_item->getUUID();
+ payload["dest_folder_id"] = dest_folder;
+ payload["top_level_folder"] = top_level_folder;
+ payload["operation_id"] = operation_id;
+
+ LLMarketplaceInventoryNotifications::addNoCopyNotification(payload, move_to_outbox_cb_action);
+ }
}
- else
- {
- LLSD args;
- args["ITEM_NAME"] = inv_item->getName();
- LLSD payload;
- payload["item_id"] = inv_item->getUUID();
- payload["dest_folder_id"] = dest_folder;
- payload["top_level_folder"] = top_level_folder;
- LLNotificationsUtil::add("ConfirmNoCopyToOutbox", args, payload, boost::bind(&move_to_outbox_cb, _1, _2));
+}
+
+void move_item_within_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, S32 operation_id)
+{
+ // when moving item directly into outbox create folder with that name
+ if (dest_folder == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false))
+ {
+ dest_folder = create_folder_in_outbox_for_item(inv_item, dest_folder, operation_id);
}
+
+ LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) inv_item;
+
+ change_item_parent(&gInventory,
+ viewer_inv_item,
+ dest_folder,
+ false);
}
-void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder)
+void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder, S32 operation_id)
{
LLUUID new_folder_id = gInventory.createNewCategory(dest_folder, LLFolderType::FT_NONE, inv_cat->getName());
gInventory.notifyObservers();
@@ -639,7 +691,7 @@ void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_fold
for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++)
{
LLInventoryItem* item = *iter;
- copy_item_to_outbox(item, new_folder_id, top_level_folder);
+ copy_item_to_outbox(item, new_folder_id, top_level_folder, operation_id);
}
LLInventoryModel::cat_array_t cat_array_copy = *cat_array;
@@ -647,14 +699,10 @@ void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_fold
for (LLInventoryModel::cat_array_t::iterator iter = cat_array_copy.begin(); iter != cat_array_copy.end(); iter++)
{
LLViewerInventoryCategory* category = *iter;
- copy_folder_to_outbox(category, new_folder_id, top_level_folder);
+ copy_folder_to_outbox(category, new_folder_id, top_level_folder, operation_id);
}
- // delete the folder if we have emptied it
- //if (cat_array->empty() && item_array->empty())
- //{
- // remove_category(inventory_model, inv_cat->getUUID());
- //}
+ open_outbox();
}
///----------------------------------------------------------------------------
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 7b452537f8..ce2b89b22e 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -74,9 +74,10 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s
// Generates a string containing the path to the item specified by item_id.
void append_path(const LLUUID& id, std::string& path);
-void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder);
+void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder, S32 operation_id);
+void move_item_within_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, S32 operation_id);
-void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder);
+void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder, S32 operation_id);
/** Miscellaneous global functions
** **
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 568ec4c5e2..a71b699fdd 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -217,6 +217,38 @@ const LLViewerInventoryCategory *LLInventoryModel::getFirstNondefaultParent(cons
return NULL;
}
+//
+// Search up the parent chain until we get to the specified parent, then return the first child category under it
+//
+const LLViewerInventoryCategory* LLInventoryModel::getFirstDescendantOf(const LLUUID& master_parent_id, const LLUUID& obj_id) const
+{
+ if (master_parent_id == obj_id)
+ {
+ return NULL;
+ }
+
+ const LLViewerInventoryCategory* current_cat = getCategory(obj_id);
+
+ if (current_cat == NULL)
+ {
+ current_cat = getCategory(getObject(obj_id)->getParentUUID());
+ }
+
+ while (current_cat != NULL)
+ {
+ const LLUUID& current_parent_id = current_cat->getParentUUID();
+
+ if (current_parent_id == master_parent_id)
+ {
+ return current_cat;
+ }
+
+ current_cat = getCategory(current_parent_id);
+ }
+
+ return NULL;
+}
+
// Get the object by id. Returns NULL if not found.
LLInventoryObject* LLInventoryModel::getObject(const LLUUID& id) const
{
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 0a564d353a..7cd85c4ab7 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -64,6 +64,7 @@ class LLInventoryCollectFunctor;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLInventoryModel
{
+ LOG_CLASS(LLInventoryModel);
public:
friend class LLInventoryModelFetchDescendentsResponder;
@@ -238,6 +239,9 @@ public:
// Get whatever special folder this object is a child of, if any.
const LLViewerInventoryCategory *getFirstNondefaultParent(const LLUUID& obj_id) const;
+
+ // Get first descendant of the child object under the specified parent
+ const LLViewerInventoryCategory *getFirstDescendantOf(const LLUUID& master_parent_id, const LLUUID& obj_id) const;
// Get the object by id. Returns NULL if not found.
// NOTE: Use the pointer returned for read operations - do
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 80b53d5702..382569fa3a 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -132,6 +132,7 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
mAcceptsDragAndDrop(p.accepts_drag_and_drop),
mAllowMultiSelect(p.allow_multi_select),
mShowItemLinkOverlays(p.show_item_link_overlays),
+ mShowEmptyMessage(p.show_empty_message),
mShowLoadStatus(p.show_load_status),
mViewsInitialized(false),
mInvFVBridgeBuilder(NULL)
@@ -617,6 +618,7 @@ LLFolderView * LLInventoryPanel::createFolderView(LLInvFVBridge * bridge, bool u
p.listener = bridge;
p.use_label_suffix = useLabelSuffix;
p.allow_multiselect = mAllowMultiSelect;
+ p.show_empty_message = mShowEmptyMessage;
p.show_load_status = mShowLoadStatus;
return LLUICtrlFactory::create<LLFolderView>(p);
@@ -1157,7 +1159,6 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
LLViewerInventoryCategory * cat = gInventory.getCategory(obj_id);
bool in_inbox = false;
- bool in_outbox = false;
LLViewerInventoryCategory * parent_cat = NULL;
@@ -1173,10 +1174,9 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
if (parent_cat)
{
in_inbox = (LLFolderType::FT_INBOX == parent_cat->getPreferredType());
- in_outbox = (LLFolderType::FT_OUTBOX == parent_cat->getPreferredType());
}
- if (in_inbox || in_outbox)
+ if (in_inbox)
{
LLSidepanelInventory * sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
LLInventoryPanel * inventory_panel = NULL;
@@ -1186,11 +1186,6 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
sidepanel_inventory->openInbox();
inventory_panel = sidepanel_inventory->getInboxPanel();
}
- else
- {
- sidepanel_inventory->openOutbox();
- inventory_panel = sidepanel_inventory->getOutboxPanel();
- }
if (inventory_panel)
{
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 2a24327115..8279163762 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -84,6 +84,7 @@ public:
Optional<Filter> filter;
Optional<std::string> start_folder;
Optional<bool> use_label_suffix;
+ Optional<bool> show_empty_message;
Optional<bool> show_load_status;
Optional<LLScrollContainer::Params> scroll;
Optional<bool> accepts_drag_and_drop;
@@ -96,6 +97,7 @@ public:
filter("filter"),
start_folder("start_folder"),
use_label_suffix("use_label_suffix", true),
+ show_empty_message("show_empty_message", true),
show_load_status("show_load_status"),
scroll("scroll"),
accepts_drag_and_drop("accepts_drag_and_drop")
@@ -188,6 +190,7 @@ protected:
BOOL mAcceptsDragAndDrop;
BOOL mAllowMultiSelect;
BOOL mShowItemLinkOverlays; // Shows link graphic over inventory item icons
+ BOOL mShowEmptyMessage;
BOOL mShowLoadStatus;
LLFolderView* mFolderRoot;
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
new file mode 100644
index 0000000000..a3f0a6062c
--- /dev/null
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -0,0 +1,463 @@
+/**
+ * @file llmarketplacefunctions.cpp
+ * @brief Implementation of assorted functions related to the marketplace
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llmarketplacefunctions.h"
+
+#include "llagent.h"
+#include "llhttpclient.h"
+#include "lltrans.h"
+#include "llviewercontrol.h"
+#include "llviewermedia.h"
+#include "llviewernetwork.h"
+
+
+//
+// Helpers
+//
+
+static std::string getMarketplaceDomain()
+{
+ std::string domain = "secondlife.com";
+
+ if (!LLGridManager::getInstance()->isInProductionGrid())
+ {
+ const std::string& grid_label = LLGridManager::getInstance()->getGridLabel();
+ const std::string& grid_label_lower = utf8str_tolower(grid_label);
+
+ if (grid_label_lower == "damballah")
+ {
+ domain = "secondlife-staging.com";
+ }
+ else
+ {
+ domain = llformat("%s.lindenlab.com", grid_label_lower.c_str());
+ }
+ }
+
+ return domain;
+}
+
+static std::string getMarketplaceURL(const std::string& urlStringName)
+{
+ LLStringUtil::format_map_t domain_arg;
+ domain_arg["[MARKETPLACE_DOMAIN_NAME]"] = getMarketplaceDomain();
+
+ std::string marketplace_url = LLTrans::getString(urlStringName, domain_arg);
+
+ return marketplace_url;
+}
+
+LLSD getMarketplaceStringSubstitutions()
+{
+ std::string marketplace_url = getMarketplaceURL("MarketplaceURL");
+ std::string marketplace_url_create = getMarketplaceURL("MarketplaceURL_CreateStore");
+ std::string marketplace_url_dashboard = getMarketplaceURL("MarketplaceURL_Dashboard");
+ std::string marketplace_url_imports = getMarketplaceURL("MarketplaceURL_Imports");
+ std::string marketplace_url_info = getMarketplaceURL("MarketplaceURL_LearnMore");
+
+ LLSD marketplace_sub_map;
+
+ marketplace_sub_map["[MARKETPLACE_URL]"] = marketplace_url;
+ marketplace_sub_map["[MARKETPLACE_CREATE_STORE_URL]"] = marketplace_url_create;
+ marketplace_sub_map["[MARKETPLACE_LEARN_MORE_URL]"] = marketplace_url_info;
+ marketplace_sub_map["[MARKETPLACE_DASHBOARD_URL]"] = marketplace_url_dashboard;
+ marketplace_sub_map["[MARKETPLACE_IMPORTS_URL]"] = marketplace_url_imports;
+
+ return marketplace_sub_map;
+}
+
+namespace LLMarketplaceImport
+{
+ // Basic interface for this namespace
+
+ bool hasSessionCookie();
+ bool inProgress();
+ bool resultPending();
+ U32 getResultStatus();
+ const LLSD& getResults();
+
+ bool establishMarketplaceSessionCookie();
+ bool pollStatus();
+ bool triggerImport();
+
+ // Internal state variables
+
+ static std::string sMarketplaceCookie = "";
+ static LLSD sImportId = LLSD::emptyMap();
+ static bool sImportInProgress = false;
+ static bool sImportPostPending = false;
+ static bool sImportGetPending = false;
+ static U32 sImportResultStatus = 0;
+ static LLSD sImportResults = LLSD::emptyMap();
+
+ // Responders
+
+ class LLImportPostResponder : public LLHTTPClient::Responder
+ {
+ public:
+ LLImportPostResponder() : LLCurl::Responder() {}
+
+ void completed(U32 status, const std::string& reason, const LLSD& content)
+ {
+ if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
+ {
+ llinfos << " SLM POST status: " << status << llendl;
+ llinfos << " SLM POST reason: " << reason << llendl;
+ llinfos << " SLM POST content: " << content.asString() << llendl;
+ }
+
+ if ((status == MarketplaceErrorCodes::IMPORT_REDIRECT) ||
+ (status == MarketplaceErrorCodes::IMPORT_AUTHENTICATION_ERROR) ||
+ (status == MarketplaceErrorCodes::IMPORT_JOB_TIMEOUT))
+ {
+ if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
+ {
+ llinfos << " SLM POST clearing marketplace cookie due to authentication failure or timeout" << llendl;
+ }
+
+ sMarketplaceCookie.clear();
+ }
+
+ sImportInProgress = (status == MarketplaceErrorCodes::IMPORT_DONE);
+ sImportPostPending = false;
+ sImportResultStatus = status;
+ sImportId = content;
+ }
+ };
+
+ class LLImportGetResponder : public LLHTTPClient::Responder
+ {
+ public:
+ LLImportGetResponder() : LLCurl::Responder() {}
+
+ void completedHeader(U32 status, const std::string& reason, const LLSD& content)
+ {
+ const std::string& set_cookie_string = content["set-cookie"].asString();
+
+ if (!set_cookie_string.empty())
+ {
+ sMarketplaceCookie = set_cookie_string;
+ }
+ }
+
+ void completed(U32 status, const std::string& reason, const LLSD& content)
+ {
+ if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
+ {
+ llinfos << " SLM GET status: " << status << llendl;
+ llinfos << " SLM GET reason: " << reason << llendl;
+ llinfos << " SLM GET content: " << content.asString() << llendl;
+ }
+
+ if ((status == MarketplaceErrorCodes::IMPORT_AUTHENTICATION_ERROR) ||
+ (status == MarketplaceErrorCodes::IMPORT_JOB_TIMEOUT))
+ {
+ if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
+ {
+ llinfos << " SLM GET clearing marketplace cookie due to authentication failure or timeout" << llendl;
+ }
+
+ sMarketplaceCookie.clear();
+ }
+
+ sImportInProgress = (status == MarketplaceErrorCodes::IMPORT_PROCESSING);
+ sImportGetPending = false;
+ sImportResultStatus = status;
+ sImportResults = content;
+ }
+ };
+
+ // Basic API
+
+ bool hasSessionCookie()
+ {
+ return !sMarketplaceCookie.empty();
+ }
+
+ bool inProgress()
+ {
+ return sImportInProgress;
+ }
+
+ bool resultPending()
+ {
+ return (sImportPostPending || sImportGetPending);
+ }
+
+ U32 getResultStatus()
+ {
+ return sImportResultStatus;
+ }
+
+ const LLSD& getResults()
+ {
+ return sImportResults;
+ }
+
+ static std::string getInventoryImportURL()
+ {
+ std::string url = getMarketplaceURL("MarketplaceURL");
+
+ url += "api/1/";
+ url += gAgent.getID().getString();
+ url += "/inventory/import/";
+
+ return url;
+ }
+
+ bool establishMarketplaceSessionCookie()
+ {
+ if (hasSessionCookie())
+ {
+ return false;
+ }
+
+ sImportInProgress = true;
+ sImportGetPending = true;
+
+ std::string url = getInventoryImportURL();
+
+ if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
+ {
+ llinfos << " SLM GET: " << url << llendl;
+ }
+
+ LLHTTPClient::get(url, new LLImportGetResponder(), LLViewerMedia::getHeaders());
+
+ return true;
+ }
+
+ bool pollStatus()
+ {
+ if (!hasSessionCookie())
+ {
+ return false;
+ }
+
+ sImportGetPending = true;
+
+ std::string url = getInventoryImportURL();
+
+ url += sImportId.asString();
+
+ // Make the headers for the post
+ LLSD headers = LLSD::emptyMap();
+ headers["Accept"] = "*/*";
+ headers["Cookie"] = sMarketplaceCookie;
+ headers["Content-Type"] = "application/llsd+xml";
+ headers["User-Agent"] = LLViewerMedia::getCurrentUserAgent();
+
+ if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
+ {
+ llinfos << " SLM GET: " << url << llendl;
+ }
+
+ LLHTTPClient::get(url, new LLImportGetResponder(), headers);
+
+ return true;
+ }
+
+ bool triggerImport()
+ {
+ if (!hasSessionCookie())
+ {
+ return false;
+ }
+
+ sImportId = LLSD::emptyMap();
+ sImportInProgress = true;
+ sImportPostPending = true;
+ sImportResultStatus = MarketplaceErrorCodes::IMPORT_PROCESSING;
+ sImportResults = LLSD::emptyMap();
+
+ std::string url = getInventoryImportURL();
+
+ // Make the headers for the post
+ LLSD headers = LLSD::emptyMap();
+ headers["Accept"] = "*/*";
+ headers["Connection"] = "Keep-Alive";
+ headers["Cookie"] = sMarketplaceCookie;
+ headers["Content-Type"] = "application/xml";
+ headers["User-Agent"] = LLViewerMedia::getCurrentUserAgent();
+
+ if (gSavedSettings.getBOOL("InventoryOutboxLogging"))
+ {
+ llinfos << " SLM POST: " << url << llendl;
+ }
+
+ LLHTTPClient::post(url, LLSD(), new LLImportPostResponder(), headers);
+
+ return true;
+ }
+}
+
+
+//
+// Interface class
+//
+
+
+//static
+void LLMarketplaceInventoryImporter::update()
+{
+ if (instanceExists())
+ {
+ LLMarketplaceInventoryImporter::instance().updateImport();
+ }
+}
+
+LLMarketplaceInventoryImporter::LLMarketplaceInventoryImporter()
+ : mAutoTriggerImport(false)
+ , mImportInProgress(false)
+ , mInitialized(false)
+ , mErrorInitSignal(NULL)
+ , mStatusChangedSignal(NULL)
+ , mStatusReportSignal(NULL)
+{
+}
+
+boost::signals2::connection LLMarketplaceInventoryImporter::setInitializationErrorCallback(const status_report_signal_t::slot_type& cb)
+{
+ if (mErrorInitSignal == NULL)
+ {
+ mErrorInitSignal = new status_report_signal_t();
+ }
+
+ return mErrorInitSignal->connect(cb);
+}
+
+boost::signals2::connection LLMarketplaceInventoryImporter::setStatusChangedCallback(const status_changed_signal_t::slot_type& cb)
+{
+ if (mStatusChangedSignal == NULL)
+ {
+ mStatusChangedSignal = new status_changed_signal_t();
+ }
+
+ return mStatusChangedSignal->connect(cb);
+}
+
+boost::signals2::connection LLMarketplaceInventoryImporter::setStatusReportCallback(const status_report_signal_t::slot_type& cb)
+{
+ if (mStatusReportSignal == NULL)
+ {
+ mStatusReportSignal = new status_report_signal_t();
+ }
+
+ return mStatusReportSignal->connect(cb);
+}
+
+void LLMarketplaceInventoryImporter::initialize()
+{
+ llassert(!mInitialized);
+
+ if (!LLMarketplaceImport::hasSessionCookie())
+ {
+ LLMarketplaceImport::establishMarketplaceSessionCookie();
+ }
+}
+
+void LLMarketplaceInventoryImporter::reinitializeAndTriggerImport()
+{
+ mInitialized = false;
+
+ initialize();
+
+ mAutoTriggerImport = true;
+}
+
+bool LLMarketplaceInventoryImporter::triggerImport()
+{
+ const bool import_triggered = LLMarketplaceImport::triggerImport();
+
+ if (!import_triggered)
+ {
+ reinitializeAndTriggerImport();
+ }
+
+ return import_triggered;
+}
+
+void LLMarketplaceInventoryImporter::updateImport()
+{
+ const bool in_progress = LLMarketplaceImport::inProgress();
+
+ if (in_progress && !LLMarketplaceImport::resultPending())
+ {
+ const bool polling_status = LLMarketplaceImport::pollStatus();
+
+ if (!polling_status)
+ {
+ reinitializeAndTriggerImport();
+ }
+ }
+
+ if (mImportInProgress != in_progress)
+ {
+ mImportInProgress = in_progress;
+
+ // If we are no longer in progress
+ if (!mImportInProgress)
+ {
+ if (mInitialized)
+ {
+ // Report results
+ if (mStatusReportSignal)
+ {
+ (*mStatusReportSignal)(LLMarketplaceImport::getResultStatus(), LLMarketplaceImport::getResults());
+ }
+ }
+ else
+ {
+ // Look for results success
+ mInitialized = LLMarketplaceImport::hasSessionCookie();
+
+ if (mInitialized)
+ {
+ // Follow up with auto trigger of import
+ if (mAutoTriggerImport)
+ {
+ mAutoTriggerImport = false;
+
+ mImportInProgress = triggerImport();
+ }
+ }
+ else if (mErrorInitSignal)
+ {
+ (*mErrorInitSignal)(LLMarketplaceImport::getResultStatus(), LLMarketplaceImport::getResults());
+ }
+ }
+ }
+
+ // Make sure we trigger the status change with the final state (in case of auto trigger after initialize)
+ if (mStatusChangedSignal)
+ {
+ (*mStatusChangedSignal)(mImportInProgress);
+ }
+ }
+}
+
diff --git a/indra/newview/llmarketplacefunctions.h b/indra/newview/llmarketplacefunctions.h
new file mode 100644
index 0000000000..4b8f7a1ac7
--- /dev/null
+++ b/indra/newview/llmarketplacefunctions.h
@@ -0,0 +1,94 @@
+/**
+ * @file llmarketplacefunctions.h
+ * @brief Miscellaneous marketplace-related functions and classes
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLMARKETPLACEFUNCTIONS_H
+#define LL_LLMARKETPLACEFUNCTIONS_H
+
+
+#include <llsd.h>
+#include <boost/function.hpp>
+#include <boost/signals2.hpp>
+
+#include "llsingleton.h"
+#include "llstring.h"
+
+
+LLSD getMarketplaceStringSubstitutions();
+
+
+namespace MarketplaceErrorCodes
+{
+ enum eCode
+ {
+ IMPORT_DONE = 200,
+ IMPORT_PROCESSING = 202,
+ IMPORT_REDIRECT = 302,
+ IMPORT_AUTHENTICATION_ERROR = 401,
+ IMPORT_DONE_WITH_ERRORS = 409,
+ IMPORT_JOB_FAILED = 410,
+ IMPORT_JOB_TIMEOUT = 499,
+ };
+}
+
+
+class LLMarketplaceInventoryImporter
+ : public LLSingleton<LLMarketplaceInventoryImporter>
+{
+public:
+ static void update();
+
+ LLMarketplaceInventoryImporter();
+
+ typedef boost::signals2::signal<void (bool)> status_changed_signal_t;
+ typedef boost::signals2::signal<void (U32, const LLSD&)> status_report_signal_t;
+
+ boost::signals2::connection setInitializationErrorCallback(const status_report_signal_t::slot_type& cb);
+ boost::signals2::connection setStatusChangedCallback(const status_changed_signal_t::slot_type& cb);
+ boost::signals2::connection setStatusReportCallback(const status_report_signal_t::slot_type& cb);
+
+ void initialize();
+ bool triggerImport();
+ bool isImportInProgress() const { return mImportInProgress; }
+
+protected:
+ void reinitializeAndTriggerImport();
+ void updateImport();
+
+private:
+ bool mAutoTriggerImport;
+ bool mImportInProgress;
+ bool mInitialized;
+
+ status_report_signal_t * mErrorInitSignal;
+ status_changed_signal_t * mStatusChangedSignal;
+ status_report_signal_t * mStatusReportSignal;
+};
+
+
+
+#endif // LL_LLMARKETPLACEFUNCTIONS_H
+
diff --git a/indra/newview/llmarketplacenotifications.cpp b/indra/newview/llmarketplacenotifications.cpp
new file mode 100644
index 0000000000..0886f9a990
--- /dev/null
+++ b/indra/newview/llmarketplacenotifications.cpp
@@ -0,0 +1,90 @@
+/**
+ * @file llmarketplacenotifications.cpp
+ * @brief Handler for notifications related to marketplace file I/O
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "llviewerprecompiledheaders.h"
+
+#include "llmarketplacenotifications.h"
+#include "llnotificationsutil.h"
+
+#include "llerror.h"
+
+#include <boost/foreach.hpp>
+#include <boost/signals2.hpp>
+
+
+namespace LLMarketplaceInventoryNotifications
+{
+ typedef boost::signals2::signal<void (const LLSD& param)> no_copy_payload_cb_signal_t;
+
+ static no_copy_payload_cb_signal_t* no_copy_cb_action = NULL;
+ static bool no_copy_notify_active = false;
+ static std::list<LLSD> no_copy_payloads;
+
+ void notifyNoCopyCallback(const LLSD& notification, const LLSD& response)
+ {
+ const S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ if (option == 0)
+ {
+ llassert(!no_copy_payloads.empty());
+ llassert(no_copy_cb_action != NULL);
+
+ BOOST_FOREACH(const LLSD& payload, no_copy_payloads)
+ {
+ (*no_copy_cb_action)(payload);
+ }
+ }
+
+ delete no_copy_cb_action;
+ no_copy_cb_action = NULL;
+
+ no_copy_notify_active = false;
+ no_copy_payloads.clear();
+ }
+
+ void update()
+ {
+ if (!no_copy_notify_active && !no_copy_payloads.empty())
+ {
+ no_copy_notify_active = true;
+
+ LLNotificationsUtil::add("ConfirmNoCopyToOutbox", LLSD(), LLSD(), boost::bind(&notifyNoCopyCallback, _1, _2));
+ }
+ }
+
+ void addNoCopyNotification(const LLSD& payload, const NoCopyCallbackFunction& cb)
+ {
+ if (no_copy_cb_action == NULL)
+ {
+ no_copy_cb_action = new no_copy_payload_cb_signal_t;
+ no_copy_cb_action->connect(boost::bind(cb, _1));
+ }
+
+ no_copy_payloads.push_back(payload);
+ }
+}
diff --git a/indra/newview/llmarketplacenotifications.h b/indra/newview/llmarketplacenotifications.h
new file mode 100644
index 0000000000..83a4e163c7
--- /dev/null
+++ b/indra/newview/llmarketplacenotifications.h
@@ -0,0 +1,57 @@
+/**
+ * @file llmarketplacenotifications.h
+ * @brief Handler for notifications related to marketplace file I/O
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLMARKETPLACENOTIFICATIONS_H
+#define LL_LLMARKETPLACENOTIFICATIONS_H
+
+
+#include <llsd.h>
+#include <boost/function.hpp>
+
+
+//
+// This is a set of helper functions to handle a unique notification with multiple
+// payloads, helpful when dragging and dropping items to the merchant outbox that
+// trigger notifications that can potentially interfere with the current drag and
+// drop operation.
+//
+// Notification payloads are cached locally when initiated, the notification itself
+// is triggered on the following frame during the call to "update" and then the
+// response is triggered once per payload.
+//
+
+namespace LLMarketplaceInventoryNotifications
+{
+ void update();
+
+ typedef boost::function<void (const LLSD&)> NoCopyCallbackFunction;
+
+ void addNoCopyNotification(const LLSD& payload, const NoCopyCallbackFunction& cb);
+};
+
+
+#endif // LL_LLMARKETPLACENOTIFICATIONS_H
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index a97e256c89..c64479f589 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -498,9 +498,11 @@ void LLMeshRepoThread::run()
LODRequest req = mLODReqQ.front();
mLODReqQ.pop();
mMutex->unlock();
- if (fetchMeshLOD(req.mMeshParams, req.mLOD))
+ if (!fetchMeshLOD(req.mMeshParams, req.mLOD, count))//failed, resubmit
{
- count++;
+ mMutex->lock();
+ mLODReqQ.push(req) ;
+ mMutex->unlock();
}
}
}
@@ -512,9 +514,11 @@ void LLMeshRepoThread::run()
HeaderRequest req = mHeaderReqQ.front();
mHeaderReqQ.pop();
mMutex->unlock();
- if (fetchMeshHeader(req.mMeshParams))
+ if (!fetchMeshHeader(req.mMeshParams, count))//failed, resubmit
{
- count++;
+ mMutex->lock();
+ mHeaderReqQ.push(req) ;
+ mMutex->unlock();
}
}
}
@@ -658,6 +662,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
return false;
}
+ bool ret = true ;
U32 header_size = mMeshHeaderSize[mesh_id];
if (header_size > 0)
@@ -673,7 +678,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
//check VFS for mesh skin info
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
if (file.getSize() >= offset+size)
- {
+ {
LLMeshRepository::sCacheBytesRead += size;
file.seek(offset);
U8* buffer = new U8[size];
@@ -689,7 +694,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
if (!zero)
{ //attempt to parse
if (skinInfoReceived(mesh_id, buffer, size))
- {
+ {
delete[] buffer;
return true;
}
@@ -704,11 +709,14 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
std::string http_url = constructUrl(mesh_id);
if (!http_url.empty())
- {
- ++sActiveLODRequests;
- LLMeshRepository::sHTTPRequestCount++;
- mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size,
+ {
+ ret = mCurlRequest->getByteRange(http_url, headers, offset, size,
new LLMeshSkinInfoResponder(mesh_id, offset, size));
+ if(ret)
+ {
+ ++sActiveLODRequests;
+ LLMeshRepository::sHTTPRequestCount++;
+ }
}
}
}
@@ -718,7 +726,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
}
//early out was not hit, effectively fetched
- return true;
+ return ret;
}
bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
@@ -732,7 +740,8 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
}
U32 header_size = mMeshHeaderSize[mesh_id];
-
+ bool ret = true ;
+
if (header_size > 0)
{
S32 version = mMeshHeader[mesh_id]["version"].asInteger();
@@ -748,6 +757,7 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
if (file.getSize() >= offset+size)
{
LLMeshRepository::sCacheBytesRead += size;
+
file.seek(offset);
U8* buffer = new U8[size];
file.read(buffer, size);
@@ -777,11 +787,14 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
std::string http_url = constructUrl(mesh_id);
if (!http_url.empty())
- {
- ++sActiveLODRequests;
- LLMeshRepository::sHTTPRequestCount++;
- mCurlRequest->getByteRange(http_url, headers, offset, size,
+ {
+ ret = mCurlRequest->getByteRange(http_url, headers, offset, size,
new LLMeshDecompositionResponder(mesh_id, offset, size));
+ if(ret)
+ {
+ ++sActiveLODRequests;
+ LLMeshRepository::sHTTPRequestCount++;
+ }
}
}
}
@@ -791,7 +804,7 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
}
//early out was not hit, effectively fetched
- return true;
+ return ret;
}
bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
@@ -805,6 +818,7 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
}
U32 header_size = mMeshHeaderSize[mesh_id];
+ bool ret = true ;
if (header_size > 0)
{
@@ -850,11 +864,15 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
std::string http_url = constructUrl(mesh_id);
if (!http_url.empty())
- {
- ++sActiveLODRequests;
- LLMeshRepository::sHTTPRequestCount++;
- mCurlRequest->getByteRange(http_url, headers, offset, size,
+ {
+ ret = mCurlRequest->getByteRange(http_url, headers, offset, size,
new LLMeshPhysicsShapeResponder(mesh_id, offset, size));
+
+ if(ret)
+ {
+ ++sActiveLODRequests;
+ LLMeshRepository::sHTTPRequestCount++;
+ }
}
}
else
@@ -868,13 +886,12 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
}
//early out was not hit, effectively fetched
- return true;
+ return ret;
}
-bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params)
+//return false if failed to get header
+bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params, U32& count)
{
- bool retval = false;
-
{
//look for mesh in asset in vfs
LLVFile file(gVFS, mesh_params.getSculptID(), LLAssetType::AT_MESH);
@@ -889,36 +906,40 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params)
file.read(buffer, bytes);
if (headerReceived(mesh_params, buffer, bytes))
{ //did not do an HTTP request, return false
- return false;
+ return true;
}
}
}
- //either cache entry doesn't exist or is corrupt, request header from simulator
-
+ //either cache entry doesn't exist or is corrupt, request header from simulator
+ bool retval = true ;
std::vector<std::string> headers;
headers.push_back("Accept: application/octet-stream");
std::string http_url = constructUrl(mesh_params.getSculptID());
if (!http_url.empty())
{
- ++sActiveHeaderRequests;
- retval = true;
//grab first 4KB if we're going to bother with a fetch. Cache will prevent future fetches if a full mesh fits
//within the first 4KB
- //NOTE -- this will break of headers ever exceed 4KB
- LLMeshRepository::sHTTPRequestCount++;
- mCurlRequest->getByteRange(http_url, headers, 0, 4096, new LLMeshHeaderResponder(mesh_params));
+ //NOTE -- this will break of headers ever exceed 4KB
+ retval = mCurlRequest->getByteRange(http_url, headers, 0, 4096, new LLMeshHeaderResponder(mesh_params));
+ if(retval)
+ {
+ ++sActiveHeaderRequests;
+ LLMeshRepository::sHTTPRequestCount++;
+ }
+ count++;
}
return retval;
}
-bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)
+//return false if failed to get mesh lod.
+bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod, U32& count)
{ //protected by mMutex
mHeaderMutex->lock();
- bool retval = false;
+ bool retval = true;
LLUUID mesh_id = mesh_params.getSculptID();
@@ -955,7 +976,7 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)
if (lodReceived(mesh_params, lod, buffer, size))
{
delete[] buffer;
- return false;
+ return true;
}
}
@@ -968,12 +989,16 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)
std::string http_url = constructUrl(mesh_id);
if (!http_url.empty())
- {
- ++sActiveLODRequests;
- retval = true;
- LLMeshRepository::sHTTPRequestCount++;
- mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size,
+ {
+ retval = mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size,
new LLMeshLODResponder(mesh_params, lod, offset, size));
+
+ if(retval)
+ {
+ ++sActiveLODRequests;
+ LLMeshRepository::sHTTPRequestCount++;
+ }
+ count++;
}
else
{
@@ -1540,8 +1565,17 @@ void LLMeshUploadThread::doWholeModelUpload()
LLSD body = full_model_data["asset_resources"];
dump_llsd_to_file(body,make_dump_name("whole_model_body_",dump_num));
LLCurlRequest::headers_t headers;
- mCurlRequest->post(mWholeModelUploadURL, headers, body,
- new LLWholeModelUploadResponder(this, full_model_data, mUploadObserverHandle), mMeshUploadTimeOut);
+
+ {
+ LLCurl::ResponderPtr responder = new LLWholeModelUploadResponder(this, full_model_data, mUploadObserverHandle) ;
+
+ while(!mCurlRequest->post(mWholeModelUploadURL, headers, body, responder, mMeshUploadTimeOut))
+ {
+ //sleep for 10ms to prevent eating a whole core
+ apr_sleep(10000);
+ }
+ }
+
do
{
mCurlRequest->process();
@@ -1571,8 +1605,15 @@ void LLMeshUploadThread::requestWholeModelFee()
mPendingUploads++;
LLCurlRequest::headers_t headers;
- mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,
- new LLWholeModelFeeResponder(this,model_data, mFeeObserverHandle), mMeshUploadTimeOut);
+
+ {
+ LLCurl::ResponderPtr responder = new LLWholeModelFeeResponder(this,model_data, mFeeObserverHandle) ;
+ while(!mCurlRequest->post(mWholeModelFeeCapability, headers, model_data, responder, mMeshUploadTimeOut))
+ {
+ //sleep for 10ms to prevent eating a whole core
+ apr_sleep(10000);
+ }
+ }
do
{
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index 31b84ea0d9..2efe810438 100644
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -323,8 +323,8 @@ public:
virtual void run();
void loadMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
- bool fetchMeshHeader(const LLVolumeParams& mesh_params);
- bool fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
+ bool fetchMeshHeader(const LLVolumeParams& mesh_params, U32& count);
+ bool fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod, U32& count);
bool headerReceived(const LLVolumeParams& mesh_params, U8* data, S32 data_size);
bool lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size);
bool skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 28a69f2373..23dbb6b047 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -283,9 +283,17 @@ class LLBrowserNotification : public LLSingleton<LLBrowserNotification>
{
public:
virtual bool processNotification(const LLSD& notify);
+};
+/**
+ * Handler for outbox notifications
+ */
+class LLOutboxNotification : public LLSingleton<LLOutboxNotification>
+{
+public:
+ virtual bool processNotification(const LLSD& notify);
};
-
+
class LLHandlerUtil
{
public:
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 6988227128..6105eff8ea 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -62,6 +62,7 @@ void LLNotificationManager::init()
LLNotificationChannel::buildChannel("Offer", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "offer"));
LLNotificationChannel::buildChannel("Hints", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "hint"));
LLNotificationChannel::buildChannel("Browser", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "browser"));
+ LLNotificationChannel::buildChannel("Outbox", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "outbox"));
LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
@@ -72,6 +73,7 @@ void LLNotificationManager::init()
LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
LLNotifications::instance().getChannel("Hints")->connectChanged(boost::bind(&LLHintHandler::processNotification, LLHintHandler::getInstance(), _1));
LLNotifications::instance().getChannel("Browser")->connectChanged(boost::bind(&LLBrowserNotification::processNotification, LLBrowserNotification::getInstance(), _1));
+ LLNotifications::instance().getChannel("Outbox")->connectChanged(boost::bind(&LLOutboxNotification::processNotification, LLOutboxNotification::getInstance(), _1));
mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
mNotifyHandlers["notifytip"] = boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 68ef13cd68..374afb90be 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -593,7 +593,7 @@ void LLPanelMainInventory::onFocusReceived()
return;
}
- sidepanel_inventory->clearSelections(false, true, true);
+ sidepanel_inventory->clearSelections(false, true);
}
void LLPanelMainInventory::setFilterTextFromFilter()
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
index 7cb4bbf891..66c9c323cb 100644
--- a/indra/newview/llpanelmarketplaceinbox.cpp
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -48,6 +48,8 @@ const LLPanelMarketplaceInbox::Params& LLPanelMarketplaceInbox::getDefaultParams
// protected
LLPanelMarketplaceInbox::LLPanelMarketplaceInbox(const Params& p)
: LLPanel(p)
+ , mFreshCountCtrl(NULL)
+ , mInboxButton(NULL)
, mInventoryPanel(NULL)
{
}
@@ -60,6 +62,9 @@ LLPanelMarketplaceInbox::~LLPanelMarketplaceInbox()
BOOL LLPanelMarketplaceInbox::postBuild()
{
LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMarketplaceInbox::onFocusReceived, this));
+
+ mFreshCountCtrl = getChild<LLUICtrl>("inbox_fresh_new_count");
+ mInboxButton = getChild<LLButton>("inbox_btn");
return TRUE;
}
@@ -109,7 +114,7 @@ void LLPanelMarketplaceInbox::onFocusReceived()
LLSidepanelInventory *sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
if (sidepanel_inventory)
{
- sidepanel_inventory->clearSelections(true, false, true);
+ sidepanel_inventory->clearSelections(true, false);
}
gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected());
@@ -216,7 +221,7 @@ void LLPanelMarketplaceInbox::draw()
{
U32 item_count = getTotalItemCount();
- LLView * fresh_new_count_view = getChildView("inbox_fresh_new_count");
+ llassert(mFreshCountCtrl != NULL);
if (item_count > 0)
{
@@ -224,26 +229,26 @@ void LLPanelMarketplaceInbox::draw()
LLStringUtil::format_map_t args;
args["[NUM]"] = item_count_str;
- getChild<LLButton>("inbox_btn")->setLabel(getString("InboxLabelWithArg", args));
+ mInboxButton->setLabel(getString("InboxLabelWithArg", args));
#if SUPPORTING_FRESH_ITEM_COUNT
// set green text to fresh item count
U32 fresh_item_count = getFreshItemCount();
- fresh_new_count_view->setVisible((fresh_item_count > 0));
+ mFreshCountCtrl->setVisible((fresh_item_count > 0));
if (fresh_item_count > 0)
{
- getChild<LLUICtrl>("inbox_fresh_new_count")->setTextArg("[NUM]", llformat("%d", fresh_item_count));
+ mFreshCountCtrl->setTextArg("[NUM]", llformat("%d", fresh_item_count));
}
#else
- fresh_new_count_view->setVisible(FALSE);
+ mFreshCountCtrl->setVisible(FALSE);
#endif
}
else
{
- getChild<LLButton>("inbox_btn")->setLabel(getString("InboxLabelNoArg"));
+ mInboxButton->setLabel(getString("InboxLabelNoArg"));
- fresh_new_count_view->setVisible(FALSE);
+ mFreshCountCtrl->setVisible(FALSE);
}
LLPanel::draw();
diff --git a/indra/newview/llpanelmarketplaceinbox.h b/indra/newview/llpanelmarketplaceinbox.h
index 3531518e51..9eb74581a2 100644
--- a/indra/newview/llpanelmarketplaceinbox.h
+++ b/indra/newview/llpanelmarketplaceinbox.h
@@ -29,7 +29,9 @@
#include "llpanel.h"
+class LLButton;
class LLInventoryPanel;
+class LLUICtrl;
class LLPanelMarketplaceInbox : public LLPanel
{
@@ -66,9 +68,10 @@ private:
void onFocusReceived();
private:
- LLInventoryPanel* mInventoryPanel;
+ LLUICtrl * mFreshCountCtrl;
+ LLButton * mInboxButton;
+ LLInventoryPanel * mInventoryPanel;
};
#endif //LL_LLPANELMARKETPLACEINBOX_H
-
diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp
deleted file mode 100644
index 12960fd0d6..0000000000
--- a/indra/newview/llpanelmarketplaceoutbox.cpp
+++ /dev/null
@@ -1,363 +0,0 @@
-/**
- * @file llpanelmarketplaceoutbox.cpp
- * @brief Panel for marketplace outbox
- *
-* $LicenseInfo:firstyear=2011&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llpanelmarketplaceoutbox.h"
-#include "llpanelmarketplaceoutboxinventory.h"
-
-#include "llappviewer.h"
-#include "llbutton.h"
-#include "llcoros.h"
-#include "lleventcoro.h"
-#include "llfloatersidepanelcontainer.h"
-#include "llinventorypanel.h"
-#include "llloadingindicator.h"
-#include "llnotificationsutil.h"
-#include "llpanelmarketplaceinbox.h"
-#include "llsdutil.h"
-#include "llsidepanelinventory.h"
-#include "lltimer.h"
-#include "llviewernetwork.h"
-#include "llagent.h"
-#include "llviewermedia.h"
-#include "llfolderview.h"
-#include "llinventoryfunctions.h"
-
-static LLRegisterPanelClassWrapper<LLPanelMarketplaceOutbox> t_panel_marketplace_outbox("panel_marketplace_outbox");
-
-const LLPanelMarketplaceOutbox::Params& LLPanelMarketplaceOutbox::getDefaultParams()
-{
- return LLUICtrlFactory::getDefaultParams<LLPanelMarketplaceOutbox>();
-}
-
-// protected
-LLPanelMarketplaceOutbox::LLPanelMarketplaceOutbox(const Params& p)
- : LLPanel(p)
- , mInventoryPanel(NULL)
- , mSyncButton(NULL)
- , mSyncIndicator(NULL)
- , mSyncInProgress(false)
-{
-}
-
-LLPanelMarketplaceOutbox::~LLPanelMarketplaceOutbox()
-{
-}
-
-// virtual
-BOOL LLPanelMarketplaceOutbox::postBuild()
-{
- LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLPanelMarketplaceOutbox::handleLoginComplete, this));
-
- LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMarketplaceOutbox::onFocusReceived, this));
-
- return TRUE;
-}
-
-void LLPanelMarketplaceOutbox::handleLoginComplete()
-{
- mSyncButton = getChild<LLButton>("outbox_sync_btn");
- mSyncButton->setCommitCallback(boost::bind(&LLPanelMarketplaceOutbox::onSyncButtonClicked, this));
- mSyncButton->setEnabled(!isOutboxEmpty());
-
- mSyncIndicator = getChild<LLLoadingIndicator>("outbox_sync_indicator");
-}
-
-void LLPanelMarketplaceOutbox::onFocusReceived()
-{
- LLSidepanelInventory * sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
- if (sidepanel_inventory)
- {
- sidepanel_inventory->clearSelections(true, true, false);
- }
-}
-
-void LLPanelMarketplaceOutbox::onSelectionChange()
-{
- LLSidepanelInventory* sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
- if (sidepanel_inventory)
- {
- sidepanel_inventory->updateVerbs();
- }
-}
-
-LLInventoryPanel * LLPanelMarketplaceOutbox::setupInventoryPanel()
-{
- LLView * outbox_inventory_placeholder = getChild<LLView>("outbox_inventory_placeholder_panel");
- LLView * outbox_inventory_parent = outbox_inventory_placeholder->getParent();
-
- mInventoryPanel =
- LLUICtrlFactory::createFromFile<LLInventoryPanel>("panel_outbox_inventory.xml",
- outbox_inventory_parent,
- LLInventoryPanel::child_registry_t::instance());
-
- llassert(mInventoryPanel);
-
- // Reshape the inventory to the proper size
- LLRect inventory_placeholder_rect = outbox_inventory_placeholder->getRect();
- mInventoryPanel->setShape(inventory_placeholder_rect);
-
- // Set the sort order newest to oldest
- mInventoryPanel->setSortOrder(LLInventoryFilter::SO_DATE);
- mInventoryPanel->getFilter()->markDefault();
-
- // Set selection callback for proper update of inventory status buttons
- mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceOutbox::onSelectionChange, this));
-
- // Set up the note to display when the outbox is empty
- mInventoryPanel->getFilter()->setEmptyLookupMessage("InventoryOutboxNoItems");
-
- // Hide the placeholder text
- outbox_inventory_placeholder->setVisible(FALSE);
-
- return mInventoryPanel;
-}
-
-BOOL LLPanelMarketplaceOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
- EDragAndDropType cargo_type,
- void* cargo_data,
- EAcceptance* accept,
- std::string& tooltip_msg)
-{
- BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-
- if (!handled && mInventoryPanel && mInventoryPanel->getRootFolder())
- {
- handled = mInventoryPanel->getRootFolder()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg);
-
- if (handled)
- {
- mInventoryPanel->getRootFolder()->setDragAndDropThisFrame();
- }
- }
-
- return handled;
-}
-
-bool LLPanelMarketplaceOutbox::isOutboxEmpty() const
-{
- return (getTotalItemCount() == 0);
-}
-
-bool LLPanelMarketplaceOutbox::isSyncInProgress() const
-{
- return mSyncInProgress;
-}
-
-
-std::string gTimeDelayDebugFunc = "";
-
-void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel)
-{
- waitForEventOn(self, "mainloop");
-
- LLTimer delayTimer;
- delayTimer.reset();
- delayTimer.setTimerExpirySec(5.0f);
-
- while (!delayTimer.hasExpired())
- {
- waitForEventOn(self, "mainloop");
- }
-
- outboxPanel->onSyncComplete(true, LLSD::emptyMap());
-
- gTimeDelayDebugFunc = "";
-}
-
-
-class LLInventorySyncResponder : public LLHTTPClient::Responder
-{
-public:
- LLInventorySyncResponder(LLPanelMarketplaceOutbox * outboxPanel)
- : LLCurl::Responder()
- , mOutboxPanel(outboxPanel)
- {
- }
-
- void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- llinfos << "inventory_import complete status: " << status << ", reason: " << reason << llendl;
-
- if (isGoodStatus(status))
- {
- // Complete success
- llinfos << "success" << llendl;
- }
- else
- {
- llwarns << "failed" << llendl;
- }
-
- mOutboxPanel->onSyncComplete(isGoodStatus(status), content);
- }
-
-private:
- LLPanelMarketplaceOutbox * mOutboxPanel;
-};
-
-void LLPanelMarketplaceOutbox::onSyncButtonClicked()
-{
- // Get the sync animation going
- mSyncInProgress = true;
- updateSyncButtonStatus();
-
- // Make the url for the inventory import request
- std::string url = "https://marketplace.secondlife.com/";
-
- if (!LLGridManager::getInstance()->isInProductionGrid())
- {
- std::string gridLabel = LLGridManager::getInstance()->getGridLabel();
- url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str());
-
- // TEMP for Jim's pdp
- //url = "http://pdp24.lindenlab.com:3000/";
- }
-
- url += "api/1/users/";
- url += gAgent.getID().getString();
- url += "/inventory_import";
-
- llinfos << "http get: " << url << llendl;
- LLHTTPClient::get(url, new LLInventorySyncResponder(this), LLViewerMedia::getHeaders());
-
- // Set a timer (for testing only)
- //gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this));
-}
-
-void LLPanelMarketplaceOutbox::onSyncComplete(bool goodStatus, const LLSD& content)
-{
- mSyncInProgress = false;
- updateSyncButtonStatus();
-
- const LLSD& errors_list = content["errors"];
-
- if (goodStatus && (errors_list.size() == 0))
- {
- LLNotificationsUtil::add("OutboxUploadComplete", LLSD::emptyMap(), LLSD::emptyMap());
- }
- else
- {
- LLNotificationsUtil::add("OutboxUploadHadErrors", LLSD::emptyMap(), LLSD::emptyMap());
- }
-
- llinfos << "Marketplace upload llsd:" << llendl;
- llinfos << ll_pretty_print_sd(content) << llendl;
- llinfos << llendl;
-
- const LLSD& imported_list = content["imported"];
- LLSD::array_const_iterator it = imported_list.beginArray();
- for ( ; it != imported_list.endArray(); ++it)
- {
- LLUUID imported_folder = (*it).asUUID();
- llinfos << "Successfully uploaded folder " << imported_folder.asString() << " to marketplace." << llendl;
- }
-
- for (it = errors_list.beginArray(); it != errors_list.endArray(); ++it)
- {
- const LLSD& item_error_map = (*it);
-
- LLUUID error_folder = item_error_map["folder_id"].asUUID();
- const std::string& error_string = item_error_map["identifier"].asString();
- LLUUID error_item = item_error_map["item_id"].asUUID();
- const std::string& error_item_name = item_error_map["item_name"].asString();
- const std::string& error_message = item_error_map["message"].asString();
-
- llinfos << "Error item " << error_folder.asString() << ", " << error_string << ", "
- << error_item.asString() << ", " << error_item_name << ", " << error_message << llendl;
-
- LLFolderViewFolder * item_folder = mInventoryPanel->getRootFolder()->getFolderByID(error_folder);
- LLOutboxFolderViewFolder * outbox_item_folder = dynamic_cast<LLOutboxFolderViewFolder *>(item_folder);
-
- llassert(outbox_item_folder);
-
- outbox_item_folder->setErrorString(error_string);
- }
-}
-
-void LLPanelMarketplaceOutbox::updateSyncButtonStatus()
-{
- if (isSyncInProgress())
- {
- mSyncButton->setVisible(false);
-
- mSyncIndicator->setVisible(true);
- mSyncIndicator->reset();
- mSyncIndicator->start();
- }
- else
- {
- mSyncIndicator->stop();
- mSyncIndicator->setVisible(false);
-
- mSyncButton->setVisible(true);
- mSyncButton->setEnabled(!isOutboxEmpty());
- }
-}
-
-U32 LLPanelMarketplaceOutbox::getTotalItemCount() const
-{
- U32 item_count = 0;
-
- if (mInventoryPanel)
- {
- const LLFolderViewFolder * outbox_folder = mInventoryPanel->getRootFolder();
-
- if (outbox_folder)
- {
- item_count += outbox_folder->getFoldersCount();
- }
- }
-
- return item_count;
-}
-
-void LLPanelMarketplaceOutbox::draw()
-{
- const U32 item_count = getTotalItemCount();
- const bool not_empty = (item_count > 0);
-
- if (not_empty)
- {
- std::string item_count_str = llformat("%d", item_count);
-
- LLStringUtil::format_map_t args;
- args["[NUM]"] = item_count_str;
- getChild<LLButton>("outbox_btn")->setLabel(getString("OutboxLabelWithArg", args));
- }
- else
- {
- getChild<LLButton>("outbox_btn")->setLabel(getString("OutboxLabelNoArg"));
- }
-
- if (!isSyncInProgress())
- {
- mSyncButton->setEnabled(not_empty);
- }
-
- LLPanel::draw();
-}
diff --git a/indra/newview/llpanelmarketplaceoutbox.h b/indra/newview/llpanelmarketplaceoutbox.h
deleted file mode 100644
index c6b4a5abe2..0000000000
--- a/indra/newview/llpanelmarketplaceoutbox.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * @file llpanelmarketplaceoutbox.h
- * @brief Panel for marketplace outbox
- *
-* $LicenseInfo:firstyear=2011&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLPANELMARKETPLACEOUTBOX_H
-#define LL_LLPANELMARKETPLACEOUTBOX_H
-
-#include "llpanel.h"
-
-
-class LLButton;
-class LLInventoryPanel;
-class LLLoadingIndicator;
-
-
-class LLPanelMarketplaceOutbox : public LLPanel
-{
-public:
-
- struct Params : public LLInitParam::Block<Params, LLPanel::Params>
- {};
-
- LOG_CLASS(LLPanelMarketplaceOutbox);
-
- // RN: for some reason you can't just use LLUICtrlFactory::getDefaultParams as a default argument in VC8
- static const LLPanelMarketplaceOutbox::Params& getDefaultParams();
-
- LLPanelMarketplaceOutbox(const Params& p = getDefaultParams());
- ~LLPanelMarketplaceOutbox();
-
- /*virtual*/ BOOL postBuild();
-
- /*virtual*/ void draw();
-
- LLInventoryPanel * setupInventoryPanel();
-
- U32 getTotalItemCount() const;
-
- bool isOutboxEmpty() const;
- bool isSyncInProgress() const;
-
- void onSyncComplete(bool goodStatus, const LLSD& content);
-
- /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
- EDragAndDropType cargo_type,
- void* cargo_data,
- EAcceptance* accept,
- std::string& tooltip_msg);
-
-protected:
- void onSyncButtonClicked();
- void updateSyncButtonStatus();
-
- void handleLoginComplete();
- void onFocusReceived();
- void onSelectionChange();
-
-private:
- LLInventoryPanel * mInventoryPanel;
-
- LLButton * mSyncButton;
- LLLoadingIndicator * mSyncIndicator;
- bool mSyncInProgress;
-};
-
-
-#endif //LL_LLPANELMARKETPLACEOUTBOX_H
-
diff --git a/indra/newview/llpanelmarketplaceoutboxinventory.cpp b/indra/newview/llpanelmarketplaceoutboxinventory.cpp
index ed1206aec8..ff62cb23db 100644
--- a/indra/newview/llpanelmarketplaceoutboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceoutboxinventory.cpp
@@ -47,50 +47,6 @@ static LLDefaultChildRegistry::Register<LLOutboxFolderViewFolder> r2("outbox_fol
//
-// Marketplace errors
-//
-
-enum
-{
- MKTERR_NONE = 0,
-
- MKTERR_NOT_MERCHANT,
- MKTERR_FOLDER_EMPTY,
- MKTERR_UNASSOCIATED_PRODUCTS,
- MKTERR_OBJECT_LIMIT,
- MKTERR_FOLDER_DEPTH,
- MKTERR_UNSELLABLE_ITEM,
- MKTERR_INTERNAL_IMPORT,
-
- MKTERR_COUNT
-};
-
-static const std::string MARKETPLACE_ERROR_STRINGS[MKTERR_COUNT] =
-{
- "NO_ERROR",
- "NOT_MERCHANT_ERROR",
- "FOLDER_EMPTY_ERROR",
- "UNASSOCIATED_PRODUCTS_ERROR",
- "OBJECT_LIMIT_ERROR",
- "FOLDER_DEPTH_ERROR",
- "UNSELLABLE_ITEM_FOUND",
- "INTERNAL_IMPORT_ERROR",
-};
-
-static const std::string MARKETPLACE_ERROR_NAMES[MKTERR_COUNT] =
-{
- "Marketplace Error None",
- "Marketplace Error Not Merchant",
- "Marketplace Error Empty Folder",
- "Marketplace Error Unassociated Products",
- "Marketplace Error Object Limit",
- "Marketplace Error Folder Depth",
- "Marketplace Error Unsellable Item",
- "Marketplace Error Internal Import",
-};
-
-
-//
// LLOutboxInventoryPanel Implementation
//
@@ -111,37 +67,6 @@ void LLOutboxInventoryPanel::buildFolderView(const LLInventoryPanel::Params& par
LLUUID root_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
- // leslie -- temporary HACK to work around sim not creating outbox with proper system folder type
- if (root_id.isNull())
- {
- std::string start_folder_name(params.start_folder());
-
- LLInventoryModel::cat_array_t* cats;
- LLInventoryModel::item_array_t* items;
-
- gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items);
-
- if (cats)
- {
- for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it)
- {
- LLInventoryCategory* cat = *cat_it;
-
- if (cat->getName() == start_folder_name)
- {
- root_id = cat->getUUID();
- break;
- }
- }
- }
-
- if (root_id == LLUUID::null)
- {
- llwarns << "No category found that matches outbox inventory panel start_folder: " << start_folder_name << llendl;
- }
- }
- // leslie -- end temporary HACK
-
if (root_id == LLUUID::null)
{
llwarns << "Outbox inventory panel has no root folder!" << llendl;
@@ -206,66 +131,26 @@ LLFolderViewItem * LLOutboxInventoryPanel::createFolderViewItem(LLInvFVBridge *
LLOutboxFolderViewFolder::LLOutboxFolderViewFolder(const Params& p)
: LLFolderViewFolder(p)
- , LLBadgeOwner(getHandle())
- , mError(0)
-{
- initBadgeParams(p.error_badge());
-}
-
-LLOutboxFolderViewFolder::~LLOutboxFolderViewFolder()
{
}
-// virtual
-void LLOutboxFolderViewFolder::draw()
-{
- if (!badgeHasParent())
- {
- addBadgeToParentPanel();
- }
-
- setBadgeVisibility(hasError());
-
- LLFolderViewFolder::draw();
-}
+//
+// LLOutboxFolderViewItem Implementation
+//
-void LLOutboxFolderViewFolder::setErrorString(const std::string& errorString)
+LLOutboxFolderViewItem::LLOutboxFolderViewItem(const Params& p)
+ : LLFolderViewItem(p)
{
- S32 error_code = MKTERR_NONE;
-
- for (S32 i = 1; i < MKTERR_COUNT; ++i)
- {
- if (MARKETPLACE_ERROR_STRINGS[i] == errorString)
- {
- error_code = i;
- break;
- }
- }
-
- setError(error_code);
}
-void LLOutboxFolderViewFolder::setError(S32 errorCode)
+BOOL LLOutboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask)
{
- mError = errorCode;
-
- if (hasError())
- {
- setToolTip(LLTrans::getString(MARKETPLACE_ERROR_NAMES[mError]));
- }
- else
- {
- setToolTip(LLStringExplicit(""));
- }
+ return TRUE;
}
-//
-// LLOutboxFolderViewItem Implementation
-//
-
-BOOL LLOutboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask)
+void LLOutboxFolderViewItem::openItem()
{
- return TRUE;
+ // Intentionally do nothing to block attaching items from the outbox
}
// eof
diff --git a/indra/newview/llpanelmarketplaceoutboxinventory.h b/indra/newview/llpanelmarketplaceoutboxinventory.h
index 346680a79d..a6c522b7c2 100644
--- a/indra/newview/llpanelmarketplaceoutboxinventory.h
+++ b/indra/newview/llpanelmarketplaceoutboxinventory.h
@@ -28,7 +28,6 @@
#define LL_OUTBOXINVENTORYPANEL_H
-#include "llbadgeowner.h"
#include "llinventorypanel.h"
#include "llfolderviewitem.h"
@@ -53,44 +52,26 @@ public:
};
-class LLOutboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner
+class LLOutboxFolderViewFolder : public LLFolderViewFolder
{
public:
struct Params : public LLInitParam::Block<Params, LLFolderViewFolder::Params>
{
- Optional<LLBadge::Params> error_badge;
-
- Params()
- : error_badge("error_badge")
- {
- }
+ Params() {}
};
LLOutboxFolderViewFolder(const Params& p);
- ~LLOutboxFolderViewFolder();
-
- void draw();
-
- void setErrorString(const std::string& errorString);
- void setError(S32 errorCode);
-
- bool hasError() const { return (mError != 0); }
-
-protected:
- S32 mError;
};
class LLOutboxFolderViewItem : public LLFolderViewItem
{
public:
- LLOutboxFolderViewItem(const Params& p)
- : LLFolderViewItem(p)
- {
- }
+ LLOutboxFolderViewItem(const Params& p);
// virtual
BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ void openItem();
};
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 9d069c3996..038b18afbd 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -47,7 +47,6 @@
#include "lloutfitobserver.h"
#include "llpanelmaininventory.h"
#include "llpanelmarketplaceinbox.h"
-#include "llpanelmarketplaceoutbox.h"
#include "llselectmgr.h"
#include "llsidepaneliteminfo.h"
#include "llsidepaneltaskinfo.h"
@@ -68,35 +67,22 @@ static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_
// No longer want the inbox panel to auto-expand since it creates issues with the "new" tag time stamp
#define AUTO_EXPAND_INBOX 0
-// Temporarily disabling the outbox until we straighten out the API
-#define ENABLE_MERCHANT_OUTBOX_PANEL 0 // keep in sync with ENABLE_INVENTORY_DISPLAY_OUTBOX, ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU
-
static const char * const INBOX_BUTTON_NAME = "inbox_btn";
-static const char * const OUTBOX_BUTTON_NAME = "outbox_btn";
-
static const char * const INBOX_LAYOUT_PANEL_NAME = "inbox_layout_panel";
-static const char * const OUTBOX_LAYOUT_PANEL_NAME = "outbox_layout_panel";
-
-static const char * const INBOX_OUTBOX_LAYOUT_PANEL_NAME = "inbox_outbox_layout_panel";
static const char * const MAIN_INVENTORY_LAYOUT_PANEL_NAME = "main_inventory_layout_panel";
-static const char * const INBOX_INVENTORY_PANEL = "inventory_inbox";
-static const char * const OUTBOX_INVENTORY_PANEL = "inventory_outbox";
-
-static const char * const INBOX_OUTBOX_LAYOUT_STACK_NAME = "inbox_outbox_layout_stack";
static const char * const INVENTORY_LAYOUT_STACK_NAME = "inventory_layout_stack";
static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox";
-static const char * const MARKETPLACE_OUTBOX_PANEL = "marketplace_outbox";
//
// Helpers
//
-class LLInboxOutboxAddedObserver : public LLInventoryCategoryAddedObserver
+class LLInboxAddedObserver : public LLInventoryCategoryAddedObserver
{
public:
- LLInboxOutboxAddedObserver(LLSidepanelInventory * sidepanelInventory)
+ LLInboxAddedObserver(LLSidepanelInventory * sidepanelInventory)
: LLInventoryCategoryAddedObserver()
, mSidepanelInventory(sidepanelInventory)
{
@@ -116,10 +102,6 @@ public:
mSidepanelInventory->enableInbox(true);
mSidepanelInventory->observeInboxModifications(added_category->getUUID());
break;
- case LLFolderType::FT_OUTBOX:
- mSidepanelInventory->enableOutbox(true);
- mSidepanelInventory->observeOutboxModifications(added_category->getUUID());
- break;
default:
break;
}
@@ -138,12 +120,10 @@ LLSidepanelInventory::LLSidepanelInventory()
: LLPanel()
, mItemPanel(NULL)
, mInventoryPanelInbox(NULL)
- , mInventoryPanelOutbox(NULL)
, mPanelMainInventory(NULL)
, mInboxEnabled(false)
- , mOutboxEnabled(false)
, mCategoriesObserver(NULL)
- , mInboxOutboxAddedObserver(NULL)
+ , mInboxAddedObserver(NULL)
{
//buildFromFile( "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
}
@@ -156,11 +136,11 @@ LLSidepanelInventory::~LLSidepanelInventory()
}
delete mCategoriesObserver;
- if (mInboxOutboxAddedObserver && gInventory.containsObserver(mInboxOutboxAddedObserver))
+ if (mInboxAddedObserver && gInventory.containsObserver(mInboxAddedObserver))
{
- gInventory.removeObserver(mInboxOutboxAddedObserver);
+ gInventory.removeObserver(mInboxAddedObserver);
}
- delete mInboxOutboxAddedObserver;
+ delete mInboxAddedObserver;
}
void handleInventoryDisplayInboxChanged()
@@ -172,15 +152,6 @@ void handleInventoryDisplayInboxChanged()
}
}
-void handleInventoryDisplayOutboxChanged()
-{
- LLSidepanelInventory* sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
- if (sidepanel_inventory)
- {
- sidepanel_inventory->enableOutbox(gSavedSettings.getBOOL("InventoryDisplayOutbox"));
- }
-}
-
BOOL LLSidepanelInventory::postBuild()
{
// UI elements from inventory panel
@@ -242,43 +213,27 @@ BOOL LLSidepanelInventory::postBuild()
}
}
- // Marketplace inbox/outbox setup
+ // Received items inbox setup
{
LLLayoutStack* inv_stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
- // Disable user_resize on main inventory panel by default
- inv_stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, false);
- inv_stack->setPanelUserResize(INBOX_OUTBOX_LAYOUT_PANEL_NAME, false);
-
- // Collapse marketplace panel by default
- inv_stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_OUTBOX_LAYOUT_PANEL_NAME), true);
-
- LLLayoutStack* inout_stack = getChild<LLLayoutStack>(INBOX_OUTBOX_LAYOUT_STACK_NAME);
-
- // Collapse both inbox and outbox panels
- inout_stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME), true);
- inout_stack->collapsePanel(getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME), true);
+ // Collapse inbox panel
+ inv_stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME), true);
// Set up button states and callbacks
LLButton * inbox_button = getChild<LLButton>(INBOX_BUTTON_NAME);
- LLButton * outbox_button = getChild<LLButton>(OUTBOX_BUTTON_NAME);
inbox_button->setToggleState(false);
- outbox_button->setToggleState(false);
-
inbox_button->setCommitCallback(boost::bind(&LLSidepanelInventory::onToggleInboxBtn, this));
- outbox_button->setCommitCallback(boost::bind(&LLSidepanelInventory::onToggleOutboxBtn, this));
- // Set the inbox and outbox visible based on debug settings (final setting comes from http request below)
+ // Set the inbox visible based on debug settings (final setting comes from http request below)
enableInbox(gSavedSettings.getBOOL("InventoryDisplayInbox"));
- enableOutbox(gSavedSettings.getBOOL("InventoryDisplayOutbox"));
- // Trigger callback for after login so we can setup to track inbox and outbox changes after initial inventory load
- LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLSidepanelInventory::updateInboxOutbox, this));
+ // Trigger callback for after login so we can setup to track inbox changes after initial inventory load
+ LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLSidepanelInventory::updateInbox, this));
}
gSavedSettings.getControl("InventoryDisplayInbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayInboxChanged));
- gSavedSettings.getControl("InventoryDisplayOutbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayOutboxChanged));
// Update the verbs buttons state.
updateVerbs();
@@ -286,168 +241,96 @@ BOOL LLSidepanelInventory::postBuild()
return TRUE;
}
-void LLSidepanelInventory::updateInboxOutbox()
+void LLSidepanelInventory::updateInbox()
{
//
- // Track inbox and outbox folder changes
+ // Track inbox folder changes
//
const bool do_not_create_folder = false;
const bool do_not_find_in_library = false;
const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, do_not_create_folder, do_not_find_in_library);
- const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, do_not_create_folder, do_not_find_in_library);
- // Set up observer to listen for creation of inbox and outbox if at least one of them doesn't exist
- if (inbox_id.isNull() || outbox_id.isNull())
+ // Set up observer to listen for creation of inbox if at least one of them doesn't exist
+ if (inbox_id.isNull())
{
- observeInboxOutboxCreation();
+ observeInboxCreation();
}
-
// Set up observer for inbox changes, if we have an inbox already
- if (!inbox_id.isNull())
+ else
{
// Enable the display of the inbox if it exists
enableInbox(true);
observeInboxModifications(inbox_id);
}
-
-#if ENABLE_MERCHANT_OUTBOX_PANEL
- // Set up observer for outbox changes, if we have an outbox already
- if (!outbox_id.isNull())
- {
- // Enable the display of the outbox if it exists
- enableOutbox(true);
-
- observeOutboxModifications(outbox_id);
- }
-#endif
}
-void LLSidepanelInventory::observeInboxOutboxCreation()
+void LLSidepanelInventory::observeInboxCreation()
{
//
- // Set up observer to track inbox and outbox folder creation
+ // Set up observer to track inbox folder creation
//
- if (mInboxOutboxAddedObserver == NULL)
+ if (mInboxAddedObserver == NULL)
{
- mInboxOutboxAddedObserver = new LLInboxOutboxAddedObserver(this);
+ mInboxAddedObserver = new LLInboxAddedObserver(this);
- gInventory.addObserver(mInboxOutboxAddedObserver);
+ gInventory.addObserver(mInboxAddedObserver);
}
}
void LLSidepanelInventory::observeInboxModifications(const LLUUID& inboxID)
{
//
- // Track inbox and outbox folder changes
+ // Silently do nothing if we already have an inbox inventory panel set up
+ // (this can happen multiple times on the initial session that creates the inbox)
//
-
+
+ if (mInventoryPanelInbox != NULL)
+ {
+ return;
+ }
+
+ //
+ // Track inbox folder changes
+ //
+
if (inboxID.isNull())
{
- llwarns << "Attempting to track modifications to non-existant inbox" << llendl;
+ llwarns << "Attempting to track modifications to non-existent inbox" << llendl;
return;
}
-
+
if (mCategoriesObserver == NULL)
{
mCategoriesObserver = new LLInventoryCategoriesObserver();
gInventory.addObserver(mCategoriesObserver);
}
-
+
mCategoriesObserver->addCategory(inboxID, boost::bind(&LLSidepanelInventory::onInboxChanged, this, inboxID));
-
+
//
// Trigger a load for the entire contents of the Inbox
//
-
+
LLInventoryModelBackgroundFetch::instance().start(inboxID);
-
+
//
// Set up the inbox inventory view
//
-
+
LLPanelMarketplaceInbox * inbox = getChild<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
mInventoryPanelInbox = inbox->setupInventoryPanel();
}
-
-void LLSidepanelInventory::observeOutboxModifications(const LLUUID& outboxID)
-{
- //
- // Track outbox folder changes
- //
-
- if (outboxID.isNull())
- {
- llwarns << "Attempting to track modifications to non-existant outbox" << llendl;
- return;
- }
-
- if (mCategoriesObserver == NULL)
- {
- mCategoriesObserver = new LLInventoryCategoriesObserver();
- gInventory.addObserver(mCategoriesObserver);
- }
-
- mCategoriesObserver->addCategory(outboxID, boost::bind(&LLSidepanelInventory::onOutboxChanged, this, outboxID));
-
- //
- // Set up the outbox inventory view
- //
-
- LLPanelMarketplaceOutbox * outbox = getChild<LLPanelMarketplaceOutbox>(MARKETPLACE_OUTBOX_PANEL);
- mInventoryPanelOutbox = outbox->setupInventoryPanel();
-}
-
void LLSidepanelInventory::enableInbox(bool enabled)
{
mInboxEnabled = enabled;
LLLayoutPanel * inbox_layout_panel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
inbox_layout_panel->setVisible(enabled);
-
- if (mInboxEnabled)
- {
- LLLayoutPanel * inout_layout_panel = getChild<LLLayoutPanel>(INBOX_OUTBOX_LAYOUT_PANEL_NAME);
-
- inout_layout_panel->setVisible(TRUE);
-
- if (mOutboxEnabled)
- {
- S32 inbox_min_dim = inbox_layout_panel->getMinDim();
- S32 outbox_min_dim = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME)->getMinDim();
-
- inout_layout_panel->setMinDim(inbox_min_dim + outbox_min_dim);
- }
- }
-}
-
-void LLSidepanelInventory::enableOutbox(bool enabled)
-{
- mOutboxEnabled = enabled;
-
- LLLayoutPanel * outbox_layout_panel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
- outbox_layout_panel->setVisible(enabled);
-
- if (mOutboxEnabled)
- {
- LLLayoutPanel * inout_layout_panel = getChild<LLLayoutPanel>(INBOX_OUTBOX_LAYOUT_PANEL_NAME);
-
- inout_layout_panel->setVisible(TRUE);
-
- if (mInboxEnabled)
- {
- S32 inbox_min_dim = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME)->getMinDim();
- S32 outbox_min_dim = outbox_layout_panel->getMinDim();
-
- inout_layout_panel->setMinDim(inbox_min_dim + outbox_min_dim);
- }
-
- updateOutboxUserStatus();
- }
}
void LLSidepanelInventory::openInbox()
@@ -459,31 +342,13 @@ void LLSidepanelInventory::openInbox()
}
}
-void LLSidepanelInventory::openOutbox()
-{
- if (mOutboxEnabled)
- {
- getChild<LLButton>(OUTBOX_BUTTON_NAME)->setToggleState(true);
- onToggleOutboxBtn();
- }
-}
-
void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id)
{
// Trigger a load of the entire inbox so we always know the contents and their creation dates for sorting
LLInventoryModelBackgroundFetch::instance().start(inbox_id);
#if AUTO_EXPAND_INBOX
- // If the outbox is expanded, don't auto-expand the inbox
- if (mOutboxEnabled)
- {
- if (getChild<LLButton>(OUTBOX_BUTTON_NAME)->getToggleState())
- {
- return;
- }
- }
-
- // Expand the inbox since we have fresh items and the outbox is not expanded
+ // Expand the inbox since we have fresh items
if (mInboxEnabled)
{
getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true);
@@ -492,68 +357,16 @@ void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id)
#endif
}
-void LLSidepanelInventory::onOutboxChanged(const LLUUID& outbox_id)
-{
- // Expand the outbox since we have new items in it
- if (mOutboxEnabled)
- {
- getChild<LLButton>(OUTBOX_BUTTON_NAME)->setToggleState(true);
- onToggleOutboxBtn();
- }
-}
-
-bool LLSidepanelInventory::manageInboxOutboxPanels(LLButton * pressedButton, LLLayoutPanel * pressedPanel,
- LLButton * otherButton, LLLayoutPanel * otherPanel)
-{
- bool expand = pressedButton->getToggleState();
- bool otherExpanded = otherButton->getToggleState();
-
- LLLayoutStack* inv_stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
- LLLayoutStack* inout_stack = getChild<LLLayoutStack>(INBOX_OUTBOX_LAYOUT_STACK_NAME);
- LLLayoutPanel* inout_panel = getChild<LLLayoutPanel>(INBOX_OUTBOX_LAYOUT_PANEL_NAME);
-
- // Enable user_resize on main inventory panel only when a marketplace box is expanded
- inv_stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, expand);
- inv_stack->collapsePanel(inout_panel, !expand);
-
- // Collapse other marketplace panel if it is expanded
- if (expand && otherExpanded)
- {
- // Reshape pressedPanel to the otherPanel's height so we preserve the marketplace panel size
- pressedPanel->reshape(pressedPanel->getRect().getWidth(), otherPanel->getRect().getHeight());
-
- inout_stack->collapsePanel(otherPanel, true);
- otherButton->setToggleState(false);
- }
- else
- {
- // NOTE: This is an attempt to reshape the inventory panel to the proper size but it doesn't seem to propagate
- // properly to the child panels.
-
- S32 new_height = inout_panel->getRect().getHeight();
-
- if (otherPanel->getVisible())
- {
- new_height -= otherPanel->getMinDim();
- }
-
- pressedPanel->reshape(pressedPanel->getRect().getWidth(), new_height);
- }
-
- // Expand/collapse the indicated panel
- inout_stack->collapsePanel(pressedPanel, !expand);
-
- return expand;
-}
-
void LLSidepanelInventory::onToggleInboxBtn()
{
LLButton* inboxButton = getChild<LLButton>(INBOX_BUTTON_NAME);
LLLayoutPanel* inboxPanel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
- LLButton* outboxButton = getChild<LLButton>(OUTBOX_BUTTON_NAME);
- LLLayoutPanel* outboxPanel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
-
- const bool inbox_expanded = manageInboxOutboxPanels(inboxButton, inboxPanel, outboxButton, outboxPanel);
+ LLLayoutStack* inv_stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
+
+ const bool inbox_expanded = inboxButton->getToggleState();
+
+ // Expand/collapse the indicated panel
+ inv_stack->collapsePanel(inboxPanel, !inbox_expanded);
if (inbox_expanded && inboxPanel->isInVisibleChain())
{
@@ -561,16 +374,6 @@ void LLSidepanelInventory::onToggleInboxBtn()
}
}
-void LLSidepanelInventory::onToggleOutboxBtn()
-{
- LLButton* inboxButton = getChild<LLButton>(INBOX_BUTTON_NAME);
- LLLayoutPanel* inboxPanel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
- LLButton* outboxButton = getChild<LLButton>(OUTBOX_BUTTON_NAME);
- LLLayoutPanel* outboxPanel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
-
- manageInboxOutboxPanels(outboxButton, outboxPanel, inboxButton, inboxPanel);
-}
-
void LLSidepanelInventory::onOpen(const LLSD& key)
{
LLFirstUse::newInventory(false);
@@ -740,77 +543,6 @@ void LLSidepanelInventory::showInventoryPanel()
updateVerbs();
}
-void LLSidepanelInventory::updateOutboxUserStatus()
-{
- const bool isMerchant = (gSavedSettings.getString("InventoryMarketplaceUserStatus") == "merchant");
- const bool hasOutbox = !gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false).isNull();
-
- LLView * outbox_placeholder = getChild<LLView>("outbox_inventory_placeholder_panel");
- LLView * outbox_placeholder_parent = outbox_placeholder->getParent();
-
- LLTextBox * outbox_title_box = outbox_placeholder->getChild<LLTextBox>("outbox_inventory_placeholder_title");
- LLTextBox * outbox_text_box = outbox_placeholder->getChild<LLTextBox>("outbox_inventory_placeholder_text");
-
- std::string outbox_text;
- std::string outbox_title;
- std::string outbox_tooltip;
-
- if (isMerchant)
- {
- if (hasOutbox)
- {
- outbox_text = LLTrans::getString("InventoryOutboxNoItems");
- outbox_title = LLTrans::getString("InventoryOutboxNoItemsTitle");
- outbox_tooltip = LLTrans::getString("InventoryOutboxNoItemsTooltip");
- }
- else
- {
- outbox_text = LLTrans::getString("InventoryOutboxCreationError");
- outbox_title = LLTrans::getString("InventoryOutboxCreationErrorTitle");
- outbox_tooltip = LLTrans::getString("InventoryOutboxCreationErrorTooltip");
- }
- }
- else
- {
- //
- // The string to become a merchant contains 3 URL's which need the domain name patched in.
- //
-
- std::string domain = "secondlife.com";
-
- if (!LLGridManager::getInstance()->isInProductionGrid())
- {
- std::string gridLabel = LLGridManager::getInstance()->getGridLabel();
- domain = llformat("%s.lindenlab.com", utf8str_tolower(gridLabel).c_str());
- }
-
- LLStringUtil::format_map_t domain_arg;
- domain_arg["[DOMAIN_NAME]"] = domain;
-
- std::string marketplace_url = LLTrans::getString("MarketplaceURL", domain_arg);
- std::string marketplace_url_create = LLTrans::getString("MarketplaceURL_CreateStore", domain_arg);
- std::string marketplace_url_info = LLTrans::getString("MarketplaceURL_LearnMore", domain_arg);
-
- LLStringUtil::format_map_t args1, args2, args3;
- args1["[MARKETPLACE_URL]"] = marketplace_url;
- args2["[LEARN_MORE_URL]"] = marketplace_url_info;
- args3["[CREATE_STORE_URL]"] = marketplace_url_create;
-
- // NOTE: This is dumb, ridiculous and very finicky. The order of these is very important
- // to have these three string substitutions work properly.
- outbox_text = LLTrans::getString("InventoryOutboxNotMerchant", args1);
- LLStringUtil::format(outbox_text, args2);
- LLStringUtil::format(outbox_text, args3);
-
- outbox_title = LLTrans::getString("InventoryOutboxNotMerchantTitle");
- outbox_tooltip = LLTrans::getString("InventoryOutboxNotMerchantTooltip");
- }
-
- outbox_text_box->setValue(outbox_text);
- outbox_title_box->setValue(outbox_title);
- outbox_placeholder_parent->setToolTip(outbox_tooltip);
-}
-
void LLSidepanelInventory::updateVerbs()
{
mInfoBtn->setEnabled(FALSE);
@@ -926,13 +658,6 @@ U32 LLSidepanelInventory::getSelectedCount()
{
selection_list = mInventoryPanelInbox->getRootFolder()->getSelectionList();
- count += selection_list.size();
- }
-
- if ((count == 0) && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
- {
- selection_list = mInventoryPanelOutbox->getRootFolder()->getSelectionList();
-
count += selection_list.size();
}
@@ -957,7 +682,7 @@ BOOL LLSidepanelInventory::isMainInventoryPanelActive() const
return mInventoryPanel->getVisible();
}
-void LLSidepanelInventory::clearSelections(bool clearMain, bool clearInbox, bool clearOutbox)
+void LLSidepanelInventory::clearSelections(bool clearMain, bool clearInbox)
{
if (clearMain)
{
@@ -974,15 +699,10 @@ void LLSidepanelInventory::clearSelections(bool clearMain, bool clearInbox, bool
mInventoryPanelInbox->clearSelection();
}
- if (clearOutbox && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
- {
- mInventoryPanelOutbox->clearSelection();
- }
-
updateVerbs();
}
-std::set<LLUUID> LLSidepanelInventory::getInboxOrOutboxSelectionList()
+std::set<LLUUID> LLSidepanelInventory::getInboxSelectionList()
{
std::set<LLUUID> inventory_selected_uuids;
@@ -991,10 +711,5 @@ std::set<LLUUID> LLSidepanelInventory::getInboxOrOutboxSelectionList()
inventory_selected_uuids = mInventoryPanelInbox->getRootFolder()->getSelectionList();
}
- if (inventory_selected_uuids.empty() && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
- {
- inventory_selected_uuids = mInventoryPanelOutbox->getRootFolder()->getSelectionList();
- }
-
return inventory_selected_uuids;
}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 2c6f807013..a33607f50d 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -31,7 +31,7 @@
class LLButton;
class LLFolderViewItem;
-class LLInboxOutboxAddedObserver;
+class LLInboxAddedObserver;
class LLInventoryCategoriesObserver;
class LLInventoryItem;
class LLInventoryPanel;
@@ -47,25 +47,23 @@ public:
virtual ~LLSidepanelInventory();
private:
- void updateInboxOutbox();
+ void updateInbox();
public:
- void observeInboxOutboxCreation();
+ void observeInboxCreation();
void observeInboxModifications(const LLUUID& inboxID);
- void observeOutboxModifications(const LLUUID& outboxID);
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
LLInventoryPanel* getActivePanel(); // Returns an active inventory panel, if any.
LLInventoryPanel* getInboxPanel() const { return mInventoryPanelInbox; }
- LLInventoryPanel* getOutboxPanel() const { return mInventoryPanelOutbox; }
LLPanelMainInventory* getMainInventoryPanel() const { return mPanelMainInventory; }
BOOL isMainInventoryPanelActive() const;
- void clearSelections(bool clearMain, bool clearInbox, bool clearOutbox);
- std::set<LLUUID> getInboxOrOutboxSelectionList();
+ void clearSelections(bool clearMain, bool clearInbox);
+ std::set<LLUUID> getInboxSelectionList();
void showItemInfoPanel();
void showTaskInfoPanel();
@@ -75,18 +73,13 @@ public:
bool canShare();
void onToggleInboxBtn();
- void onToggleOutboxBtn();
void enableInbox(bool enabled);
- void enableOutbox(bool enabled);
void openInbox();
- void openOutbox();
bool isInboxEnabled() const { return mInboxEnabled; }
- bool isOutboxEnabled() const { return mOutboxEnabled; }
- void updateOutboxUserStatus();
void updateVerbs();
protected:
@@ -100,9 +93,6 @@ protected:
bool canWearSelected(); // check whether selected items can be worn
void onInboxChanged(const LLUUID& inbox_id);
- void onOutboxChanged(const LLUUID& outbox_id);
-
- bool manageInboxOutboxPanels(LLButton * pressedButton, LLLayoutPanel * pressedPanel, LLButton * otherButton, LLLayoutPanel * otherPanel);
//
// UI Elements
@@ -110,7 +100,6 @@ protected:
private:
LLPanel* mInventoryPanel; // Main inventory view
LLInventoryPanel* mInventoryPanelInbox;
- LLInventoryPanel* mInventoryPanelOutbox;
LLSidepanelItemInfo* mItemPanel; // Individual item view
LLSidepanelTaskInfo* mTaskPanel; // Individual in-world object view
LLPanelMainInventory* mPanelMainInventory;
@@ -135,10 +124,9 @@ private:
LLButton* mShopBtn;
bool mInboxEnabled;
- bool mOutboxEnabled;
- LLInventoryCategoriesObserver* mCategoriesObserver;
- LLInboxOutboxAddedObserver* mInboxOutboxAddedObserver;
+ LLInventoryCategoriesObserver* mCategoriesObserver;
+ LLInboxAddedObserver* mInboxAddedObserver;
};
#endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 4c45ac6b47..5a74cb2fb3 100755
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -28,6 +28,10 @@
#include "llspatialpartition.h"
+#include "llappviewer.h"
+#include "lltexturecache.h"
+#include "lltexturefetch.h"
+#include "llimageworker.h"
#include "llviewerwindow.h"
#include "llviewerobjectlist.h"
#include "llvovolume.h"
@@ -1224,6 +1228,7 @@ LLSpatialGroup::LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part) :
for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++)
{
mOcclusionQuery[i] = 0;
+ mOcclusionIssued[i] = 0;
mOcclusionState[i] = parent ? SG_STATE_INHERIT_MASK & parent->mOcclusionState[i] : 0;
mVisible[i] = 0;
}
@@ -1546,6 +1551,8 @@ BOOL LLSpatialGroup::rebound()
}
static LLFastTimer::DeclareTimer FTM_OCCLUSION_READBACK("Readback Occlusion");
+static LLFastTimer::DeclareTimer FTM_OCCLUSION_WAIT("Wait");
+
void LLSpatialGroup::checkOcclusion()
{
if (LLPipeline::sUseOcclusion > 1)
@@ -1563,6 +1570,22 @@ void LLSpatialGroup::checkOcclusion()
if (mOcclusionQuery[LLViewerCamera::sCurCameraID])
{
glGetQueryObjectuivARB(mOcclusionQuery[LLViewerCamera::sCurCameraID], GL_QUERY_RESULT_AVAILABLE_ARB, &available);
+
+ if (mOcclusionIssued[LLViewerCamera::sCurCameraID] < gFrameCount)
+ { //query was issued last frame, wait until it's available
+ S32 max_loop = 1024;
+ LLFastTimer t(FTM_OCCLUSION_WAIT);
+ while (!available && max_loop-- > 0)
+ {
+ F32 max_time = llmin(gFrameIntervalSeconds*10.f, 1.f);
+ //do some usefu work while we wait
+ LLAppViewer::getTextureCache()->update(max_time); // unpauses the texture cache thread
+ LLAppViewer::getImageDecodeThread()->update(max_time); // unpauses the image thread
+ LLAppViewer::getTextureFetch()->update(max_time); // unpauses the texture fetch thread
+
+ glGetQueryObjectuivARB(mOcclusionQuery[LLViewerCamera::sCurCameraID], GL_QUERY_RESULT_AVAILABLE_ARB, &available);
+ }
+ }
}
else
{
@@ -1682,6 +1705,9 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera)
{
LLFastTimer t(FTM_PUSH_OCCLUSION_VERTS);
+ //store which frame this query was issued on
+ mOcclusionIssued[LLViewerCamera::sCurCameraID] = gFrameCount;
+
{
LLFastTimer t(FTM_OCCLUSION_BEGIN_QUERY);
glBeginQueryARB(mode, mOcclusionQuery[LLViewerCamera::sCurCameraID]);
@@ -3752,11 +3778,7 @@ void renderRaycast(LLDrawable* drawablep)
for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i)
{
const LLVolumeFace& face = volume->getVolumeFace(i);
- if (!face.mOctree)
- {
- ((LLVolumeFace*) &face)->createOctree();
- }
-
+
gGL.pushMatrix();
gGL.translatef(trans.mV[0], trans.mV[1], trans.mV[2]);
gGL.multMatrix((F32*) vobj->getRelativeXform().mMatrix);
@@ -3779,9 +3801,6 @@ void renderRaycast(LLDrawable* drawablep)
LLVector4a dir;
dir.setSub(enda, starta);
- F32 t = 1.f;
-
- LLRenderOctreeRaycast render(starta, dir, &t);
gGL.flush();
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
@@ -3793,8 +3812,21 @@ void renderRaycast(LLDrawable* drawablep)
gGL.syncMatrices();
glDrawElements(GL_TRIANGLES, face.mNumIndices, GL_UNSIGNED_SHORT, face.mIndices);
}
-
- render.traverse(face.mOctree);
+
+ if (!volume->isUnique())
+ {
+ F32 t = 1.f;
+
+ if (!face.mOctree)
+ {
+ ((LLVolumeFace*) &face)->createOctree();
+ }
+
+ LLRenderOctreeRaycast render(starta, dir, &t);
+
+ render.traverse(face.mOctree);
+ }
+
gGL.popMatrix();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 22bea69df3..efd6be2ccd 100755
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -416,6 +416,8 @@ protected:
U32 mState;
U32 mOcclusionState[LLViewerCamera::NUM_CAMERAS];
+ U32 mOcclusionIssued[LLViewerCamera::NUM_CAMERAS];
+
S32 mLODHash;
static S32 sLODSeed;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 7e02a41e7e..3923b4510a 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -804,9 +804,8 @@ bool idle_startup()
#ifdef _WIN32
MSG msg;
while( PeekMessage( &msg, /*All hWnds owned by this thread */ NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE ) )
- {
- display_startup();
- }
+ { }
+ display_startup();
#endif
timeout.reset();
return FALSE;
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index e7a176f4f9..8632890bbb 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -760,7 +760,7 @@ LLTextureCache::~LLTextureCache()
//////////////////////////////////////////////////////////////////////////////
//virtual
-S32 LLTextureCache::update(U32 max_time_ms)
+S32 LLTextureCache::update(F32 max_time_ms)
{
static LLFrameTimer timer ;
static const F32 MAX_TIME_INTERVAL = 300.f ; //seconds.
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index 64e3a2658c..dd0cc9b4bd 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -101,7 +101,7 @@ public:
LLTextureCache(bool threaded);
~LLTextureCache();
- /*virtual*/ S32 update(U32 max_time_ms);
+ /*virtual*/ S32 update(F32 max_time_ms);
void purgeCache(ELLPath location);
void setReadOnly(BOOL read_only) ;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 56dfb61c4f..f18aa8b4e6 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -2204,7 +2204,7 @@ void LLTextureFetch::commonUpdate()
// MAIN THREAD
//virtual
-S32 LLTextureFetch::update(U32 max_time_ms)
+S32 LLTextureFetch::update(F32 max_time_ms)
{
static LLCachedControl<F32> band_width(gSavedSettings,"ThrottleBandwidthKBPS");
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index d101da1f4b..35df7d816f 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -55,7 +55,7 @@ public:
class TFRequest;
- /*virtual*/ S32 update(U32 max_time_ms);
+ /*virtual*/ S32 update(F32 max_time_ms);
void shutDownTextureCacheThread() ; //called in the main thread after the TextureCacheThread shuts down.
void shutDownImageDecodeThread() ; //called in the main thread after the ImageDecodeThread shuts down.
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 6910b8eced..8c32dfcb4d 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -282,6 +282,8 @@ void LLCategoryDropDescendentsObserver::done()
}
*/
+S32 LLToolDragAndDrop::sOperationId = 0;
+
LLToolDragAndDrop::DragAndDropEntry::DragAndDropEntry(dragOrDrop3dImpl f_none,
dragOrDrop3dImpl f_self,
dragOrDrop3dImpl f_avatar,
@@ -626,6 +628,8 @@ BOOL LLToolDragAndDrop::handleToolTip(S32 x, S32 y, MASK mask)
void LLToolDragAndDrop::handleDeselect()
{
mToolTipMsg.clear();
+
+ LLToolTipMgr::instance().blockToolTips();
}
// protected
@@ -642,6 +646,12 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop,
mToolTipMsg.clear();
+ // Increment the operation id for every drop
+ if (drop)
+ {
+ sOperationId++;
+ }
+
if (top_view)
{
handled = TRUE;
@@ -767,6 +777,21 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop,
if (!handled)
{
+ // Disallow drag and drop to 3D from the outbox
+ const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
+ if (outbox_id.notNull())
+ {
+ for (S32 item_index = 0; item_index < (S32)mCargoIDs.size(); item_index++)
+ {
+ if (gInventory.isObjectDescendentOf(mCargoIDs[item_index], outbox_id))
+ {
+ *acceptance = ACCEPT_NO;
+ mToolTipMsg = LLTrans::getString("TooltipOutboxDragToWorld");
+ return;
+ }
+ }
+ }
+
dragOrDrop3D( x, y, mask, drop, acceptance );
}
}
@@ -865,7 +890,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info)
(U32)mLastAccept,
(U32)callMemberFunction(*this,
LLDragAndDropDictionary::instance().get(dad_type, target))
- (hit_obj, hit_face, pick_info.mKeyMask, FALSE));
+ (hit_obj, hit_face, pick_info.mKeyMask, FALSE));
}
if (mDrop && ((U32)mLastAccept >= ACCEPT_YES_COPY_SINGLE))
diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h
index 92f007a251..188d36cd1b 100644
--- a/indra/newview/lltooldraganddrop.h
+++ b/indra/newview/lltooldraganddrop.h
@@ -86,6 +86,9 @@ public:
EAcceptance getLastAccept() { return mLastAccept; }
boost::signals2::connection setEndDragCallback( const enddrag_signal_t::slot_type& cb ) { return mEndDragSignal.connect(cb); }
+
+ uuid_vec_t::size_type getCargoIDsCount() const { return mCargoIDs.size(); }
+ static S32 getOperationId() { return sOperationId; }
protected:
enum EDropTarget
@@ -125,6 +128,8 @@ protected:
LLUUID mSourceID;
LLUUID mObjectID;
+ static S32 sOperationId;
+
LLVector3d mLastCameraPos;
LLVector3d mLastHitPos;
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index cca8f10515..bb870f7651 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -83,6 +83,7 @@
#include "llfloaternotificationsconsole.h"
#include "llfloaterobjectweights.h"
#include "llfloateropenobject.h"
+#include "llfloateroutbox.h"
#include "llfloaterpay.h"
#include "llfloaterperms.h"
#include "llfloaterpostprocess.h"
@@ -238,6 +239,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("object_weights", "floater_object_weights.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterObjectWeights>);
LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOpenObject>);
+ LLFloaterReg::add("outbox", "floater_merchant_outbox.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOutbox>);
LLFloaterReg::add("outgoing_call", "floater_outgoing_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutgoingCallDialog>);
LLFloaterPayUtil::registerFloater();
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 09cce39c3d..046360e9e9 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -26,46 +26,48 @@
#include "llviewerprecompiledheaders.h"
+#include "llviewermedia.h"
+
#include "llagent.h"
#include "llagentcamera.h"
-#include "llviewermedia.h"
-#include "llviewermediafocus.h"
-#include "llmimetypes.h"
+#include "llappviewer.h"
+#include "llaudioengine.h" // for gAudiop
+#include "llcallbacklist.h"
+#include "lldir.h"
+#include "lldiriterator.h"
+#include "llevent.h" // LLSimpleListener
+#include "llfilepicker.h"
+#include "llfloaterwebcontent.h" // for handling window close requests and geometry change requests in media browser windows.
+#include "llfocusmgr.h"
+#include "llkeyboard.h"
+#include "lllogininstance.h"
+#include "llmarketplacefunctions.h"
#include "llmediaentry.h"
+#include "llmimetypes.h"
+#include "llmutelist.h"
+#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llpanelprofile.h"
+#include "llparcel.h"
+#include "llpluginclassmedia.h"
+#include "llplugincookiestore.h"
+#include "llurldispatcher.h"
+#include "lluuid.h"
#include "llversioninfo.h"
+#include "llviewermediafocus.h"
#include "llviewercontrol.h"
-#include "llviewertexture.h"
+#include "llviewernetwork.h"
#include "llviewerparcelmedia.h"
#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+#include "llviewertexture.h"
#include "llviewertexturelist.h"
-#include "llvovolume.h"
-#include "llpluginclassmedia.h"
-#include "llplugincookiestore.h"
#include "llviewerwindow.h"
-#include "llfocusmgr.h"
-#include "llcallbacklist.h"
-#include "llparcel.h"
-#include "llaudioengine.h" // for gAudiop
-#include "llurldispatcher.h"
#include "llvoavatar.h"
#include "llvoavatarself.h"
-#include "llviewerregion.h"
+#include "llvovolume.h"
#include "llwebprofile.h"
#include "llwebsharing.h" // For LLWebSharing::setOpenIDCookie(), *TODO: find a better way to do this!
-#include "llfilepicker.h"
-#include "llnotifications.h"
-#include "lldir.h"
-#include "lldiriterator.h"
-#include "llevent.h" // LLSimpleListener
-#include "llnotificationsutil.h"
-#include "lluuid.h"
-#include "llkeyboard.h"
-#include "llmutelist.h"
-#include "llpanelprofile.h"
-#include "llappviewer.h"
-#include "lllogininstance.h"
-//#include "llfirstuse.h"
-#include "llviewernetwork.h"
#include "llwindow.h"
#include "llvieweraudio.h"
@@ -1398,75 +1400,11 @@ void LLViewerMedia::removeCookie(const std::string &name, const std::string &dom
}
-// This is defined in two files but I don't want to create a dependence between this and llsidepanelinventory
-// just to be able to temporarily disable the outbox.
-#define ENABLE_INVENTORY_DISPLAY_OUTBOX 0 // keep in sync with ENABLE_MERCHANT_OUTBOX_PANEL, ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU
-
-class LLInventoryUserStatusResponder : public LLHTTPClient::Responder
-{
-public:
- LLInventoryUserStatusResponder()
- : LLCurl::Responder()
- {
- }
-
- void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- if (isGoodStatus(status))
- {
- std::string merchantStatus = content[gAgent.getID().getString()].asString();
- llinfos << "Marketplace merchant status: " << merchantStatus << llendl;
-
- // Save the merchant status before turning on the display
- gSavedSettings.setString("InventoryMarketplaceUserStatus", merchantStatus);
-
- // Complete success
- gSavedSettings.setBOOL("InventoryDisplayInbox", true);
-
-#if ENABLE_INVENTORY_DISPLAY_OUTBOX
- gSavedSettings.setBOOL("InventoryDisplayOutbox", true);
-#endif
- }
- else if (status == 401)
- {
- // API is available for use but OpenID authorization failed
- gSavedSettings.setBOOL("InventoryDisplayInbox", true);
- }
- else
- {
- // API in unavailable
- llinfos << "Marketplace API is unavailable -- Inbox may be disabled, status = " << status << ", reason = " << reason << llendl;
- }
- }
-};
-
-
-void doOnetimeEarlyHTTPRequests()
-{
- std::string url = "https://marketplace.secondlife.com/";
-
- if (!LLGridManager::getInstance()->isInProductionGrid())
- {
- std::string gridLabel = LLGridManager::getInstance()->getGridLabel();
- url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str());
-
- // TEMP for Jim's pdp
- //url = "http://pdp24.lindenlab.com:3000/";
- }
-
- url += "api/1/users/";
- url += gAgent.getID().getString();
- url += "/user_status";
-
- llinfos << "http get: " << url << llendl;
- LLHTTPClient::get(url, new LLInventoryUserStatusResponder(), LLViewerMedia::getHeaders());
-}
-
-
LLSD LLViewerMedia::getHeaders()
{
LLSD headers = LLSD::emptyMap();
headers["Accept"] = "*/*";
+ headers["Content-Type"] = "application/xml";
headers["Cookie"] = sOpenIDCookie;
headers["User-Agent"] = getCurrentUserAgent();
@@ -1521,9 +1459,6 @@ void LLViewerMedia::setOpenIDCookie()
LLHTTPClient::get(profile_url,
new LLViewerMediaWebProfileResponder(raw_profile_url.getAuthority()),
headers);
-
- // FUI: No longer perform the user_status query
- //doOnetimeEarlyHTTPRequests();
}
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 0104d35e53..67f6150dbe 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2786,8 +2786,31 @@ bool enable_object_mute()
else
{
// Just a regular object
- return LLSelectMgr::getInstance()->getSelection()->
- contains( object, SELECT_ALL_TES );
+ return LLSelectMgr::getInstance()->getSelection()->contains( object, SELECT_ALL_TES ) &&
+ !LLMuteList::getInstance()->isMuted(object->getID());
+ }
+}
+
+bool enable_object_unmute()
+{
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+ if (!object) return false;
+
+ LLVOAvatar* avatar = find_avatar_from_object(object);
+ if (avatar)
+ {
+ // It's an avatar
+ LLNameValue *lastname = avatar->getNVPair("LastName");
+ bool is_linden =
+ lastname && !LLStringUtil::compareStrings(lastname->getString(), "Linden");
+ bool is_self = avatar->isSelf();
+ return !is_linden && !is_self;
+ }
+ else
+ {
+ // Just a regular object
+ return LLSelectMgr::getInstance()->getSelection()->contains( object, SELECT_ALL_TES ) &&
+ LLMuteList::getInstance()->isMuted(object->getID());;
}
}
@@ -8308,6 +8331,7 @@ void initialize_menus()
enable.add("Avatar.EnableMute", boost::bind(&enable_object_mute));
enable.add("Object.EnableMute", boost::bind(&enable_object_mute));
+ enable.add("Object.EnableUnmute", boost::bind(&enable_object_unmute));
enable.add("Object.EnableBuy", boost::bind(&enable_buy_object));
commit.add("Object.ZoomIn", boost::bind(&handle_look_at_selection, "zoom"));
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index bddc07b395..5de363e03c 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -1103,11 +1103,12 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
gDeferredSkinnedAlphaProgram.mName = "Deferred Skinned Alpha Shader";
gDeferredSkinnedAlphaProgram.mFeatures.hasObjectSkinning = true;
- gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = true;
gDeferredSkinnedAlphaProgram.mFeatures.calculatesAtmospherics = true;
gDeferredSkinnedAlphaProgram.mFeatures.hasGamma = true;
gDeferredSkinnedAlphaProgram.mFeatures.hasAtmospherics = true;
+ gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = true;
gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = true;
+ gDeferredSkinnedAlphaProgram.mFeatures.isAlphaLighting = true;
gDeferredSkinnedAlphaProgram.mFeatures.disableTextureIndex = true;
gDeferredSkinnedAlphaProgram.mShaderFiles.clear();
gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
@@ -1235,6 +1236,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredAlphaProgram.mFeatures.hasGamma = true;
gDeferredAlphaProgram.mFeatures.hasAtmospherics = true;
gDeferredAlphaProgram.mFeatures.hasLighting = true;
+ gDeferredAlphaProgram.mFeatures.isAlphaLighting = true;
gDeferredAlphaProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels
if (mVertexShaderLevel[SHADER_DEFERRED] < 1)
{
@@ -1398,6 +1400,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredAvatarAlphaProgram.mFeatures.hasGamma = true;
gDeferredAvatarAlphaProgram.mFeatures.hasAtmospherics = true;
gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true;
+ gDeferredAvatarAlphaProgram.mFeatures.isAlphaLighting = true;
gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;
gDeferredAvatarAlphaProgram.mShaderFiles.clear();
gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaV.glsl", GL_VERTEX_SHADER_ARB));
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index f4bbc2b067..61236edc86 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -417,11 +417,24 @@ const S32 min_non_tex_system_mem = (128<<20); // 128 MB
F32 texmem_lower_bound_scale = 0.85f;
F32 texmem_middle_bound_scale = 0.925f;
+static LLFastTimer::DeclareTimer FTM_TEXTURE_MEMORY_CHECK("Memory Check");
+
//static
bool LLViewerTexture::isMemoryForTextureLow()
{
- const static S32 MIN_FREE_TEXTURE_MEMORY = 5 ; //MB
- const static S32 MIN_FREE_MAIN_MEMORy = 100 ; //MB
+ const F32 WAIT_TIME = 1.0f ; //second
+ static LLFrameTimer timer ;
+
+ if(timer.getElapsedTimeF32() < WAIT_TIME) //call this once per second.
+ {
+ return false;
+ }
+ timer.reset() ;
+
+ LLFastTimer t(FTM_TEXTURE_MEMORY_CHECK);
+
+ const S32 MIN_FREE_TEXTURE_MEMORY = 5 ; //MB
+ const S32 MIN_FREE_MAIN_MEMORy = 100 ; //MB
bool low_mem = false ;
if (gGLManager.mHasATIMemInfo)
@@ -433,6 +446,15 @@ bool LLViewerTexture::isMemoryForTextureLow()
{
low_mem = true ;
}
+
+ if(!low_mem) //check main memory, only works for windows.
+ {
+ LLMemory::updateMemoryInfo() ;
+ if(LLMemory::getAvailableMemKB() / 1024 < MIN_FREE_MAIN_MEMORy)
+ {
+ low_mem = true ;
+ }
+ }
}
#if 0 //ignore nVidia cards
else if (gGLManager.mHasNVXMemInfo)
@@ -445,20 +467,14 @@ bool LLViewerTexture::isMemoryForTextureLow()
low_mem = true ;
}
}
-#endif
-
- if(!low_mem) //check main memory, only works for windows.
- {
- LLMemory::updateMemoryInfo() ;
- if(LLMemory::getAvailableMemKB() / 1024 < MIN_FREE_MAIN_MEMORy)
- {
- low_mem = true ;
- }
- }
+#endif
return low_mem ;
}
+static LLFastTimer::DeclareTimer FTM_TEXTURE_UPDATE_MEDIA("Media");
+static LLFastTimer::DeclareTimer FTM_TEXTURE_UPDATE_TEST("Test");
+
//static
void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity)
{
@@ -467,9 +483,14 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
if (tester)
{
+ LLFastTimer t(FTM_TEXTURE_UPDATE_TEST);
tester->update() ;
}
- LLViewerMediaTexture::updateClass() ;
+
+ {
+ LLFastTimer t(FTM_TEXTURE_UPDATE_MEDIA);
+ LLViewerMediaTexture::updateClass() ;
+ }
sBoundTextureMemoryInBytes = LLImageGL::sBoundTextureMemoryInBytes;//in bytes
sTotalTextureMemoryInBytes = LLImageGL::sGlobalTextureMemoryInBytes;//in bytes
@@ -3142,8 +3163,13 @@ void LLViewerLODTexture::processTextureStats()
S32 current_discard = getDiscardLevel();
if (sDesiredDiscardBias > 0.0f && mBoostLevel < LLViewerTexture::BOOST_SCULPTED && current_discard >= 0)
{
+ if(desired_discard_bias_max <= sDesiredDiscardBias && !mForceToSaveRawImage)
+ {
+ //needs to release texture memory urgently
+ scaleDown() ;
+ }
// Limit the amount of GL memory bound each frame
- if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale &&
+ else if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale &&
(!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel))
{
scaleDown() ;
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index cddf7dcfea..089f45ca89 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -534,6 +534,7 @@ void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
S32 count = mImageList.erase(image) ;
if(count != 1)
{
+ llinfos << image->getID() << llendl ;
llerrs << "Error happens when remove image from mImageList: " << count << llendl ;
}
@@ -919,6 +920,8 @@ void LLViewerTextureList::decodeAllImages(F32 max_time)
image_list.push_back(imagep);
imagep->setInImageList(FALSE) ;
}
+
+ llassert_always(image_list.size() == mImageList.size()) ;
mImageList.clear();
for (std::vector<LLPointer<LLViewerFetchedTexture> >::iterator iter = image_list.begin();
iter != image_list.end(); ++iter)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b73be4ed43..bf698e02d2 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1206,7 +1206,8 @@ void LLViewerWindow::handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask
mWindow->showCursorFromMouseMove();
- if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME)
+ if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME
+ && !gDisconnected)
{
gAgent.clearAFK();
}
@@ -1957,33 +1958,42 @@ void LLViewerWindow::shutdownViews()
// clean up warning logger
LLError::removeRecorder(RecordToChatConsole::getInstance());
+ llinfos << "Warning logger is cleaned." << llendl ;
+
delete mDebugText;
mDebugText = NULL;
+ llinfos << "DebugText deleted." << llendl ;
+
// Cleanup global views
if (gMorphView)
{
gMorphView->setVisible(FALSE);
}
+ llinfos << "Global views cleaned." << llendl ;
// DEV-40930: Clear sModalStack. Otherwise, any LLModalDialog left open
// will crump with LL_ERRS.
LLModalDialog::shutdownModals();
-
+ llinfos << "LLModalDialog shut down." << llendl;
+
// destroy the nav bar, not currently part of gViewerWindow
// *TODO: Make LLNavigationBar part of gViewerWindow
if (LLNavigationBar::instanceExists())
{
delete LLNavigationBar::getInstance();
}
+ llinfos << "LLNavigationBar destroyed." << llendl ;
// destroy menus after instantiating navbar above, as it needs
// access to gMenuHolder
cleanup_menus();
+ llinfos << "menus destroyed." << llendl ;
// Delete all child views.
delete mRootView;
mRootView = NULL;
+ llinfos << "RootView deleted." << llendl ;
// Automatically deleted as children of mRootView. Fix the globals.
gStatusBar = NULL;
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index ddbcdfc3f7..6f6411ce3c 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -63,7 +63,7 @@ struct LLWearableArrivedData
LLWearableList::~LLWearableList()
{
- llassert_always(mList.empty()) ;
+ cleanup();
}
void LLWearableList::cleanup()
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index 920a9a3752..0da70d398b 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -305,6 +305,15 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
{
mCurlRequest = new LLCurlEasyRequest();
}
+ if(!mCurlRequest->isValid())
+ {
+ llwarns << "mCurlRequest is invalid." << llendl ;
+
+ delete mCurlRequest ;
+ mCurlRequest = NULL ;
+ return ;
+ }
+
mErrorCert = NULL;
// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // useful for debugging
@@ -357,10 +366,20 @@ LLXMLRPCTransaction::Impl::~Impl()
}
delete mCurlRequest;
+ mCurlRequest = NULL ;
}
bool LLXMLRPCTransaction::Impl::process()
{
+ if(!mCurlRequest || !mCurlRequest->isValid())
+ {
+ llwarns << "transaction failed." << llendl ;
+
+ delete mCurlRequest ;
+ mCurlRequest = NULL ;
+ return true ; //failed, quit.
+ }
+
switch(mStatus)
{
case LLXMLRPCTransaction::StatusComplete:
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 657cdc0e07..8449e74fb6 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -6333,17 +6333,10 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
- U32 res_mod = RenderResolutionDivisor;
-
LLVector2 tc1(0,0);
LLVector2 tc2((F32) mScreen.getWidth()*2,
(F32) mScreen.getHeight()*2);
- if (res_mod > 1)
- {
- tc2 /= (F32) res_mod;
- }
-
LLFastTimer ftm(FTM_RENDER_BLOOM);
gGL.color4f(1,1,1,1);
LLGLDepthTest depth(GL_FALSE);
@@ -6807,7 +6800,13 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
mFXAABuffer.bindTexture(0, channel);
gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
}
-
+
+ gGLViewport[0] = gViewerWindow->getWorldViewRectRaw().mLeft;
+ gGLViewport[1] = gViewerWindow->getWorldViewRectRaw().mBottom;
+ gGLViewport[2] = gViewerWindow->getWorldViewRectRaw().getWidth();
+ gGLViewport[3] = gViewerWindow->getWorldViewRectRaw().getHeight();
+ glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
+
F32 scale_x = (F32) width/mFXAABuffer.getWidth();
F32 scale_y = (F32) height/mFXAABuffer.getHeight();
shader->uniform2f(LLShaderMgr::FXAA_TC_SCALE, scale_x, scale_y);
@@ -6827,11 +6826,6 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
}
else
{
- if (res_mod > 1)
- {
- tc2 /= (F32) res_mod;
- }
-
U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1;
LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(mask, 0);
buff->allocateBuffer(3,0,TRUE);
@@ -7458,8 +7452,7 @@ void LLPipeline::renderDeferredLighting()
F32 s = volume->getLightRadius()*1.5f;
LLColor3 col = volume->getLightColor();
- col *= volume->getLightIntensity();
-
+
if (col.magVecSquared() < 0.001f)
{
continue;
@@ -7572,8 +7565,7 @@ void LLPipeline::renderDeferredLighting()
setupSpotLight(gDeferredSpotLightProgram, drawablep);
LLColor3 col = volume->getLightColor();
- col *= volume->getLightIntensity();
-
+
//vertex positions are encoded so the 3 bits of their vertex index
//correspond to their axis facing, with bit position 3,2,1 matching
//axis facing x,y,z, bit set meaning positive facing, bit clear
@@ -7682,8 +7674,7 @@ void LLPipeline::renderDeferredLighting()
setupSpotLight(gDeferredMultiSpotLightProgram, drawablep);
LLColor3 col = volume->getLightColor();
- col *= volume->getLightIntensity();
-
+
gDeferredMultiSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, tc.v);
gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s*s);
gDeferredMultiSpotLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 8702ebde2a..e4a8622a4b 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -137,6 +137,7 @@ with the same filename but different name
<texture name="Command_MiniCart_Icon" file_name="toolbar_icons/mini_cart.png" preload="true" />
<texture name="Command_MiniMap_Icon" file_name="toolbar_icons/mini_map.png" preload="true" />
<texture name="Command_Move_Icon" file_name="toolbar_icons/move.png" preload="true" />
+ <texture name="Command_Outbox_Icon" file_name="toolbar_icons/outbox.png" preload="true" />
<texture name="Command_People_Icon" file_name="toolbar_icons/people.png" preload="true" />
<texture name="Command_Picks_Icon" file_name="toolbar_icons/picks.png" preload="true" />
<texture name="Command_Places_Icon" file_name="toolbar_icons/places.png" preload="true" />
@@ -386,22 +387,9 @@ with the same filename but different name
<texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" />
<texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" />
- <texture name="OutboxPush_Disabled" file_name="icons/OutboxPush_Disabled.png" preload="true" />
- <texture name="OutboxPush_Off" file_name="icons/OutboxPush_Off.png" preload="true" />
- <texture name="OutboxPush_On" file_name="icons/OutboxPush_On.png" preload="true" />
- <texture name="OutboxPush_On_Over" file_name="icons/OutboxPush_On_Over.png" preload="true" />
- <texture name="OutboxPush_Over" file_name="icons/OutboxPush_Over.png" preload="true" />
- <texture name="OutboxPush_Press" file_name="icons/OutboxPush_Press.png" preload="true" />
- <texture name="OutboxPush_Progress_1" file_name="icons/OutboxPush_Progress_1.png" preload="true" />
- <texture name="OutboxPush_Progress_2" file_name="icons/OutboxPush_Progress_2.png" preload="true" />
- <texture name="OutboxPush_Progress_3" file_name="icons/OutboxPush_Progress_3.png" preload="true" />
- <texture name="OutboxPush_Progress_4" file_name="icons/OutboxPush_Progress_4.png" preload="true" />
- <texture name="OutboxPush_Progress_5" file_name="icons/OutboxPush_Progress_5.png" preload="true" />
- <texture name="OutboxPush_Progress_6" file_name="icons/OutboxPush_Progress_6.png" preload="true" />
- <texture name="OutboxPush_Selected" file_name="icons/OutboxPush_Selected.png" preload="true" />
- <texture name="OutboxPush_Selected_Disabled" file_name="icons/OutboxPush_Selected_Disabled.png" preload="true" />
- <texture name="OutboxPush_Selected_Over" file_name="icons/OutboxPush_Selected_Over.png" preload="true" />
- <texture name="OutboxPush_Selected_Press" file_name="icons/OutboxPush_Selected_Press.png" preload="true" />
+ <texture name="OutboxStatus_Success" file_name="green_checkmark.png" preload="false" />
+ <texture name="OutboxStatus_Warning" file_name="icons/pop_up_caution.png" preload="false" />
+ <texture name="OutboxStatus_Error" file_name="red_x.png" preload="false" />
<texture name="PanOrbit_Off" file_name="bottomtray/PanOrbit_Off.png" preload="false" />
diff --git a/indra/newview/skins/default/textures/toolbar_icons/outbox.png b/indra/newview/skins/default/textures/toolbar_icons/outbox.png
new file mode 100644
index 0000000000..0f3db1c47c
--- /dev/null
+++ b/indra/newview/skins/default/textures/toolbar_icons/outbox.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index ba18306686..d695cd1f89 100644
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -20,8 +20,6 @@
<menu_item_call label="V疆k" name="Set Away"/>
<menu_item_call label="Optaget" name="Set Busy"/>
</menu>
- <menu_item_call label="Anmod om administrator status" name="Request Admin Options"/>
- <menu_item_call label="Stop administrator status" name="Leave Admin Options"/>
<menu_item_call label="Afslut [APP_NAME]" name="Quit"/>
</menu>
<menu label="Kommunik矇r" name="Communicate">
@@ -36,11 +34,10 @@
<menu_item_check label="S繪g" name="Search"/>
<menu_item_call label="Foto" name="Take Snapshot"/>
<menu_item_call label="Opret landem疆rke for dette sted" name="Create Landmark Here"/>
- <menu label="Profil for sted" name="Land">
- <menu_item_call label="Profil for sted" name="Place Profile"/>
- <menu_item_call label="Om land" name="About Land"/>
- <menu_item_call label="Region/Estate" name="Region/Estate"/>
- </menu>
+ <menu_item_separator/>
+ <menu_item_call label="Profil for sted" name="Place Profile"/>
+ <menu_item_call label="Om land" name="About Land"/>
+ <menu_item_call label="Region/Estate" name="Region/Estate"/>
<menu_item_call label="K繪b dette land" name="Buy Land"/>
<menu_item_call label="Mit land" name="My Land"/>
<menu label="Vis" name="LandShow">
@@ -56,7 +53,7 @@
</menu>
<menu_item_call label="Teleport hjem" name="Teleport Home"/>
<menu_item_call label="S疆t dette sted som &apos;Hjem&apos;" name="Set Home to Here"/>
- <menu label="Sol" name="Environment Settings">
+ <menu label="Sol" name="Sun">
<menu_item_call label="Solopgang" name="Sunrise"/>
<menu_item_call label="Middag" name="Noon"/>
<menu_item_call label="Solnedgang" name="Sunset"/>
@@ -155,22 +152,22 @@
<menu_item_check label="Vis muse-sigte" name="ShowCrosshairs"/>
</menu>
<menu label="Gengivelsestyper" name="Rendering Types">
- <menu_item_check label="Simpel" name="Simple"/>
- <menu_item_check label="Alpha" name="Alpha"/>
- <menu_item_check label="Tr疆er" name="Tree"/>
- <menu_item_check label="Avatarer" name="Character"/>
- <menu_item_check label="Surface Patch" name="Surface Patch"/>
- <menu_item_check label="Himmel" name="Sky"/>
- <menu_item_check label="Vand" name="Water"/>
- <menu_item_check label="Jord" name="Ground"/>
- <menu_item_check label="Volume" name="Volume"/>
- <menu_item_check label="Gr疆s" name="Grass"/>
- <menu_item_check label="Skyer" name="Clouds"/>
- <menu_item_check label="Partikler" name="Particles"/>
- <menu_item_check label="Bump" name="Bump"/>
+ <menu_item_check label="Simpel" name="Rendering Type Simple"/>
+ <menu_item_check label="Alpha" name="Rendering Type Alpha"/>
+ <menu_item_check label="Tr疆er" name="Rendering Type Tree"/>
+ <menu_item_check label="Avatarer" name="Rendering Type Character"/>
+ <menu_item_check label="Surface Patch" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="Himmel" name="Rendering Type Sky"/>
+ <menu_item_check label="Vand" name="Rendering Type Water"/>
+ <menu_item_check label="Jord" name="Rendering Type Ground"/>
+ <menu_item_check label="Volume" name="Rendering Type Volume"/>
+ <menu_item_check label="Gr疆s" name="Rendering Type Grass"/>
+ <menu_item_check label="Skyer" name="Rendering Type Clouds"/>
+ <menu_item_check label="Partikler" name="Rendering Type Particles"/>
+ <menu_item_check label="Bump" name="Rendering Type Bump"/>
</menu>
<menu label="Gengivelsesegenskaber" name="Rendering Features">
- <menu_item_check label="UI" name="UI"/>
+ <menu_item_check label="UI" name="ToggleUI"/>
<menu_item_check label="Valgte" name="Selected"/>
<menu_item_check label="Fremh疆vede" name="Highlighted"/>
<menu_item_check label="Dynamiske teksturer" name="Dynamic Textures"/>
@@ -182,10 +179,7 @@
<menu_item_call label="T繪m gruppe cache" name="ClearGroupCache"/>
<menu_item_check label="Muse udj疆vning" name="Mouse Smoothing"/>
<menu label="Shortcuts" name="Shortcuts">
- <menu_item_call label="Billede (L$[COST])..." name="Upload Image"/>
- <menu_item_check label="S繪g" name="Search"/>
<menu_item_call label="Frig繪r taster" name="Release Keys"/>
- <menu_item_call label="S疆t UI st繪rrelse til standard" name="Set UI Size to Default"/>
<menu_item_check label="Vis avanceret menu (gammel genvej)" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Luk vindue" name="Close Window"/>
<menu_item_call label="Luk alle vinduer" name="Close All Windows"/>
@@ -194,13 +188,6 @@
<menu_item_check label="&quot;Joystick Flycam&quot;" name="Joystick Flycam"/>
<menu_item_call label="Nulstil udsyn" name="Reset View"/>
<menu_item_call label="Se p疇 den sidste der chattede" name="Look at Last Chatter"/>
- <menu label="V疆lg byggev疆rkt繪j" name="Select Tool">
- <menu_item_call label="Fokuseringsv疆rkt繪j" name="Focus"/>
- <menu_item_call label="Flyt v疆rkt繪j" name="Move"/>
- <menu_item_call label="Redigeringsv疆rkt繪j" name="Edit"/>
- <menu_item_call label="Opret v疆rkt繪j" name="Create"/>
- <menu_item_call label="Land v疆rkt繪j" name="Land"/>
- </menu>
<menu_item_call label="Zoom ind" name="Zoom In"/>
<menu_item_call label="Zoom standard" name="Zoom Default"/>
<menu_item_call label="Zoom ud" name="Zoom Out"/>
@@ -276,9 +263,8 @@
<menu_item_call label="Mist en netv疆rkspakke" name="Drop a Packet"/>
</menu>
<menu_item_call label="St繪d, skub &amp; slag" name="Bumps, Pushes &amp;amp; Hits"/>
- <menu label="Verden" name="World">
+ <menu label="Verden" name="DevelopWorld">
<menu_item_check label="V疆lg anden sol end region" name="Sim Sun Override"/>
- <menu_item_check label="Pejlelys blink effekt" name="Cheesy Beacon"/>
<menu_item_check label="Fast vejr" name="Fixed Weather"/>
<menu_item_call label="Dump Region Object Cache" name="Dump Region Object Cache"/>
</menu>
@@ -300,11 +286,11 @@
</menu>
<menu label="Avatar" name="Character">
<menu label="Grab Baked Texture" name="Grab Baked Texture">
- <menu_item_call label="Iris" name="Iris"/>
- <menu_item_call label="Hovede" name="Head"/>
- <menu_item_call label="Overkrop" name="Upper Body"/>
- <menu_item_call label="Underkrop" name="Lower Body"/>
- <menu_item_call label="Nederdel" name="Skirt"/>
+ <menu_item_call label="Iris" name="Grab Iris"/>
+ <menu_item_call label="Hovede" name="Grab Head"/>
+ <menu_item_call label="Overkrop" name="Grab Upper Body"/>
+ <menu_item_call label="Underkrop" name="Grab Lower Body"/>
+ <menu_item_call label="Nederdel" name="Grab Skirt"/>
</menu>
<menu label="Avatar tests" name="Character Tests">
<menu_item_call label="Skift avatar geometri" name="Toggle Character Geometry"/>
@@ -326,8 +312,8 @@
<menu_item_check label="Vis administrationsmenu" name="View Admin Options"/>
</menu>
<menu label="Administr矇r" name="Admin">
- <menu label="Object">
- <menu_item_call label="Tag kopi" name="Take Copy"/>
+ <menu label="Object" name="AdminObject">
+ <menu_item_call label="Tag kopi" name="Admin Take Copy"/>
<menu_item_call label="Gennemtving ejer til mig" name="Force Owner To Me"/>
<menu_item_call label="Gennemtving ejer tolerance" name="Force Owner Permissive"/>
<menu_item_call label="Slet" name="Delete"/>
diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
index 145cc1e30b..b4c28daac9 100644
--- a/indra/newview/skins/default/xui/de/floater_about.xml
+++ b/indra/newview/skins/default/xui/de/floater_about.xml
@@ -67,32 +67,34 @@ Voice-Serverversion: [VOICE_VERSION]
<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).
-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).
-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.
-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.
+ 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).
+ 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).
+ 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.
+ 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.
-Second Life Viewer verwendet Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (und Lizenzgeber). Alle Rechte vorbehalten. Details siehe www.havok.com.
+ Second Life Viewer verwendet Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (und Lizenzgeber). Alle Rechte vorbehalten. Details siehe www.havok.com.
-Alle Rechte vorbehalten. Details siehe licenses.txt.
+ Diese Software enth瓣lt von der NVIDIA Corporation bereitgestellten Quellcode.
-Audiocodierung f羹r Voice-Chat: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+ Alle Rechte vorbehalten. Details siehe licenses.txt.
+
+ Audiocodierung f羹r Voice-Chat: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
</text_editor>
</panel>
</tab_container>
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 3cf3a16247..b893ab79e5 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -130,7 +130,7 @@
Traffic:
</text>
<text name="DwellText">
- 0
+ Laden...
</text>
<button label="Land kaufen" label_selected="Land kaufen..." name="Buy Land..."/>
<button label="Linden-Verkauf" label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
@@ -310,13 +310,15 @@ Nur groe Parzellen k繹nnen in der Suche aufgef羹hrt werden.
Kein Stoen (regional)
</panel.string>
<panel.string name="see_avs_text">
- Auf dieser Parzelle Einwohner sehen und mit ihnen chatten
+ Avatare auf anderen Parzellen k繹nnen
</panel.string>
<text name="allow_label">
Anderen Einwohnern gestatten:
</text>
- <check_box label="Terrain bearbeiten" name="edit land check" tool_tip="Falls aktiviert, kann jeder Ihr Land terraformen. Am besten ist es, wenn Sie diese Option deaktiviert lassen. Sie k繹nnen Ihr eigenes Land jederzeit bearbeiten."/>
- <check_box label="Fliegen" name="check fly" tool_tip="Falls aktiviert, k繹nnen Einwohner auf Ihrem Land fliegen. Falls nicht aktiviert, k繹nnen Einwohner lediglich auf Ihr Land fliegen und dort landen (dann jedoch nicht wieder weiterfliegen) oder 羹ber Ihr Land hinweg fliegen."/>
+ <text name="allow_label0">
+ Fliegen:
+ </text>
+ <check_box label="Jeder" name="check fly" tool_tip="Falls aktiviert, k繹nnen Einwohner auf Ihrem Land fliegen. Falls nicht aktiviert, k繹nnen Einwohner lediglich auf Ihr Land fliegen und dort landen (dann jedoch nicht wieder weiterfliegen) oder 羹ber Ihr Land hinweg fliegen."/>
<text name="allow_label2">
Bauen:
</text>
@@ -332,9 +334,6 @@ Nur groe Parzellen k繹nnen in der Suche aufgef羹hrt werden.
</text>
<check_box label="Jeder" name="check other scripts"/>
<check_box label="Gruppe" name="check group scripts"/>
- <text name="land_options_label">
- Landoptionen:
- </text>
<check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option Sicher eingestellt, Kampfsch瓣den sind deaktiviert. Ansonsten sind Kampfsch瓣den aktiviert."/>
<check_box label="Kein Stoen" name="PushRestrictCheck" tool_tip="Verhindert Stoen durch Skripte. Durch Aktivieren dieser Option verhindern Sie st繹rendes Verhalten auf Ihrem Land."/>
<check_box label="Ort in Suche anzeigen (30 L$/Woche)" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>
@@ -375,9 +374,9 @@ Nur groe Parzellen k繹nnen in der Suche aufgef羹hrt werden.
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuw瓣hlen"/>
<text name="allow_label5">
- Einwohnern auf anderen Parzellen Folgendes gestatten:
+ Avatare auf dieser Parzelle sehen und mit ihnen chatten
</text>
- <check_box label="Avatare sehen" name="SeeAvatarsCheck" tool_tip="Gestattet sowohl Einwohnern auf anderen Parzellen, Einwohner auf dieser Parzelle zu sehen und mit ihnen zu chatten, als auch Ihnen, diese Einwohner auf anderen Parzellen zu sehen und mit ihnen zu chatten."/>
+ <check_box label="Avatare sehen" name="SeeAvatarsCheck" tool_tip="Gestattet sowohl Avataren auf anderen Parzellen, Avatare auf dieser Parzelle zu sehen und mit ihnen zu chatten, als auch Ihnen, diese Avatare auf anderen Parzellen zu sehen und mit ihnen zu chatten."/>
<text name="landing_point">
Landepunkt: [LANDING]
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_avatar.xml b/indra/newview/skins/default/xui/de/floater_avatar.xml
index 1470c4bcd6..ba0dd54d96 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Avatar" title="AVATAR-AUSWAHL"/>
+<floater name="Avatar" title="AVATAR AUSWHLEN"/>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
index e766b622f7..65926c088c 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
@@ -46,7 +46,7 @@
[AMT] L$
</text>
<text name="currency_links">
- [http://www.secondlife.com/my/account/payment_method_management.php?lang=de-DE Zahlungsart] | [http://www.secondlife.com/my/account/currency.php?lang=de-DE W瓣hrung]
+ [http://www.secondlife.com/my/account/payment_method_management.php Zahlungsart] | [http://www.secondlife.com/my/account/currency.php W瓣hrung]
</text>
<text name="exchange_rate_note">
Geben Sie den Betrag erneut ein, um die aktuellste Umtauschrate anzuzeigen.
diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml
index 7e9ebdb643..163ef87d8c 100644
--- a/indra/newview/skins/default/xui/de/floater_camera.xml
+++ b/indra/newview/skins/default/xui/de/floater_camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="camera_floater" title="ANSICHT">
+<floater name="camera_floater" title="KAMERASTEUERUNGEN">
<floater.string name="rotate_tooltip">
Kamera um Fokus drehen
</floater.string>
diff --git a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
index 9644bbbaea..ca081aafae 100644
--- a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
@@ -4,7 +4,7 @@
Filtern:
</text>
<check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani"/>
- <text name="Antialiasing:">
+ <text name="antialiasing label">
Antialiasing:
</text>
<combo_box label="Antialiasing" name="fsaa">
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 7f6cd9944f..4af8d67686 100644
--- a/indra/newview/skins/default/xui/de/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml
@@ -4,6 +4,9 @@
<string name="status_parse_error">
Fehler: Fehler beim DAE-Parsen Details siehe Protokoll.
</string>
+ <string name="status_material_mismatch">
+ Fehler: Das Material des Modells ist keine Teilmenge des Referenzmodells.
+ </string>
<string name="status_reading_file">
Laden...
</string>
@@ -137,7 +140,7 @@
</panel>
<panel name="physics analysis">
<text name="method_label">
- Schritt 2: Analyse
+ Schritt 2: Analysieren
</text>
<text name="analysis_method_label">
Methode:
diff --git a/indra/newview/skins/default/xui/de/floater_model_wizard.xml b/indra/newview/skins/default/xui/de/floater_model_wizard.xml
index 354a505901..a90f36f202 100644
--- a/indra/newview/skins/default/xui/de/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_wizard.xml
@@ -20,6 +20,9 @@
Hochzuladende Modelldatei ausw瓣hlen
</text>
<button label="Durchsuchen..." label_selected="Durchsuchen..." name="browse"/>
+ <text name="Model types">
+ Second Life unterst羹tzt COLLADA-Dateien (.dae).
+ </text>
<text name="dimensions">
X Y Z
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_moveview.xml b/indra/newview/skins/default/xui/de/floater_moveview.xml
index e8cc77c038..c1c8271310 100644
--- a/indra/newview/skins/default/xui/de/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/de/floater_moveview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater" title="BEWEGEN">
+<floater name="move_floater" title="GEHEN / RENNEN / FLIEGEN">
<string name="walk_forward_tooltip">
Vorw瓣rts gehen (Nach-oben-Pfeil oder W dr羹cken)
</string>
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index ae68c71a80..798461c007 100644
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -3,73 +3,63 @@
<floater.string name="unknown">
unbekannt
</floater.string>
- <radio_group label="Fototyp" name="snapshot_type_radio">
- <radio_item label="E-Mail" name="postcard"/>
- <radio_item label="Mein Inventar ([AMOUNT] L$)" name="texture"/>
- <radio_item label="Auf meinem Computer speichern" name="local"/>
- </radio_group>
+ <string name="postcard_progress_str">
+ E-Mail senden
+ </string>
+ <string name="profile_progress_str">
+ Posten
+ </string>
+ <string name="inventory_progress_str">
+ Speichern im Inventar
+ </string>
+ <string name="local_progress_str">
+ Speichern auf Computer
+ </string>
+ <string name="profile_succeeded_str">
+ Bild hochgeladen
+ </string>
+ <string name="postcard_succeeded_str">
+ E-Mail gesendet!
+ </string>
+ <string name="inventory_succeeded_str">
+ Im Inventar gespeichert!
+ </string>
+ <string name="local_succeeded_str">
+ Auf Computer gespeichert!
+ </string>
+ <string name="profile_failed_str">
+ Fehler beim Hochladen des Bilds in Ihr Profil.
+ </string>
+ <string name="postcard_failed_str">
+ Fehler beim Senden der E-Mail.
+ </string>
+ <string name="inventory_failed_str">
+ Fehler beim Speichern im Inventar.
+ </string>
+ <string name="local_failed_str">
+ Fehler beim Speichern auf dem Computer.
+ </string>
+ <button name="advanced_options_btn" tool_tip="Erweiterte Optionen"/>
+ <text name="image_res_text">
+ [WIDTH] x [HEIGHT]px
+ </text>
<text name="file_size_label">
[SIZE] KB
</text>
- <button label="Foto aktualisieren" name="new_snapshot_btn"/>
- <button label="Senden" name="send_btn"/>
- <button label="Speichern ([AMOUNT] L$)" name="upload_btn"/>
- <flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern">
- <flyout_button.item label="Speichern" name="save_item"/>
- <flyout_button.item label="Speichern unter..." name="saveas_item"/>
- </flyout_button>
- <button label="Mehr" name="more_btn" tool_tip="Erweiterte Optionen"/>
- <button label="Weniger" name="less_btn" tool_tip="Erweiterte Optionen"/>
- <button label="Abbrechen" name="discard_btn"/>
- <text name="type_label2">
- Gr繹e
- </text>
- <text name="format_label">
- Format
- </text>
- <combo_box label="Aufl繹sung" name="postcard_size_combo">
- <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="Benutzerdefiniert" name="Custom"/>
- </combo_box>
- <combo_box label="Aufl繹sung" name="texture_size_combo">
- <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
- <combo_box.item label="Klein (128x128)" name="Small(128x128)"/>
- <combo_box.item label="Mittel (256x256)" name="Medium(256x256)"/>
- <combo_box.item label="Gro (512x512)" name="Large(512x512)"/>
- <combo_box.item label="Benutzerdefiniert" name="Custom"/>
- </combo_box>
- <combo_box label="Aufl繹sung" name="local_size_combo">
- <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
- <combo_box.item label="320x240" name="320x240"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="1280x1024" name="1280x1024"/>
- <combo_box.item label="1600x1200" name="1600x1200"/>
- <combo_box.item label="Benutzerdefiniert" name="Custom"/>
- </combo_box>
- <combo_box label="Format" name="local_format_combo">
- <combo_box.item label="PNG" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP" name="BMP"/>
- </combo_box>
- <spinner label="Breite" name="snapshot_width"/>
- <spinner label="Gr繹e" name="snapshot_height"/>
- <check_box label="Seitenverh瓣ltnis beibehalten" name="keep_aspect_check"/>
- <slider label="Bildqualit瓣t" name="image_quality_slider"/>
- <text name="layer_type_label">
- Aufnehmen:
- </text>
- <combo_box label="Bildlayer" name="layer_types">
- <combo_box.item label="Farben" name="Colors"/>
- <combo_box.item label="Tiefe" name="Depth"/>
- </combo_box>
- <check_box label="Schnittstelle" name="ui_check"/>
- <check_box label="HUDs" name="hud_check"/>
- <check_box label="Nach dem Speichern offen lassen" name="keep_open_check"/>
- <check_box label="Frame einfrieren (Vollbild)" name="freeze_frame_check"/>
- <check_box label="Automatisch aktualisieren" name="auto_snapshot_check"/>
+ <panel name="advanced_options_panel">
+ <text name="advanced_options_label">
+ ERWEITERTE OPTIONEN
+ </text>
+ <text name="layer_type_label">
+ Aufnahme:
+ </text>
+ <combo_box label="Bildebenen" name="layer_types">
+ <combo_box.item label="Farben" name="Colors"/>
+ <combo_box.item label="Tiefe" name="Depth"/>
+ </combo_box>
+ <check_box label="Schnittstelle" name="ui_check"/>
+ <check_box label="HUDs" name="hud_check"/>
+ <check_box label="Standbild (Vollbild)" name="freeze_frame_check"/>
+ <check_box label="Automatisch aktualisieren" name="auto_snapshot_check"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_toybox.xml b/indra/newview/skins/default/xui/de/floater_toybox.xml
index 23ec9c2e58..90e50804d6 100644
--- a/indra/newview/skins/default/xui/de/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/de/floater_toybox.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Toybox" title="SYMBOLLEISTEN ANPASSEN">
+<floater name="Toybox" title="SYMBOLLEISTENSCHALTFLCHEN">
<text name="toybox label 1">
Sie k繹nnen Schaltfl瓣chen durch Ziehen zu Symbolleisten hinzuf羹gen oder daraus entfernen.
</text>
<text name="toybox label 2">
Je nach Einstellung erscheinen Schaltfl瓣chen wie dargestellt oder nur als Symbol.
</text>
+ <button label="Alle Symbolleisten leeren" label_selected="Alle Symbolleisten leeren" name="btn_clear_all"/>
<button label="Standards wiederherstellen" label_selected="Standards wiederherstellen" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_translation_settings.xml b/indra/newview/skins/default/xui/de/floater_translation_settings.xml
new file mode 100644
index 0000000000..3d5d1d46a8
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_translation_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_translation_settings" title="BERSETZUNGSEINSTELLUNGEN FR CHATS">
+ <string name="bing_api_key_not_verified">
+ Bing-AppID nicht verifiziert. Versuchen Sie es erneut.
+ </string>
+ <string name="google_api_key_not_verified">
+ Google-API-Schl羹ssel nicht verifiziert. Versuchen Sie es erneut.
+ </string>
+ <string name="bing_api_key_verified">
+ Bing-AppID verifiziert.
+ </string>
+ <string name="google_api_key_verified">
+ Google-API-Schl羹ssel verifiziert.
+ </string>
+ <check_box label="Maschinen羹bersetzung beim Chatten aktivieren" name="translate_chat_checkbox"/>
+ <text name="translate_language_label">
+ Chat 羹bersetzen in:
+ </text>
+ <combo_box name="translate_language_combo">
+ <combo_box.item label="Systemstandard" name="System Default Language"/>
+ <combo_box.item label="English (Englisch)" name="English"/>
+ <combo_box.item label="Dansk (D瓣nisch)" name="Danish"/>
+ <combo_box.item label="Deutsch" name="German"/>
+ <combo_box.item label="Espa簽ol (Spanisch)" name="Spanish"/>
+ <combo_box.item label="Fran癟ais (Franz繹sisch)" name="French"/>
+ <combo_box.item label="Italiano (Italienisch)" name="Italian"/>
+ <combo_box.item label="Magyar (Ungarisch)" name="Hungarian"/>
+ <combo_box.item label="Nederlands (Holl瓣ndisch)" name="Dutch"/>
+ <combo_box.item label="Polski (Polnisch)" name="Polish"/>
+ <combo_box.item label="Portugu礙s (Portugiesisch)" name="Portugese"/>
+ <combo_box.item label="郕邽邿 (Russisch)" name="Russian"/>
+ <combo_box.item label="T羹rk癟e (T羹rkisch)" name="Turkish"/>
+ <combo_box.item label="苺郕訄郇郕訄 (Ukrainisch)" name="Ukrainian"/>
+ <combo_box.item label="銝剜 (甇擃) (Chinesisch)" name="Chinese"/>
+ <combo_box.item label="交祈 (Japanisch)" name="Japanese"/>
+ <combo_box.item label="窱原 (Koreanisch)" name="Korean"/>
+ </combo_box>
+ <text name="tip">
+ bersetzungsservice ausw瓣hlen:
+ </text>
+ <radio_group name="translation_service_rg">
+ <radio_item initial_value="bing" label="Bing Translator" name="bing"/>
+ <radio_item initial_value="google" label="Google Translate" name="google"/>
+ </radio_group>
+ <text name="bing_api_key_label">
+ Bing-[http://www.bing.com/developers/createapp.aspx AppID]:
+ </text>
+ <button label="Verifizieren" name="verify_bing_api_key_btn"/>
+ <text name="google_api_key_label">
+ Google-[http://code.google.com/apis/language/translate/v2/getting_started.html#auth API-Schl羹ssel]:
+ </text>
+ <button label="Verifizieren" name="verify_google_api_key_btn"/>
+ <text name="google_links_text">
+ [http://code.google.com/apis/language/translate/v2/pricing.html Pricing] | [https://code.google.com/apis/console Statistik]
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
index 18d53841b8..5efda4136e 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="SPRACHSTEUERUNGEN">
<string name="title_nearby">
- Stimme in der N瓣he
+ VOICE-EINSTELLUNGEN
</string>
<string name="title_group">
- Gruppengespr瓣ch mit [GROUP]
+ GRUPPENGESPRCH MIT [GROUP]
</string>
<string name="title_adhoc">
- Konferenzgespr瓣ch
+ KONFERENZGESPRCH
</string>
<string name="title_peer_2_peer">
- Gespr瓣ch mit [NAME]
+ GESPRCH MIT [NAME]
</string>
<string name="no_one_near">
Es ist niemand in der N瓣he, der Voice aktiviert hat.
diff --git a/indra/newview/skins/default/xui/de/menu_toolbars.xml b/indra/newview/skins/default/xui/de/menu_toolbars.xml
index cfeae3deca..3fb48e26b2 100644
--- a/indra/newview/skins/default/xui/de/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/de/menu_toolbars.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Toolbars Popup">
- <menu_item_call label="Schaltfl瓣chen ausw瓣hlen..." name="Chose Buttons"/>
+ <menu_item_call label="Diese Schaltfl瓣che entfernen" name="Remove button"/>
+ <menu_item_call label="Symbolleistenschaltfl瓣chen..." name="Choose Buttons"/>
<menu_item_check label="Symbole und Beschriftungen" name="icons_with_text"/>
<menu_item_check label="Nur Symbole" name="icons_only"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 90b2cfbc41..a81874bee9 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu_bar name="Main Menu">
<menu label="Ich" name="Me">
- <menu_item_call label="Dashboard..." name="Manage My Account">
- <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=de"/>
- </menu_item_call>
<menu_item_call label="Profil..." name="Profile"/>
<menu_item_call label="Aussehen..." name="ChangeOutfit"/>
+ <menu_item_call label="Avatar ausw瓣hlen..." name="Avatar Picker"/>
<menu_item_check label="Inventar..." name="Inventory"/>
- <menu_item_check label="Gesten..." name="Gestures"/>
- <menu_item_check label="Stimme..." name="ShowVoice"/>
+ <menu_item_call label="Neues Inventarfenster" name="NewInventoryWindow"/>
+ <menu_item_call label="Orte..." name="Places"/>
+ <menu_item_call label="Auswahlen..." name="Picks"/>
+ <menu_item_call label="Kamerasteuerungen..." name="Camera Controls"/>
<menu label="Bewegung" name="Movement">
<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
<menu_item_check label="Fliegen" name="Fly"/>
@@ -22,34 +22,39 @@
<menu_item_call label="Admin-Status anfordern" name="Request Admin Options"/>
<menu_item_call label="Admin-Status verlassen" name="Leave Admin Options"/>
<menu_item_call label="L$ kaufen" name="Buy and Sell L$"/>
+ <menu_item_call label="Konto羹bersicht..." name="Manage My Account">
+ <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=de"/>
+ </menu_item_call>
<menu_item_call label="Einstellungen..." name="Preferences"/>
- <menu_item_call label="Symbolleisten..." name="Toolbars"/>
+ <menu_item_call label="Symbolleistenschaltfl瓣chen..." name="Toolbars"/>
<menu_item_call label="Alle Steuerelemente ausblenden" name="Hide UI"/>
<menu_item_call label="[APP_NAME] schlieen" name="Quit"/>
</menu>
<menu label="Unterhalten" name="Communicate">
- <menu_item_call label="Meine Freunde" name="My Friends"/>
- <menu_item_call label="Meine Gruppen" name="My Groups"/>
- <menu_item_check label="Chat in der N瓣he" name="Nearby Chat"/>
+ <menu_item_check label="Chat..." name="Nearby Chat"/>
+ <menu_item_check label="Sprechen" name="Speak"/>
+ <menu_item_check label="Voice-Einstellungen..." name="Nearby Voice"/>
+ <menu_item_check label="Voice-Morphing..." name="ShowVoice"/>
+ <menu_item_check label="Gesten..." name="Gestures"/>
+ <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_check label="Stimme in der N瓣he" name="Nearby Voice"/>
</menu>
<menu label="Welt" name="World">
- <menu_item_check label="Minikarte" name="Mini-Map"/>
+ <menu_item_call label="Landmarke f羹r diesen Ort setzen" name="Create Landmark Here"/>
+ <menu_item_call label="Ziele..." name="Destinations"/>
<menu_item_check label="Karte" name="World Map"/>
+ <menu_item_check label="Minikarte" name="Mini-Map"/>
<menu_item_check label="Suchen" name="Search"/>
+ <menu_item_call label="Nach Hause teleportieren" name="Teleport Home"/>
+ <menu_item_call label="Hier als Zuhause w瓣hlen" name="Set Home to Here"/>
<menu_item_call label="Foto" name="Take Snapshot"/>
- <menu_item_call label="Landmarke f羹r diesen Ort setzen" name="Create Landmark Here"/>
- <menu label="Ortsprofil" name="Land">
- <menu_item_call label="Ortsprofil" name="Place Profile"/>
- <menu_item_call label="Land-Info" name="About Land"/>
- <menu_item_call label="Region/Grundbesitz" name="Region/Estate"/>
- </menu>
+ <menu_item_call label="Ortsprofil" name="Place Profile"/>
+ <menu_item_call label="Landinformationen" name="About Land"/>
+ <menu_item_call label="Region/Grundbesitz" name="Region/Estate"/>
+ <menu_item_call label="Mein Landbesitz..." name="My Land"/>
<menu_item_call label="Dieses Land kaufen" name="Buy Land"/>
- <menu_item_call label="Mein Land" name="My Land"/>
<menu label="Anzeigen" name="LandShow">
- <menu_item_check label="Bewegungssteuerung" name="Movement Controls"/>
- <menu_item_check label="Ansichtsteuerung" name="Camera Controls"/>
<menu_item_check label="Bannlinien" name="Ban Lines"/>
<menu_item_check label="Strahlen" name="beacons"/>
<menu_item_check label="Grundst羹cksgrenzen" name="Property Lines"/>
@@ -58,16 +63,15 @@
<menu_item_check label="Parzelleneigenschaften" name="Parcel Properties"/>
<menu_item_check label="Men羹 Erweitert" name="Show Advanced Menu"/>
</menu>
- <menu_item_call label="Teleport nach Hause" name="Teleport Home"/>
- <menu_item_call label="Hier als Zuhause w瓣hlen" name="Set Home to Here"/>
<menu label="Sonne" name="Environment Settings">
<menu_item_call label="Sonnenaufgang" name="Sunrise"/>
<menu_item_call label="Mittag" name="Noon"/>
<menu_item_call label="Sonnenuntergang" name="Sunset"/>
<menu_item_call label="Mitternacht" name="Midnight"/>
+ <menu_item_call label="Regionseinstellungen verwenden" name="Use Region Settings"/>
</menu>
- <menu label="Umgebungs-Editor" name="Enviroment Editor">
- <menu_item_call label="Umgebungseinstellungen..." name="Enviroment Settings"/>
+ <menu label="Umwelt-Editor" name="Environment Editor">
+ <menu_item_call label="Umwelt-Einstellungen..." name="Environment Settings"/>
<menu label="Wasser-Voreinstellungen" name="Water Presets">
<menu_item_call label="Neue Voreinstellung..." name="new_water_preset"/>
<menu_item_call label="Voreinstellung bearbeiten..." name="edit_water_preset"/>
@@ -146,6 +150,7 @@
<menu_item_call label="Wiederholen" name="Redo"/>
</menu>
<menu label="Hilfe" name="Help">
+ <menu_item_call label="Anweisungen..." name="How To"/>
<menu_item_call label="[SECOND_LIFE]-Hilfe" name="Second Life Help"/>
<menu_item_call label="Missbrauch melden" name="Report Abuse"/>
<menu_item_call label="Fehler melden" name="Report Bug"/>
@@ -200,11 +205,10 @@
<menu_item_check label="Plugin Read Thread verwenden" name="Use Plugin Read Thread"/>
<menu_item_call label="Gruppen-Cache l繹schen" name="ClearGroupCache"/>
<menu_item_check label="Weiche Mausbewegung" name="Mouse Smoothing"/>
+ <menu_item_call label="Tasten freigeben" name="Release Keys"/>
<menu label="Tastaturk羹rzel" name="Shortcuts">
<menu_item_call label="Bild ([COST] L$)..." name="Upload Image"/>
<menu_item_check label="Suchen" name="Search"/>
- <menu_item_call label="Tasten freigeben" name="Release Keys"/>
- <menu_item_call label="UI-Gr繹e auf Standard setzen" name="Set UI Size to Default"/>
<menu_item_check label="Erweitert-Men羹 anzeigen - veraltetet" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Fenster schlieen" name="Close Window"/>
<menu_item_call label="Alle Fenster schlieen" name="Close All Windows"/>
@@ -290,6 +294,7 @@
<menu_item_check label="Lichter" name="Lights"/>
<menu_item_check label="Gelenkpunkte" name="Collision Skeleton"/>
<menu_item_check label="Raycast" name="Raycast"/>
+ <menu_item_check label="Windvektoren" name="Wind Vectors"/>
<menu_item_check label="Komplexit瓣t beim Rendern" name="rendercomplexity"/>
<menu_item_check label="Formen" name="Sculpt"/>
</menu>
@@ -302,7 +307,6 @@
<menu_item_check label="Licht und Schatten" name="Lighting and Shadows"/>
<menu_item_check label="Schatten von Sonne-/Mond-Projektoren" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO und Schattengl瓣ttung" name="SSAO and Shadow Smoothing"/>
- <menu_item_check label="Globale Beleuchtung (experimentell)" name="Global Illumination"/>
<menu_item_check label="Fehler in GL beseitigen" name="Debug GL"/>
<menu_item_check label="Fehler in Pipeline beseitigen" name="Debug Pipeline"/>
<menu_item_check label="Automatische Alpha-Masken (aufgeschoben)" name="Automatic Alpha Masks (deferred)"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index a5fcd3e0b4..a34b938a7a 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1124,8 +1124,13 @@ Der Gruppe [GROUP_NAME] [AREA]m簡 an Land schenken?
<notification name="DisplaySetToSafe">
Es wurden sichere Anzeige-Einstellungen gew瓣hlt, da die Option -safe verwendet wurde.
</notification>
- <notification name="DisplaySetToRecommended">
- Es wurden die f羹r Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gew瓣hlt.
+ <notification name="DisplaySetToRecommendedGPUChange">
+ Die Anzeigeeinstellungen wurden auf die empfohlenen Werte gesetzt, da Ihre Grafikkarte ge瓣ndert wurde
+von [LAST_GPU]
+in [THIS_GPU]
+ </notification>
+ <notification name="DisplaySetToRecommendedFeatureChange">
+ Aufgrund einer nderung des Rendersubsystems wurden die Anzeigeeinstellungen auf die empfohlenen Werte gesetzt.
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
@@ -1926,7 +1931,13 @@ Inventarobjekt(e) verschieben?
<usetemplate ignoretext="Best瓣tigen, bevor Sitzung beendet wird" name="okcancelignore" notext="Nicht beenden" yestext="Beenden"/>
</notification>
<notification name="ConfirmRestoreToybox">
- M繹chten Sie wirklich Ihre Standardschaltfl瓣chen und -symbolleisten wiederherstellen?
+ Durch diese Aktion werden Ihre Standardschaltfl瓣chen und -symbolleisten wiederhergestellt.
+
+Diese Aktion kann nicht r羹ckg瓣ngig gemacht werden.
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearAllToybox">
+ Durch diese Aktion werden alle Schaltfl瓣chen zur羹ck in die Toolbox gestellt; die Symbolleisten sind leer.
Diese Aktion kann nicht r羹ckg瓣ngig gemacht werden.
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
@@ -2250,14 +2261,16 @@ W瓣hlen Sie ein einzelnes Objekt aus.
Ihre Visitenkarte wurde abgelehnt.
</notification>
<notification name="TeleportToLandmark">
- Sie k繹nnen an Positionen wie [NAME] teleportieren, wenn Sie rechts in Ihrem Bildschirm die Tafel Orte 繹ffnen und dann die Registerkarte Meine Landmarken ausw瓣hlen.
-Klicken Sie auf eine Landmarke, um diese auszuw瓣hlen. Klicken Sie anschlieend auf unten in der Registerkarte auf Teleportieren.
-(Sie k繹nnen auch auf die Landmarke doppelt klicken oder mit rechts auf die Landmarke klicken und dann Teleportieren ausw瓣hlen).
+ Um zu Orten wie [NAME] zu teleportieren, klicken Sie zuerst auf die Schaltfl瓣che Orte
+ und dann im eingeblendeten Fenster auf die Registerkarte Landmarken. Klicken Sie auf
+ die gew羹nschte Landmarke und dann unten im Fenster auf Teleportieren.
+ (Sie k繹nnen auch auf die Landmarke doppelklicken bzw. sie mit der rechten Maustaste ankklicken und dann
+ Teleportieren w瓣hlen.)
</notification>
<notification name="TeleportToPerson">
- Sie k繹nnen Einwohner wie [NAME] kontaktieren, wenn Sie die Tafel Leute auf der rechten Seite Ihres Bildschirms 繹ffnen.
-W瓣hlen Sie den Einwohner aus der Liste aus und klicken Sie unten auf IM.
-(Sie k繹nnen auch auf den Namen doppelt klicken oder mit rechts auf den Namen klicken und dann IM ausw瓣hlen).
+ Um Einwohner wie [NAME] zu kontaktieren, klicken Sie auf die Schaltfl瓣che Leute, w瓣hlen Sie eingeblendeten Fenster einen Einwohner aus
+ und klicken Sie unten im Fenster auf IM.
+ (Sie k繹nnen auch auf den Namen doppelklicken bzw. ihn mit der rechten Maustaste anklicken und dann IM w瓣hlen.)
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Land kann nicht 羹ber Servergrenzen hinweg ausgew瓣hlt werden.
@@ -2278,6 +2291,9 @@ W瓣hlen Sie eine kleinere Landfl瓣che.
<notification name="PaymentSent">
[MESSAGE]
</notification>
+ <notification name="PaymentFailure">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
Event-Benachrichtigung:
diff --git a/indra/newview/skins/default/xui/de/panel_edit_skin.xml b/indra/newview/skins/default/xui/de/panel_edit_skin.xml
index f167f45e98..60f6919485 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_skin.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="Kopftattoo" name="Head Tattoos" tool_tip="Zum Ausw瓣hlen eines Bildes hier klicken"/>
- <texture_picker label="Obere Tattoos" name="Upper Tattoos" tool_tip="Zum Ausw瓣hlen eines Bildes hier klicken"/>
- <texture_picker label="Untere Tattoos" name="Lower Tattoos" tool_tip="Zum Ausw瓣hlen eines Bildes hier klicken"/>
+ <texture_picker label="Kopf" name="Head" tool_tip="Klicken, um ein Bild zu w瓣hlen"/>
+ <texture_picker label="Oberk繹rper" name="Upper Body" tool_tip="Klicken, um ein Bild zu w瓣hlen"/>
+ <texture_picker label="Unterk繹rper" name="Lower Body" tool_tip="Klicken, um ein Bild zu w瓣hlen"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/de/panel_postcard_message.xml b/indra/newview/skins/default/xui/de/panel_postcard_message.xml
new file mode 100644
index 0000000000..6eeef8af71
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_postcard_message.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_message">
+ <text name="to_label">
+ An:
+ </text>
+ <text name="name_label">
+ Von:
+ </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>
+ <button label="Abbrechen" name="cancel_btn"/>
+ <button label="Senden" name="send_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
new file mode 100644
index 0000000000..c1a1c0cc46
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_settings">
+ <combo_box label="Aufl繹sung" name="postcard_size_combo">
+ <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Benutzerdefiniert" name="Custom"/>
+ </combo_box>
+ <layout_stack name="postcard_image_params_ls">
+ <layout_panel name="postcard_image_size_lp">
+ <spinner label="Breite" name="postcard_snapshot_width"/>
+ <spinner label="H繹he" name="postcard_snapshot_height"/>
+ <check_box label="Seitenverh瓣ltnis beibehalten" name="postcard_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="postcard_image_format_quality_lp">
+ <slider label="Bildqualit瓣t" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+</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 04f6c27330..746a561e6c 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -29,30 +29,5 @@
<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"/>
- <check_box name="translate_chat_checkbox"/>
- <text name="translate_chb_label">
- Beim Chatten Maschinen羹bersetzung verwenden
- </text>
- <text name="translate_language_text">
- Chat 羹bersetzen in:
- </text>
- <combo_box name="translate_language_combobox" width="200">
- <combo_box.item label="Systemstandard" name="System Default Language"/>
- <combo_box.item label="English (Englisch)" name="English"/>
- <combo_box.item label="Dansk (D瓣nisch)" name="Danish"/>
- <combo_box.item label="Deutsch" name="German"/>
- <combo_box.item label="Espa簽ol (Spanisch)" name="Spanish"/>
- <combo_box.item label="Fran癟ais (Franz繹sisch)" name="French"/>
- <combo_box.item label="Italiano (Italienisch)" name="Italian"/>
- <combo_box.item label="Magyar (Ungarisch)" name="Hungarian"/>
- <combo_box.item label="Nederlands (Holl瓣ndisch)" name="Dutch"/>
- <combo_box.item label="Polski (Polnisch)" name="Polish"/>
- <combo_box.item label="Portugu礙s (Portugiesisch)" name="Portugese"/>
- <combo_box.item label="郕邽邿 (Russisch)" name="Russian"/>
- <combo_box.item label="T羹rk癟e (T羹rkisch)" name="Turkish"/>
- <combo_box.item label="苺郕訄郇郕訄 (Ukrainisch)" name="Ukrainian"/>
- <combo_box.item label="銝剜 (甇擃) (Chinesisch)" name="Chinese"/>
- <combo_box.item label="交祈 (Japanisch)" name="Japanese"/>
- <combo_box.item label="窱原 (Koreanisch)" name="Korean"/>
- </combo_box>
+ <button label="bersetzungseinstellungen f羹r Chats" name="ok_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
index 8b18bf8659..8c7ea688d7 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
@@ -15,7 +15,7 @@
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Meinen Browser verwenden (IE, Firefox, Safari)" name="external" tool_tip="Standard Webbrowser des Systems verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Bei Vollbildmodus nicht empfohlen." value="1"/>
+ <radio_item label="Meinen Browser verwenden (IE, Firefox, Safari)" name="external" tool_tip="Standard Webbrowser des Systems verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Bei Vollbildmodus nicht empfohlen." value="true"/>
<radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Integrierten Webbrowser verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Dieser Browser 繹ffnet als neues Fenster innerhalb von [APP_NAME]." value=""/>
</radio_group>
<check_box initial_value="true" label="Plugins aktivieren" name="browser_plugins_enabled"/>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
new file mode 100644
index 0000000000..10827ce6f2
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_inventory">
+ <text name="title">
+ In meinem Inventar speichern
+ </text>
+ <text name="hint_lbl">
+ Das Speichern eines Bilds in Ihrem Inventar kostet [UPLOAD_COST]L$. Um das Bild als Textur zu speichern, w瓣hlen Sie eines der quadratischen Formate aus.
+ </text>
+ <combo_box label="Aufl繹sung" name="texture_size_combo">
+ <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+ <combo_box.item label="Klein (128x128)" name="Small(128x128)"/>
+ <combo_box.item label="Mittel (256x256)" name="Medium(256x256)"/>
+ <combo_box.item label="Gro (512x512)" name="Large(512x512)"/>
+ <combo_box.item label="Benutzerdefiniert" name="Custom"/>
+ </combo_box>
+ <spinner label="Breite" name="inventory_snapshot_width"/>
+ <spinner label="H繹he" name="inventory_snapshot_height"/>
+ <check_box label="Seitenverh瓣ltnis beibehalten" name="inventory_keep_aspect_check"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+ <button label="Speichern" name="save_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
new file mode 100644
index 0000000000..3aeae80388
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_local">
+ <text name="title">
+ Auf meinem Computer speichern
+ </text>
+ <combo_box label="Aufl繹sung" name="local_size_combo">
+ <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+ <combo_box.item label="320x240" name="320x240"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1280x1024" name="1280x1024"/>
+ <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="Benutzerdefiniert" name="Custom"/>
+ </combo_box>
+ <layout_stack name="local_image_params_ls">
+ <layout_panel name="local_image_size_lp">
+ <spinner label="Breite" name="local_snapshot_width"/>
+ <spinner label="H繹he" name="local_snapshot_height"/>
+ <check_box label="Seitenverh瓣ltnis beibehalten" name="local_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="local_image_format_quality_lp">
+ <combo_box label="Format" name="local_format_combo">
+ <combo_box.item label="PNG (verlustfrei)" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP (verlustfrei)" name="BMP"/>
+ </combo_box>
+ <slider label="Bildqualit瓣t" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+ <button label="Abbrechen" name="cancel_btn"/>
+ <flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern">
+ <flyout_button.item label="Speichern" name="save_item"/>
+ <flyout_button.item label="Speichern unter..." name="saveas_item"/>
+ </flyout_button>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
new file mode 100644
index 0000000000..e1d8a5dc6d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_options">
+ <button label="In meinem Profil posten" name="save_to_profile_btn"/>
+ <button label="E-Mail" name="save_to_email_btn"/>
+ <button label="In meinem Inventar speichern ([AMOUNT] L$)" name="save_to_inventory_btn"/>
+ <button label="Auf meinem Computer speichern" name="save_to_computer_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
new file mode 100644
index 0000000000..c9afe86d7f
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_postcard">
+ <string name="default_subject">
+ Postkarte aus [SECOND_LIFE].
+ </string>
+ <string name="default_message">
+ Sehen Sie mal!
+ </string>
+ <string name="upload_message">
+ Senden...
+ </string>
+ <text name="title">
+ E-Mail
+ </text>
+ <button label="Nachricht" name="message_btn"/>
+ <button label="Einstellungen" name="settings_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
new file mode 100644
index 0000000000..8d1c52dea8
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_profile">
+ <text name="title">
+ In meinem Profil posten
+ </text>
+ <combo_box label="Aufl繹sung" name="profile_size_combo">
+ <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Benutzerdefiniert" name="Custom"/>
+ </combo_box>
+ <layout_stack name="profile_image_params_ls">
+ <layout_panel name="profile_image_size_lp">
+ <spinner label="Breite" name="profile_snapshot_width"/>
+ <spinner label="H繹he" name="profile_snapshot_height"/>
+ <check_box label="Seitenverh瓣ltnis beibehalten" name="profile_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="profile_image_metadata_lp">
+ <text name="caption_label">
+ Bildunterschrift:
+ </text>
+ <check_box initial_value="true" label="Ort einschlieen" name="add_location_cb"/>
+ </layout_panel>
+ </layout_stack>
+ <button label="Abbrechen" name="cancel_btn"/>
+ <button label="Posten" name="post_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 2929556d43..14e9fcdb7f 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -1214,7 +1214,7 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Sie haben keine Kopie dieser Textur in Ihrem Inventar.
</string>
<string name="InventoryInboxNoItems">
- Objekte, die auf dem Marktplatz gekauft wurden, werden hierher geliefert.
+ Wenn Sie einen Artikel kaufen oder anderweitig erhalten, erscheint er hier, damit Sie ihn in einen Ordner in Ihrem Inventar ziehen bzw. l繹schen k繹nnen, wenn Sie ihn nicht behalten m繹chten.
</string>
<string name="MarketplaceURL">
http://marketplace.[DOMAIN_NAME]
@@ -1412,6 +1412,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="no_attachments">
Keine Anh瓣nge getragen
</string>
+ <string name="Attachments remain">
+ Anh瓣nge (noch [COUNT] Positionen frei)
+ </string>
<string name="Buy">
Kaufen
</string>
@@ -1538,6 +1541,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="Right Pec">
Rechts
</string>
+ <string name="Neck">
+ Hals
+ </string>
+ <string name="Avatar Center">
+ Avatar-Mitte
+ </string>
<string name="Invalid Attachment">
Ung羹ltige Stelle f羹r Anhang
</string>
@@ -4030,6 +4039,18 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="you_paid_ldollars_no_name">
Sie haben [REASON] [AMOUNT] L$ bezahlt.
</string>
+ <string name="you_paid_failure_ldollars">
+ Sie haben [NAME] [AMOUNT] L$ [REASON] nicht bezahlt.
+ </string>
+ <string name="you_paid_failure_ldollars_no_info">
+ Sie haben [AMOUNT] L$ nicht bezahlt.
+ </string>
+ <string name="you_paid_failure_ldollars_no_reason">
+ Sie haben [NAME] [AMOUNT] L$ nicht bezahlt.
+ </string>
+ <string name="you_paid_failure_ldollars_no_name">
+ Sie haben [AMOUNT] L$ [REASON] nicht bezahlt.
+ </string>
<string name="for item">
f羹r [ITEM]
</string>
@@ -4440,6 +4461,12 @@ Setzen Sie den Editorpfad in Anf羹hrungszeichen
<string name="ExternalEditorFailedToRun">
Externer Editor konnte nicht ausgef羹hrt werden.
</string>
+ <string name="TranslationFailed">
+ bersetzung fehlgeschlagen: [REASON]
+ </string>
+ <string name="TranslationResponseParseError">
+ Fehler beim Parsen der bersetzungsantwort.
+ </string>
<string name="Esc">
Esc
</string>
@@ -4810,7 +4837,7 @@ Setzen Sie den Editorpfad in Anf羹hrungszeichen
Minikarte
</string>
<string name="Command_Move_Label">
- Bewegen
+ Gehen / Rennen / Fliegen
</string>
<string name="Command_People_Label">
Leute
@@ -4837,10 +4864,10 @@ Setzen Sie den Editorpfad in Anf羹hrungszeichen
Sprechen
</string>
<string name="Command_View_Label">
- Ansicht
+ Kamerasteuerungen
</string>
<string name="Command_Voice_Label">
- Stimme in der N瓣he
+ Voice-Einstellungen
</string>
<string name="Command_AboutLand_Tooltip">
Informationen zu dem von Ihnen besuchten Land
@@ -4912,7 +4939,16 @@ Setzen Sie den Editorpfad in Anf羹hrungszeichen
Kamerawinkel 瓣ndern
</string>
<string name="Command_Voice_Tooltip">
- Leute in der N瓣he mit Sprechf瓣higkeit
+ Lautst瓣rkeregler f羹r Anrufe und Leute in Ihrer N瓣he in SL
+ </string>
+ <string name="Toolbar_Bottom_Tooltip">
+ gegenw瓣rtig in der unteren Symbolleiste
+ </string>
+ <string name="Toolbar_Left_Tooltip">
+ gegenw瓣rtig in der linken Symbolleiste
+ </string>
+ <string name="Toolbar_Right_Tooltip">
+ gegenw瓣rtig in der rechten Symbolleiste
</string>
<string name="Retain%">
% zur羹ckbehalten
@@ -4938,4 +4974,19 @@ Setzen Sie den Editorpfad in Anf羹hrungszeichen
<string name="Normal">
Normal
</string>
+ <string name="snapshot_quality_very_low">
+ Sehr niedrig
+ </string>
+ <string name="snapshot_quality_low">
+ Niedrig
+ </string>
+ <string name="snapshot_quality_medium">
+ Mittel
+ </string>
+ <string name="snapshot_quality_high">
+ Hoch
+ </string>
+ <string name="snapshot_quality_very_high">
+ Sehr hoch
+ </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 bbfc830688..9cf381bacc 100644
--- a/indra/newview/skins/default/xui/de/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/de/teleport_strings.xml
@@ -21,8 +21,8 @@ Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab u
Versuchen Sie es sp瓣ter noch einmal.
</message>
<message name="NoHelpIslandTP">
- Sie k繹nnen nicht zur羹ck nach Welcome Island teleportieren.
-Gehen Sie zu Welcome Island Public und wiederholen sie das Tutorial.
+ Sie k繹nnen nicht zur羹ck nach Welcome Island teleportieren.
+Gehen Sie zu Welcome Island Public, um das Tutorial zu wiederholen.
</message>
<message name="noaccess_tport">
Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 4772f744ea..1d5a6740b7 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1206,10 +1206,6 @@ Only large parcels can be listed in search.
name="push_restrict_region_text">
No Pushing (Region Override)
</panel.string>
- <panel.string
- name="see_avs_text">
- Avatars on other parcels can see
- </panel.string>
<text
type="string"
length="1"
@@ -1524,24 +1520,24 @@ Only large parcels can be listed in search.
length="1"
follows="left|top"
text_color="LtGray"
- height="16"
+ height="32"
layout="topleft"
left="274"
- top="166"
+ top="150"
name="allow_label5"
- width="278">
- and chat with avatars on this parcel
+ width="205"
+ wrap="true">
+ Avatars on other parcels can see and chat with avatars on this parcel
</text>
<check_box
height="16"
- label="See Avatars"
follows="top"
layout="topleft"
left="253"
top="150"
name="SeeAvatarsCheck"
tool_tip="Allows avatars on other parcels to see and chat with avatars on this parcel, and you to see and chat with them."
- width="120" />
+ width="10" />
<text
type="string"
length="1"
@@ -1955,36 +1951,18 @@ Only large parcels can be listed in search.
name="access_estate_defined">
(Defined by the Estate)
</panel.string>
- <panel.string
- name="allow_public_access">
- Allow Public Access ([MATURITY]) (Note: Unchecking this will create ban lines)
- </panel.string>
<panel.string
name="estate_override">
One or more of these options is set at the estate level
</panel.string>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="16"
- layout="topleft"
- left="10"
- name="Limit access to this parcel to:"
- text_color="White"
- top="10"
- width="400">
- Access To This Parcel
- </text>
<check_box
follows="top|left"
height="16"
layout="topleft"
- left_delta="0"
+ left="8"
name="public_access"
- top_pad="5"
- label_text.valign="center"
- label_text.v_pad="-2"
+ label="Allow Public Access (Unchecking this will create ban lines)"
+ top_pad="10"
width="278" />
<text
type="string"
@@ -1994,28 +1972,28 @@ Only large parcels can be listed in search.
layout="topleft"
left_delta="20"
name="Only Allow"
- top="49"
+ top="30"
width="325">
- Restrict Access to Residents verified by:
+ Allow access only to Residents who:
</text>
<check_box
follows="top|left"
height="16"
- label="Payment Information on File [ESTATE_PAYMENT_LIMIT]"
+ label="Have payment Information on File [ESTATE_PAYMENT_LIMIT]"
layout="topleft"
left_delta="0"
name="limit_payment"
- tool_tip="Ban unidentified Residents."
+ tool_tip="Residents must have payment information on file to access this parcel. See the [SUPPORT_SITE] for more information."
top_pad="4"
width="278" />
<check_box
follows="top|left"
height="16"
- label="Age Verification [ESTATE_AGE_LIMIT]"
+ label="Have been age-verified [ESTATE_AGE_LIMIT]"
layout="topleft"
left_delta="0"
name="limit_age_verified"
- tool_tip="Ban Residents who have not verified their age. See the [SUPPORT_SITE] for more information."
+ tool_tip="Residents must be age verified to access this parcel. See the [SUPPORT_SITE] for more information."
top_pad="4"
width="278" />
<check_box
@@ -2025,7 +2003,7 @@ Only large parcels can be listed in search.
left="8"
name="GroupCheck"
tool_tip="Set group in the General tab."
- top="109"
+ top="89"
width="278" />
<check_box
enabled="false"
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index d101bca694..cd075abc41 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -34,7 +34,6 @@
left_delta="0"
top_delta="0"
name="external_controls"
- user_resize="false"
width="620">
<web_browser
trusted_content="true"
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index a2739a8339..ca73883e53 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -16,7 +16,7 @@
min_width="250"
min_height="190">
<layout_stack
- animate="false"
+ animate="true"
default_tab_group="2"
follows="all"
height="320"
@@ -32,8 +32,7 @@
min_width="115"
width="150"
height="320"
- auto_resize="false"
- user_resize="false">
+ auto_resize="false">
<panel
name="panel_im_control_panel"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index c3324a6aa4..ce788654aa 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -37,7 +37,6 @@
min_height="20"
name="nav_controls"
top="400"
- user_resize="false"
width="800">
<button
follows="left|top"
@@ -113,7 +112,6 @@
min_height="20"
name="time_controls"
top_delta="0"
- user_resize="false"
width="800">
<button
follows="left|top"
@@ -171,7 +169,6 @@
min_height="20"
name="parcel_owner_controls"
top_delta="0"
- user_resize="false"
width="540">
<button
enabled="false"
@@ -193,7 +190,6 @@
left_delta="0"
name="external_controls"
top_delta="0"
- user_resize="false"
width="540">
<web_browser
bottom="-30"
diff --git a/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..498a9b6ce0
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<floater
+ open_positioning="cascading"
+ can_close="true"
+ can_resize="true"
+ height="440"
+ help_topic="floater_merchant_outbox"
+ min_width="300"
+ min_height="200"
+ name="floater_merchant_outbox"
+ save_rect="true"
+ save_visibility="false"
+ reuse_instance="true"
+ title="MERCHANT OUTBOX"
+ width="333">
+ <string name="OutboxFolderCount0"></string>
+ <string name="OutboxFolderCount1">1 folder</string>
+ <string name="OutboxFolderCountN">[NUM] folders</string>
+ <string name="OutboxImporting">Sending folders...</string>
+ <string name="OutboxInitializing">Initializing...</string>
+ <panel
+ follows="all"
+ layout="topleft"
+ left="0"
+ top="0"
+ label=""
+ height="440"
+ width="333">
+ <panel
+ follows="all"
+ left="10"
+ bottom="370"
+ width="313"
+ top="0"
+ bg_opaque_color="InventoryBackgroundColor">
+ <panel
+ name="outbox_inventory_placeholder_panel"
+ follows="all"
+ layout="topleft"
+ top="0"
+ left="0"
+ width="308"
+ height="370"
+ bg_opaque_color="InventoryBackgroundColor">
+ <text
+ name="outbox_inventory_placeholder_title"
+ type="string"
+ follows="top|left|right"
+ layout="topleft"
+ top="10"
+ left="0"
+ width="308"
+ height="25"
+ wrap="true"
+ halign="center"
+ font="SansSerifBold">
+ Loading...
+ </text>
+ <text
+ name="outbox_inventory_placeholder_text"
+ type="string"
+ follows="top|left|right"
+ layout="topleft"
+ top="35"
+ left="0"
+ width="308"
+ height="130"
+ wrap="true"
+ halign="left" />
+ </panel>
+ </panel>
+ <panel
+ follows="bottom|left|right"
+ left="10"
+ bottom="435"
+ width="313"
+ top="370">
+ <panel
+ name="outbox_generic_drag_target"
+ mouse_opaque="false"
+ follows="all"
+ top="5"
+ left="5"
+ width="303"
+ height="25"
+ background_visible="false"
+ bg_alpha_color="EmphasisColor_35"
+ border="true"
+ bevel_style="in"
+ visible="true">
+ <text
+ type="string"
+ follows="all"
+ layout="topleft"
+ top="6"
+ height="20"
+ left="5"
+ width="293"
+ halign="center"
+ font="SansSerifMedium"
+ font_shadow="hard"
+ valign="bottom">
+ Drag items here to create folders
+ </text>
+ </panel>
+ <text
+ name="outbox_folder_count"
+ type="string"
+ follows="all"
+ layout="topleft"
+ top="40"
+ left="5"
+ width="150"
+ height="20"
+ wrap="true"
+ halign="left"
+ valign="bottom"
+ font="SansSerif" />
+ <button
+ label="Send to Marketplace"
+ tool_tip="Push to my Marketplace Storefront"
+ is_toggle="false"
+ name="outbox_import_btn"
+ follows="bottom|right"
+ tab_stop="false"
+ halign="center"
+ top="37"
+ left="160"
+ height="25"
+ width="150"
+ enabled="false" />
+ </panel>
+ <layout_stack name="import_progress_indicator" orientation="vertical" left="0" height="440" top="0" width="333" follows="all" visible="false">
+ <layout_panel />
+ <layout_panel height="45" auto_resize="false">
+ <layout_stack orientation="horizontal" left="0" height="45" top="0" width="333" follows="all">
+ <layout_panel width="0" />
+ <layout_panel width="45" auto_resize="false">
+ <loading_indicator
+ height="45"
+ layout="topleft"
+ left="0"
+ top="0"
+ width="45" />
+ </layout_panel>
+ <layout_panel width="0" />
+ </layout_stack>
+ </layout_panel>
+ <layout_panel />
+ </layout_stack>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_model_wizard.xml b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
index 9c0af7d9ba..62b8c5f96e 100644
--- a/indra/newview/skins/default/xui/en/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
@@ -108,7 +108,7 @@
height="22"
top_pad="15"
width="505"
- name="header_panel"
+ name="choose_file_header_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true"
@@ -117,7 +117,7 @@
width="200"
left="10"
top="3"
- name="header_text"
+ name="choose_file_header_text"
text_color="White"
height="10"
font="SansSerifBig"
@@ -130,7 +130,7 @@
left="15"
height="310"
width="505"
- name="content"
+ name="choose_file_content"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
@@ -287,7 +287,7 @@
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="optimize_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -296,7 +296,7 @@
<text
width="200"
left="10"
- name="header_text"
+ name="optimize_header_text"
top="3"
text_color="White"
height="10"
@@ -311,7 +311,7 @@
height="20"
font="SansSerifSmall"
layout="topleft"
- name="description"
+ name="optimize_description"
word_wrap="true"
left_delta="5">
We have optimized the model for performance. Adjust it further if you wish.
@@ -322,7 +322,7 @@
left="15"
height="270"
width="505"
- name="content"
+ name="optimize_content"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
@@ -497,7 +497,7 @@ Higher prim weight</text>
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="physics_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -506,7 +506,7 @@ Higher prim weight</text>
<text
width="200"
left="10"
- name="header_text"
+ name="physics_header_text"
top="3"
height="10"
font="SansSerifBig"
@@ -521,7 +521,7 @@ Higher prim weight</text>
height="50"
font="SansSerifSmall"
layout="topleft"
- name="description"
+ name="physics_description"
word_wrap="true"
left_delta="5">
We will create a shape for the outer hull of the model. Adjust the shape's detail level as needed for the intended purpose of your model.
@@ -531,7 +531,7 @@ Higher prim weight</text>
left="15"
height="270"
width="505"
- name="content"
+ name="physics_content"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
@@ -635,7 +635,7 @@ Buildings</text>
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="review_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -644,7 +644,7 @@ Buildings</text>
<text
width="200"
left="10"
- name="header_text"
+ name="review_header_text"
text_color="White"
top="3"
height="10"
@@ -658,7 +658,7 @@ Buildings</text>
left="15"
height="310"
width="505"
- name="content"
+ name="review_content"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
@@ -706,7 +706,7 @@ Buildings</text>
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="upload_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -715,7 +715,7 @@ Buildings</text>
<text
width="200"
left="10"
- name="header_text"
+ name="upload_header_text"
top="3"
text_color="White"
height="10"
diff --git a/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..f95f21e63a
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ can_resize="true"
+ can_close="true"
+ bevel_style="in"
+ height="300"
+ layout="topleft"
+ min_height="40"
+ min_width="420"
+ name="Test Floater"
+ title="LAYOUTSTACK TESTS"
+ width="420">
+ <layout_stack name="test_stack"
+ left="0"
+ top="0"
+ width="100"
+ height="250"
+ follows="left|top|bottom"
+ orientation="vertical">
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ </layout_stack>
+ <layout_stack name="test_stack"
+ left_pad="5"
+ top="0"
+ width="100"
+ height="250"
+ follows="left|top|bottom"
+ orientation="vertical">
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ visible="false"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ min_height="10"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ min_height="10"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ visible="true"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ </layout_stack>
+ <layout_stack name="test_stack"
+ left_pad="5"
+ top="0"
+ width="100"
+ height="250"
+ follows="left|top|bottom"
+ orientation="vertical">
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ height="11"
+ bg_alpha_color="blue"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ </layout_stack>
+ <layout_stack name="test_stack"
+ left_pad="5"
+ top="0"
+ width="100"
+ height="250"
+ follows="left|top|bottom"
+ orientation="vertical">
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml
index 493d44a9cf..72e6187a14 100644
--- a/indra/newview/skins/default/xui/en/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/en/floater_toybox.xml
@@ -5,7 +5,7 @@
can_minimize="false"
can_resize="false"
default_tab_group="1"
- height="330"
+ height="375"
help_topic="toybox"
layout="topleft"
legacy_header_height="18"
@@ -46,7 +46,7 @@
Buttons will appear as shown or as icon-only depending on each toolbar's settings.
</text>
<toolbar
- bottom="265"
+ bottom="310"
button_display_mode="icons_with_text"
follows="all"
left="20"
@@ -82,11 +82,11 @@
<panel
bevel_style="none"
border="true"
- bottom="266"
+ bottom="311"
follows="left|bottom|right"
left="20"
right="-20"
- top="266" />
+ top="311" />
<button
follows="left|bottom|right"
height="23"
@@ -95,7 +95,7 @@
layout="topleft"
left="185"
name="btn_clear_all"
- top="285"
+ top="330"
width="130">
<button.commit_callback function="Toybox.ClearAll" />
</button>
@@ -107,7 +107,7 @@
layout="topleft"
left="335"
name="btn_restore_defaults"
- top="285"
+ top="330"
width="130">
<button.commit_callback function="Toybox.RestoreDefaults" />
</button>
diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
index 3921cfcd2c..06d4327293 100644
--- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
@@ -22,6 +22,7 @@ or specifying its path in the "Editor Path" field.</string>
layout="topleft"
left="0"
mouse_opaque="false"
+ default_tab_group="1"
name="main_panel"
right="750"
top="0">
@@ -196,6 +197,7 @@ or specifying its path in the "Editor Path" field.</string>
left="10"
name="name_list"
right="-10"
+ tab_group="1"
search_column="1"
top="80">
<scroll_list.columns
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index 6807b01fa3..cea19ec75c 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -49,7 +49,6 @@
width="263">
<layout_panel
follows="top|left|right"
- user_resize="false"
auto_resize="false"
layout="topleft"
min_height="20"
@@ -89,7 +88,7 @@
visible="true"
width="20" />
</layout_panel>
- <layout_panel name="leave_call_panel" height="26" min_height="26" user_resize="false" auto_resize="false">
+ <layout_panel name="leave_call_panel" height="26" min_height="26" auto_resize="false">
<layout_stack
clip="true"
follows="left|top|right"
@@ -110,7 +109,6 @@
</layout_panel>
<layout_panel
auto_resize="false"
- user_resize="false"
follows="top|right"
height="23"
visible="true"
@@ -133,7 +131,6 @@
top_pad="0"
height="132"
name="callers_panel"
- user_resize="false"
auto_resize="true"
width="280">
<avatar_list
diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml
index 57d1c92acb..cea10adca8 100644
--- a/indra/newview/skins/default/xui/en/floater_web_content.xml
+++ b/indra/newview/skins/default/xui/en/floater_web_content.xml
@@ -31,7 +31,6 @@
min_height="20"
name="nav_controls"
top="400"
- user_resize="false"
width="770">
<button
image_overlay="Arrow_Left_Off"
@@ -160,7 +159,6 @@
left_delta="0"
name="external_controls"
top_delta="0"
- user_resize="false"
auto_resize="true"
width="585">
<web_browser
@@ -173,8 +171,7 @@
</layout_panel>
<layout_panel name="status_bar"
height="23"
- auto_resize="false"
- user_resize="false">
+ auto_resize="false">
<text
type="string"
length="200"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index b4be17e677..a87027a113 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -23,7 +23,6 @@
left="0"
top="0"
width="1024"
- user_resize="false"
auto_resize="false"
visible="true">
<view mouse_opaque="false"
@@ -40,7 +39,6 @@
name="nav_bar_container"
tab_stop="false"
width="1024"
- user_resize="false"
visible="false"/>
<layout_panel auto_resize="true"
follows="all"
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
index f818ebe2d7..63e154697b 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
@@ -114,6 +114,15 @@
function="Object.EnableMute" />
</menu_item_call>
<menu_item_call
+ label="Unblock"
+ layout="topleft"
+ name="unblock">
+ <menu_item_call.on_click
+ function="Object.Mute" />
+ <menu_item_call.on_visible
+ function="Object.EnableUnmute" />
+ </menu_item_call>
+ <menu_item_call
label="Zoom In"
layout="topleft"
name="zoom_in">
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index fb85e5278a..ef4a1bc061 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -686,12 +686,12 @@
parameter="copy_to_outbox" />
</menu_item_call>
<menu_item_call
- label="Move to Merchant Outbox"
+ label="Send to Marketplace"
layout="topleft"
- name="Merchant Move">
+ name="Marketplace Send">
<menu_item_call.on_click
function="Inventory.DoToSelected"
- parameter="move_to_outbox" />
+ parameter="send_to_marketplace" />
</menu_item_call>
<menu_item_call
label="--no options--"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
index 0f42000ae7..e91f5af3d5 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -3,6 +3,7 @@
layout="topleft"
left="0"
mouse_opaque="false"
+ can_tear_off="true"
name="menu_inventory_add"
visible="false">
<menu
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index ec2dd10248..1f72984166 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -118,7 +118,7 @@
</menu_item_call>
<menu_item_call
label="Walk / run / fly..."
- name="Stop Animating My Avatar">
+ name="Walk / run / fly">
<menu_item_call.on_click
function="Floater.ToggleOrBringToFront"
parameter="moveview" />
@@ -144,32 +144,22 @@
</menu_item_call>
</menu>
- <menu_item_call
- label="Request Admin Status"
- name="Request Admin Options"
- shortcut="control|alt|G"
- visible="false">
- <menu_item_call.on_click
- function="Advanced.RequestAdminStatus" />
- </menu_item_call>
- <menu_item_call
- label="Leave Admin Status"
- name="Leave Admin Options"
- shortcut="control|alt|shift|G"
- visible="false">
- <menu_item_call.on_click
- function="Advanced.LeaveAdminStatus" />
- </menu_item_call>
-
<menu_item_separator/>
<menu_item_call
- label="Buy L$"
+ label="Buy L$..."
name="Buy and Sell L$">
<menu_item_call.on_click
function="BuyCurrency" />
</menu_item_call>
<menu_item_call
+ label="Merchant Outbox..."
+ name="MerchantOutbox">
+ <menu_item_call.on_click
+ function="Floater.ToggleOrBringToFront"
+ parameter="outbox" />
+ </menu_item_call>
+ <menu_item_call
label="Account dashboard..."
name="Manage My Account">
<menu_item_call.on_click
@@ -525,7 +515,7 @@
<menu
create_jump_keys="true"
label="Sun"
- name="Environment Settings"
+ name="Sun"
tear_off="true">
<menu_item_call
label="Sunrise"
@@ -1452,7 +1442,7 @@
tear_off="true">
<menu_item_check
label="Simple"
- name="Simple"
+ name="Rendering Type Simple"
shortcut="control|alt|shift|1">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1463,7 +1453,7 @@
</menu_item_check>
<menu_item_check
label="Alpha"
- name="Alpha"
+ name="Rendering Type Alpha"
shortcut="control|alt|shift|2">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1474,7 +1464,7 @@
</menu_item_check>
<menu_item_check
label="Tree"
- name="Tree"
+ name="Rendering Type Tree"
shortcut="control|alt|shift|3">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1485,7 +1475,7 @@
</menu_item_check>
<menu_item_check
label="Avatars"
- name="Character"
+ name="Rendering Type Character"
shortcut="control|alt|shift|4">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1496,7 +1486,7 @@
</menu_item_check>
<menu_item_check
label="Surface Patch"
- name="Surface Patch"
+ name="Rendering Type Surface Patch"
shortcut="control|alt|shift|5">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1507,7 +1497,7 @@
</menu_item_check>
<menu_item_check
label="Sky"
- name="Sky"
+ name="Rendering Type Sky"
shortcut="control|alt|shift|6">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1518,7 +1508,7 @@
</menu_item_check>
<menu_item_check
label="Water"
- name="Water"
+ name="Rendering Type Water"
shortcut="control|alt|shift|7">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1529,7 +1519,7 @@
</menu_item_check>
<menu_item_check
label="Ground"
- name="Ground"
+ name="Rendering Type Ground"
shortcut="control|alt|shift|8">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1540,7 +1530,7 @@
</menu_item_check>
<menu_item_check
label="Volume"
- name="Volume"
+ name="Rendering Type Volume"
shortcut="control|alt|shift|9">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1551,7 +1541,7 @@
</menu_item_check>
<menu_item_check
label="Grass"
- name="Grass"
+ name="Rendering Type Grass"
shortcut="control|alt|shift|0">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1562,7 +1552,7 @@
</menu_item_check>
<menu_item_check
label="Clouds"
- name="Clouds"
+ name="Rendering Type Clouds"
shortcut="control|alt|shift|-">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1573,7 +1563,7 @@
</menu_item_check>
<menu_item_check
label="Particles"
- name="Particles"
+ name="Rendering Type Particles"
shortcut="control|alt|shift|=">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1584,7 +1574,7 @@
</menu_item_check>
<menu_item_check
label="Bump"
- name="Bump"
+ name="Rendering Type Bump"
shortcut="control|alt|shift|\">
<menu_item_check.on_check
function="Advanced.CheckRenderType"
@@ -1601,7 +1591,7 @@
tear_off="true">
<menu_item_check
label="UI"
- name="UI"
+ name="ToggleUI"
shortcut="control|alt|F1">
<menu_item_check.on_check
function="Advanced.CheckFeature"
@@ -1734,28 +1724,6 @@
name="Shortcuts"
tear_off="true"
visible="false">
- <menu_item_call
- label="Image (L$[COST])..."
- name="Upload Image"
- shortcut="control|U">
- <menu_item_call.on_click
- function="File.UploadImage"
- parameter="" />
- <menu_item_call.on_enable
- function="File.EnableUpload" />
- </menu_item_call>
- <menu_item_check
- label="Search"
- name="Search"
- shortcut="control|F">
- <menu_item_check.on_check
- function="Floater.Visible"
- parameter="search" />
- <menu_item_check.on_click
- function="Floater.Toggle"
- parameter="search" />
- </menu_item_check>
-
<!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility. The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. -->
<menu_item_check
label="Show Advanced Menu - legacy shortcut"
@@ -1842,55 +1810,6 @@
<menu_item_separator/>
- <menu
- create_jump_keys="true"
- label="Select Build Tool"
- name="Select Tool"
- tear_off="true">
- <menu_item_call
- label="Focus Tool"
- name="Focus"
- shortcut="control|1">
- <menu_item_call.on_click
- function="Tools.SelectTool"
- parameter="focus" />
- </menu_item_call>
- <menu_item_call
- label="Move Tool"
- name="Move"
- shortcut="control|2">
- <menu_item_call.on_click
- function="Tools.SelectTool"
- parameter="move" />
- </menu_item_call>
- <menu_item_call
- label="Edit Tool"
- name="Edit"
- shortcut="control|3">
- <menu_item_call.on_click
- function="Tools.SelectTool"
- parameter="edit" />
- </menu_item_call>
- <menu_item_call
- label="Create Tool"
- name="Create"
- shortcut="control|4">
- <menu_item_call.on_click
- function="Tools.SelectTool"
- parameter="create" />
- </menu_item_call>
- <menu_item_call
- label="Land Tool"
- name="Land"
- shortcut="control|5">
- <menu_item_call.on_click
- function="Tools.SelectTool"
- parameter="land" />
- </menu_item_call>
- </menu>
-
- <menu_item_separator/>
-
<menu_item_call
label="Zoom In"
name="Zoom In"
@@ -2853,7 +2772,7 @@
<menu
create_jump_keys="true"
label="World"
- name="World"
+ name="DevelopWorld"
tear_off="true">
<menu_item_check
label="Sim Sun Override"
@@ -2866,16 +2785,6 @@
parameter="SkyOverrideSimSunPosition" />
</menu_item_check>
<menu_item_check
- label="Cheesy Beacon"
- name="Cheesy Beacon">
- <menu_item_check.on_check
- function="CheckControl"
- parameter="CheesyBeacon" />
- <menu_item_check.on_click
- function="ToggleControl"
- parameter="CheesyBeacon" />
- </menu_item_check>
- <menu_item_check
label="Fixed Weather"
name="Fixed Weather">
<menu_item_check.on_check
@@ -3099,7 +3008,7 @@
tear_off="true">
<menu_item_call
label="Iris"
- name="Iris">
+ name="Grab Iris">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
parameter="iris" />
@@ -3109,7 +3018,7 @@
</menu_item_call>
<menu_item_call
label="Head"
- name="Head">
+ name="Grab Head">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
parameter="head" />
@@ -3119,7 +3028,7 @@
</menu_item_call>
<menu_item_call
label="Upper Body"
- name="Upper Body">
+ name="Grab Upper Body">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
parameter="upper" />
@@ -3129,7 +3038,7 @@
</menu_item_call>
<menu_item_call
label="Lower Body"
- name="Lower Body">
+ name="Grab Lower Body">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
parameter="lower" />
@@ -3139,7 +3048,7 @@
</menu_item_call>
<menu_item_call
label="Skirt"
- name="Skirt">
+ name="Grab Skirt">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
parameter="skirt" />
@@ -3458,10 +3367,11 @@
<menu
create_jump_keys="true"
label="Object"
+ name="AdminObject"
tear_off="true">
<menu_item_call
label="Take Copy"
- name="Take Copy"
+ name="Admin Take Copy"
shortcut="control|alt|shift|O">
<menu_item_call.on_click
function="Admin.ForceTakeCopy" />
@@ -3730,7 +3640,7 @@
<menu
create_jump_keys="true"
label="Help"
- name="Help"
+ name="DeprecatedHelp"
tear_off="true">
<menu_item_call
label="Official Linden Blog"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 1daf2e6948..af75d49353 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -203,34 +203,80 @@ Save changes to current clothing/body part?
icon="alertmodal.tga"
name="ConfirmNoCopyToOutbox"
type="alertmodal">
- You don't have permission to copy this item to the Marketplace Outbox. Are you sure you want to move the following item?
- [ITEM_NAME]
+You don't have permission to copy one or more of these items to the Merchant Outbox. You can move them or leave them behind.
+ <usetemplate
+ name="okcancelbuttons"
+ notext="Don't move item(s)"
+ yestext="Move item(s)"/>
+ </notification>
+
+ <notification
+ icon="OutboxStatus_Success"
+ name="OutboxFolderCreated"
+ type="outbox">
+ <unique/>
+A new folder has been created for each item you have transferred into the top level of your Merchant Outbox.
+
+ <usetemplate
+ ignoretext="A new folder was created in the Merchant Outbox"
+ name="okignore"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="OutboxStatus_Success"
+ name="OutboxImportComplete"
+ type="outbox">
+Success
+
+All folders were successfully sent to the Marketplace.
+
<usetemplate
- name="okcancelbuttons"
- notext="No"
- yestext="Yes"/>
- </notification>
+ ignoretext="All folders sent to the Marketplace"
+ name="okignore"
+ yestext="OK"/>
+ </notification>
<notification
- icon="alertmodal.tga"
- name="OutboxUploadComplete"
- type="alertmodal">
-Marketplace upload complete.
+ icon="OutboxStatus_Warning"
+ name="OutboxImportHadErrors"
+ type="outbox">
+Some folders did not transfer
+
+Errors occurred when some folders were sent to the Marketplace. Those folders are still in your Merchant Outbox.
+
+See the [[MARKETPLACE_IMPORTS_URL] error log] for more information.
+
<usetemplate
name="okbutton"
- yestext="Hooray!"/>
+ yestext="OK"/>
</notification>
<notification
- icon="alertmodal.tga"
- name="OutboxUploadHadErrors"
- type="alertmodal">
-Marketplace upload completed with errors! Please correct the problems in your outbox and retry. Thanks.
+ icon="OutboxStatus_Error"
+ name="OutboxImportFailed"
+ type="outbox">
+Transfer failed
+
+No folders were sent to the Marketplace because of a system or network error. Try again later.
+
<usetemplate
name="okbutton"
- yestext="Boo!"/>
+ yestext="OK"/>
</notification>
+ <notification
+ icon="OutboxStatus_Error"
+ name="OutboxInitFailed"
+ type="outbox">
+Marketplace initialization failed
+
+Initialization with the Marketplace failed because of a system or network error. Try again later.
+
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
<notification
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index 93cafd4a53..d68fa6ca6c 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -27,8 +27,7 @@
mouse_opaque="false"
width="147"
top="0"
- name="speakers_list_panel"
- user_resize="false">
+ name="speakers_list_panel">
<avatar_list
color="DkGray2"
follows="all"
@@ -50,7 +49,6 @@
min_height="25"
width="130"
name="call_btn_panel"
- user_resize="false"
visible="false">
<button
follows="all"
@@ -68,7 +66,6 @@
min_height="25"
width="130"
name="end_call_btn_panel"
- user_resize="false"
visible="false">
<button
follows="all"
@@ -85,7 +82,6 @@
min_height="25"
width="130"
name="voice_ctrls_btn_panel"
- user_resize="false"
visible="false">
<button
follows="all"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
index b5e1a5f16d..f4722b05d6 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
@@ -31,7 +31,6 @@
width="1000">
<layout_panel
auto_resize="false"
- user_resize="false"
min_width="2"
width="2" />
<layout_panel
@@ -40,8 +39,7 @@
height="28"
layout="topleft"
width="310"
- min_width="188"
- user_resize="false">
+ min_width="188">
<panel
left="0"
filename="panel_nearby_chat_bar.xml"
@@ -61,8 +59,7 @@
width="82"
top_delta="0"
min_width="52"
- name="gesture_panel"
- user_resize="false">
+ name="gesture_panel">
<gesture_combo_list
follows="left|right"
height="23"
@@ -80,7 +77,6 @@
</layout_panel>
<layout_panel
auto_resize="false"
- user_resize="false"
min_width="3"
name="after_gesture_panel"
width="3"/>
diff --git a/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
index 41d1036a4d..ff0146490b 100644
--- a/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
@@ -27,8 +27,8 @@
min_width="95"
mouse_opaque="false"
name="chiclet_list_panel"
+ auto_resize="true"
top="0"
- user_resize="false"
width="189">
<chiclet_panel
chiclet_padding="4"
@@ -78,7 +78,6 @@
</chiclet_panel>
</layout_panel>
<layout_panel auto_resize="false"
- user_resize="false"
width="4"
min_width="4"/>
<layout_panel
@@ -90,7 +89,6 @@
min_width="37"
name="im_well_panel"
top="0"
- user_resize="false"
width="37">
<chiclet_im_well
follows="right"
@@ -139,7 +137,6 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
min_width="37"
name="notification_well_panel"
top="0"
- user_resize="false"
width="37">
<chiclet_notification
follows="right"
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index 6c8d994bc6..d4a2745d1d 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -289,8 +289,7 @@
left="0"
top="0"
width="290"
- height="16"
- user_resize="false">
+ height="16">
<text
follows="left|top"
font.style="BOLD"
@@ -327,8 +326,7 @@
left="0"
top="0"
width="290"
- height="16"
- user_resize="false">
+ height="16">
<text
follows="left|top"
font.style="BOLD"
@@ -357,8 +355,7 @@
left="0"
top="0"
width="290"
- height="215"
- user_resize="false">
+ height="215">
<text
auto_resize="false"
follows="left|top"
@@ -416,7 +413,6 @@
layout="bottomleft"
left="0"
name="layout_panel1"
- user_resize="false"
auto_resize="true"
width="101">
<button
@@ -436,7 +432,6 @@
layout="bottomleft"
left_pad="3"
name="show_on_map_btn_lp"
- user_resize="false"
auto_resize="true"
width="100">
<button
@@ -455,7 +450,6 @@
layout="bottomleft"
left_pad="3"
name="edit_btn_lp"
- user_resize="false"
auto_resize="true"
width="101">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
index e512d63f9e..3509eaa285 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -319,7 +319,6 @@
layout="bottomleft"
left="0"
name="save_changes_btn_lp"
- user_resize="false"
auto_resize="true"
width="156">
<button
@@ -339,7 +338,6 @@
layout="bottomleft"
left_pad="3"
name="show_on_map_btn_lp"
- user_resize="false"
auto_resize="true"
width="157">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index 2ec2e03e8c..0faa1598b1 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -201,7 +201,6 @@
layout="topleft"
left="0"
name="layout_panel1"
- user_resize="false"
auto_resize="true"
width="150">
<button
@@ -221,7 +220,6 @@
layout="topleft"
left_pad="4"
name="layout_panel2"
- user_resize="false"
auto_resize="true"
width="146">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 442eb8c28d..2c7c8133d1 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -435,7 +435,6 @@
layout="bottomleft"
name="save_changes_btn_lp"
top="0"
- user_resize="false"
auto_resize="true"
width="153">
<button
@@ -456,7 +455,6 @@
left_pad="3"
name="show_on_map_btn_lp"
top="0"
- user_resize="false"
auto_resize="true"
width="154">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index c8764a6a84..69a692e2c4 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -454,7 +454,6 @@
left="0"
mouse_opaque="false"
name="save_as_btn_lp"
- user_resize="false"
auto_resize="true"
width="154">
<button
@@ -474,7 +473,6 @@
left_pad="3"
mouse_opaque="false"
name="revert_btn_lp"
- user_resize="false"
auto_resize="true"
width="152">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index c1dc2aaaf7..ad10e53a4e 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -26,8 +26,7 @@
mouse_opaque="false"
width="145"
top="0"
- name="speakers_list_panel"
- user_resize="false">
+ name="speakers_list_panel">
<avatar_list
color="DkGray2"
follows="all"
@@ -48,8 +47,7 @@
layout="topleft"
min_height="28"
width="130"
- name="group_info_btn_panel"
- user_resize="false">
+ name="group_info_btn_panel">
<button
follows="left|right|bottom"
height="23"
@@ -66,8 +64,7 @@
layout="topleft"
min_height="28"
width="130"
- name="call_btn_panel"
- user_resize="false">
+ name="call_btn_panel">
<button
follows="all"
height="23"
@@ -84,7 +81,6 @@
min_height="28"
width="130"
name="end_call_btn_panel"
- user_resize="false"
visible="false">
<button
follows="all"
@@ -101,7 +97,6 @@
min_height="28"
width="130"
name="voice_ctrls_btn_panel"
- user_resize="false"
visible="false">
<button
follows="all"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index ec3f3b48bc..206496cc0e 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -97,6 +97,7 @@ background_visible="true"
follows="all"
layout="topleft"
auto_resize="true"
+ user_resize="true"
height="513"
width="313">
<accordion
@@ -195,7 +196,6 @@ background_visible="true"
layout="bottomleft"
left="0"
name="btn_refresh_lp"
- user_resize="false"
auto_resize="false"
width="24">
<button
@@ -215,7 +215,6 @@ background_visible="true"
layout="bottomleft"
left_pad="3"
name="btn_chat_lp"
- user_resize="false"
auto_resize="true"
width="91">
<button
@@ -234,7 +233,6 @@ background_visible="true"
layout="bottomleft"
left_pad="3"
name="call_btn_lp"
- user_resize="false"
auto_resize="true"
width="91">
<button
@@ -255,7 +253,6 @@ background_visible="true"
layout="bottomleft"
left_pad="3"
name="btn_apply_lp"
- user_resize="false"
auto_resize="true"
width="91">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 9f73b7c540..8fcd6ccbaf 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -32,8 +32,7 @@
min_height="20"
width="140"
name="view_profile_btn_panel"
- top="0"
- user_resize="false">
+ top="0" >
<button
follows="left|top|right"
height="23"
@@ -49,8 +48,7 @@
layout="topleft"
min_height="25"
width="140"
- name="add_friend_btn_panel"
- user_resize="false">
+ name="add_friend_btn_panel">
<button
follows="left|top|right"
height="23"
@@ -66,8 +64,7 @@
layout="topleft"
min_height="25"
width="140"
- name="teleport_btn_panel"
- user_resize="false">
+ name="teleport_btn_panel">
<button
auto_resize="false"
follows="left|top|right"
@@ -84,8 +81,7 @@
layout="topleft"
min_height="25"
width="140"
- name="share_btn_panel"
- user_resize="false">
+ name="share_btn_panel">
<button
auto_resize="true"
follows="left|top|right"
@@ -101,8 +97,7 @@
layout="topleft"
min_height="25"
width="140"
- name="pay_btn_panel"
- user_resize="false">
+ name="pay_btn_panel">
<button
auto_resize="true"
follows="left|top|right"
@@ -118,8 +113,7 @@
layout="topleft"
min_height="25"
width="140"
- name="call_btn_panel"
- user_resize="false">
+ name="call_btn_panel">
<button
follows="left|top|right"
height="23"
@@ -135,7 +129,6 @@
min_height="25"
width="140"
name="end_call_btn_panel"
- user_resize="false"
visible="false">
<button
follows="left|top|right"
@@ -152,7 +145,6 @@
min_height="25"
width="140"
name="voice_ctrls_btn_panel"
- user_resize="false"
visible="false">
<button
follows="left|top|right"
@@ -169,7 +161,6 @@
layout="topleft"
min_height="0"
width="140"
- name="spacer"
- user_resize="false" />
+ name="spacer"/>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 23d8cb11ca..2a5933e3e9 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -114,7 +114,6 @@
height="25"
layout="topleft"
name="options_gear_btn_panel"
- user_resize="false"
width="32">
<menu_button
follows="bottom|left"
@@ -135,7 +134,6 @@
height="25"
layout="topleft"
name="add_btn_panel"
- user_resize="false"
width="32">
<button
follows="bottom|left"
@@ -156,7 +154,6 @@
height="25"
layout="topleft"
name="dummy_panel"
- user_resize="false"
width="212">
<icon
follows="bottom|left|right"
@@ -173,7 +170,6 @@
height="25"
layout="topleft"
name="trash_btn_panel"
- user_resize="false"
width="31">
<dnd_button
follows="bottom|left"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 6521bf2a4e..223326dd06 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -48,7 +48,6 @@ name="login"
layout="topleft"
width="705"
min_width="705"
-user_resize="false"
height="80">
<text
follows="left|bottom"
@@ -165,7 +164,6 @@ follows="right|bottom"
name="links"
width="205"
min_width="205"
-user_resize="false"
height="80">
<text
follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index e6c5110999..d6d8b2a83e 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- background_visible="true"
default_tab_group="1"
follows="all"
height="423"
@@ -51,10 +50,6 @@
top="18"
width="303" />
<tab_container
- bg_alpha_color="DkGray"
- bg_opaque_color="DkGray"
- background_visible="true"
- background_opaque="true"
follows="all"
halign="center"
height="339"
@@ -71,7 +66,6 @@
bg_opaque_color="DkGray2"
bg_alpha_color="DkGray2"
background_visible="true"
- background_opaque="true"
border="false"
bevel_style="none"
follows="all"
@@ -90,7 +84,6 @@
bg_opaque_color="DkGray2"
bg_alpha_color="DkGray2"
background_visible="true"
- background_opaque="true"
border="false"
bevel_style="none"
follows="all"
@@ -119,7 +112,6 @@
height="25"
layout="topleft"
name="options_gear_btn_panel"
- user_resize="false"
width="32">
<menu_button
follows="bottom|left"
@@ -140,7 +132,6 @@
height="25"
layout="topleft"
name="add_btn_panel"
- user_resize="false"
width="32">
<button
follows="bottom|left"
@@ -161,7 +152,6 @@
height="25"
layout="topleft"
name="dummy_panel"
- user_resize="false"
width="212">
<icon
follows="bottom|left|right"
@@ -178,7 +168,6 @@
height="25"
layout="topleft"
name="trash_btn_panel"
- user_resize="false"
width="31">
<dnd_button
follows="bottom|left"
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 7a8e872dc9..4bf420b79f 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -54,11 +54,11 @@
width="800"
height="2"/>
<layout_stack
- use_border="true"
- bevel_style="none"
follows="all"
height="34"
layout="topleft"
+ border_size="0"
+ resize_bar_overlap="3"
left="0"
mouse_opaque="false"
name="nvp_stack"
@@ -73,130 +73,130 @@
min_width="480"
name="navigation_layout_panel"
width="480">
- <panel
- background_visible="false"
- follows="left|top|right"
- top="3"
- height="23"
- layout="topleft"
- left="0"
- name="navigation_panel"
- width="480">
- <pull_button
- follows="left|top"
- direction="down"
- height="23"
- image_overlay="Arrow_Left_Off"
- image_bottom_pad="1"
- layout="topleft"
- left="10"
- name="back_btn"
- tool_tip="Go back to previous location"
- top="2"
- width="31" />
- <pull_button
- follows="left|top"
- direction="down"
- height="23"
- image_overlay="Arrow_Right_Off"
- image_bottom_pad="1"
- layout="topleft"
- left_pad="0"
- name="forward_btn"
- tool_tip="Go forward one location"
- top_delta="0"
- width="31" />
- <button
- follows="left|top"
- height="23"
- image_bottom_pad="1"
- image_overlay="Home_Off"
- layout="topleft"
- left_pad="7"
- name="home_btn"
- tool_tip="Teleport to my home location"
- top_delta="0"
- width="32" />
- <location_input
- follows="all"
- halign="right"
- height="23"
- label="Location"
- layout="topleft"
- left_pad="7"
- max_chars="254"
- mouse_opaque="false"
- name="location_combo"
- top_delta="0"
- width="355">
- <combo_list
- mouse_wheel_opaque="true"/>
- </location_input>
- </panel>
- </layout_panel>
-
- <layout_panel
- auto_resize="false"
- layout="topleft"
- max_width="5"
- min_width="5"
- name="nav_bar_resize_handle_panel"
- user_resize="false"
- width="5">
- <icon
- follows="top|right"
- height="25"
- image_name="ChatBarHandle"
- layout="topleft"
- left="-6"
- name="resize_handle"
- top="4"
- width="5" />
- </layout_panel>
-
+ <panel
+ background_visible="false"
+ follows="left|top|right"
+ top="3"
+ height="23"
+ layout="topleft"
+ left="0"
+ name="navigation_panel"
+ width="480">
+ <pull_button
+ follows="left|top"
+ direction="down"
+ height="23"
+ image_overlay="Arrow_Left_Off"
+ image_bottom_pad="1"
+ layout="topleft"
+ left="10"
+ name="back_btn"
+ tool_tip="Go back to previous location"
+ top="2"
+ width="31" />
+ <pull_button
+ follows="left|top"
+ direction="down"
+ height="23"
+ image_overlay="Arrow_Right_Off"
+ image_bottom_pad="1"
+ layout="topleft"
+ left_pad="0"
+ name="forward_btn"
+ tool_tip="Go forward one location"
+ top_delta="0"
+ width="31" />
+ <button
+ follows="left|top"
+ height="23"
+ image_bottom_pad="1"
+ image_overlay="Home_Off"
+ layout="topleft"
+ left_pad="7"
+ name="home_btn"
+ tool_tip="Teleport to my home location"
+ top_delta="0"
+ width="32" />
+ <location_input
+ follows="all"
+ halign="right"
+ height="23"
+ label="Location"
+ layout="topleft"
+ left_pad="7"
+ max_chars="254"
+ mouse_opaque="false"
+ name="location_combo"
+ top_delta="0"
+ width="355">
+ <combo_list
+ mouse_wheel_opaque="true"/>
+ </location_input>
+ </panel>
+ <icon
+ follows="top|right"
+ height="25"
+ image_name="ChatBarHandle"
+ layout="topleft"
+ left="-3"
+ name="resize_handle"
+ top="4"
+ width="5" />
+ </layout_panel>
<layout_panel
follows="top|left"
- layout="topleft"
+ layout="topleft"
auto_resize="true"
user_resize="true"
min_width="315"
name="favorites_layout_panel"
width="315">
- <favorites_bar
- follows="left|right|top"
- font="SansSerifSmall"
- height="20"
- layout="topleft"
- left="0"
- name="favorite"
- image_drag_indication="Accordion_ArrowOpened_Off"
- tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
- width="311">
- <label
- follows="left|top"
- height="15"
- layout="topleft"
- left="10"
- name="favorites_bar_label"
- text_color="LtGray"
- tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
- top="12"
- width="102">
- Favorites Bar
- </label>
- <!-- More button actually is a text box. -->
- <more_button
- follows="left|bottom"
- name=">>"
- tab_stop="false"
- tool_tip="Show more of My Favorites"
- top="13"
- width="50"
- bottom="0"
- valign="bottom">
- More &#9660;
- </more_button>
- </favorites_bar>
+ <icon
+ follows="top|left"
+ height="25"
+ image_name="ChatBarHandle"
+ layout="topleft"
+ left="-318"
+ name="resize_handle"
+ top="4"
+ width="5" />
+
+ <favorites_bar
+ follows="left|right|top"
+ font="SansSerifSmall"
+ height="20"
+ layout="topleft"
+ left="0"
+ top="4"
+ name="favorite"
+ image_drag_indication="Accordion_ArrowOpened_Off"
+ tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
+ width="311">
+ <label
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left="10"
+ name="favorites_bar_label"
+ text_color="LtGray"
+ tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
+ top="12"
+ width="102">
+ Favorites Bar
+ </label>
+ <!-- More button actually is a text box. -->
+ <more_button
+ follows="left|bottom"
+ name=">>"
+ tab_stop="false"
+ tool_tip="Show more of My Favorites"
+ top="13"
+ width="50"
+ bottom="0"
+ valign="bottom">
+ More &#9660;
+ </more_button>
+ </favorites_bar>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_media.xml b/indra/newview/skins/default/xui/en/panel_nearby_media.xml
index bfc503f05b..d1cb64f7ad 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_media.xml
@@ -196,7 +196,6 @@
name="stop"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="22"
@@ -224,7 +223,6 @@
name="play"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="22"
@@ -252,7 +250,6 @@
name="pause"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
min_width="22"
@@ -279,7 +276,6 @@
name="volume_slider_ctrl"
mouse_opaque="false"
auto_resize="true"
- user_resize="false"
follows="left|right"
layout="topleft"
top="0"
@@ -304,7 +300,6 @@
name="mute"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="72"
@@ -333,7 +328,6 @@
name="zoom"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="28"
@@ -361,7 +355,6 @@
name="unzoom"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
min_width="21"
@@ -388,8 +381,7 @@
<layout_panel
name="right_bookend"
width="0"
- mouse_opaque="false"
- user_resize="false" />
+ mouse_opaque="false"/>
</layout_stack>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml
index 66117615e4..a3d39e55af 100644
--- a/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml
@@ -8,7 +8,6 @@
bg_opaque_color="DkGray2"
bg_alpha_color="DkGray2"
background_visible="true"
- background_opaque="true"
border="false"
bevel_style="none"
show_item_link_overlays="true"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index e1cd78bad8..b61f110e32 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -198,7 +198,6 @@ It is calculated as border_size + 2*UIResizeBarOverlap
height="154"
name="add_button_and_combobox"
width="311"
- user_resize="false"
visible="true">
<!-- List containing items from the COF and Base outfit -->
@@ -271,8 +270,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
height="30"
name="filter_panel"
width="311"
- visible="false"
- user_resize="false">
+ visible="false">
<filter_editor
background_image="TextField_Search_Off"
@@ -515,7 +513,6 @@ It is calculated as border_size + 2*UIResizeBarOverlap
left="0"
mouse_opaque="false"
name="save_btn_lp"
- user_resize="false"
auto_resize="true"
width="156">
<button
@@ -550,7 +547,6 @@ It is calculated as border_size + 2*UIResizeBarOverlap
left_pad="3"
mouse_opaque="false"
name="revert_btn_lp"
- user_resize="false"
auto_resize="true"
width="147">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index 2ad2416179..405d9513db 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -84,7 +84,6 @@
left="0"
mouse_opaque="false"
name="save_btn_lp"
- user_resize="false"
auto_resize="true"
width="156">
<button
@@ -118,7 +117,6 @@
left_pad="3"
mouse_opaque="false"
name="wear_btn_lp"
- user_resize="false"
auto_resize="true"
width="147">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 0ebfd9c037..98c7c49ff4 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -284,7 +284,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="25"
layout="topleft"
name="options_gear_btn_panel"
- user_resize="false"
width="32">
<menu_button
follows="bottom|left"
@@ -305,7 +304,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="25"
layout="topleft"
name="add_btn_panel"
- user_resize="false"
width="32">
<button
follows="bottom|left"
@@ -326,7 +324,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="25"
layout="topleft"
name="dummy_panel"
- user_resize="false"
width="210">
<icon
follows="bottom|left|right"
@@ -343,7 +340,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="25"
layout="topleft"
name="trash_btn_panel"
- user_resize="false"
width="31">
<dnd_button
follows="bottom|left"
@@ -602,7 +598,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
layout="bottomleft"
left="0"
name="view_profile_btn_lp"
- user_resize="false"
auto_resize="true"
width="68">
<button
@@ -623,7 +618,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
layout="bottomleft"
left_pad="3"
name="im_btn_lp"
- user_resize="false"
auto_resize="true"
width="41">
<button
@@ -644,7 +638,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
layout="bottomleft"
left_pad="3"
name="call_btn_lp"
- user_resize="false"
auto_resize="true"
width="52">
<button
@@ -665,7 +658,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
layout="bottomleft"
left_pad="3"
name="share_btn_lp"
- user_resize="false"
auto_resize="true"
width="66">
<button
@@ -686,7 +678,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
layout="bottomleft"
left_pad="3"
name="teleport_btn_lp"
- user_resize="false"
auto_resize="true"
width="77">
<button
@@ -720,7 +711,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
left="0"
mouse_opaque="false"
name="group_info_btn_lp"
- user_resize="false"
auto_resize="true"
width="108">
<button
@@ -743,7 +733,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
left_pad="3"
mouse_opaque="false"
name="chat_btn_lp"
- user_resize="false"
auto_resize="true"
width="101">
<button
@@ -766,7 +755,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
left_pad="3"
mouse_opaque="false"
name="group_call_btn_lp"
- user_resize="false"
auto_resize="true"
width="96">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index 24046d5cca..79d190e1e0 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -139,7 +139,6 @@
layout="bottomleft"
left="0"
name="layout_panel1"
- user_resize="false"
auto_resize="true"
width="101">
<button
@@ -158,7 +157,6 @@
layout="bottomleft"
left_pad="3"
name="show_on_map_btn_lp"
- user_resize="false"
auto_resize="true"
width="100">
<button
@@ -177,7 +175,6 @@
layout="bottomleft"
left_pad="3"
name="edit_btn_lp"
- user_resize="false"
auto_resize="true"
width="101">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 85f402dfa2..8def96cada 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -102,7 +102,6 @@ bg_opaque_color="DkGray2"
layout="bottomleft"
left="0"
name="gear_menu_btn"
- user_resize="false"
auto_resize="true"
width="51">
<button
@@ -124,7 +123,6 @@ bg_opaque_color="DkGray2"
height="18"
layout="bottomleft"
name="trash_btn_lp"
- user_resize="false"
auto_resize="true"
width="18">
<button
@@ -170,7 +168,6 @@ bg_opaque_color="DkGray2"
layout="topleft"
left="0"
name="info_btn_lp"
- user_resize="false"
auto_resize="true"
top="0"
width="95">
@@ -192,7 +189,6 @@ bg_opaque_color="DkGray2"
layout="bottomleft"
left_pad="2"
name="teleport_btn_lp"
- user_resize="false"
auto_resize="true"
width="117">
<button
@@ -212,7 +208,6 @@ bg_opaque_color="DkGray2"
height="28"
layout="bottomleft"
name="show_on_map_btn_lp"
- user_resize="false"
auto_resize="true"
left_pad="2"
width="90">
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index e280115bda..308acf0c0c 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -238,7 +238,6 @@
mouse_opaque="false"
name="here_panel"
top="0"
- user_resize="false"
width="60">
<icon
follows="top|left"
@@ -259,7 +258,6 @@
mouse_opaque="false"
name="for_sale_panel"
top="0"
- user_resize="false"
width="60">
<icon
follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 670aa47313..f169dbb702 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -92,7 +92,6 @@ background_visible="true"
left="0"
mouse_opaque="false"
name="lp1"
- user_resize="false"
auto_resize="true"
width="193">
@@ -115,7 +114,6 @@ background_visible="true"
left="0"
mouse_opaque="false"
name="teleport_btn_lp"
- user_resize="false"
auto_resize="true"
width="109">
<button
@@ -137,7 +135,6 @@ background_visible="true"
left_pad="3"
mouse_opaque="false"
name="chat_btn_lp"
- user_resize="false"
auto_resize="true"
width="86">
<button
@@ -161,7 +158,6 @@ background_visible="true"
left_pad="0"
mouse_opaque="false"
name="lp2"
- user_resize="false"
auto_resize="true"
width="116">
@@ -185,7 +181,6 @@ background_visible="true"
left_pad="0"
mouse_opaque="false"
name="edit_btn_lp"
- user_resize="false"
auto_resize="true"
width="84">
<button
@@ -208,7 +203,6 @@ background_visible="true"
left_pad="0"
mouse_opaque="false"
name="overflow_btn_lp"
- user_resize="false"
auto_resize="true"
width="24">
<menu_button
@@ -246,7 +240,6 @@ background_visible="true"
left_pad="3"
mouse_opaque="false"
name="profile_btn_lp"
- user_resize="false"
auto_resize="true"
width="102">
<button
@@ -283,7 +276,6 @@ background_visible="true"
mouse_opaque="false"
name="close_btn_lp"
top="0"
- user_resize="false"
auto_resize="true"
width="51">
<button
@@ -324,7 +316,6 @@ background_visible="true"
mouse_opaque="false"
name="save_btn_lp"
top="0"
- user_resize="false"
auto_resize="true"
width="153">
<button
@@ -347,7 +338,6 @@ background_visible="true"
mouse_opaque="false"
name="cancel_btn_lp"
top="0"
- user_resize="false"
auto_resize="true"
width="154">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
index 2e0bb88f53..e9427a2388 100644
--- a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
+++ b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
@@ -50,7 +50,6 @@
layout="topleft"
left="0"
name="postcard_image_size_lp"
- user_resize="false"
auto_resize="false"
top="0"
right="-1"
@@ -99,7 +98,6 @@
layout="topleft"
left="0"
name="postcard_image_format_quality_lp"
- user_resize="false"
auto_resize="true"
top="0"
right="-1"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 47236c1a48..587c461bee 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -59,7 +59,6 @@
top_pad="30"
width="350" />
<check_box
- enabled_control="EnableVoiceChat"
control_name="VoiceCallsFriendsOnly"
height="16"
label="Only friends and groups can call or IM me"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index 273c252474..198ccd6e2f 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -31,8 +31,7 @@
width="0"
name="left_bookend_bottom"
mouse_opaque="false"
- layout="topleft"
- user_resize="false" />
+ layout="topleft"/>
<layout_panel
name="media_progress_indicator"
mouse_opaque="false"
@@ -41,7 +40,6 @@
left="0"
top="0"
auto_resize="false"
- user_resize="false"
min_width="100"
width="200">
<progress_bar
@@ -59,8 +57,7 @@
name="right_bookend_bottom"
width="0"
mouse_opaque="false"
- layout="topleft"
- user_resize="false" />
+ layout="topleft"/>
</layout_stack>
<layout_stack
name="media_controls"
@@ -79,13 +76,11 @@
top="0"
width="0"
mouse_opaque="false"
- layout="topleft"
- user_resize="false" />
+ layout="topleft"/>
<layout_panel
name="back"
top="0"
auto_resize="false"
- user_resize="false"
layout="topleft"
mouse_opaque="false"
min_width="22"
@@ -114,7 +109,6 @@
name="fwd"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
min_width="22"
top="0"
@@ -142,7 +136,6 @@
name="home"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="22"
@@ -170,7 +163,6 @@
name="media_stop"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="22"
@@ -198,7 +190,6 @@
name="reload"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="22"
@@ -226,7 +217,6 @@
name="stop"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="22"
@@ -254,7 +244,6 @@
name="play"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="22"
@@ -282,7 +271,6 @@
name="pause"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
min_width="22"
@@ -310,7 +298,6 @@
name="media_address"
mouse_opaque="false"
auto_resize="true"
- user_resize="false"
height="24"
follows="left|right|bottom"
layout="topleft"
@@ -343,8 +330,7 @@
layout="topleft"
width="16"
mouse_opaque="false"
- auto_resize="false"
- user_resize="false">
+ auto_resize="false">
<icon
name="media_whitelist_flag"
follows="top|right"
@@ -358,8 +344,7 @@
layout="topleft"
width="16"
mouse_opaque="false"
- auto_resize="false"
- user_resize="false">
+ auto_resize="false">
<icon
name="media_secure_lock_flag"
height="16"
@@ -374,7 +359,6 @@
name="media_play_position"
mouse_opaque="false"
auto_resize="true"
- user_resize="false"
follows="left|right"
layout="topleft"
top="0"
@@ -399,7 +383,6 @@
name="skip_back"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
min_width="22"
@@ -428,7 +411,6 @@
name="skip_forward"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
min_width="22"
@@ -455,7 +437,6 @@
name="media_volume"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="72"
@@ -511,7 +492,6 @@
name="zoom_frame"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
height="28"
@@ -539,7 +519,6 @@
name="close"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
min_width="21"
@@ -567,7 +546,6 @@
name="new_window"
mouse_opaque="false"
auto_resize="false"
- user_resize="false"
layout="topleft"
top="0"
min_width="22"
@@ -596,8 +574,7 @@
mouse_opaque="false"
top="0"
width="0"
- layout="topleft"
- user_resize="false" />
+ layout="topleft"/>
</layout_stack>
<panel
name="media_region"
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index 4535c56339..860caf2d21 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -12,45 +12,43 @@
height="768"
layout="topleft"
left="0"
- name="stack1"
+ name="horizontal_centering"
orientation="horizontal"
top="0"
width="1024">
<layout_panel
layout="topleft"
min_width="10"
- name="panel1"
- user_resize="false"
+ name="left"
width="150" />
<layout_panel
height="768"
layout="topleft"
- min_width="640"
- name="panel2"
- user_resize="false"
- width="640">
+ min_width="670"
+ name="center"
+ width="670">
<layout_stack
follows="left|right|top|bottom"
height="768"
layout="topleft"
left="0"
orientation="vertical"
- name="stack2"
+ name="vertical_centering"
top="0"
- width="640">
+ width="670">
<layout_panel
height="200"
layout="topleft"
min_height="10"
name="panel3"
- width="640" />
+ width="670" />
<layout_panel
auto_resize="false"
height="250"
layout="topleft"
min_height="250"
name="panel4"
- width="640">
+ width="670">
<icon
color="LoginProgressBoxCenterColor"
follows="left|right|bottom|top"
@@ -59,7 +57,7 @@
layout="topleft"
left="0"
top="0"
- width="640" />
+ width="670" />
<text
follows="left|right|top"
font="SansSerifHuge"
@@ -71,7 +69,7 @@
name="title_text"
text_color="LoginProgressBoxTextColor"
top_delta="50"
- width="593" />
+ right="-47"/>
<text
follows="left|right|top"
font="SansSerif"
@@ -83,7 +81,7 @@
name="progress_text"
text_color="LoginProgressBoxTextColor"
top_pad="5"
- width="593"
+ right="-47"
word_wrap="true"/>
<progress_bar
bottom="115"
@@ -106,7 +104,7 @@
name="message_text"
text_color="LoginProgressBoxTextColor"
top="145"
- width="550"
+ right="-90"
word_wrap="true"/>
</layout_panel>
<layout_panel
@@ -114,14 +112,13 @@
layout="topleft"
min_width="10"
name="panel5"
- width="640" />
+ width="670" />
</layout_stack>
</layout_panel>
<layout_panel
layout="topleft"
min_width="10"
- name="panel6"
- user_resize="false"
+ name="right"
width="150" />
</layout_stack>
<button
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
index 6b28639a77..bfd796a62b 100644
--- a/indra/newview/skins/default/xui/en/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml
@@ -134,26 +134,26 @@
name="Only Allow"
top_delta="-30"
width="278">
- Restrict Access to accounts verified by:
+ Allow access only to Residents who:
</text>
<check_box
follows="top|left"
height="16"
- label="Payment Information on File"
+ label="Have payment information on file"
layout="topleft"
left_delta="0"
name="limit_payment"
- tool_tip="Ban unidentified Residents"
+ tool_tip="Residents must have payment information on file to access this estate. See the [SUPPORT_SITE] for more information."
top_pad="2"
width="278" />
<check_box
follows="top|left"
height="16"
- label="Age Verification"
+ label="Have been age-verified"
layout="topleft"
left_delta="0"
name="limit_age_verified"
- tool_tip="Ban Residents who have not verified their age. See the [SUPPORT_SITE] for more information."
+ tool_tip="Residents must be age verified to access this estate. See the [SUPPORT_SITE] for more information."
top_pad="2"
width="278" />
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
index ae0215a578..b966358f18 100644
--- a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
@@ -96,7 +96,6 @@
layout="topleft"
left="0"
name="local_image_size_lp"
- user_resize="false"
auto_resize="false"
top="0"
right="-1"
@@ -145,7 +144,6 @@
layout="topleft"
left="0"
name="local_image_format_quality_lp"
- user_resize="false"
auto_resize="true"
top="0"
right="-1"
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
index 91ac9ad658..5bd383b81e 100644
--- a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
@@ -84,7 +84,6 @@
layout="topleft"
left="0"
name="profile_image_size_lp"
- user_resize="false"
auto_resize="false"
top="0"
right="-1"
@@ -132,7 +131,6 @@
layout="topleft"
left="0"
name="profile_image_metadata_lp"
- user_resize="false"
auto_resize="true"
top="0"
right="-1"
diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
index 3c69a0cb6c..58911bed56 100644
--- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
@@ -20,7 +20,6 @@
mouse_opaque="false">
<layout_panel name="vertical_toolbar_panel"
auto_resize="true"
- user_resize="false"
width="1024"
height="500"
mouse_opaque="false">
@@ -34,7 +33,6 @@
mouse_opaque="false">
<layout_panel name="left_toolbar_panel"
auto_resize="false"
- user_resize="false"
height="500"
width="30"
mouse_opaque="false">
@@ -61,7 +59,6 @@
</layout_panel>
<layout_panel name="non_toolbar_panel"
auto_resize="true"
- user_resize="false"
mouse_opaque="false"
height="100"
width="200">
@@ -102,7 +99,6 @@
</layout_panel>
<layout_panel name="right_toolbar_panel"
auto_resize="false"
- user_resize="false"
height="500"
width="30"
mouse_opaque="false">
@@ -132,7 +128,6 @@
</layout_panel>
<layout_panel name="bottom_toolbar_panel"
auto_resize="false"
- user_resize="false"
height="30"
width="1024"
mouse_opaque="false">
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index b52784d6bc..fcba937bdb 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- background_visible="true"
follows="all"
height="570"
label="Things"
@@ -30,11 +29,12 @@
width="330">
<layout_panel
name="main_inventory_layout_panel"
- layout="topleft"
+ layout="topleft"
+ auto_resize="true"
+ user_resize="true"
min_dim="150"
width="330"
follows="bottom|left|right"
- user_resize="false"
height="300">
<panel
class="panel_main_inventory"
@@ -48,41 +48,18 @@
height="300"
width="330" />
</layout_panel>
- <layout_panel
- width="330"
- layout="topleft"
- auto_resize="true"
- user_resize="false"
- follows="bottom|left|right"
- name="inbox_outbox_layout_panel"
- visible="false"
- min_dim="35"
- max_dim="235"
- expanded_min_dim="125"
- height="235">
- <layout_stack
- follows="left|right|top|bottom"
- layout="topleft"
- left="0"
- top="0"
- orientation="vertical"
- name="inbox_outbox_layout_stack"
- open_time_constant="0.02"
- close_time_constant="0.02"
- height="235"
- width="330">
- <layout_panel
+ <layout_panel
width="330"
- layout="topleft"
+ layout="topleft"
auto_resize="true"
- user_resize="false"
+ user_resize="true"
follows="left|right|top"
name="inbox_layout_panel"
visible="false"
min_dim="35"
- max_dim="200"
+ max_dim="235"
expanded_min_dim="90"
- height="200">
+ height="235">
<panel
follows="all"
layout="topleft"
@@ -91,13 +68,13 @@
class="panel_marketplace_inbox"
top="0"
label=""
- height="200"
+ height="235"
width="330">
<string name="InboxLabelWithArg">Received items ([NUM])</string>
<string name="InboxLabelNoArg">Received items</string>
<button
label="Received items"
- font="SansSerifMedium"
+ font="SansSerifMedium"
name="inbox_btn"
height="35"
width="308"
@@ -129,7 +106,7 @@
<panel
follows="all"
left="10"
- bottom="200"
+ bottom="235"
width="308"
top="35"
bg_opaque_color="InventoryBackgroundColor"
@@ -145,7 +122,7 @@
top="0"
left="0"
width="308"
- height="165"
+ height="200"
wrap="true"
halign="center">
Purchases from the marketplace will be delivered here.
@@ -153,139 +130,6 @@
</panel>
</panel>
</layout_panel>
- <layout_panel
- width="330"
- layout="topleft"
- auto_resize="true"
- user_resize="false"
- follows="all"
- name="outbox_layout_panel"
- visible="false"
- min_dim="35"
- max_dim="200"
- expanded_min_dim="90"
- height="200">
- <panel
- follows="all"
- layout="topleft"
- left="0"
- name="marketplace_outbox"
- class="panel_marketplace_outbox"
- top="0"
- label=""
- height="200"
- width="330">
- <string name="OutboxLabelWithArg">Merchant outbox ([NUM])</string>
- <string name="OutboxLabelNoArg">Merchant outbox</string>
- <button
- label="Merchant outbox"
- font="SansSerifMedium"
- name="outbox_btn"
- height="35"
- width="308"
- image_unselected="MarketplaceBtn_Off"
- image_selected="MarketplaceBtn_Selected"
- halign="left"
- handle_right_mouse="false"
- follows="top|left|right"
- is_toggle="true"
- tab_stop="false"
- pad_left="35"
- top="0"
- left="10" />
- <button
- image_unselected="OutboxPush_Off"
- image_selected="OutboxPush_Selected"
- image_hover_selected="OutboxPush_Selected_Over"
- image_hover_unselected="OutboxPush_Over"
- image_disabled_selected="OutboxPush_Selected_Disabled"
- image_disabled="OutboxPush_Disabled"
- image_pressed="OutboxPush_Press"
- image_pressed_selected="OutboxPush_Selected_Press"
- label=""
- tool_tip="Push to my Marketplace Storefront"
- is_toggle="false"
- name="outbox_sync_btn"
- follows="top|right"
- tab_stop="false"
- halign="center"
- top="6"
- left="-50"
- height="23"
- width="32"
- enabled="false" />
- <loading_indicator
- follows="top|right"
- name="outbox_sync_indicator"
- top="6"
- left="-50"
- height="23"
- width="32"
- images_per_sec="1.15"
- tab_stop="false"
- visible="false">
- <images>
- <image name="OutboxPush_Progress_1"/>
- <image name="OutboxPush_Progress_2"/>
- <image name="OutboxPush_Progress_3"/>
- <image name="OutboxPush_Progress_4"/>
- <image name="OutboxPush_Progress_5"/>
- <image name="OutboxPush_Progress_6"/>
- </images>
- </loading_indicator>
- <panel
- follows="all"
- left="10"
- bottom="200"
- width="308"
- top="35"
- bg_opaque_color="InventoryBackgroundColor"
- background_visible="true"
- background_opaque="true"
- >
- <panel
- name="outbox_inventory_placeholder_panel"
- follows="all"
- layout="topleft"
- top="0"
- left="0"
- width="308"
- height="165"
- bg_opaque_color="InventoryBackgroundColor"
- background_visible="true"
- background_opaque="true"
- >
- <text
- name="outbox_inventory_placeholder_title"
- type="string"
- follows="all"
- layout="topleft"
- top="10"
- left="0"
- width="308"
- height="25"
- wrap="true"
- halign="center"
- font="SansSerifBold">
- Loading...
- </text>
- <text
- name="outbox_inventory_placeholder_text"
- type="string"
- follows="all"
- layout="topleft"
- top="35"
- left="0"
- width="308"
- height="130"
- wrap="true"
- halign="left" />
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
- </layout_panel>
</layout_stack>
<panel
follows="bottom|left|right"
@@ -312,7 +156,6 @@
left="0"
mouse_opaque="false"
name="info_btn_lp"
- user_resize="false"
auto_resize="true"
width="101">
<button
@@ -334,7 +177,6 @@
left_pad="1"
mouse_opaque="false"
name="share_btn_lp"
- user_resize="false"
auto_resize="true"
width="100">
<button
@@ -356,7 +198,6 @@
left_pad="1"
mouse_opaque="false"
name="shop_btn_lp"
- user_resize="false"
auto_resize="true"
width="100">
<button
@@ -406,8 +247,7 @@
</layout_stack>
</panel>
</panel>
-
-<panel
+ <panel
follows="all"
layout="topleft"
left="0"
@@ -420,8 +260,7 @@
visible="false"
width="330">
</panel>
-
-<panel
+ <panel
follows="all"
layout="topleft"
left="0"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 2b0dcdfeca..3351ffe00f 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -18,7 +18,7 @@
<string name="StartupClearingCache">Clearing cache...</string>
<string name="StartupInitializingTextureCache">Initializing texture cache...</string>
<string name="StartupInitializingVFS">Initializing VFS...</string>
- <string name="StartupRequireDriverUpdate">Graphics initialization failed. Please update your graphics driver!</string>
+ <string name="StartupRequireDriverUpdate">Graphics initialization failed. Please update your graphics driver!</string>
<!-- progress -->
<string name="ProgressRestoring">Restoring...</string>
@@ -35,9 +35,9 @@
<string name="LoginAttempt">Previous login attempt failed. Logging in, attempt [NUMBER]</string>
<string name="LoginPrecaching">Loading world...</string>
<string name="LoginInitializingBrowser">Initializing embedded web browser...</string>
- <string name="LoginInitializingMultimedia">Initializing multimedia...</string>
- <string name="LoginInitializingFonts">Loading fonts...</string>
- <string name="LoginVerifyingCache">Verifying cache files (can take 60-90 seconds)...</string>
+ <string name="LoginInitializingMultimedia">Initializing multimedia...</string>
+ <string name="LoginInitializingFonts">Loading fonts...</string>
+ <string name="LoginVerifyingCache">Verifying cache files (can take 60-90 seconds)...</string>
<string name="LoginProcessingResponse">Processing response...</string>
<string name="LoginInitializingWorld">Initializing world...</string>
<string name="LoginDecodingImages">Decoding images...</string>
@@ -49,12 +49,12 @@
<string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string>
<string name="LoginConnectingToRegion">Connecting to region...</string>
<string name="LoginDownloadingClothing">Downloading clothing...</string>
- <string name="InvalidCertificate">The server returned an invalid or corrupt certificate. Please contact the Grid administrator.</string>
- <string name="CertInvalidHostname">An invalid hostname was used to access the server, please check your SLURL or Grid hostname.</string>
- <string name="CertExpired">The certificate returned by the Grid appears to be expired. Please check your system clock, or contact your Grid administrator.</string>
- <string name="CertKeyUsage">The certificate returned by the server could not be used for SSL. Please contact your Grid administrator.</string>
- <string name="CertBasicConstraints">Too many certificates were in the servers Certificate chain. Please contact your Grid administrator.</string>
- <string name="CertInvalidSignature">The certificate signature returned by the Grid server could not be verified. Please contact your Grid administrator.</string>
+ <string name="InvalidCertificate">The server returned an invalid or corrupt certificate. Please contact the Grid administrator.</string>
+ <string name="CertInvalidHostname">An invalid hostname was used to access the server, please check your SLURL or Grid hostname.</string>
+ <string name="CertExpired">The certificate returned by the Grid appears to be expired. Please check your system clock, or contact your Grid administrator.</string>
+ <string name="CertKeyUsage">The certificate returned by the server could not be used for SSL. Please contact your Grid administrator.</string>
+ <string name="CertBasicConstraints">Too many certificates were in the servers Certificate chain. Please contact your Grid administrator.</string>
+ <string name="CertInvalidSignature">The certificate signature returned by the Grid server could not be verified. Please contact your Grid administrator.</string>
<string name="LoginFailedNoNetwork">Network error: Could not establish connection, please check your network connection.</string>
<string name="LoginFailed">Login failed.</string>
@@ -164,11 +164,19 @@ Please try logging in again in a minute.</string>
<string name="TooltipLand">Land:</string>
<string name="TooltipMustSingleDrop">Only a single item can be dragged here</string>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
- <string name="TooltipOutboxNoTransfer">One or more of these objects cannot be sold or transferred to another user.</string>
- <string name="TooltipOutboxWorn">You are wearing one or more of these objects. Remove them from your avatar and try moving them again.</string>
- <string name="TooltipOutboxFolderLevels">This folder has too many levels of subfolders. Rearrange the interior folders to a maximum of 4 levels deep (Root Folder contains A contains B contains C).</string>
- <string name="TooltipOutboxTooManyObjects">This folder contains more than 200 objects. Box some of the items to reduce the object count.</string>
+ <string name="TooltipOutboxDragToWorld">You can not rez items in your merchant outbox</string>
+ <string name="TooltipOutboxNoTransfer">One or more of these objects cannot be sold or transferred.</string>
+ <string name="TooltipOutboxNotInInventory">Your merchant outbox can only accept items directly from your inventory</string>
+ <string name="TooltipOutboxWorn">You can not put items you are wearing into your merchant outbox</string>
+ <string name="TooltipOutboxCallingCard">You can not put calling cards into your merchant outbox</string>
+ <string name="TooltipOutboxFolderLevels">Depth of nested folders exceeds 3</string>
+ <string name="TooltipOutboxTooManyFolders">Subfolder count in top-level folder exceeds 20</string>
+ <string name="TooltipOutboxTooManyObjects">Item count in top-level folder exceeds 200</string>
+
+ <string name="TooltipDragOntoOwnChild">You can't move a folder into its child</string>
+ <string name="TooltipDragOntoSelf">You can't move a folder into itself</string>
+
<!-- tooltips for Urls -->
<string name="TooltipHttpUrl">Click to view this web page</string>
<string name="TooltipSLURL">Click to view this location's information</string>
@@ -2029,24 +2037,28 @@ Returns a string with the requested data about the region
<string name="PlacesNoMatchingItems">Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search].</string>
<string name="FavoritesNoMatchingItems">Drag a landmark here to add it to your favorites.</string>
<string name="InventoryNoTexture">You do not have a copy of this texture in your inventory</string>
- <string name="InventoryInboxNoItems">When you purchase or otherwise receive an item, it will appear here so you can drag it to a folder in your inventory, or delete it if you do not wish to keep it.</string>
- <string name="MarketplaceURL">http://marketplace.[DOMAIN_NAME]</string>
- <string name="MarketplaceURL_CreateStore">http://marketplace.[DOMAIN_NAME]/create_store</string>
- <string name="MarketplaceURL_LearnMore">http://marketplace.[DOMAIN_NAME]/learn_more</string>
- <string name="InventoryOutboxCreationErrorTitle">Your Merchant Outbox is not properly configured</string>
- <string name="InventoryOutboxCreationErrorTooltip">Merchant Outbox configuration error</string>
- <string name="InventoryOutboxCreationError">Please contact Customer Service to correct the problem.</string>
- <string name="InventoryOutboxNotMerchantTitle">Anyone can sell items on the Marketplace</string>
- <string name="InventoryOutboxNotMerchantTooltip">Become a merchant!</string>
- <string name="InventoryOutboxNotMerchant">[[MARKETPLACE_URL] The Second Life Marketplace] offers more than one million virtual products for sale, all of them created by Residents. You, too, can sell items you create, as well as some of the items you have purchased. Its easy and setup is free. [[LEARN_MORE_URL] Learn more] or [[CREATE_STORE_URL] create a store] on the Marketplace to get started.</string>
- <string name="InventoryOutboxNoItemsTitle">A new way to send items to the Marketplace</string>
- <string name="InventoryOutboxNoItemsTooltip">Drag and drop items here to prepare them for sale on the Marketplace</string>
- <string name="InventoryOutboxNoItems">Drag items or folders that you wish to sell into this area. A copy of the item will appear, leaving your inventory unchanged, unless you have dragged a no-copy item. When you are ready to send the items to the Marketplace, click the Upload button. Once your items have been moved to your Marketplace Inventory, they will disappear from this folder.</string>
+ <string name="InventoryInboxNoItems">Certain items you receive, such as premium gifts, will appear here. You may then drag them into your inventory.</string>
+ <string name="MarketplaceURL">https://marketplace.[MARKETPLACE_DOMAIN_NAME]/</string>
+ <string name="MarketplaceURL_CreateStore">http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4</string>
+ <string name="MarketplaceURL_Dashboard">https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard</string>
+ <string name="MarketplaceURL_Imports">https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports</string>
+ <string name="MarketplaceURL_LearnMore">https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more</string>
+ <string name="InventoryOutboxNotMerchantTitle">Anyone can sell items on the Marketplace.</string>
+ <string name="InventoryOutboxNotMerchantTooltip"></string>
+ <string name="InventoryOutboxNotMerchant">
+If you'd like to become a merchant, you'll need to [[MARKETPLACE_CREATE_STORE_URL] create a Marketplace store].
+ </string>
+ <string name="InventoryOutboxNoItemsTitle">Your outbox is empty.</string>
+ <string name="InventoryOutboxNoItemsTooltip"></string>
+ <string name="InventoryOutboxNoItems">
+Drag folders to this area and click "Send to Marketplace" to list them for sale on the [[MARKETPLACE_DASHBOARD_URL] Marketplace].
+ </string>
<string name="Marketplace Error None">No errors</string>
<string name="Marketplace Error Not Merchant">Error: Before sending items to the Marketplace you will need to set yourself up as a merchant (free of charge).</string>
<string name="Marketplace Error Empty Folder">Error: This folder has no contents.</string>
- <string name="Marketplace Error Unassociated Products">Error: This item failed to upload because your merchant account has too many items unassociated with products. To fix this error, login to the marketplace website and reduce your unassociated item count.</string>
+ <string name="Marketplace Error Unassociated Products">Error: This item failed to upload because your merchant account has too many items unassociated with products. To fix this error, log in to the marketplace website and reduce your unassociated item count.</string>
+
<string name="Marketplace Error Object Limit">Error: This item contains too many objects. Fix this error by placing objects together in boxes to reduce the total count to less than 200.</string>
<string name="Marketplace Error Folder Depth">Error: This item contains too many levels of nested folders. Reorganize it to a maximum of 3 levels of nested folders.</string>
<string name="Marketplace Error Unsellable Item">Error: This item can not be sold on the marketplace.</string>
@@ -3681,6 +3693,7 @@ Try enclosing path to the editor with double quotes.
<string name="Command_Marketplace_Label">Marketplace</string>
<string name="Command_MiniMap_Label">Mini-map</string>
<string name="Command_Move_Label">Walk / run / fly</string>
+ <string name="Command_Outbox_Label">Merchant outbox</string>
<string name="Command_People_Label">People</string>
<string name="Command_Picks_Label">Picks</string>
<string name="Command_Places_Label">Places</string>
@@ -3706,6 +3719,7 @@ Try enclosing path to the editor with double quotes.
<string name="Command_Marketplace_Tooltip">Go shopping</string>
<string name="Command_MiniMap_Tooltip">Show nearby people</string>
<string name="Command_Move_Tooltip">Moving your avatar</string>
+ <string name="Command_Outbox_Tooltip">Transfer items to your marketplace for sale</string>
<string name="Command_People_Tooltip">Friends, groups, and nearby people</string>
<string name="Command_Picks_Tooltip">Places to show as favorites in your profile</string>
<string name="Command_Places_Tooltip">Places you've saved</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/outbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/outbox_folder_view_folder.xml
index 0792996107..d19c47f54f 100644
--- a/indra/newview/skins/default/xui/en/widgets/outbox_folder_view_folder.xml
+++ b/indra/newview/skins/default/xui/en/widgets/outbox_folder_view_folder.xml
@@ -6,14 +6,4 @@
item_top_pad="4"
selection_image="Rounded_Square"
>
- <error_badge
- label=" "
- label_offset_horiz="-1"
- location="right"
- padding_horiz="12.5"
- padding_vert="2"
- location_offset_hcenter="-23"
- image="Error_Tag_Background"
- image_color="Black"
- />
</outbox_folder_view_folder>
diff --git a/indra/newview/skins/default/xui/en/widgets/outbox_inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/outbox_inventory_panel.xml
index e3f2072819..3964569da2 100644
--- a/indra/newview/skins/default/xui/en/widgets/outbox_inventory_panel.xml
+++ b/indra/newview/skins/default/xui/en/widgets/outbox_inventory_panel.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<outbox_inventory_panel show_load_status="false" />
+<outbox_inventory_panel show_empty_message="false" show_load_status="false" />
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
index b7c9cc27ac..307b61133f 100644
--- a/indra/newview/skins/default/xui/es/floater_about.xml
+++ b/indra/newview/skins/default/xui/es/floater_about.xml
@@ -67,32 +67,34 @@ Versi籀n del servidor de voz: [VOICE_VERSION]
<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)
-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).
-GL Copyright (C) 1999-2004 Brian Paul.
-GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University y 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
-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 y Mark Adler.
-google-perftools Copyright (c) 2005, Google Inc.
+ 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)
+ 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).
+ 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
+ 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.
-El visor de Second Life utiliza Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (y los propietarios de las licencias). Reservados todos los derechos. Consulta www.havok.com si deseas obtener m獺s informaci籀n.
+ 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.
-Reservados todos los derechos. Consulta las licencias en .txt si deseas obtener m獺s informaci籀n.
+ Este software contiene c籀digo fuente suministrado por NVIDIA Corporation.
-Codificaci籀n de sonido del chat de voz: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+ Reservados todos los derechos. Consulte los detalles en licenses.txt.
+
+ Codificaci籀n del audio del chat de voz: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
</text_editor>
</panel>
</tab_container>
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 b6391e28a0..6b8a1ff906 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -130,7 +130,7 @@ Vaya al men繳 Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
Tr獺fico:
</text>
<text name="DwellText">
- 0
+ Cargando...
</text>
<button label="Comprar terreno" left="130" name="Buy Land..." width="125"/>
<button label="Venta Linden" name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/>
@@ -309,13 +309,15 @@ S籀lo las parcelas m獺s grandes pueden listarse en la b繳squeda.
Sin &apos;empujones&apos; (prevalece lo marcado en la regi籀n)
</panel.string>
<panel.string name="see_avs_text">
- Ver a los residentes de esta parcela y chatear con ellos
+ Los avatares de otras parcelas pueden ver
</panel.string>
<text name="allow_label">
Permitir a otros Residentes:
</text>
- <check_box label="Editar el terreno" name="edit land check" tool_tip="Si se marca, cualquiera podr獺 modificar su terreno. Mejor dejarlo desmarcado, pues usted siempre puede modificar su terreno."/>
- <check_box label="Volar" name="check fly" tool_tip="Si se marca, los residentes podr獺n volar en su terreno. Si no, s籀lo podr獺n volar al cruzarlo o hasta que aterricen en 矇l."/>
+ <text name="allow_label0">
+ Volar:
+ </text>
+ <check_box label="Todos" name="check fly" tool_tip="Si se marca, los residentes podr獺n volar en su terreno. Si no, s籀lo podr獺n volar al cruzarlo o hasta que aterricen en 矇l."/>
<text name="allow_label2">
Crear objetos:
</text>
@@ -331,9 +333,6 @@ S籀lo las parcelas m獺s grandes pueden listarse en la b繳squeda.
</text>
<check_box label="Todos los residentes" name="check other scripts"/>
<check_box label="El grupo" name="check group scripts"/>
- <text name="land_options_label">
- Opciones del terreno:
- </text>
<check_box label="Seguro (sin da簽o)" name="check safe" tool_tip="Si se marca, convierte el terreno en &apos;seguro&apos;, desactivando el da簽o en combate. Si no, se activa el da簽o en combate."/>
<check_box label="Sin &apos;empujones&apos;" name="PushRestrictCheck" tool_tip="Previene scripts que empujen. Marcando esta opci籀n prevendr獺 que en su terreno haya comportamientos destructivos."/>
<check_box label="Mostrar el sitio en la b繳squeda (30 L$/semana)" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results"/>
@@ -374,9 +373,9 @@ S籀lo las parcelas m獺s grandes pueden listarse en la b繳squeda.
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Pulse para elegir una imagen"/>
<text name="allow_label5">
- Permitir a los residentes de otras parcelas:
+ a los avatares de esta parcela y chatear con ellos
</text>
- <check_box label="Ver los avatares" name="SeeAvatarsCheck" tool_tip="Permite que los residentes de otras parcelas vean a los residentes de 矇sta y chateen con ellos, y tambi矇n que t繳 puedas verles y chatear con ellos."/>
+ <check_box label="Ver los avatares" name="SeeAvatarsCheck" tool_tip="Permite que los avatares de otras parcelas vean a los avatares de 矇sta y chateen con ellos, y tambi矇n que t繳 puedas verles y chatear con ellos."/>
<text name="landing_point">
Punto de llegada: [LANDING]
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_avatar.xml b/indra/newview/skins/default/xui/es/floater_avatar.xml
index 7c87fbe01c..21d202309f 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Avatar" title="SELECTOR DE AVATAR"/>
+<floater name="Avatar" title="ELIGE UN AVATAR"/>
diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml
index f8911f3a4a..b0704ab788 100644
--- a/indra/newview/skins/default/xui/es/floater_camera.xml
+++ b/indra/newview/skins/default/xui/es/floater_camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="camera_floater" title="VER">
+<floater name="camera_floater" title="CONTROLES DE LA CMARA">
<floater.string name="rotate_tooltip">
Girar la c獺mara alrededor de lo enfocado
</floater.string>
diff --git a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
index 0150241d9a..b96076836b 100644
--- a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
@@ -4,7 +4,7 @@
Filtrado:
</text>
<check_box label="Filtrado anisotr籀pico (m獺s lento si se activa)" name="ani"/>
- <text name="Antialiasing:">
+ <text name="antialiasing label">
Antialiasing:
</text>
<combo_box label="Antialiasing" name="fsaa" width="94">
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 3e77453612..ab3ba5aed7 100644
--- a/indra/newview/skins/default/xui/es/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_model_preview.xml
@@ -4,6 +4,9 @@
<string name="status_parse_error">
Error: Problema de an獺lisis de DAE - consulta los datos en el registro.
</string>
+ <string name="status_material_mismatch">
+ Error: el material del modelo no es un subconjunto del modelo de referencia.
+ </string>
<string name="status_reading_file">
Cargando...
</string>
diff --git a/indra/newview/skins/default/xui/es/floater_model_wizard.xml b/indra/newview/skins/default/xui/es/floater_model_wizard.xml
index c4eb5e955a..e27db5a1c4 100644
--- a/indra/newview/skins/default/xui/es/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/es/floater_model_wizard.xml
@@ -20,6 +20,9 @@
Elige el archivo de modelo que deseas subir
</text>
<button label="Buscar..." label_selected="Buscar..." name="browse"/>
+ <text name="Model types">
+ Second Life admite los archivos COLLADA (.dae)
+ </text>
<text name="dimensions">
X Y Z
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml
index b29fe04848..0e7b950bd3 100644
--- a/indra/newview/skins/default/xui/es/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/es/floater_moveview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater" title="MOVERME">
+<floater name="move_floater" title="CAMINAR / CORRER / VOLAR">
<string name="walk_forward_tooltip">
Caminar hacia adelante (cursor arriba o W)
</string>
diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml
index eafc623ea9..23078b3a55 100644
--- a/indra/newview/skins/default/xui/es/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml
@@ -3,73 +3,63 @@
<floater.string name="unknown">
desconocido
</floater.string>
- <radio_group label="Tipo de foto" name="snapshot_type_radio">
- <radio_item label="Correo-e" name="postcard"/>
- <radio_item label="Mi inventario ([AMOUNT] L$)" name="texture"/>
- <radio_item label="Guardar en mi ordenador" name="local"/>
- </radio_group>
+ <string name="postcard_progress_str">
+ Enviando el correo electr籀nico
+ </string>
+ <string name="profile_progress_str">
+ Publicando
+ </string>
+ <string name="inventory_progress_str">
+ Guardando en el inventario
+ </string>
+ <string name="local_progress_str">
+ Guardando en el equipo
+ </string>
+ <string name="profile_succeeded_str">
+ Imagen subida
+ </string>
+ <string name="postcard_succeeded_str">
+ Correo electr籀nico enviado
+ </string>
+ <string name="inventory_succeeded_str">
+ 癒Guardado en el inventario!
+ </string>
+ <string name="local_succeeded_str">
+ 癒Guardado en el equipo!
+ </string>
+ <string name="profile_failed_str">
+ Error al subir la imagen a los comentarios de tu perfil.
+ </string>
+ <string name="postcard_failed_str">
+ Error al enviar el correo electr籀nico.
+ </string>
+ <string name="inventory_failed_str">
+ Error al guardar en el inventario.
+ </string>
+ <string name="local_failed_str">
+ Error al guardar en el equipo.
+ </string>
+ <button name="advanced_options_btn" tool_tip="Opciones avanzadas"/>
+ <text name="image_res_text">
+ [WIDTH] x [HEIGHT] px
+ </text>
<text name="file_size_label">
[SIZE] kB
</text>
- <button label="Actualizar la foto" name="new_snapshot_btn"/>
- <button label="Enviar" name="send_btn"/>
- <button label="Ahorro ([AMOUNT] L$)" name="upload_btn"/>
- <flyout_button label="Guardar" name="save_btn" tool_tip="Guardar la imagen en un archivo">
- <flyout_button.item label="Guardar" name="save_item"/>
- <flyout_button.item label="Guardar como..." name="saveas_item"/>
- </flyout_button>
- <button label="M獺s" name="more_btn" tool_tip="Opciones avanzadas"/>
- <button label="Menos" name="less_btn" tool_tip="Opciones avanzadas"/>
- <button label="Cancelar" name="discard_btn"/>
- <text name="type_label2">
- Tama簽o
- </text>
- <text name="format_label">
- Formato
- </text>
- <combo_box label="Resoluci籀n" name="postcard_size_combo">
- <combo_box.item label="Ventana actual" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="Personalizado" name="Custom"/>
- </combo_box>
- <combo_box label="Resoluci籀n" name="texture_size_combo">
- <combo_box.item label="Ventana actual" name="CurrentWindow"/>
- <combo_box.item label="Peque簽a (128x128)" name="Small(128x128)"/>
- <combo_box.item label="Mediana (256x256)" name="Medium(256x256)"/>
- <combo_box.item label="Grande (512x512)" name="Large(512x512)"/>
- <combo_box.item label="Personalizado" name="Custom"/>
- </combo_box>
- <combo_box label="Resoluci籀n" name="local_size_combo">
- <combo_box.item label="Ventana actual" name="CurrentWindow"/>
- <combo_box.item label="320x240" name="320x240"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="1280x1024" name="1280x1024"/>
- <combo_box.item label="1600x1200" name="1600x1200"/>
- <combo_box.item label="Personalizado" name="Custom"/>
- </combo_box>
- <combo_box label="Formato" name="local_format_combo">
- <combo_box.item label="PNG" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP" name="BMP"/>
- </combo_box>
- <spinner label="Ancho" name="snapshot_width"/>
- <spinner label="Altura" name="snapshot_height"/>
- <check_box label="Mantener las proporciones" name="keep_aspect_check"/>
- <slider label="Calidad de la imagen" name="image_quality_slider"/>
- <text name="layer_type_label">
- Captura:
- </text>
- <combo_box label="Capas de imagen" name="layer_types">
- <combo_box.item label="Colores" name="Colors"/>
- <combo_box.item label="Profundidad" name="Depth"/>
- </combo_box>
- <check_box label="Interfaz" name="ui_check"/>
- <check_box label="HUDs" name="hud_check"/>
- <check_box label="Mantener abierto despu矇s de guardar" name="keep_open_check"/>
- <check_box label="Congelar la toma (pantalla completa)" name="freeze_frame_check"/>
- <check_box label="Actualizar autom獺ticamente" name="auto_snapshot_check"/>
+ <panel name="advanced_options_panel">
+ <text name="advanced_options_label">
+ OPCIONES AVANZADAS
+ </text>
+ <text name="layer_type_label">
+ Captura:
+ </text>
+ <combo_box label="Capas de imagen" name="layer_types">
+ <combo_box.item label="Colores" name="Colors"/>
+ <combo_box.item label="Profundidad" name="Depth"/>
+ </combo_box>
+ <check_box label="Interfaz" name="ui_check"/>
+ <check_box label="HUDs" name="hud_check"/>
+ <check_box label="Congelar la toma (pantalla completa)" name="freeze_frame_check"/>
+ <check_box label="Actualizar autom獺ticamente" name="auto_snapshot_check"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_toybox.xml b/indra/newview/skins/default/xui/es/floater_toybox.xml
index b36a05a6e4..7275b0546b 100644
--- a/indra/newview/skins/default/xui/es/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/es/floater_toybox.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Toybox" title="PERSONALIZAR BARRAS DE HERRAMIENTAS">
+<floater name="Toybox" title="BOTONES DE LA BARRA DE HERRAMIENTAS">
<text name="toybox label 1">
Puedes agregar o quitar botones arrastr獺ndolos a las barras de herramientas o desde ellas.
</text>
<text name="toybox label 2">
Los botones aparecer獺n como se muestra o solo como iconos, seg繳n la configuraci籀n de cada barra de herramientas.
</text>
+ <button label="Quitar todas las barras de herramientas" label_selected="Quitar todas las barras de herramientas" name="btn_clear_all"/>
<button label="Restaurar valores predeterminados" label_selected="Restaurar valores predeterminados" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_translation_settings.xml b/indra/newview/skins/default/xui/es/floater_translation_settings.xml
new file mode 100644
index 0000000000..765c9a05a2
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_translation_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_translation_settings" title="CONFIGURACIN DE LA TRADUCCIN DEL CHAT">
+ <string name="bing_api_key_not_verified">
+ appID de Bing no se ha confirmado. Vuelve a intentarlo.
+ </string>
+ <string name="google_api_key_not_verified">
+ La clave de API de Google no se ha confirmado. Vuelve a intentarlo.
+ </string>
+ <string name="bing_api_key_verified">
+ appID de Bing se ha confirmado.
+ </string>
+ <string name="google_api_key_verified">
+ La clave de API de Google se ha confirmado.
+ </string>
+ <check_box label="Activar la traducci籀n autom獺tica durante el chat" name="translate_chat_checkbox"/>
+ <text name="translate_language_label">
+ Traducir el chat al:
+ </text>
+ <combo_box name="translate_language_combo">
+ <combo_box.item label="Predeterminado del sistema" name="System Default Language"/>
+ <combo_box.item label="Ingl矇s" name="English"/>
+ <combo_box.item label="Dansk (dan矇s)" name="Danish"/>
+ <combo_box.item label="Deutsch (alem獺n)" name="German"/>
+ <combo_box.item label="Espa簽ol (espa簽ol)" name="Spanish"/>
+ <combo_box.item label="Fran癟ais (franc矇s)" name="French"/>
+ <combo_box.item label="Italiano (italiano)" name="Italian"/>
+ <combo_box.item label="Magyar (h繳ngaro)" name="Hungarian"/>
+ <combo_box.item label="Nederlands (neerland矇s)" name="Dutch"/>
+ <combo_box.item label="Polski (polaco)" name="Polish"/>
+ <combo_box.item label="Portugu礙s (portugu矇s)" name="Portugese"/>
+ <combo_box.item label="郕邽邿 (ruso)" name="Russian"/>
+ <combo_box.item label="T羹rk癟e (turco)" name="Turkish"/>
+ <combo_box.item label="苺郕訄郇郕訄 (ucraniano)" name="Ukrainian"/>
+ <combo_box.item label="銝剜 (甇擃) (Chino)" name="Chinese"/>
+ <combo_box.item label="交祈 (japon矇s)" name="Japanese"/>
+ <combo_box.item label="窱原 (coreano)" name="Korean"/>
+ </combo_box>
+ <text name="tip">
+ Elige el servicio de traducci籀n:
+ </text>
+ <radio_group name="translation_service_rg">
+ <radio_item initial_value="bing" label="Bing Translator" name="bing"/>
+ <radio_item initial_value="google" label="Traductor de Google" name="google"/>
+ </radio_group>
+ <text name="bing_api_key_label">
+ [http://www.bing.com/developers/createapp.aspx AppID] de Bing:
+ </text>
+ <button label="Verificar" name="verify_bing_api_key_btn"/>
+ <text name="google_api_key_label">
+ [http://code.google.com/apis/language/translate/v2/getting_started.html#auth Clave de API] de Google:
+ </text>
+ <button label="Verificar" name="verify_google_api_key_btn"/>
+ <text name="google_links_text">
+ [http://code.google.com/apis/language/translate/v2/pricing.html Precios] | [https://code.google.com/apis/console Estad穩sticas]
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
index cefec2a7a1..eff21239be 100644
--- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="CONTROLES DE LA VOZ">
<string name="title_nearby">
- Chat de voz
+ CONFIGURACIN DE VOZ
</string>
<string name="title_group">
- Multiconferencia de voz con [GROUP]
+ MULTICONFERENCIA DE VOZ CON [GROUP]
</string>
<string name="title_adhoc">
- Multiconferencia de voz
+ MULTICONFERENCIA DE VOZ
</string>
<string name="title_peer_2_peer">
- Llamada: [NAME]
+ LLAMADA A [NAME]
</string>
<string name="no_one_near">
Nadie cercano tiene activada la voz
diff --git a/indra/newview/skins/default/xui/es/menu_toolbars.xml b/indra/newview/skins/default/xui/es/menu_toolbars.xml
index f8ed1c54ca..63f3dc43bd 100644
--- a/indra/newview/skins/default/xui/es/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/es/menu_toolbars.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Toolbars Popup">
- <menu_item_call label="Elegir botones..." name="Chose Buttons"/>
+ <menu_item_call label="Quitar este bot籀n" name="Remove button"/>
+ <menu_item_call label="Botones de la barra de herramientas..." name="Choose Buttons"/>
<menu_item_check label="Iconos y etiquetas" name="icons_with_text"/>
<menu_item_check label="Solo iconos" name="icons_only"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index f5cc2b9389..4762e3f4a4 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu_bar name="Main Menu">
<menu label="Yo" name="Me">
- <menu_item_call label="Panel de control..." name="Manage My Account">
- <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=es"/>
- </menu_item_call>
<menu_item_call label="Perfil..." name="Profile"/>
<menu_item_call label="Apariencia" name="ChangeOutfit"/>
+ <menu_item_call label="Elige un avatar..." name="Avatar Picker"/>
<menu_item_check label="Inventario..." name="Inventory"/>
- <menu_item_check label="Gestos..." name="Gestures"/>
- <menu_item_check label="Voz..." name="ShowVoice"/>
+ <menu_item_call label="Nueva ventana del inventario" name="NewInventoryWindow"/>
+ <menu_item_call label="Lugares..." name="Places"/>
+ <menu_item_call label="Destacados..." name="Picks"/>
+ <menu_item_call label="Controles de la c獺mara..." name="Camera Controls"/>
<menu label="Movimiento" name="Movement">
<menu_item_call label="Sentarte" name="Sit Down Here"/>
<menu_item_check label="Volar" name="Fly"/>
@@ -22,34 +22,39 @@
<menu_item_call label="Solicitar estatus de Administrador" name="Request Admin Options"/>
<menu_item_call label="Dejar el estatus de Administrador" name="Leave Admin Options"/>
<menu_item_call label="Comprar L$" name="Buy and Sell L$"/>
+ <menu_item_call label="Panel de control de la cuenta..." name="Manage My Account">
+ <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=es"/>
+ </menu_item_call>
<menu_item_call label="Preferencias..." name="Preferences"/>
- <menu_item_call label="Barras de herramientas..." name="Toolbars"/>
+ <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_call label="Salir de [APP_NAME]" name="Quit"/>
</menu>
<menu label="Comunicarme" name="Communicate">
- <menu_item_call label="Mis amigos" name="My Friends"/>
- <menu_item_call label="Mis grupos" name="My Groups"/>
- <menu_item_check label="Chat" name="Nearby Chat"/>
+ <menu_item_check label="Chat..." name="Nearby Chat"/>
+ <menu_item_check label="Hablar" name="Speak"/>
+ <menu_item_check label="Configuraci籀n de voz..." name="Nearby Voice"/>
+ <menu_item_check label="Transformaci籀n de voz..." name="ShowVoice"/>
+ <menu_item_check label="Gestos..." name="Gestures"/>
+ <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_check label="Chat de voz" name="Nearby Voice"/>
</menu>
<menu label="Mundo" name="World">
- <menu_item_check label="Minimapa" name="Mini-Map"/>
+ <menu_item_call label="Crear un hito de este sitio" name="Create Landmark Here"/>
+ <menu_item_call label="Destinos..." name="Destinations"/>
<menu_item_check label="Mapa del mundo" name="World Map"/>
+ <menu_item_check label="Minimapa" name="Mini-Map"/>
<menu_item_check label="Buscar" name="Search"/>
+ <menu_item_call label="Teleportar a la Base" name="Teleport Home"/>
+ <menu_item_call label="Fijar mi Base aqu穩" name="Set Home to Here"/>
<menu_item_call label="Foto" name="Take Snapshot"/>
- <menu_item_call label="Crear un hito de este sitio" name="Create Landmark Here"/>
- <menu label="Perfil del lugar" name="Land">
- <menu_item_call label="Perfil del lugar" name="Place Profile"/>
- <menu_item_call label="Acerca del terreno" name="About Land"/>
- <menu_item_call label="Regi籀n/Estado" name="Region/Estate"/>
- </menu>
+ <menu_item_call label="Perfil del lugar" name="Place Profile"/>
+ <menu_item_call label="Acerca del terreno" name="About Land"/>
+ <menu_item_call label="Regi籀n/Estado" name="Region/Estate"/>
+ <menu_item_call label="Mis terrenos..." name="My Land"/>
<menu_item_call label="Comprar este terreno" name="Buy Land"/>
- <menu_item_call label="Mi terreno" name="My Land"/>
<menu label="Mostrar" name="LandShow">
- <menu_item_check label="Controles del movimiento" name="Movement Controls"/>
- <menu_item_check label="Controles de la c獺mara" name="Camera Controls"/>
<menu_item_check label="L穩neas de prohibici籀n" name="Ban Lines"/>
<menu_item_check label="Balizas" name="beacons"/>
<menu_item_check label="L穩mites de las parcelas" name="Property Lines"/>
@@ -58,16 +63,15 @@
<menu_item_check label="Propiedades de la parcela" name="Parcel Properties"/>
<menu_item_check label="Men繳 Avanzado" name="Show Advanced Menu"/>
</menu>
- <menu_item_call label="Teleportar a la Base" name="Teleport Home"/>
- <menu_item_call label="Fijar mi Base aqu穩" name="Set Home to Here"/>
<menu label="Sol" name="Environment Settings">
<menu_item_call label="Amanecer" name="Sunrise"/>
<menu_item_call label="Mediod穩a" name="Noon"/>
<menu_item_call label="Atardecer" name="Sunset"/>
<menu_item_call label="Medianoche" name="Midnight"/>
+ <menu_item_call label="Usar configuraci籀n de regi籀n" name="Use Region Settings"/>
</menu>
- <menu label="Editor de entorno" name="Enviroment Editor">
- <menu_item_call label="Configuraci籀n de entorno..." name="Enviroment Settings"/>
+ <menu label="Editor de entorno" name="Environment Editor">
+ <menu_item_call label="Configuraci籀n del entorno..." name="Environment Settings"/>
<menu label="Agua predefinida" name="Water Presets">
<menu_item_call label="Nuevo predefinido..." name="new_water_preset"/>
<menu_item_call label="Editar predefinido..." name="edit_water_preset"/>
@@ -146,6 +150,7 @@
<menu_item_call label="Rehacer" name="Redo"/>
</menu>
<menu label="Ayuda" name="Help">
+ <menu_item_call label="C籀mo..." name="How To"/>
<menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/>
<menu_item_call label="Denunciar una infracci籀n" name="Report Abuse"/>
<menu_item_call label="Informar de un fallo" name="Report Bug"/>
@@ -199,11 +204,10 @@
<menu_item_check label="Usar Plugin Read Thread" name="Use Plugin Read Thread"/>
<menu_item_call label="Vaciar la cach矇 de grupo" name="ClearGroupCache"/>
<menu_item_check label="Vista subjetiva suavizada" name="Mouse Smoothing"/>
+ <menu_item_call label="Recuperar las teclas" name="Release Keys"/>
<menu label="Atajos de teclado" name="Shortcuts">
<menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/>
<menu_item_check label="Buscar" name="Search"/>
- <menu_item_call label="Recuperar las teclas" name="Release Keys"/>
- <menu_item_call label="Interfaz en el tama簽o predeterminado" name="Set UI Size to Default"/>
<menu_item_check label="Mostrar el men繳 Avanzado - acceso directo antiguo" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Cerrar la ventana" name="Close Window"/>
<menu_item_call label="Cerrar todas las ventanas" name="Close All Windows"/>
@@ -272,6 +276,7 @@
<menu_item_check label="Actualizar el tipo" name="Update Type"/>
<menu_item_check label="Informaci籀n sobre el nivel de detalle" name="LOD Info"/>
<menu_item_check label="Crear cola" name="Build Queue"/>
+ <menu_item_check label="Vectores de viento" name="Wind Vectors"/>
<menu_item_check label="Complejidad del renderizado" name="rendercomplexity"/>
<menu_item_check label="Esculpir" name="Sculpt"/>
</menu>
@@ -281,7 +286,6 @@
<menu_item_check label="Luces y sombras" name="Lighting and Shadows"/>
<menu_item_check label="Sombras del sol/la luna/proyectores" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO y sombras suavizadas" name="SSAO and Shadow Smoothing"/>
- <menu_item_check label="Iluminaci籀n global (experimental)" name="Global Illumination"/>
<menu_item_check label="Capas alfa autom獺ticas (deferidas)" name="Automatic Alpha Masks (deferred)"/>
<menu_item_check label="Capas alfa autom獺ticas (no deferidas)" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Animation Textures" name="Animation Textures"/>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 0de56f9b6d..e0a20683c5 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -1114,8 +1114,13 @@ El precio de compra del terreno no se le devolver獺 al propietario. Si se vende
<notification name="DisplaySetToSafe">
Las configuraciones que se muestran se han fijado en los niveles guardados, pues especificaste la opci籀n de guardarlos.
</notification>
- <notification name="DisplaySetToRecommended">
- Las configuraciones que se muestran se han fijado en los niveles recomendados para la configuraci籀n de tu sistema.
+ <notification name="DisplaySetToRecommendedGPUChange">
+ La configuraci籀n de pantalla se ha establecido en los niveles recomendados porque tu tarjeta de gr獺ficos ha cambiado
+de &apos;[LAST_GPU]&apos;
+a &apos;[THIS_GPU]&apos;
+ </notification>
+ <notification name="DisplaySetToRecommendedFeatureChange">
+ La configuraci籀n de pantalla se ha establecido en los niveles recomendados a causa de un cambio en el subsistema de renderizado.
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
@@ -1920,7 +1925,13 @@ Dado que estos objetos tienen scripts, moverlos a tu inventario puede provocar u
<usetemplate ignoretext="Confirmar antes de salir" name="okcancelignore" notext="No salir" yestext="Salir"/>
</notification>
<notification name="ConfirmRestoreToybox">
- 聶Est獺s seguro de que quieres restaurar los botones y barras de herramientas predeterminados?
+ Esta acci籀n restaurar獺 los botones y barras de herramientas predeterminados.
+
+Esta acci籀n no se puede deshacer.
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearAllToybox">
+ Esta acci籀n volver獺 a colocar todos los botones a la caja de herramientas y las barras de herramientas aparecer獺n vac穩as.
Esta acci籀n no se puede deshacer.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
@@ -2244,14 +2255,16 @@ Por favor, selecciona un s籀lo objeto.
Se ha rehusado tu tarjeta de visita.
</notification>
<notification name="TeleportToLandmark">
- Puedes teleportarte a lugares como &apos;[NAME]&apos; abriendo el panel Lugares -a la derecha de tu pantalla- y seleccionando la secci籀n Hitos.
-Pulsa en un hito para seleccionarlo, y, luego, pulsa &apos;Teleportar&apos; en la parte inferior del panel.
-(Tambi矇n puedes pulsar dos veces en el hito o pulsarlo con el bot籀n derecho del rat籀n y elegir &apos;Teleportar&apos;.)
+ Para teleportarte a lugares como &apos;[NAME]&apos;, pulsa el bot籀n &quot;Lugares&quot;,
+ y selecciona la pesta簽a Hitos en la ventana que se abre. Pulsa en un
+ hito para seleccionarlo y luego pulsa &apos;Teleportar&apos; en la parte inferior de la ventana.
+ (Tambi矇n puedes pulsar dos veces en el hito o pulsarlo con el bot籀n derecho del rat籀n y
+ elegir &apos;Teleportar&apos;.)
</notification>
<notification name="TeleportToPerson">
- Puedes contactar con un Residente como &apos;[NAME]&apos; abriendo el panel Gente en el lado derecho de tu pantalla.
-Elige al Residente de la lista y pulsa &apos;MI&apos; en la parte inferior del panel.
-(Tambi矇n puedes pulsar dos veces en su nombre o pulsarlo con el bot籀n derecho y elegir &apos;MI&apos;).
+ Para ponerte en contacto con Residentes como &apos;[NAME]&apos;, pulsa el bot籀n &quot;Gente&quot;, selecciona un Residente en la ventana que se abre y despu矇s pulsa en &apos;MI&apos; en
+ la parte inferior de la ventana.
+ (Tambi矇n puedes pulsar dos veces en su nombre o pulsarlo con el bot籀n derecho y elegir &apos;MI&apos;).
</notification>
<notification name="CantSelectLandFromMultipleRegions">
No puedes seleccionar un terreno que cruce las fronteras entre servidores.
@@ -2272,6 +2285,9 @@ Int矇ntalo seleccionando un trozo m獺s peque簽o de terreno.
<notification name="PaymentSent">
[MESSAGE]
</notification>
+ <notification name="PaymentFailure">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
Notificaci籀n de un evento:
@@ -2526,10 +2542,10 @@ Por favor, vuelve a intentarlo en unos momentos.
</form>
</notification>
<notification name="FriendshipAccepted">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; ha aceptado tu oferta de amistad.
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; ha aceptado tu ofrecimiento de amistad.
</notification>
<notification name="FriendshipDeclined">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; ha rehusado tu oferta de amistad.
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; ha rechazado tu ofrecimiento de amistad.
</notification>
<notification name="FriendshipAcceptedByMe">
Aceptado el ofrecimiento de amistad.
diff --git a/indra/newview/skins/default/xui/es/panel_edit_skin.xml b/indra/newview/skins/default/xui/es/panel_edit_skin.xml
index 501ecfb4de..8d895a6152 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_skin.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="Tatuajes de la cabeza" name="Head Tattoos" tool_tip="Pulsa para elegir una imagen"/>
- <texture_picker label="Tatuajes superiores" name="Upper Tattoos" tool_tip="Pulsa para elegir una imagen"/>
- <texture_picker label="Tatuajes inferiores" name="Lower Tattoos" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Cabeza" name="Head" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Parte superior del cuerpo" name="Upper Body" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Parte inferior del cuerpo" name="Lower Body" tool_tip="Pulsa para elegir una imagen"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml
index 5a852a6711..4220ab3c9f 100644
--- a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="Traducir chat" name="translate_chat_checkbox"/>
+ <check_box label="Traducir el chat" name="translate_chat_checkbox"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_postcard_message.xml b/indra/newview/skins/default/xui/es/panel_postcard_message.xml
new file mode 100644
index 0000000000..7316d91f5c
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_postcard_message.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_message">
+ <text name="to_label">
+ Hasta:
+ </text>
+ <text name="name_label">
+ Desde:
+ </text>
+ <text name="subject_label">
+ Asunto:
+ </text>
+ <line_editor label="Escribe aqu穩 el asunto." name="subject_form"/>
+ <text name="msg_label">
+ Mensaje:
+ </text>
+ <text_editor name="msg_form">
+ Escribe aqu穩 tu mensaje.
+ </text_editor>
+ <button label="Cancelar" name="cancel_btn"/>
+ <button label="Enviar" name="send_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_postcard_settings.xml b/indra/newview/skins/default/xui/es/panel_postcard_settings.xml
new file mode 100644
index 0000000000..3931319447
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_postcard_settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_settings">
+ <combo_box label="Resoluci籀n" name="postcard_size_combo">
+ <combo_box.item label="Ventana actual" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Personalizado" name="Custom"/>
+ </combo_box>
+ <layout_stack name="postcard_image_params_ls">
+ <layout_panel name="postcard_image_size_lp">
+ <spinner label="Ancho" name="postcard_snapshot_width"/>
+ <spinner label="Altura" name="postcard_snapshot_height"/>
+ <check_box label="Mantener las proporciones" name="postcard_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="postcard_image_format_quality_lp">
+ <slider label="Calidad de la imagen" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+</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 e822585566..aea9b9ce4a 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -29,30 +29,5 @@
<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"/>
- <check_box name="translate_chat_checkbox"/>
- <text name="translate_chb_label">
- Usar en el chat el traductor autom獺tico
- </text>
- <text name="translate_language_text">
- Traducir el chat al:
- </text>
- <combo_box name="translate_language_combobox">
- <combo_box.item label="Predeterminado del sistema" name="System Default Language"/>
- <combo_box.item label="English (ingl矇s)" name="English"/>
- <combo_box.item label="Dansk (dan矇s)" name="Danish"/>
- <combo_box.item label="Deutsch (alem獺n)" name="German"/>
- <combo_box.item label="Espa簽ol" name="Spanish"/>
- <combo_box.item label="Fran癟ais (franc矇s)" name="French"/>
- <combo_box.item label="Italiano (italiano)" name="Italian"/>
- <combo_box.item label="Magyar (h繳ngaro)" name="Hungarian"/>
- <combo_box.item label="Nederlands (neerland矇s)" name="Dutch"/>
- <combo_box.item label="Polski (polaco)" name="Polish"/>
- <combo_box.item label="Portugu礙s (portugu矇s)" name="Portugese"/>
- <combo_box.item label="郕邽邿 (ruso)" name="Russian"/>
- <combo_box.item label="T羹rk癟e (turco)" name="Turkish"/>
- <combo_box.item label="苺郕訄郇郕訄 (ucraniano)" name="Ukrainian"/>
- <combo_box.item label="銝剜 (甇擃) (Chino)" name="Chinese"/>
- <combo_box.item label="交祈 (japon矇s)" name="Japanese"/>
- <combo_box.item label="窱原 (coreano)" name="Korean"/>
- </combo_box>
+ <button label="Configuraci籀n de la traducci籀n del chat" name="ok_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
index 3de18654b5..81a29dae5a 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
@@ -15,7 +15,7 @@
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Usar mi navegador (IE, Firefox, Safari)" name="external" tool_tip="Usa tu navegador por defecto para ayuda, enlaces web, etc. No es aconsejable si est獺s a pantalla completa." value="1"/>
+ <radio_item label="Usar mi navegador (IE, Firefox, Safari)" name="external" tool_tip="Usa tu navegador por defecto para ayuda, enlaces web, etc. No es aconsejable si est獺s a pantalla completa." value="true"/>
<radio_item label="Usar el navegador incorporado" name="internal" tool_tip="Usa el navegador incorporado para ayuda, enlaces web, etc. Este navegador se abre en una nueva ventana dentro de [APP_NAME]." value=""/>
</radio_group>
<check_box initial_value="true" label="Activar plugins" name="browser_plugins_enabled"/>
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml
new file mode 100644
index 0000000000..12c74b5cd1
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_inventory">
+ <text name="title">
+ Guardar en mi inventario
+ </text>
+ <text name="hint_lbl">
+ Guardar una imagen en el inventario cuesta [UPLOAD_COST] L$. Para guardar una imagen como una textura, selecciona uno de los formatos cuadrados.
+ </text>
+ <combo_box label="Resoluci籀n" name="texture_size_combo">
+ <combo_box.item label="Ventana actual" name="CurrentWindow"/>
+ <combo_box.item label="Peque簽a (128x128)" name="Small(128x128)"/>
+ <combo_box.item label="Mediana (256x256)" name="Medium(256x256)"/>
+ <combo_box.item label="Grande (512x512)" name="Large(512x512)"/>
+ <combo_box.item label="Personalizado" name="Custom"/>
+ </combo_box>
+ <spinner label="Ancho" name="inventory_snapshot_width"/>
+ <spinner label="Altura" name="inventory_snapshot_height"/>
+ <check_box label="Mantener las proporciones" name="inventory_keep_aspect_check"/>
+ <button label="Cancelar" name="cancel_btn"/>
+ <button label="Guardar" name="save_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_local.xml b/indra/newview/skins/default/xui/es/panel_snapshot_local.xml
new file mode 100644
index 0000000000..08c45d2e76
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_snapshot_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_local">
+ <text name="title">
+ Guardar en mi ordenador
+ </text>
+ <combo_box label="Resoluci籀n" name="local_size_combo">
+ <combo_box.item label="Ventana actual" name="CurrentWindow"/>
+ <combo_box.item label="320x240" name="320x240"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1280x1024" name="1280x1024"/>
+ <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="Personalizado" name="Custom"/>
+ </combo_box>
+ <layout_stack name="local_image_params_ls">
+ <layout_panel name="local_image_size_lp">
+ <spinner label="Ancho" name="local_snapshot_width"/>
+ <spinner label="Altura" name="local_snapshot_height"/>
+ <check_box label="Mantener las proporciones" name="local_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="local_image_format_quality_lp">
+ <combo_box label="Formato" name="local_format_combo">
+ <combo_box.item label="PNG (sin p矇rdida)" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP (sin p矇rdida)" name="BMP"/>
+ </combo_box>
+ <slider label="Calidad de la imagen" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+ <button label="Cancelar" name="cancel_btn"/>
+ <flyout_button label="Guardar" name="save_btn" tool_tip="Guardar la imagen en un archivo">
+ <flyout_button.item label="Guardar" name="save_item"/>
+ <flyout_button.item label="Guardar como..." name="saveas_item"/>
+ </flyout_button>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml
new file mode 100644
index 0000000000..2b2584f66c
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_options">
+ <button label="Publicar en los comentarios de Mi perfil" name="save_to_profile_btn"/>
+ <button label="Correo-e" name="save_to_email_btn"/>
+ <button label="Guardar en Mi inventario ([AMOUNT] L$)" name="save_to_inventory_btn"/>
+ <button label="Guardar en mi ordenador" name="save_to_computer_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml
new file mode 100644
index 0000000000..649d547ba0
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_postcard">
+ <string name="default_subject">
+ Postal desde [SECOND_LIFE].
+ </string>
+ <string name="default_message">
+ 癒Mira esto!
+ </string>
+ <string name="upload_message">
+ Enviando...
+ </string>
+ <text name="title">
+ Correo-e
+ </text>
+ <button label="Mensaje" name="message_btn"/>
+ <button label="Ajustes" name="settings_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml
new file mode 100644
index 0000000000..6a0bc22d68
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_profile">
+ <text name="title">
+ Publicar en los comentarios de Mi perfil
+ </text>
+ <combo_box label="Resoluci籀n" name="profile_size_combo">
+ <combo_box.item label="Ventana actual" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Personalizado" name="Custom"/>
+ </combo_box>
+ <layout_stack name="profile_image_params_ls">
+ <layout_panel name="profile_image_size_lp">
+ <spinner label="Ancho" name="profile_snapshot_width"/>
+ <spinner label="Altura" name="profile_snapshot_height"/>
+ <check_box label="Mantener las proporciones" name="profile_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="profile_image_metadata_lp">
+ <text name="caption_label">
+ T穩tulo:
+ </text>
+ <check_box initial_value="true" label="Incluir ubicaci籀n" name="add_location_cb"/>
+ </layout_panel>
+ </layout_stack>
+ <button label="Cancelar" name="cancel_btn"/>
+ <button label="Publicar" name="post_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index e3ea4baa6c..2a6f32f84f 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -1199,7 +1199,7 @@ Intenta iniciar sesi籀n de nuevo en unos instantes.
No tienes en tu inventario una copia de esta textura
</string>
<string name="InventoryInboxNoItems">
- Aqu穩 se entregar獺n los objetos comprados en el mercado.
+ Cuando compres un objeto o lo recibas por otra v穩a, aparecer獺 aqu穩, para que puedas arrastrarlo a una carpeta de tu inventario o eliminarlo si no deseas conservarlo.
</string>
<string name="MarketplaceURL">
http://marketplace.[DOMAIN_NAME]
@@ -1391,6 +1391,9 @@ Intenta iniciar sesi籀n de nuevo en unos instantes.
<string name="no_attachments">
No tienes puestos anexos
</string>
+ <string name="Attachments remain">
+ Anexos (quedan [COUNT] ranuras)
+ </string>
<string name="Buy">
Comprar
</string>
@@ -1517,6 +1520,12 @@ Intenta iniciar sesi籀n de nuevo en unos instantes.
<string name="Right Pec">
Pecho derecho
</string>
+ <string name="Neck">
+ Cuello
+ </string>
+ <string name="Avatar Center">
+ Centro del avatar
+ </string>
<string name="Invalid Attachment">
Punto de colocaci籀n no v獺lido
</string>
@@ -3943,6 +3952,18 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="you_paid_ldollars_no_name">
Has pagado [AMOUNT] L$ por [REASON].
</string>
+ <string name="you_paid_failure_ldollars">
+ No has pagado a [NAME] [AMOUNT] L$ [REASON].
+ </string>
+ <string name="you_paid_failure_ldollars_no_info">
+ No has pagado [AMOUNT] L$.
+ </string>
+ <string name="you_paid_failure_ldollars_no_reason">
+ No has pagado a [NAME] [AMOUNT] L$.
+ </string>
+ <string name="you_paid_failure_ldollars_no_name">
+ No has pagado [AMOUNT] L$ [REASON].
+ </string>
<string name="for item">
para [ITEM]
</string>
@@ -4353,6 +4374,12 @@ Int矇ntalo incluyendo la ruta de acceso al editor entre comillas
<string name="ExternalEditorFailedToRun">
Error al ejecutar el editor externo.
</string>
+ <string name="TranslationFailed">
+ Error al traducir: [REASON]
+ </string>
+ <string name="TranslationResponseParseError">
+ Error al analizar la respuesta de la traducci籀n.
+ </string>
<string name="Esc">
Esc
</string>
@@ -4723,7 +4750,7 @@ Int矇ntalo incluyendo la ruta de acceso al editor entre comillas
Minimapa
</string>
<string name="Command_Move_Label">
- Moverme
+ Caminar / Correr / Volar
</string>
<string name="Command_People_Label">
Gente
@@ -4750,10 +4777,10 @@ Int矇ntalo incluyendo la ruta de acceso al editor entre comillas
Hablar
</string>
<string name="Command_View_Label">
- Visi籀n
+ Controles de la c獺mara
</string>
<string name="Command_Voice_Label">
- Chat de voz
+ Configuraci籀n de voz
</string>
<string name="Command_AboutLand_Tooltip">
Informaci籀n sobre el terreno que vas a visitar
@@ -4825,7 +4852,16 @@ Int矇ntalo incluyendo la ruta de acceso al editor entre comillas
Cambiando el 獺ngulo de la c獺mara
</string>
<string name="Command_Voice_Tooltip">
- Personas pr籀ximas con capacidad de voz
+ Controles de volumen para las llamadas y la gente que se encuentre cerca de ti en el mundo virtual
+ </string>
+ <string name="Toolbar_Bottom_Tooltip">
+ actualmente en tu barra de herramientas inferior
+ </string>
+ <string name="Toolbar_Left_Tooltip">
+ actualmente en tu barra de herramientas izquierda
+ </string>
+ <string name="Toolbar_Right_Tooltip">
+ actualmente en tu barra de herramientas derecha
</string>
<string name="Retain%">
% retenci籀n
@@ -4851,4 +4887,19 @@ Int矇ntalo incluyendo la ruta de acceso al editor entre comillas
<string name="Normal">
Normal
</string>
+ <string name="snapshot_quality_very_low">
+ Muy bajo
+ </string>
+ <string name="snapshot_quality_low">
+ Bajo
+ </string>
+ <string name="snapshot_quality_medium">
+ Medio
+ </string>
+ <string name="snapshot_quality_high">
+ Alto
+ </string>
+ <string name="snapshot_quality_very_high">
+ Muy alto
+ </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 e785a7ac40..a23d9c43d0 100644
--- a/indra/newview/skins/default/xui/es/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/es/teleport_strings.xml
@@ -20,8 +20,8 @@ Si sigues recibiendo este mensaje, por favor, acude al [SUPPORT_SITE].
Vuelva a intentarlo en un momento.
</message>
<message name="NoHelpIslandTP">
- No puede teleportarse de vuelta a la Welcome Island (&apos;Isla de Ayuda&apos;).
-Vaya a la &apos;Welcome Island Public&apos; (&apos;Isla P繳blica de Ayuda&apos;) para repetir el tutorial.
+ No te puedes volver a teleportar a la isla de bienvenida.
+Para repetir el tutorial, visita la isla de bienvenida p繳blica.
</message>
<message name="noaccess_tport">
Lo sentimos, pero no tienes acceso al destino de este teleporte.
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
index 4d02513a53..4409949584 100644
--- a/indra/newview/skins/default/xui/fr/floater_about.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about.xml
@@ -67,32 +67,34 @@ Version serveur vocal : [VOICE_VERSION]
<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)
-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).
-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.
-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
-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.
+ 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)
+ 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).
+ 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.
+ 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
+ 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.
-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.
+ 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.
-Tous droits r矇serv矇s. Voir licenses.txt pour plus d&apos;informations.
+ Ce logiciel contient du code source fourni par NVIDIA Corporation.
-Codage audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+ Tous droits r矇serv矇s. Voir licenses.txt pour plus d&apos;informations.
+
+ Codage audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
</text_editor>
</panel>
</tab_container>
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 9771c3f7fd..b554a0a892 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -132,7 +132,7 @@
Trafic :
</text>
<text name="DwellText">
- 0
+ Chargement...
</text>
<button label="Acheter du terrain" label_selected="Acheter le terrain..." left_delta="60" name="Buy Land..." width="125"/>
<button label="Vente Linden" label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit 礙tre la propri矇t矇 d&apos;un r矇sident, avoir un contenu d矇fini et ne pas 礙tre aux ench癡res."/>
@@ -313,13 +313,15 @@ Seules les parcelles de grande taille peuvent appara簾tre dans la recherche.
Pas de bousculades (les r癡gles de la r矇gion priment)
</panel.string>
<panel.string name="see_avs_text">
- Voir et chatter avec les r矇sidents sur cette parcelle
+ Les avatars sur les autres parcelles peuvent voir
</panel.string>
<text name="allow_label">
Autoriser les autres r矇sidents :
</text>
- <check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est coch矇e, n&apos;importe qui peut terraformer votre terrain. Il vaut mieux ne pas cocher cette option pour toujours pouvoir modifer votre propre terrain."/>
- <check_box label="Voler" name="check fly" tool_tip="Si cette option est coch矇e, les r矇sidents peuvent voler sur votre terrain. Si elle n&apos;est pas coch矇e, ils ne pourront voler que lorsqu&apos;ils arrivent et passent au dessus de votre terrain."/>
+ <text name="allow_label0">
+ Voler:
+ </text>
+ <check_box label="Tous" name="check fly" tool_tip="Si cette option est coch矇e, les r矇sidents peuvent voler sur votre terrain. Si elle n&apos;est pas coch矇e, ils ne pourront voler que lorsqu&apos;ils arrivent et passent au dessus de votre terrain."/>
<text name="allow_label2">
Construire :
</text>
@@ -335,9 +337,6 @@ Seules les parcelles de grande taille peuvent appara簾tre dans la recherche.
</text>
<check_box label="Tous" name="check other scripts"/>
<check_box label="Groupe" name="check group scripts"/>
- <text name="land_options_label">
- Options du terrain:
- </text>
<check_box label="S矇curis矇 (pas de d矇g璽ts)" name="check safe" tool_tip="Si cette option est coch矇e, le terrain est s矇curis矇 et il n&apos;y pas de risques de dommages caus矇s par des combats. Si elle est d矇coch矇e, des dommages caus矇s par les combats peuvent avoir lieu."/>
<check_box label="Pas de bousculades" name="PushRestrictCheck" tool_tip="Emp礙che l&apos;utilisation de scripts causant des bousculades. Cette option est utile pour emp礙cher les comportements abusifs sur votre terrain."/>
<check_box label="Afficher le lieu dans la recherche (30 L$/semaine)" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les r矇sultats de recherche"/>
@@ -378,9 +377,9 @@ Seules les parcelles de grande taille peuvent appara簾tre dans la recherche.
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Cliquez pour s矇lectionner une image"/>
<text name="allow_label5">
- Autoriser les r矇sidents sur les autres parcelles :
+ et chatter avec les avatars sur cette parcelle
</text>
- <check_box label="Voir les avatars" name="SeeAvatarsCheck" tool_tip="Permettre aux r矇sidents pr矇sents sur d&apos;autres parcelles de voir et chatter avec les r矇sidents pr矇sents sur cette parcelle et vous permettre de les voir et de chatter avec eux."/>
+ <check_box label="Voir les avatars" name="SeeAvatarsCheck" tool_tip="Permettre aux avatars pr矇sents sur d&apos;autres parcelles de voir et chatter avec les avatars pr矇sents sur cette parcelle et vous de les voir et de chatter avec eux."/>
<text name="landing_point">
Lieu d&apos;arriv矇e: [LANDING]
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar.xml b/indra/newview/skins/default/xui/fr/floater_avatar.xml
index cfbac66c0e..7cbb50a3d6 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Avatar" title="CHOIX D&apos;AVATAR"/>
+<floater name="Avatar" title="CHOISIR UN AVATAR"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
index d9e8e8821d..148a5a35d2 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
@@ -22,10 +22,10 @@ le Lindex...
<text name="currency_action">
Je veux acheter
</text>
- <text name="currency_label" left="308">
+ <text left="308" name="currency_label">
L$
</text>
- <line_editor label="L$" name="currency_amt" width="65" left_pad="-85">
+ <line_editor label="L$" left_pad="-85" name="currency_amt" width="65">
1234
</line_editor>
<text name="buying_label">
@@ -47,13 +47,13 @@ le Lindex...
[AMT] L$
</text>
<text name="currency_links">
- [http://www.secondlife.com/my/account/payment_method_management.php?lang=fr-FR mode de paiement] | [http://www.secondlife.com/my/account/currency.php?lang=fr-FR devise]
+ [http://www.secondlife.com/my/account/payment_method_management.php mode de paiement] | [http://www.secondlife.com/my/account/currency.php devise]
</text>
<text name="exchange_rate_note">
Saisissez nouveau le montant pour voir le taux de change actuel.
</text>
<text name="purchase_warning_repurchase">
- Confirmer cet achat n'ach癡te que des L$, pas l'objet.
+ Confirmer cet achat n&apos;ach癡te que des L$, pas l&apos;objet.
</text>
<text bottom_delta="16" name="purchase_warning_notenough">
Vous n&apos;achetez pas assez de L$. Veuillez augmenter le montant.
diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml
index 77d3c2cfe4..f2b0ee8af3 100644
--- a/indra/newview/skins/default/xui/fr/floater_camera.xml
+++ b/indra/newview/skins/default/xui/fr/floater_camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="camera_floater" title="AFFICHER">
+<floater name="camera_floater" title="PARAMTRES DE LA CAMRA">
<floater.string name="rotate_tooltip">
Faire tourner la cam矇ra autour du point central
</floater.string>
diff --git a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
index 8ad301823b..2bc76e0c63 100644
--- a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
@@ -4,7 +4,7 @@
Filtres:
</text>
<check_box label="Filtre anisotrope (plus lent si activ矇)" name="ani"/>
- <text name="Antialiasing:">
+ <text name="antialiasing label">
Anti-aliasing :
</text>
<combo_box label="Anti-aliasing" name="fsaa" width="84">
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 a26deb1aef..a3b50351ae 100644
--- a/indra/newview/skins/default/xui/fr/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_model_preview.xml
@@ -4,6 +4,9 @@
<string name="status_parse_error">
Erreur: Probl癡me d&apos;analyse de fichier .dae; reportez-vous au journal pour plus de d矇tails.
</string>
+ <string name="status_material_mismatch">
+ Erreur: le mat矇riau du mod癡le ne correspond pas un sous-ensemble du mod癡le de r矇f矇rence.
+ </string>
<string name="status_reading_file">
Chargement...
</string>
@@ -137,7 +140,7 @@
</panel>
<panel name="physics analysis">
<text name="method_label">
- tape2: Analyse
+ tape2: Analyser
</text>
<text name="analysis_method_label">
Moyen :
diff --git a/indra/newview/skins/default/xui/fr/floater_model_wizard.xml b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
index cd2eb761ec..63feb1d403 100644
--- a/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
@@ -20,6 +20,9 @@
Choisir un fichier de mod癡le charger
</text>
<button label="Parcourir..." label_selected="Parcourir..." name="browse"/>
+ <text name="Model types">
+ Second Life prend en charge les fichiers COLLADA (.dae).
+ </text>
<text name="dimensions">
X Y Z
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml
index 0b0ec51846..853af2afdf 100644
--- a/indra/newview/skins/default/xui/fr/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_moveview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater" title="BOUGER">
+<floater name="move_floater" title="MARCHER / COURIR / VOLER">
<string name="walk_forward_tooltip">
Marcher en avant (appuyer sur la fl癡che vers le haut ou W)
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index 365ff77ff9..9244051edc 100644
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -3,73 +3,63 @@
<floater.string name="unknown">
inconnu
</floater.string>
- <radio_group label="Type de photo" name="snapshot_type_radio">
- <radio_item label="E-mail" name="postcard"/>
- <radio_item label="Mon inventaire ([AMOUNT] L$)" name="texture"/>
- <radio_item label="Enregistrer sur mon ordinateur" name="local"/>
- </radio_group>
+ <string name="postcard_progress_str">
+ Envoi par e-mail
+ </string>
+ <string name="profile_progress_str">
+ Publication
+ </string>
+ <string name="inventory_progress_str">
+ Enregistrement dans l&apos;inventaire
+ </string>
+ <string name="local_progress_str">
+ Enregistrement sur l&apos;ordinateur
+ </string>
+ <string name="profile_succeeded_str">
+ Image charg矇e
+ </string>
+ <string name="postcard_succeeded_str">
+ Envoi par e-mail effectu矇 !
+ </string>
+ <string name="inventory_succeeded_str">
+ Enregistrement dans l&apos;inventaire effectu矇 !
+ </string>
+ <string name="local_succeeded_str">
+ Enregistrement sur l&apos;ordinateur effectu矇 !
+ </string>
+ <string name="profile_failed_str">
+ chec de chargement de l&apos;image sur le flux de votre profil.
+ </string>
+ <string name="postcard_failed_str">
+ chec d&apos;envoi par e-mail.
+ </string>
+ <string name="inventory_failed_str">
+ chec d&apos;enregistrement dans l&apos;inventaire.
+ </string>
+ <string name="local_failed_str">
+ chec d&apos;enregistrement sur l&apos;ordinateur.
+ </string>
+ <button name="advanced_options_btn" tool_tip="Options avanc矇es"/>
+ <text name="image_res_text">
+ [WIDTH] x [HEIGHT] px
+ </text>
<text name="file_size_label">
[SIZE] Ko
</text>
- <button label="Rafra簾chir" name="new_snapshot_btn"/>
- <button label="Envoyer" name="send_btn"/>
- <button label="Enreg. ([AMOUNT] L$)" name="upload_btn"/>
- <flyout_button label="Enregistrer" name="save_btn" tool_tip="Enregistrer l&apos;image sous forme de fichier">
- <flyout_button.item label="Enregistrer" name="save_item"/>
- <flyout_button.item label="Enregistrer sous..." name="saveas_item"/>
- </flyout_button>
- <button label="Plus" name="more_btn" tool_tip="Options avanc矇es"/>
- <button label="Moins" name="less_btn" tool_tip="Options avanc矇es"/>
- <button label="Annuler" name="discard_btn"/>
- <text name="type_label2">
- Taille
- </text>
- <text name="format_label">
- Format
- </text>
- <combo_box label="R矇solution" name="postcard_size_combo">
- <combo_box.item label="Fen礙tre actuelle" name="CurrentWindow"/>
- <combo_box.item label="640x 480" name="640x480"/>
- <combo_box.item label="800x 600" name="800x600"/>
- <combo_box.item label="1024x 768" name="1024x768"/>
- <combo_box.item label="Personnalis矇e" name="Custom"/>
- </combo_box>
- <combo_box label="R矇solution" name="texture_size_combo">
- <combo_box.item label="Fen礙tre actuelle" name="CurrentWindow"/>
- <combo_box.item label="Petite (128 x 128)" name="Small(128x128)"/>
- <combo_box.item label="Moyenne (256 x 256)" name="Medium(256x256)"/>
- <combo_box.item label="Grande (512 x 512)" name="Large(512x512)"/>
- <combo_box.item label="Personnalis矇e" name="Custom"/>
- </combo_box>
- <combo_box label="R矇solution" name="local_size_combo">
- <combo_box.item label="Fen礙tre actuelle" name="CurrentWindow"/>
- <combo_box.item label="320x 240" name="320x240"/>
- <combo_box.item label="640x 480" name="640x480"/>
- <combo_box.item label="800x 600" name="800x600"/>
- <combo_box.item label="1024x 768" name="1024x768"/>
- <combo_box.item label="1280x 1024" name="1280x1024"/>
- <combo_box.item label="1600x 1200" name="1600x1200"/>
- <combo_box.item label="Personnalis矇e" name="Custom"/>
- </combo_box>
- <combo_box label="Format" name="local_format_combo">
- <combo_box.item label="PNG" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP" name="BMP"/>
- </combo_box>
- <spinner label="Larg." name="snapshot_width"/>
- <spinner label="Haut." name="snapshot_height"/>
- <check_box label="Contraindre les proportions" name="keep_aspect_check"/>
- <slider label="Qualit矇 de l&apos;image" name="image_quality_slider"/>
- <text name="layer_type_label">
- Capturer:
- </text>
- <combo_box label="Couches d&apos;images" name="layer_types">
- <combo_box.item label="Couleurs" name="Colors"/>
- <combo_box.item label="Profondeur" name="Depth"/>
- </combo_box>
- <check_box label="Interface" name="ui_check"/>
- <check_box label="HUD" name="hud_check"/>
- <check_box label="Garder ouvert apr癡s enregistrement" name="keep_open_check"/>
- <check_box label="Arr礙t sur image (plein 矇cran)" name="freeze_frame_check"/>
- <check_box label="Actualisation automatique" name="auto_snapshot_check"/>
+ <panel name="advanced_options_panel">
+ <text name="advanced_options_label">
+ OPTIONS AVANCES
+ </text>
+ <text name="layer_type_label">
+ Capturer:
+ </text>
+ <combo_box label="Couches d&apos;images" name="layer_types">
+ <combo_box.item label="Couleurs" name="Colors"/>
+ <combo_box.item label="Profondeur" name="Depth"/>
+ </combo_box>
+ <check_box label="Interface" name="ui_check"/>
+ <check_box label="HUD" name="hud_check"/>
+ <check_box label="Arr礙t sur image (plein 矇cran)" name="freeze_frame_check"/>
+ <check_box label="Actualisation automatique" name="auto_snapshot_check"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_toybox.xml b/indra/newview/skins/default/xui/fr/floater_toybox.xml
index 33aea6bb2d..f99d3d30b5 100644
--- a/indra/newview/skins/default/xui/fr/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/fr/floater_toybox.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Toybox" title="PERSONNALISER LES BARRES D&apos;OUTILS">
+<floater name="Toybox" title="BOUTONS DES BARRES D&apos;OUTILS">
<text name="toybox label 1">
Ajouter ou supprimer des boutons : les faire glisser vers ou depuis les barres d&apos;outils.
</text>
<text name="toybox label 2">
Ils s&apos;afficheront comme indiqu矇 ou comme des ic繫nes, selon les param癡tres de barre d&apos;outils.
</text>
+ <button label="Effacer tout" label_selected="Effacer tout" name="btn_clear_all"/>
<button label="Valeurs par d矇faut" label_selected="Valeurs par d矇faut" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_translation_settings.xml b/indra/newview/skins/default/xui/fr/floater_translation_settings.xml
new file mode 100644
index 0000000000..c7582f110f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_translation_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_translation_settings" title="TRADUCTION AUTOMATIQUE">
+ <string name="bing_api_key_not_verified">
+ ID d&apos;application Bing non v矇rifi矇. Veuillez r矇essayer.
+ </string>
+ <string name="google_api_key_not_verified">
+ Cl矇 d&apos;API Google non v矇rifi矇e. Veuillez r矇essayer.
+ </string>
+ <string name="bing_api_key_verified">
+ ID d&apos;application Bing v矇rifi矇.
+ </string>
+ <string name="google_api_key_verified">
+ Cl矇 d&apos;API Google v矇rifi矇e.
+ </string>
+ <check_box label="Activer la traduction automatique lors des chats" name="translate_chat_checkbox"/>
+ <text name="translate_language_label">
+ Traduire les chats en:
+ </text>
+ <combo_box name="translate_language_combo">
+ <combo_box.item label="Langue syst癡me par d矇faut" name="System Default Language"/>
+ <combo_box.item label="English (Anglais)" name="English"/>
+ <combo_box.item label="Dansk (Danois)" name="Danish"/>
+ <combo_box.item label="Deutsch (Allemand)" name="German"/>
+ <combo_box.item label="Espa簽ol (Espagnol)" name="Spanish"/>
+ <combo_box.item label="Fran癟ais" name="French"/>
+ <combo_box.item label="Italiano (Italien)" name="Italian"/>
+ <combo_box.item label="Magyar (Hongrois)" name="Hungarian"/>
+ <combo_box.item label="Nederlands (N矇erlandais)" name="Dutch"/>
+ <combo_box.item label="Polski (Polonais)" name="Polish"/>
+ <combo_box.item label="Portugu礙s (Portugais)" name="Portugese"/>
+ <combo_box.item label="郕邽邿 (Russe)" name="Russian"/>
+ <combo_box.item label="T羹rk癟e (Turc)" name="Turkish"/>
+ <combo_box.item label="苺郕訄郇郕訄 (Ukrainien)" name="Ukrainian"/>
+ <combo_box.item label="銝剜 (甇擃) (Chinois)" name="Chinese"/>
+ <combo_box.item label="交祈 (Japonais)" name="Japanese"/>
+ <combo_box.item label="窱原 (Cor矇en)" name="Korean"/>
+ </combo_box>
+ <text name="tip">
+ Choisir le service utiliser :
+ </text>
+ <radio_group name="translation_service_rg">
+ <radio_item initial_value="bing" label="Bing Translator" name="bing"/>
+ <radio_item initial_value="google" label="Google Translate" name="google"/>
+ </radio_group>
+ <text name="bing_api_key_label">
+ [http://www.bing.com/developers/createapp.aspx ID d&apos;application] Bing :
+ </text>
+ <button label="V矇rifier" name="verify_bing_api_key_btn"/>
+ <text name="google_api_key_label">
+ [http://code.google.com/apis/language/translate/v2/getting_started.html#auth Cl矇 d&apos;API] Google :
+ </text>
+ <button label="V矇rifier" name="verify_google_api_key_btn"/>
+ <text name="google_links_text">
+ [http://code.google.com/apis/language/translate/v2/pricing.html Tarification] | [https://code.google.com/apis/console Statistiques]
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
index 2b2bb8bbe3..fc4de4a5a6 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="CONTROLES DE LA VOIX">
<string name="title_nearby">
- Chat pr癡s de vous
+ PARAMTRES VOCAUX
</string>
<string name="title_group">
- Appel de groupe avec [GROUP]
+ APPEL DE GROUPE AVEC [GROUP]
</string>
<string name="title_adhoc">
- T矇l矇conf矇rence
+ CONFRENCE
</string>
<string name="title_peer_2_peer">
- Appel avec [NAME]
+ APPEL AVEC [NAME]
</string>
<string name="no_one_near">
Il n&apos;y a personne pr癡s de vous avec le chat vocal activ矇
diff --git a/indra/newview/skins/default/xui/fr/menu_toolbars.xml b/indra/newview/skins/default/xui/fr/menu_toolbars.xml
index d3e9f92770..f74d206d56 100644
--- a/indra/newview/skins/default/xui/fr/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/fr/menu_toolbars.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Toolbars Popup">
- <menu_item_call label="Choisir les boutons..." name="Chose Buttons"/>
+ <menu_item_call label="Supprimer ce bouton" name="Remove button"/>
+ <menu_item_call label="Boutons des barres d&apos;outils..." name="Choose Buttons"/>
<menu_item_check label="Ic繫nes et libell矇s" name="icons_with_text"/>
<menu_item_check label="Ic繫nes uniquement" name="icons_only"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index d3b48639e0..9303815c30 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu_bar name="Main Menu">
<menu label="Moi" name="Me">
- <menu_item_call label="Page d&apos;accueil..." name="Manage My Account">
- <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=fr"/>
- </menu_item_call>
<menu_item_call label="Profil..." name="Profile"/>
<menu_item_call label="Apparence..." name="ChangeOutfit"/>
+ <menu_item_call label="Choisir un avatar..." name="Avatar Picker"/>
<menu_item_check label="Inventaire..." name="Inventory"/>
- <menu_item_check label="Gestes..." name="Gestures"/>
- <menu_item_check label="Chat vocal..." name="ShowVoice"/>
+ <menu_item_call label="Nouvelle fen礙tre d&apos;inventaire" name="NewInventoryWindow"/>
+ <menu_item_call label="Endroits..." name="Places"/>
+ <menu_item_call label="Favoris..." name="Picks"/>
+ <menu_item_call label="Param癡tres de la cam矇ra..." name="Camera Controls"/>
<menu label="D矇placement" name="Movement">
<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
<menu_item_check label="Voler" name="Fly"/>
@@ -22,34 +22,39 @@
<menu_item_call label="Demander le statut Admin" name="Request Admin Options"/>
<menu_item_call label="Quitter le statut Admin" name="Leave Admin Options"/>
<menu_item_call label="Acheter des L$" name="Buy and Sell L$"/>
+ <menu_item_call label="Page d&apos;accueil du compte..." name="Manage My Account">
+ <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=fr"/>
+ </menu_item_call>
<menu_item_call label="Pr矇f矇rences..." name="Preferences"/>
- <menu_item_call label="Barres d&apos;outils..." name="Toolbars"/>
+ <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_call label="Quitter [APP_NAME]" name="Quit"/>
</menu>
<menu label="Communiquer" name="Communicate">
- <menu_item_call label="Mes amis" name="My Friends"/>
- <menu_item_call label="Mes groupes" name="My Groups"/>
- <menu_item_check label="Chat pr癡s de moi" name="Nearby Chat"/>
- <menu_item_call label="Personnes pr癡s de moi" name="Active Speakers"/>
- <menu_item_check label="Chat vocal pr癡s de vous" name="Nearby Voice"/>
+ <menu_item_check label="Chat..." name="Nearby Chat"/>
+ <menu_item_check label="Parler" name="Speak"/>
+ <menu_item_check label="Param癡tres vocaux..." name="Nearby Voice"/>
+ <menu_item_check label="Effet de voix..." name="ShowVoice"/>
+ <menu_item_check label="Gestes..." name="Gestures"/>
+ <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>
<menu label="Monde" name="World">
- <menu_item_check label="Mini-carte" name="Mini-Map"/>
+ <menu_item_call label="Cr矇er un rep癡re pour ce lieu" name="Create Landmark Here"/>
+ <menu_item_call label="Destinations..." name="Destinations"/>
<menu_item_check label="Carte du monde" name="World Map"/>
+ <menu_item_check label="Mini-carte" name="Mini-Map"/>
<menu_item_check label="Rechercher" name="Search"/>
+ <menu_item_call label="Me t矇l矇porter chez moi" name="Teleport Home"/>
+ <menu_item_call label="D矇finir le domicile ici" name="Set Home to Here"/>
<menu_item_call label="Photo" name="Take Snapshot"/>
- <menu_item_call label="Cr矇er un rep癡re pour ce lieu" name="Create Landmark Here"/>
- <menu label="Profil du lieu" name="Land">
- <menu_item_call label="Profil du lieu" name="Place Profile"/>
- <menu_item_call label=" propos du terrain" name="About Land"/>
- <menu_item_call label="R矇gion/Domaine" name="Region/Estate"/>
- </menu>
+ <menu_item_call label="Profil du lieu" name="Place Profile"/>
+ <menu_item_call label=" propos du terrain" name="About Land"/>
+ <menu_item_call label="R矇gion/Domaine" name="Region/Estate"/>
+ <menu_item_call label="Mes terrains..." name="My Land"/>
<menu_item_call label="Acheter ce terrain" name="Buy Land"/>
- <menu_item_call label="Mes terrains" name="My Land"/>
<menu label="Afficher" name="LandShow">
- <menu_item_check label="Contr繫les de mouvement" name="Movement Controls"/>
- <menu_item_check label="Contr繫les daffichage" name="Camera Controls"/>
<menu_item_check label="Lignes d&apos;interdiction" name="Ban Lines"/>
<menu_item_check label="Balises" name="beacons"/>
<menu_item_check label="Limites du terrain" name="Property Lines"/>
@@ -58,16 +63,15 @@
<menu_item_check label="Propri矇t矇s de la parcelle" name="Parcel Properties"/>
<menu_item_check label="Menu Avanc矇" name="Show Advanced Menu"/>
</menu>
- <menu_item_call label="Me t矇l矇porter chez moi" name="Teleport Home"/>
- <menu_item_call label="D矇finir le domicile ici" name="Set Home to Here"/>
<menu label="Luminosit矇" name="Environment Settings">
<menu_item_call label="Aube" name="Sunrise"/>
<menu_item_call label="Milieu de journ矇e" name="Noon"/>
<menu_item_call label="Coucher de soleil" name="Sunset"/>
<menu_item_call label="Minuit" name="Midnight"/>
+ <menu_item_call label="Utiliser les r矇glages de la r矇gion" name="Use Region Settings"/>
</menu>
- <menu label="diteur d&apos;environnement" name="Enviroment Editor">
- <menu_item_call label="Param癡tres d&apos;environnement..." name="Enviroment Settings"/>
+ <menu label="diteur d&apos;environnement" name="Environment Editor">
+ <menu_item_call label="Param癡tres d&apos;environnement..." name="Environment Settings"/>
<menu label="Pr矇r矇glages de l&apos;eau" name="Water Presets">
<menu_item_call label="Nouveau pr矇r矇glage..." name="new_water_preset"/>
<menu_item_call label="Modifier un pr矇r矇glage..." name="edit_water_preset"/>
@@ -146,6 +150,7 @@
<menu_item_call label="Refaire" name="Redo"/>
</menu>
<menu label="Aide" name="Help">
+ <menu_item_call label="Aide rapide..." name="How To"/>
<menu_item_call label="Aide de [SECOND_LIFE]" name="Second Life Help"/>
<menu_item_call label="Signaler une infraction" name="Report Abuse"/>
<menu_item_call label="Signaler un bug" name="Report Bug"/>
@@ -200,11 +205,10 @@
<menu_item_check label="Utiliser le thread de lecture de plug-in" name="Use Plugin Read Thread"/>
<menu_item_call label="Effacer le cache du groupe" name="ClearGroupCache"/>
<menu_item_check label="Effet de lissage de la souris" name="Mouse Smoothing"/>
+ <menu_item_call label="Lib矇rer les touches" name="Release Keys"/>
<menu label="Raccourcis" name="Shortcuts">
<menu_item_call label="Image ([COST] L$)..." name="Upload Image"/>
<menu_item_check label="Rechercher" name="Search"/>
- <menu_item_call label="Rel璽cher les touches" name="Release Keys"/>
- <menu_item_call label="Taille de l&apos;interface par d矇faut" name="Set UI Size to Default"/>
<menu_item_check label="Afficher le menu Avanc矇 - raccourci existant" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Fermer la fen礙tre" name="Close Window"/>
<menu_item_call label="Fermer toutes les fen礙tres" name="Close All Windows"/>
@@ -290,6 +294,7 @@
<menu_item_check label="Lumi癡res" name="Lights"/>
<menu_item_check label="Squelette de collision" name="Collision Skeleton"/>
<menu_item_check label="Rayons" name="Raycast"/>
+ <menu_item_check label="Vecteurs de vent" name="Wind Vectors"/>
<menu_item_check label="Complexit矇 du rendu" name="rendercomplexity"/>
<menu_item_check label="Sculpture" name="Sculpt"/>
</menu>
@@ -302,7 +307,6 @@
<menu_item_check label="clairage et ombres" name="Lighting and Shadows"/>
<menu_item_check label="Ombres du soleil/de la lune/des projecteurs" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO et lissage des ombres" name="SSAO and Shadow Smoothing"/>
- <menu_item_check label="Illumination globale (exp矇rimental)" name="Global Illumination"/>
<menu_item_check label="D矇bogage GL" name="Debug GL"/>
<menu_item_check label="D矇bogage pipeline" name="Debug Pipeline"/>
<menu_item_check label="Masques alpha automatiques (diff矇r矇s)" name="Automatic Alpha Masks (deferred)"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index be6f1f8c31..2f9bf23bc4 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -980,7 +980,7 @@ Proposer [NAME] de devenir votre ami(e)?
</form>
</notification>
<notification name="RemoveFromFriends">
- Voulez-vous supprimer &lt;nolink&gt;[NAME]&lt;/nolink&gt; de votre liste d&apos;amis?
+ Voulez-vous supprimer &lt;nolink&gt;[NAME]&lt;/nolink&gt; de votre liste d&apos;amis ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="RemoveMultipleFromFriends">
@@ -1105,8 +1105,13 @@ C矇der ces [AREA] m簡 de terrain au groupe [GROUP_NAME] ?
<notification name="DisplaySetToSafe">
Les param癡tres d&apos;affichage sont au niveau le plus s羶r, comme vous l&apos;aviez indiqu矇.
</notification>
- <notification name="DisplaySetToRecommended">
- Vos param癡tres d&apos;affichage ont 矇t矇 r矇gl矇s avec une marge de s矇curit矇 en fonction de votre configuration syst癡me.
+ <notification name="DisplaySetToRecommendedGPUChange">
+ Les param癡tres d&apos;affichage ont 矇t矇 modifi矇s selon les niveaux recommand矇s car votre carte graphique
+[LAST_GPU] a 矇t矇 remplac矇e
+par une carte [THIS_GPU].
+ </notification>
+ <notification name="DisplaySetToRecommendedFeatureChange">
+ Les param癡tres d&apos;affichage ont 矇t矇 modifi矇s selon les niveaux recommand矇s en raison d&apos;un changement relatif au sous-syst癡me de rendu.
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
@@ -1910,9 +1915,15 @@ D矇placer les objets de l&apos;inventaire?
<usetemplate ignoretext="Confirmer avant de quitter" name="okcancelignore" notext="Ne pas quitter" yestext="Quitter"/>
</notification>
<notification name="ConfirmRestoreToybox">
- Etes-vous certain de vouloir restaurer vos boutons et barres d&apos;outils par d矇faut ?
+ Cette action r矇tablira vos boutons et barres d&apos;outils par d矇faut.
+
+Vous ne pouvez pas l&apos;annuler.
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearAllToybox">
+ Cette action replacera tous les boutons dans la bo簾te outils de sorte que vos barres d&apos;outils seront vides.
-Vous ne pouvez pas annuler cette action.
+Vous ne pouvez pas l&apos;annuler.
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="DeleteItems">
@@ -2236,14 +2247,16 @@ Veuillez s矇lectionner un seul objet.
Votre carte de visite a 矇t矇 refus矇e.
</notification>
<notification name="TeleportToLandmark">
- Vous pouvez vous t矇l矇porter vers des endroits comme [NAME] en ouvrant le panneau Lieux sur le c繫t矇 droit de votre 矇cran, puis en s矇lectionnant l&apos;onglet Rep癡res.
-Cliquez sur le rep癡re de votre choix pour le s矇lectionner, puis sur T矇l矇porter en bas du panneau.
-(Vous pouvez aussi double-cliquer sur le rep癡re ou cliquer dessus avec le bouton droit de la souris et s矇lectionner T矇l矇porter.)
+ Pour vous t矇l矇porter vers un lieu tel que [NAME], cliquez sur le bouton Endroits,
+ puis s矇lectionnez l&apos;onglet Rep癡res dans la fen礙tre qui s&apos;ouvre. Cliquez sur n&apos;importe quel
+ rep癡re pour le s矇lectionner, puis sur T矇l矇portation en bas de la fen礙tre.
+ (Vous pouvez aussi double-cliquer sur le rep癡re ou cliquer-droit dessus et
+ choisir T矇l矇portation).
</notification>
<notification name="TeleportToPerson">
- Vous pouvez contacter des r矇sidents comme [NAME] en ouvrant le panneau R矇sidents sur le c繫t矇 droit de votre 矇cran.
-S矇lectionnez le r矇sident de votre choix dans la liste, puis cliquez sur IM en bas du panneau.
-(Vous pouvez aussi double-cliquer sur le nom du r矇sident dans la liste ou cliquer dessus avec le bouton droit de la souris et s矇lectionner IM.)
+ Pour contacter un r矇sident tel que [NAME], cliquez sur le bouton Personnes, s矇lectionnez le r矇sident dans la fen礙tre qui s&apos;ouvre, puis cliquez sur IM en
+ bas de la fen礙tre.
+ (Vous pouvez aussi double-cliquer sur le nom du r矇sident dans la liste ou cliquer-droit dessus et choisir IM.)
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Vous ne pouvez pas s矇lectionner de terrain en dehors des limites du serveur.
@@ -2264,6 +2277,9 @@ Veuillez s矇lectionner un terrain plus petit.
<notification name="PaymentSent">
[MESSAGE]
</notification>
+ <notification name="PaymentFailure">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
Avis d&apos;矇v矇nement :
@@ -2798,7 +2814,7 @@ Voir le fichier journal pour plus de d矇tails.
avec les r矇sidents suivants :
[RESIDENTS] ?
- <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Ok"/>
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="ItemsShared">
Articles partag矇s.
@@ -2888,7 +2904,7 @@ Les r矇sidents rejoignant l&apos;appel ult矇rieurement seront 矇galement
ignor矇s, m礙me si vous quittez l&apos;appel.
Ignorer les autres ?
- <usetemplate ignoretext="Confirmer avant d&apos;ignorer les autres lors d&apos;un appel de groupe" name="okcancelignore" notext="Annuler" yestext="Ok"/>
+ <usetemplate ignoretext="Confirmer avant d&apos;ignorer les autres lors d&apos;un appel de groupe" name="okcancelignore" notext="Annuler" yestext="OK"/>
</notification>
<notification label="Chat" name="HintChat">
Pour participer la conversation, saisissez du texte dans le champ de chat situ矇 en dessous.
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skin.xml b/indra/newview/skins/default/xui/fr/panel_edit_skin.xml
index 9640adcdf8..f5f2738319 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_skin.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="Tatouage t礙te" name="Head Tattoos" tool_tip="Cliquez pour s矇lectionner une image" width="76"/>
- <texture_picker label="Tatouage haut" name="Upper Tattoos" tool_tip="Cliquez pour s矇lectionner une image" width="80"/>
- <texture_picker label="Tatouage bas" name="Lower Tattoos" tool_tip="Cliquez pour s矇lectionner une image"/>
+ <texture_picker label="T礙te" name="Head" tool_tip="Cliquer pour s矇lectionner une image."/>
+ <texture_picker label="Haut du corps" name="Upper Body" tool_tip="Cliquer pour s矇lectionner une image."/>
+ <texture_picker label="Bas du corps" name="Lower Body" tool_tip="Cliquer pour s矇lectionner une image."/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
index 31cb3308e3..00bd6e81ae 100644
--- a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="Traduction du chat" name="translate_chat_checkbox"/>
+ <check_box label="Traduire le chat" name="translate_chat_checkbox"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_postcard_message.xml b/indra/newview/skins/default/xui/fr/panel_postcard_message.xml
new file mode 100644
index 0000000000..0f8397cfb4
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_postcard_message.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_message">
+ <text name="to_label">
+ :
+ </text>
+ <text name="name_label">
+ De :
+ </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>
+ <button label="Annuler" name="cancel_btn"/>
+ <button label="Envoyer" name="send_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml b/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml
new file mode 100644
index 0000000000..6f4e9c23f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_settings">
+ <combo_box label="R矇solution" name="postcard_size_combo">
+ <combo_box.item label="Fen礙tre actuelle" name="CurrentWindow"/>
+ <combo_box.item label="640x 480" name="640x480"/>
+ <combo_box.item label="800x 600" name="800x600"/>
+ <combo_box.item label="1024x 768" name="1024x768"/>
+ <combo_box.item label="Personnalis矇e" name="Custom"/>
+ </combo_box>
+ <layout_stack name="postcard_image_params_ls">
+ <layout_panel name="postcard_image_size_lp">
+ <spinner label="Largeur" name="postcard_snapshot_width"/>
+ <spinner label="Hauteur" name="postcard_snapshot_height"/>
+ <check_box label="Conserver les proportions" name="postcard_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="postcard_image_format_quality_lp">
+ <slider label="Qualit矇 de l&apos;image" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index fa026d8106..76ed237451 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -29,30 +29,5 @@
<check_box label="Chats IM" name="EnableIMChatPopups" tool_tip="Cocher cette case pour qu&apos;un popup s&apos;affiche r矇ception d&apos;un message instantan矇."/>
<spinner label="Dur矇e de vie du popup Chat pr癡s de moi:" name="nearby_toasts_lifetime"/>
<spinner label="Disparition progressive du popup Chat pr癡s de moi:" name="nearby_toasts_fadingtime"/>
- <check_box name="translate_chat_checkbox"/>
- <text name="translate_chb_label">
- Utiliser la traduction automatique lors des chats
- </text>
- <text name="translate_language_text">
- Traduire le chat en:
- </text>
- <combo_box name="translate_language_combobox">
- <combo_box.item label="Choix par d矇faut" name="System Default Language"/>
- <combo_box.item label="English (Anglais)" name="English"/>
- <combo_box.item label="Dansk (Danois)" name="Danish"/>
- <combo_box.item label="Deutsch (Allemand)" name="German"/>
- <combo_box.item label="Espa簽ol (Espagnol)" name="Spanish"/>
- <combo_box.item label="Fran癟ais" name="French"/>
- <combo_box.item label="Italiano (Italien)" name="Italian"/>
- <combo_box.item label="Magyar (Hongrois)" name="Hungarian"/>
- <combo_box.item label="Nederlands (N矇erlandais)" name="Dutch"/>
- <combo_box.item label="Polski (Polonais)" name="Polish"/>
- <combo_box.item label="Portugu礙s (Portugais)" name="Portugese"/>
- <combo_box.item label="郕邽邿 (Russe)" name="Russian"/>
- <combo_box.item label="T羹rk癟e (Turc)" name="Turkish"/>
- <combo_box.item label="苺郕訄郇郕訄 (Ukrainien)" name="Ukrainian"/>
- <combo_box.item label="銝剜 (甇擃) (Chinois)" name="Chinese"/>
- <combo_box.item label="交祈 (Japonais)" name="Japanese"/>
- <combo_box.item label="窱原 (Cor矇en)" name="Korean"/>
- </combo_box>
+ <button label="Traduction automatique" name="ok_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
index 82780c27c5..83303950dc 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
@@ -15,7 +15,7 @@
Web :
</text>
<radio_group name="use_external_browser">
- <radio_item label="Utiliser mon navigateur (IE, Firefox, Safari)" name="external" tool_tip="Utiliser le navigateur web syst癡me par d矇faut pour l&apos;aide, les liens etc. Non recommand矇 en mode plein 矇cran." value="1"/>
+ <radio_item label="Utiliser mon navigateur (IE, Firefox, Safari)" name="external" tool_tip="Utiliser le navigateur web syst癡me par d矇faut pour l&apos;aide, les liens etc. Non recommand矇 en mode plein 矇cran." value="true"/>
<radio_item label="Utiliser le navigateur int矇gr矇" name="internal" tool_tip="Utilisez le navigateur int矇gr矇 pour obtenir de l&apos;aide, ouvrir des liens, etc. Ce navigateur s&apos;ouvre dans [APP_NAME]." value=""/>
</radio_group>
<check_box initial_value="true" label="Activer les plugins" name="browser_plugins_enabled"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml
new file mode 100644
index 0000000000..4454d2475e
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_inventory">
+ <text name="title">
+ Enregistrer dans mon inventaire
+ </text>
+ <text name="hint_lbl">
+ L&apos;enregistrement d&apos;une image dans votre inventaire co羶te [UPLOAD_COST] L$. Pour enregistrer votre image sous forme de texture, s矇lectionnez l&apos;un des formats carr矇s.
+ </text>
+ <combo_box label="R矇solution" name="texture_size_combo">
+ <combo_box.item label="Fen礙tre actuelle" name="CurrentWindow"/>
+ <combo_box.item label="Petite (128 x 128)" name="Small(128x128)"/>
+ <combo_box.item label="Moyenne (256 x 256)" name="Medium(256x256)"/>
+ <combo_box.item label="Grande (512 x 512)" name="Large(512x512)"/>
+ <combo_box.item label="Personnalis矇e" name="Custom"/>
+ </combo_box>
+ <spinner label="Largeur" name="inventory_snapshot_width"/>
+ <spinner label="Hauteur" name="inventory_snapshot_height"/>
+ <check_box label="Conserver les proportions" name="inventory_keep_aspect_check"/>
+ <button label="Annuler" name="cancel_btn"/>
+ <button label="Enregistrer" name="save_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml
new file mode 100644
index 0000000000..41264521fd
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_local">
+ <text name="title">
+ Enregistrer sur mon ordinateur
+ </text>
+ <combo_box label="R矇solution" name="local_size_combo">
+ <combo_box.item label="Fen礙tre actuelle" name="CurrentWindow"/>
+ <combo_box.item label="320x 240" name="320x240"/>
+ <combo_box.item label="640x 480" name="640x480"/>
+ <combo_box.item label="800x 600" name="800x600"/>
+ <combo_box.item label="1024x 768" name="1024x768"/>
+ <combo_box.item label="1280x 1024" name="1280x1024"/>
+ <combo_box.item label="1600x 1200" name="1600x1200"/>
+ <combo_box.item label="Personnalis矇e" name="Custom"/>
+ </combo_box>
+ <layout_stack name="local_image_params_ls">
+ <layout_panel name="local_image_size_lp">
+ <spinner label="Largeur" name="local_snapshot_width"/>
+ <spinner label="Hauteur" name="local_snapshot_height"/>
+ <check_box label="Conserver les proportions" name="local_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="local_image_format_quality_lp">
+ <combo_box label="Format" name="local_format_combo">
+ <combo_box.item label="PNG (sans perte)" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP (sans perte)" name="BMP"/>
+ </combo_box>
+ <slider label="Qualit矇 de l&apos;image" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+ <button label="Annuler" name="cancel_btn"/>
+ <flyout_button label="Enregistrer" name="save_btn" tool_tip="Enregistrer l&apos;image dans un fichier.">
+ <flyout_button.item label="Enregistrer" name="save_item"/>
+ <flyout_button.item label="Enregistrer sous..." name="saveas_item"/>
+ </flyout_button>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml
new file mode 100644
index 0000000000..db3fcbeac9
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_options">
+ <button label="Publier sur le flux de mon profil" name="save_to_profile_btn"/>
+ <button label="Envoyer par e-mail" name="save_to_email_btn"/>
+ <button label="Enregistrer dans mon inventaire ([AMOUNT] L$)" name="save_to_inventory_btn"/>
+ <button label="Enregistrer sur mon ordinateur" name="save_to_computer_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml
new file mode 100644
index 0000000000..bb23b52850
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_postcard">
+ <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>
+ <text name="title">
+ Envoyer par e-mail
+ </text>
+ <button label="Message" name="message_btn"/>
+ <button label="Param癡tres" name="settings_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml
new file mode 100644
index 0000000000..427ffe2113
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_profile">
+ <text name="title">
+ Publier sur le flux de mon profil
+ </text>
+ <combo_box label="R矇solution" name="profile_size_combo">
+ <combo_box.item label="Fen礙tre actuelle" name="CurrentWindow"/>
+ <combo_box.item label="640x 480" name="640x480"/>
+ <combo_box.item label="800x 600" name="800x600"/>
+ <combo_box.item label="1024x 768" name="1024x768"/>
+ <combo_box.item label="Personnalis矇e" name="Custom"/>
+ </combo_box>
+ <layout_stack name="profile_image_params_ls">
+ <layout_panel name="profile_image_size_lp">
+ <spinner label="Largeur" name="profile_snapshot_width"/>
+ <spinner label="Hauteur" name="profile_snapshot_height"/>
+ <check_box label="Conserver les proportions" name="profile_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="profile_image_metadata_lp">
+ <text name="caption_label">
+ L矇gende :
+ </text>
+ <check_box initial_value="true" label="Inclure l&apos;endroit" name="add_location_cb"/>
+ </layout_panel>
+ </layout_stack>
+ <button label="Annuler" name="cancel_btn"/>
+ <button label="Publier" name="post_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index f9f3366f63..d959a96565 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -1214,7 +1214,7 @@ Veuillez r矇essayer de vous connecter dans une minute.
Vous n&apos;avez pas de copie de cette texture dans votre inventaire
</string>
<string name="InventoryInboxNoItems">
- Ici seront livr矇s les articles achet矇s sur la Place du march矇.
+ Lorsque vous achetez ou recevez un article, il s&apos;affiche ici. Vous pouvez alors le faire glisser vers un dossier de votre inventaire ou le supprimer si vous ne souhaitez pas le conserver.
</string>
<string name="MarketplaceURL">
http://marketplace.[DOMAIN_NAME]
@@ -1412,6 +1412,9 @@ Veuillez r矇essayer de vous connecter dans une minute.
<string name="no_attachments">
Aucun 矇l矇ment attach矇 port矇
</string>
+ <string name="Attachments remain">
+ l矇ments attach矇s ([COUNT] emplacements restants)
+ </string>
<string name="Buy">
Acheter
</string>
@@ -1538,6 +1541,12 @@ Veuillez r矇essayer de vous connecter dans une minute.
<string name="Right Pec">
Pectoral droit
</string>
+ <string name="Neck">
+ Cou
+ </string>
+ <string name="Avatar Center">
+ Centre de l&apos;avatar
+ </string>
<string name="Invalid Attachment">
Point d&apos;attache non valide
</string>
@@ -4030,6 +4039,18 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
<string name="you_paid_ldollars_no_name">
Vous avez pay矇 [AMOUNT] L$ [REASON].
</string>
+ <string name="you_paid_failure_ldollars">
+ Votre paiement de [AMOUNT] L$ [NAME] [REASON] a 矇chou矇.
+ </string>
+ <string name="you_paid_failure_ldollars_no_info">
+ Votre paiement de [AMOUNT] L$ a 矇chou矇.
+ </string>
+ <string name="you_paid_failure_ldollars_no_reason">
+ Votre paiement de [AMOUNT] L$ [NAME] a 矇chou矇.
+ </string>
+ <string name="you_paid_failure_ldollars_no_name">
+ Votre paiement de [AMOUNT] L$ [REASON] a 矇chou矇.
+ </string>
<string name="for item">
pour l&apos;article suivant : [ITEM]
</string>
@@ -4440,6 +4461,12 @@ Essayez avec le chemin d&apos;acc癡s l&apos;矇diteur entre guillemets doubles
<string name="ExternalEditorFailedToRun">
chec d&apos;ex矇cution de l&apos;矇diteur externe.
</string>
+ <string name="TranslationFailed">
+ chec de traduction : [REASON]
+ </string>
+ <string name="TranslationResponseParseError">
+ Erreur lors de l&apos;analyse de la r矇ponse relative la traduction.
+ </string>
<string name="Esc">
chap
</string>
@@ -4810,7 +4837,7 @@ Essayez avec le chemin d&apos;acc癡s l&apos;矇diteur entre guillemets doubles
Mini-carte
</string>
<string name="Command_Move_Label">
- Bouger
+ Marcher / Courir / Voler
</string>
<string name="Command_People_Label">
Personnes
@@ -4837,10 +4864,10 @@ Essayez avec le chemin d&apos;acc癡s l&apos;矇diteur entre guillemets doubles
Parler
</string>
<string name="Command_View_Label">
- Affichage
+ Param癡tres de la cam矇ra
</string>
<string name="Command_Voice_Label">
- Chat pr癡s de vous
+ Param癡tres vocaux
</string>
<string name="Command_AboutLand_Tooltip">
Information sur le terrain que vous visitez
@@ -4912,7 +4939,16 @@ Essayez avec le chemin d&apos;acc癡s l&apos;矇diteur entre guillemets doubles
Changer l&apos;angle de la cam矇ra
</string>
<string name="Command_Voice_Tooltip">
- Personnes pr癡s de vous avec le chat vocal
+ Commandes de r矇glage du volume des appels et des personnes pr癡s de vous dans Second Life.
+ </string>
+ <string name="Toolbar_Bottom_Tooltip">
+ actuellement dans la barre d&apos;outils du bas
+ </string>
+ <string name="Toolbar_Left_Tooltip">
+ actuellement dans la barre d&apos;outils de gauche
+ </string>
+ <string name="Toolbar_Right_Tooltip">
+ actuellement dans la barre d&apos;outils de droite
</string>
<string name="Retain%">
Garder%
@@ -4938,4 +4974,19 @@ Essayez avec le chemin d&apos;acc癡s l&apos;矇diteur entre guillemets doubles
<string name="Normal">
Normal
</string>
+ <string name="snapshot_quality_very_low">
+ Tr癡s faible
+ </string>
+ <string name="snapshot_quality_low">
+ Faible
+ </string>
+ <string name="snapshot_quality_medium">
+ Moyenne
+ </string>
+ <string name="snapshot_quality_high">
+ lev矇e
+ </string>
+ <string name="snapshot_quality_very_high">
+ Tr癡s 矇lev矇e
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/fr/teleport_strings.xml b/indra/newview/skins/default/xui/fr/teleport_strings.xml
index 401b272c81..d0c74ff353 100644
--- a/indra/newview/skins/default/xui/fr/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/fr/teleport_strings.xml
@@ -21,8 +21,8 @@ Si vous ne parvenez toujours pas 礙tre t矇l矇port矇, d矇connectez-vous puis r
Veuillez r矇essayer dans un moment.
</message>
<message name="NoHelpIslandTP">
- Vous ne pouvez pas retourner sur Welcome Island.
-Pour r矇p矇ter le didacticiel, veuillez aller sur Welcome Island Public.
+ Vous ne pouvez pas vous t矇l矇porter nouveau vers Welcome Island.
+Pour recommencer le didacticiel, acc矇dez Welcome Island Public.
</message>
<message name="noaccess_tport">
D矇sol矇, vous n&apos;avez pas acc癡s cette destination.
diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml
index 68d073a766..39114b7bf7 100644
--- a/indra/newview/skins/default/xui/it/floater_about.xml
+++ b/indra/newview/skins/default/xui/it/floater_about.xml
@@ -67,32 +67,34 @@ Versione Server voice: [VOICE_VERSION]
<panel label="Licenze" 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)
-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).
-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
-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.
+ 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)
+ 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).
+ 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
+ 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.
-Il Viewer Second Life utilizza Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (e licenziatari). Tutti i diritti riservati. Per informazioni dettagliate, vedere www.havok.com.
+ Il Viewer Second Life utilizza Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (e licenziatari). Tutti i diritti riservati. Per informazioni dettagliate, vedere www.havok.com.
-Tutti i diritti riservati. Per informazioni dettagliate, vedere licenses.txt.
+ Questo software contiene codice sorgente fornito da NVIDIA Corporation.
-Codifica audio chat vocale: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+ Tutti i diritti riservati. Per informazioni dettagliate, vedere licenses.txt.
+
+ Codifica audio chat vocale: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
</text_editor>
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml
index b6bfb4aadf..528cf185fc 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -133,7 +133,7 @@ Vai al menu Mondo &gt; Informazioni sul terreno oppure seleziona un altro appezz
Traffico:
</text>
<text name="DwellText" width="140">
- 0
+ Caricamento in corso...
</text>
<button label="Acquista il terreno..." label_selected="Acquista il terreno..." left="130" name="Buy Land..." width="125"/>
<button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere di propriet, con contenuto impostato, e non gi messa all&apos;asta."/>
@@ -314,13 +314,15 @@ Solamente terreni pi羅 grandi possono essere abilitati nella ricerca.
Nessuna spinta (Impostazione regionale)
</panel.string>
<panel.string name="see_avs_text">
- Vedi i residenti in questo lotto e chatta con loro
+ Gli avatar in altri lotti possono vedere
</panel.string>
<text name="allow_label">
Permetti ad altri residenti di:
</text>
- <check_box label="Modificare il terreno" name="edit land check" tool_tip="Se spuntata, chiunque pu簷 terraformare il tuo terreno. preferibile lasciare questa opzione non spuntata, dato che sarai comunque in grado di modificare il tuo terreno."/>
- <check_box label="Permetti il volo" name="check fly" tool_tip="Se spuntato, gli altri residenti potranno volare sul tuo terreno. Se non spuntato, potranno solamente arrivare in volo o sorvolare il terreno."/>
+ <text name="allow_label0">
+ Vola:
+ </text>
+ <check_box label="Tutti" name="check fly" tool_tip="Se spuntato, gli altri residenti potranno volare sul tuo terreno. Se non spuntato, potranno solamente arrivare in volo o sorvolare il terreno."/>
<text name="allow_label2">
Creare oggetti:
</text>
@@ -336,9 +338,6 @@ Solamente terreni pi羅 grandi possono essere abilitati nella ricerca.
</text>
<check_box label="Tutti i residenti" name="check other scripts"/>
<check_box label="Gruppo" name="check group scripts"/>
- <text name="land_options_label">
- Opzioni per il terreno:
- </text>
<check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su &apos;sicuro&apos;, disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento con danni."/>
<check_box label="Nessuna spinta" name="PushRestrictCheck" tool_tip="Previeni i colpi. Selezionare questa opzione pu簷 essere utile per prevenire comportamenti dannosi sul tuo terreno."/>
<check_box label="Mostra luogo nella ricerca (30 L$/settimana)" name="ShowDirectoryCheck" tool_tip="Consenti che il lotto sia visto nei risultati di ricerca"/>
@@ -379,9 +378,9 @@ Solamente terreni pi羅 grandi possono essere abilitati nella ricerca.
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Clicca per scegliere una immagine"/>
<text name="allow_label5">
- Permetti ai residenti in altri lotti di:
+ e chattare con avatar in questo lotto
</text>
- <check_box label="Vedi avatar" name="SeeAvatarsCheck" tool_tip="Consente ai residenti in altri lotti di vedere i residenti in questo lotto e chattare con loro, e ti consente di vederli e chattare con loro."/>
+ <check_box label="Vedi avatar" name="SeeAvatarsCheck" tool_tip="Consente ad avatar in altri lotti di vedere e chattare con avatar in questo lotto e viceversa."/>
<text name="landing_point">
Punto di atterraggio: [LANDING]
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_avatar.xml b/indra/newview/skins/default/xui/it/floater_avatar.xml
index 1587c347a5..d7445cfb2b 100644
--- a/indra/newview/skins/default/xui/it/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/it/floater_avatar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Avatar" title="SCELTA AVATAR"/>
+<floater name="Avatar" title="SELEZIONA UN AVATAR"/>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
index d985ad2b3c..743969f557 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
@@ -46,7 +46,7 @@
[AMT]L$
</text>
<text name="currency_links">
- [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency]
+ [http://www.secondlife.com/my/account/payment_method_management.php metodo di pagamento] | [http://www.secondlife.com/my/account/currency.php valuta]
</text>
<text name="exchange_rate_note">
Riscrivi l&apos;importo per vedere l&apos;ultimo tasso al cambio.
diff --git a/indra/newview/skins/default/xui/it/floater_camera.xml b/indra/newview/skins/default/xui/it/floater_camera.xml
index 7e6ca4307e..be03857bc9 100644
--- a/indra/newview/skins/default/xui/it/floater_camera.xml
+++ b/indra/newview/skins/default/xui/it/floater_camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="camera_floater" title="VISTA">
+<floater name="camera_floater" title="CONTROLLI FOTOCAMERA">
<floater.string name="rotate_tooltip">
Ruota la telecamera Intorno all&apos;Inquadratura
</floater.string>
diff --git a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
index 561f8dbf34..5d3ae04a4d 100644
--- a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
@@ -4,7 +4,7 @@
Filtraggio:
</text>
<check_box label="Filtraggio Anisotropico (rallenta se attivato)" name="ani"/>
- <text name="Antialiasing:">
+ <text name="antialiasing label">
Antialiasing:
</text>
<combo_box label="Antialiasing" name="fsaa" width="94">
diff --git a/indra/newview/skins/default/xui/it/floater_model_preview.xml b/indra/newview/skins/default/xui/it/floater_model_preview.xml
index 03102f5f81..ca36fd2def 100644
--- a/indra/newview/skins/default/xui/it/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_model_preview.xml
@@ -4,6 +4,9 @@
<string name="status_parse_error">
Errore: Errore elaborazione Dae - vedere il registro per informazioni dettagliate.
</string>
+ <string name="status_material_mismatch">
+ Errore: il materiale del modello non 癡 un sottoinsieme del modello di riferimento.
+ </string>
<string name="status_reading_file">
Caricamento in corso...
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_model_wizard.xml b/indra/newview/skins/default/xui/it/floater_model_wizard.xml
index e6d0a7c4bc..7c1b13c18f 100644
--- a/indra/newview/skins/default/xui/it/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/it/floater_model_wizard.xml
@@ -20,6 +20,9 @@
Scegli il file del modello da caricare
</text>
<button label="Sfoglia..." label_selected="Sfoglia..." name="browse"/>
+ <text name="Model types">
+ Second Life supporta file COLLADA (.dae)
+ </text>
<text name="dimensions">
X Y Z
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_moveview.xml b/indra/newview/skins/default/xui/it/floater_moveview.xml
index 6e820a335c..1237bd06a9 100644
--- a/indra/newview/skins/default/xui/it/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/it/floater_moveview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater" title="SPOSTA">
+<floater name="move_floater" title="CAMMINA / CORRI / VOLA">
<string name="walk_forward_tooltip">
Cammina in avanti (premi freccia su o W)
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml
index f1c5cc4caf..bff6081bdf 100644
--- a/indra/newview/skins/default/xui/it/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml
@@ -3,73 +3,63 @@
<floater.string name="unknown">
sconosciuto
</floater.string>
- <radio_group label="Tipo di fotografia" name="snapshot_type_radio">
- <radio_item label="E-mail" name="postcard"/>
- <radio_item label="Il mio inventario (L$[AMOUNT])" name="texture"/>
- <radio_item label="Salva sul mio computer" name="local"/>
- </radio_group>
+ <string name="postcard_progress_str">
+ Invio e-mail in corso
+ </string>
+ <string name="profile_progress_str">
+ Caricamento post
+ </string>
+ <string name="inventory_progress_str">
+ Salva nell&apos;inventario
+ </string>
+ <string name="local_progress_str">
+ Salvataggio sul computer in corso
+ </string>
+ <string name="profile_succeeded_str">
+ Immagine caricata
+ </string>
+ <string name="postcard_succeeded_str">
+ E-mail inviata.
+ </string>
+ <string name="inventory_succeeded_str">
+ Salvato nell&apos;inventario.
+ </string>
+ <string name="local_succeeded_str">
+ Salvato sul computer.
+ </string>
+ <string name="profile_failed_str">
+ Caricamento immagine sul feed del profilo non riuscito.
+ </string>
+ <string name="postcard_failed_str">
+ Invio e-mail non riuscito.
+ </string>
+ <string name="inventory_failed_str">
+ Non salvato nell&apos;inventario.
+ </string>
+ <string name="local_failed_str">
+ Non salvato sul computer.
+ </string>
+ <button name="advanced_options_btn" tool_tip="Opzioni Avanzate"/>
+ <text name="image_res_text">
+ [WIDTH] x [HEIGHT] px
+ </text>
<text name="file_size_label">
[SIZE] KB
</text>
- <button label="Aggiorna la fotografia" name="new_snapshot_btn"/>
- <button label="Invia" name="send_btn"/>
- <button label="Salva ([AMOUNT] L$)" name="upload_btn"/>
- <flyout_button label="Salva" name="save_btn" tool_tip="Salva immagine come file">
- <flyout_button.item label="Salva" name="save_item"/>
- <flyout_button.item label="Salva con nome..." name="saveas_item"/>
- </flyout_button>
- <button label="Altro" name="more_btn" tool_tip="Opzioni Avanzate"/>
- <button label="Meno" name="less_btn" tool_tip="Opzioni Avanzate"/>
- <button label="Annulla" name="discard_btn"/>
- <text name="type_label2">
- Dimensioni
- </text>
- <text name="format_label">
- Formato
- </text>
- <combo_box label="Risoluzione" name="postcard_size_combo">
- <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="Personalizza" name="Custom"/>
- </combo_box>
- <combo_box label="Risoluzione" name="texture_size_combo">
- <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
- <combo_box.item label="Piccola (128x128)" name="Small(128x128)"/>
- <combo_box.item label="Media (256x256)" name="Medium(256x256)"/>
- <combo_box.item label="Grande (512x512)" name="Large(512x512)"/>
- <combo_box.item label="Personalizza" name="Custom"/>
- </combo_box>
- <combo_box label="Risoluzione" name="local_size_combo">
- <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
- <combo_box.item label="320x240" name="320x240"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="1280x1024" name="1280x1024"/>
- <combo_box.item label="1600x1200" name="1600x1200"/>
- <combo_box.item label="Personalizza" name="Custom"/>
- </combo_box>
- <combo_box label="Formato" name="local_format_combo">
- <combo_box.item label="PNG" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP" name="BMP"/>
- </combo_box>
- <spinner label="Larghezza" name="snapshot_width"/>
- <spinner label="Altezza" name="snapshot_height"/>
- <check_box label="Mantieni le proporzioni" name="keep_aspect_check"/>
- <slider label="Qualit dell&apos;immagine" name="image_quality_slider"/>
- <text name="layer_type_label">
- Cattura:
- </text>
- <combo_box label="Layer dell&apos;immagine" name="layer_types">
- <combo_box.item label="Colori" name="Colors"/>
- <combo_box.item label="Profondit" name="Depth"/>
- </combo_box>
- <check_box label="Interfaccia" name="ui_check"/>
- <check_box label="HUD" name="hud_check"/>
- <check_box label="Tieni aperta dopo il salvataggio" name="keep_open_check"/>
- <check_box label="Congela il frame (tutto schermo)" name="freeze_frame_check"/>
- <check_box label="Aggiornamento automatico" name="auto_snapshot_check"/>
+ <panel name="advanced_options_panel">
+ <text name="advanced_options_label">
+ OPZIONI AVANZATE
+ </text>
+ <text name="layer_type_label">
+ Cattura:
+ </text>
+ <combo_box label="Layer dell&apos;immagine" name="layer_types">
+ <combo_box.item label="Colori" name="Colors"/>
+ <combo_box.item label="Profondit" name="Depth"/>
+ </combo_box>
+ <check_box label="Interfaccia" name="ui_check"/>
+ <check_box label="HUD" name="hud_check"/>
+ <check_box label="Congela il frame (tutto schermo)" name="freeze_frame_check"/>
+ <check_box label="Aggiornamento automatico" name="auto_snapshot_check"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_toybox.xml b/indra/newview/skins/default/xui/it/floater_toybox.xml
index c8d5f1ed7c..269e2831d0 100644
--- a/indra/newview/skins/default/xui/it/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/it/floater_toybox.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Toybox" title="PERSONALIZZA BARRE STRUMENTI">
+<floater name="Toybox" title="PULSANTI BARRA STRUMENTI">
<text name="toybox label 1">
Aggiungere o rimuovere pulsanti trascinandoli dentro o fuori dalle barre strumenti.
</text>
<text name="toybox label 2">
I pulsanti verranno visualizzati come mostrato o solo come icone, a seconda delle impostazioni della singola barra degli strumenti.
</text>
+ <button label="Cancella tutte le barre strumenti" label_selected="Cancella tutte le barre strumenti" name="btn_clear_all"/>
<button label="Ripristina predefiniti" label_selected="Ripristina predefiniti" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_translation_settings.xml b/indra/newview/skins/default/xui/it/floater_translation_settings.xml
new file mode 100644
index 0000000000..a0a34da723
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_translation_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_translation_settings" title="IMPOSTAZIONI TRADUZIONE CHAT">
+ <string name="bing_api_key_not_verified">
+ appID Bing non verificato. Riprova.
+ </string>
+ <string name="google_api_key_not_verified">
+ Chiave API Google non verificata. Riprova.
+ </string>
+ <string name="bing_api_key_verified">
+ appID Bing verificato.
+ </string>
+ <string name="google_api_key_verified">
+ Chiave API Google verificata.
+ </string>
+ <check_box label="Usa la traduzione meccanica durante le chat" name="translate_chat_checkbox"/>
+ <text name="translate_language_label">
+ Traduci chat in:
+ </text>
+ <combo_box name="translate_language_combo">
+ <combo_box.item label="Predefinito di sistema" name="System Default Language"/>
+ <combo_box.item label="English (Inglese)" name="English"/>
+ <combo_box.item label="Dansk (Danese)" name="Danish"/>
+ <combo_box.item label="Deutsch (Tedesco)" name="German"/>
+ <combo_box.item label="Espa簽ol (Spagnolo)" name="Spanish"/>
+ <combo_box.item label="Fran癟ais (Francese)" name="French"/>
+ <combo_box.item label="Italiano" name="Italian"/>
+ <combo_box.item label="Magyar (Ungherese)" name="Hungarian"/>
+ <combo_box.item label="Nederlands (Olandese)" name="Dutch"/>
+ <combo_box.item label="Polski (Polacco)" name="Polish"/>
+ <combo_box.item label="Portugu礙s (Portoghese)" name="Portugese"/>
+ <combo_box.item label="郕邽邿 (Russo)" name="Russian"/>
+ <combo_box.item label="T羹rk癟e (Turco)" name="Turkish"/>
+ <combo_box.item label="苺郕訄郇郕訄 (Ucraino)" name="Ukrainian"/>
+ <combo_box.item label="銝剜 (甇擃) (Cinese)" name="Chinese"/>
+ <combo_box.item label="交祈 (Giapponese)" name="Japanese"/>
+ <combo_box.item label="窱原 (Coreano)" name="Korean"/>
+ </combo_box>
+ <text name="tip">
+ Seleziona il servizio di traduzione:
+ </text>
+ <radio_group name="translation_service_rg">
+ <radio_item initial_value="bing" label="Bing Translator" name="bing"/>
+ <radio_item initial_value="google" label="Google Translate" name="google"/>
+ </radio_group>
+ <text name="bing_api_key_label">
+ Bing [http://www.bing.com/developers/createapp.aspx AppID]:
+ </text>
+ <button label="Verifica" name="verify_bing_api_key_btn"/>
+ <text name="google_api_key_label">
+ Google [http://code.google.com/apis/language/translate/v2/getting_started.html#auth API key]:
+ </text>
+ <button label="Verifica" name="verify_google_api_key_btn"/>
+ <text name="google_links_text">
+ [http://code.google.com/apis/language/translate/v2/pricing.html Prezzi] | [https://code.google.com/apis/console Statistiche]
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
index d0ac815b8b..77973eef1e 100644
--- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="CONTROLLI VOCE">
<string name="title_nearby">
- Voce vicina
+ IMPOSTAZIONI VOCE
</string>
<string name="title_group">
- Chiamata di gruppo con [GROUP]
+ CHIAMATA DI GRUPPO CON [GROUP]
</string>
<string name="title_adhoc">
- Chiamata in conferenza
+ CHIAMATA IN CONFERENZA
</string>
<string name="title_peer_2_peer">
- Chiamata con [NAME]
+ CHIAMATA CON [NAME]
</string>
<string name="no_one_near">
Nessuno nei dintorni ha attivato la funzione voce
diff --git a/indra/newview/skins/default/xui/it/menu_toolbars.xml b/indra/newview/skins/default/xui/it/menu_toolbars.xml
index 784ecd262c..604ca763d1 100644
--- a/indra/newview/skins/default/xui/it/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/it/menu_toolbars.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Toolbars Popup">
- <menu_item_call label="Seleziona pulsanti..." name="Chose Buttons"/>
+ <menu_item_call label="Rimuovi questo pulsante" name="Remove button"/>
+ <menu_item_call label="Pulsanti barra strumenti..." name="Choose Buttons"/>
<menu_item_check label="Icone ed etichette" name="icons_with_text"/>
<menu_item_check label="Solo icone" name="icons_only"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 8792a0fc19..5140d2b1ec 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu_bar name="Main Menu">
<menu label="Io" name="Me">
- <menu_item_call label="Dashboard..." name="Manage My Account">
- <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=it"/>
- </menu_item_call>
<menu_item_call label="Profilo..." name="Profile"/>
<menu_item_call label="Aspetto fisico..." name="ChangeOutfit"/>
+ <menu_item_call label="Scegli un avatar..." name="Avatar Picker"/>
<menu_item_check label="Inventario..." name="Inventory"/>
- <menu_item_check label="Gesture..." name="Gestures"/>
- <menu_item_check label="Voce..." name="ShowVoice"/>
+ <menu_item_call label="Nuova finestra inventario" name="NewInventoryWindow"/>
+ <menu_item_call label="Luoghi..." name="Places"/>
+ <menu_item_call label="Preferiti..." name="Picks"/>
+ <menu_item_call label="Controlli fotocamera..." name="Camera Controls"/>
<menu label="Spostamento" name="Movement">
<menu_item_call label="Siedi" name="Sit Down Here"/>
<menu_item_check label="Vola" name="Fly"/>
@@ -22,34 +22,39 @@
<menu_item_call label="Richiedi diritti Admin" name="Request Admin Options"/>
<menu_item_call label="Lascia stato Admin" name="Leave Admin Options"/>
<menu_item_call label="Compra L$" name="Buy and Sell L$"/>
+ <menu_item_call label="Dashboard dell&apos;account..." name="Manage My Account">
+ <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=it"/>
+ </menu_item_call>
<menu_item_call label="Preferenze..." name="Preferences"/>
- <menu_item_call label="Barre strumenti..." name="Toolbars"/>
+ <menu_item_call label="Pulsanti barra strumenti..." name="Toolbars"/>
<menu_item_call label="Nascondi tutti i controlli" name="Hide UI"/>
<menu_item_call label="Esci da [APP_NAME]" name="Quit"/>
</menu>
<menu label="Comunica" name="Communicate">
- <menu_item_call label="I miei amici..." name="My Friends"/>
- <menu_item_call label="I miei gruppi" name="My Groups"/>
- <menu_item_check label="Chat nei dintorni" name="Nearby Chat"/>
+ <menu_item_check label="Chat..." name="Nearby Chat"/>
+ <menu_item_check label="Parla" name="Speak"/>
+ <menu_item_check label="Impostazioni voce..." name="Nearby Voice"/>
+ <menu_item_check label="Manipolazione voce..." name="ShowVoice"/>
+ <menu_item_check label="Gesture..." name="Gestures"/>
+ <menu_item_call label="Amici" name="My Friends"/>
+ <menu_item_call label="Gruppi" name="My Groups"/>
<menu_item_call label="Persone vicine" name="Active Speakers"/>
- <menu_item_check label="Voce nei dintorni" name="Nearby Voice"/>
</menu>
<menu label="Mondo" name="World">
+ <menu_item_call label="Crea punto di riferimento per questo luogo" name="Create Landmark Here"/>
+ <menu_item_call label="Destinazioni..." name="Destinations"/>
+ <menu_item_check label="Mappamondo" name="World Map"/>
<menu_item_check label="Mini mappa" name="Mini-Map"/>
- <menu_item_check label="Mappa del mondo" name="World Map"/>
<menu_item_check label="Cerca" name="Search"/>
+ <menu_item_call label="Teleport a Casa" name="Teleport Home"/>
+ <menu_item_call label="Imposta come Casa mia" name="Set Home to Here"/>
<menu_item_call label="Istantanea" name="Take Snapshot"/>
- <menu_item_call label="Crea punto di riferimento per questo luogo" name="Create Landmark Here"/>
- <menu label="Profilo del luogo" name="Land">
- <menu_item_call label="Profilo del luogo" name="Place Profile"/>
- <menu_item_call label="Informazioni sui terreni" name="About Land"/>
- <menu_item_call label="Regione/propriet immobiliare" name="Region/Estate"/>
- </menu>
+ <menu_item_call label="Profilo del luogo" name="Place Profile"/>
+ <menu_item_call label="Informazioni sul terreno" name="About Land"/>
+ <menu_item_call label="Regione/propriet immobiliare" name="Region/Estate"/>
+ <menu_item_call label="Terreni posseduti..." name="My Land"/>
<menu_item_call label="Acquista questo terreno" name="Buy Land"/>
- <menu_item_call label="Il mio terreno" name="My Land"/>
<menu label="Mostra" name="LandShow">
- <menu_item_check label="Comandi del movimento" name="Movement Controls"/>
- <menu_item_check label="Comandi visualizzazione" name="Camera Controls"/>
<menu_item_check label="Linee di divieto" name="Ban Lines"/>
<menu_item_check label="Marcatori" name="beacons"/>
<menu_item_check label="Linee di confine" name="Property Lines"/>
@@ -58,29 +63,28 @@
<menu_item_check label="Propriet del lotto" name="Parcel Properties"/>
<menu_item_check label="Menu Avanzato" name="Show Advanced Menu"/>
</menu>
- <menu_item_call label="Teleport a Casa" name="Teleport Home"/>
- <menu_item_call label="Imposta come Casa mia" name="Set Home to Here"/>
<menu label="Sole" name="Environment Settings">
<menu_item_call label="Alba" name="Sunrise"/>
<menu_item_call label="Mezzogiorno" name="Noon"/>
<menu_item_call label="Tramonto" name="Sunset"/>
<menu_item_call label="Mezzanotte" name="Midnight"/>
+ <menu_item_call label="Usa impostazioni regione" name="Use Region Settings"/>
</menu>
- <menu label="Editor ambiente" name="Enviroment Editor">
- <menu_item_call label="Impostazioni ambiente..." name="Enviroment Settings"/>
+ <menu label="Editor ambiente" name="Environment Editor">
+ <menu_item_call label="Impostazioni ambiente..." name="Environment Settings"/>
<menu label="Valori predefiniti acqua" name="Water Presets">
<menu_item_call label="Nuovo valore predefinito..." name="new_water_preset"/>
- <menu_item_call label="Modifica valori predefiniti..." name="edit_water_preset"/>
+ <menu_item_call label="Modifica valore predefinito..." name="edit_water_preset"/>
<menu_item_call label="Cancella valore predefinito..." name="delete_water_preset"/>
</menu>
<menu label="Valori predefiniti cielo" name="Sky Presets">
<menu_item_call label="Nuovo valore predefinito..." name="new_sky_preset"/>
- <menu_item_call label="Modifica valori predefiniti..." name="edit_sky_preset"/>
+ <menu_item_call label="Modifica valore predefinito..." name="edit_sky_preset"/>
<menu_item_call label="Cancella valore predefinito..." name="delete_sky_preset"/>
</menu>
- <menu label="Valori predefiniti giornata" name="Day Presets">
+ <menu label="Valori predefiniti giorno" name="Day Presets">
<menu_item_call label="Nuovo valore predefinito..." name="new_day_preset"/>
- <menu_item_call label="Modifica valori predefiniti..." name="edit_day_preset"/>
+ <menu_item_call label="Modifica valore predefinito..." name="edit_day_preset"/>
<menu_item_call label="Cancella valore predefinito..." name="delete_day_preset"/>
</menu>
</menu>
@@ -146,6 +150,7 @@
<menu_item_call label="Ripeti" name="Redo"/>
</menu>
<menu label="Aiuto" name="Help">
+ <menu_item_call label="Istruzioni..." name="How To"/>
<menu_item_call label="Aiuto di [SECOND_LIFE]" name="Second Life Help"/>
<menu_item_call label="Segnala abuso" name="Report Abuse"/>
<menu_item_call label="Segnala bug" name="Report Bug"/>
@@ -199,11 +204,10 @@
<menu_item_check label="Usa thread lettura plugin" name="Use Plugin Read Thread"/>
<menu_item_call label="Pulisci cache di gruppo" name="ClearGroupCache"/>
<menu_item_check label="Fluidit mouse" name="Mouse Smoothing"/>
+ <menu_item_call label="Rilascia tasti" name="Release Keys"/>
<menu label="Scorciatoie" name="Shortcuts">
<menu_item_call label="Immagine ([COST]L$)..." name="Upload Image"/>
<menu_item_check label="Cerca" name="Search"/>
- <menu_item_call label="Rilascia tasti" name="Release Keys"/>
- <menu_item_call label="Imposta dimensioni dell&apos;interfaccia sui valori predefiniti" name="Set UI Size to Default"/>
<menu_item_check label="Mostra menu Avanzato - tasti di scelta rapida esistenti" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Chiudi finestra" name="Close Window"/>
<menu_item_call label="Chiudi tutte le finestre" name="Close All Windows"/>
@@ -272,6 +276,7 @@
<menu_item_check label="Aggiorna tipo" name="Update Type"/>
<menu_item_check label="Info livello dettaglio" name="LOD Info"/>
<menu_item_check label="Crea coda" name="Build Queue"/>
+ <menu_item_check label="Vettori vento" name="Wind Vectors"/>
<menu_item_check label="Complessit rendering" name="rendercomplexity"/>
<menu_item_check label="Scolpisci" name="Sculpt"/>
</menu>
@@ -281,7 +286,6 @@
<menu_item_check label="Luci e ombre" name="Lighting and Shadows"/>
<menu_item_check label="Ombra dal sole, dalla luna e dai proiettori" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO e ombre fluide" name="SSAO and Shadow Smoothing"/>
- <menu_item_check label="Illuminazione globale (sperimentale)" name="Global Illumination"/>
<menu_item_check label="Maschera alfa automatica (differita)" name="Automatic Alpha Masks (deferred)"/>
<menu_item_check label="Maschera alfa automatica (non differita)" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Texture delle animazioni" name="Animation Textures"/>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index fce027da0c..fcc515186d 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -1110,8 +1110,13 @@ Cedere questi [AREA] m簡 di terreno al gruppo &apos;[GROUP_NAME]&apos;?
<notification name="DisplaySetToSafe">
Le impostazioni dello schermo sono state impostate a valori di sicurezza perch癡 hai specificato l&apos;opzione -safe.
</notification>
- <notification name="DisplaySetToRecommended">
- Le impostazioni dello schermo sono state impostate a valori ottimali basati sulla tua configurazione di sistema.
+ <notification name="DisplaySetToRecommendedGPUChange">
+ Le impostazioni di visualizzazione sono ai livelli consigliati a causa di un cambiamento nella scheda grafica
+da &apos;[LAST_GPU]&apos;
+a &apos;[THIS_GPU]&apos;
+ </notification>
+ <notification name="DisplaySetToRecommendedFeatureChange">
+ Le impostazioni di visualizzazione sono ai livelli consigliati a causa di un cambiamento nel sottosistema di rendering.
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
@@ -1916,7 +1921,13 @@ Trasferisci gli elementi nell&apos;inventario?
<usetemplate ignoretext="Conferma prima di uscire" name="okcancelignore" notext="Non uscire" yestext="Esci"/>
</notification>
<notification name="ConfirmRestoreToybox">
- Passare ai pulsanti e alle barre strumenti predefinite?
+ Questa azione ripristina pulsanti e barre degli strumenti predefinite.
+
+Questa azione non pu簷 essere ripristinata
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearAllToybox">
+ Questa azione riporter tutti i pulsanti nella casella strumenti. Le barre degli strumenti saranno vuote.
Questa azione non pu簷 essere ripristinata
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
@@ -2125,10 +2136,10 @@ Verr avviato il browser Web.
Oggetto: [SUBJECT], Messaggio: [MESSAGE]
</notification>
<notification name="FriendOnline">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; 癡 Online
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; 癡 online
</notification>
<notification name="FriendOffline">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; 癡 Offline
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; 癡 offline
</notification>
<notification name="AddSelfFriend">
Anche se sei molto simpatico, non puoi aggiungere te stesso all&apos;elenco degli amici.
@@ -2241,14 +2252,16 @@ Seleziona solo un oggetto.
Il tuo biglietto da visita non 癡 stato accettato.
</notification>
<notification name="TeleportToLandmark">
- Puoi teleportarti alle ubicazioni come &apos;[NAME]&apos; aprendo il pannello Luoghi sul lato destro dello schermo, quindi selezionare la scheda Punti di riferimento.
-Clicca su un punto di riferimento per selezionarlo, quindi clicca su Teleport sul lato inferiore del pannello.
-(Puoi anche fare doppio clic sul punto di riferimento oppure cliccare su di esso con il tasto destro del mouse e scegliere Teleport.)
+ Per teleportarti a luoghi come &apos;[NAME]&apos;, clicca sul pulsante &quot;Luoghi&quot;,
+ quindi seleziona la scheda Punti di riferimento nel pannello che viene aperto. Clicca su qualsiasi
+ unto di riferimento per selezionarlo, quindi clicca su Teleport sul lato inferiore del pannello.
+ (Puoi anche fare doppio clic sul punto di riferimento oppure cliccare su di esso con il tasto destro del mouse e
+ scegliere Teleport.)
</notification>
<notification name="TeleportToPerson">
- Puoi contattare il residente &apos;[NAME]&apos; aprendo il pannello Persone nel lato destro del tuo schermo.
-Seleziona il residente dall&apos;elenco, clicca su &apos;IM&apos; in basso nel pannello.
-(Puoi anche fare doppio clic sul nome nell&apos;elenco oppure fare clic con il pulsante destro del mouse e selezionare &apos;IM&apos;).
+ Per contattare Residenti come &apos;[NAME]&apos;, clicca sul pulsante &quot;Persone&quot;, seleziona un Residente nel pannello che viene aperto, quindi clicca su &apos;IM&apos; in
+ basso nel pannello.
+ (Puoi anche fare doppio clic sul nome nell&apos;elenco oppure fare clic con il pulsante destro del mouse e selezionare &apos;IM&apos;).
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Non 癡 possibile selezionare il terreno attraverso i confini del server.
@@ -2269,6 +2282,9 @@ Prova a selezionare una parte di terreno pi羅 piccola.
<notification name="PaymentSent">
[MESSAGE]
</notification>
+ <notification name="PaymentFailure">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
Notifica eventi:
@@ -2520,10 +2536,10 @@ Riprova tra qualche istante.
</form>
</notification>
<notification name="FriendshipAccepted">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; ha accettato la tua offerta di amicizia.
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; ha accettato la tua richiesta di amicizia.
</notification>
<notification name="FriendshipDeclined">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; ha rifiutato la tua offerta di amicizia.
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; ha rifiutato la tua richiesta di amicizia.
</notification>
<notification name="FriendshipAcceptedByMe">
Offerta di amicizia accettata.
@@ -2800,7 +2816,7 @@ Per informazioni dettagliate, vedi il file del registro.
Con i seguenti residenti?
[RESIDENTS]
- <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Ok"/>
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ItemsShared">
Gli oggetti sono stati condivisi.
@@ -2890,7 +2906,7 @@ In questo modo verr disattivato l&apos;audio anche di tutti i residenti che si
uniscono alla chiamata in un secondo momento, anche dopo che tu ti fossi scollegato.
Disattiva audio di tutti?
- <usetemplate ignoretext="Conferma prima di disattivare l&apos;audio di tutti i partecipanti alla chiamata di gruppo" name="okcancelignore" notext="Annulla" yestext="Ok"/>
+ <usetemplate ignoretext="Conferma prima di disattivare l&apos;audio di tutti i partecipanti alla chiamata di gruppo" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification label="Chat" name="HintChat">
Per partecipare alla conversazione, digita nel campo chat in basso.
diff --git a/indra/newview/skins/default/xui/it/panel_edit_skin.xml b/indra/newview/skins/default/xui/it/panel_edit_skin.xml
index a15489b333..466eff2708 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_skin.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="Tatuaggi testa" name="Head Tattoos" tool_tip="Clicca per scegliere una fotografia"/>
- <texture_picker label="Tatuaggi superiori" name="Upper Tattoos" tool_tip="Clicca per scegliere una fotografia"/>
- <texture_picker label="Tatuaggi inferiori" name="Lower Tattoos" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Testa" name="Head" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Parte superiore del corpo" name="Upper Body" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Parte inferiore del corpo" name="Lower Body" tool_tip="Clicca per scegliere una fotografia"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/it/panel_postcard_message.xml b/indra/newview/skins/default/xui/it/panel_postcard_message.xml
new file mode 100644
index 0000000000..c720f4822d
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_postcard_message.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_message">
+ <text name="to_label">
+ A:
+ </text>
+ <text name="name_label">
+ Da:
+ </text>
+ <text name="subject_label">
+ Oggetto:
+ </text>
+ <line_editor label="Digita qui l&apos;oggetto." name="subject_form"/>
+ <text name="msg_label">
+ Messaggio:
+ </text>
+ <text_editor name="msg_form">
+ Digita qui il messaggio.
+ </text_editor>
+ <button label="Annulla" name="cancel_btn"/>
+ <button label="Invia" name="send_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_postcard_settings.xml b/indra/newview/skins/default/xui/it/panel_postcard_settings.xml
new file mode 100644
index 0000000000..6a586c4415
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_postcard_settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_settings">
+ <combo_box label="Risoluzione" name="postcard_size_combo">
+ <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Personalizza" name="Custom"/>
+ </combo_box>
+ <layout_stack name="postcard_image_params_ls">
+ <layout_panel name="postcard_image_size_lp">
+ <spinner label="Larghezza" name="postcard_snapshot_width"/>
+ <spinner label="Altezza" name="postcard_snapshot_height"/>
+ <check_box label="Mantieni le proporzioni" name="postcard_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="postcard_image_format_quality_lp">
+ <slider label="Qualit dell&apos;immagine" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
index 1a0a1d8434..7f5992b584 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
@@ -29,30 +29,5 @@
<check_box label="Chat IM" name="EnableIMChatPopups" tool_tip="Seleziona per vedere una finestra popup quando arriva un messaggio IM"/>
<spinner label="Durata chat vicine:" name="nearby_toasts_lifetime"/>
<spinner label="Durata dissolvenza chat vicine:" name="nearby_toasts_fadingtime"/>
- <check_box label="Use machine translation while chatting" name="translate_chat_checkbox"/>
- <text name="translate_chb_label">
- Usa la traduzione meccanica durante le chat
- </text>
- <text name="translate_language_text" width="110">
- Traduci chat in:
- </text>
- <combo_box name="translate_language_combobox" width="146">
- <combo_box.item label="Default di sistema" name="System Default Language"/>
- <combo_box.item label="English (Inglese)" name="English"/>
- <combo_box.item label="Dansk (Danese)" name="Danish"/>
- <combo_box.item label="Deutsch (Tedesco)" name="German"/>
- <combo_box.item label="Espa簽ol (Spagnolo)" name="Spanish"/>
- <combo_box.item label="Fran癟ais (Francese)" name="French"/>
- <combo_box.item label="Italiano" name="Italian"/>
- <combo_box.item label="Magyar (Ungherese)" name="Hungarian"/>
- <combo_box.item label="Nederlands (Olandese)" name="Dutch"/>
- <combo_box.item label="Polski (Polacco)" name="Polish"/>
- <combo_box.item label="Portugu礙s (Portoghese)" name="Portugese"/>
- <combo_box.item label="郕邽邿 (Russo)" name="Russian"/>
- <combo_box.item label="T羹rk癟e (Turco)" name="Turkish"/>
- <combo_box.item label="苺郕訄郇郕訄 (Ucraino)" name="Ukrainian"/>
- <combo_box.item label="銝剜 (甇擃) (Cinese)" name="Chinese"/>
- <combo_box.item label="交祈 (Giapponese)" name="Japanese"/>
- <combo_box.item label="窱原 (Coreano)" name="Korean"/>
- </combo_box>
+ <button label="Impostazioni traduzione chat" name="ok_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
index bf78432110..0189d47f45 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
@@ -15,7 +15,7 @@
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Usa il mio browser (IE, Firefox, Safari)" name="external" tool_tip="Utilizza il browser Web predefinito di sistema per l&apos;aiuto, per i link Web e cos穫 via. Sconsigliato durante l&apos;esecuzione a tutto schermo." value="1"/>
+ <radio_item label="Usa il mio browser (IE, Firefox, Safari)" name="external" tool_tip="Utilizza il browser Web predefinito di sistema per l&apos;aiuto, per i link Web e cos穫 via. Sconsigliato durante l&apos;esecuzione a tutto schermo." value="true"/>
<radio_item label="Utilizza il browser Web integrato" name="internal" tool_tip="Utilizza il browser Web integrato per l&apos;aiuto, per i link Web e cos穫 via. Questo browser si apre in una nuova finestra in [APP_NAME]." value=""/>
</radio_group>
<check_box initial_value="true" label="Abilita plugin" name="browser_plugins_enabled"/>
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml
new file mode 100644
index 0000000000..c9245029b7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_inventory">
+ <text name="title">
+ Salva nell&apos;inventario
+ </text>
+ <text name="hint_lbl">
+ Salvare un&apos;immagine nell&apos;inventario costa L$[UPLOAD_COST]. Per salvare l&apos;immagine come texture, selezionare uno dei formati quadrati.
+ </text>
+ <combo_box label="Risoluzione" name="texture_size_combo">
+ <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
+ <combo_box.item label="Piccola (128x128)" name="Small(128x128)"/>
+ <combo_box.item label="Media (256x256)" name="Medium(256x256)"/>
+ <combo_box.item label="Grande (512x512)" name="Large(512x512)"/>
+ <combo_box.item label="Personalizza" name="Custom"/>
+ </combo_box>
+ <spinner label="Larghezza" name="inventory_snapshot_width"/>
+ <spinner label="Altezza" name="inventory_snapshot_height"/>
+ <check_box label="Mantieni le proporzioni" name="inventory_keep_aspect_check"/>
+ <button label="Annulla" name="cancel_btn"/>
+ <button label="Salva" name="save_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_local.xml b/indra/newview/skins/default/xui/it/panel_snapshot_local.xml
new file mode 100644
index 0000000000..4b725b68f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_snapshot_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_local">
+ <text name="title">
+ Salva sul mio computer
+ </text>
+ <combo_box label="Risoluzione" name="local_size_combo">
+ <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
+ <combo_box.item label="320x240" name="320x240"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1280x1024" name="1280x1024"/>
+ <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="Personalizza" name="Custom"/>
+ </combo_box>
+ <layout_stack name="local_image_params_ls">
+ <layout_panel name="local_image_size_lp">
+ <spinner label="Larghezza" name="local_snapshot_width"/>
+ <spinner label="Altezza" name="local_snapshot_height"/>
+ <check_box label="Mantieni le proporzioni" name="local_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="local_image_format_quality_lp">
+ <combo_box label="Formato" name="local_format_combo">
+ <combo_box.item label="PNG (senza perdite)" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP (senza perdite)" name="BMP"/>
+ </combo_box>
+ <slider label="Qualit dell&apos;immagine" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+ <button label="Annulla" name="cancel_btn"/>
+ <flyout_button label="Salva" name="save_btn" tool_tip="Salva immagine come file">
+ <flyout_button.item label="Salva" name="save_item"/>
+ <flyout_button.item label="Salva con nome..." name="saveas_item"/>
+ </flyout_button>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml
new file mode 100644
index 0000000000..f2d42c5197
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_options">
+ <button label="Invia post al feed del mio profilo" name="save_to_profile_btn"/>
+ <button label="E-mail" name="save_to_email_btn"/>
+ <button label="Salva nell&apos;inventario (L$[AMOUNT])" name="save_to_inventory_btn"/>
+ <button label="Salva sul mio computer" name="save_to_computer_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml
new file mode 100644
index 0000000000..3703b97e6c
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_postcard">
+ <string name="default_subject">
+ Cartolina da [SECOND_LIFE].
+ </string>
+ <string name="default_message">
+ Dai un&apos;occhiata!
+ </string>
+ <string name="upload_message">
+ Invio...
+ </string>
+ <text name="title">
+ E-mail
+ </text>
+ <button label="Messaggio" name="message_btn"/>
+ <button label="Impostazioni" name="settings_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml
new file mode 100644
index 0000000000..2cdbf97049
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_profile">
+ <text name="title">
+ Invia post al feed del mio profilo
+ </text>
+ <combo_box label="Risoluzione" name="profile_size_combo">
+ <combo_box.item label="Finestra attuale" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Personalizza" name="Custom"/>
+ </combo_box>
+ <layout_stack name="profile_image_params_ls">
+ <layout_panel name="profile_image_size_lp">
+ <spinner label="Larghezza" name="profile_snapshot_width"/>
+ <spinner label="Altezza" name="profile_snapshot_height"/>
+ <check_box label="Mantieni le proporzioni" name="profile_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="profile_image_metadata_lp">
+ <text name="caption_label">
+ Didascalia:
+ </text>
+ <check_box initial_value="true" label="Includi luogo" name="add_location_cb"/>
+ </layout_panel>
+ </layout_stack>
+ <button label="Annulla" name="cancel_btn"/>
+ <button label="Post" name="post_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 8f29233825..c81dd0f55d 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -1205,7 +1205,7 @@ Prova ad accedere nuovamente tra un minuto.
Non hai una copia di questa texture nel tuo inventario
</string>
<string name="InventoryInboxNoItems">
- Gli elementi acquistati attraverso il mercato verranno consegnati qui
+ Quando acquisti o ricevi un oggetto, verr visualizzato qui per permetterti di trascinarlo in una cartella dell&apos;inventario o di cancellarlo se non desideri mantenerlo.
</string>
<string name="MarketplaceURL">
http://marketplace.[DOMAIN_NAME]/learn_more
@@ -1397,6 +1397,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="no_attachments">
Nessun allegato indossato
</string>
+ <string name="Attachments remain">
+ Allegati ([COUNT] spazi restanti)
+ </string>
<string name="Buy">
Acquista
</string>
@@ -1523,6 +1526,12 @@ Prova ad accedere nuovamente tra un minuto.
<string name="Right Pec">
Petto destro
</string>
+ <string name="Neck">
+ Collo
+ </string>
+ <string name="Avatar Center">
+ Centro avatar
+ </string>
<string name="Invalid Attachment">
Punto di collegamento non valido
</string>
@@ -3940,6 +3949,18 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="you_paid_ldollars_no_name">
Hai pagato L$ [AMOUNT] [REASON].
</string>
+ <string name="you_paid_failure_ldollars">
+ Non hai pagato [NAME] L$[AMOUNT] [REASON].
+ </string>
+ <string name="you_paid_failure_ldollars_no_info">
+ Non hai pagato L$ [AMOUNT].
+ </string>
+ <string name="you_paid_failure_ldollars_no_reason">
+ Non hai pagato [NAME] L$[AMOUNT].
+ </string>
+ <string name="you_paid_failure_ldollars_no_name">
+ Non hai pagato L$ [AMOUNT] [REASON].
+ </string>
<string name="for item">
per [ITEM]
</string>
@@ -4350,6 +4371,12 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="ExternalEditorFailedToRun">
L&apos;editor esterno non 癡 stato avviato.
</string>
+ <string name="TranslationFailed">
+ Traduzione non riuscita: [REASON]
+ </string>
+ <string name="TranslationResponseParseError">
+ Errore di elaborazione della risposta della traduzione.
+ </string>
<string name="Esc">
Esc
</string>
@@ -4720,7 +4747,7 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
Mini mappa
</string>
<string name="Command_Move_Label">
- Movimento
+ Cammina / corri / vola
</string>
<string name="Command_People_Label">
Persone
@@ -4747,10 +4774,10 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
Parla
</string>
<string name="Command_View_Label">
- Visuale
+ Controlli fotocamera
</string>
<string name="Command_Voice_Label">
- Voce vicina
+ Impostazioni voce
</string>
<string name="Command_AboutLand_Tooltip">
Informazioni sul terreno che visiti
@@ -4822,7 +4849,16 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
Modifica angolo fotocamera
</string>
<string name="Command_Voice_Tooltip">
- Persona vicine con funzioni voce
+ I controlli per il volume per le chiamate e per le persone nelle vicinanze nel mondo virtuale
+ </string>
+ <string name="Toolbar_Bottom_Tooltip">
+ attualmente nella barra degli strumenti in basso
+ </string>
+ <string name="Toolbar_Left_Tooltip">
+ attualmente nella barra degli strumenti a sinistra
+ </string>
+ <string name="Toolbar_Right_Tooltip">
+ attualmente nella barra degli strumenti a destra
</string>
<string name="Retain%">
Mantieni%
@@ -4848,4 +4884,19 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Normal">
Normale
</string>
+ <string name="snapshot_quality_very_low">
+ Molto basso
+ </string>
+ <string name="snapshot_quality_low">
+ Basso
+ </string>
+ <string name="snapshot_quality_medium">
+ Medio
+ </string>
+ <string name="snapshot_quality_high">
+ Alto
+ </string>
+ <string name="snapshot_quality_very_high">
+ Molto alto
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/it/teleport_strings.xml b/indra/newview/skins/default/xui/it/teleport_strings.xml
index a0b324d8fb..f485212290 100644
--- a/indra/newview/skins/default/xui/it/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/it/teleport_strings.xml
@@ -19,8 +19,8 @@ Se si continua a visualizzare questo messaggio, consulta la pagina [SUPPORT_SITE
Spiacenti, il sistema non riesce a completare il teletrasporto. Riprova tra un attimo.
</message>
<message name="NoHelpIslandTP">
- Non 癡 possibile per te ritornare all&apos;Welcome Island.
-Vai alla &apos;Welcome Island Public&apos; per ripetere il tutorial.
+ Non puoi teleportarti nuovamente a Welcome Island.
+Per ripetere l&apos;esercitazione, visita &apos;Welcome Island Public&apos;.
</message>
<message name="noaccess_tport">
Spiacenti, ma non hai accesso nel luogo di destinazione richiesto.
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
index c628ade43e..3c7a210a22 100644
--- a/indra/newview/skins/default/xui/ja/floater_about.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about.xml
@@ -90,6 +90,8 @@ google-perftools Copyright (c) 2005, Google Inc.
Second Life 乓潦胯扼 Havok (TM) Physics 雿輻具艾整(c)Copyright 1999-2010 Havok.com Inc. (and its Licensors).⊥剛餉鋆賬餉誥頛蝳整閰喟敦怒扎艾 www.havok.com 扼
+柴賬艾扼U怒胯NVIDIA Corporation 怒賬潦嫘喋潦怒整整
+
⊥剛餉鋆賬餉誥頛蝳整閰喟敦怒扎艾 licenses.txt 扼
扎嫘柴芥潦芥喋潦喋堆Polycom(R) Siren14(TM) (ITU-T Rec.G.722.1 Annex C)
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
index 3c88c902f8..816a6ff203 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -130,7 +130,7 @@
鈭日:
</text>
<text name="DwellText">
- 隤
+ 准潦喋...
</text>
<button label="啜株頃" label_selected="啜鞈澆..." left="130" name="Buy Land..." width="100"/>
<button label="芥喋喋颯潦" label_selected="Linden 颯潦..." name="Linden Sale..." tool_tip="啜艾喋喋喋閮剖艾敹閬整芥潦胯瑯扼喋桀紋鞊∼怒芥艾芥具敹閬∩辣扼"/>
@@ -311,13 +311,15 @@
瑯亦甇 嚗啣閮剖芸嚗
</panel.string>
<panel.string name="see_avs_text">
- 桀箇颯怒雿鈭箝其艾
+ 隞桀箇颯怒U踴潦胯
</panel.string>
<text name="allow_label">
隞桐鈭箝詻株迂荔
</text>
- <check_box label="啣耦蝺券" name="edit land check" tool_tip="扼胯乓具隞鈭箝芥桀啜桀啣耦蝺券銵具航賬具芥整柴芥瑯扼喋柴扼胯憭艾具整憭嗆扼芥桀啜桀啣耦蝺券航賬扼"/>
- <check_box label="憌銵" name="check fly" tool_tip="扼胯乓具桀啜扼桅銵航賬具芥整扼胯憭典啜怠乓券具柴輸銵航賬具芥整"/>
+ <text name="allow_label0">
+ 憌銵嚗
+ </text>
+ <check_box label="典" name="check fly" tool_tip="扼胯乓具桀啜扼桅銵航賬具芥整扼胯憭典啜怠乓券具柴輸銵航賬具芥整"/>
<text name="allow_label2">
嗡嚗
</text>
@@ -333,9 +335,6 @@
</text>
<check_box label="典" name="check other scripts"/>
<check_box label="啜怒潦" name="check group scripts"/>
- <text name="land_options_label">
- 啜芥瑯扼喉
- </text>
<check_box label="摰剁∼潦詻芥嚗" name="check safe" tool_tip="扼胯乓具桀啜扼柴∼潦詻喋喋∪嫘怒芥摰具怨身摰整 扼胯憭具∼潦詻喋喋嫘怒芥整"/>
<check_box label="瑯亦甇" name="PushRestrictCheck" tool_tip="嫘胯芥怒瑯乓蝳甇U整 柴芥瑯扼喋豢具怒芥桀啜扼桃游銵脯具扼整"/>
<check_box label="璊蝝U怠箇颯銵函內嚗 L$ 30嚗" name="ShowDirectoryCheck" tool_tip="桀箇颯璊蝝Y怨”蝷箝整"/>
@@ -376,9 +375,9 @@
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="胯芥胯阡豢"/>
<text name="allow_label5">
- 隞桀箇颯怒雿鈭箝詻株迂荔
+ 桀箇颯怒U踴潦思艾扼整
</text>
- <check_box label="U踴潦銵函內" name="SeeAvatarsCheck" tool_tip="隞桀箇颯桐鈭箝桀箇颯怒雿鈭箝思艾具閮勗胯芥雿鈭箝思艾扼怒整"/>
+ <check_box label="U踴潦銵函內" name="SeeAvatarsCheck" tool_tip="隞桀箇颯柴U踴潦桀箇颯怒U踴潦思艾具閮勗胯芥U踴潦思艾扼怒整"/>
<text name="landing_point">
啁: [LANDING]
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_avatar.xml b/indra/newview/skins/default/xui/ja/floater_avatar.xml
index c4455282d2..d289580506 100644
--- a/indra/newview/skins/default/xui/ja/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/ja/floater_avatar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Avatar" title="U踴潦怒"/>
+<floater name="Avatar" title="U踴潦豢"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml
index e447eefe0e..a472f163e3 100644
--- a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml
@@ -46,7 +46,7 @@
L$ [AMT]
</text>
<text name="currency_links">
- [http://www.secondlife.com/my/account/payment_method_management.php?lang=ja-JP 舀寞] | [http://www.secondlife.com/my/account/currency.php?lang=ja-JP 鞎沘
+ [http://www.secondlife.com/my/account/payment_method_management.php 舀寞] | [http://www.secondlife.com/my/account/currency.php 鞎沘
</text>
<text name="exchange_rate_note">
憿亙行唳蝞研潦蝣箄整
diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml
index 0661e17309..982e5ce42b 100644
--- a/indra/newview/skins/default/xui/ja/floater_camera.xml
+++ b/indra/newview/skins/default/xui/ja/floater_camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="camera_floater" title="銵函內">
+<floater name="camera_floater" title="怒∼押柴喋喋准潦">
<floater.string name="rotate_tooltip">
押潦怒嫘銝剖怒怒∼押頠
</floater.string>
diff --git a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
index ffafbaf3b6..1b6558a9eb 100644
--- a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
@@ -4,8 +4,8 @@
怒踴芥喋堆
</text>
<check_box label="唳寧怒踴芥喋堆嫘怒券摨艾雿銝整嚗" name="ani"/>
- <text name="Antialiasing:">
- U喋具扎芥U瑯喋:
+ <text name="antialiasing label">
+ U喋具扎芥U瑯喋堆
</text>
<combo_box label="U喋具扎芥U瑯喋" name="fsaa">
<combo_box.item label="∪" name="FSAADisabled"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_model_preview.xml b/indra/newview/skins/default/xui/ja/floater_model_preview.xml
index 157c68a570..c9ff0e29cb 100644
--- a/indra/newview/skins/default/xui/ja/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_model_preview.xml
@@ -4,6 +4,9 @@
<string name="status_parse_error">
具押潘Dae 怠憿閬扎整 - 閰喟敦怒扎艾胯准啜扼
</string>
+ <string name="status_material_mismatch">
+ 具押潘U怒格臬U怒柴萸颯扼胯整
+ </string>
<string name="status_reading_file">
准潦喋...
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
index 915b37557f..6aaa9a42a5 100644
--- a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
@@ -20,6 +20,9 @@
U准潦U怒∼扎怒桅豢
</text>
<button label="" label_selected="" name="browse"/>
+ <text name="Model types">
+ Second Life COLLADA (.dae) ∼扎怒萸潦整
+ </text>
<text name="dimensions">
X Y Z
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml
index 88c1905b8a..aed3b78a14 100644
--- a/indra/newview/skins/default/xui/ja/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater" title="蝘餃">
+<floater name="move_floater" title="甇抵 / 韏啗 / 憌銵">
<string name="walk_forward_tooltip">
恍脯嚗銝W啜 W 潦嚗
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
index 05a10f9f6d..cf4732a68e 100644
--- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
@@ -3,73 +3,63 @@
<floater.string name="unknown">
</floater.string>
- <radio_group label="嫘瑯扼桃車憿" name="snapshot_type_radio">
- <radio_item label="∼潦" name="postcard"/>
- <radio_item label="∠抬L$[AMOUNT]嚗" name="texture"/>
- <radio_item label="喋喋乓潦踴潦思摮" name="local"/>
- </radio_group>
+ <string name="postcard_progress_str">
+ ∼潦怒桅靽
+ </string>
+ <string name="profile_progress_str">
+ 蝔
+ </string>
+ <string name="inventory_progress_str">
+ ∠押思摮
+ </string>
+ <string name="local_progress_str">
+ 喋喋乓潦踴思摮
+ </string>
+ <string name="profile_succeeded_str">
+ 餃U准潦整
+ </string>
+ <string name="postcard_succeeded_str">
+ ∼潦怒靽∼整
+ </string>
+ <string name="inventory_succeeded_str">
+ ∠押思摮整
+ </string>
+ <string name="local_succeeded_str">
+ 喋喋乓潦踴思摮整
+ </string>
+ <string name="profile_failed_str">
+ 准潦怒潦怎餃U准潦扼整扼
+ </string>
+ <string name="postcard_failed_str">
+ ∼潦怒靽∼扼整扼
+ </string>
+ <string name="inventory_failed_str">
+ ∠押思摮扼整扼
+ </string>
+ <string name="local_failed_str">
+ 喋喋乓潦踴思摮扼整扼
+ </string>
+ <button name="advanced_options_btn" tool_tip="閰喋閮剖"/>
+ <text name="image_res_text">
+ [WIDTH] x [HEIGHT] px
+ </text>
<text name="file_size_label">
[SIZE] 准准扎
</text>
- <button label="嫘瑯扼湔" name="new_snapshot_btn"/>
- <button label="靽" name="send_btn"/>
- <button label="靽摮嚗L$[AMOUNT]嚗" name="upload_btn"/>
- <flyout_button label="靽摮" name="save_btn" tool_tip="餃∼扎怒思摮">
- <flyout_button.item label="靽摮" name="save_item"/>
- <flyout_button.item label="亙找摮..." name="saveas_item"/>
- </flyout_button>
- <button label="閰喟敦" name="more_btn" tool_tip="閰喋閮剖"/>
- <button label="蝪⊥" name="less_btn" tool_tip="閰喋閮剖"/>
- <button label="瘨" name="discard_btn"/>
- <text name="type_label2">
- 萸扎
- </text>
- <text name="format_label">
- 詨
- </text>
- <combo_box label="閫摨" name="postcard_size_combo">
- <combo_box.item label="曉具柴艾喋" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="怒嫘踴" name="Custom"/>
- </combo_box>
- <combo_box label="閫摨" name="texture_size_combo">
- <combo_box.item label="曉具柴艾喋" name="CurrentWindow"/>
- <combo_box.item label="撠嚗128x128嚗" name="Small(128x128)"/>
- <combo_box.item label="銝哨256x256嚗" name="Medium(256x256)"/>
- <combo_box.item label="憭改512x512嚗" name="Large(512x512)"/>
- <combo_box.item label="怒嫘踴" name="Custom"/>
- </combo_box>
- <combo_box label="閫摨" name="local_size_combo">
- <combo_box.item label="曉具柴艾喋" name="CurrentWindow"/>
- <combo_box.item label="320x240" name="320x240"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="1280x1024" name="1280x1024"/>
- <combo_box.item label="1600x1200" name="1600x1200"/>
- <combo_box.item label="怒嫘踴" name="Custom"/>
- </combo_box>
- <combo_box label="詨" name="local_format_combo">
- <combo_box.item label="PNG" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP" name="BMP"/>
- </combo_box>
- <spinner label="撟" name="snapshot_width"/>
- <spinner label="擃" name="snapshot_height"/>
- <check_box label="蝮行赤瘥桀箏" name="keep_aspect_check"/>
- <slider label="餉釭" name="image_quality_slider"/>
- <text name="layer_type_label">
- 准嚗
- </text>
- <combo_box label="餃研扎扎" name="layer_types">
- <combo_box.item label="" name="Colors"/>
- <combo_box.item label="瘛勗漲" name="Depth"/>
- </combo_box>
- <check_box label="扎喋踴潦扼潦" name="ui_check"/>
- <check_box label="HUD" name="hud_check"/>
- <check_box label="靽摮敺柴整" name="keep_open_check"/>
- <check_box label="駁W其甇" name="freeze_frame_check"/>
- <check_box label="芸湔" name="auto_snapshot_check"/>
+ <panel name="advanced_options_panel">
+ <text name="advanced_options_label">
+ 閰喋閮剖
+ </text>
+ <text name="layer_type_label">
+ 准嚗
+ </text>
+ <combo_box label="餃研扎扎" name="layer_types">
+ <combo_box.item label="" name="Colors"/>
+ <combo_box.item label="瘛勗漲" name="Depth"/>
+ </combo_box>
+ <check_box label="扎喋踴潦扼潦" name="ui_check"/>
+ <check_box label="HUD" name="hud_check"/>
+ <check_box label="駁W其甇" name="freeze_frame_check"/>
+ <check_box label="芸湔" name="auto_snapshot_check"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_toybox.xml b/indra/newview/skins/default/xui/ja/floater_toybox.xml
index d7056f806c..682352ec82 100644
--- a/indra/newview/skins/default/xui/ja/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/ja/floater_toybox.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Toybox" title="潦怒潦怒嫘踴扎">
+<floater name="Toybox" title="潦怒潦柴踴">
<text name="toybox label 1">
踴喋潦怒潦怨蕭整臬扎怒胯踴喋押啜整
</text>
<text name="toybox label 2">
潦怒潦株身摰怠艾踴喋臭誑銝柴怨”蝷箝U扎喋喋柴踴扯”蝷箝整
</text>
+ <button label="潦怒潦具艾胯芥" label_selected="潦怒潦具艾胯芥" name="btn_clear_all"/>
<button label="押怒閮剖敺拙" label_selected="押怒閮剖敺拙" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_translation_settings.xml b/indra/newview/skins/default/xui/ja/floater_translation_settings.xml
new file mode 100644
index 0000000000..27143086ac
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_translation_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_translation_settings" title="桃蕃閮唾身摰">
+ <string name="bing_api_key_not_verified">
+ Bing appID 隤閮潦扼整扼銝摨艾閰艾
+ </string>
+ <string name="google_api_key_not_verified">
+ Google API 准潦隤閮潦扼整扼銝摨艾閰艾
+ </string>
+ <string name="bing_api_key_verified">
+ Bing appID 隤閮潦整
+ </string>
+ <string name="google_api_key_verified">
+ Google API 准潦隤閮潦整
+ </string>
+ <check_box label="銝准格璇啁蕃閮單賬嫘怒" name="translate_chat_checkbox"/>
+ <text name="translate_language_label">
+ 蝧餉迅閮隤嚗
+ </text>
+ <combo_box name="translate_language_combo">
+ <combo_box.item label="瑯嫘璅皞" name="System Default Language"/>
+ <combo_box.item label="梯" name="English"/>
+ <combo_box.item label="Dansk嚗喋潦航嚗" name="Danish"/>
+ <combo_box.item label="Deutsch嚗扎隤嚗" name="German"/>
+ <combo_box.item label="Espa簽ol嚗嫘扎唾嚗" name="Spanish"/>
+ <combo_box.item label="Fran癟ais嚗押喋寡嚗" name="French"/>
+ <combo_box.item label="Italiano嚗扎踴芥Z嚗" name="Italian"/>
+ <combo_box.item label="Magyar嚗喋研芥潸嚗" name="Hungarian"/>
+ <combo_box.item label="Nederlands嚗芥押喋隤嚗" name="Dutch"/>
+ <combo_box.item label="Polski嚗潦押喋隤嚗" name="Polish"/>
+ <combo_box.item label="Portugu礙s嚗怒研怨嚗" name="Portugese"/>
+ <combo_box.item label="郕邽邿嚗准瑯Z嚗" name="Russian"/>
+ <combo_box.item label="T羹rk癟e嚗怒唾嚗" name="Turkish"/>
+ <combo_box.item label="苺郕訄郇郕訄 嚗艾胯押扎隤嚗" name="Ukrainian"/>
+ <combo_box.item label="銝剜 (甇擃) 嚗銝剖質嚗" name="Chinese"/>
+ <combo_box.item label="交祈嚗交祈嚗" name="Japanese"/>
+ <combo_box.item label="窱原湛質嚗" name="Korean"/>
+ </combo_box>
+ <text name="tip">
+ 蝧餉迅萸潦嫘豢艾嚗
+ </text>
+ <radio_group name="translation_service_rg">
+ <radio_item initial_value="bing" label="Bing Translator" name="bing"/>
+ <radio_item initial_value="google" label="Google Translate" name="google"/>
+ </radio_group>
+ <text name="bing_api_key_label">
+ Bing AppID [http://www.bing.com/developers/createapp.aspx AppID]:
+ </text>
+ <button label="隤閮" name="verify_bing_api_key_btn"/>
+ <text name="google_api_key_label">
+ Google API key [http://code.google.com/apis/language/translate/v2/getting_started.html#auth API key]:
+ </text>
+ <button label="隤閮" name="verify_google_api_key_btn"/>
+ <text name="google_links_text">
+ [http://code.google.com/apis/language/translate/v2/pricing.html 靘⊥奭 | [https://code.google.com/apis/console 蝯梯]
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="瘨" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
index f12648f208..f7d3fd11e0 100644
--- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="扎嫘喋喋准潦">
<string name="title_nearby">
- 餈柴扎
+ 扎寡身摰
</string>
<string name="title_group">
[GROUP] 具啜怒潦喋潦
@@ -10,7 +10,7 @@
喋喋∼研喋嫘喋潦
</string>
<string name="title_peer_2_peer">
- [NAME] 扼喋潦
+ [NAME] 具喋潦
</string>
<string name="no_one_near">
餈怒扎嫘嫘怒艾鈭箝胯整
diff --git a/indra/newview/skins/default/xui/ja/menu_toolbars.xml b/indra/newview/skins/default/xui/ja/menu_toolbars.xml
index e911ca4a13..d5363a5131 100644
--- a/indra/newview/skins/default/xui/ja/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/ja/menu_toolbars.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Toolbars Popup">
- <menu_item_call label="踴喋豢..." name="Chose Buttons"/>
+ <menu_item_call label="柴踴喋" name="Remove button"/>
+ <menu_item_call label="潦怒潦柴踴..." name="Choose Buttons"/>
<menu_item_check label="U扎喋喋具押" name="icons_with_text"/>
<menu_item_check label="U扎喋喋柴" name="icons_only"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 125e9bb226..ef3261f1d4 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu_bar name="Main Menu">
<menu label="" name="Me">
- <menu_item_call label="扎U怒艾喋..." name="Manage My Account">
- <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=ja"/>
- </menu_item_call>
<menu_item_call label="准潦..." name="Profile"/>
<menu_item_call label="摰孵尿..." name="ChangeOutfit"/>
+ <menu_item_call label="U踴潦豢..." name="Avatar Picker"/>
<menu_item_check label="∠..." name="Inventory"/>
- <menu_item_check label="詻扼嫘..." name="Gestures"/>
- <menu_item_check label="扎..." name="ShowVoice"/>
+ <menu_item_call label="啜∠押艾喋" name="NewInventoryWindow"/>
+ <menu_item_call label="湔..." name="Places"/>
+ <menu_item_call label="..." name="Picks"/>
+ <menu_item_call label="怒∼押喋喋准潦..." name="Camera Controls"/>
<menu label="潦∼喋" name="Movement">
<menu_item_call label="摨扼" name="Sit Down Here"/>
<menu_item_check label="憌" name="Fly"/>
@@ -22,34 +22,39 @@
<menu_item_call label="蝞∠璅拚柴芥胯具嫘" name="Request Admin Options"/>
<menu_item_call label="蝞∠嫘潦踴寡圾" name="Leave Admin Options"/>
<menu_item_call label="L$ 株頃" name="Buy and Sell L$"/>
+ <menu_item_call label="扎U怒艾喋..." name="Manage My Account">
+ <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=ja"/>
+ </menu_item_call>
<menu_item_call label="啣閮剖..." name="Preferences"/>
- <menu_item_call label="潦怒..." name="Toolbars"/>
+ <menu_item_call label="潦怒潦柴踴..." name="Toolbars"/>
<menu_item_call label="具艾柴喋喋准潦怒銵函內怒" name="Hide UI"/>
<menu_item_call label="[APP_NAME] 蝯鈭" name="Quit"/>
</menu>
<menu label="喋乓晞潦瑯扼" name="Communicate">
+ <menu_item_check label="..." name="Nearby Chat"/>
+ <menu_item_check label="閰晞" name="Speak"/>
+ <menu_item_check label="扎寡身摰..." name="Nearby Voice"/>
+ <menu_item_check label="扎嫘U潦喋..." name="ShowVoice"/>
+ <menu_item_check label="詻扼嫘..." name="Gestures"/>
<menu_item_call label="研喋" name="My Friends"/>
- <menu_item_call label="撅啜怒潦" name="My Groups"/>
- <menu_item_check label="餈柴" name="Nearby Chat"/>
+ <menu_item_call label="啜怒潦" name="My Groups"/>
<menu_item_call label="餈怒鈭" name="Active Speakers"/>
- <menu_item_check label="餈柴扎" name="Nearby Voice"/>
</menu>
<menu label="銝" name="World">
- <menu_item_check label="" name="Mini-Map"/>
+ <menu_item_call label="曉典啜押喋潦" name="Create Landmark Here"/>
+ <menu_item_call label="銵..." name="Destinations"/>
<menu_item_check label="銝啣" name="World Map"/>
+ <menu_item_check label="" name="Mini-Map"/>
<menu_item_check label="璊蝝" name="Search"/>
+ <menu_item_call label="潦怒研潦" name="Teleport Home"/>
+ <menu_item_call label="曉典啜潦怨身摰" name="Set Home to Here"/>
<menu_item_call label="嫘瑯扼" name="Take Snapshot"/>
- <menu_item_call label="曉典啜押喋潦" name="Create Landmark Here"/>
- <menu label="湔柴准潦" name="Land">
- <menu_item_call label="湔柴准潦" name="Place Profile"/>
- <menu_item_call label="唳" name="About Land"/>
- <menu_item_call label="啣 / 銝" name="Region/Estate"/>
- </menu>
+ <menu_item_call label="湔柴准潦" name="Place Profile"/>
+ <menu_item_call label="唳" name="About Land"/>
+ <menu_item_call label="啣 / 銝" name="Region/Estate"/>
+ <menu_item_call label="靽..." name="My Land"/>
<menu_item_call label="桀啜鞈澆" name="Buy Land"/>
- <menu_item_call label="芸桀" name="My Land"/>
<menu label="銵函內" name="LandShow">
- <menu_item_check label="蝘餃喋喋准潦" name="Movement Controls"/>
- <menu_item_check label="怒∼押喋喋准潦" name="Camera Controls"/>
<menu_item_check label="蝡亦甇U押扎" name="Ban Lines"/>
<menu_item_check label="潦喋喉璅霅嚗" name="beacons"/>
<menu_item_check label="准憓蝺" name="Property Lines"/>
@@ -58,16 +63,15 @@
<menu_item_check label="箇颯准" name="Parcel Properties"/>
<menu_item_check label="U喋嫘∼乓" name="Show Advanced Menu"/>
</menu>
- <menu_item_call label="潦怒研潦" name="Teleport Home"/>
- <menu_item_call label="曉典啜潦怨身摰" name="Set Home to Here"/>
<menu label="憭芷" name="Environment Settings">
<menu_item_call label="乓桀" name="Sunrise"/>
<menu_item_call label="甇" name="Noon"/>
<menu_item_call label="交瓷" name="Sunset"/>
<menu_item_call label="瘛勗" name="Midnight"/>
+ <menu_item_call label="芥潦詻扼喋株身摰雿輻" name="Use Region Settings"/>
</menu>
- <menu label="芰嗥啣具踴" name="Enviroment Editor">
- <menu_item_call label="啣株身摰..." name="Enviroment Settings"/>
+ <menu label="芰嗥啣具踴" name="Environment Editor">
+ <menu_item_call label="芰嗥啣株身摰..." name="Environment Settings"/>
<menu label="瘞氬桐閮剖" name="Water Presets">
<menu_item_call label="啜鈭閮剖..." name="new_water_preset"/>
<menu_item_call label="鈭閮剖蝺券..." name="edit_water_preset"/>
@@ -146,6 +150,7 @@
<menu_item_call label="氬" name="Redo"/>
</menu>
<menu label="怒" name="Help">
+ <menu_item_call label="艾..." name="How To"/>
<menu_item_call label="[SECOND_LIFE] 怒" name="Second Life Help"/>
<menu_item_call label="憳勗" name="Report Abuse"/>
<menu_item_call label="啜勗" name="Report Bug"/>
@@ -200,11 +205,10 @@
<menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/>
<menu_item_call label="啜怒潦准瑯乓柴胯芥" name="ClearGroupCache"/>
<menu_item_check label="艾嫘桀像皛" name="Mouse Smoothing"/>
+ <menu_item_call label="芥芥潦嫘准" name="Release Keys"/>
<menu label="瑯扼潦怒" name="Shortcuts">
<menu_item_call label="餃 嚗L$ [COST] 嚗..." name="Upload Image"/>
<menu_item_check label="璊蝝" name="Search"/>
- <menu_item_call label="准潦芥芥潦" name="Release Keys"/>
- <menu_item_call label="UI 柴萸扎箝押怒怨身摰" name="Set UI Size to Default"/>
<menu_item_check label="U喋嫘∼乓潦銵函內 - 研研瑯潦柴瑯扼潦怒" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="艾喋艾" name="Close Window"/>
<menu_item_call label="具艾柴艾喋艾" name="Close All Windows"/>
@@ -290,6 +294,7 @@
<menu_item_check label="" name="Lights"/>
<menu_item_check label="撉函踴株蝒文" name="Collision Skeleton"/>
<menu_item_check label="研扎准嫘" name="Raycast"/>
+ <menu_item_check label="憸具柴胯" name="Wind Vectors"/>
<menu_item_check label="颯株底蝝啣漲" name="rendercomplexity"/>
<menu_item_check label="嫘怒怒" name="Sculpt"/>
</menu>
@@ -302,7 +307,6 @@
<menu_item_check label="典蔣" name="Lighting and Shadows"/>
<menu_item_check label="憭芷賬餅颯准詻扼胯踴桀蔣" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO 典蔣桀像皛" name="SSAO and Shadow Smoothing"/>
- <menu_item_check label="啜准潦怒扎怒潦瑯扼喉閰阡畾菟嚗" name="Global Illumination"/>
<menu_item_check label="GL " name="Debug GL"/>
<menu_item_check label="蝯頝胯" name="Debug Pipeline"/>
<menu_item_check label="芸U怒∼嫘荔撱塚" name="Automatic Alpha Masks (deferred)"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 141f2c8071..20468c8c2a 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -1144,8 +1144,13 @@ L$ 航整
-safe 芥瑯扼喋摰柴扼
銵函內閮剖胯颯潦研怒怨身摰艾整
</notification>
- <notification name="DisplaySetToRecommended">
- 銵函內閮剖胯芥柴瑯嫘瑽怠箝乓行典巨研怒怨身摰艾整
+ <notification name="DisplaySetToRecommendedGPUChange">
+ 啜押胯桀氬怒駁Z身摰舀典巨研怒怨身摰整
+&apos;[LAST_GPU]&apos;
+&apos;[THIS_GPU]&apos; 整
+ </notification>
+ <notification name="DisplaySetToRecommendedFeatureChange">
+ 研喋芥喋啜萸瑯嫘桀氬怒駁Z身摰舀典巨研怒怨身摰整
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
@@ -1954,7 +1959,13 @@ Adult 撠具芥潦詻扼喋怠乓怒胯雿鈭箝柴U怒艾喋撟湧耦蝣
<usetemplate ignoretext="蝯鈭桃Ⅱ隤" name="okcancelignore" notext="蝯鈭芥" yestext="蝯鈭"/>
</notification>
<notification name="ConfirmRestoreToybox">
- 押怒柴踴喋具潦怒潦敺拙整嚗
+ 格雿摰銵具押怒閮剖柴踴喋具潦怒潦敺拙整
+
+格雿臬急颯整
+ <usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearAllToybox">
+ 格雿怒具艾柴踴喋胯潦怒胯嫘急颯潦怒潦舐征怒芥整
格雿臬急颯整
<usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
@@ -2167,10 +2178,10 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
隞嗅嚗 [SUBJECT]∼颯潦賂 [MESSAGE]
</notification>
<notification name="FriendOnline">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; 胯芥喋押扎喃葉扼
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; 胯芥喋押扎喋扼
</notification>
<notification name="FriendOffline">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; 胯芥押扎喃葉扼
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; 胯芥押扎喋扼
</notification>
<notification name="AddSelfFriend">
畾敹萸芥芸芾澈研喋駁脯具胯扼整
@@ -2284,13 +2295,15 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
喋潦芥喋啜怒潦艾整
</notification>
<notification name="TeleportToLandmark">
- 駁W喋柴湔怒艾押喋潦胯踴詻嗚具[NAME] 具湔怒研潦扼整
-憟賬芥押喋潦胯胯芥胯阡詻喋甈∼怒思柴研潦胯芥胯整
-嚗押喋潦胯怒胯芥胯整臬喋胯芥胯艾研潦詻扼扼嚗
+ [NAME] 芥押桀湔怒研潦怒胯湔踴喋胯芥胯艾
+銵函內艾喋艾扼押喋潦胯踴豢整押喋潦胯
+ 1 日豢艾艾喋虫具怒研潦胯芥胯整
+嚗格雿胯押喋潦胯怒胯芥胯喋胯芥胯
+研潦豢血銵具扼整嚗
</notification>
<notification name="TeleportToPerson">
- 駁W喋柴鈭箝怒艾[NAME] 具雿鈭箝恍蝯∼具扼整
-芥嫘雿鈭箝豢艾思柴IM胯芥胯整
+ [NAME] 柴芯鈭箝恍蝯∼具怒胯鈭箝踴喋胯芥胯銵函內艾喋艾扼雿鈭箝豢艾
+艾喋虫具怒IM胯芥胯整
嚗芥嫘桀怒胯芥胯整臬喋胯芥胯艾IM詻扼扼嚗
</notification>
<notification name="CantSelectLandFromMultipleRegions">
@@ -2312,6 +2325,9 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
<notification name="PaymentSent">
[MESSAGE]
</notification>
+ <notification name="PaymentFailure">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
扎喋伐
@@ -2567,10 +2583,10 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
</form>
</notification>
<notification name="FriendshipAccepted">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt;胯研喋駁脯乓整
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; 胯芥桀鈭箇駁脯芥胯具嫘隢整整
</notification>
<notification name="FriendshipDeclined">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt;胯研喋駁脯准整
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; 胯芥桀鈭箇駁脯芥胯具嫘艾整
</notification>
<notification name="FriendshipAcceptedByMe">
研喋桃駁脖潦輯整
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_skin.xml b/indra/newview/skins/default/xui/ja/panel_edit_skin.xml
index 2c554dad94..7573132576 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_skin.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="剝具柴踴乓" name="Head Tattoos" tool_tip="胯芥胯血豢"/>
- <texture_picker label="銝具柴踴乓" name="Upper Tattoos" tool_tip="胯芥胯血豢"/>
- <texture_picker label="銝具柴踴乓" name="Lower Tattoos" tool_tip="胯芥胯血豢"/>
+ <texture_picker label="" name="Head" tool_tip="胯芥胯血豢整"/>
+ <texture_picker label="銝頨" name="Upper Body" tool_tip="胯芥胯血豢整"/>
+ <texture_picker label="銝頨" name="Lower Body" tool_tip="胯芥胯血豢整"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/ja/panel_postcard_message.xml b/indra/newview/skins/default/xui/ja/panel_postcard_message.xml
new file mode 100644
index 0000000000..b7c3f48557
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_postcard_message.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_message">
+ <text name="to_label">
+ 蝯嚗
+ </text>
+ <text name="name_label">
+ 憪嚗
+ </text>
+ <text name="subject_label">
+ 隞嗅嚗
+ </text>
+ <line_editor label="隞嗅怠亙艾" name="subject_form"/>
+ <text name="msg_label">
+ ∼颯潦賂
+ </text>
+ <text_editor name="msg_form">
+ ∼颯潦詻怠亙艾
+ </text_editor>
+ <button label="瘨" name="cancel_btn"/>
+ <button label="靽" name="send_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml b/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml
new file mode 100644
index 0000000000..314aaef7fd
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_settings">
+ <combo_box label="閫摨" name="postcard_size_combo">
+ <combo_box.item label="曉具柴艾喋" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="怒嫘踴" name="Custom"/>
+ </combo_box>
+ <layout_stack name="postcard_image_params_ls">
+ <layout_panel name="postcard_image_size_lp">
+ <spinner label="撟" name="postcard_snapshot_width"/>
+ <spinner label="擃" name="postcard_snapshot_height"/>
+ <check_box label="蝮行赤瘥桀箏" name="postcard_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="postcard_image_format_quality_lp">
+ <slider label="餉釭" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index 1502442a06..75bf28a3c8 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -29,30 +29,5 @@
<check_box label="IM " name="EnableIMChatPopups" tool_tip="豢具扎喋嫘踴喋∼颯潦詻靽∼怒U銵函內整"/>
<spinner label="餈柴∼颯潦詻銵函內瑯嚗" name="nearby_toasts_lifetime"/>
<spinner label="餈柴∼颯潦詻瘨整扼桅瑯嚗" name="nearby_toasts_fadingtime"/>
- <check_box label="Use machine translation while chatting" name="translate_chat_checkbox"/>
- <text name="translate_chb_label">
- 銝准怠摰嫘璈璇啁蕃閮喋
- </text>
- <text name="translate_language_text">
- 蝧餉迅閮隤嚗
- </text>
- <combo_box name="translate_language_combobox">
- <combo_box.item label="瑯嫘璅皞" name="System Default Language"/>
- <combo_box.item label="English嚗梯嚗" name="English"/>
- <combo_box.item label="Dansk嚗喋潦航嚗" name="Danish"/>
- <combo_box.item label="Deutsch嚗扎隤嚗" name="German"/>
- <combo_box.item label="Espa簽ol嚗嫘扎唾嚗" name="Spanish"/>
- <combo_box.item label="Fran癟ais嚗押喋寡嚗" name="French"/>
- <combo_box.item label="Italiano嚗扎踴芥Z嚗" name="Italian"/>
- <combo_box.item label="Magyar嚗喋研芥潸嚗" name="Hungarian"/>
- <combo_box.item label="Nederlands嚗芥押喋隤嚗" name="Dutch"/>
- <combo_box.item label="Polski嚗潦押喋隤嚗" name="Polish"/>
- <combo_box.item label="Portugu礙s嚗怒研怨嚗" name="Portugese"/>
- <combo_box.item label="郕邽邿嚗准瑯Z嚗" name="Russian"/>
- <combo_box.item label="T羹rk癟e嚗怒唾嚗" name="Turkish"/>
- <combo_box.item label="苺郕訄郇郕訄嚗艾胯押扎隤嚗" name="Ukrainian"/>
- <combo_box.item label="銝剜 (甇擃) (Chinese)" name="Chinese"/>
- <combo_box.item label="交祈" name="Japanese"/>
- <combo_box.item label="窱原湛質嚗" name="Korean"/>
- </combo_box>
+ <button label="桃蕃閮唾身摰" name="ok_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
index 1bafa52fbe..91e1514e49 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
@@ -16,7 +16,7 @@
<combo_box.item label="郕邽邿 嚗准瑯Z嚗 - 潦" name="Russian"/>
<combo_box.item label="T羹rk癟e 嚗怒唾嚗 - 潦" name="Turkish"/>
<combo_box.item label="交祈 潦" name="(Japanese)"/>
- <combo_box.item label="甇擃銝剜 嚗銝剖質 - 蝜雿摮嚗 - 潦" name="Traditional Chinese"/>
+ <combo_box.item label="甇擃銝剜嚗蝪∩摮銝剖質嚗- 潦輻" name="Traditional Chinese"/>
</combo_box>
<text name="language_textbox2">
嚗韏瑕敺怠嚗
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
index 7877c0495f..d90a1632ab 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
@@ -15,7 +15,7 @@
Web嚗
</text>
<radio_group name="use_external_browser">
- <radio_item label="摰柴押艾塚IE Firefox嚗雿輻" name="external" tool_tip="押怒柴瑯嫘 Web 押艾嗚扼怒 Web 芥喋臬芥押閬整函駁U扯絲銝准怒胯整" value="1"/>
+ <radio_item label="摰柴押艾塚IE Firefox嚗雿輻" name="external" tool_tip="押怒柴瑯嫘 Web 押艾嗚扼怒 Web 芥喋臬芥押閬整函駁U扯絲銝准怒胯整" value="true"/>
<radio_item label="萸押艾嗚雿輻" name="internal" tool_tip="萸押艾嗚扼怒 Web 芥喋胯芥押閬整[APP_NAME] 急啜艾喋艾扼柴押艾嗚整" value=""/>
</radio_group>
<check_box initial_value="true" label="押啜扎喋嫘怒" name="browser_plugins_enabled"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml
new file mode 100644
index 0000000000..46f2b0a3f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_inventory">
+ <text name="title">
+ ∠押思摮
+ </text>
+ <text name="hint_lbl">
+ 餃∠押思摮怒 L$[UPLOAD_COST] 株祥具整餃胯嫘具虫摮怒臬像孵耦撘 1 扎豢艾
+ </text>
+ <combo_box label="閫摨" name="texture_size_combo">
+ <combo_box.item label="曉具柴艾喋" name="CurrentWindow"/>
+ <combo_box.item label="撠嚗128x128嚗" name="Small(128x128)"/>
+ <combo_box.item label="銝哨256x256嚗" name="Medium(256x256)"/>
+ <combo_box.item label="憭改512x512嚗" name="Large(512x512)"/>
+ <combo_box.item label="怒嫘踴" name="Custom"/>
+ </combo_box>
+ <spinner label="撟" name="inventory_snapshot_width"/>
+ <spinner label="擃" name="inventory_snapshot_height"/>
+ <check_box label="蝮行赤瘥桀箏" name="inventory_keep_aspect_check"/>
+ <button label="瘨" name="cancel_btn"/>
+ <button label="靽摮" name="save_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml
new file mode 100644
index 0000000000..cb658fb6c9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_local">
+ <text name="title">
+ 喋喋乓潦踴潦思摮
+ </text>
+ <combo_box label="閫摨" name="local_size_combo">
+ <combo_box.item label="曉具柴艾喋" name="CurrentWindow"/>
+ <combo_box.item label="320x240" name="320x240"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1280x1024" name="1280x1024"/>
+ <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="怒嫘踴" name="Custom"/>
+ </combo_box>
+ <layout_stack name="local_image_params_ls">
+ <layout_panel name="local_image_size_lp">
+ <spinner label="撟" name="local_snapshot_width"/>
+ <spinner label="擃" name="local_snapshot_height"/>
+ <check_box label="蝮行赤瘥桀箏" name="local_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="local_image_format_quality_lp">
+ <combo_box label="詨" name="local_format_combo">
+ <combo_box.item label="PNG嚗舫抒葬嚗" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP嚗舫抒葬嚗" name="BMP"/>
+ </combo_box>
+ <slider label="餉釭" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+ <button label="瘨" name="cancel_btn"/>
+ <flyout_button label="靽摮" name="save_btn" tool_tip="餃∼扎怒思摮">
+ <flyout_button.item label="靽摮" name="save_item"/>
+ <flyout_button.item label="亙找摮..." name="saveas_item"/>
+ </flyout_button>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
new file mode 100644
index 0000000000..cd5b7590ad
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_options">
+ <button label="准潦怒潦急蝔踴" name="save_to_profile_btn"/>
+ <button label="∼潦" name="save_to_email_btn"/>
+ <button label="∠押思摮嚗L$[Amount]嚗" name="save_to_inventory_btn"/>
+ <button label="喋喋乓潦踴潦思摮" name="save_to_computer_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml
new file mode 100644
index 0000000000..1ddd723840
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_postcard">
+ <string name="default_subject">
+ [SECOND_LIFE] 柴嫘怒潦扼
+ </string>
+ <string name="default_message">
+ 脯閬扼嚗
+ </string>
+ <string name="upload_message">
+ 靽∩葉...
+ </string>
+ <text name="title">
+ ∼潦
+ </text>
+ <button label="∼颯潦" name="message_btn"/>
+ <button label="閮剖" name="settings_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml
new file mode 100644
index 0000000000..b860a6afe9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_profile">
+ <text name="title">
+ 准潦怒潦急蝔踴
+ </text>
+ <combo_box label="閫摨" name="profile_size_combo">
+ <combo_box.item label="曉具柴艾喋" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="怒嫘踴" name="Custom"/>
+ </combo_box>
+ <layout_stack name="profile_image_params_ls">
+ <layout_panel name="profile_image_size_lp">
+ <spinner label="撟" name="profile_snapshot_width"/>
+ <spinner label="擃" name="profile_snapshot_height"/>
+ <check_box label="蝮行赤瘥桀箏" name="profile_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="profile_image_metadata_lp">
+ <text name="caption_label">
+ 准瑯扼喉
+ </text>
+ <check_box initial_value="true" label="湔怒" name="add_location_cb"/>
+ </layout_panel>
+ </layout_stack>
+ <button label="瘨" name="cancel_btn"/>
+ <button label="蝔" name="post_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index f611b96502..c6b033ed95 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -1214,7 +1214,7 @@ support@secondlife.com 怒
∠押怒柴胯嫘柴喋潦整
</string>
<string name="InventoryInboxNoItems">
- 潦晞研扎嫘扯頃乓胯恍整
+ 鞈澆乓芥押血敺U扎胯怨”蝷箝∠押柴押怒怒押啜衣宏具扼啜閬芥芥游怒臬扎具扼整
</string>
<string name="MarketplaceURL">
http://marketplace.[DOMAIN_NAME]
@@ -1412,6 +1412,9 @@ support@secondlife.com 怒
<string name="no_attachments">
具艾U踴∼喋胯整
</string>
+ <string name="Attachments remain">
+ U踴∼喋嚗畾柴嫘准堆[COUNT]嚗
+ </string>
<string name="Buy">
鞎瑯
</string>
@@ -1538,6 +1541,12 @@ support@secondlife.com 怒
<string name="Right Pec">
唾貊
</string>
+ <string name="Neck">
+ 擐
+ </string>
+ <string name="Avatar Center">
+ U踴潦桐葉憭
+ </string>
<string name="Invalid Attachment">
鋆甇整
</string>
@@ -4030,6 +4039,18 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
<string name="you_paid_ldollars_no_name">
L$ [AMOUNT] 舀整嚗[REASON]
</string>
+ <string name="you_paid_failure_ldollars">
+ [NAME] [REASON] 桐誨 L$ [AMOUNT] 舀整扼
+ </string>
+ <string name="you_paid_failure_ldollars_no_info">
+ L$ [AMOUNT] 舀整扼
+ </string>
+ <string name="you_paid_failure_ldollars_no_reason">
+ [NAME] L$ [AMOUNT] 舀整扼
+ </string>
+ <string name="you_paid_failure_ldollars_no_name">
+ [REASON] 隞 L$ [AMOUNT] 舀整扼
+ </string>
<string name="for item">
[ITEM]
</string>
@@ -4440,6 +4461,12 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
<string name="ExternalEditorFailedToRun">
憭具具踴潦摰銵扼整扼
</string>
+ <string name="TranslationFailed">
+ 蝧餉迅扼整扼嚗[REASON]
+ </string>
+ <string name="TranslationResponseParseError">
+ 蝧餉迅桀蝑怒具押潦箇整
+ </string>
<string name="Esc">
Esc
</string>
@@ -4810,7 +4837,7 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
</string>
<string name="Command_Move_Label">
- 蝘餃
+ 甇抵 / 韏啗 / 憌銵
</string>
<string name="Command_People_Label">
@@ -4837,10 +4864,10 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
閰晞
</string>
<string name="Command_View_Label">
- 閬
+ 怒∼押喋喋准潦
</string>
<string name="Command_Voice_Label">
- 餈柴扎
+ 扎寡身摰
</string>
<string name="Command_AboutLand_Tooltip">
閮芸恍U
@@ -4912,7 +4939,16 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
怒∼押株摨艾憭
</string>
<string name="Command_Voice_Tooltip">
- 扎嫘璈賬方桐犖
+ 扎喋胯潦怒扼柴喋潦怒餈怒鈭箝桅喲隤踵
+ </string>
+ <string name="Toolbar_Bottom_Tooltip">
+ 曉具銝柴潦怒潦怒整
+ </string>
+ <string name="Toolbar_Left_Tooltip">
+ 曉具撌艾柴潦怒潦怒整
+ </string>
+ <string name="Toolbar_Right_Tooltip">
+ 曉具喋柴潦怒潦怒整
</string>
<string name="Retain%">
蝬剜
@@ -4938,4 +4974,19 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
<string name="Normal">
</string>
+ <string name="snapshot_quality_very_low">
+ 撣詻思
+ </string>
+ <string name="snapshot_quality_low">
+ 雿
+ </string>
+ <string name="snapshot_quality_medium">
+ 銝
+ </string>
+ <string name="snapshot_quality_high">
+ 擃
+ </string>
+ <string name="snapshot_quality_very_high">
+ 撣詻恍
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/ja/teleport_strings.xml b/indra/newview/skins/default/xui/ja/teleport_strings.xml
index 04ea1c2438..6c69c7a231 100644
--- a/indra/newview/skins/default/xui/ja/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/ja/teleport_strings.xml
@@ -21,8 +21,8 @@
撠敺扼氬艾
</message>
<message name="NoHelpIslandTP">
- Welcome Island怒舀颯具扼整
-Welcome Island Public怨
+ 艾扼怒怒U扎押喋怒研潦扳颯具胯扼整
+Welcome Island Public怨摨艾乓潦芥U怒銵艾
</message>
<message name="noaccess_tport">
畾敹萸芥柴研潦桃啜詻柴U胯颯嫘整
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index c072ea9b5a..24c961fa26 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -20,8 +20,6 @@
<menu_item_call label="Tryb oddalenia" name="Set Away"/>
<menu_item_call label="Tryb pracy" name="Set Busy"/>
</menu>
- <menu_item_call label="Za髒daj statusu administratora" name="Request Admin Options"/>
- <menu_item_call label="Wycz atatus administratora" name="Leave Admin Options"/>
<menu_item_call label="Wycz [APP_NAME]" name="Quit"/>
</menu>
<menu label="Komunikacja" name="Communicate">
@@ -36,11 +34,10 @@
<menu_item_check label="Szukaj" name="Search"/>
<menu_item_call label="Zr籀b zdjcie" name="Take Snapshot"/>
<menu_item_call label="Zapamitaj to miejsce (LM)" name="Create Landmark Here"/>
- <menu label="Miejsce" name="Land">
- <menu_item_call label="Profil miejsca" name="Place Profile"/>
- <menu_item_call label="O posiadoci" name="About Land"/>
- <menu_item_call label="Region/Majtek" name="Region/Estate"/>
- </menu>
+ <menu_item_separator/>
+ <menu_item_call label="Profil miejsca" name="Place Profile"/>
+ <menu_item_call label="O posiadoci" name="About Land"/>
+ <menu_item_call label="Region/Majtek" name="Region/Estate"/>
<menu_item_call label="Kup posiado" name="Buy Land"/>
<menu_item_call label="Moje posiadoci" name="My Land"/>
<menu label="Poka髒" name="LandShow">
@@ -56,7 +53,7 @@
</menu>
<menu_item_call label="Teleportuj do Miejsca Startu" name="Teleport Home"/>
<menu_item_call label="Ustaw Miejsce Startu" name="Set Home to Here"/>
- <menu label="Soce" name="Environment Settings">
+ <menu label="Soce" name="Sun">
<menu_item_call label="Wsch籀d Soca" name="Sunrise"/>
<menu_item_call label="Poudnie" name="Noon"/>
<menu_item_call label="Zach籀d Soca" name="Sunset"/>
@@ -153,22 +150,22 @@
<menu_item_check label="Poka髒 celownik myszki" name="ShowCrosshairs"/>
</menu>
<menu label="Rodzaje renderowania" name="Rendering Types">
- <menu_item_check label="Podstawowe" name="Simple"/>
- <menu_item_check label="Maska alpha" name="Alpha"/>
- <menu_item_check label="Drzewo" name="Tree"/>
- <menu_item_check label="Awatary" name="Character"/>
- <menu_item_check label="Paszczyzna powierzchni" name="SurfacePath"/>
- <menu_item_check label="Niebo" name="Sky"/>
- <menu_item_check label="Woda" name="Water"/>
- <menu_item_check label="Ziemia" name="Ground"/>
- <menu_item_check label="Gono" name="Volume"/>
- <menu_item_check label="Trawa" name="Grass"/>
- <menu_item_check label="Chmury" name="Clouds"/>
- <menu_item_check label="Czsteczki" name="Particles"/>
- <menu_item_check label="Zderzenie" name="Bump"/>
+ <menu_item_check label="Podstawowe" name="Rendering Type Simple"/>
+ <menu_item_check label="Maska alpha" name="Rendering Type Alpha"/>
+ <menu_item_check label="Drzewo" name="Rendering Type Tree"/>
+ <menu_item_check label="Awatary" name="Rendering Type Character"/>
+ <menu_item_check label="Paszczyzna powierzchni" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="Niebo" name="Rendering Type Sky"/>
+ <menu_item_check label="Woda" name="Rendering Type Water"/>
+ <menu_item_check label="Ziemia" name="Rendering Type Ground"/>
+ <menu_item_check label="Gono" name="Rendering Type Volume"/>
+ <menu_item_check label="Trawa" name="Rendering Type Grass"/>
+ <menu_item_check label="Chmury" name="Rendering Type Clouds"/>
+ <menu_item_check label="Czsteczki" name="Rendering Type Particles"/>
+ <menu_item_check label="Zderzenie" name="Rendering Type Bump"/>
</menu>
<menu label="Opcje renderowania" name="Rendering Features">
- <menu_item_check label="UI" name="UI"/>
+ <menu_item_check label="UI" name="ToggleUI"/>
<menu_item_check label="Zaznaczone" name="Selected"/>
<menu_item_check label="Podwietlenie" name="Highlighted"/>
<menu_item_check label="Tekstury dynamiczne" name="Dynamic Textures"/>
@@ -180,10 +177,7 @@
<menu_item_call label="Wyczy bufor danych grupy" name="ClearGroupCache"/>
<menu_item_check label="Wygadzanie ruchu myszki" name="Mouse Smoothing"/>
<menu label="Skr籀ty" name="Shortcuts">
- <menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/>
- <menu_item_check label="Szukaj" name="Search"/>
<menu_item_call label="Zwolnij klawisze" name="Release Keys"/>
- <menu_item_call label="Domylne ustawienia rozmiaru interfejsu" name="Set UI Size to Default"/>
<menu_item_check label="Poka髒 menu Zaawansowane - skr籀t" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Zamknij okno" name="Close Window"/>
<menu_item_call label="Zamknij wszystkie okna" name="Close All Windows"/>
@@ -192,13 +186,6 @@
<menu_item_check label="Wolna kamera" name="Joystick Flycam"/>
<menu_item_call label="Reset widoku" name="Reset View"/>
<menu_item_call label="Zobacz ostatniego rozm籀wc" name="Look at Last Chatter"/>
- <menu label="Wybierz narzdzie budowania" name="Select Tool">
- <menu_item_call label="Narzdzie ogniskowej" name="Focus"/>
- <menu_item_call label="Narzdzie ruchu" name="Move"/>
- <menu_item_call label="Narzdzie edycji" name="Edit"/>
- <menu_item_call label="Stw籀rz narzdzie" name="Create"/>
- <menu_item_call label="Narzdzia posiadoci" name="Land"/>
- </menu>
<menu_item_call label="Przybli髒" name="Zoom In"/>
<menu_item_call label="Domylne przybli髒enie" name="Zoom Default"/>
<menu_item_call label="Oddal" name="Zoom Out"/>
@@ -267,9 +254,8 @@
<menu_item_call label="Upu pakiet pamici" name="Drop a Packet"/>
</menu>
<menu_item_call label="Zderzenia, popchnicia &amp; uderzenia" name="Bumps, Pushes &amp;amp; Hits"/>
- <menu label="wiat" name="World">
+ <menu label="wiat" name="DevelopWorld">
<menu_item_check label="Domylne ustawienia rodowiska Regionu" name="Sim Sun Override"/>
- <menu_item_check label="Efekty emiter籀w" name="Cheesy Beacon"/>
<menu_item_check label="Ustalona pogoda" name="Fixed Weather"/>
<menu_item_call label="Zachowaj bufor pamici obiekt籀w regionu" name="Dump Region Object Cache"/>
</menu>
@@ -291,11 +277,11 @@
</menu>
<menu label="Awatar" name="Character">
<menu label="Przesu bakowan tekstur" name="Grab Baked Texture">
- <menu_item_call label="Tcz籀wka oka" name="Iris"/>
- <menu_item_call label="Gowa" name="Head"/>
- <menu_item_call label="G籀rna cz ciaa" name="Upper Body"/>
- <menu_item_call label="Dolna cz ciaa" name="Lower Body"/>
- <menu_item_call label="Sp籀dnica" name="Skirt"/>
+ <menu_item_call label="Tcz籀wka oka" name="Grab Iris"/>
+ <menu_item_call label="Gowa" name="Grab Head"/>
+ <menu_item_call label="G籀rna cz ciaa" name="Grab Upper Body"/>
+ <menu_item_call label="Dolna cz ciaa" name="Grab Lower Body"/>
+ <menu_item_call label="Sp籀dnica" name="Grab Skirt"/>
</menu>
<menu label="Testy postaci" name="Character Tests">
<menu_item_call label="Przesu geometri postaci" name="Toggle Character Geometry"/>
@@ -316,8 +302,8 @@
<menu_item_check label="Poka髒 menu administratora" name="View Admin Options"/>
</menu>
<menu label="Administrator" name="Admin">
- <menu label="Object">
- <menu_item_call label="We驕 kopi" name="Take Copy"/>
+ <menu label="Object" name="AdminObject">
+ <menu_item_call label="We驕 kopi" name="Admin Take Copy"/>
<menu_item_call label="Reset waciciela" name="Force Owner To Me"/>
<menu_item_call label="Reset przyzwolenia waciciela" name="Force Owner Permissive"/>
<menu_item_call label="Usu" name="Delete"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml
index c374264c4a..e843e56090 100644
--- a/indra/newview/skins/default/xui/pt/floater_about.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about.xml
@@ -65,13 +65,35 @@ Vers瓊o do servidor de voz: [VOICE_VERSION]
</panel>
<panel label="Licen癟as" 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) 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). 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 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.
+ 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)
+ 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).
+ GL Copyright (C) 1999-2004 Brian Paul.
+ GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University e 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
+ 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.
-O Second Life Viewer usa Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (e licenciadores). Todos os direitos reservados. Mais detalhes em www.havok.com
+ O Visualizador do Second Life usa Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (e seus Licenciantes). Todos os direitos reservados. Consulte www.havok.com para obter detalhes.
-Todos os direitos reservados. Mais detalhes em licenses.txt.
+ Este software cont矇m c籀digo fonte fornecido pela NVIDIA Corporation.
-Codifica癟瓊o do 獺udio de bate-papo de voz: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+ Todos os direitos reservados. Consulte licenses.txt para obter detalhes.
+
+ Codifica癟瓊o de 獺udio da conversa com voz: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
</text_editor>
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index cc09888994..30d4b0290c 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -130,7 +130,7 @@ V獺 para o menu Mundo &gt; Sobre o terreno ou selecione outro lote para mostrar
Tr獺fego:
</text>
<text name="DwellText">
- 0
+ Carregando...
</text>
<button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/>
<button label="Venda Linden" name="Linden Sale..." tool_tip="O terreno precisa ser possu穩do, estar com o conte繳do configurado e n瓊o estar pronto para leil瓊o."/>
@@ -309,13 +309,15 @@ Apenas lotes maiores podem ser listados na busca.
Proibido empurrar (regulamento da regi瓊o)
</panel.string>
<panel.string name="see_avs_text">
- Veja e bata papo com os residentes deste terreno
+ Avatares em outros lotes podem ver
</panel.string>
<text name="allow_label">
Autorizar outros residentes a:
</text>
- <check_box label="Editar terreno" name="edit land check" tool_tip="Se ativado, qualquer um pode modificar o terreno. melhor deixar esta op癟瓊o desativada, uma vez que voc礙 sempre pode editar seu pr籀prio terreno."/>
- <check_box label="Voar" name="check fly" tool_tip="Se ativado, residentes podem voar sobre seu terreno. Se desativado, eles podem voar apenas at矇 chegar ou sobrevoar o seu terreno."/>
+ <text name="allow_label0">
+ Voar:
+ </text>
+ <check_box label="Todos" name="check fly" tool_tip="Se ativado, residentes podem voar sobre seu terreno. Se desativado, eles podem voar apenas at矇 chegar ou sobrevoar o seu terreno."/>
<text name="allow_label2">
Criar objetos:
</text>
@@ -331,9 +333,6 @@ Apenas lotes maiores podem ser listados na busca.
</text>
<check_box label="Residentes" name="check other scripts"/>
<check_box label="Grupo" name="check group scripts"/>
- <text name="land_options_label">
- Op癟繭es do terreno:
- </text>
<check_box label="Seguro (sem danos)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, impedindo lutas com danos. Se n瓊o ativado, lutas com danos 矇 habilitado."/>
<check_box label="Proibido empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. Ativar essa op癟瓊o ajuda a prevenir comportamentos desordeiros no seu terreno."/>
<check_box label="Mostrar terreno nos resultados de busca (L$30/semana)" name="ShowDirectoryCheck" tool_tip="Permitir que as pessoas vejam este terreno nos resultados de busca"/>
@@ -374,9 +373,9 @@ Apenas lotes maiores podem ser listados na busca.
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Clique para escolher uma imagem"/>
<text name="allow_label5">
- Permitir que residentes de outros terrenos:
+ e bater papo com avatares neste lote
</text>
- <check_box label="Ver avatares" name="SeeAvatarsCheck" tool_tip="Permite que residentes de outros terrenos vejam e conversem com os residentes deste terreno e vice-versa."/>
+ <check_box label="Ver avatares" name="SeeAvatarsCheck" tool_tip="Permite que os avatares em outros lotes vejam e batam papo com avatares neste lote. Voc礙 poder獺 v礙-los e conversar com eles."/>
<text name="landing_point">
Ponto de Aterrissagem: [LANDING]
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar.xml b/indra/newview/skins/default/xui/pt/floater_avatar.xml
index f51b765105..168cdacae1 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Avatar" title="SELETOR DE AVATAR"/>
+<floater name="Avatar" title="ESCOLHA UM AVATAR"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
index b5ba477fe5..2845a29e1d 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
@@ -46,7 +46,7 @@
L$ [AMT]
</text>
<text name="currency_links">
- [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency]
+ [http://www.secondlife.com/my/account/payment_method_management.php m矇todo de pagamento] | [http://www.secondlife.com/my/account/currency.php moeda]
</text>
<text name="exchange_rate_note">
Digite o valor novamente para ver o c璽mbio atual.
diff --git a/indra/newview/skins/default/xui/pt/floater_camera.xml b/indra/newview/skins/default/xui/pt/floater_camera.xml
index 6b66d01781..9cda01c187 100644
--- a/indra/newview/skins/default/xui/pt/floater_camera.xml
+++ b/indra/newview/skins/default/xui/pt/floater_camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="camera_floater" title="EXIBIR">
+<floater name="camera_floater" title="CONTROLES DA CMERA">
<floater.string name="rotate_tooltip">
Girar a C璽mera ao redor do Foco
</floater.string>
diff --git a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
index 8c95a3b548..1bc2bce768 100644
--- a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
@@ -4,7 +4,7 @@
Filtragem:
</text>
<check_box label="Filtragem Anisotr籀pica (mais lento quando habilitada)" name="ani"/>
- <text name="Antialiasing:">
+ <text name="antialiasing label">
Suaviza癟瓊o:
</text>
<combo_box label="Suaviza癟瓊o" name="fsaa" width="94">
diff --git a/indra/newview/skins/default/xui/pt/floater_model_preview.xml b/indra/newview/skins/default/xui/pt/floater_model_preview.xml
index 17abe72173..8960500831 100644
--- a/indra/newview/skins/default/xui/pt/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_model_preview.xml
@@ -4,6 +4,9 @@
<string name="status_parse_error">
Erro: Problema ao analisar .dae - consulte log para obter detalhes.
</string>
+ <string name="status_material_mismatch">
+ Erro: o material do modelo n瓊o 矇 um subconjunto do modelo de refer礙ncia.
+ </string>
<string name="status_reading_file">
Carregando...
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_model_wizard.xml b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
index d9195adbf9..498058f933 100644
--- a/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
@@ -20,6 +20,9 @@
Escolha o arquivo de modelo para upload
</text>
<button label="Procurar..." label_selected="Procurar..." name="browse"/>
+ <text name="Model types">
+ O Second Life oferece suporte a arquivos COLLADA (.dae)
+ </text>
<text name="dimensions">
X Y Z
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_moveview.xml b/indra/newview/skins/default/xui/pt/floater_moveview.xml
index 0cb6f9a98e..728357a400 100644
--- a/indra/newview/skins/default/xui/pt/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_moveview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater" title="MOVER">
+<floater name="move_floater" title="ANDAR/CORRER/VOAR">
<string name="walk_forward_tooltip">
Andar para frente (flecha para cima ou W)
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
index d62fe3dd20..4110e69068 100644
--- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
@@ -3,73 +3,63 @@
<floater.string name="unknown">
desconhecido
</floater.string>
- <radio_group label="Tipo de foto" name="snapshot_type_radio">
- <radio_item label="Email" name="postcard"/>
- <radio_item label="Meu invent獺rio (L$[AMOUNT])" name="texture"/>
- <radio_item label="Salvar no meu PC" name="local"/>
- </radio_group>
+ <string name="postcard_progress_str">
+ Enviando e-mail
+ </string>
+ <string name="profile_progress_str">
+ Postando
+ </string>
+ <string name="inventory_progress_str">
+ Salvando no invent獺rio
+ </string>
+ <string name="local_progress_str">
+ Salvo no computador
+ </string>
+ <string name="profile_succeeded_str">
+ Imagem carregada
+ </string>
+ <string name="postcard_succeeded_str">
+ E-mail enviado!
+ </string>
+ <string name="inventory_succeeded_str">
+ Salvo no invent獺rio!
+ </string>
+ <string name="local_succeeded_str">
+ Salvo no computador!
+ </string>
+ <string name="profile_failed_str">
+ Falha ao carregar a imagem no feed do seu perfil.
+ </string>
+ <string name="postcard_failed_str">
+ Falha ao enviar e-mail.
+ </string>
+ <string name="inventory_failed_str">
+ Falha ao salvar no invent獺rio.
+ </string>
+ <string name="local_failed_str">
+ Falha ao salvar no computador.
+ </string>
+ <button name="advanced_options_btn" tool_tip="Op癟繭es avan癟adas"/>
+ <text name="image_res_text">
+ [WIDTH] x [HEIGHT] px
+ </text>
<text name="file_size_label">
[TAMANHO] KB
</text>
- <button label="Atualizar a foto" name="new_snapshot_btn"/>
- <button label="Enviar" name="send_btn"/>
- <button label="Economize (L$[AMOUNT])" name="upload_btn"/>
- <flyout_button label="Salvar" name="save_btn" tool_tip="Salvar imagem em um arquivo">
- <flyout_button.item label="Salvar" name="save_item"/>
- <flyout_button.item label="Salvar como..." name="saveas_item"/>
- </flyout_button>
- <button label="Mais" name="more_btn" tool_tip="Op癟繭es avan癟adas"/>
- <button label="Menos" name="less_btn" tool_tip="Op癟繭es avan癟adas"/>
- <button label="Cancelar" name="discard_btn"/>
- <text name="type_label2">
- Tamanho
- </text>
- <text name="format_label">
- Formato
- </text>
- <combo_box label="Resolu癟瓊o" name="postcard_size_combo">
- <combo_box.item label="Janela atual" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="Customizado" name="Custom"/>
- </combo_box>
- <combo_box label="Resolu癟瓊o" name="texture_size_combo">
- <combo_box.item label="Janela atual" name="CurrentWindow"/>
- <combo_box.item label="Pequeno (128x128)" name="Small(128x128)"/>
- <combo_box.item label="M矇dio (256x256)" name="Medium(256x256)"/>
- <combo_box.item label="Grande (512x512)" name="Large(512x512)"/>
- <combo_box.item label="Customizado" name="Custom"/>
- </combo_box>
- <combo_box label="Resolu癟瓊o" name="local_size_combo">
- <combo_box.item label="Janela atual" name="CurrentWindow"/>
- <combo_box.item label="320x240" name="320x240"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="1280x1024" name="1280x1024"/>
- <combo_box.item label="1600x1200" name="1600x1200"/>
- <combo_box.item label="Customizado" name="Custom"/>
- </combo_box>
- <combo_box label="Formato" name="local_format_combo">
- <combo_box.item label="PNG" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP" name="BMP"/>
- </combo_box>
- <spinner label="Largura" name="snapshot_width"/>
- <spinner label="Altura" name="snapshot_height"/>
- <check_box label="Limitar propro癟繭es" name="keep_aspect_check"/>
- <slider label="Qualidade da imagem" name="image_quality_slider"/>
- <text name="layer_type_label">
- Capturar:
- </text>
- <combo_box label="Camadas da imagem" name="layer_types">
- <combo_box.item label="Cores" name="Colors"/>
- <combo_box.item label="Profundidade" name="Depth"/>
- </combo_box>
- <check_box label="Interface" name="ui_check"/>
- <check_box label="HUDs" name="hud_check"/>
- <check_box label="Deixar aberto depois de salvo" name="keep_open_check"/>
- <check_box label="Gerar quadro (tela inteira)" name="freeze_frame_check"/>
- <check_box label="Atualizar" name="auto_snapshot_check"/>
+ <panel name="advanced_options_panel">
+ <text name="advanced_options_label">
+ OPES AVANADAS
+ </text>
+ <text name="layer_type_label">
+ Capturar:
+ </text>
+ <combo_box label="Camadas da imagem" name="layer_types">
+ <combo_box.item label="Cores" name="Colors"/>
+ <combo_box.item label="Profundidade" name="Depth"/>
+ </combo_box>
+ <check_box label="Interface" name="ui_check"/>
+ <check_box label="HUDs" name="hud_check"/>
+ <check_box label="Gerar quadro (tela inteira)" name="freeze_frame_check"/>
+ <check_box label="Atualiza癟瓊o autom獺tica" name="auto_snapshot_check"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_toybox.xml b/indra/newview/skins/default/xui/pt/floater_toybox.xml
index 67076beb0f..3677c3b1f5 100644
--- a/indra/newview/skins/default/xui/pt/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/pt/floater_toybox.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Toybox" title="PERSONALIZAR BARRAS DE FERRAMENTA">
+<floater name="Toybox" title="BOTES DA BARRA DE FERRAMENTAS">
<text name="toybox label 1">
Adicione ou remova bot繭es arrastando-os para dentro ou para fora das barras de ferramentas.
</text>
<text name="toybox label 2">
Os bot繭es aparecer瓊o como mostrado ou somente como 穩cone, dependendo das configura癟繭es de cada barra de ferramentas.
</text>
+ <button label="Limpar todas as barras de ferramentas" label_selected="Limpar todas as barras de ferramentas" name="btn_clear_all"/>
<button label="Restaurar padr瓊o" label_selected="Restaurar padr瓊o" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_translation_settings.xml b/indra/newview/skins/default/xui/pt/floater_translation_settings.xml
new file mode 100644
index 0000000000..1955599a81
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_translation_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_translation_settings" title="CONFIGURAES DE TRADUO DE BATE-PAPO">
+ <string name="bing_api_key_not_verified">
+ appID do Bing n瓊o verificada. Tente novamente.
+ </string>
+ <string name="google_api_key_not_verified">
+ Chave do API do Google n瓊o verificada. Tente novamente.
+ </string>
+ <string name="bing_api_key_verified">
+ appID do Bing verificada.
+ </string>
+ <string name="google_api_key_verified">
+ Chave do API do Google verificada.
+ </string>
+ <check_box label="Permitir a tradu癟瓊o de m獺quina durante o bate-papo" name="translate_chat_checkbox"/>
+ <text name="translate_language_label">
+ Traduzir bate-papo para:
+ </text>
+ <combo_box name="translate_language_combo">
+ <combo_box.item label="Padr瓊o" name="System Default Language"/>
+ <combo_box.item label="Ingl礙s" name="English"/>
+ <combo_box.item label="Dansk (Dinamarqu礙s)" name="Danish"/>
+ <combo_box.item label="Deutsch (Alem瓊o)" name="German"/>
+ <combo_box.item label="Espa簽ol (Espanhol)" name="Spanish"/>
+ <combo_box.item label="Fran癟ais (Franc礙s)" name="French"/>
+ <combo_box.item label="Italiano (Italiano)" name="Italian"/>
+ <combo_box.item label="Magyar (H繳ngaro)" name="Hungarian"/>
+ <combo_box.item label="Nederlands (Holand礙s)" name="Dutch"/>
+ <combo_box.item label="Polski (Polon礙s)" name="Polish"/>
+ <combo_box.item label="Portugu礙s (Portugu礙s)" name="Portugese"/>
+ <combo_box.item label="郕邽邿 (Russo)" name="Russian"/>
+ <combo_box.item label="T羹rk癟e (Turco)" name="Turkish"/>
+ <combo_box.item label="苺郕訄郇郕訄 (Ucraniano)" name="Ukrainian"/>
+ <combo_box.item label="銝剜 (蝞雿) (Chin礙s)" name="Chinese"/>
+ <combo_box.item label="交祈 (Japon礙s)" name="Japanese"/>
+ <combo_box.item label="窱原 (Coreano)" name="Korean"/>
+ </combo_box>
+ <text name="tip">
+ Escolha o servi癟o de tradu癟瓊o:
+ </text>
+ <radio_group name="translation_service_rg">
+ <radio_item initial_value="bing" label="Bing Translator" name="bing"/>
+ <radio_item initial_value="google" label="Google Translate" name="google"/>
+ </radio_group>
+ <text name="bing_api_key_label">
+ [http://www.bing.com/developers/createapp.aspx AppID] do Bing:
+ </text>
+ <button label="Verificar" name="verify_bing_api_key_btn"/>
+ <text name="google_api_key_label">
+ [http://code.google.com/apis/language/translate/v2/getting_started.html#auth Chave API] do Google:
+ </text>
+ <button label="Verificar" name="verify_google_api_key_btn"/>
+ <text name="google_links_text">
+ [http://code.google.com/apis/language/translate/v2/pricing.html Pre癟os] | [https://code.google.com/apis/console Estat穩sticas]
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
index 6132479041..745a7d0e00 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="CONTROLES DE VOZ">
<string name="title_nearby">
- Voz pr籀xima
+ CONFIGURAES DE VOZ
</string>
<string name="title_group">
- Liga癟瓊o de grupo com [GROUP]
+ LIGAO DE GRUPO COM [GROUP]
</string>
<string name="title_adhoc">
- Teleconfer礙ncia
+ TELECONFERNCIA
</string>
<string name="title_peer_2_peer">
- Liga癟瓊o para [NAME]
+ LIGAO PARA [NAME]
</string>
<string name="no_one_near">
Ningu矇m por perto ativou a voz
diff --git a/indra/newview/skins/default/xui/pt/menu_toolbars.xml b/indra/newview/skins/default/xui/pt/menu_toolbars.xml
index f1e41aaea9..b58a1a6e4f 100644
--- a/indra/newview/skins/default/xui/pt/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/pt/menu_toolbars.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Toolbars Popup">
- <menu_item_call label="Escolher bot繭es..." name="Chose Buttons"/>
+ <menu_item_call label="Remover este bot瓊o" name="Remove button"/>
+ <menu_item_call label="Bot繭es da barra de ferramentas..." name="Choose Buttons"/>
<menu_item_check label="cones e r籀tulos" name="icons_with_text"/>
<menu_item_check label="Somente 穩cones" name="icons_only"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 5ff2d49ac1..119a3bdcfe 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu_bar name="Main Menu">
<menu label="Eu" name="Me">
- <menu_item_call label="Painel..." name="Manage My Account">
- <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=pt"/>
- </menu_item_call>
<menu_item_call label="Perfil..." name="Profile"/>
<menu_item_call label="Apar礙ncia..." name="ChangeOutfit"/>
+ <menu_item_call label="Selecione um avatar..." name="Avatar Picker"/>
<menu_item_check label="Invent獺rio..." name="Inventory"/>
- <menu_item_check label="Gestos..." name="Gestures"/>
- <menu_item_check label="Voz..." name="ShowVoice"/>
+ <menu_item_call label="Nova janela de invent獺rio" name="NewInventoryWindow"/>
+ <menu_item_call label="Lugares..." name="Places"/>
+ <menu_item_call label="Destaques..." name="Picks"/>
+ <menu_item_call label="Controles da c璽mera..." name="Camera Controls"/>
<menu label="Movimentos" name="Movement">
<menu_item_call label="Sentar" name="Sit Down Here"/>
<menu_item_check label="Voar" name="Fly"/>
@@ -22,34 +22,39 @@
<menu_item_call label="Request Admin Status" name="Request Admin Options"/>
<menu_item_call label="Sair do modo admin" name="Leave Admin Options"/>
<menu_item_call label="Comprar L$" name="Buy and Sell L$"/>
+ <menu_item_call label="Painel da conta..." name="Manage My Account">
+ <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=pt"/>
+ </menu_item_call>
<menu_item_call label="Prefer礙ncias..." name="Preferences"/>
- <menu_item_call label="Barras de ferramentas..." name="Toolbars"/>
+ <menu_item_call label="Bot繭es da barra de ferramentas..." name="Toolbars"/>
<menu_item_call label="Ocultar todos os controles" name="Hide UI"/>
<menu_item_call label="Sair do [APP_NAME]" name="Quit"/>
</menu>
<menu label="Comunicar" name="Communicate">
- <menu_item_call label="Meus amigos" name="My Friends"/>
- <menu_item_call label="Meus grupos" name="My Groups"/>
- <menu_item_check label="Bate-papo local" name="Nearby Chat"/>
- <menu_item_call label="Pessoas por perto" name="Active Speakers"/>
- <menu_item_check label="Voz por perto" name="Nearby Voice"/>
+ <menu_item_check label="Bate-papo..." name="Nearby Chat"/>
+ <menu_item_check label="Falar" name="Speak"/>
+ <menu_item_check label="Configura癟繭es de voz..." name="Nearby Voice"/>
+ <menu_item_check label="Distor癟瓊o de voz..." name="ShowVoice"/>
+ <menu_item_check label="Gestos..." name="Gestures"/>
+ <menu_item_call label="Amigos" name="My Friends"/>
+ <menu_item_call label="Grupos" name="My Groups"/>
+ <menu_item_call label="Pessoas pr籀ximas" name="Active Speakers"/>
</menu>
<menu label="Mundo" name="World">
- <menu_item_check label="Mini Mapa" name="Mini-Map"/>
+ <menu_item_call label="Criar marco deste lugar" name="Create Landmark Here"/>
+ <menu_item_call label="Destinos..." name="Destinations"/>
<menu_item_check label="Mapa-m繳ndi" name="World Map"/>
+ <menu_item_check label="Mini Mapa" name="Mini-Map"/>
<menu_item_check label="Busca" name="Search"/>
+ <menu_item_call label="Teletransportar para in穩cio" name="Teleport Home"/>
+ <menu_item_call label="Definir como casa" name="Set Home to Here"/>
<menu_item_call label="Foto" name="Take Snapshot"/>
- <menu_item_call label="Criar marco deste lugar" name="Create Landmark Here"/>
- <menu label="Perfil da regi瓊o" name="Land">
- <menu_item_call label="Perfil da regi瓊o" name="Place Profile"/>
- <menu_item_call label="Sobre terrenos" name="About Land"/>
- <menu_item_call label="Regi瓊o/Propriedade" name="Region/Estate"/>
- </menu>
+ <menu_item_call label="Perfil da regi瓊o" name="Place Profile"/>
+ <menu_item_call label="Sobre terrenos" name="About Land"/>
+ <menu_item_call label="Regi瓊o/Propriedade" name="Region/Estate"/>
+ <menu_item_call label="Meus terrenos..." name="My Land"/>
<menu_item_call label="Comprar este terreno" name="Buy Land"/>
- <menu_item_call label="Meus terrenos" name="My Land"/>
<menu label="Mostrar" name="LandShow">
- <menu_item_check label="Controles de movimento" name="Movement Controls"/>
- <menu_item_check label="Ver controles" name="Camera Controls"/>
<menu_item_check label="Limites" name="Ban Lines"/>
<menu_item_check label="Balizas" name="beacons"/>
<menu_item_check label="Limites do im籀vel" name="Property Lines"/>
@@ -58,30 +63,29 @@
<menu_item_check label="Propriedades do lote" name="Parcel Properties"/>
<menu_item_check label="Menu avan癟ado" name="Show Advanced Menu"/>
</menu>
- <menu_item_call label="Teletransportar para meu in穩cio" name="Teleport Home"/>
- <menu_item_call label="Definir como In穩cio" name="Set Home to Here"/>
<menu label="Sol" name="Environment Settings">
<menu_item_call label="Amanhecer" name="Sunrise"/>
<menu_item_call label="Meio-dia" name="Noon"/>
<menu_item_call label="P繫r-do-Sol" name="Sunset"/>
<menu_item_call label="Meia-noite" name="Midnight"/>
+ <menu_item_call label="Usar configura癟繭es da regi瓊o" name="Use Region Settings"/>
</menu>
- <menu label="Editor de ambientes" name="Enviroment Editor">
- <menu_item_call label="Configura癟繭es de ambiente..." name="Enviroment Settings"/>
- <menu label="Pr矇-configura癟繭es de 獺gua" name="Water Presets">
- <menu_item_call label="Nova pr矇-configura癟瓊o..." name="new_water_preset"/>
- <menu_item_call label="Editar pr矇-configura癟瓊o..." name="edit_water_preset"/>
- <menu_item_call label="Excluir pr矇-configura癟瓊o..." name="delete_water_preset"/>
+ <menu label="Editor de ambientes" name="Environment Editor">
+ <menu_item_call label="Configura癟繭es do ambiente..." name="Environment Settings"/>
+ <menu label="Predefini癟繭es da 獺gua" name="Water Presets">
+ <menu_item_call label="Nova predefini癟瓊o..." name="new_water_preset"/>
+ <menu_item_call label="Editar predefini癟瓊o..." name="edit_water_preset"/>
+ <menu_item_call label="Excluir predefini癟瓊o..." name="delete_water_preset"/>
</menu>
- <menu label="Pr矇-configura癟繭es de c矇u" name="Sky Presets">
- <menu_item_call label="Nova pr矇-configura癟瓊o..." name="new_sky_preset"/>
- <menu_item_call label="Editar pr矇-configura癟瓊o..." name="edit_sky_preset"/>
- <menu_item_call label="Excluir pr矇-configura癟瓊o..." name="delete_sky_preset"/>
+ <menu label="Predefini癟繭es de c矇u" name="Sky Presets">
+ <menu_item_call label="Nova predefini癟瓊o..." name="new_sky_preset"/>
+ <menu_item_call label="Editar predefini癟瓊o..." name="edit_sky_preset"/>
+ <menu_item_call label="Excluir predefini癟瓊o..." name="delete_sky_preset"/>
</menu>
- <menu label="Pr矇-configura癟繭es de dias" name="Day Presets">
- <menu_item_call label="Nova pr矇-configura癟瓊o..." name="new_day_preset"/>
- <menu_item_call label="Editar pr矇-configura癟瓊o..." name="edit_day_preset"/>
- <menu_item_call label="Excluir pr矇-configura癟瓊o..." name="delete_day_preset"/>
+ <menu label="Predefini癟繭es do dia" name="Day Presets">
+ <menu_item_call label="Nova predefini癟瓊o..." name="new_day_preset"/>
+ <menu_item_call label="Editar predefini癟瓊o..." name="edit_day_preset"/>
+ <menu_item_call label="Excluir predefini癟瓊o..." name="delete_day_preset"/>
</menu>
</menu>
</menu>
@@ -146,6 +150,7 @@
<menu_item_call label="Repetir" name="Redo"/>
</menu>
<menu label="Ajuda" name="Help">
+ <menu_item_call label="Como..." name="How To"/>
<menu_item_call label="[SECOND_LIFE] Ajuda" name="Second Life Help"/>
<menu_item_call label="Denunciar abuso" name="Report Abuse"/>
<menu_item_call label="Relatar bug" name="Report Bug"/>
@@ -199,11 +204,10 @@
<menu_item_check label="Usar plugin de leitura de threads" name="Use Plugin Read Thread"/>
<menu_item_call label="Limpar cache de grupo" name="ClearGroupCache"/>
<menu_item_check label="Smoothing de mouse" name="Mouse Smoothing"/>
+ <menu_item_call label="Liberar teclas" name="Release Keys"/>
<menu label="Atalhos" name="Shortcuts">
<menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/>
<menu_item_check label="Busca" name="Search"/>
- <menu_item_call label="Soltar objeto" name="Release Keys"/>
- <menu_item_call label="Interface tamanho padr瓊o" name="Set UI Size to Default"/>
<menu_item_check label="Mostrar menu avan癟ado - atalho antigo" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Fechar janela" name="Close Window"/>
<menu_item_call label="Fechar todas as janelas" name="Close All Windows"/>
@@ -272,6 +276,7 @@
<menu_item_check label="Tipo de atualiza癟瓊o" name="Update Type"/>
<menu_item_check label="Dados LOD" name="LOD Info"/>
<menu_item_check label="Fila de constru癟瓊o" name="Build Queue"/>
+ <menu_item_check label="Vetores de vento" name="Wind Vectors"/>
<menu_item_check label="Renderizar complexidade" name="rendercomplexity"/>
<menu_item_check label="Esculpir" name="Sculpt"/>
</menu>
@@ -281,7 +286,6 @@
<menu_item_check label="Ilumina癟瓊o e sombras" name="Lighting and Shadows"/>
<menu_item_check label="Sombras da proje癟瓊o do sol/lua" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO e sombra suave" name="SSAO and Shadow Smoothing"/>
- <menu_item_check label="Ilumina癟瓊o global (fase experimental)" name="Global Illumination"/>
<menu_item_check label="M獺scaras alpha autom獺ticas (adiadas)" name="Automatic Alpha Masks (deferred)"/>
<menu_item_check label="M獺scaras alpha autom獺ticas (sem adiar)" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Texturas de anima癟瓊o" name="Animation Textures"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index b53ebeb136..2c5ccd6e19 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -973,7 +973,7 @@ Oferecer amizade para [NAME]?
</form>
</notification>
<notification name="RemoveFromFriends">
- Remover &lt;nolink&gt;[NAME]&lt;/nolink&gt; da sua lista de amigos?
+ Deseja remover &lt;nolink&gt;[NAME]&lt;/nolink&gt; da sua lista de amigos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Remover"/>
</notification>
<notification name="RemoveMultipleFromFriends">
@@ -1099,8 +1099,13 @@ Doar este terreno de [AREA] m簡 para o grupo &apos;[GROUP_NAME]&apos;?
<notification name="DisplaySetToSafe">
Configura癟繭es de display foram ajustadas para n穩veis de seguran癟a porque voc礙 especificou -- op癟瓊o de seguran癟a.
</notification>
- <notification name="DisplaySetToRecommended">
- Configura癟繭es de display foram ajustadas para n穩vel recomendado baseado na configura癟瓊o do seu sistema.
+ <notification name="DisplaySetToRecommendedGPUChange">
+ As configura癟繭es de tela foram definidas nos n穩veis recomendados porque sua placa de v穩deo foi alterada
+de &apos;[LAST_GPU]&apos;
+para &apos;[THIS_GPU]&apos;
+ </notification>
+ <notification name="DisplaySetToRecommendedFeatureChange">
+ As configura癟繭es de tela foram definidas nos n穩veis recomendados por causa de uma altera癟瓊o no subsistema de renderiza癟瓊o.
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
@@ -1900,7 +1905,13 @@ Mover para o invent獺rio o(s) item(s)?
<usetemplate ignoretext="Confirmar antes de sair" name="okcancelignore" notext="N瓊o sair" yestext="Sair"/>
</notification>
<notification name="ConfirmRestoreToybox">
- Tem certeza que deseja restaurar seus bot繭es e barras de ferramenta padr瓊o?
+ Essa a癟瓊o ir獺 restaurar os bot繭es e barras de ferramenta padr瓊o.
+
+N瓊o 矇 poss穩vel desfazer essa a癟瓊o.
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearAllToybox">
+ Essa a癟瓊o far獺 com que todos os bot繭es voltem para a caixa de ferramentas e suas barras de ferramentas ficar瓊o vazias.
N瓊o 矇 poss穩vel desfazer essa a癟瓊o.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
@@ -2225,14 +2236,16 @@ Selecione s籀 um objeto.
Seu cart瓊o de visita foi negado.
</notification>
<notification name="TeleportToLandmark">
- Para se teletransportar para lugares como &apos;[NAME]&apos;, abra o painel &apos;Lugares&apos; direita da tela e selecione a guia Marcos.
-Basta clicar em qualquer marco e depois clicar em &apos;Teletransportar&apos; na parte inferior da tela.
-(Tamb矇m 矇 poss穩vel clicar duas vezes no marco, ou clicar no marco com o bot瓊o direito e selecionar &apos;Teletransportar&apos;.)
+ Para se teletransportar para locais como &apos;[NAME]&apos;, clique no bot瓊o &quot;Lugares&quot;,
+ e selecione a guia Marcos na janela que 矇 exibida. Clique em qualquer
+ marco para selecion獺-lo e em seguida em &apos;Teletransportar&apos; na parte inferior da tela.
+ (Tamb矇m 矇 poss穩vel clicar duas vezes sobre o marco ou clicar com o bot瓊o direito do mouse sobre ele
+ e selecionar &apos;Teletransportar&apos;.)
</notification>
<notification name="TeleportToPerson">
- Para entrar em contato com residentes como &apos;&apos;[NAME]&apos;, abra o painel &apos;Pessoas&apos; direita da tela.
-Selecione o residente da lista e clique em &apos;MI&apos; na parte de baixo do painel.
-(Tamb矇m 矇 poss穩vel clicar duas vezes no nome, ou clicar no nome com o bot瓊o direito e selecionar &apos;MI&apos;.)
+ Para entrar em contato com residentes como &apos;[NAME]&apos;, clique no bot瓊o &quot;Pessoas&quot;, selecione um residente na janela que 矇 exibida e clique em &apos;MI&apos; na
+ parte inferior da janela.
+ (Tamb矇m 矇 poss穩vel clicar duas vezes no nome, ou clicar no nome com o bot瓊o direito e selecionar &apos;MI&apos;.)
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Imposs穩vel selecionar terra nas fronteiras do servidor. Tente selecionar um peda癟o menor de terra.
@@ -2252,6 +2265,9 @@ Selecione o residente da lista e clique em &apos;MI&apos; na parte de baixo do p
<notification name="PaymentSent">
[MESSAGE]
</notification>
+ <notification name="PaymentFailure">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
Notifica癟瓊o de evento:
@@ -2501,10 +2517,10 @@ Cada um pode ver o status do outro (defini癟瓊o padr瓊o).
</form>
</notification>
<notification name="FriendshipAccepted">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; aceitou seu convite de amizade.
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; aceitou sua oferta de amizade.
</notification>
<notification name="FriendshipDeclined">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; recusou seu convite de amizade
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; rejeitou sua oferta de amizade.
</notification>
<notification name="FriendshipAcceptedByMe">
Oferta de amizada aceita.
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_skin.xml b/indra/newview/skins/default/xui/pt/panel_edit_skin.xml
index f3d88123f2..d00aa2dc66 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_skin.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="Tatuagens na cabe癟a" name="Head Tattoos" tool_tip="Selecionar imagem"/>
- <texture_picker label="Tatuagem parte de cima" name="Upper Tattoos" tool_tip="Selecionar imagem"/>
- <texture_picker label="Tatuagem de baixo" name="Lower Tattoos" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Cabe癟a" name="Head" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Cintura acima" name="Upper Body" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Cintura para baixo" name="Lower Body" tool_tip="Selecionar imagem"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/pt/panel_postcard_message.xml b/indra/newview/skins/default/xui/pt/panel_postcard_message.xml
new file mode 100644
index 0000000000..9cde810430
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_postcard_message.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_message">
+ <text name="to_label">
+ Para:
+ </text>
+ <text name="name_label">
+ De:
+ </text>
+ <text name="subject_label">
+ Assunto:
+ </text>
+ <line_editor label="Digite aqui o assunto." name="subject_form"/>
+ <text name="msg_label">
+ Mensagem:
+ </text>
+ <text_editor name="msg_form">
+ Digite aqui a mensagem.
+ </text_editor>
+ <button label="Cancelar" name="cancel_btn"/>
+ <button label="Enviar" name="send_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml b/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml
new file mode 100644
index 0000000000..3088b9a996
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_settings">
+ <combo_box label="Resolu癟瓊o" name="postcard_size_combo">
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Customizado" name="Custom"/>
+ </combo_box>
+ <layout_stack name="postcard_image_params_ls">
+ <layout_panel name="postcard_image_size_lp">
+ <spinner label="Largura" name="postcard_snapshot_width"/>
+ <spinner label="Altura" name="postcard_snapshot_height"/>
+ <check_box label="Limitar propor癟繭es" name="postcard_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="postcard_image_format_quality_lp">
+ <slider label="Qualidade da imagem" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
index f98659aa73..c5a4febb0e 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
@@ -29,30 +29,5 @@
<check_box label="Bate-papos de MI" name="EnableIMChatPopups" tool_tip="Exibir pop-up de mensagens instant璽neas novas"/>
<spinner label="Transi癟瓊o de avisos de bate-papos por perto:" name="nearby_toasts_lifetime"/>
<spinner label="Transi癟瓊o de avisos de bate-papos por perto:" name="nearby_toasts_fadingtime"/>
- <check_box name="translate_chat_checkbox"/>
- <text name="translate_chb_label">
- Traduzir bate-papo automaticamente
- </text>
- <text name="translate_language_text">
- Traduzir bate-papo para:
- </text>
- <combo_box name="translate_language_combobox">
- <combo_box.item label="Padr瓊o" name="System Default Language"/>
- <combo_box.item label="English (Ingl礙s)" name="English"/>
- <combo_box.item label="Dansk (Dinamarqu礙s)" name="Danish"/>
- <combo_box.item label="Deutsch (Alem瓊o)" name="German"/>
- <combo_box.item label="Espa簽ol (Espanhol)" name="Spanish"/>
- <combo_box.item label="Fran癟ais (Franc礙s)" name="French"/>
- <combo_box.item label="Italiano (Italiano)" name="Italian"/>
- <combo_box.item label="Magyar (H繳ngaro)" name="Hungarian"/>
- <combo_box.item label="Nederlands (Holand礙s)" name="Dutch"/>
- <combo_box.item label="Polski (Polon礙s)" name="Polish"/>
- <combo_box.item label="Portugu礙s (Portugu礙s)" name="Portugese"/>
- <combo_box.item label="郕邽邿 (Russo)" name="Russian"/>
- <combo_box.item label="T羹rk癟e (Turco)" name="Turkish"/>
- <combo_box.item label="苺郕訄郇郕訄 (Ucraniano)" name="Ukrainian"/>
- <combo_box.item label="銝剜 (蝞雿) (Chin礙s)" name="Chinese"/>
- <combo_box.item label="交祈 (Japon礙s)" name="Japanese"/>
- <combo_box.item label="窱原 (Coreano)" name="Korean"/>
- </combo_box>
+ <button label="Configura癟繭es de tradu癟瓊o de bate-papo" name="ok_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
index 9259c0ed56..ebbd63138a 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
@@ -15,7 +15,7 @@
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Usar meu navegador (IE, Firefox, Safari)" name="external" tool_tip="Use o navegador incluso para consultar a ajuda, abrir links da web, etc. Uso em tela inteira n瓊o recomendado." value="1"/>
+ <radio_item label="Usar meu navegador (IE, Firefox, Safari)" name="external" tool_tip="Use o navegador incluso para consultar a ajuda, abrir links da web, etc. Uso em tela inteira n瓊o recomendado." value="true"/>
<radio_item label="Usar navegador incluso" name="internal" tool_tip="Use este navegador para consultar a ajuda, abrir links da web, etc. As janelas abrem dentro do [APP_NAME]." value=""/>
</radio_group>
<check_box initial_value="true" label="Habilitar plugins" name="browser_plugins_enabled"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml
new file mode 100644
index 0000000000..3c4bb18687
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_inventory">
+ <text name="title">
+ Salvar no meu invent獺rio
+ </text>
+ <text name="hint_lbl">
+ Salvar uma imagem em seu invent獺rio custa L$[UPLOAD_COST]. Para salvar sua imagem como uma textura, selecione um dos formatos quadrados.
+ </text>
+ <combo_box label="Resolu癟瓊o" name="texture_size_combo">
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
+ <combo_box.item label="Pequeno (128x128)" name="Small(128x128)"/>
+ <combo_box.item label="M矇dio (256x256)" name="Medium(256x256)"/>
+ <combo_box.item label="Grande (512x512)" name="Large(512x512)"/>
+ <combo_box.item label="Customizado" name="Custom"/>
+ </combo_box>
+ <spinner label="Largura" name="inventory_snapshot_width"/>
+ <spinner label="Altura" name="inventory_snapshot_height"/>
+ <check_box label="Limitar propor癟繭es" name="inventory_keep_aspect_check"/>
+ <button label="Cancelar" name="cancel_btn"/>
+ <button label="Salvar" name="save_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml
new file mode 100644
index 0000000000..36b5b0cbe6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_local">
+ <text name="title">
+ Salvar no meu PC
+ </text>
+ <combo_box label="Resolu癟瓊o" name="local_size_combo">
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
+ <combo_box.item label="320x240" name="320x240"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1280x1024" name="1280x1024"/>
+ <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="Customizado" name="Custom"/>
+ </combo_box>
+ <layout_stack name="local_image_params_ls">
+ <layout_panel name="local_image_size_lp">
+ <spinner label="Largura" name="local_snapshot_width"/>
+ <spinner label="Altura" name="local_snapshot_height"/>
+ <check_box label="Limitar propor癟繭es" name="local_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="local_image_format_quality_lp">
+ <combo_box label="Formato" name="local_format_combo">
+ <combo_box.item label="PNG (sem perda)" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP (sem perda)" name="BMP"/>
+ </combo_box>
+ <slider label="Qualidade da imagem" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+ <button label="Cancelar" name="cancel_btn"/>
+ <flyout_button label="Salvar" name="save_btn" tool_tip="Salvar imagem em um arquivo">
+ <flyout_button.item label="Salvar" name="save_item"/>
+ <flyout_button.item label="Salvar como..." name="saveas_item"/>
+ </flyout_button>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml
new file mode 100644
index 0000000000..7f1452e992
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_options">
+ <button label="Postar no feed do meu perfil" name="save_to_profile_btn"/>
+ <button label="E-mail" name="save_to_email_btn"/>
+ <button label="Salvar em Meu invent獺rio (L$[AMOUNT])" name="save_to_inventory_btn"/>
+ <button label="Salvar no meu PC" name="save_to_computer_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml
new file mode 100644
index 0000000000..12a648f600
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_postcard">
+ <string name="default_subject">
+ Postal do [SECOND_LIFE].
+ </string>
+ <string name="default_message">
+ Confira!
+ </string>
+ <string name="upload_message">
+ Enviando...
+ </string>
+ <text name="title">
+ E-mail
+ </text>
+ <button label="Mensagem" name="message_btn"/>
+ <button label="Configura癟繭es" name="settings_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml
new file mode 100644
index 0000000000..095b8fc75d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_profile">
+ <text name="title">
+ Postar no feed do meu perfil
+ </text>
+ <combo_box label="Resolu癟瓊o" name="profile_size_combo">
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Customizado" name="Custom"/>
+ </combo_box>
+ <layout_stack name="profile_image_params_ls">
+ <layout_panel name="profile_image_size_lp">
+ <spinner label="Largura" name="profile_snapshot_width"/>
+ <spinner label="Altura" name="profile_snapshot_height"/>
+ <check_box label="Limitar propor癟繭es" name="profile_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="profile_image_metadata_lp">
+ <text name="caption_label">
+ Legenda:
+ </text>
+ <check_box initial_value="true" label="Incluir local" name="add_location_cb"/>
+ </layout_panel>
+ </layout_stack>
+ <button label="Cancelar" name="cancel_btn"/>
+ <button label="Postar" name="post_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 6b4835e819..4babd9cc43 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -1160,7 +1160,7 @@ Titulares de contas gratuitas n瓊o poder瓊o acessar o Second Life para acomodar
Voc礙 n瓊o possui uma c籀pia desta textura no seu invent獺rio
</string>
<string name="InventoryInboxNoItems">
- Compras do marketplace ser瓊o entregues aqui.
+ Quando voc礙 comprar ou receber um item, ele aparecer獺 aqui para que voc礙 possa arrast獺-lo para uma pasta em seu invent獺rio ou exclu穩-lo caso n瓊o queira mant礙-lo.
</string>
<string name="MarketplaceURL">
http://marketplace.[DOMAIN_NAME]
@@ -1352,6 +1352,9 @@ Titulares de contas gratuitas n瓊o poder瓊o acessar o Second Life para acomodar
<string name="no_attachments">
Nenhum anexo vestido
</string>
+ <string name="Attachments remain">
+ Anexos ([COUNT] slots permanecem)
+ </string>
<string name="Buy">
Comprar
</string>
@@ -1478,6 +1481,12 @@ Titulares de contas gratuitas n瓊o poder瓊o acessar o Second Life para acomodar
<string name="Right Pec">
Peitoral D
</string>
+ <string name="Neck">
+ Pesco癟o
+ </string>
+ <string name="Avatar Center">
+ Centro do avatar
+ </string>
<string name="Invalid Attachment">
Ponto de encaixe inv獺lido
</string>
@@ -3897,6 +3906,18 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="you_paid_ldollars_no_name">
Voc礙 pagou L$[AMOUNT] por [REASON].
</string>
+ <string name="you_paid_failure_ldollars">
+ Voc礙 n瓊o pagou L$[AMOUNT] a [NAME] referentes a [REASON].
+ </string>
+ <string name="you_paid_failure_ldollars_no_info">
+ Voc礙 n瓊o pagou L$[AMOUNT].
+ </string>
+ <string name="you_paid_failure_ldollars_no_reason">
+ Voc礙 n瓊o pagou L$[AMOUNT] a [NAME].
+ </string>
+ <string name="you_paid_failure_ldollars_no_name">
+ Voc礙 n瓊o pagou L$[AMOUNT] referentes a [REASON].
+ </string>
<string name="for item">
por [ITEM]
</string>
@@ -4307,6 +4328,12 @@ Tente colocar o caminho do editor entre aspas.
<string name="ExternalEditorFailedToRun">
Falha de execu癟瓊o do editor externo.
</string>
+ <string name="TranslationFailed">
+ Falha na tradu癟瓊o: [REASON]
+ </string>
+ <string name="TranslationResponseParseError">
+ Erro ao analisar resposta de tradu癟瓊o.
+ </string>
<string name="Esc">
Esc
</string>
@@ -4677,7 +4704,7 @@ Tente colocar o caminho do editor entre aspas.
Mini Mapa
</string>
<string name="Command_Move_Label">
- Mover
+ Andar/correr/voar
</string>
<string name="Command_People_Label">
Pessoas
@@ -4704,10 +4731,10 @@ Tente colocar o caminho do editor entre aspas.
Falar
</string>
<string name="Command_View_Label">
- Exibir
+ Controles da c璽mera
</string>
<string name="Command_Voice_Label">
- Voz pr籀xima
+ Configura癟繭es de voz
</string>
<string name="Command_AboutLand_Tooltip">
Informa癟繭es sobre o terreno que voc礙 est獺 visitando
@@ -4779,7 +4806,16 @@ Tente colocar o caminho do editor entre aspas.
Alterar o 璽ngulo da c璽mera
</string>
<string name="Command_Voice_Tooltip">
- Pessoas pr籀ximas com recursos de voz
+ Controles de volume das chamadas e pessoas pr籀ximas a voc礙 no mundo virtual
+ </string>
+ <string name="Toolbar_Bottom_Tooltip">
+ atualmente na sua barra de ferramentas inferior
+ </string>
+ <string name="Toolbar_Left_Tooltip">
+ atualmente na sua barra de ferramentas esquerda
+ </string>
+ <string name="Toolbar_Right_Tooltip">
+ atualmente na sua barra de ferramentas direita
</string>
<string name="Retain%">
Reter%
@@ -4805,4 +4841,19 @@ Tente colocar o caminho do editor entre aspas.
<string name="Normal">
Normal
</string>
+ <string name="snapshot_quality_very_low">
+ Muito baixo
+ </string>
+ <string name="snapshot_quality_low">
+ Baixo
+ </string>
+ <string name="snapshot_quality_medium">
+ M矇dio
+ </string>
+ <string name="snapshot_quality_high">
+ Alto
+ </string>
+ <string name="snapshot_quality_very_high">
+ Muito alto
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/pt/teleport_strings.xml b/indra/newview/skins/default/xui/pt/teleport_strings.xml
index f8ded1ce69..3fb77a02d2 100644
--- a/indra/newview/skins/default/xui/pt/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/pt/teleport_strings.xml
@@ -19,8 +19,8 @@ Se voc礙 continuar a receber esta mensagem, por favor consulte o [SUPPORT_SITE].
Desculpe, n瓊o foi poss穩vel para o sistema executar o teletransporte. Tente novamente dentro de alguns instantes.
</message>
<message name="NoHelpIslandTP">
- Voc礙 n瓊o pode se tele-transportar de volta Ilha de Welcome.
-V獺 para a Ilha de Welcome P繳blica para repetir este tutorial.
+ N瓊o 矇 poss穩vel se teletransportar de volta Ilha Welcome.
+V獺 para a &apos;Ilha Welcome P繳blica&apos; para repetir o tutorial.
</message>
<message name="noaccess_tport">
Desculpe, voc礙 n瓊o tem acesso ao destino deste teletransporte.
diff --git a/indra/newview/skins/default/xui/ru/floater_about.xml b/indra/newview/skins/default/xui/ru/floater_about.xml
index deb6be319c..119f104906 100644
--- a/indra/newview/skins/default/xui/ru/floater_about.xml
+++ b/indra/newview/skins/default/xui/ru/floater_about.xml
@@ -63,32 +63,34 @@
<panel label="邽迮郇郱邽邽" name="licenses_panel">
<text_editor name="credits_editor">
3Dconnexion SDK (C) 1992-2007 3Dconnexion
-APR (C) 2000-2004 The Apache Software Foundation
-Collada DOM (C) 2005 Sony Computer Entertainment Inc.cURL (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+ APR (C) 2000-2004 The Apache Software Foundation
+ Collada DOM (C) 2005 Sony Computer Entertainment Inc.
+ cURL (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+ DBus/dbus-glib (C) 2002, 2003 CodeFactory AB / (C) 2003, 2004 Red Hat, Inc.
+ expat (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+ FreeType (C) 1996-2002, The FreeType Project (www.freetype.org).
+ GL (C) 1999-2004 Brian Paul.
+ GLOD (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, 苺郇邽赲迮邽迮 迠郋郇訄 郋郈郕邽郇訄 邽 David Luebke, Brenden Schubert, 苺郇邽赲迮邽迮 邽迡迠邽郇邽邽.
+ google-perftools (c) 2005, Google Inc.
+ Havok.com(TM) (C) 1999-2001, Telekinesys Research Limited.
+ jpeg2000 (C) 2001, David Taubman, 苺郇邽赲迮邽迮 郋赲郋迣郋 衩迠郇郋迣郋 苺郅訄 (UNSW)
+ jpeglib (C) 1991-1998, Thomas G. Lane.
+ ogg/vorbis (C) 2001, Xiphophorus
+ OpenSSL (C) 1998-2002 The OpenSSL Project.
+ PCRE (c) 1997-2008, 迮邾訇邽迡迠郕邽邿 郇邽赲迮邽迮
+ SDL (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+ SSLeay (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ xmlrpc-epi (C) 2000 Epinions, Inc.
+ zlib (C) 1995-2002 Jean-loup Gailly 邽 Mark Adler.
+ google-perftools (c) 2005, Google Inc.
-DBus/dbus-glib (C) 2002, 2003 CodeFactory AB / (C) 2003, 2004 Red Hat, Inc.
-expat (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-FreeType (C) 1996-2002, The FreeType Project (www.freetype.org).
-GL (C) 1999-2004 Brian Paul.
-GLOD (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University 邽 David Luebke, Brenden Schubert, 苺郇邽赲迮邽迮 邽迡迠邽邽郇邽邽.
-google-perftools (c) 2005, Google Inc.
-Havok.com(TM) (C) 1999-2001, Telekinesys Research Limited.
-jpeg2000 (C) 2001, David Taubman, 苺郇邽赲迮邽迮 郋赲郋迣郋 衩迠郇郋迣郋 苺郅訄 (UNSW)
-jpeglib (C) 1991-1998, Thomas G. Lane.
-ogg/vorbis (C) 2001, Xiphophorus
-OpenSSL (C) 1998-2002 The OpenSSL Project.
-PCRE (c) 1997-2008, 迮邾訇邽迡迠郕邽邿 郇邽赲迮邽迮
-SDL (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-SSLeay (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-xmlrpc-epi (C) 2000 Epinions, Inc.
-zlib (C) 1995-2002 Jean-loup Gailly 邽 Mark Adler.
-google-perftools (c) 2005, Google Inc.
+ 郕郅邽迮郇迮 Second Life 邽郈郋郅郱迮 迮郇郋郅郋迣邽 Havok (TM) Physics. (C) 1999-2010 Havok.com Inc. (邽 郅邽迮郇郱邽訄 郕郋邾郈訄郇邽邽). 迮 郈訄赲訄 郱訄邽迮郇. 郋迡郋訇郇迮迮 邾. 赲迮訇-訄邿 www.havok.com.
- 郕郅邽迮郇迮 Second Life 邽郈郋郅郱迮 迮郇郋郅郋迣邽 Havok (TM) Physics. (C) 1999-2010 Havok.com Inc. (邽 郅邽迮郇郱邽訄 郕郋邾郈訄郇邽邽). 迮 郈訄赲訄 郱訄邽迮郇. 郋迡郋訇郇迮迮 邾. 赲迮訇-訄邿 www.havok.com.
+ 衪郋 郈郋迣訄邾邾郇郋迮 郋訇迮郈迮迮郇邽迮 郋迡迮迠邽 邽郋迡郇邿 郕郋迡, 郈迮迡郋訄赲郅迮郇郇邿 郕郋郈郋訄邽迮邿 NVIDIA.
-迮 郈訄赲訄 郱訄邽迮郇. 郋迡郋訇郇迮 赲迮迡迮郇邽 邾. 赲 訄邿郅迮 licenses.txt.
+ 迮 郈訄赲訄 郱訄邽迮郇. 郋迡郋訇郇迮 赲迮迡迮郇邽 邾. 赲 訄邿郅迮 licenses.txt.
-郋迡邽郋赲訄郇邽迮 郱赲郕訄 迡郅 迣郋郅郋郋赲郋迣郋 訄訄: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1, 邽郅郋迠迮郇邽迮 C)
+ 郋迡邽郋赲訄郇邽迮 郱赲郕訄 迡郅 迣郋郅郋郋赲郋迣郋 訄訄: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
</text_editor>
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/ru/floater_about_land.xml b/indra/newview/skins/default/xui/ru/floater_about_land.xml
index 3c278fce52..46414a530a 100644
--- a/indra/newview/skins/default/xui/ru/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ru/floater_about_land.xml
@@ -129,7 +129,7 @@
郋迮訄迮邾郋:
</text>
<text name="DwellText">
- 0
+ 訄迣郱郕訄...
</text>
<button label="郈邽 郱迮邾郅" name="Buy Land..."/>
<button label="郋迡訄 迡郅 Linden" name="Linden Sale..." tool_tip="迮邾郅 迡郋郅迠郇訄 訇 赲 郋訇赲迮郇郇郋邽, 邽邾迮 郱訄迡訄郇郇郋迮 郋迡迮迠邽邾郋迮 邽 郇迮 訇 赲訄赲郅迮郇郇郋邿 郇訄 訄郕邽郋郇,"/>
@@ -307,13 +307,15 @@
迮 郋郅郕訄 (郇訄郋邿郕邽 迮迣邽郋郇訄)
</panel.string>
<panel.string name="see_avs_text">
- 邽迡迮 迠邽迮郅迮邿 郋迣郋 訄郕訄 邽 郋訇訄 郇邽邾邽 赲 訄迮
+ 赲訄訄 迡迣邽 訄郕郋赲 邾郋迣 赲邽迡迮
</panel.string>
<text name="allow_label">
郋郱赲郋郅邽 迡迣邽邾 迠邽迮郅邾:
</text>
- <check_box label="郱邾迮郇邽 郅訄郇迡訄" name="edit land check" tool_tip="郅邽 郋邾迮迮郇郋, 赲訄 郱迮邾郅 邾郋迠迮 迮訄郋邾邽郋赲訄 郕郋 迣郋迡郇郋. 迮 郇迮 郋邾迮訄, 訄郕 郕訄郕 赲 赲迮迣迡訄 邾郋迠迮迮 邽郱邾迮郇邽 赲訄 郱迮邾郅."/>
- <check_box label="郋郅迮" name="check fly" tool_tip="郅邽 郋邾迮迮郇郋, 迠邽迮郅邽 邾郋迣 郅迮訄 郇訄迡 赲訄迮邿 郱迮邾郅迮邿. 郅邽 郇迮 郋邾迮邽, 郋郇邽 邾郋迣 郋郅郕郋 郈邽郅迮訄 邽 郈郋郅迮訄 邾邽邾郋 郱迮邾郅邽."/>
+ <text name="allow_label0">
+ 郋郅迮:
+ </text>
+ <check_box label="迮" name="check fly" tool_tip="郅邽 郋邾迮迮郇郋, 迠邽迮郅邽 邾郋迣 郅迮訄 郇訄迡 赲訄迮邿 郱迮邾郅迮邿. 郅邽 郇迮 郋邾迮邽, 郋郇邽 邾郋迣 郋郅郕郋 郈邽郅迮訄 邽 郈郋郅迮訄 邾邽邾郋 郱迮邾郅邽."/>
<text name="allow_label2">
苤郋邽迮郅赲郋:
</text>
@@ -329,9 +331,6 @@
</text>
<check_box label="迮" name="check other scripts"/>
<check_box label="郈郈訄" name="check group scripts"/>
- <text name="land_options_label">
- 訄訄邾迮 郱迮邾郅邽:
- </text>
<check_box label="迮郱郋郈訄郇郋 (郇迮 郈郋赲迮迠迡迮郇邽邿)" name="check safe" tool_tip="郅邽 郋邾迮迮郇郋, 郋 郱迮邾郅 邽訄迮 訇迮郱郋郈訄郇郋邿, 郋郕郅迮郇 訇郋迮赲迮 郈郋赲迮迠迡迮郇邽. 郅邽 郇迮 郋邾迮迮郇郋, 郋 訇郋迮赲迮 郈郋赲迮迠迡迮郇邽 赲郕郅迮郇."/>
<check_box label="迮 郋郅郕訄" name="PushRestrictCheck" tool_tip="訄郈迮訄迮 郕邽郈訄邾 郇郕邽 郋郅郕訄郇邽. 衪郋 郈訄訄邾迮 邾郋迠迮 郋郕訄郱訄 郈郋郅迮郱郇邾 迡郅 郈迮迡郋赲訄迮郇邽 郇迮迠迮郅訄迮郅郇郋迣郋 郈郋赲迮迡迮郇邽 郇訄 赲訄迮邿 郱迮邾郅迮."/>
<check_box label="郋郕訄郱訄 邾迮郋 赲 郈郋邽郕迮 (L$30/郇迮迡迮郅)" name="ShowDirectoryCheck" tool_tip="郋郱赲郋郅邽 郅迡邾 赲邽迡迮 訄郋郕 赲 迮郱郅訄訄 郈郋邽郕訄"/>
@@ -372,9 +371,9 @@
</text>
<texture_picker name="snapshot_ctrl" tool_tip="虳迮郅郕郇邽迮 迡郅 赲訇郋訄 邽郱郋訇訄迠迮郇邽"/>
<text name="allow_label5">
- 郋郱赲郋郅邽 迠邽迮郅邾 迡迣邽 訄郕郋赲:
+ 訄赲訄訄 郇訄 郋邾 訄郕迮 邽 郋訇訄 郇邽邾邽
</text>
- <check_box label="邽迡郇 訄赲訄訄" name="SeeAvatarsCheck" tool_tip="邽迮郅邽 迡迣邽 訄郕郋赲 邾郋迣 赲邽迡迮 迠邽迮郅迮邿 郋迣郋 訄郕訄 邽 郋訇訄 郇邽邾邽 赲 訄迮 (赲 訄郕迠迮 邾郋迠迮迮 赲邽迡迮 迠邽迮郅迮邿 迡迣邽 訄郕郋赲 邽 郋訇訄 郇邽邾邽)."/>
+ <check_box label="邽迡郇 訄赲訄訄" name="SeeAvatarsCheck" tool_tip="赲訄訄 迡迣邽 訄郕郋赲 邾郋迣 赲邽迡迮 訄赲訄訄 郇訄 郋邾 訄郕迮 邽 郋訇訄 郇邽邾邽 赲 訄迮, 訄 赲 訄郕迠迮 邾郋迠迮迮 赲邽迡迮 邽 邽 郋訇訄 郇邽邾邽."/>
<text name="landing_point">
郋郕 迮郅迮郈郋訄邽邽: [LANDING]
</text>
diff --git a/indra/newview/skins/default/xui/ru/floater_avatar.xml b/indra/newview/skins/default/xui/ru/floater_avatar.xml
index 6bdf819880..b480af9345 100644
--- a/indra/newview/skins/default/xui/ru/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/ru/floater_avatar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Avatar" title="衎 苠"/>
+<floater name="Avatar" title="衎苠 苠"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_buy_currency.xml b/indra/newview/skins/default/xui/ru/floater_buy_currency.xml
index 7d34ca3274..87e8bd524e 100644
--- a/indra/newview/skins/default/xui/ru/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/ru/floater_buy_currency.xml
@@ -46,7 +46,7 @@
L$ [AMT]
</text>
<text name="currency_links">
- [http://www.secondlife.com/my/account/payment_method_management.php 郈郋郋訇 郋郈郅訄] | [http://www.secondlife.com/my/account/currency.php 赲訄郅訄]
+ [http://www.secondlife.com/my/account/payment_method_management.php 郈郋郋訇 郋郈郅訄] | [http://www.secondlife.com/my/account/currency.php 迡迮郇迣邽]
</text>
<text name="exchange_rate_note">
郋赲郋郇郋 赲赲迮迡邽迮 邾邾, 郋訇 赲邽迡迮 郇郋赲邿 郋訇邾迮郇郇邿 郕.
diff --git a/indra/newview/skins/default/xui/ru/floater_camera.xml b/indra/newview/skins/default/xui/ru/floater_camera.xml
index 945a63c0eb..52e7c62e06 100644
--- a/indra/newview/skins/default/xui/ru/floater_camera.xml
+++ b/indra/newview/skins/default/xui/ru/floater_camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="camera_floater" title="">
+<floater name="camera_floater" title="苺 ">
<floater.string name="rotate_tooltip">
郋赲迮郇 郕訄邾迮 赲郋郕迣 郋郕邽 郋郕邽郋赲郕邽
</floater.string>
diff --git a/indra/newview/skins/default/xui/ru/floater_hardware_settings.xml b/indra/newview/skins/default/xui/ru/floater_hardware_settings.xml
index 0fefb76ea5..7400f1df3b 100644
--- a/indra/newview/skins/default/xui/ru/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/ru/floater_hardware_settings.xml
@@ -4,7 +4,7 @@
苳邽郅訄邽:
</text>
<check_box label="郇邽郱郋郋郈郇訄 邽郅訄邽 (邾迮迡郅迮郇郇迮迮, 迮郅邽 赲郕郅迮郇郋)" name="ani"/>
- <text name="Antialiasing:">
+ <text name="antialiasing label">
苤迣郅訄迠邽赲訄郇邽迮:
</text>
<combo_box label="苤迣郅訄迠邽赲訄郇邽迮" name="fsaa">
diff --git a/indra/newview/skins/default/xui/ru/floater_model_preview.xml b/indra/newview/skins/default/xui/ru/floater_model_preview.xml
index 31517e722d..5bb96b8de4 100644
--- a/indra/newview/skins/default/xui/ru/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/ru/floater_model_preview.xml
@@ -4,6 +4,9 @@
<string name="status_parse_error">
邽訇郕訄. 郋訇郅迮邾訄 郈邽 訄郇訄郅邽郱迮 訄邿郅訄 DAE 邾. 郈郋迡郋訇郇郋邽 赲 迠郇訄郅迮.
</string>
+ <string name="status_material_mismatch">
+ 邽訇郕訄. 訄迮邽訄郅 邾郋迡迮郅邽 郇迮 赲郋迡邽 赲 訄郅郋郇郇 邾郋迡迮郅.
+ </string>
<string name="status_reading_file">
訄迣郱郕訄...
</string>
@@ -137,7 +140,7 @@
</panel>
<panel name="physics analysis">
<text name="method_label">
- 虼訄迣 2. 郇訄郅邽郱
+ 2 訄郈. 郇訄郅邽郱
</text>
<text name="analysis_method_label">
迮郋迡:
diff --git a/indra/newview/skins/default/xui/ru/floater_model_wizard.xml b/indra/newview/skins/default/xui/ru/floater_model_wizard.xml
index ef2fe8e5a5..5b03dd2c73 100644
--- a/indra/newview/skins/default/xui/ru/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/ru/floater_model_wizard.xml
@@ -20,6 +20,9 @@
訇迮邽迮 訄邿郅 邾郋迡迮郅邽 迡郅 郈迮迮迡訄邽
</text>
<button label="訇郱郋..." label_selected="訇郱郋..." name="browse"/>
+ <text name="Model types">
+ Second Life 郈郋迡迡迮迠邽赲訄 訄邿郅 COLLADA (嚜.dae)
+ </text>
<text name="dimensions">
X Y Z
</text>
diff --git a/indra/newview/skins/default/xui/ru/floater_moveview.xml b/indra/newview/skins/default/xui/ru/floater_moveview.xml
index 6e01f997e1..cb1fda1a1f 100644
--- a/indra/newview/skins/default/xui/ru/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/ru/floater_moveview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater" title="虳">
+<floater name="move_floater" title="苭衧 / / 苠">
<string name="walk_forward_tooltip">
迡邽 赲郈迮迮迡 (郇訄迠邾邽迮 迮郅郕 赲赲迮 邽郅邽 郕郅訄赲邽 W)
</string>
diff --git a/indra/newview/skins/default/xui/ru/floater_snapshot.xml b/indra/newview/skins/default/xui/ru/floater_snapshot.xml
index f85d602be7..7e88630b32 100644
--- a/indra/newview/skins/default/xui/ru/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ru/floater_snapshot.xml
@@ -3,72 +3,63 @@
<floater.string name="unknown">
郇迮邽郱赲迮郇郋
</floater.string>
- <radio_group label="苠邽郈 郇邽邾郕訄" name="snapshot_type_radio">
- <radio_item label="衪郅迮郕郋郇郇訄 郈郋訄" name="postcard"/>
- <radio_item label="郋邿 邽郇赲迮郇訄 (L$[AMOUNT])" name="texture"/>
- <radio_item label="苤郋訄郇邽 郇訄 邾郋迮邾 郕郋邾郈迮迮" name="local"/>
- </radio_group>
+ <string name="postcard_progress_str">
+ 郈訄赲郕訄 郈邽邾訄
+ </string>
+ <string name="profile_progress_str">
+ 訇郅邽郕訄邽
+ </string>
+ <string name="inventory_progress_str">
+ 苤郋訄郇迮郇邽迮 赲 -邽郇赲迮郇訄
+ </string>
+ <string name="local_progress_str">
+ 苤郋訄郇迮郇邽迮 郇訄 郕郋邾郈迮迮
+ </string>
+ <string name="profile_succeeded_str">
+ 郱郋訇訄迠迮郇邽迮 郋郈訄赲郅迮郇郋
+ </string>
+ <string name="postcard_succeeded_str">
+ 邽邾郋 郋郈訄赲郅迮郇郋!
+ </string>
+ <string name="inventory_succeeded_str">
+ 苤郋訄郇迮郇郋 赲 邽郇赲迮郇訄迮!
+ </string>
+ <string name="local_succeeded_str">
+ 苤郋訄郇迮郇郋 郇訄 郕郋邾郈迮迮!
+ </string>
+ <string name="profile_failed_str">
+ 迮 迡訄郅郋 郈迮迮迡訄 邽郱郋訇訄迠迮郇邽迮 赲 赲訄 郈郋邽郅.
+ </string>
+ <string name="postcard_failed_str">
+ 迮 迡訄郅郋 郋郈訄赲邽 郈邽邾郋.
+ </string>
+ <string name="inventory_failed_str">
+ 迮 迡訄郅郋 郋訄郇邽 赲 邽郇赲迮郇訄迮.
+ </string>
+ <string name="local_failed_str">
+ 迮 迡訄郅郋 郋訄郇邽 郇訄 郕郋邾郈迮迮.
+ </string>
+ <button name="advanced_options_btn" tool_tip="郋郈郋郅郇邽迮郅郇迮 郈訄訄邾迮"/>
+ <text name="image_res_text">
+ [WIDTH] x [HEIGHT] 郈邽郕.
+ </text>
<text name="file_size_label">
[SIZE]
</text>
- <button label="郋郅訄" name="send_btn"/>
- <button label="苤郋訄郇邽 (L$[AMOUNT])" name="upload_btn"/>
- <flyout_button label="苤郋訄郇邽" name="save_btn" tool_tip="苤郋訄郇邽 邽郱郋訇訄迠迮郇邽迮 赲 訄邿郅">
- <flyout_button.item label="苤郋訄郇邽" name="save_item"/>
- <flyout_button.item label="苤郋訄郇邽 郕訄郕..." name="saveas_item"/>
- </flyout_button>
- <button label="郋郅迮" name="more_btn" tool_tip="郋郈郋郅郇邽迮郅郇迮 郈訄訄邾迮"/>
- <button label="迮郇迮" name="less_btn" tool_tip="郋郈郋郅郇邽迮郅郇迮 郈訄訄邾迮"/>
- <button label="邾迮郇訄" name="discard_btn"/>
- <text name="type_label2">
- 訄郱邾迮
- </text>
- <text name="format_label">
- 苳郋邾訄
- </text>
- <combo_box label="訄郱迮迮郇邽迮" name="postcard_size_combo">
- <combo_box.item label="苠迮郕迮迮 郋郕郇郋" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="訄迡訄" name="Custom"/>
- </combo_box>
- <combo_box label="訄郱迮迮郇邽迮" name="texture_size_combo">
- <combo_box.item label="苠迮郕迮迮 郋郕郇郋" name="CurrentWindow"/>
- <combo_box.item label="訄郅迮郇郕邽邿 (128x128)" name="Small(128x128)"/>
- <combo_box.item label="苤迮迡郇邽邿 (256x256)" name="Medium(256x256)"/>
- <combo_box.item label="郋郅郋邿 (512x512)" name="Large(512x512)"/>
- <combo_box.item label="訄迡訄" name="Custom"/>
- </combo_box>
- <combo_box label="訄郱迮迮郇邽迮" name="local_size_combo">
- <combo_box.item label="苠迮郕迮迮 郋郕郇郋" name="CurrentWindow"/>
- <combo_box.item label="320x240" name="320x240"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="1280x1024" name="1280x1024"/>
- <combo_box.item label="1600x1200" name="1600x1200"/>
- <combo_box.item label="訄迡訄" name="Custom"/>
- </combo_box>
- <combo_box label="苳郋邾訄" name="local_format_combo">
- <combo_box.item label="PNG" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP" name="BMP"/>
- </combo_box>
- <spinner label="虼邽邽郇訄" name="snapshot_width"/>
- <spinner label="郋訄" name="snapshot_height"/>
- <check_box label="苤郋訄郇 郈郋郈郋邽邽" name="keep_aspect_check"/>
- <slider label="訄迮赲郋 邽郱郋訇訄迠迮郇邽" name="image_quality_slider"/>
- <text name="layer_type_label">
- 訄赲訄:
- </text>
- <combo_box label="苤郅郋邽 邽郱郋訇訄迠迮郇邽" name="layer_types">
- <combo_box.item label="虷赲迮訄" name="Colors"/>
- <combo_box.item label="郅訇邽郇訄" name="Depth"/>
- </combo_box>
- <check_box label="郇迮迮邿" name="ui_check"/>
- <check_box label="HUD" name="hud_check"/>
- <check_box label="訄赲邽 郋郕郇郋 郋郕邾" name="keep_open_check"/>
- <check_box label="苤郋郈-郕訄迡 (郈郋郅郇郋郕訄郇郇邿)" name="freeze_frame_check"/>
- <check_box label="赲郋郋訇郇郋赲郅迮郇邽迮" name="auto_snapshot_check"/>
+ <panel name="advanced_options_panel">
+ <text name="advanced_options_label">
+ 苠衧衎 苠衎
+ </text>
+ <text name="layer_type_label">
+ 訄赲訄:
+ </text>
+ <combo_box label="苤郅郋邽 邽郱郋訇訄迠迮郇邽" name="layer_types">
+ <combo_box.item label="虷赲迮訄" name="Colors"/>
+ <combo_box.item label="郅訇邽郇訄" name="Depth"/>
+ </combo_box>
+ <check_box label="郇迮迮邿" name="ui_check"/>
+ <check_box label="訄郇郇迮 赲 邽迣迮" name="hud_check"/>
+ <check_box label="苤郋郈-郕訄迡 (郈郋郅郇郋郕訄郇郇邿)" name="freeze_frame_check"/>
+ <check_box label="赲郋郋訇郇郋赲郅迮郇邽迮" name="auto_snapshot_check"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_toybox.xml b/indra/newview/skins/default/xui/ru/floater_toybox.xml
index 8d7431d393..a4754ad7ab 100644
--- a/indra/newview/skins/default/xui/ru/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/ru/floater_toybox.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Toybox" title="苤苠苠衧 苤苠苺苠">
+<floater name="Toybox" title=" 苤苠苺苠">
<text name="toybox label 1">
郋訇訄赲迮 邽郅邽 迡訄郅邽迮 郕郇郋郈郕邽, 郈迮迮迣邽赲訄 邽 郇訄 郈訄郇迮郅邽 邽郇邾迮郇郋赲 邽郅邽 郇邽.
</text>
<text name="toybox label 2">
郇郋郈郕邽 訇迡 郋郋訇訄迠迮郇 赲 邽郋迡郇郋邾 赲邽迡迮 邽郅邽 赲 赲邽迡迮 郱郇訄郕郋赲, 赲 郱訄赲邽邽邾郋邽 郋 郇訄郋迮郕 郕訄迠迡郋邿 郈訄郇迮郅邽 邽郇邾迮郇郋赲.
</text>
+ <button label="邽邽 赲迮 郈訄郇迮郅邽" label_selected="邽邽 赲迮 郈訄郇迮郅邽" name="btn_clear_all"/>
<button label="迮郇 訄郇迡訄郇迮" label_selected="迮郇 訄郇迡訄郇迮" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_translation_settings.xml b/indra/newview/skins/default/xui/ru/floater_translation_settings.xml
new file mode 100644
index 0000000000..ad280a50dd
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_translation_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_translation_settings" title="苤苠 虴苠">
+ <string name="bing_api_key_not_verified">
+ Bing appID 郇迮 郈郋迡赲迮迠迡迮郇. 郋赲郋邽迮 郈郋郈郕.
+ </string>
+ <string name="google_api_key_not_verified">
+ 郅 Google API 郇迮 郈郋迡赲迮迠迡迮郇. 郋赲郋邽迮 郈郋郈郕.
+ </string>
+ <string name="bing_api_key_verified">
+ Bing appID 郈郋迡赲迮迠迡迮郇.
+ </string>
+ <string name="google_api_key_verified">
+ 郅 Google API 郈郋迡赲迮迠迡迮郇.
+ </string>
+ <check_box label="郕郅邽 邾訄邽郇郇邿 郈迮迮赲郋迡 郈邽 訄迮" name="translate_chat_checkbox"/>
+ <text name="translate_language_label">
+ 迮迮赲郋迡邽 訄 郇訄:
+ </text>
+ <combo_box name="translate_language_combo">
+ <combo_box.item label="郱郕 邽迮邾" name="System Default Language"/>
+ <combo_box.item label="訄郇迣郅邽邿郕邽邿" name="English"/>
+ <combo_box.item label="迡訄郕邽邿" name="Danish"/>
+ <combo_box.item label="郇迮邾迮郕邽邿" name="German"/>
+ <combo_box.item label="邽郈訄郇郕邽邿" name="Spanish"/>
+ <combo_box.item label="訄郇郱郕邽邿" name="French"/>
+ <combo_box.item label="邽訄郅郇郕邽邿" name="Italian"/>
+ <combo_box.item label="赲迮郇迣迮郕邽邿" name="Hungarian"/>
+ <combo_box.item label="郇邽迡迮郅訄郇迡郕邽邿" name="Dutch"/>
+ <combo_box.item label="郈郋郅郕邽邿" name="Polish"/>
+ <combo_box.item label="郈郋迣訄郅郕邽邿" name="Portugese"/>
+ <combo_box.item label="郕邽邿" name="Russian"/>
+ <combo_box.item label="迮郕邽邿" name="Turkish"/>
+ <combo_box.item label="郕訄邽郇郕邽邿" name="Ukrainian"/>
+ <combo_box.item label="郕邽訄邿郕邽邿" name="Chinese"/>
+ <combo_box.item label="郈郋郇郕邽邿" name="Japanese"/>
+ <combo_box.item label="郕郋迮邿郕邽邿" name="Korean"/>
+ </combo_box>
+ <text name="tip">
+ 訇迮邽迮 迮赲邽 郈迮迮赲郋迡訄:
+ </text>
+ <radio_group name="translation_service_rg">
+ <radio_item initial_value="bing" label="Bing Translator" name="bing"/>
+ <radio_item initial_value="google" label="Google Translate" name="google"/>
+ </radio_group>
+ <text name="bing_api_key_label">
+ Bing [http://www.bing.com/developers/createapp.aspx AppID]:
+ </text>
+ <button label="郋迡赲迮迡邽" name="verify_bing_api_key_btn"/>
+ <text name="google_api_key_label">
+ Google [http://code.google.com/apis/language/translate/v2/getting_started.html#auth 郅 API]:
+ </text>
+ <button label="郋迡赲迮迡邽" name="verify_google_api_key_btn"/>
+ <text name="google_links_text">
+ [http://code.google.com/apis/language/translate/v2/pricing.html 虷迮郇] | [https://code.google.com/apis/console 苤訄邽邽郕訄]
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="邾迮郇訄" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
index c1fb858d48..2b23086062 100644
--- a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="苺 苤">
<string name="title_nearby">
- 訄郋邿郕邽 迣郋郅郋訄
+ 苤苠 苤
</string>
<string name="title_group">
- 赲郋郇郋郕 迣郈郈迮 [GROUP]
+ 苺 [GROUP]
</string>
<string name="title_adhoc">
- 郋郇迮迮郇邽
+ 苳虷觓
</string>
<string name="title_peer_2_peer">
- 赲郋郇郋郕 郈郋郅郱郋赲訄迮郅 [NAME]
+ 衧苠衩 [NAME]
</string>
<string name="no_one_near">
迮 郇邽郕郋迣郋 赲郕郅迮郇郇邾 迣郋郅郋郋邾
diff --git a/indra/newview/skins/default/xui/ru/menu_toolbars.xml b/indra/newview/skins/default/xui/ru/menu_toolbars.xml
index e04a9ee57d..aa05dbc390 100644
--- a/indra/newview/skins/default/xui/ru/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/ru/menu_toolbars.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Toolbars Popup">
- <menu_item_call label="訇郋 郕郇郋郈郋郕..." name="Chose Buttons"/>
+ <menu_item_call label="苺迡訄郅邽 郕郇郋郈郕" name="Remove button"/>
+ <menu_item_call label="郇郋郈郕邽 郈訄郇迮郅邽 邽郇邾迮郇郋赲..." name="Choose Buttons"/>
<menu_item_check label="郇訄郕邽 邽 郈郋迡郈邽邽" name="icons_with_text"/>
<menu_item_check label="苠郋郅郕郋 郱郇訄郕邽" name="icons_only"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index b9f403c04b..93d0166568 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -1,12 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu_bar name="Main Menu">
<menu label="觓" name="Me">
- <menu_item_call label="郇郋邾訄邽郋郇郇訄 郈訄郇迮郅..." name="Manage My Account"/>
<menu_item_call label="郋邽郅" name="Profile"/>
<menu_item_call label="郇迮郇郋..." name="ChangeOutfit"/>
+ <menu_item_call label="訇迮邽迮 訄赲訄訄..." name="Avatar Picker"/>
<menu_item_check label="郇赲迮郇訄..." name="Inventory"/>
- <menu_item_check label="迮..." name="Gestures"/>
- <menu_item_check label="郋郅郋..." name="ShowVoice"/>
+ <menu_item_call label="郋赲郋迮 郋郕郇郋 邽郇赲迮郇訄" name="NewInventoryWindow"/>
+ <menu_item_call label="迮訄..." name="Places"/>
+ <menu_item_call label="郋迡訇郋郕訄..." name="Picks"/>
+ <menu_item_call label="苺郈訄赲郅迮郇邽迮 郕訄邾迮郋邿..." name="Camera Controls"/>
<menu label="赲邽迠迮郇邽迮" name="Movement">
<menu_item_call label="苤迮" name="Sit Down Here"/>
<menu_item_check label="郋郅迮" name="Fly"/>
@@ -20,34 +22,37 @@
<menu_item_call label="訄郈郋 訄訄 訄迡邾邽郇邽訄郋訄" name="Request Admin Options"/>
<menu_item_call label="郋迡 邽郱 訄訄 訄迡邾邽郇邽訄郋訄" name="Leave Admin Options"/>
<menu_item_call label="郈邽 L$" name="Buy and Sell L$"/>
+ <menu_item_call label="郇郋邾訄邽郋郇郇訄 郈訄郇迮郅 訄郕郕訄郇訄..." name="Manage My Account"/>
<menu_item_call label="訄郋邿郕邽..." name="Preferences"/>
- <menu_item_call label="訄郇迮郅邽 邽郇邾迮郇郋赲..." name="Toolbars"/>
+ <menu_item_call label="郇郋郈郕邽 郈訄郇迮郅邽 邽郇邾迮郇郋赲..." name="Toolbars"/>
<menu_item_call label="苤郕 赲迮 郅迮邾迮郇 郈訄赲郅迮郇邽" name="Hide UI"/>
<menu_item_call label="郋迡 邽郱 [APP_NAME]" name="Quit"/>
</menu>
<menu label="訇迮郇邽迮" name="Communicate">
- <menu_item_call label="郋邽 迡郱" name="My Friends"/>
- <menu_item_call label="郋邽 迣郈郈" name="My Groups"/>
- <menu_item_check label="郋郕訄郅郇邿 訄" name="Nearby Chat"/>
+ <menu_item_check label="虴訄..." name="Nearby Chat"/>
+ <menu_item_check label="郋赲郋邽" name="Speak"/>
+ <menu_item_check label="訄郋邿郕邽 迣郋郅郋訄..." name="Nearby Voice"/>
+ <menu_item_check label="郱邾迮郇迮郇邽迮 迣郋郅郋訄..." name="ShowVoice"/>
+ <menu_item_check label="迮..." name="Gestures"/>
+ <menu_item_call label="郱" name="My Friends"/>
+ <menu_item_call label="郈郈" name="My Groups"/>
<menu_item_call label="迡邽 郇迮郈郋迡訄郅迮郕" name="Active Speakers"/>
- <menu_item_check label="郋郅郋訄 郋訇迮迮迡郇邽郕郋赲" name="Nearby Voice"/>
</menu>
<menu label="邽" name="World">
- <menu_item_check label="邽郇邽郕訄訄" name="Mini-Map"/>
+ <menu_item_call label="郋訇訄赲邽 郱訄郕郅訄迡郕 郇訄 郋 邾迮郋" name="Create Landmark Here"/>
+ <menu_item_call label="郇郕..." name="Destinations"/>
<menu_item_check label="訄訄 邾邽訄" name="World Map"/>
+ <menu_item_check label="邽郇邽郕訄訄" name="Mini-Map"/>
<menu_item_check label="郋邽郕" name="Search"/>
+ <menu_item_call label="苠迮郅迮郈郋訄邽 迡郋邾郋邿" name="Teleport Home"/>
+ <menu_item_call label="苺訄郇郋赲邽 迡郋邾 郱迡迮" name="Set Home to Here"/>
<menu_item_call label="苤郇邽邾郋郕" name="Take Snapshot"/>
- <menu_item_call label="郋訇訄赲邽 郱訄郕郅訄迡郕 郇訄 郋 邾迮郋" name="Create Landmark Here"/>
- <menu label="郋邽郅 邾迮訄" name="Land">
- <menu_item_call label="郋邽郅 邾迮訄" name="Place Profile"/>
- <menu_item_call label=" 郱迮邾郅迮" name="About Land"/>
- <menu_item_call label="迮迣邽郋郇/郱迮邾郅迮赲郅訄迡迮郇邽迮" name="Region/Estate"/>
- </menu>
+ <menu_item_call label="郋邽郅 邾迮訄" name="Place Profile"/>
+ <menu_item_call label=" 郱迮邾郅迮" name="About Land"/>
+ <menu_item_call label="迮迣邽郋郇/郱迮邾郅迮赲郅訄迡迮郇邽迮" name="Region/Estate"/>
+ <menu_item_call label="郋邽 赲郅訄迡迮郇邽..." name="My Land"/>
<menu_item_call label="郈邽 郱迮邾郅" name="Buy Land"/>
- <menu_item_call label="郋 郱迮邾郅" name="My Land"/>
<menu label="郋郕訄郱訄" name="LandShow">
- <menu_item_check label="訄郇迮郅 迡赲邽迠迮郇邽" name="Movement Controls"/>
- <menu_item_check label="訄郇迮郅 郕訄邾迮" name="Camera Controls"/>
<menu_item_check label="邽郇邽邽 郱訄郈迮訄" name="Ban Lines"/>
<menu_item_check label="迮郕邽" name="beacons"/>
<menu_item_check label="訄郇邽 郋訇赲迮郇郇郋邽" name="Property Lines"/>
@@ -56,16 +61,15 @@
<menu_item_check label="苤赲郋邿赲訄 訄郕訄" name="Parcel Properties"/>
<menu_item_check label="迮郇 竄郋郈郋郅郇邽迮郅郇郋罈" name="Show Advanced Menu"/>
</menu>
- <menu_item_call label="苠迮郅迮郈郋邽郋赲訄 迡郋邾郋邿" name="Teleport Home"/>
- <menu_item_call label="苺訄郇郋赲邽 迡郋邾 郱迡迮" name="Set Home to Here"/>
<menu label="苤郋郅郇迮" name="Environment Settings">
<menu_item_call label="郋郋迡" name="Sunrise"/>
<menu_item_call label="郋郅迡迮郇" name="Noon"/>
<menu_item_call label="訄郕訄" name="Sunset"/>
<menu_item_call label="郋郅郇郋" name="Midnight"/>
+ <menu_item_call label="郈郋郅郱郋赲訄 郇訄郋邿郕邽 迮迣邽郋郇訄" name="Use Region Settings"/>
</menu>
- <menu label="迮迡訄郕郋 迮迡" name="Enviroment Editor">
- <menu_item_call label="訄郋邿郕邽 迮迡..." name="Enviroment Settings"/>
+ <menu label="迮迡訄郕郋 迮迡" name="Environment Editor">
+ <menu_item_call label="訄郋邿郕邽 迮迡..." name="Environment Settings"/>
<menu label="訄郋邿郕邽 赲郋迡" name="Water Presets">
<menu_item_call label="苤郋郱迡訄 郇訄郋邿郕..." name="new_water_preset"/>
<menu_item_call label="郱邾迮郇邽 郇訄郋邿郕..." name="edit_water_preset"/>
@@ -144,6 +148,7 @@
<menu_item_call label="迮郇" name="Redo"/>
</menu>
<menu label="苤郈訄赲郕訄" name="Help">
+ <menu_item_call label="郇郕邽邽..." name="How To"/>
<menu_item_call label="苤郈訄赲郕訄 郈郋 [SECOND_LIFE]" name="Second Life Help"/>
<menu_item_call label="訄郅郋訇訄" name="Report Abuse"/>
<menu_item_call label="苤郋郋訇邽 郋訇 郋邽訇郕迮" name="Report Bug"/>
@@ -198,11 +203,10 @@
<menu_item_check label="郈郋郅郱郋赲訄 郈郋郋郕 迡郅 迮郇邽 郈郋迡郕郅訄迮邾 邾郋迡郅迮邿" name="Use Plugin Read Thread"/>
<menu_item_call label="邽邽 郕 迣郈郈" name="ClearGroupCache"/>
<menu_item_check label="苤迣郅訄迠邽赲訄郇邽迮 邾" name="Mouse Smoothing"/>
+ <menu_item_call label="赲郋訇郋迡邽 郕郅訄赲邽邽" name="Release Keys"/>
<menu label="郋邽迮 郕郅訄赲邽邽" name="Shortcuts">
<menu_item_call label="郱郋訇訄迠迮郇邽迮 (L$[COST])..." name="Upload Image"/>
<menu_item_check label="郋邽郕" name="Search"/>
- <menu_item_call label="赲郋訇郋迡邽 郕郅訄赲邽邽" name="Release Keys"/>
- <menu_item_call label="苤訇郋邽 訄郱邾迮 邽郇迮迮邿訄" name="Set UI Size to Default"/>
<menu_item_check label="郋郕訄郱訄 邾迮郇 竄郋郈郋郅郇邽迮郅郇郋罈 - 訄郋迮 郋迮訄郇邽迮 郕郅訄赲邽" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="訄郕 郋郕郇郋" name="Close Window"/>
<menu_item_call label="訄郕 赲迮 郋郕郇訄" name="Close All Windows"/>
@@ -288,6 +292,7 @@
<menu_item_check label="赲迮迮郇邽迮" name="Lights"/>
<menu_item_check label="訄郕訄 郋郅郕郇郋赲迮郇邽邿" name="Collision Skeleton"/>
<menu_item_check label="邽" name="Raycast"/>
+ <menu_item_check label="訄郈訄赲郅迮郇邽 赲迮訄" name="Wind Vectors"/>
<menu_item_check label="苤郅郋迠郇郋 赲邽郱訄郅邽郱訄邽邽" name="rendercomplexity"/>
<menu_item_check label="迮郈郕訄" name="Sculpt"/>
</menu>
@@ -300,7 +305,6 @@
<menu_item_check label="赲迮迮郇邽迮 邽 迮郇邽" name="Lighting and Shadows"/>
<menu_item_check label="苠迮郇邽 郋 郋郅郇訄, 郅郇 邽 郈郋迠迮郕郋郋赲" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO 邽 迣郅訄迠邽赲訄郇邽迮 迮郇迮邿" name="SSAO and Shadow Smoothing"/>
- <menu_item_check label="郋赲迮邾迮郇郋迮 郋赲迮迮郇邽迮 (郕郈迮邽邾迮郇訄郅郇郋迮)" name="Global Illumination"/>
<menu_item_check label="郅訄迡郕訄 GL" name="Debug GL"/>
<menu_item_check label="郅訄迡郕訄 郕郋郇赲迮邿迮訄" name="Debug Pipeline"/>
<menu_item_check label="赲郋邾訄邽迮郕邽迮 訄郅訄-邾訄郕邽 (郋郅郋迠迮郇郇迮)" name="Automatic Alpha Masks (deferred)"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index f121743fe9..04f2f6b486 100644
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -1110,8 +1110,13 @@
<notification name="DisplaySetToSafe">
苺訄郇郋赲郅迮郇 訇迮郱郋郈訄郇邿 郋赲迮郇 郇訄郋迮郕 郋郋訇訄迠迮郇邽, 訄郕 郕訄郕 郕訄郱訄郇 郈訄訄邾迮 -safe.
</notification>
- <notification name="DisplaySetToRecommended">
- 苺訄郇郋赲郅迮郇 迮郕郋邾迮郇迡迮邾邿 郋赲迮郇 郇訄郋迮郕 郋郋訇訄迠迮郇邽 赲 郋郋赲迮赲邽邽 赲訄迮邿 邽迮邾郇郋邿 郕郋郇邽迣訄邽迮邿.
+ <notification name="DisplaySetToRecommendedGPUChange">
+ 苺訄郇郋赲郅迮郇 迮郕郋邾迮郇迡迮邾邿 郋赲迮郇 郇訄郋迮郕 郋郋訇訄迠迮郇邽, 訄郕 郕訄郕 迣訄邽迮郕訄 郕訄訄 邽郱邾迮郇迮郇訄:
+ 竄[LAST_GPU]罈
+郇訄 竄[THIS_GPU]罈
+ </notification>
+ <notification name="DisplaySetToRecommendedFeatureChange">
+ 苺訄郇郋赲郅迮郇 迮郕郋邾迮郇迡迮邾邿 郋赲迮郇 郇訄郋迮郕 郋郋訇訄迠迮郇邽, 訄郕 郕訄郕 郈郋迡邽迮邾訄 赲邽郱訄郅邽郱訄邽邽 邽郱邾迮郇迮郇訄.
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
@@ -1910,7 +1915,13 @@ http://secondlife.com/download.
<usetemplate ignoretext="郋迡赲迮迠迡訄 郈迮迮迡 赲郋迡郋邾" name="okcancelignore" notext="迮 赲郋迡邽" yestext="邿邽"/>
</notification>
<notification name="ConfirmRestoreToybox">
- 迡迮邿赲邽迮郅郇郋 郋邽迮 赲郋訄郇郋赲邽 郈邽郇迮 郈郋 邾郋郅訄郇邽 郕郇郋郈郕邽 邽 郈訄郇迮郅邽 邽郇邾迮郇郋赲?
+ 衪郋 迡迮邿赲邽迮 郈邽赲迮迡迮 郕 赲郋訄郇郋赲郅迮郇邽 訄郇迡訄郇 郕郇郋郈郋郕 邽 郈訄郇迮郅迮邿 邽郇邾迮郇郋赲.
+
+衪郋 迡迮邿赲邽迮 郇迮郅郱 郋邾迮郇邽.
+ <usetemplate name="okcancelbuttons" notext="邾迮郇訄" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearAllToybox">
+ 衪郋 迡迮邿赲邽迮 赲郋郱赲訄訄迮 赲迮 郕郇郋郈郕邽 赲 邽郇邾迮郇訄邽邿, 訄 郈訄郇迮郅邽 邽郇邾迮郇郋赲 訄郇郋赲 郈邾邽.
衪郋 迡迮邿赲邽迮 郇迮郅郱 郋邾迮郇邽.
<usetemplate name="okcancelbuttons" notext="邾迮郇訄" yestext="OK"/>
@@ -2236,14 +2247,16 @@ http://secondlife.com/download.
訄訄 赲邽郱邽郕訄 郋郕郅郋郇迮郇訄.
</notification>
<notification name="TeleportToLandmark">
- 邾郋迠迮迮 迮郅迮郈郋邽郋赲訄 赲 訄郕邽迮 邾迮訄, 郕訄郕 竄[NAME]罈, 郋郕赲 郈訄郇迮郅 竄迮訄罈 赲 郈訄赲郋邿 訄邽 郕訄郇訄 邽 赲訇訄赲 赲郕郅訄迡郕 竄訄郕郅訄迡郕邽罈.
-虳迮郅郕郇邽迮 郅訇 郱訄郕郅訄迡郕, 郋訇 赲訇訄 迮迮, 訄 郱訄迮邾 郇訄迠邾邽迮 郕郇郋郈郕 竄苠迮郅迮郈郋訄邽罈 赲郇邽郱 郈訄郇迮郅邽.
-(苠訄郕迠迮 邾郋迠郇郋 迡赲訄迠迡 迮郅郕郇 郱訄郕郅訄迡郕 邽郅邽 迮郅郕郇 迮迮 郈訄赲郋邿 郕郇郋郈郕郋邿 邾邽 邽 赲訇訄 郕郋邾訄郇迡 竄苠迮郅迮郈郋訄邽罈.)
+ 郅 迮郅迮郈郋訄邽邽 赲 迡迣郋迮 邾迮郋, 郇訄郈邽邾迮 竄[NAME]罈, 郇訄迠邾邽迮 郕郇郋郈郕 竄迮訄罈,
+ 郱訄迮邾 赲 郋郕赲迮邾 郋郕郇迮 赲訇迮邽迮 赲郕郅訄迡郕 竄訄郕郅訄迡郕邽罈. 虳迮郅郕郇邽迮 郅訇
+ 郱訄郕郅訄迡郕, 郋訇 赲訇訄 迮迮, 訄 郱訄迮邾 郇訄迠邾邽迮 郕郇郋郈郕 竄苠迮郅迮郈郋訄邽罈 赲郇邽郱 郋郕郇訄.
+ (苠訄郕迠迮 邾郋迠郇郋 迡赲訄迠迡 迮郅郕郇 郱訄郕郅訄迡郕 邽郅邽 迮郅郕郇 迮迮 郈訄赲郋邿 郕郇郋郈郕郋邿 邾邽 邽
+ 赲訇訄 郕郋邾訄郇迡 竄苠迮郅迮郈郋訄邽罈.)
</notification>
<notification name="TeleportToPerson">
- 邾郋迠迮迮 郋訇訄 訄郕邽邾邽 迠邽迮郅邾邽, 郕訄郕 竄[NAME]罈, 郋郕赲 郈訄郇迮郅 竄迡邽罈 赲 郈訄赲郋邿 訄邽 郕訄郇訄.
-訇迮邽迮 赲 郈邽郕迮 郇迠郇郋迣郋 迠邽迮郅, 訄 郱訄迮邾 郇訄迠邾邽迮 郕郇郋郈郕 竄IM罈 赲郇邽郱 郈訄郇迮郅邽.
-(苠訄郕迠迮 邾郋迠郇郋 迡赲訄迠迡 迮郅郕郇 邽邾 迠邽迮郅 赲 郈邽郕迮 邽郅邽 迮郅郕郇 迮迮 郈訄赲郋邿 郕郇郋郈郕郋邿 邾邽 邽 赲訇訄 郕郋邾訄郇迡 竄IM罈.)
+ 虴郋訇 郋訇訄邽 郕 迠邽迮郅, 郇訄郈邽邾迮 竄[NAME]罈, 郇訄迠邾邽迮 郕郇郋郈郕 竄迡邽罈, 赲訇迮邽迮 迠邽迮郅 赲 郈郋赲邽赲迮邾 郋郕郇迮 邽 郇訄迠邾邽迮 郕郇郋郈郕
+ 竄IM罈 赲郇邽郱 郋郕郇訄.
+ (苠訄郕迠迮 邾郋迠郇郋 迡赲訄迠迡 迮郅郕郇 邽邾 迠邽迮郅 赲 郈邽郕迮 邽郅邽 迮郅郕郇 迮迣郋 郈訄赲郋邿 郕郇郋郈郕郋邿 邾邽 邽 赲訇訄 郕郋邾訄郇迡 竄IM罈.)
</notification>
<notification name="CantSelectLandFromMultipleRegions">
迮郅郱 赲訇訄 郱迮邾郅 郋訇迮邽 郋郋郇 迣訄郇邽 邾迮迠迡 迮赲迮訄邾邽.
@@ -2264,6 +2277,9 @@ http://secondlife.com/download.
<notification name="PaymentSent">
[MESSAGE]
</notification>
+ <notification name="PaymentFailure">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
苺赲迮迡郋邾郅迮郇邽迮 郋 郋訇邽邽:
@@ -2798,7 +2814,7 @@ http://secondlife.com/download.
苤郋 郅迮迡邽邾邽 迠邽迮郅邾邽:
[RESIDENTS]
- <usetemplate name="okcancelbuttons" notext="邾迮郇訄" yestext=""/>
+ <usetemplate name="okcancelbuttons" notext="邾迮郇訄" yestext="OK"/>
</notification>
<notification name="ItemsShared">
迮迡邾迮 郈迮郇郋 郋郱迡訄郇.
@@ -2888,7 +2904,7 @@ http://secondlife.com/download.
郈郋郱迠迮, 迡訄迠迮 郈郋郅迮 郋迣郋, 郕訄郕 赲 郈郋郕邽郇郅邽 訄郱迣郋赲郋.
訄迣郅邽 赲迮?
- <usetemplate ignoretext="郋迡赲迮迠迡訄 郈迮迮迡 郱訄迣郅迮郇邽迮邾 赲迮 訄郇邽郕郋赲 迣郈郈郋赲郋迣郋 訄郱迣郋赲郋訄" name="okcancelignore" notext="邾迮郇訄" yestext=""/>
+ <usetemplate ignoretext="郋迡赲迮迠迡訄 郈迮迮迡 郱訄迣郅迮郇邽迮邾 赲迮 訄郇邽郕郋赲 迣郈郈郋赲郋迣郋 訄郱迣郋赲郋訄" name="okcancelignore" notext="邾迮郇訄" yestext="OK"/>
</notification>
<notification label="虴訄" name="HintChat">
虴郋訇 郈邽郋迮迡邽郇邽 郕 訄, 赲赲迮迡邽迮 郅郋赲訄 赲 郈郋郅迮 訄訄 郇邽迠迮.
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_skin.xml b/indra/newview/skins/default/xui/ru/panel_edit_skin.xml
index ac7e74316e..f5a5339afe 100644
--- a/indra/newview/skins/default/xui/ru/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/ru/panel_edit_skin.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="苠訄 郇訄 迣郋郅郋赲迮" name="Head Tattoos" tool_tip="虳迮郅郕郇邽迮 迡郅 赲訇郋訄 邽郱郋訇訄迠迮郇邽"/>
- <texture_picker label="苠訄 郇訄 赲迮郇邽 訄 迮郅訄" name="Upper Tattoos" tool_tip="虳迮郅郕郇邽迮 迡郅 赲訇郋訄 邽郱郋訇訄迠迮郇邽"/>
- <texture_picker label="苠訄 郇訄 郇邽迠郇邽 訄 迮郅訄" name="Lower Tattoos" tool_tip="虳迮郅郕郇邽迮 迡郅 赲訇郋訄 邽郱郋訇訄迠迮郇邽"/>
+ <texture_picker label="郋郅郋赲訄" name="Head" tool_tip="虳迮郅郕郇邽迮 迡郅 赲訇郋訄 邽郱郋訇訄迠迮郇邽"/>
+ <texture_picker label="迮郇 訄 迮郅訄" name="Upper Body" tool_tip="虳迮郅郕郇邽迮 迡郅 赲訇郋訄 邽郱郋訇訄迠迮郇邽"/>
+ <texture_picker label="邽迠郇 訄 迮郅訄" name="Lower Body" tool_tip="虳迮郅郕郇邽迮 迡郅 赲訇郋訄 邽郱郋訇訄迠迮郇邽"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml
index 1d26eecf87..8e3aac38d2 100644
--- a/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="迮迮赲郋迡 訄訄" name="translate_chat_checkbox"/>
+ <check_box label="迮迮赲郋迡邽 訄" name="translate_chat_checkbox"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_postcard_message.xml b/indra/newview/skins/default/xui/ru/panel_postcard_message.xml
new file mode 100644
index 0000000000..70587d8090
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_postcard_message.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_message">
+ <text name="to_label">
+ 郋邾:
+ </text>
+ <text name="name_label">
+ :
+ </text>
+ <text name="subject_label">
+ 苠迮邾訄:
+ </text>
+ <line_editor label="赲迮迡邽迮 迮邾 郈邽邾訄." name="subject_form"/>
+ <text name="msg_label">
+ 苤郋郋訇迮郇邽迮:
+ </text>
+ <text_editor name="msg_form">
+ 赲迮迡邽迮 迮郕 郈邽邾訄.
+ </text_editor>
+ <button label="邾迮郇訄" name="cancel_btn"/>
+ <button label="郋郅訄" name="send_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml b/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml
new file mode 100644
index 0000000000..dc9d59008f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_settings">
+ <combo_box label="訄郱邾迮" name="postcard_size_combo">
+ <combo_box.item label="苠迮郕迮迮 郋郕郇郋" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="訄迡訄" name="Custom"/>
+ </combo_box>
+ <layout_stack name="postcard_image_params_ls">
+ <layout_panel name="postcard_image_size_lp">
+ <spinner label="虼邽邽郇訄" name="postcard_snapshot_width"/>
+ <spinner label="郋訄" name="postcard_snapshot_height"/>
+ <check_box label="苤郋訄郇 郈郋郈郋邽邽" name="postcard_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="postcard_image_format_quality_lp">
+ <slider label="訄迮赲郋 邽郱郋訇訄迠迮郇邽" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
index a3ee5b7815..a9d5569c7f 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
@@ -29,29 +29,5 @@
<check_box label="苠迮郕郋赲迮 訄" name="EnableIMChatPopups" tool_tip="郋訇訄迠訄 赲郈郅赲訄邽迮 赲迮迡郋邾郅迮郇邽 郈邽 郈郋郅迮郇邽邽 IM-郋郋訇迮郇邽邿"/>
<spinner label="迮邾 郋郋訇訄迠迮郇邽 赲郈郅赲訄邽 迮郈郅邽郕:" name="nearby_toasts_lifetime"/>
<spinner label="迮邾 郱訄訄郇邽 赲郈郅赲訄邽 迮郈郅邽郕:" name="nearby_toasts_fadingtime"/>
- <text name="translate_chb_label">
- 郈郋郅郱郋赲訄 邾訄邽郇郇邿 郈迮迮赲郋迡 郈邽 郋訇迮郇邽邽
- </text>
- <text name="translate_language_text">
- 迮迮赲郋迡邽 訄 郇訄:
- </text>
- <combo_box name="translate_language_combobox">
- <combo_box.item label="觓郱郕 邽迮邾" name="System Default Language"/>
- <combo_box.item label="English" name="English"/>
- <combo_box.item label="Dansk" name="Danish"/>
- <combo_box.item label="Deutsch" name="German"/>
- <combo_box.item label="Espa簽ol" name="Spanish"/>
- <combo_box.item label="Fran癟ais" name="French"/>
- <combo_box.item label="Italiano" name="Italian"/>
- <combo_box.item label="Magyar" name="Hungarian"/>
- <combo_box.item label="Nederlands" name="Dutch"/>
- <combo_box.item label="Polski" name="Polish"/>
- <combo_box.item label="Portugu礙s" name="Portugese"/>
- <combo_box.item label="郕邽邿" name="Russian"/>
- <combo_box.item label="T羹rk癟e" name="Turkish"/>
- <combo_box.item label="苺郕訄郇郕訄" name="Ukrainian"/>
- <combo_box.item label="銝剜 (蝞雿) (郕邽訄邿郕邽邿)" name="Chinese"/>
- <combo_box.item label="交祈 (Japanese)" name="Japanese"/>
- <combo_box.item label="窱原 (Korean)" name="Korean"/>
- </combo_box>
+ <button label="訄郋邿郕邽 郈迮迮赲郋迡訄 訄訄" name="ok_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml
index 49f743a6ba..d1bfedf2d8 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml
@@ -16,7 +16,7 @@
<combo_box.item label="郕邽邿 (訇迮訄-赲迮邽)" name="Russian"/>
<combo_box.item label="T羹rk癟e - 迮郕邽邿 (訇迮訄-赲迮邽)" name="Turkish"/>
<combo_box.item label="交祈 郈郋郇郕邽邿 (訇迮訄-赲迮邽)" name="(Japanese)"/>
- <combo_box.item label="甇擃銝剜 - 郕邽訄邿郕邽邿, 訄迡邽邽郋郇郇郋迮 郈邽邾郋 (訇迮訄-赲迮邽)" name="Traditional Chinese"/>
+ <combo_box.item label="郕邽訄邿郕邽邿, 訄迡邽邽郋郇郇郋迮 郈邽邾郋 - 訇迮訄-赲迮邽" name="Traditional Chinese"/>
</combo_box>
<text name="language_textbox2">
(苠迮訇迮 郈迮迮郱訄郈郕)
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml
index db88189169..8e7fc71f0d 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml
@@ -15,7 +15,7 @@
訄郱迮:
</text>
<radio_group name="use_external_browser">
- <radio_item label="郈郋郅郱郋赲訄 邾郋邿 訇訄郱迮 (IE, Firefox, Safari)" name="external" tool_tip="迡迮 邽郈郋郅郱郋赲訄 訇訄郱迮, 郱訄迡訄郇郇邿 赲 邽迮邾迮 郈郋 邾郋郅訄郇邽. 迮 迮郕郋邾迮郇迡迮, 迮郅邽 [APP_NAME] 訄訇郋訄迮 赲 郈郋郅郇郋郕訄郇郇郋邾 迮迠邽邾迮." value="1"/>
+ <radio_item label="郈郋郅郱郋赲訄 邾郋邿 訇訄郱迮 (IE, Firefox, Safari)" name="external" tool_tip="迡迮 邽郈郋郅郱郋赲訄 訇訄郱迮, 郱訄迡訄郇郇邿 赲 邽迮邾迮 郈郋 邾郋郅訄郇邽. 迮 迮郕郋邾迮郇迡迮, 迮郅邽 [APP_NAME] 訄訇郋訄迮 赲 郈郋郅郇郋郕訄郇郇郋邾 迮迠邽邾迮." value="true"/>
<radio_item label="郈郋郅郱郋赲訄 赲郋迮郇郇邿 訇訄郱迮" name="internal" tool_tip="郅 郈郋邾郋訄 郈訄赲郕邽, 郅郋郕 郇訄 赲迮訇-訄郇邽 邽 .迡. 訇迡迮 邽郈郋郅郱郋赲訄 赲郋迮郇郇邿 訇訄郱迮. 衪郋 訇訄郱迮 郋郕赲訄迮 郕訄郕 郇郋赲郋迮 郋郕郇郋 赲 [APP_NAME]." value=""/>
</radio_group>
<check_box initial_value="邽邽郇訄" label="訄郱迮邽 郈郅訄迣邽郇" name="browser_plugins_enabled"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml
new file mode 100644
index 0000000000..53a150c9f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_inventory">
+ <text name="title">
+ 苤郋訄郇邽 赲 邾郋迮邾 邽郇赲迮郇訄迮
+ </text>
+ <text name="hint_lbl">
+ 苤郋訄郇迮郇邽迮 邽郱郋訇訄迠迮郇邽 赲 邽郇赲迮郇訄迮 郋邽 L$[UPLOAD_COST]. 虴郋訇 郋訄郇邽 迮迣郋 郕訄郕 迮郕, 赲訇迮邽迮 郋迡邽郇 邽郱 郕赲訄迡訄郇 郋邾訄郋赲.
+ </text>
+ <combo_box label="訄郱邾迮" name="texture_size_combo">
+ <combo_box.item label="苠迮郕迮迮 郋郕郇郋" name="CurrentWindow"/>
+ <combo_box.item label="訄郅迮郇郕邽邿 (128x128)" name="Small(128x128)"/>
+ <combo_box.item label="苤迮迡郇邽邿 (256x256)" name="Medium(256x256)"/>
+ <combo_box.item label="郋郅郋邿 (512x512)" name="Large(512x512)"/>
+ <combo_box.item label="訄迡訄" name="Custom"/>
+ </combo_box>
+ <spinner label="虼邽邽郇訄" name="inventory_snapshot_width"/>
+ <spinner label="郋訄" name="inventory_snapshot_height"/>
+ <check_box label="苤郋訄郇 郈郋郈郋邽邽" name="inventory_keep_aspect_check"/>
+ <button label="邾迮郇訄" name="cancel_btn"/>
+ <button label="苤郋訄郇邽" name="save_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml
new file mode 100644
index 0000000000..446b9bb2fd
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_local">
+ <text name="title">
+ 苤郋訄郇邽 郇訄 邾郋迮邾 郕郋邾郈迮迮
+ </text>
+ <combo_box label="訄郱邾迮" name="local_size_combo">
+ <combo_box.item label="苠迮郕迮迮 郋郕郇郋" name="CurrentWindow"/>
+ <combo_box.item label="320x240" name="320x240"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1280x1024" name="1280x1024"/>
+ <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="訄迡訄" name="Custom"/>
+ </combo_box>
+ <layout_stack name="local_image_params_ls">
+ <layout_panel name="local_image_size_lp">
+ <spinner label="虼邽邽郇訄" name="local_snapshot_width"/>
+ <spinner label="郋訄" name="local_snapshot_height"/>
+ <check_box label="苤郋訄郇 郈郋郈郋邽邽" name="local_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="local_image_format_quality_lp">
+ <combo_box label="苳郋邾訄" name="local_format_combo">
+ <combo_box.item label="PNG (訇迮郱 郈郋迮)" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP (訇迮郱 郈郋迮)" name="BMP"/>
+ </combo_box>
+ <slider label="訄迮赲郋 邽郱郋訇訄迠迮郇邽" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+ <button label="邾迮郇訄" name="cancel_btn"/>
+ <flyout_button label="苤郋訄郇邽" name="save_btn" tool_tip="苤郋訄郇邽 邽郱郋訇訄迠迮郇邽迮 赲 訄邿郅">
+ <flyout_button.item label="苤郋訄郇邽" name="save_item"/>
+ <flyout_button.item label="苤郋訄郇邽 郕訄郕..." name="saveas_item"/>
+ </flyout_button>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml
new file mode 100644
index 0000000000..250a76cd21
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_options">
+ <button label="郋邾迮邽 赲 邾郋邿 郈郋邽郅" name="save_to_profile_btn"/>
+ <button label="郈訄赲邽 郈郋 郈郋迮" name="save_to_email_btn"/>
+ <button label="苤郋訄郇邽 赲 邾郋迮邾 邽郇赲迮郇訄迮 (L$[AMOUNT])" name="save_to_inventory_btn"/>
+ <button label="苤郋訄郇邽 郇訄 邾郋迮邾 郕郋邾郈迮迮" name="save_to_computer_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml
new file mode 100644
index 0000000000..47f4caf8e3
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_postcard">
+ <string name="default_subject">
+ 郕郕訄 邽郱 [SECOND_LIFE].
+ </string>
+ <string name="default_message">
+ 郋訇赲訄邿 郱迡迮!
+ </string>
+ <string name="upload_message">
+ 郈訄赲郕訄...
+ </string>
+ <text name="title">
+ 衪郅迮郕郋郇郇郋迮 郈邽邾郋
+ </text>
+ <button label="苤郋郋訇迮郇邽迮" name="message_btn"/>
+ <button label="訄郋邿郕邽" name="settings_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml
new file mode 100644
index 0000000000..79a9ef58d0
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_profile">
+ <text name="title">
+ 郋邾迮邽 赲 邾郋邿 郈郋邽郅
+ </text>
+ <combo_box label="訄郱邾迮" name="profile_size_combo">
+ <combo_box.item label="苠迮郕迮迮 郋郕郇郋" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="訄迡訄" name="Custom"/>
+ </combo_box>
+ <layout_stack name="profile_image_params_ls">
+ <layout_panel name="profile_image_size_lp">
+ <spinner label="虼邽邽郇訄" name="profile_snapshot_width"/>
+ <spinner label="郋訄" name="profile_snapshot_height"/>
+ <check_box label="苤郋訄郇 郈郋郈郋邽邽" name="profile_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="profile_image_metadata_lp">
+ <text name="caption_label">
+ 郋迡郈邽:
+ </text>
+ <check_box initial_value="true" label="郕郅邽 訄郈郋郅郋迠迮郇邽迮" name="add_location_cb"/>
+ </layout_panel>
+ </layout_stack>
+ <button label="邾迮郇訄" name="cancel_btn"/>
+ <button label="郈訇郅邽郕郋赲訄" name="post_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index 7fef5797a9..6d954139ff 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -1211,7 +1211,7 @@ support@secondlife.com.
赲訄迮邾 邽郇赲迮郇訄迮 郇迮 郕郋郈邽邽 郋邿 迮郕
</string>
<string name="InventoryInboxNoItems">
- 郋郕郈郕邽 邽郱 郋迣郋赲郋迣郋 迮郇訄 訇迡 迡郋訄赲郅迮郇 迡訄.
+ 郅邽 赲 郕郈邽迮 邽郅邽 郕訄郕-郋 邽郇訄迮 郈郋郅邽迮 郈迮迡邾迮, 郋郇 郈郋赲邽 郱迡迮. 迣郋 邾郋迠郇郋 訇迡迮 郈迮迮訄邽 赲 郈訄郈郕 赲訄迮迣郋 邽郇赲迮郇訄 邽郅邽 迡訄郅邽, 迮郅邽 郋郇 訇郋郅迮 郇迮 郇迠迮郇.
</string>
<string name="MarketplaceURL">
http://marketplace.[DOMAIN_NAME]
@@ -1409,6 +1409,9 @@ support@secondlife.com.
<string name="no_attachments">
迮 郈邽郕迮郈郅迮郇郇 郋訇迮郕郋赲
</string>
+ <string name="Attachments remain">
+ 邽郋迮迡邽郇迮郇邽 (郋訄郅郋 迣郇迮郱迡: [COUNT])
+ </string>
<string name="Buy">
郈邽
</string>
@@ -1535,6 +1538,12 @@ support@secondlife.com.
<string name="Right Pec">
訄赲訄 迣迡
</string>
+ <string name="Neck">
+ 虼迮
+ </string>
+ <string name="Avatar Center">
+ 虷迮郇 訄赲訄訄訄
+ </string>
<string name="Invalid Attachment">
迮赲迮郇訄 郋郕訄 郈邽郋迮迡邽郇迮郇邽
</string>
@@ -4024,6 +4033,18 @@ support@secondlife.com.
<string name="you_paid_ldollars_no_name">
郱訄郈郅訄邽郅邽 L$[AMOUNT] 郱訄 [REASON].
</string>
+ <string name="you_paid_failure_ldollars">
+ 郇迮 邾郋迣郅邽 郱訄郈郅訄邽 郈郋郅郱郋赲訄迮郅 [NAME] L$[AMOUNT]: [REASON].
+ </string>
+ <string name="you_paid_failure_ldollars_no_info">
+ 郇迮 邾郋迣郅邽 郱訄郈郅訄邽 L$[AMOUNT]
+ </string>
+ <string name="you_paid_failure_ldollars_no_reason">
+ 郇迮 邾郋迣郅邽 郱訄郈郅訄邽 郈郋郅郱郋赲訄迮郅 [NAME] L$[AMOUNT]
+ </string>
+ <string name="you_paid_failure_ldollars_no_name">
+ 郇迮 邾郋迣郅邽 郱訄郈郅訄邽 L$[AMOUNT]: [REASON].
+ </string>
<string name="for item">
郱訄 [ITEM]
</string>
@@ -4433,6 +4454,12 @@ support@secondlife.com.
<string name="ExternalEditorFailedToRun">
迮 迡訄郅郋 郱訄郈邽 赲郇迮郇邽邿 迮迡訄郕郋.
</string>
+ <string name="TranslationFailed">
+ 邽訇郕訄 迮郅迮郈郋訄邽邽: [REASON]
+ </string>
+ <string name="TranslationResponseParseError">
+ 邽訇郕訄 郈邽 訄郇訄郅邽郱迮 郋赲迮訄 郈迮迮赲郋迡邽郕訄.
+ </string>
<string name="Esc">
ESC
</string>
@@ -4815,7 +4842,7 @@ support@secondlife.com.
邽郇邽郕訄訄
</string>
<string name="Command_Move_Label">
- 迮迮邾迮邽
+ 苭郋迡訇訄 / 訇迮迣 / 郈郋郅迮
</string>
<string name="Command_People_Label">
迡邽
@@ -4842,7 +4869,7 @@ support@secondlife.com.
郋赲郋邽
</string>
<string name="Command_View_Label">
- 邽迡
+ 苺郈訄赲郅迮郇邽迮 郕訄邾迮郋邿
</string>
<string name="Command_Voice_Label">
訄郋邿郕邽 迣郋郅郋訄
@@ -4917,7 +4944,16 @@ support@secondlife.com.
郱邾迮郇迮郇邽迮 迣郅訄 郕訄邾迮
</string>
<string name="Command_Voice_Tooltip">
- 郋邾郕郋 郱赲郋郇郕郋赲 邽 迣郋郅郋郋赲 郋郕迠訄邽 赲訄 郅迡迮邿
+ 迮迣郅邽郋赲郕訄 迣郋邾郕郋邽 赲郱郋赲郋赲 邽 訄郱迣郋赲郋郋赲 郅迡邾邽 郋郕郋郅郋 赲訄
+ </string>
+ <string name="Toolbar_Bottom_Tooltip">
+ 迮邿訄 郇訄 郇邽迠郇迮邿 郈訄郇迮郅邽 邽郇邾迮郇郋赲
+ </string>
+ <string name="Toolbar_Left_Tooltip">
+ 迮邿訄 郇訄 郅迮赲郋邿 郈訄郇迮郅邽 邽郇邾迮郇郋赲
+ </string>
+ <string name="Toolbar_Right_Tooltip">
+ 迮邿訄 郇訄 郈訄赲郋邿 郈訄郇迮郅邽 邽郇邾迮郇郋赲
</string>
<string name="Retain%">
訄郋郕%
@@ -4943,4 +4979,19 @@ support@secondlife.com.
<string name="Normal">
郋邾訄郅郇邿
</string>
+ <string name="snapshot_quality_very_low">
+ 迮郇 郇邽郱郕邽邿
+ </string>
+ <string name="snapshot_quality_low">
+ 邽郱郕邽邿
+ </string>
+ <string name="snapshot_quality_medium">
+ 苤迮迡郇邽邿
+ </string>
+ <string name="snapshot_quality_high">
+ 郋郕邽邿
+ </string>
+ <string name="snapshot_quality_very_high">
+ 迮郇 赲郋郕邽邿
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/ru/teleport_strings.xml b/indra/newview/skins/default/xui/ru/teleport_strings.xml
index 296562e6f1..feff286111 100644
--- a/indra/newview/skins/default/xui/ru/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/ru/teleport_strings.xml
@@ -21,8 +21,8 @@
郋赲郋邽迮 郈郋郈郕 郈郋郱迠迮.
</message>
<message name="NoHelpIslandTP">
- 郇迮 邾郋迠迮迮 迮郅迮郈郋邽郋赲訄 郋訇訄郇郋 郇訄 郋赲 郋邾郋邽.
-苠迮郅迮郈郋邽邿迮 郇訄 訇迮赲迮郇郇邿 郋赲 郋邾郋邽, 郋訇 郈郋赲郋邽 郋訇迮郇邽迮
+ 苠迮郅迮郈郋邽郋赲訄 郇訄郱訄迡 郇訄 郋赲 郈邽訇邽 郇迮郅郱.
+郅 郈郋赲郋迮郇邽 迮訇郇邽郕訄 郈迮迮邿迡邽迮 郇訄 竄郋赲 郈邽訇邽 - 郋訇邽邿罈.
</message>
<message name="noaccess_tport">
苺 赲訄 郇迮 迡郋郈訄 郕 郋郕迮 郇訄郱郇訄迮郇邽 郋迣郋 迮郅迮郈郋訄.
diff --git a/indra/newview/skins/default/xui/tr/floater_about.xml b/indra/newview/skins/default/xui/tr/floater_about.xml
index 993ec42958..8fa12ea759 100644
--- a/indra/newview/skins/default/xui/tr/floater_about.xml
+++ b/indra/newview/skins/default/xui/tr/floater_about.xml
@@ -64,32 +64,34 @@ Ses Sunucusu S羹r羹m羹: [VOICE_VERSION]
<panel label="Lisanslar" name="licenses_panel">
<text_editor name="credits_editor">
3Dconnexion SDK Telif Hakk覺 (C) 1992-2007 3Dconnexion
-APR Telif Hakk覺 (C) 2000-2004 The Apache Software Foundation
-Collada DOM Telif Hakk覺 2005 Sony Computer Entertainment Inc.
-cURL Telif Hakk覺 (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
-DBus/dbus-glib Telif Hakk覺 (C) 2002, 2003 CodeFactory AB / Telif Hakk覺 (C) 2003, 2004 Red Hat, Inc.
-expat Telif Hakk覺 (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-FreeType Telif Hakk覺 (C) 1996-2002, The FreeType Project (www.freetype.org).
-GL Telif Hakk覺 (C) 1999-2004 Brian Paul.
-GLOD Telif Hakk覺 (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University ve David Luebke, Brenden Schubert, University of Virginia.
-google-perftools Telif Hakk覺 (c) 2005, Google Inc.
-Havok.com(TM) Telif Hakk覺 (C) 1999-2001, Telekinesys Research Limited.
-jpeg2000 Telif Hakk覺 (C) 2001, David Taubman, The University of New South Wales (UNSW)
-jpeglib Telif Hakk覺 (C) 1991-1998, Thomas G. Lane.
-ogg/vorbis Telif Hakk覺 (C) 2001, Xiphophorus
-OpenSSL Telif Hakk覺 (C) 1998-2002 The OpenSSL Project.
-PCRE Telif Hakk覺 (c) 1997-2008 University of Cambridge
-SDL Telif Hakk覺 (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-SSLeay Telif Hakk覺 (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-xmlrpc-epi Telif Hakk覺 (C) 2000 Epinions, Inc.
-zlib Telif Hakk覺 (C) 1995-2002 Jean-loup Gailly ve Mark Adler.
-google-perftools Telif Hakk覺 (c) 2005, Google Inc.
+ APR Telif Hakk覺 (C) 2000-2004 The Apache Software Foundation
+ Collada DOM Telif Hakk覺 2005 Sony Computer Entertainment Inc.
+ cURL Telif Hakk覺 (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+ DBus/dbus-glib Telif Hakk覺 (C) 2002, 2003 CodeFactory AB / Telif Hakk覺 (C) 2003, 2004 Red Hat, Inc.
+ expat Telif Hakk覺 (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+ FreeType Telif Hakk覺 (C) 1996-2002, The FreeType Project (www.freetype.org).
+ GL Telif Hakk覺 (C) 1999-2004 Brian Paul.
+ GLOD Telif Hakk覺 (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University ve David Luebke, Brenden Schubert, University of Virginia.
+ google-perftools Telif Hakk覺 (c) 2005, Google Inc.
+ Havok.com(TM) Telif Hakk覺 (C) 1999-2001, Telekinesys Research Limited.
+ jpeg2000 Telif Hakk覺 (C) 2001, David Taubman, The University of New South Wales (UNSW)
+ jpeglib Telif Hakk覺 (C) 1991-1998, Thomas G. Lane.
+ ogg/vorbis Telif Hakk覺 (C) 2001, Xiphophorus
+ OpenSSL Telif Hakk覺 (C) 1998-2002 The OpenSSL Project.
+ PCRE Telif Hakk覺 (c) 1997-2008 University of Cambridge
+ SDL Telif Hakk覺 (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+ SSLeay Telif Hakk覺 (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ xmlrpc-epi Telif Hakk覺 (C) 2000 Epinions, Inc.
+ zlib Telif Hakk覺 (C) 1995-2002 Jean-loup Gailly ve Mark Adler.
+ google-perftools Telif Hakk覺 (c) 2005, Google Inc.
-Second Life G繹r羹nt羹leyicisi Havok (TM) Fizik motorunu kullanmaktad覺r. (c)Telif Hakk覺 1999-2010 Havok.com Inc. (ve Lisans Verenleri). T羹m Haklar覺 Sakl覺d覺r. Ayr覺nt覺l覺 bilgi i癟in bkz. www.havok.com
+ Second Life G繹r羹nt羹leyicisi Havok (TM) Fizik motorunu kullanmaktad覺r. (c)Telif Hakk覺 1999-2010 Havok.com Inc. (ve Lisans Verenleri). T羹m Haklar覺 Sakl覺d覺r. Ayr覺nt覺l覺 bilgi i癟in bkz. www.havok.com
-T羹m haklar覺 sakl覺d覺r. Ayr覺nt覺l覺 bilgi i癟in bkz. licenses.txt
+ Bu yaz覺l覺mda NVIDIA Corporation taraf覺ndan salanan kaynak kod yer almaktad覺r.
-Sesli sohbet i癟in Ses kodlamas覺: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+ T羹m haklar覺 sakl覺d覺r. Ayr覺nt覺l覺 bilgi i癟in bkz. licenses.txt
+
+ Sesli sohbet i癟in Ses kodlamas覺: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
</text_editor>
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/tr/floater_about_land.xml b/indra/newview/skins/default/xui/tr/floater_about_land.xml
index e0350964b5..dde658d64d 100644
--- a/indra/newview/skins/default/xui/tr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/tr/floater_about_land.xml
@@ -129,7 +129,7 @@
Trafik:
</text>
<text name="DwellText">
- 0
+ Y羹kleniyor...
</text>
<button label="Arazi Sat覺n Al" name="Buy Land..."/>
<button label="Linden Sat覺覺" name="Linden Sale..." tool_tip="Arazinin sahip olunmas覺, i癟eriinin ayarlanmas覺 ve ihaleye 癟覺kmam覺 olmas覺 gerekir"/>
@@ -307,13 +307,15 @@ Sadece b羹y羹k parseller aramada g繹r羹n羹r.
襤tme Yok (B繹lge Ge癟ersiz K覺lma)
</panel.string>
<panel.string name="see_avs_text">
- Parseldeki sakinleri g繹r ve onlarla sohbet et
+ Dier parsellerdeki avatarlar bu
</panel.string>
<text name="allow_label">
Sakinlere unun i癟in izin ver:
</text>
- <check_box label="Y羹zeyi D羹zenle" name="edit land check" tool_tip="襤aretliyse herkes arazinizi ekillendirebilir. en iyisi bunu iaretlememektir, 癟羹nk羹 kendi arazinizi her zaman d羹zenleyebilirsiniz."/>
- <check_box label="U癟" name="check fly" tool_tip="襤aretliyse Sakinler arazinizden u癟abilir. 襤aretli deilse, sadece arazinize ve arazinizin 羹zerinde u癟abilir."/>
+ <text name="allow_label0">
+ U癟ma:
+ </text>
+ <check_box label="Herkes" name="check fly" tool_tip="襤aretliyse Sakinler arazinizden u癟abilir. 襤aretli deilse, sadece arazinize ve arazinizin 羹zerinde u癟abilir."/>
<text name="allow_label2">
襤na Et:
</text>
@@ -329,9 +331,6 @@ Sadece b羹y羹k parseller aramada g繹r羹n羹r.
</text>
<check_box label="Herkes" name="check other scripts"/>
<check_box label="Grup" name="check group scripts"/>
- <text name="land_options_label">
- Arazi Se癟enekleri:
- </text>
<check_box label="G羹venli (hasar yok)" name="check safe" tool_tip="襤aretliyse, araziyi G羹venli moda getirerek hasar 癟arp覺mas覺n覺 etkinsizletirir 襤aretli deilse hasar 癟arp覺mas覺 etkinleir."/>
<check_box label="襤tme Yok" name="PushRestrictCheck" tool_tip="Komut dosyalar覺n覺n itmesini 繹nler Bu se癟enein iaretlenmesi arazinizdeki bozucu davran覺lar覺 繹nlemeye yard覺mc覺 olabilir."/>
<check_box label="Konumu Arama sonu癟lar覺nda g繹ster (L$30/hafta)" name="ShowDirectoryCheck" tool_tip="Arama sonu癟lar覺nda bu parsel g繹r羹ns羹n"/>
@@ -372,9 +371,9 @@ Sadece b羹y羹k parseller aramada g繹r羹n羹r.
</text>
<texture_picker name="snapshot_ctrl" tool_tip="Bir resim se癟mek i癟in t覺klay覺n"/>
<text name="allow_label5">
- Dier parsel Sakinlerine unun i癟in izin verin:
+ bu parseldeki avatarlar覺 g繹rebilir ve onlarla sohbet edebilir
</text>
- <check_box label="Avatarlar覺 G繹r" name="SeeAvatarsCheck" tool_tip="Dier parsellerdeki sakinlerin bu parseldeki sakinleri g繹rmesine ve onlarla sohbet etmesine, sizin de onlar覺 g繹r羹p, onlarla sohbet etmenize imkan tan覺r."/>
+ <check_box label="Avatarlar覺 G繹r" name="SeeAvatarsCheck" tool_tip="Dier parsellerdeki avatarlar覺n bu parseldeki avatarlar覺 g繹rmesine ve onlarla sohbet etmesine, sizin de onlar覺 g繹r羹p, onlarla sohbet etmenize imkan tan覺r."/>
<text name="landing_point">
襤ni Noktas覺: [LANDING]
</text>
diff --git a/indra/newview/skins/default/xui/tr/floater_avatar.xml b/indra/newview/skins/default/xui/tr/floater_avatar.xml
index fc9e3c8a9b..c6b14ba710 100644
--- a/indra/newview/skins/default/xui/tr/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/tr/floater_avatar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Avatar" title="AVATAR SE襤C襤"/>
+<floater name="Avatar" title="B襤R AVATAR SE襤N"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_buy_currency.xml b/indra/newview/skins/default/xui/tr/floater_buy_currency.xml
index 6608fd72e1..d90985dcff 100644
--- a/indra/newview/skins/default/xui/tr/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/tr/floater_buy_currency.xml
@@ -46,7 +46,7 @@
L$ [AMT]
</text>
<text name="currency_links">
- [http://www.secondlife.com/my/account/payment_method_management.php 繹deme y繹ntemi] | [http://www.secondlife.com/my/account/currency.php para birimi
+ [http://www.secondlife.com/my/account/payment_method_management.php 繹deme y繹ntemi] | [http://www.secondlife.com/my/account/currency.php para birimi]
</text>
<text name="exchange_rate_note">
En son d繹viz kurunu g繹rmek i癟in miktar覺 yeniden girin.
diff --git a/indra/newview/skins/default/xui/tr/floater_camera.xml b/indra/newview/skins/default/xui/tr/floater_camera.xml
index c92d4e9db4..22e2aa52c6 100644
--- a/indra/newview/skins/default/xui/tr/floater_camera.xml
+++ b/indra/newview/skins/default/xui/tr/floater_camera.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="camera_floater" title="GSTER">
+<floater name="camera_floater" title="KAMERA DENET襤MLER襤">
<floater.string name="rotate_tooltip">
Odak Etraf覺nda Kameray覺 D繹nd羹r
</floater.string>
diff --git a/indra/newview/skins/default/xui/tr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/tr/floater_hardware_settings.xml
index 12927dcaeb..8e056b9b0d 100644
--- a/indra/newview/skins/default/xui/tr/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/tr/floater_hardware_settings.xml
@@ -4,8 +4,8 @@
Filtreleme:
</text>
<check_box label="Anisotropik Filtreleme (etkinken daha yava)" name="ani"/>
- <text name="Antialiasing:">
- Antialiasing:
+ <text name="antialiasing label">
+ D羹zg羹nletirme:
</text>
<combo_box label="Antialiasing" name="fsaa">
<combo_box.item label="Devre d覺覺" name="FSAADisabled"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_model_preview.xml b/indra/newview/skins/default/xui/tr/floater_model_preview.xml
index 339545f96e..0c7cabc6ea 100644
--- a/indra/newview/skins/default/xui/tr/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/tr/floater_model_preview.xml
@@ -4,6 +4,9 @@
<string name="status_parse_error">
Hata: Tarih ayr覺t覺rma sorunu - ayr覺nt覺lar i癟in g羹nl羹e bak覺n.
</string>
+ <string name="status_material_mismatch">
+ Hata: Modelin malzemesi, referans modelin bir alt k羹mesi deil.
+ </string>
<string name="status_reading_file">
Y羹kleniyor...
</string>
diff --git a/indra/newview/skins/default/xui/tr/floater_model_wizard.xml b/indra/newview/skins/default/xui/tr/floater_model_wizard.xml
index 108d20cfac..b3c72ba2da 100644
--- a/indra/newview/skins/default/xui/tr/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/tr/floater_model_wizard.xml
@@ -20,6 +20,9 @@
Kar覺ya y羹klenecek model dosyas覺n覺 se癟in
</text>
<button label="G繹zat..." label_selected="G繹zat..." name="browse"/>
+ <text name="Model types">
+ Second Life, COLLADA (.dae) dosyalar覺n覺 destekler
+ </text>
<text name="dimensions">
X Y Z
</text>
diff --git a/indra/newview/skins/default/xui/tr/floater_moveview.xml b/indra/newview/skins/default/xui/tr/floater_moveview.xml
index 74ed613a62..9226218a24 100644
--- a/indra/newview/skins/default/xui/tr/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/tr/floater_moveview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater" title="HAREKET ET">
+<floater name="move_floater" title="YR / KO / U">
<string name="walk_forward_tooltip">
襤leri Y羹r羹 (Yukar覺 Okuna veya W&apos;ye bas覺n)
</string>
diff --git a/indra/newview/skins/default/xui/tr/floater_snapshot.xml b/indra/newview/skins/default/xui/tr/floater_snapshot.xml
index 492ec4b588..fa51f15d16 100644
--- a/indra/newview/skins/default/xui/tr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/tr/floater_snapshot.xml
@@ -3,72 +3,63 @@
<floater.string name="unknown">
bilinmiyor
</floater.string>
- <radio_group label="Anl覺k g繹r羹nt羹 t羹r羹" name="snapshot_type_radio">
- <radio_item label="E-posta" name="postcard"/>
- <radio_item label="Envanterim (L$[AMOUNT])" name="texture"/>
- <radio_item label="Bilgisayar覺ma kaydet" name="local"/>
- </radio_group>
+ <string name="postcard_progress_str">
+ E-posta G繹nderiliyor
+ </string>
+ <string name="profile_progress_str">
+ Yay覺nlan覺yor
+ </string>
+ <string name="inventory_progress_str">
+ Envantere Kaydediliyor
+ </string>
+ <string name="local_progress_str">
+ Bilgisayara Kaydediliyor
+ </string>
+ <string name="profile_succeeded_str">
+ G繹r羹nt羹 y羹klendi
+ </string>
+ <string name="postcard_succeeded_str">
+ E-posta G繹nderildi!
+ </string>
+ <string name="inventory_succeeded_str">
+ Envantere Kaydedildi!
+ </string>
+ <string name="local_succeeded_str">
+ Bilgisayara Kaydedildi!
+ </string>
+ <string name="profile_failed_str">
+ G繹r羹nt羹 Profil Ak覺覺n覺za y羹klenemedi.
+ </string>
+ <string name="postcard_failed_str">
+ E-posta g繹nderilemedi.
+ </string>
+ <string name="inventory_failed_str">
+ Envantere kaydedilemedi.
+ </string>
+ <string name="local_failed_str">
+ Bilgisayara kaydedilemedi.
+ </string>
+ <button name="advanced_options_btn" tool_tip="Gelimi se癟enekler"/>
+ <text name="image_res_text">
+ [WIDTH] x [HEIGHT] px
+ </text>
<text name="file_size_label">
[SIZE] KB
</text>
- <button label="G繹nder" name="send_btn"/>
- <button label="Kaydet (L$[AMOUNT])" name="upload_btn"/>
- <flyout_button label="Kaydet" name="save_btn" tool_tip="G繹r羹nt羹y羹 bir dosyaya kaydet">
- <flyout_button.item label="Kaydet" name="save_item"/>
- <flyout_button.item label="Farkl覺 Kaydet..." name="saveas_item"/>
- </flyout_button>
- <button label="Daha Fazla" name="more_btn" tool_tip="Gelimi se癟enekler"/>
- <button label="Daha Az" name="less_btn" tool_tip="Gelimi se癟enekler"/>
- <button label="襤ptal" name="discard_btn"/>
- <text name="type_label2">
- B羹y羹kl羹k
- </text>
- <text name="format_label">
- Format
- </text>
- <combo_box label="繹z羹n羹rl羹k" name="postcard_size_combo">
- <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="zel" name="Custom"/>
- </combo_box>
- <combo_box label="繹z羹n羹rl羹k" name="texture_size_combo">
- <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
- <combo_box.item label="K羹癟羹k (128x128)" name="Small(128x128)"/>
- <combo_box.item label="Orta (256x256)" name="Medium(256x256)"/>
- <combo_box.item label="B羹y羹k (512x512)" name="Large(512x512)"/>
- <combo_box.item label="zel" name="Custom"/>
- </combo_box>
- <combo_box label="繹z羹n羹rl羹k" name="local_size_combo">
- <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
- <combo_box.item label="320x240" name="320x240"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="1280x1024" name="1280x1024"/>
- <combo_box.item label="1600x1200" name="1600x1200"/>
- <combo_box.item label="zel" name="Custom"/>
- </combo_box>
- <combo_box label="Format" name="local_format_combo">
- <combo_box.item label="PNG" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP" name="BMP"/>
- </combo_box>
- <spinner label="Genilik" name="snapshot_width"/>
- <spinner label="Y羹kseklik" name="snapshot_height"/>
- <check_box label="Oranlar覺 Koru" name="keep_aspect_check"/>
- <slider label="G繹r羹nt羹 kalitesi" name="image_quality_slider"/>
- <text name="layer_type_label">
- Yakala:
- </text>
- <combo_box label="G繹r羹nt羹 Katmanlar覺" name="layer_types">
- <combo_box.item label="Renkler" name="Colors"/>
- <combo_box.item label="Derinlik" name="Depth"/>
- </combo_box>
- <check_box label="Aray羹z" name="ui_check"/>
- <check_box label="BG&apos;ler" name="hud_check"/>
- <check_box label="Kaydettikten sonra a癟覺k tut" name="keep_open_check"/>
- <check_box label="Kare dondur (tam ekran)" name="freeze_frame_check"/>
- <check_box label="Otomatik yenile" name="auto_snapshot_check"/>
+ <panel name="advanced_options_panel">
+ <text name="advanced_options_label">
+ GEL襤M襤 SEENEKLER
+ </text>
+ <text name="layer_type_label">
+ Yakala:
+ </text>
+ <combo_box label="G繹r羹nt羹 Katmanlar覺" name="layer_types">
+ <combo_box.item label="Renkler" name="Colors"/>
+ <combo_box.item label="Derinlik" name="Depth"/>
+ </combo_box>
+ <check_box label="Aray羹z" name="ui_check"/>
+ <check_box label="BG&apos;ler" name="hud_check"/>
+ <check_box label="Kare dondur (tam ekran)" name="freeze_frame_check"/>
+ <check_box label="Otomatik yenile" name="auto_snapshot_check"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_toybox.xml b/indra/newview/skins/default/xui/tr/floater_toybox.xml
index 05d3633df0..e60e176643 100644
--- a/indra/newview/skins/default/xui/tr/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/tr/floater_toybox.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Toybox" title="ARA UBUKLARINI ZELLET襤R">
+<floater name="Toybox" title="ARA UBUU DMELER襤">
<text name="toybox label 1">
D羹meleri ara癟 癟ubuklar覺na veya ara癟 癟ubuklar覺ndan s羹r羹kleyerek ekleyin ya da kald覺r覺n.
</text>
<text name="toybox label 2">
Her bir ara癟 癟ubuunun ayar覺na g繹re d羹meler g繹sterilir veya sadece simgeleri yer al覺r.
</text>
+ <button label="T羹m ara癟 癟ubuklar覺n覺 temizle" label_selected="T羹m ara癟 癟ubuklar覺n覺 temizle" name="btn_clear_all"/>
<button label="Varsay覺lanlar覺 geri y羹kle" label_selected="Varsay覺lanlar覺 geri y羹kle" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_translation_settings.xml b/indra/newview/skins/default/xui/tr/floater_translation_settings.xml
new file mode 100644
index 0000000000..33ce76bd9a
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_translation_settings.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_translation_settings" title="SOHBET EV襤R襤S襤 AYARLARI">
+ <string name="bing_api_key_not_verified">
+ Bing uygulama kimlii dorulanmad覺. L羹tfen tekrar deneyin.
+ </string>
+ <string name="google_api_key_not_verified">
+ Google API anahtar覺 dorulanmad覺. L羹tfen tekrar deneyin.
+ </string>
+ <string name="bing_api_key_verified">
+ Bing uygulama kimlii doruland覺.
+ </string>
+ <string name="google_api_key_verified">
+ Google API anahtar覺 doruland覺.
+ </string>
+ <check_box label="Sohbet ederken makine 癟evirisini etkinletirin" name="translate_chat_checkbox"/>
+ <text name="translate_language_label">
+ Sohbeti u dile 癟evir:
+ </text>
+ <combo_box name="translate_language_combo">
+ <combo_box.item label="Sistem Varsay覺lan覺" name="System Default Language"/>
+ <combo_box.item label="襤ngilizce" name="English"/>
+ <combo_box.item label="Dansk (Danca)" name="Danish"/>
+ <combo_box.item label="Deutsch (Almanca)" name="German"/>
+ <combo_box.item label="Espa簽ol (襤spanyolca)" name="Spanish"/>
+ <combo_box.item label="Fran癟ais (Frans覺zca)" name="French"/>
+ <combo_box.item label="Italiano (襤talyanca)" name="Italian"/>
+ <combo_box.item label="Magyar (Macarca)" name="Hungarian"/>
+ <combo_box.item label="Nederlands (Flemenk癟e)" name="Dutch"/>
+ <combo_box.item label="Polski (Leh癟e)" name="Polish"/>
+ <combo_box.item label="Portugu礙s (Portekizce)" name="Portugese"/>
+ <combo_box.item label="郕邽邿 (Rus癟a)" name="Russian"/>
+ <combo_box.item label="T羹rk癟e (T羹rk癟e)" name="Turkish"/>
+ <combo_box.item label="苺郕訄郇郕訄 (Ukraynaca)" name="Ukrainian"/>
+ <combo_box.item label="銝剜 (甇擃) (ince)" name="Chinese"/>
+ <combo_box.item label="交祈 (Japonca)" name="Japanese"/>
+ <combo_box.item label="窱原 (Korece)" name="Korean"/>
+ </combo_box>
+ <text name="tip">
+ eviri hizmetini se癟in:
+ </text>
+ <radio_group name="translation_service_rg">
+ <radio_item initial_value="bing" label="Bing evirmeni" name="bing"/>
+ <radio_item initial_value="google" label="Google Translate" name="google"/>
+ </radio_group>
+ <text name="bing_api_key_label">
+ Bing [http://www.bing.com/developers/createapp.aspx Uygulama Kimlii]:
+ </text>
+ <button label="Dorula" name="verify_bing_api_key_btn"/>
+ <text name="google_api_key_label">
+ Google [http://code.google.com/apis/language/translate/v2/getting_started.html#auth API anahtar覺]:
+ </text>
+ <button label="Dorula" name="verify_google_api_key_btn"/>
+ <text name="google_links_text">
+ [http://code.google.com/apis/language/translate/v2/pricing.html Fiyatland覺rma] | [https://code.google.com/apis/console 襤statistikler]
+ </text>
+ <button label="Tamam" name="ok_btn"/>
+ <button label="襤ptal" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml b/indra/newview/skins/default/xui/tr/floater_voice_controls.xml
index dac05d8327..5ff0804f17 100644
--- a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/tr/floater_voice_controls.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="SES DENET襤MLER襤">
<string name="title_nearby">
- Yak覺ndaki ses
+ SES AYARLARI
</string>
<string name="title_group">
- [GROUP] ile grup aramas覺
+ [GROUP] 襤LE GRUP ARAMASI
</string>
<string name="title_adhoc">
- Konferans aramas覺
+ KONFERANS ARAMASI
</string>
<string name="title_peer_2_peer">
- [NAME] ile arama
+ [NAME] 襤LE ARAMA
</string>
<string name="no_one_near">
Yak覺ndaki kimsede ses etkin deil
diff --git a/indra/newview/skins/default/xui/tr/menu_toolbars.xml b/indra/newview/skins/default/xui/tr/menu_toolbars.xml
index 7cb3192ec4..c8523a6ec9 100644
--- a/indra/newview/skins/default/xui/tr/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/tr/menu_toolbars.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Toolbars Popup">
- <menu_item_call label="D羹meleri se癟..." name="Chose Buttons"/>
+ <menu_item_call label="Bu d羹meyi kald覺r" name="Remove button"/>
+ <menu_item_call label="Ara癟 癟ubuu d羹meleri..." name="Choose Buttons"/>
<menu_item_check label="Simgeler ve etiketler" name="icons_with_text"/>
<menu_item_check label="Sadece simgeler" name="icons_only"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 75294e38d5..ef10d639d7 100644
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -1,12 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu_bar name="Main Menu">
<menu label="Ben" name="Me">
- <menu_item_call label="Kontrol Paneli..." name="Manage My Account"/>
<menu_item_call label="Profil..." name="Profile"/>
<menu_item_call label="G繹r羹n羹m..." name="ChangeOutfit"/>
+ <menu_item_call label="Bir avatar se癟in..." name="Avatar Picker"/>
<menu_item_check label="Envanter..." name="Inventory"/>
- <menu_item_check label="Mimikler..." name="Gestures"/>
- <menu_item_check label="Ses..." name="ShowVoice"/>
+ <menu_item_call label="Yeni Envanter Penceresi" name="NewInventoryWindow"/>
+ <menu_item_call label="Yerler..." name="Places"/>
+ <menu_item_call label="Favoriler..." name="Picks"/>
+ <menu_item_call label="Kamera Denetimleri..." name="Camera Controls"/>
<menu label="Hareket" name="Movement">
<menu_item_call label="Otur" name="Sit Down Here"/>
<menu_item_check label="U癟" name="Fly"/>
@@ -20,34 +22,37 @@
<menu_item_call label="Y繹netici Durumu Talep Et" name="Request Admin Options"/>
<menu_item_call label="Y繹netici Durumundan Ayr覺l" name="Leave Admin Options"/>
<menu_item_call label="L$ Sat覺n Al" name="Buy and Sell L$"/>
+ <menu_item_call label="Hesap kontrol paneli..." name="Manage My Account"/>
<menu_item_call label="Tercihler..." name="Preferences"/>
- <menu_item_call label="Ara癟 癟ubuklar覺..." name="Toolbars"/>
+ <menu_item_call label="Ara癟 癟ubuu d羹meleri..." name="Toolbars"/>
<menu_item_call label="T羹m denetimleri sakla" name="Hide UI"/>
<menu_item_call label="[APP_NAME]&apos;den 覺k" name="Quit"/>
</menu>
<menu label="襤letiim Kur" name="Communicate">
- <menu_item_call label="Arkadalar覺m" name="My Friends"/>
- <menu_item_call label="Gruplar覺m" name="My Groups"/>
- <menu_item_check label="Yak覺ndaki Sohbet" name="Nearby Chat"/>
- <menu_item_call label="Yak覺ndaki Kiiler" name="Active Speakers"/>
- <menu_item_check label="Yak覺ndaki Ses" name="Nearby Voice"/>
+ <menu_item_check label="Sohbet..." name="Nearby Chat"/>
+ <menu_item_check label="Konu" name="Speak"/>
+ <menu_item_check label="Ses ayarlar覺..." name="Nearby Voice"/>
+ <menu_item_check label="Ses ekillendirme..." name="ShowVoice"/>
+ <menu_item_check label="Mimikler..." name="Gestures"/>
+ <menu_item_call label="Arkadalar" name="My Friends"/>
+ <menu_item_call label="Gruplar" name="My Groups"/>
+ <menu_item_call label="Yak覺ndaki kiiler" name="Active Speakers"/>
</menu>
<menu label="D羹nya" name="World">
+ <menu_item_call label="Bu Yeri Yer 襤mlerine Ekle" name="Create Landmark Here"/>
+ <menu_item_call label="Hedef Konumlar..." name="Destinations"/>
+ <menu_item_check label="D羹nya haritas覺" name="World Map"/>
<menu_item_check label="Mini-harita" name="Mini-Map"/>
- <menu_item_check label="D羹nya Haritas覺" name="World Map"/>
<menu_item_check label="Ara" name="Search"/>
+ <menu_item_call label="Ana konuma 覺覺nlan" name="Teleport Home"/>
+ <menu_item_call label="Ana konumu buras覺 olarak se癟" name="Set Home to Here"/>
<menu_item_call label="Anl覺k G繹r羹nt羹" name="Take Snapshot"/>
- <menu_item_call label="Bu Yeri Yer 襤mlerine Ekle" name="Create Landmark Here"/>
- <menu label="Profili Yerletir" name="Land">
- <menu_item_call label="Profili Yerletir" name="Place Profile"/>
- <menu_item_call label="Arazi Hakk覺nda" name="About Land"/>
- <menu_item_call label="B繹lge/Gayrimenkul" name="Region/Estate"/>
- </menu>
- <menu_item_call label="Bu Araziyi Sat覺n Al" name="Buy Land"/>
- <menu_item_call label="Arazim" name="My Land"/>
+ <menu_item_call label="Profili yerletir" name="Place Profile"/>
+ <menu_item_call label="Arazi hakk覺nda" name="About Land"/>
+ <menu_item_call label="B繹lge / Gayrimenkul" name="Region/Estate"/>
+ <menu_item_call label="Sahip olduum arazi par癟alar覺..." name="My Land"/>
+ <menu_item_call label="Bu araziyi sat覺n al" name="Buy Land"/>
<menu label="G繹ster" name="LandShow">
- <menu_item_check label="Denetimleri Hareket Ettir" name="Movement Controls"/>
- <menu_item_check label="Denetimleri G繹ster" name="Camera Controls"/>
<menu_item_check label="Yasaklama izgileri" name="Ban Lines"/>
<menu_item_check label="襤aretler" name="beacons"/>
<menu_item_check label="M羹lkiyet izgileri" name="Property Lines"/>
@@ -56,16 +61,15 @@
<menu_item_check label="Parsel zellikleri" name="Parcel Properties"/>
<menu_item_check label="Gelimi Men羹" name="Show Advanced Menu"/>
</menu>
- <menu_item_call label="Ana Konuma I覺nla" name="Teleport Home"/>
- <menu_item_call label="Ana Konumu Buras覺 Olarak Se癟" name="Set Home to Here"/>
<menu label="G羹ne" name="Environment Settings">
<menu_item_call label="G羹n Doumu" name="Sunrise"/>
<menu_item_call label="G羹n Ortas覺" name="Noon"/>
<menu_item_call label="G羹n Bat覺m覺" name="Sunset"/>
<menu_item_call label="Gece Yar覺s覺" name="Midnight"/>
+ <menu_item_call label="B繹lge Ayarlar覺n覺 Kullan覺n" name="Use Region Settings"/>
</menu>
- <menu label="Ortam D羹zenleyici" name="Enviroment Editor">
- <menu_item_call label="Ortam Ayarlar覺..." name="Enviroment Settings"/>
+ <menu label="Ortam D羹zenleyici" name="Environment Editor">
+ <menu_item_call label="Ortam Ayarlar覺..." name="Environment Settings"/>
<menu label="Su n Ayarlar覺" name="Water Presets">
<menu_item_call label="Yeni 繹n ayar..." name="new_water_preset"/>
<menu_item_call label="n ayar覺 d羹zenle..." name="edit_water_preset"/>
@@ -144,6 +148,7 @@
<menu_item_call label="Yinele" name="Redo"/>
</menu>
<menu label="Yard覺m" name="Help">
+ <menu_item_call label="Nas覺l yap覺l覺r..." name="How To"/>
<menu_item_call label="[SECOND_LIFE] Yard覺m覺" name="Second Life Help"/>
<menu_item_call label="K繹t羹ye Kullan覺m覺 Bildir" name="Report Abuse"/>
<menu_item_call label="Hata Bildir" name="Report Bug"/>
@@ -198,11 +203,10 @@
<menu_item_check label="襤 Par癟ac覺覺 Okuma Eklentisini Kullan" name="Use Plugin Read Thread"/>
<menu_item_call label="Grup n Belleini Temizle" name="ClearGroupCache"/>
<menu_item_check label="Fare D羹zletirme" name="Mouse Smoothing"/>
+ <menu_item_call label="B覺rakma Anahtarlar覺" name="Release Keys"/>
<menu label="K覺sa Yollar" name="Shortcuts">
<menu_item_call label="G繹r羹nt羹 (L$[COST])..." name="Upload Image"/>
<menu_item_check label="Ara" name="Search"/>
- <menu_item_call label="B覺rakma Anahtarlar覺" name="Release Keys"/>
- <menu_item_call label="KA B羹y羹kl羹羹n羹 Varsay覺lana Ayarla" name="Set UI Size to Default"/>
<menu_item_check label="Gelimi Men羹y羹 G繹ster - eski k覺sayol" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Pencereyi Kapat" name="Close Window"/>
<menu_item_call label="T羹m Pencereleri Kapat" name="Close All Windows"/>
@@ -288,6 +292,7 @@
<menu_item_check label="I覺klar" name="Lights"/>
<menu_item_check label="arp覺ma 襤skeleti" name="Collision Skeleton"/>
<menu_item_check label="I覺n Yay覺n覺" name="Raycast"/>
+ <menu_item_check label="R羹zgar Vekt繹rleri" name="Wind Vectors"/>
<menu_item_check label="襤leme Karma覺kl覺覺" name="rendercomplexity"/>
<menu_item_check label="ekillendir" name="Sculpt"/>
</menu>
@@ -300,7 +305,6 @@
<menu_item_check label="I覺kland覺rma ve G繹lgeler" name="Lighting and Shadows"/>
<menu_item_check label="G羹ne/Ay/Projekt繹rlerden Gelen G繹lgeler" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO ve G繹lge Yumuatma" name="SSAO and Shadow Smoothing"/>
- <menu_item_check label="K羹resel Ayd覺nlatma (Deneysel)" name="Global Illumination"/>
<menu_item_check label="GL Hata Ay覺klama" name="Debug GL"/>
<menu_item_check label="Ard覺覺k Hata Ay覺klama" name="Debug Pipeline"/>
<menu_item_check label="Otomatik Alfa Maskeleri (ertelenmi)" name="Automatic Alpha Masks (deferred)"/>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index c0dc67ed34..631634aa7d 100644
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -1110,8 +1110,13 @@ Arazinin sat覺 bedeli sahibine geri 繹denmez. Devredilen bir parsel sat覺l覺rs
<notification name="DisplaySetToSafe">
G羹venli se癟enei se癟tiiniz i癟in g繹r羹nt羹leme ayarlar覺 g羹venli d羹zeye ayarland覺.
</notification>
- <notification name="DisplaySetToRecommended">
- G繹r羹nt羹leme ayarlar覺 sistem yap覺land覺rman覺z i癟in 繹nerilen d羹zeye ayarland覺.
+ <notification name="DisplaySetToRecommendedGPUChange">
+ Grafik kart覺n覺z deitii i癟in g繹r羹nt羹 ayarlar覺 tavsiye edilen seviyelere ayarland覺
+繹nceki: &apos;[LAST_GPU]&apos;
+sonraki: &apos;[THIS_GPU]&apos;
+ </notification>
+ <notification name="DisplaySetToRecommendedFeatureChange">
+ 襤leme alt sistemindeki bir deiiklik nedeniyle g繹r羹nt羹 ayarlar覺 tavsiye edilen seviyelere ayarland覺.
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
@@ -1910,7 +1915,13 @@ Envanter 繹esi/繹eleri ta覺ns覺n m覺?
<usetemplate ignoretext="覺kmadan 繹nce dorulama iste" name="okcancelignore" notext="覺kma" yestext="覺k"/>
</notification>
<notification name="ConfirmRestoreToybox">
- Varsay覺lan d羹melerinizi ve ara癟 癟ubuklar覺n覺z覺 geri y羹klemek istediinize emin misiniz?
+ Bu eylem, varsay覺lan d羹melerinizi ve ara癟 癟ubuklar覺n覺z覺 geri y羹kleyecek.
+
+Bu eylemi geri alamazs覺n覺z.
+ <usetemplate name="okcancelbuttons" notext="襤ptal" yestext="Tamam"/>
+ </notification>
+ <notification name="ConfirmClearAllToybox">
+ Bu eylem ile t羹m d羹meler ara癟 kutusuna d繹ner ve ara癟 癟ubuklar覺n覺z bo olur.
Bu eylemi geri alamazs覺n覺z.
<usetemplate name="okcancelbuttons" notext="襤ptal" yestext="Tamam"/>
@@ -2119,10 +2130,10 @@ Bu ad覺mda web taray覺c覺n覺z覺n balat覺laca覺na dikkat edin.
Konu: [SUBJECT], 襤leti: [MESSAGE]
</notification>
<notification name="FriendOnline">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; evrimi癟i
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; 癟evrimi癟i
</notification>
<notification name="FriendOffline">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; evrimd覺覺
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; 癟evrimd覺覺
</notification>
<notification name="AddSelfFriend">
ok iyi biri olduunuza eminiz fakat kendinizi arkada olarak ekleyemezsiniz.
@@ -2236,14 +2247,16 @@ L羹tfen tek bir nesne se癟in.
Arama kart覺n覺z reddedildi.
</notification>
<notification name="TeleportToLandmark">
- Ekran覺n覺z覺n sa taraf覺ndaki Yerler panelini a癟覺p Yer 襤mleri sekmesini se癟erek &apos;[NAME]&apos; gibi konumlara 覺覺nlanabilirsiniz.
-Se癟mek i癟in herhangi bir yer iminin 羹zerini t覺klat覺n ve ard覺ndan panelin en alt覺ndaki &apos;I覺nla&apos; d羹mesini t覺klat覺n.
-(Yer iminin 羹zerini 癟ift t覺klatabilir veya sa t覺klay覺p &apos;I覺nla&apos;y覺 se癟ebilirsiniz.)
+ &apos;[NAME]&apos; gibi konumlara 覺覺nlanmak i癟in &quot;Yerler&quot; d羹mesine t覺klay覺n,
+ sonra a癟覺lan pencerede Yer 襤mleri sekmesini se癟in. Herhangi bir
+ yer iminin 羹zerine t覺klayarak bunu se癟in ve ard覺ndan pencerenin en alt覺ndaki &apos;I覺nla&apos; d羹mesine t覺klay覺n.
+ (Ayr覺ca yer imine 癟ift t覺klayabilir veya sa t覺klayarak
+ &apos;I覺nla&apos; se癟imini yapabilirsiniz.)
</notification>
<notification name="TeleportToPerson">
- Ekran覺n覺z覺n sa taraf覺ndaki 襤nsanlar panelini a癟arak &apos;[NAME]&apos; gibi Sakinler ile iletiim kurabilirsiniz.
-Sakini listeden se癟in ve panelin alt覺ndaki &apos;A襤&quot; d羹mesini t覺klat覺n.
-(Listede adlar覺n覺 癟ift t覺klatarak veya sa t覺klat覺p &quot;A襤&quot;yi se癟erek de bunu yapabilirsiniz.)
+ &apos;[NAME]&apos; gibi sakinlerle balant覺ya ge癟mek i癟in &quot;Kiiler&quot; d羹mesine t覺klay覺n, a癟覺lan pencereden bir Sakin se癟in ve sonra
+ pencerenin alt覺nda &apos;Anl覺k 襤leti&quot; 羹zerine t覺klay覺n.
+ (Listede adlar覺na 癟ift t覺klayarak veya sa t覺klay覺p &quot;Anl覺k 襤leti&quot;yi se癟erek de bunu yapabilirsiniz.)
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Sunucunun s覺n覺rlar覺 d覺覺ndaki arazi se癟ilemez.
@@ -2264,6 +2277,9 @@ Daha k羹癟羹k bir arazi par癟as覺 se癟meyi deneyin.
<notification name="PaymentSent">
[MESSAGE]
</notification>
+ <notification name="PaymentFailure">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
Etkinlik Bildirimi
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_skin.xml b/indra/newview/skins/default/xui/tr/panel_edit_skin.xml
index 33fb787e08..fdf75100ed 100644
--- a/indra/newview/skins/default/xui/tr/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/tr/panel_edit_skin.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="Ba D繹vmeleri" name="Head Tattoos" tool_tip="Bir resim se癟mek i癟in t覺klay覺n"/>
- <texture_picker label="st G繹vde D繹vmeleri" name="Upper Tattoos" tool_tip="Bir resim se癟mek i癟in t覺klay覺n"/>
- <texture_picker label="Alt G繹vde D繹vmeleri" name="Lower Tattoos" tool_tip="Bir resim se癟mek i癟in t覺klay覺n"/>
+ <texture_picker label="Ba" name="Head" tool_tip="Bir resim se癟mek i癟in t覺klay覺n"/>
+ <texture_picker label="st g繹vde" name="Upper Body" tool_tip="Bir resim se癟mek i癟in t覺klay覺n"/>
+ <texture_picker label="Alt g繹vde" name="Lower Body" tool_tip="Bir resim se癟mek i癟in t覺klay覺n"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/tr/panel_postcard_message.xml b/indra/newview/skins/default/xui/tr/panel_postcard_message.xml
new file mode 100644
index 0000000000..2361f4c1c3
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_postcard_message.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_message">
+ <text name="to_label">
+ Kime:
+ </text>
+ <text name="name_label">
+ Kimden:
+ </text>
+ <text name="subject_label">
+ Konu:
+ </text>
+ <line_editor label="Konunuzu buraya yaz覺n." name="subject_form"/>
+ <text name="msg_label">
+ 襤leti:
+ </text>
+ <text_editor name="msg_form">
+ 襤letinizi buraya yaz覺n.
+ </text_editor>
+ <button label="襤ptal" name="cancel_btn"/>
+ <button label="G繹nder" name="send_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml b/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml
new file mode 100644
index 0000000000..bce0b21b9a
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_postcard_settings">
+ <combo_box label="繹z羹n羹rl羹k" name="postcard_size_combo">
+ <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="zel" name="Custom"/>
+ </combo_box>
+ <layout_stack name="postcard_image_params_ls">
+ <layout_panel name="postcard_image_size_lp">
+ <spinner label="Genilik" name="postcard_snapshot_width"/>
+ <spinner label="Y羹kseklik" name="postcard_snapshot_height"/>
+ <check_box label="Oranlar覺 koru" name="postcard_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="postcard_image_format_quality_lp">
+ <slider label="G繹r羹nt羹 kalitesi" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
index f7f0698a31..9caf95a122 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
@@ -29,29 +29,5 @@
<check_box label="A襤 Sohbetleri" name="EnableIMChatPopups" tool_tip="Bir anl覺k ileti geldiinde a癟覺l覺r pencereleri g繹rmek i癟in iaretle"/>
<spinner label="Yak覺ndaki sohbet iletilerinin vurgulanma s羹resi:" name="nearby_toasts_lifetime"/>
<spinner label="Yak覺ndaki sohbet iletilerinin s繹nme s羹resi:" name="nearby_toasts_fadingtime"/>
- <text name="translate_chb_label">
- Sohbet ederken makine 癟evirisi kullan覺ls覺n
- </text>
- <text name="translate_language_text">
- Sohbeti u dile 癟evir:
- </text>
- <combo_box name="translate_language_combobox">
- <combo_box.item label="Sistem Varsay覺lan覺" name="System Default Language"/>
- <combo_box.item label="襤ngilizce" name="English"/>
- <combo_box.item label="Dansk (Danca)" name="Danish"/>
- <combo_box.item label="Deutsch (Almanca)" name="German"/>
- <combo_box.item label="Espa簽ol (襤spanyolca)" name="Spanish"/>
- <combo_box.item label="Fran癟ais (Frans覺zca)" name="French"/>
- <combo_box.item label="Italiano (襤talyanca)" name="Italian"/>
- <combo_box.item label="Magyar (Macarca)" name="Hungarian"/>
- <combo_box.item label="Nederlands (Flemenk癟e)" name="Dutch"/>
- <combo_box.item label="Polski (Leh癟e)" name="Polish"/>
- <combo_box.item label="Portugu礙s (Portekizce)" name="Portugese"/>
- <combo_box.item label="郕邽邿 (Rus癟a)" name="Russian"/>
- <combo_box.item label="T羹rk癟e (T羹rk癟e)" name="Turkish"/>
- <combo_box.item label="苺郕訄郇郕訄 (Ukraynaca)" name="Ukrainian"/>
- <combo_box.item label="銝剜 (甇擃) (ince)" name="Chinese"/>
- <combo_box.item label="交祈 (Japonca)" name="Japanese"/>
- <combo_box.item label="窱原 (Korece)" name="Korean"/>
- </combo_box>
+ <button label="Sohbet evirisi Ayarlar覺" name="ok_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml
index 12c175b8f5..9d03d9b01d 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml
@@ -15,7 +15,7 @@
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Taray覺c覺m覺 kullan (IE, Firefox, Safari)" name="external" tool_tip="Yard覺m, web balant覺lar覺 vs. i癟in sistemin varsay覺lan web taray覺c覺s覺n覺 kullan覺n. Tam ekran 癟al覺t覺r覺l覺yorsa tavsiye edilmez." value="1"/>
+ <radio_item label="Taray覺c覺m覺 kullan (IE, Firefox, Safari)" name="external" tool_tip="Yard覺m, web balant覺lar覺 vs. i癟in sistemin varsay覺lan web taray覺c覺s覺n覺 kullan覺n. Tam ekran 癟al覺t覺r覺l覺yorsa tavsiye edilmez." value="true"/>
<radio_item label="Yerleik taray覺c覺y覺 kullan" name="internal" tool_tip="Yard覺m, web balant覺lar覺 vs. i癟in dahili web taray覺c覺s覺n覺 kullan覺n. Bu taray覺c覺 [APP_NAME] i癟erisinde yeni bir pencere olarak a癟覺l覺r." value=""/>
</radio_group>
<check_box initial_value="true" label="Eklentileri etkinletir" name="browser_plugins_enabled"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml
new file mode 100644
index 0000000000..e3b22c639a
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_inventory">
+ <text name="title">
+ Envanterime Kaydet
+ </text>
+ <text name="hint_lbl">
+ Bir g繹r羹nt羹y羹 envanterinize kaydetmenin maliyeti L$[UPLOAD_COST] olur. G繹r羹nt羹n羹z羹 bir doku olarak kaydetmek i癟in kare formatlardan birini se癟in.
+ </text>
+ <combo_box label="繹z羹n羹rl羹k" name="texture_size_combo">
+ <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
+ <combo_box.item label="K羹癟羹k (128x128)" name="Small(128x128)"/>
+ <combo_box.item label="Orta (256x256)" name="Medium(256x256)"/>
+ <combo_box.item label="B羹y羹k (512x512)" name="Large(512x512)"/>
+ <combo_box.item label="zel" name="Custom"/>
+ </combo_box>
+ <spinner label="Genilik" name="inventory_snapshot_width"/>
+ <spinner label="Y羹kseklik" name="inventory_snapshot_height"/>
+ <check_box label="Oranlar覺 koru" name="inventory_keep_aspect_check"/>
+ <button label="襤ptal" name="cancel_btn"/>
+ <button label="Kaydet" name="save_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml
new file mode 100644
index 0000000000..87d7677d73
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_local">
+ <text name="title">
+ Bilgisayar覺ma Kaydet
+ </text>
+ <combo_box label="繹z羹n羹rl羹k" name="local_size_combo">
+ <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
+ <combo_box.item label="320x240" name="320x240"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1280x1024" name="1280x1024"/>
+ <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="zel" name="Custom"/>
+ </combo_box>
+ <layout_stack name="local_image_params_ls">
+ <layout_panel name="local_image_size_lp">
+ <spinner label="Genilik" name="local_snapshot_width"/>
+ <spinner label="Y羹kseklik" name="local_snapshot_height"/>
+ <check_box label="Oranlar覺 koru" name="local_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="local_image_format_quality_lp">
+ <combo_box label="Format" name="local_format_combo">
+ <combo_box.item label="PNG (Kay覺ps覺z)" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP (Kay覺ps覺z)" name="BMP"/>
+ </combo_box>
+ <slider label="G繹r羹nt羹 kalitesi" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
+ </layout_panel>
+ </layout_stack>
+ <button label="襤ptal" name="cancel_btn"/>
+ <flyout_button label="Kaydet" name="save_btn" tool_tip="G繹r羹nt羹y羹 bir dosyaya kaydet">
+ <flyout_button.item label="Kaydet" name="save_item"/>
+ <flyout_button.item label="Farkl覺 Kaydet..." name="saveas_item"/>
+ </flyout_button>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml
new file mode 100644
index 0000000000..fd2e85fce5
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_options">
+ <button label="Profil Ak覺覺mda Yay覺nla" name="save_to_profile_btn"/>
+ <button label="E-posta" name="save_to_email_btn"/>
+ <button label="Envanterime Kaydet (L$[AMOUNT])" name="save_to_inventory_btn"/>
+ <button label="Bilgisayar覺ma Kaydet" name="save_to_computer_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml
new file mode 100644
index 0000000000..e999678a0d
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_postcard">
+ <string name="default_subject">
+ SECOND_LIFE]&apos;dan posta kart覺.
+ </string>
+ <string name="default_message">
+ Buna bak覺n!
+ </string>
+ <string name="upload_message">
+ G繹nderiyor...
+ </string>
+ <text name="title">
+ E-posta
+ </text>
+ <button label="襤leti" name="message_btn"/>
+ <button label="Ayarlar" name="settings_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml
new file mode 100644
index 0000000000..334fd52a48
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_snapshot_profile">
+ <text name="title">
+ Profil Ak覺覺mda Yay覺nla
+ </text>
+ <combo_box label="繹z羹n羹rl羹k" name="profile_size_combo">
+ <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="zel" name="Custom"/>
+ </combo_box>
+ <layout_stack name="profile_image_params_ls">
+ <layout_panel name="profile_image_size_lp">
+ <spinner label="Genilik" name="profile_snapshot_width"/>
+ <spinner label="Y羹kseklik" name="profile_snapshot_height"/>
+ <check_box label="Oranlar覺 koru" name="profile_keep_aspect_check"/>
+ </layout_panel>
+ <layout_panel name="profile_image_metadata_lp">
+ <text name="caption_label">
+ Resim yaz覺s覺:
+ </text>
+ <check_box initial_value="true" label="Konumu dahil et" name="add_location_cb"/>
+ </layout_panel>
+ </layout_stack>
+ <button label="襤ptal" name="cancel_btn"/>
+ <button label="Yay覺nla" name="post_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index bf331dc3cf..0dbc9b0a0e 100644
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -1211,7 +1211,7 @@ L羹tfen bir dakika i癟erisinde tekrar oturum a癟may覺 deneyin.
Envanterinizde bu dokunun kopyas覺 yok
</string>
<string name="InventoryInboxNoItems">
- Pazaryeri 羹zerinden sat覺n al覺nan 繹eler buraya teslim edilir.
+ Bir 繹eyi sat覺n ald覺覺n覺zda veya baka bir ekilde edindiinizde burada g繹r羹n羹r; bunu envanterinizdeki bir klas繹re s羹r羹kleyebilir veya tutmak istemiyorsan覺z silebilirsiniz.
</string>
<string name="MarketplaceURL">
http://marketplace.[DOMAIN_NAME]
@@ -1409,6 +1409,9 @@ L羹tfen bir dakika i癟erisinde tekrar oturum a癟may覺 deneyin.
<string name="no_attachments">
Giyilen aksesuar yok
</string>
+ <string name="Attachments remain">
+ Aksesuarlar ([COUNT] yuva mevcut)
+ </string>
<string name="Buy">
Sat覺n Al
</string>
@@ -1535,6 +1538,12 @@ L羹tfen bir dakika i癟erisinde tekrar oturum a癟may覺 deneyin.
<string name="Right Pec">
Sa G繹羹s
</string>
+ <string name="Neck">
+ Boyun
+ </string>
+ <string name="Avatar Center">
+ Avatar Merkezi
+ </string>
<string name="Invalid Attachment">
Ge癟ersiz Aksesuar Noktas覺
</string>
@@ -4027,6 +4036,18 @@ Bu iletiyi almaya devam ederseniz, l羹tfen [SUPPORT_SITE] b繹l羹m羹ne bavurun.
<string name="you_paid_ldollars_no_name">
[REASON] L$[AMOUNT] 繹dediniz.
</string>
+ <string name="you_paid_failure_ldollars">
+ [REASON] [NAME]&apos;e L$[AMOUNT] 繹deyemediniz.
+ </string>
+ <string name="you_paid_failure_ldollars_no_info">
+ L$[AMOUNT] 繹deyemediniz.
+ </string>
+ <string name="you_paid_failure_ldollars_no_reason">
+ [NAME]&apos;e L$[AMOUNT] 繹deyemediniz.
+ </string>
+ <string name="you_paid_failure_ldollars_no_name">
+ [REASON] L$[AMOUNT] 繹deyemediniz.
+ </string>
<string name="for item">
[ITEM] i癟in.
</string>
@@ -4437,6 +4458,12 @@ D羹zenleyici yolunu 癟ift t覺rnakla 癟evrelemeyi deneyin.
<string name="ExternalEditorFailedToRun">
Harici d羹zenleyici 癟al覺mad覺.
</string>
+ <string name="TranslationFailed">
+ eviri baar覺lamad覺: [REASON]
+ </string>
+ <string name="TranslationResponseParseError">
+ eviri yan覺t覺 ayr覺t覺r覺l覺rken hata meydana geldi.
+ </string>
<string name="Esc">
Esc
</string>
@@ -4819,7 +4846,7 @@ D羹zenleyici yolunu 癟ift t覺rnakla 癟evrelemeyi deneyin.
Mini-harita
</string>
<string name="Command_Move_Label">
- Hareket Et
+ Y羹r羹 / ko / u癟
</string>
<string name="Command_People_Label">
Kiiler
@@ -4846,10 +4873,10 @@ D羹zenleyici yolunu 癟ift t覺rnakla 癟evrelemeyi deneyin.
Konu
</string>
<string name="Command_View_Label">
- G繹r羹n羹m
+ Kamera denetimleri
</string>
<string name="Command_Voice_Label">
- Yak覺ndaki ses
+ Ses ayarlar覺
</string>
<string name="Command_AboutLand_Tooltip">
Ziyaret ettiiniz araziyle ilgili bilgi
@@ -4921,7 +4948,16 @@ D羹zenleyici yolunu 癟ift t覺rnakla 癟evrelemeyi deneyin.
Kamera a癟覺s覺n覺 deitirmek
</string>
<string name="Command_Voice_Tooltip">
- Ses imkan覺na sahip yak覺ndaki kiiler
+ Aramalar ve SL d羹nyas覺 i癟inde size yak覺n kiiler i癟in ses denetimleri
+ </string>
+ <string name="Toolbar_Bottom_Tooltip">
+ u anda alt ara癟 癟ubuunuzda
+ </string>
+ <string name="Toolbar_Left_Tooltip">
+ u anda sol ara癟 癟ubuunuzda
+ </string>
+ <string name="Toolbar_Right_Tooltip">
+ u anda sa ara癟 癟ubuunuzda
</string>
<string name="Retain%">
Koru %
@@ -4947,4 +4983,19 @@ D羹zenleyici yolunu 癟ift t覺rnakla 癟evrelemeyi deneyin.
<string name="Normal">
Normal
</string>
+ <string name="snapshot_quality_very_low">
+ ok D羹羹k
+ </string>
+ <string name="snapshot_quality_low">
+ D羹羹k
+ </string>
+ <string name="snapshot_quality_medium">
+ Orta
+ </string>
+ <string name="snapshot_quality_high">
+ Y羹ksek
+ </string>
+ <string name="snapshot_quality_very_high">
+ ok Y羹ksek
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/tr/teleport_strings.xml b/indra/newview/skins/default/xui/tr/teleport_strings.xml
index c506bb8a58..62aaaf671f 100644
--- a/indra/newview/skins/default/xui/tr/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/tr/teleport_strings.xml
@@ -21,8 +21,8 @@ Hala 覺覺nlanam覺yorsan覺z, sorunu 癟繹zmek i癟in l羹tfen 癟覺k覺 yap覺p otu
Bir dakika sonra tekrar deneyin.
</message>
<message name="NoHelpIslandTP">
-You cannot teleport back to Welcome Island.
-Go to &apos;Welcome Island Public&apos; to repeat the tutorial.
+ Kar覺lama Ada&apos;s覺na geri 覺覺nlanamazs覺n覺z.
+reticiyi tekrarlamak i癟in &apos;Kar覺lama Ada&apos;s覺 Kamusal Alan覺&apos;na gidin.
</message>
<message name="noaccess_tport">
zg羹n羹z, bu 覺覺nlanma hedef konumuna eriim hakk覺na sahip deilsiniz.
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index f7be781cac..b6bb79bcbc 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -20,8 +20,6 @@
<menu_item_call label="a" name="Set Away"/>
<menu_item_call label="敹蝣" name="Set Busy"/>
</menu>
- <menu_item_call label="閬瘙 Admin " name="Request Admin Options"/>
- <menu_item_call label="a Admin " name="Leave Admin Options"/>
<menu_item_call label="蝯 [APP_NAME]" name="Quit"/>
</menu>
<menu label="皞" name="Communicate">
@@ -36,11 +34,10 @@
<menu_item_check label="撠" name="Search"/>
<menu_item_call label="敹怎" name="Take Snapshot"/>
<menu_item_call label="撠甇方閮銝唳" name="Create Landmark Here"/>
- <menu label="圈瑼獢" name="Land">
- <menu_item_call label="圈瑼獢" name="Place Profile"/>
- <menu_item_call label="澆" name="About Land"/>
- <menu_item_call label="啣 / " name="Region/Estate"/>
- </menu>
+ <menu_item_separator/>
+ <menu_item_call label="圈瑼獢" name="Place Profile"/>
+ <menu_item_call label="澆" name="About Land"/>
+ <menu_item_call label="啣 / " name="Region/Estate"/>
<menu_item_call label="鞈潸眺憛" name="Buy Land"/>
<menu_item_call label="" name="My Land"/>
<menu label="憿舐內" name="LandShow">
@@ -56,7 +53,7 @@
</menu>
<menu_item_call label="祇祇喲摰" name="Teleport Home"/>
<menu_item_call label="閮剖摰嗅冽迨" name="Set Home to Here"/>
- <menu label="憭芷" name="Environment Settings">
+ <menu label="憭芷" name="Sun">
<menu_item_call label="亙" name="Sunrise"/>
<menu_item_call label="銝剖" name="Noon"/>
<menu_item_call label="亥" name="Sunset"/>
@@ -154,22 +151,22 @@
<menu_item_check label="憿舐內蝚砌鈭箇迂閬閫皞" name="ShowCrosshairs"/>
</menu>
<menu label="Rendering Types" name="Rendering Types">
- <menu_item_check label="蝪∪" name="Simple"/>
- <menu_item_check label="" name="Alpha"/>
- <menu_item_check label="璅寞" name="Tree"/>
- <menu_item_check label="頨" name="Character"/>
- <menu_item_check label="啗”" name="SurfacePath"/>
- <menu_item_check label="憭拍征" name="Sky"/>
- <menu_item_check label="瘞湔" name="Water"/>
- <menu_item_check label="圈" name="Ground"/>
- <menu_item_check label="擃蝛" name="Volume"/>
- <menu_item_check label="" name="Grass"/>
- <menu_item_check label="脣蔗" name="Clouds"/>
- <menu_item_check label="蝎摮" name="Particles"/>
- <menu_item_check label="蝣唳" name="Bump"/>
+ <menu_item_check label="蝪∪" name="Rendering Type Simple"/>
+ <menu_item_check label="" name="Rendering Type Alpha"/>
+ <menu_item_check label="璅寞" name="Rendering Type Tree"/>
+ <menu_item_check label="頨" name="Rendering Type Character"/>
+ <menu_item_check label="啗”" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="憭拍征" name="Rendering Type Sky"/>
+ <menu_item_check label="瘞湔" name="Rendering Type Water"/>
+ <menu_item_check label="圈" name="Rendering Type Ground"/>
+ <menu_item_check label="擃蝛" name="Rendering Type Volume"/>
+ <menu_item_check label="" name="Rendering Type Grass"/>
+ <menu_item_check label="脣蔗" name="Rendering Type Clouds"/>
+ <menu_item_check label="蝎摮" name="Rendering Type Particles"/>
+ <menu_item_check label="蝣唳" name="Rendering Type Bump"/>
</menu>
<menu label="Rendering Features" name="Rendering Features">
- <menu_item_check label="UI" name="UI"/>
+ <menu_item_check label="UI" name="ToggleUI"/>
<menu_item_check label="Selected" name="Selected"/>
<menu_item_check label="Highlighted" name="Highlighted"/>
<menu_item_check label="Dynamic Textures" name="Dynamic Textures"/>
@@ -182,10 +179,7 @@
<menu_item_call label="皜斤黎蝯敹怠鞈" name="ClearGroupCache"/>
<menu_item_check label="皛曌撟單蝘餃" name="Mouse Smoothing"/>
<menu label="敹恍" name="Shortcuts">
- <menu_item_call label="嚗L$[COST]嚗..." name="Upload Image"/>
- <menu_item_check label="撠" name="Search"/>
<menu_item_call label="箸" name="Release Keys"/>
- <menu_item_call label="閮剖雿輻刻W之撠喲閮剖" name="Set UI Size to Default"/>
<menu_item_check label="憿舐內脤詨 嚗 瑕" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="閬蝒" name="Close Window"/>
<menu_item_call label="券刻蝒" name="Close All Windows"/>
@@ -194,13 +188,6 @@
<menu_item_check label="Joystick Flycam" name="Joystick Flycam"/>
<menu_item_call label="閮剛閫" name="Reset View"/>
<menu_item_call label="瘜刻銝銝雿憭抵" name="Look at Last Chatter"/>
- <menu label="豢撱粹撌亙" name="Select Tool">
- <menu_item_call label="血極" name="Focus"/>
- <menu_item_call label="蝘餃撌亙" name="Move"/>
- <menu_item_call label="蝺刻摩撌亙" name="Edit"/>
- <menu_item_call label="菟撌亙" name="Create"/>
- <menu_item_call label="啣極" name="Land"/>
- </menu>
<menu_item_call label="Zoom In" name="Zoom In"/>
<menu_item_call label="Zoom Default" name="Zoom Default"/>
<menu_item_call label="Zoom Out" name="Zoom Out"/>
@@ -306,9 +293,8 @@
<menu_item_call label="憪鋆" name="Start Record"/>
<menu_item_call label="甇a鋆" name="Stop Record"/>
</menu>
- <menu label="銝" name="World">
+ <menu label="銝" name="DevelopWorld">
<menu_item_check label="璅⊥砍典云質身摰閬" name="Sim Sun Override"/>
- <menu_item_check label="Cheesy Beacon" name="Cheesy Beacon"/>
<menu_item_check label="箏憭拇除" name="Fixed Weather"/>
<menu_item_call label="曉啣啣拐辣敹怠" name="Dump Region Object Cache"/>
</menu>
@@ -340,11 +326,11 @@
</menu>
<menu label="頨" name="Character">
<menu label="Grab Baked Texture" name="Grab Baked Texture">
- <menu_item_call label="Iris" name="Iris"/>
- <menu_item_call label="剝" name="Head"/>
- <menu_item_call label="Upper Body" name="Upper Body"/>
- <menu_item_call label="Lower Body" name="Lower Body"/>
- <menu_item_call label="鋆摮" name="Skirt"/>
+ <menu_item_call label="Iris" name="Grab Iris"/>
+ <menu_item_call label="剝" name="Grab Head"/>
+ <menu_item_call label="Upper Body" name="Grab Upper Body"/>
+ <menu_item_call label="Lower Body" name="Grab Lower Body"/>
+ <menu_item_call label="鋆摮" name="Grab Skirt"/>
</menu>
<menu label="Character Tests" name="Character Tests">
<menu_item_call label="Appearance To XML" name="Appearance To XML"/>
@@ -378,8 +364,8 @@
<menu_item_check label="Show Admin Menu" name="View Admin Options"/>
</menu>
<menu label="Admin" name="Admin">
- <menu label="Object">
- <menu_item_call label="敺舀" name="Take Copy"/>
+ <menu label="Object" name="AdminObject">
+ <menu_item_call label="敺舀" name="Admin Take Copy"/>
<menu_item_call label="撘瑕嗆箸" name="Force Owner To Me"/>
<menu_item_call label="Force Owner Permissive" name="Force Owner Permissive"/>
<menu_item_call label="芷" name="Delete"/>
@@ -415,7 +401,7 @@
<menu_item_call label="頨恍拍" name="Physics"/>
<menu_item_call label="券刻﹝" name="All Clothes"/>
</menu>
- <menu label="撟怠" name="Help">
+ <menu label="撟怠" name="DeprecatedHelp">
<menu_item_call label="餃寥刻賣" name="Official Linden Blog"/>
<menu_item_call label="Scripting Portal" name="Scripting Portal"/>
<menu label="剛脣" name="Bug Reporting">
diff --git a/indra/viewer_components/updater/llupdatedownloader.cpp b/indra/viewer_components/updater/llupdatedownloader.cpp
index e88d1bf811..19ac418e9e 100644
--- a/indra/viewer_components/updater/llupdatedownloader.cpp
+++ b/indra/viewer_components/updater/llupdatedownloader.cpp
@@ -39,7 +39,7 @@
#include "llsdserialize.h"
#include "llthread.h"
#include "llupdaterservice.h"
-
+#include "llcurl.h"
class LLUpdateDownloader::Implementation:
public LLThread
@@ -198,13 +198,19 @@ LLUpdateDownloader::Implementation::Implementation(LLUpdateDownloader::Client &
LLUpdateDownloader::Implementation::~Implementation()
{
- if(isDownloading()) {
+ if(isDownloading())
+ {
cancel();
shutdown();
- } else {
+ }
+ else
+ {
; // No op.
}
- if(mCurl) curl_easy_cleanup(mCurl);
+ if(mCurl)
+ {
+ LLCurl::deleteEasyHandle(mCurl);
+ }
}
@@ -406,9 +412,12 @@ void LLUpdateDownloader::Implementation::run(void)
void LLUpdateDownloader::Implementation::initializeCurlGet(std::string const & url, bool processHeader)
{
- if(mCurl == 0) {
- mCurl = curl_easy_init();
- } else {
+ if(mCurl == 0)
+ {
+ mCurl = LLCurl::newEasyHandle();
+ }
+ else
+ {
curl_easy_reset(mCurl);
}