summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.hgignore1
-rw-r--r--.hgtags17
-rw-r--r--BuildParams14
-rw-r--r--autobuild.xml12
-rwxr-xr-xbuild.sh18
-rw-r--r--doc/contributions.txt9
-rw-r--r--indra/cmake/JsonCpp.cmake2
-rw-r--r--indra/cmake/Linking.cmake11
-rw-r--r--indra/cmake/VisualLeakDetector.cmake15
-rw-r--r--indra/cmake/WebKitLibPlugin.cmake7
-rw-r--r--indra/edit-me-to-trigger-new-build.txt0
-rw-r--r--indra/llcharacter/llcharacter.h2
-rw-r--r--indra/llcommon/llversionviewer.h2
-rw-r--r--indra/llimage/llimagepng.cpp12
-rw-r--r--indra/llmath/llcoord.h23
-rw-r--r--indra/llmessage/tests/testrunner.py2
-rw-r--r--indra/llrender/llgl.cpp70
-rw-r--r--indra/llrender/llgl.h2
-rw-r--r--indra/llrender/llglheaders.h3
-rw-r--r--indra/llrender/llglslshader.cpp12
-rw-r--r--indra/llrender/llshadermgr.cpp120
-rw-r--r--indra/llrender/llshadermgr.h2
-rw-r--r--indra/llrender/llvertexbuffer.cpp50
-rw-r--r--indra/llui/llclipboard.cpp136
-rw-r--r--indra/llui/llclipboard.h72
-rw-r--r--indra/llui/llfloater.cpp274
-rw-r--r--indra/llui/llfloater.h32
-rw-r--r--indra/llui/llfloaterreg.cpp41
-rw-r--r--indra/llui/llfloaterreg.h4
-rw-r--r--indra/llui/lllayoutstack.cpp73
-rw-r--r--indra/llui/lllayoutstack.h2
-rw-r--r--indra/llui/lllineeditor.cpp19
-rw-r--r--indra/llui/llscrollcontainer.cpp15
-rw-r--r--indra/llui/llscrollcontainer.h6
-rw-r--r--indra/llui/llscrolllistctrl.cpp2
-rw-r--r--indra/llui/lltexteditor.cpp20
-rw-r--r--indra/llui/llview.cpp225
-rw-r--r--indra/llui/llview.h2
-rw-r--r--indra/llwindow/llwindow.cpp23
-rw-r--r--indra/llwindow/llwindow.h2
-rw-r--r--indra/llwindow/llwindowheadless.h1
-rw-r--r--indra/llwindow/llwindowmacosx.cpp25
-rw-r--r--indra/llwindow/llwindowmacosx.h1
-rw-r--r--indra/llwindow/llwindowsdl.cpp19
-rw-r--r--indra/llwindow/llwindowsdl.h1
-rw-r--r--indra/llwindow/llwindowwin32.cpp49
-rw-r--r--indra/llwindow/llwindowwin32.h1
-rw-r--r--indra/lscript/lscript_byteformat.h2
-rw-r--r--indra/lscript/lscript_compile/indra.l3
-rw-r--r--indra/newview/CMakeLists.txt7
-rw-r--r--indra/newview/app_settings/keywords.ini1
-rw-r--r--indra/newview/app_settings/settings.xml76
-rw-r--r--indra/newview/app_settings/settings_per_account.xml22
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl4
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl3
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl5
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl148
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl4
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cofF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl27
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/giF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl (renamed from indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl)8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/skyF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/skyV.glsl5
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/starsF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightNoFragCoordV.glsl (renamed from indra/newview/app_settings/shaders/class1/deferred/giV.glsl)15
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl17
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/treeF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/waterF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/terrainF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/waterF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/debugF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/highlightF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/onetexturenocolorF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/splattexturerectF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/uiF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/bumpF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/impostorF.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl4
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl58
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl61
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl58
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl66
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl68
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/skyF.glsl8
-rw-r--r--indra/newview/llappviewerwin32.cpp12
-rw-r--r--indra/newview/llassetuploadqueue.cpp4
-rwxr-xr-xindra/newview/llavataractions.cpp5
-rw-r--r--indra/newview/llcompilequeue.cpp16
-rw-r--r--indra/newview/lldrawpoolavatar.cpp2
-rw-r--r--indra/newview/lldynamictexture.cpp28
-rw-r--r--indra/newview/llface.cpp12
-rw-r--r--indra/newview/llfavoritesbar.cpp12
-rw-r--r--indra/newview/llfloaterbuycontents.cpp4
-rw-r--r--indra/newview/llfloatergesture.cpp27
-rw-r--r--indra/newview/llfloatergodtools.cpp6
-rw-r--r--indra/newview/llfloaterland.cpp14
-rw-r--r--indra/newview/llfloaterregioninfo.cpp30
-rw-r--r--indra/newview/llfloaterregioninfo.h3
-rw-r--r--indra/newview/llfloaterreporter.cpp6
-rw-r--r--indra/newview/llfloatersellland.cpp6
-rw-r--r--indra/newview/llfloatervoiceeffect.cpp4
-rw-r--r--indra/newview/llfloaterwebcontent.cpp4
-rw-r--r--indra/newview/llfolderview.cpp124
-rw-r--r--indra/newview/llfolderview.h59
-rw-r--r--indra/newview/llfoldervieweventlistener.h2
-rw-r--r--indra/newview/llfolderviewitem.cpp45
-rw-r--r--indra/newview/llfolderviewitem.h3
-rw-r--r--indra/newview/llinventorybridge.cpp388
-rw-r--r--indra/newview/llinventorybridge.h6
-rw-r--r--indra/newview/llinventoryfilter.cpp89
-rw-r--r--indra/newview/llinventoryfilter.h2
-rw-r--r--indra/newview/llinventoryfunctions.cpp152
-rw-r--r--indra/newview/llinventoryfunctions.h14
-rw-r--r--indra/newview/llinventorymodel.cpp259
-rw-r--r--indra/newview/llinventorymodel.h17
-rw-r--r--indra/newview/llinventorypanel.cpp15
-rw-r--r--indra/newview/llinventorypanel.h1
-rw-r--r--indra/newview/lllocalbitmaps.cpp942
-rw-r--r--indra/newview/lllocalbitmaps.h136
-rwxr-xr-xindra/newview/llmeshrepository.cpp288
-rw-r--r--indra/newview/lloutfitslist.cpp2
-rw-r--r--indra/newview/llpanelgroupinvite.cpp12
-rw-r--r--indra/newview/llpanellandmarks.cpp5
-rw-r--r--indra/newview/llpanelmaininventory.cpp4
-rw-r--r--indra/newview/llpanelobjectinventory.cpp7
-rw-r--r--indra/newview/llpanelteleporthistory.cpp2
-rw-r--r--indra/newview/llpaneltopinfobar.cpp2
-rw-r--r--indra/newview/llpanelwearing.cpp2
-rw-r--r--indra/newview/llpreviewnotecard.cpp3
-rw-r--r--indra/newview/llsidepanelinventory.cpp26
-rw-r--r--indra/newview/lltexturectrl.cpp172
-rw-r--r--indra/newview/lltexturectrl.h2
-rw-r--r--indra/newview/lltoastnotifypanel.cpp6
-rw-r--r--indra/newview/lltoolbarview.cpp14
-rw-r--r--indra/newview/lltoolbarview.h3
-rw-r--r--indra/newview/lltooldraganddrop.cpp3
-rw-r--r--indra/newview/llurllineeditorctrl.cpp2
-rw-r--r--indra/newview/llviewercontrol.cpp16
-rw-r--r--indra/newview/llviewermenu.cpp54
-rw-r--r--indra/newview/llviewermenufile.cpp5
-rwxr-xr-xindra/newview/llviewermessage.cpp12
-rw-r--r--indra/newview/llviewerobject.cpp16
-rw-r--r--indra/newview/llviewershadermgr.cpp39
-rw-r--r--indra/newview/llviewertexturelist.h1
-rwxr-xr-xindra/newview/llviewerwindow.cpp24
-rw-r--r--indra/newview/llvoavatar.cpp36
-rw-r--r--indra/newview/llvoavatar.h4
-rw-r--r--indra/newview/llvovolume.cpp6
-rw-r--r--indra/newview/llvowater.cpp10
-rw-r--r--indra/newview/llwearable.cpp14
-rw-r--r--indra/newview/llwearable.h1
-rw-r--r--indra/newview/llworld.cpp32
-rw-r--r--indra/newview/llworld.h5
-rw-r--r--indra/newview/pipeline.cpp114
-rw-r--r--indra/newview/pipeline.h2
-rw-r--r--indra/newview/skins/default/xui/de/floater_about_land.xml10
-rw-r--r--indra/newview/skins/default/xui/de/floater_animation_anim_preview.xml11
-rw-r--r--indra/newview/skins/default/xui/de/floater_animation_bvh_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/de/floater_merchant_outbox.xml27
-rw-r--r--indra/newview/skins/default/xui/de/floater_model_wizard.xml42
-rw-r--r--indra/newview/skins/default/xui/de/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_test_layout_stacks.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_test_text_vertical_aligment.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_tools.xml22
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_effect.xml23
-rw-r--r--indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/de/menu_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/de/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml83
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml63
-rw-r--r--indra/newview/skins/default/xui/de/panel_nearby_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_inventory.xml59
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml90
-rw-r--r--indra/newview/skins/default/xui/en/floater_about.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_avatar.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_avatar_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_camera.xml7
-rw-r--r--indra/newview/skins/default/xui/en/floater_chat_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_critical.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_destinations.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_gesture.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_help_browser.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_image_preview.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_joystick.xml50
-rw-r--r--indra/newview/skins/default/xui/en/floater_land_holdings.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_merchant_outbox.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_moveview.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_my_appearance.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_my_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_people.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_picks.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_places.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preferences.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_text_editor.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_widgets.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_texture_ctrl.xml192
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_toybox.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_effect.xml9
-rw-r--r--indra/newview/skins/default/xui/en/floater_window_size.xml60
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory.xml8
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml13
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml27
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_item.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_postcard_settings.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_snapshot_local.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_snapshot_profile.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_toast.xml1
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml5
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml5
-rw-r--r--indra/newview/skins/default/xui/en/widgets/floater.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml10
-rw-r--r--indra/newview/skins/default/xui/es/floater_merchant_outbox.xml27
-rw-r--r--indra/newview/skins/default/xui/es/floater_model_wizard.xml34
-rw-r--r--indra/newview/skins/default/xui/es/floater_test_layout_stacks.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/es/menu_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml87
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml55
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_inventory.xml59
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml82
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about_land.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/floater_animation_anim_preview.xml11
-rw-r--r--indra/newview/skins/default/xui/fr/floater_animation_bvh_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/fr/floater_chat_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_merchant_outbox.xml27
-rw-r--r--indra/newview/skins/default/xui/fr/floater_model_wizard.xml34
-rw-r--r--indra/newview/skins/default/xui/fr/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_test_layout_stacks.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_test_text_vertical_aligment.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tools.xml24
-rw-r--r--indra/newview/skins/default/xui/fr/floater_voice_effect.xml23
-rw-r--r--indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/menu_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml79
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml61
-rw-r--r--indra/newview/skins/default/xui/fr/panel_nearby_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/sidepanel_inventory.xml59
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml88
-rw-r--r--indra/newview/skins/default/xui/it/floater_about_land.xml10
-rw-r--r--indra/newview/skins/default/xui/it/floater_animation_anim_preview.xml11
-rw-r--r--indra/newview/skins/default/xui/it/floater_animation_bvh_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/it/floater_merchant_outbox.xml27
-rw-r--r--indra/newview/skins/default/xui/it/floater_model_wizard.xml32
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_test_layout_stacks.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_test_text_vertical_aligment.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_tools.xml22
-rw-r--r--indra/newview/skins/default/xui/it/floater_voice_effect.xml23
-rw-r--r--indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/it/menu_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/it/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml85
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml65
-rw-r--r--indra/newview/skins/default/xui/it/panel_nearby_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_inventory.xml59
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml88
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/floater_animation_anim_preview.xml11
-rw-r--r--indra/newview/skins/default/xui/ja/floater_animation_bvh_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/ja/floater_chat_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_merchant_outbox.xml27
-rw-r--r--indra/newview/skins/default/xui/ja/floater_model_wizard.xml46
-rw-r--r--indra/newview/skins/default/xui/ja/floater_my_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_object_weights.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_openobject.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_people.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_texture.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_snapshot.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_test_layout_stacks.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_test_text_vertical_aligment.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tools.xml22
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_effect.xml23
-rw-r--r--indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/menu_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/menu_url_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml91
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml133
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_control_panel.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_notices.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_landmarks.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_main_inventory.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_me.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_nearby_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_outbox_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_outfit_edit.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_people.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_snapshot_options.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/role_actions.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_inventory.xml61
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_item_info.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml116
-rw-r--r--indra/newview/skins/default/xui/ja/teleport_strings.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/floater_animation_anim_preview.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/floater_animation_bvh_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/pt/floater_merchant_outbox.xml27
-rw-r--r--indra/newview/skins/default/xui/pt/floater_model_wizard.xml34
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_test_layout_stacks.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_test_text_vertical_aligment.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tools.xml22
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_effect.xml23
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml95
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml58
-rw-r--r--indra/newview/skins/default/xui/pt/panel_nearby_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_inventory.xml59
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml94
-rw-r--r--indra/newview/skins/default/xui/ru/floater_about_land.xml18
-rw-r--r--indra/newview/skins/default/xui/ru/floater_animation_anim_preview.xml11
-rw-r--r--indra/newview/skins/default/xui/ru/floater_animation_bvh_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/ru/floater_merchant_outbox.xml27
-rw-r--r--indra/newview/skins/default/xui/ru/floater_model_wizard.xml48
-rw-r--r--indra/newview/skins/default/xui/ru/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/floater_test_layout_stacks.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_test_text_vertical_aligment.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_tools.xml22
-rw-r--r--indra/newview/skins/default/xui/ru/floater_voice_effect.xml23
-rw-r--r--indra/newview/skins/default/xui/ru/menu_inspect_object_gear.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/menu_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_viewer.xml75
-rw-r--r--indra/newview/skins/default/xui/ru/notifications.xml63
-rw-r--r--indra/newview/skins/default/xui/ru/panel_nearby_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/sidepanel_inventory.xml59
-rw-r--r--indra/newview/skins/default/xui/ru/strings.xml87
-rw-r--r--indra/newview/skins/default/xui/tr/floater_about_land.xml18
-rw-r--r--indra/newview/skins/default/xui/tr/floater_animation_anim_preview.xml11
-rw-r--r--indra/newview/skins/default/xui/tr/floater_animation_bvh_preview.xml186
-rw-r--r--indra/newview/skins/default/xui/tr/floater_chat_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_merchant_outbox.xml27
-rw-r--r--indra/newview/skins/default/xui/tr/floater_model_wizard.xml32
-rw-r--r--indra/newview/skins/default/xui/tr/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_test_layout_stacks.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_test_text_vertical_aligment.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_tools.xml22
-rw-r--r--indra/newview/skins/default/xui/tr/floater_voice_effect.xml23
-rw-r--r--indra/newview/skins/default/xui/tr/menu_inspect_object_gear.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/menu_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/menu_viewer.xml79
-rw-r--r--indra/newview/skins/default/xui/tr/notifications.xml61
-rw-r--r--indra/newview/skins/default/xui/tr/panel_nearby_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/sidepanel_inventory.xml59
-rw-r--r--indra/newview/skins/default/xui/tr/strings.xml86
466 files changed, 8570 insertions, 3171 deletions
diff --git a/.hgignore b/.hgignore
index 403b73df6d..bc3020eee4 100644
--- a/.hgignore
+++ b/.hgignore
@@ -67,3 +67,4 @@ glob:indra/newview/filters.xml
glob:indra/newview/avatar_icons_cache.txt
glob:indra/newview/avatar_lad.log
glob:*.diff
+*.rej
diff --git a/.hgtags b/.hgtags
index 6edf9b0330..4f3f55ad94 100644
--- a/.hgtags
+++ b/.hgtags
@@ -271,18 +271,29 @@ e9c82fca5ae6fb8a8af29012d78fb194a29323f3 3.2.9-beta1
a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2
a01ef9bed28627f4ca543fbc1d70c79cc297a90f 3.2.9-beta2
987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2
+d5f263687f43f278107363365938f0a214920a4b DRTVWR-119
+d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1
+5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
+5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release
d5f263687f43f278107363365938f0a214920a4b 3.3.0-start
dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate
d5f263687f43f278107363365938f0a214920a4b DRTVWR-119
d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1
5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release
-dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate
-3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate
-3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate
+28b95a6a28dca3338d9a1f4f204b96678df9f6a5 viewer-beta-candidate
+b43cd25be49e3984ff5361cefad020e069131d98 3.3.1-start
+3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125
+3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 3.3.1-start
+28b95a6a28dca3338d9a1f4f204b96678df9f6a5 3.3.1-beta1
1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate
1dc545e44617975da2a4a32fe303386c687a6ca1 3.3.1-beta2
1dc545e44617975da2a4a32fe303386c687a6ca1 DRTVWR-139
5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate
c623bbc854b6f7ee1b33a3718f76715046aa2937 3.3.1-release
+d29a260119f8d5a5d168e25fed0c7ea6b3f40161 3.3.2-beta1
+675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-beta2
+c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate
+675668bd24d3bea570814f71762a2a806f7e1b8d viewer-release-candidate
+675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-release
diff --git a/BuildParams b/BuildParams
index 1c39dd7cc7..cff51a286b 100644
--- a/BuildParams
+++ b/BuildParams
@@ -35,6 +35,7 @@ viewer-development.build_debug_release_separately = true
# Notifications - to configure email notices, add a setting like this:
# <username>_<reponame>.email = <email-address>
+
# =================================================================
# Canonical viewer integration builds - Oz Linden
# =================================================================
@@ -137,19 +138,6 @@ oz_viewer-beta-review.viewer_channel = "Second Life Beta Viewer"
oz_viewer-beta-review.login_channel = "Second Life Beta Viewer"
oz_viewer-beta-review.email = oz@lindenlab.com
-oz_project-1.build_debug_release_separately = true
-oz_project-1.codeticket_add_context = false
-oz_project-1.email = oz@lindenlab.com
-oz_project-2.build_debug_release_separately = true
-oz_project-2.codeticket_add_context = false
-oz_project-2.email = oz@lindenlab.com
-oz_project-3.build_debug_release_separately = true
-oz_project-3.codeticket_add_context = false
-oz_project-3.email = oz@lindenlab.com
-oz_project-4.build_debug_release_separately = true
-oz_project-4.codeticket_add_context = false
-oz_project-4.email = oz@lindenlab.com
-
# =================================================================
# asset delivery 2010 projects
# =================================================================
diff --git a/autobuild.xml b/autobuild.xml
index 9914be6867..0e4b81324a 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1206,9 +1206,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>26aa7c367ffadd573f61a6a96f820f80</string>
+ <string>4a98d727561cd1f4ac5ee02907411df1</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/245988/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20111201.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20120228.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1218,9 +1218,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>c05a33ee8b6f253b5a744596dfc3707d</string>
+ <string>f50e5f0cc880c55b3f0f7e67dc8f7221</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20101013.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Linux/installer/llqtwebkit-4.7.1-linux-20120228.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1230,9 +1230,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>270db8568a0c4bab266d98e1a820aec4</string>
+ <string>5e3cd6af397e853a963a6de40d440ff4</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/245988/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20111201.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20120228.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
diff --git a/build.sh b/build.sh
index c7c89fe3c2..8ca3208087 100755
--- a/build.sh
+++ b/build.sh
@@ -132,10 +132,6 @@ if test -f scripts/update_version_files.py ; then
end_section UpdateVer
fi
-# Now retrieve the version for use in the version manager
-# First three parts only, $revision will be appended automatically.
-build_viewer_update_version_manager_version=`python scripts/get_version.py --viewer-version | sed 's/\.[0-9]*$//'`
-
if [ -z "$AUTOBUILD" ]
then
export autobuild_dir="$here/../../../autobuild/bin/"
@@ -177,9 +173,6 @@ eval "$("$AUTOBUILD" source_environment)"
env|sort
-# Install packages.
-"$AUTOBUILD" install --skip-license-check
-
# Now run the build
succeeded=true
build_processes=
@@ -195,10 +188,19 @@ do
begin_section "Do$variant"
build_dir=`build_dir_$arch $variant`
build_dir_stubs="$build_dir/win_setup/$variant"
+
+ begin_section "PreClean"
rm -rf "$build_dir"
+ end_section "PreClean"
+
mkdir -p "$build_dir"
mkdir -p "$build_dir/tmp"
- #export TMP="$build_dir/tmp"
+
+ # Install packages.
+ begin_section "AutobuildInstall"
+ "$AUTOBUILD" install --verbose --skip-license-check
+ end_section "AutobuildInstall"
+
if pre_build "$variant" "$build_dir" >> "$build_log" 2>&1
then
if $build_link_parallel
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 3851e62cfb..04edfb4bea 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -234,7 +234,7 @@ Borg Capalini
Boroondas Gupte
OPEN-29
OPEN-39
- OPEN-39
+ OPEN-54
OPEN-99
SNOW-278
SNOW-503
@@ -396,6 +396,8 @@ Frontera Thor
Fury Rosewood
Gaberoonie Zanzibar
Ganymedes Costagravas
+Geenz Spad
+ STORM-1823
Gene Frostbite
GeneJ Composer
Geneko Nemeth
@@ -622,6 +624,8 @@ Jonathan Yap
STORM-1796
STORM-1807
STORM-1808
+ STORM-637
+ STORM-1822
STORM-1809
STORM-1793
STORM-1810
@@ -868,6 +872,7 @@ Nicky Perian
OPEN-1
STORM-1087
STORM-1090
+ STORM-1828
Nicoladie Gymnast
Nounouch Hapmouche
VWR-238
@@ -1187,6 +1192,8 @@ Unlikely Quintessa
UsikuFarasi Kanarik
Vadim Bigbear
VWR-2681
+Vaalith Jinn
+ STORM-64
Vector Hastings
VWR-8726
Veritas Raymaker
diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake
index 499b00fb44..7ad73e5683 100644
--- a/indra/cmake/JsonCpp.cmake
+++ b/indra/cmake/JsonCpp.cmake
@@ -18,5 +18,5 @@ else (STANDALONE)
elseif (LINUX)
set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)
endif (WINDOWS)
- set(JSONCPP_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json")
+ set(JSONCPP_INCLUDE_DIR "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json")
endif (STANDALONE)
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
index c5f9e2c579..47f944f9a5 100644
--- a/indra/cmake/Linking.cmake
+++ b/indra/cmake/Linking.cmake
@@ -13,7 +13,7 @@ elseif (LINUX)
set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin)
elseif (DARWIN)
set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
- set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)")
+ set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs")
endif (WINDOWS)
# Autobuild packages must provide 'release' versions of libraries, but may provide versions for
@@ -33,7 +33,14 @@ else(WINDOWS OR DARWIN)
set(AUTOBUILD_LIBS_INSTALL_DIRS ${AUTOBUILD_INSTALL_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER})
endif(WINDOWS OR DARWIN)
-list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
+if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
+ # When we're building something other than Release, append the
+ # packages/lib/release directory to deal with autobuild packages that don't
+ # provide (e.g.) lib/debug libraries.
+ list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
+ message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}, extending AUTOBUILD_LIBS_INSTALL_DIRS")
+endif (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
+message(STATUS "For ${CMAKE_BUILD_TYPE}, AUTOBUILD_LIBS_INSTALL_DIRS: ${AUTOBUILD_LIBS_INSTALL_DIRS}")
link_directories(${AUTOBUILD_LIBS_INSTALL_DIRS})
if (LINUX)
diff --git a/indra/cmake/VisualLeakDetector.cmake b/indra/cmake/VisualLeakDetector.cmake
new file mode 100644
index 0000000000..d3ba554e46
--- /dev/null
+++ b/indra/cmake/VisualLeakDetector.cmake
@@ -0,0 +1,15 @@
+# -*- cmake -*-
+
+if (VIEWER)
+
+ set(INCLUDE_VLD_CMAKE OFF CACHE BOOL "Build the Windows viewer with Visual Leak Detector turned on or off")
+
+ if (INCLUDE_VLD_CMAKE)
+
+ if (WINDOWS)
+ add_definitions(-DINCLUDE_VLD=1)
+ endif (WINDOWS)
+
+ endif (INCLUDE_VLD_CMAKE)
+
+endif (VIEWER)
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
index 91b49e75d7..d9df78bfc8 100644
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ b/indra/cmake/WebKitLibPlugin.cmake
@@ -70,9 +70,10 @@ elseif (LINUX)
QtNetwork
QtGui
QtCore
- qgif
- qjpeg
- jpeg
+ jscore
+# qgif
+# qjpeg
+# jpeg
fontconfig
X11
Xrender
diff --git a/indra/edit-me-to-trigger-new-build.txt b/indra/edit-me-to-trigger-new-build.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/indra/edit-me-to-trigger-new-build.txt
diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h
index e81a27c2bc..3ebb2bffb0 100644
--- a/indra/llcharacter/llcharacter.h
+++ b/indra/llcharacter/llcharacter.h
@@ -126,7 +126,7 @@ public:
virtual void addDebugText( const std::string& text ) = 0;
- virtual const LLUUID& getID() = 0;
+ virtual const LLUUID& getID() const = 0;
//-------------------------------------------------------------------------
// End Interface
//-------------------------------------------------------------------------
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 26ff1b5c55..fafc750690 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 = 3;
-const S32 LL_VERSION_PATCH = 1;
+const S32 LL_VERSION_PATCH = 2;
const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llimage/llimagepng.cpp b/indra/llimage/llimagepng.cpp
index 8d493ecde0..294f68b122 100644
--- a/indra/llimage/llimagepng.cpp
+++ b/indra/llimage/llimagepng.cpp
@@ -60,6 +60,12 @@ BOOL LLImagePNG::updateData()
// Decode the PNG data and extract sizing information
LLPngWrapper pngWrapper;
+ if (!pngWrapper.isValidPng(getData()))
+ {
+ setLastError("LLImagePNG data does not have a valid PNG header!");
+ return FALSE;
+ }
+
LLPngWrapper::ImageInfo infop;
if (! pngWrapper.readPng(getData(), NULL, &infop))
{
@@ -90,6 +96,12 @@ BOOL LLImagePNG::decode(LLImageRaw* raw_image, F32 decode_time)
// Decode the PNG data into the raw image
LLPngWrapper pngWrapper;
+ if (!pngWrapper.isValidPng(getData()))
+ {
+ setLastError("LLImagePNG data does not have a valid PNG header!");
+ return FALSE;
+ }
+
if (! pngWrapper.readPng(getData(), raw_image))
{
setLastError(pngWrapper.getErrorMessage());
diff --git a/indra/llmath/llcoord.h b/indra/llmath/llcoord.h
index 1f617e649e..9b76268afd 100644
--- a/indra/llmath/llcoord.h
+++ b/indra/llmath/llcoord.h
@@ -26,6 +26,15 @@
#ifndef LL_LLCOORD_H
#define LL_LLCOORD_H
+template<typename> class LLCoord;
+struct LL_COORD_TYPE_GL;
+struct LL_COORD_TYPE_WINDOW;
+struct LL_COORD_TYPE_SCREEN;
+
+typedef LLCoord<LL_COORD_TYPE_GL> LLCoordGL;
+typedef LLCoord<LL_COORD_TYPE_WINDOW> LLCoordWindow;
+typedef LLCoord<LL_COORD_TYPE_SCREEN> LLCoordScreen;
+
struct LLCoordCommon
{
LLCoordCommon(S32 x, S32 y) : mX(x), mY(y) {}
@@ -45,7 +54,7 @@ public:
LLCoord(): mX(0), mY(0)
{}
- LLCoord(S32 x, S32 y): mX(x), mY(y)
+ LLCoord(typename COORD_FRAME::value_t x, typename COORD_FRAME::value_t y): mX(x), mY(y)
{}
LLCoord(const LLCoordCommon& other)
@@ -58,10 +67,12 @@ public:
return COORD_FRAME::convertToCommon();
}
- void set(S32 x, S32 y) { mX = x; mY = y;}
+ void set(typename COORD_FRAME::value_t x, typename COORD_FRAME::value_t y) { mX = x; mY = y;}
bool operator==(const self_t& other) const { return mX == other.mX && mY == other.mY; }
bool operator!=(const self_t& other) const { return !(*this == other); }
+ static const self_t& getTypedCoords(const COORD_FRAME& self) { return static_cast<const self_t&>(self); }
+ static self_t& getTypedCoords(COORD_FRAME& self) { return static_cast<self_t&>(self); }
};
struct LL_COORD_TYPE_GL
@@ -70,13 +81,13 @@ struct LL_COORD_TYPE_GL
LLCoordCommon convertToCommon() const
{
- const LLCoord<LL_COORD_TYPE_GL>& self = static_cast<const LLCoord<LL_COORD_TYPE_GL>&>(*this);
+ const LLCoordGL& self = LLCoordGL::getTypedCoords(*this);
return LLCoordCommon(self.mX, self.mY);
}
void convertFromCommon(const LLCoordCommon& from)
{
- LLCoord<LL_COORD_TYPE_GL>& self = static_cast<LLCoord<LL_COORD_TYPE_GL>&>(*this);
+ LLCoordGL& self = LLCoordGL::getTypedCoords(*this);
self.mX = from.mX;
self.mY = from.mY;
}
@@ -98,8 +109,4 @@ struct LL_COORD_TYPE_SCREEN
void convertFromCommon(const LLCoordCommon& from);
};
-typedef LLCoord<LL_COORD_TYPE_GL> LLCoordGL;
-typedef LLCoord<LL_COORD_TYPE_WINDOW> LLCoordWindow;
-typedef LLCoord<LL_COORD_TYPE_SCREEN> LLCoordScreen;
-
#endif
diff --git a/indra/llmessage/tests/testrunner.py b/indra/llmessage/tests/testrunner.py
index f2c841532a..5b9beb359b 100644
--- a/indra/llmessage/tests/testrunner.py
+++ b/indra/llmessage/tests/testrunner.py
@@ -35,7 +35,7 @@ import re
import errno
import socket
-VERBOSE = os.environ.get("INTEGRATION_TEST_VERBOSE", "1") # default to verbose
+VERBOSE = os.environ.get("INTEGRATION_TEST_VERBOSE", "0") # default to quiet
# Support usage such as INTEGRATION_TEST_VERBOSE=off -- distressing to user if
# that construct actually turns on verbosity...
VERBOSE = not re.match(r"(0|off|false|quiet)$", VERBOSE, re.IGNORECASE)
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index 946e602fee..197bc2b422 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -97,6 +97,8 @@ void APIENTRY gl_debug_callback(GLenum source,
}
#endif
+void parse_glsl_version(S32& major, S32& minor);
+
void ll_init_fail_log(std::string filename)
{
gFailLog.open(filename.c_str());
@@ -295,6 +297,7 @@ PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB = NULL;
PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB = NULL;
PFNGLGETUNIFORMIVARBPROC glGetUniformivARB = NULL;
PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB = NULL;
+PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer = NULL;
#if LL_WINDOWS
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL;
@@ -443,7 +446,8 @@ LLGLManager::LLGLManager() :
mDriverVersionMinor(0),
mDriverVersionRelease(0),
mGLVersion(1.0f),
-
+ mGLSLVersionMajor(0),
+ mGLSLVersionMinor(0),
mVRAM(0),
mGLMaxVertexRange(0),
mGLMaxIndexRange(0)
@@ -554,6 +558,20 @@ bool LLGLManager::initGL()
mGLVersion = mDriverVersionMajor + mDriverVersionMinor * .1f;
+ if (mGLVersion >= 2.f)
+ {
+ parse_glsl_version(mGLSLVersionMajor, mGLSLVersionMinor);
+
+#if LL_DARWIN
+ //never use GLSL greater than 1.20 on OSX
+ if (mGLSLVersionMajor > 1 || mGLSLVersionMinor >= 30)
+ {
+ mGLSLVersionMajor = 1;
+ mGLSLVersionMinor = 20;
+ }
+#endif
+ }
+
// Trailing space necessary to keep "nVidia Corpor_ati_on" cards
// from being recognized as ATI.
if (mGLVendor.substr(0,4) == "ATI ")
@@ -1300,6 +1318,7 @@ void LLGLManager::initExtensions()
glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4uivARB");
glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4usvARB");
glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttribPointerARB");
+ glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttribIPointer");
glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC) GLH_EXT_GET_PROC_ADDRESS("glEnableVertexAttribArrayARB");
glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) GLH_EXT_GET_PROC_ADDRESS("glDisableVertexAttribArrayARB");
glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramStringARB");
@@ -2098,6 +2117,55 @@ void parse_gl_version( S32* major, S32* minor, S32* release, std::string* vendor
}
}
+
+void parse_glsl_version(S32& major, S32& minor)
+{
+ // GL_SHADING_LANGUAGE_VERSION returns a null-terminated string with the format:
+ // <major>.<minor>[.<release>] [<vendor specific>]
+
+ const char* version = (const char*) glGetString(GL_SHADING_LANGUAGE_VERSION);
+ major = 0;
+ minor = 0;
+
+ if( !version )
+ {
+ return;
+ }
+
+ std::string ver_copy( version );
+ S32 len = (S32)strlen( version ); /* Flawfinder: ignore */
+ S32 i = 0;
+ S32 start;
+ // Find the major version
+ start = i;
+ for( ; i < len; i++ )
+ {
+ if( '.' == version[i] )
+ {
+ break;
+ }
+ }
+ std::string major_str = ver_copy.substr(start,i-start);
+ LLStringUtil::convertToS32(major_str, major);
+
+ if( '.' == version[i] )
+ {
+ i++;
+ }
+
+ // Find the minor version
+ start = i;
+ for( ; i < len; i++ )
+ {
+ if( ('.' == version[i]) || isspace(version[i]) )
+ {
+ break;
+ }
+ }
+ std::string minor_str = ver_copy.substr(start,i-start);
+ LLStringUtil::convertToS32(minor_str, minor);
+}
+
LLGLUserClipPlane::LLGLUserClipPlane(const LLPlane& p, const glh::matrix4f& modelview, const glh::matrix4f& projection, bool apply)
{
mApply = apply;
diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h
index 6a147b8e19..5a33c98708 100644
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -138,6 +138,8 @@ public:
S32 mDriverVersionMinor;
S32 mDriverVersionRelease;
F32 mGLVersion; // e.g = 1.4
+ S32 mGLSLVersionMajor;
+ S32 mGLSLVersionMinor;
std::string mDriverVersionVendorString;
S32 mVRAM; // VRAM in MB
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index 10aad202e1..d61ec707f0 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -199,6 +199,7 @@ extern PFNGLVERTEXATTRIB4UBVARBPROC glVertexAttrib4ubvARB;
extern PFNGLVERTEXATTRIB4UIVARBPROC glVertexAttrib4uivARB;
extern PFNGLVERTEXATTRIB4USVARBPROC glVertexAttrib4usvARB;
extern PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
+extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
extern PFNGLPROGRAMSTRINGARBPROC glProgramStringARB;
@@ -460,6 +461,7 @@ extern PFNGLVERTEXATTRIB4UBVARBPROC glVertexAttrib4ubvARB;
extern PFNGLVERTEXATTRIB4UIVARBPROC glVertexAttrib4uivARB;
extern PFNGLVERTEXATTRIB4USVARBPROC glVertexAttrib4usvARB;
extern PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
+extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
extern PFNGLPROGRAMSTRINGARBPROC glProgramStringARB;
@@ -693,6 +695,7 @@ extern PFNGLVERTEXATTRIB4UBVARBPROC glVertexAttrib4ubvARB;
extern PFNGLVERTEXATTRIB4UIVARBPROC glVertexAttrib4uivARB;
extern PFNGLVERTEXATTRIB4USVARBPROC glVertexAttrib4usvARB;
extern PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
+extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
extern PFNGLPROGRAMSTRINGARBPROC glProgramStringARB;
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 3773568ad8..4b7e639aed 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -109,7 +109,12 @@ void LLGLSLShader::unload()
glGetAttachedObjectsARB(mProgramObject, 1024, &count, obj);
for (GLsizei i = 0; i < count; i++)
{
- glDeleteObjectARB(obj[i]);
+#if !LL_DARWIN
+ if (glIsProgramARB(obj[i]))
+#endif
+ {
+ glDeleteObjectARB(obj[i]);
+ }
}
glDeleteObjectARB(mProgramObject);
@@ -161,8 +166,9 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
return FALSE;
}
- if (gGLManager.mGLVersion < 3.1f)
- { //attachShaderFeatures may have set the number of indexed texture channels, so set to 1 again
+ if (gGLManager.mGLSLVersionMajor < 2 && gGLManager.mGLSLVersionMinor < 3)
+ { //indexed texture rendering requires GLSL 1.3 or later
+ //attachShaderFeatures may have set the number of indexed texture channels, so set to 1 again
mFeatures.mIndexedTextureChannels = llmin(mFeatures.mIndexedTextureChannels, 1);
}
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 908443e8cf..7d384450e6 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -575,34 +575,46 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
GLcharARB* text[4096];
GLuint count = 0;
- F32 version = gGLManager.mGLVersion;
-
-//hack to never use GLSL > 1.20 on OSX
-#if LL_DARWIN
- version = llmin(version, 2.9f);
-#endif
-
- if (version < 2.1f)
- {
- text[count++] = strdup("#version 110\n");
- text[count++] = strdup("#define ATTRIBUTE attribute\n");
- text[count++] = strdup("#define VARYING varying\n");
- }
- else if (version < 3.3f)
+ S32 major_version = gGLManager.mGLSLVersionMajor;
+ S32 minor_version = gGLManager.mGLSLVersionMinor;
+
+ if (major_version == 1 && minor_version < 30)
{
- //set version to 1.20
- text[count++] = strdup("#version 120\n");
- text[count++] = strdup("#define FXAA_GLSL_120 1\n");
- text[count++] = strdup("#define FXAA_FAST_PIXEL_OFFSET 0\n");
- text[count++] = strdup("#define ATTRIBUTE attribute\n");
- text[count++] = strdup("#define VARYING varying\n");
+ if (minor_version < 10)
+ {
+ //should NEVER get here -- if major version is 1 and minor version is less than 10,
+ // viewer should never attempt to use shaders, continuing will result in undefined behavior
+ llerrs << "Unsupported GLSL Version." << llendl;
+ }
+
+ if (minor_version <= 19)
+ {
+ text[count++] = strdup("#version 110\n");
+ text[count++] = strdup("#define ATTRIBUTE attribute\n");
+ text[count++] = strdup("#define VARYING varying\n");
+ text[count++] = strdup("#define VARYING_FLAT varying\n");
+ }
+ else if (minor_version <= 29)
+ {
+ //set version to 1.20
+ text[count++] = strdup("#version 120\n");
+ text[count++] = strdup("#define FXAA_GLSL_120 1\n");
+ text[count++] = strdup("#define FXAA_FAST_PIXEL_OFFSET 0\n");
+ text[count++] = strdup("#define ATTRIBUTE attribute\n");
+ text[count++] = strdup("#define VARYING varying\n");
+ text[count++] = strdup("#define VARYING_FLAT varying\n");
+ }
}
else
{
- if (version < 4.f)
+ if (major_version < 4)
{
//set version to 1.30
text[count++] = strdup("#version 130\n");
+
+ //some implementations of GLSL 1.30 require integer precision be explicitly declared
+ text[count++] = strdup("precision mediump int;\n");
+ text[count++] = strdup("precision highp float;\n");
}
else
{ //set version to 400
@@ -618,16 +630,25 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
{ //"varying" state is "out" in a vertex program, "in" in a fragment program
// ("varying" is deprecated after version 1.20)
text[count++] = strdup("#define VARYING out\n");
+ text[count++] = strdup("#define VARYING_FLAT flat out\n");
}
else
{
text[count++] = strdup("#define VARYING in\n");
+ text[count++] = strdup("#define VARYING_FLAT flat in\n");
}
//backwards compatibility with legacy texture lookup syntax
+ text[count++] = strdup("#define texture2D texture\n");
text[count++] = strdup("#define textureCube texture\n");
text[count++] = strdup("#define texture2DLod textureLod\n");
text[count++] = strdup("#define shadow2D(a,b) vec2(texture(a,b))\n");
+
+ if (major_version > 1 || minor_version >= 40)
+ { //GLSL 1.40 replaces texture2DRect et al with texture
+ text[count++] = strdup("#define texture2DRect texture\n");
+ text[count++] = strdup("#define shadow2DRect(a,b) vec2(texture(a,b))\n");
+ }
}
//copy preprocessor definitions into buffer
@@ -651,22 +672,24 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
.
uniform sampler2D texN;
- VARYING float vary_texture_index;
+ VARYING_FLAT ivec4 vary_texture_index;
+
+ vec4 ret = vec4(1,0,1,1);
vec4 diffuseLookup(vec2 texcoord)
{
- switch (int(vary_texture_index+0.25))
+ switch (vary_texture_index.r))
{
- case 0: return texture2D(tex0, texcoord);
- case 1: return texture2D(tex1, texcoord);
- case 2: return texture2D(tex2, texcoord);
+ case 0: ret = texture2D(tex0, texcoord); break;
+ case 1: ret = texture2D(tex1, texcoord); break;
+ case 2: ret = texture2D(tex2, texcoord); break;
.
.
.
- case N: return texture2D(texN, texcoord);
+ case N: return texture2D(texN, texcoord); break;
}
- return vec4(0,0,0,0);
+ return ret;
}
*/
@@ -679,7 +702,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
if (texture_index_channels > 1)
{
- text[count++] = strdup("VARYING float vary_texture_index;\n");
+ text[count++] = strdup("VARYING_FLAT ivec4 vary_texture_index;\n");
}
text[count++] = strdup("vec4 diffuseLookup(vec2 texcoord)\n");
@@ -691,45 +714,28 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
text[count++] = strdup("return texture2D(tex0, texcoord);\n");
text[count++] = strdup("}\n");
}
- else if (gGLManager.mGLVersion >= 3.f)
- {
- text[count++] = strdup("\tswitch (int(vary_texture_index+0.25))\n");
+ else if (major_version > 1 || minor_version >= 30)
+ { //switches are supported in GLSL 1.30 and later
+ text[count++] = strdup("\tvec4 ret = vec4(1,0,1,1);\n");
+ text[count++] = strdup("\tswitch (vary_texture_index.r)\n");
text[count++] = strdup("\t{\n");
//switch body
for (S32 i = 0; i < texture_index_channels; ++i)
{
- std::string case_str = llformat("\t\tcase %d: return texture2D(tex%d, texcoord);\n", i, i);
+ std::string case_str = llformat("\t\tcase %d: ret = texture2D(tex%d, texcoord); break;\n", i, i);
text[count++] = strdup(case_str.c_str());
}
text[count++] = strdup("\t}\n");
- text[count++] = strdup("\treturn vec4(1,0,1,1);\n");
+ text[count++] = strdup("\treturn ret;\n");
text[count++] = strdup("}\n");
}
else
- {
- //switches aren't supported, make block that looks like:
- /*
- int ti = int(vary_texture_index+0.25);
- if (ti == 0) return texture2D(tex0, texcoord);
- if (ti == 1) return texture2D(tex1, texcoord);
- .
- .
- .
- if (ti == N) return texture2D(texN, texcoord);
- */
-
- text[count++] = strdup("int ti = int(vary_texture_index+0.25);\n");
- for (S32 i = 0; i < texture_index_channels; ++i)
- {
- std::string if_str = llformat("if (ti == %d) return texture2D(tex%d, texcoord);\n", i, i);
- text[count++] = strdup(if_str.c_str());
- }
-
- text[count++] = strdup("\treturn vec4(1,0,1,1);\n");
- text[count++] = strdup("}\n");
- }
+ { //should never get here. Indexed texture rendering requires GLSL 1.30 or later
+ // (for passing integers between vertex and fragment shaders)
+ llerrs << "Indexed texture rendering requires GLSL 1.30 or later." << llendl;
+ }
}
//copy file into memory
@@ -1070,6 +1076,8 @@ void LLShaderMgr::initAttribsAndUniforms()
mReservedUniforms.push_back("magnification");
mReservedUniforms.push_back("max_cof");
mReservedUniforms.push_back("res_scale");
+ mReservedUniforms.push_back("dof_width");
+ mReservedUniforms.push_back("dof_height");
mReservedUniforms.push_back("depthMap");
mReservedUniforms.push_back("shadowMap0");
diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h
index 950e6c9c2f..e28bda6de2 100644
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -142,6 +142,8 @@ public:
DOF_MAGNIFICATION,
DOF_MAX_COF,
DOF_RES_SCALE,
+ DOF_WIDTH,
+ DOF_HEIGHT,
DEFERRED_DEPTH,
DEFERRED_SHADOW0,
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index e4a5cd0299..8b5503229f 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -284,6 +284,12 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)
{
bool error = false;
+ if (gGLManager.mGLSLVersionMajor < 2 && gGLManager.mGLSLVersionMinor < 30)
+ {
+ //make sure texture index is disabled
+ data_mask = data_mask & ~MAP_TEXTURE_INDEX;
+ }
+
if (LLGLSLShader::sNoFixedFunction)
{
for (U32 i = 0; i < TYPE_MAX; ++i)
@@ -1193,7 +1199,7 @@ void LLVertexBuffer::setupVertexArray()
1, //TYPE_WEIGHT,
4, //TYPE_WEIGHT4,
4, //TYPE_CLOTHWEIGHT,
- 1, //TYPE_TEXTURE_INDEX
+ 4, //TYPE_TEXTURE_INDEX
};
U32 attrib_type[] =
@@ -1210,7 +1216,24 @@ void LLVertexBuffer::setupVertexArray()
GL_FLOAT, //TYPE_WEIGHT,
GL_FLOAT, //TYPE_WEIGHT4,
GL_FLOAT, //TYPE_CLOTHWEIGHT,
- GL_FLOAT, //TYPE_TEXTURE_INDEX
+ GL_UNSIGNED_BYTE, //TYPE_TEXTURE_INDEX
+ };
+
+ bool attrib_integer[] =
+ {
+ false, //TYPE_VERTEX,
+ false, //TYPE_NORMAL,
+ false, //TYPE_TEXCOORD0,
+ false, //TYPE_TEXCOORD1,
+ false, //TYPE_TEXCOORD2,
+ false, //TYPE_TEXCOORD3,
+ false, //TYPE_COLOR,
+ false, //TYPE_EMISSIVE,
+ false, //TYPE_BINORMAL,
+ false, //TYPE_WEIGHT,
+ false, //TYPE_WEIGHT4,
+ false, //TYPE_CLOTHWEIGHT,
+ true, //TYPE_TEXTURE_INDEX
};
U32 attrib_normalized[] =
@@ -1238,7 +1261,21 @@ void LLVertexBuffer::setupVertexArray()
if (mTypeMask & (1 << i))
{
glEnableVertexAttribArrayARB(i);
- glVertexAttribPointerARB(i, attrib_size[i], attrib_type[i], attrib_normalized[i], sTypeSize[i], (void*) mOffsets[i]);
+
+ if (attrib_integer[i])
+ {
+#if !LL_DARWIN
+ //glVertexattribIPointer requires GLSL 1.30 or later
+ if (gGLManager.mGLSLVersionMajor > 1 || gGLManager.mGLSLVersionMinor >= 30)
+ {
+ glVertexAttribIPointer(i, attrib_size[i], attrib_type[i], sTypeSize[i], (void*) mOffsets[i]);
+ }
+#endif
+ }
+ else
+ {
+ glVertexAttribPointerARB(i, attrib_size[i], attrib_type[i], attrib_normalized[i], sTypeSize[i], (void*) mOffsets[i]);
+ }
}
else
{
@@ -2220,11 +2257,14 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask)
void* ptr = (void*)(base + mOffsets[TYPE_CLOTHWEIGHT]);
glVertexAttribPointerARB(loc, 4, GL_FLOAT, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_CLOTHWEIGHT], ptr);
}
- if (data_mask & MAP_TEXTURE_INDEX)
+ if (data_mask & MAP_TEXTURE_INDEX &&
+ (gGLManager.mGLSLVersionMajor >= 2 || gGLManager.mGLSLVersionMinor >= 30)) //indexed texture rendering requires GLSL 1.30 or later
{
+#if !LL_DARWIN
S32 loc = TYPE_TEXTURE_INDEX;
void *ptr = (void*) (base + mOffsets[TYPE_VERTEX] + 12);
- glVertexAttribPointerARB(loc, 1, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], ptr);
+ glVertexAttribIPointer(loc, 4, GL_UNSIGNED_BYTE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], ptr);
+#endif
}
if (data_mask & MAP_VERTEX)
{
diff --git a/indra/llui/llclipboard.cpp b/indra/llui/llclipboard.cpp
index 6910b962a1..14173fdbb0 100644
--- a/indra/llui/llclipboard.cpp
+++ b/indra/llui/llclipboard.cpp
@@ -34,109 +34,113 @@
#include "llview.h"
#include "llwindow.h"
-// Global singleton
-LLClipboard gClipboard;
-
-
-LLClipboard::LLClipboard()
+LLClipboard::LLClipboard() :
+ mGeneration(0)
{
- mSourceItem = NULL;
+ reset();
}
-
LLClipboard::~LLClipboard()
{
+ reset();
}
-
-void LLClipboard::copyFromSubstring(const LLWString &src, S32 pos, S32 len, const LLUUID& source_id )
+void LLClipboard::reset()
{
- mSourceID = source_id;
- mString = src.substr(pos, len);
- LLView::getWindow()->copyTextToClipboard( mString );
+ // Increment the clipboard count
+ mGeneration++;
+ // Clear the clipboard
+ mObjects.clear();
+ mCutMode = false;
+ mString = LLWString();
}
-void LLClipboard::copyFromString(const LLWString &src, const LLUUID& source_id )
+// Copy the input uuid to the LL clipboard
+bool LLClipboard::copyToClipboard(const LLUUID& src, const LLAssetType::EType type)
{
- mSourceID = source_id;
- mString = src;
- LLView::getWindow()->copyTextToClipboard( mString );
+ reset();
+ return addToClipboard(src, type);
}
-const LLWString& LLClipboard::getPasteWString( LLUUID* source_id )
+// Add the input uuid to the LL clipboard
+// Convert the uuid to string and concatenate that string to the system clipboard if legit
+bool LLClipboard::addToClipboard(const LLUUID& src, const LLAssetType::EType type)
{
- if( mSourceID.notNull() )
+ bool res = false;
+ if (src.notNull())
{
- LLWString temp_string;
- LLView::getWindow()->pasteTextFromClipboard(temp_string);
-
- if( temp_string != mString )
+ res = true;
+ if (LLAssetType::lookupIsAssetIDKnowable(type))
{
- mSourceID.setNull();
- mString = temp_string;
+ LLWString source = utf8str_to_wstring(src.asString());
+ res = addToClipboard(source, 0, source.size());
+ }
+ if (res)
+ {
+ mObjects.push_back(src);
+ mGeneration++;
}
}
- else
- {
- LLView::getWindow()->pasteTextFromClipboard(mString);
- }
+ return res;
+}
- if( source_id )
+bool LLClipboard::pasteFromClipboard(std::vector<LLUUID>& inv_objects) const
+{
+ bool res = false;
+ S32 count = mObjects.size();
+ if (count > 0)
{
- *source_id = mSourceID;
+ res = true;
+ inv_objects.clear();
+ for (S32 i = 0; i < count; i++)
+ {
+ inv_objects.push_back(mObjects[i]);
+ }
}
-
- return mString;
+ return res;
}
+// Returns true if the LL Clipboard has pasteable items in it
+bool LLClipboard::hasContents() const
+{
+ return (mObjects.size() > 0);
+}
-BOOL LLClipboard::canPasteString() const
+// Returns true if the input uuid is in the list of clipboard objects
+bool LLClipboard::isOnClipboard(const LLUUID& object) const
{
- return LLView::getWindow()->isClipboardTextAvailable();
+ std::vector<LLUUID>::const_iterator iter = std::find(mObjects.begin(), mObjects.end(), object);
+ return (iter != mObjects.end());
}
+// Copy the input string to the LL and the system clipboard
+bool LLClipboard::copyToClipboard(const LLWString &src, S32 pos, S32 len, bool use_primary)
+{
+ return addToClipboard(src, pos, len, use_primary);
+}
-void LLClipboard::copyFromPrimarySubstring(const LLWString &src, S32 pos, S32 len, const LLUUID& source_id )
+// Concatenate the input string to the LL and the system clipboard
+bool LLClipboard::addToClipboard(const LLWString &src, S32 pos, S32 len, bool use_primary)
{
- mSourceID = source_id;
mString = src.substr(pos, len);
- LLView::getWindow()->copyTextToPrimary( mString );
+ return (use_primary ? LLView::getWindow()->copyTextToPrimary(mString) : LLView::getWindow()->copyTextToClipboard(mString));
}
-
-const LLWString& LLClipboard::getPastePrimaryWString( LLUUID* source_id )
+// Copy the System clipboard to the output string.
+// Manage the LL Clipboard / System clipboard consistency
+bool LLClipboard::pasteFromClipboard(LLWString &dst, bool use_primary)
{
- if( mSourceID.notNull() )
- {
- LLWString temp_string;
- LLView::getWindow()->pasteTextFromPrimary(temp_string);
-
- if( temp_string != mString )
- {
- mSourceID.setNull();
- mString = temp_string;
- }
- }
- else
- {
- LLView::getWindow()->pasteTextFromPrimary(mString);
- }
-
- if( source_id )
+ bool res = (use_primary ? LLView::getWindow()->pasteTextFromPrimary(dst) : LLView::getWindow()->pasteTextFromClipboard(dst));
+ if (res)
{
- *source_id = mSourceID;
+ mString = dst;
}
-
- return mString;
+ return res;
}
-
-BOOL LLClipboard::canPastePrimaryString() const
+// Return true if there's something on the System clipboard
+bool LLClipboard::isTextAvailable(bool use_primary) const
{
- return LLView::getWindow()->isPrimaryTextAvailable();
+ return (use_primary ? LLView::getWindow()->isPrimaryTextAvailable() : LLView::getWindow()->isClipboardTextAvailable());
}
-void LLClipboard::setSourceObject(const LLUUID& source_id, LLAssetType::EType type)
-{
- mSourceItem = new LLInventoryObject (source_id, LLUUID::null, type, "");
-}
diff --git a/indra/llui/llclipboard.h b/indra/llui/llclipboard.h
index 9371b94284..fd2e7610df 100644
--- a/indra/llui/llclipboard.h
+++ b/indra/llui/llclipboard.h
@@ -27,46 +27,68 @@
#ifndef LL_LLCLIPBOARD_H
#define LL_LLCLIPBOARD_H
+#include <boost/function.hpp>
#include "llstring.h"
#include "lluuid.h"
#include "stdenums.h"
+#include "llsingleton.h"
+#include "llassettype.h"
#include "llinventory.h"
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLClipboard
+//
+// This class is used to cut/copy/paste text strings and inventory items around
+// the world. Use LLClipboard::instance().method() to use its methods.
+// Note that the text and UUIDs are loosely coupled only. There are few cases
+// where the viewer does offer a serialized version of the UUID on the clipboard.
+// In those case, the text is overridden when copying/cutting the item.
+// In all other cases, the text and the UUIDs are very much independent.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLClipboard
+class LLClipboard : public LLSingleton<LLClipboard>
{
public:
LLClipboard();
~LLClipboard();
+
+ // Clears the clipboard
+ void reset();
+ // Returns the state of the clipboard so client can know if it has been modified (comparing with tracked state)
+ int getGeneration() const { return mGeneration; }
- /* We support two flavors of clipboard. The default is the explicitly
- copy-and-pasted clipboard. The second is the so-called 'primary' clipboard
- which is implicitly copied upon selection on platforms which expect this
- (i.e. X11/Linux). */
-
- void copyFromSubstring(const LLWString &copy_from, S32 pos, S32 len, const LLUUID& source_id = LLUUID::null );
- void copyFromString(const LLWString &copy_from, const LLUUID& source_id = LLUUID::null );
- BOOL canPasteString() const;
- const LLWString& getPasteWString(LLUUID* source_id = NULL);
+ // Text strings management:
+ // ------------------------
+ // We support two flavors of text clipboards. The default is the explicitly
+ // copy-and-pasted clipboard. The second is the so-called 'primary' clipboard
+ // which is implicitly copied upon selection on platforms which expect this
+ // (i.e. X11/Linux, Mac).
+ bool copyToClipboard(const LLWString& src, S32 pos, S32 len, bool use_primary = false);
+ bool addToClipboard(const LLWString& src, S32 pos, S32 len, bool use_primary = false);
+ bool pasteFromClipboard(LLWString& dst, bool use_primary = false);
+ bool isTextAvailable(bool use_primary = false) const;
+
+ // Object list management:
+ // -----------------------
+ // Clears and adds one single object to the clipboard
+ bool copyToClipboard(const LLUUID& src, const LLAssetType::EType type = LLAssetType::AT_NONE);
+ // Adds one object to the current list of objects on the clipboard
+ bool addToClipboard(const LLUUID& src, const LLAssetType::EType type = LLAssetType::AT_NONE);
+ // Gets a copy of the objects on the clipboard
+ bool pasteFromClipboard(std::vector<LLUUID>& inventory_objects) const;
+
+ bool hasContents() const; // True if the clipboard has pasteable objects
+ bool isOnClipboard(const LLUUID& object) const; // True if the input object uuid is on the clipboard
- void copyFromPrimarySubstring(const LLWString &copy_from, S32 pos, S32 len, const LLUUID& source_id = LLUUID::null );
- BOOL canPastePrimaryString() const;
- const LLWString& getPastePrimaryWString(LLUUID* source_id = NULL);
+ bool isCutMode() const { return mCutMode; }
+ void setCutMode(bool mode) { mCutMode = mode; mGeneration++; }
- // Support clipboard for object known only by their uuid and asset type
- void setSourceObject(const LLUUID& source_id, LLAssetType::EType type);
- const LLInventoryObject* getSourceObject() { return mSourceItem; }
-
private:
- LLUUID mSourceID;
- LLWString mString;
- LLInventoryObject* mSourceItem;
+ std::vector<LLUUID> mObjects; // Objects on the clipboard. Can be empty while mString contains something licit (e.g. text from chat)
+ LLWString mString; // The text string. If mObjects is not empty, this string is reflecting them (UUIDs for the moment) if the asset type is knowable.
+ bool mCutMode; // This is a convenience flag for the viewer.
+ int mGeneration; // Incremented when the clipboard changes so that interested parties can check for changes on the clipboard.
};
-
-// Global singleton
-extern LLClipboard gClipboard;
-
-
#endif // LL_LLCLIPBOARD_H
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 22b20969fc..8ca1e685a9 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -68,10 +68,10 @@ namespace LLInitParam
{
void TypeValues<LLFloaterEnums::EOpenPositioning>::declareValues()
{
- declare("none", LLFloaterEnums::OPEN_POSITIONING_NONE);
- declare("cascading", LLFloaterEnums::OPEN_POSITIONING_CASCADING);
- declare("centered", LLFloaterEnums::OPEN_POSITIONING_CENTERED);
- declare("specified", LLFloaterEnums::OPEN_POSITIONING_SPECIFIED);
+ declare("relative", LLFloaterEnums::POSITIONING_RELATIVE);
+ declare("cascading", LLFloaterEnums::POSITIONING_CASCADING);
+ declare("centered", LLFloaterEnums::POSITIONING_CENTERED);
+ declare("specified", LLFloaterEnums::POSITIONING_SPECIFIED);
}
}
@@ -177,9 +177,7 @@ LLFloater::Params::Params()
save_visibility("save_visibility", false),
can_dock("can_dock", false),
show_title("show_title", true),
- open_positioning("open_positioning", LLFloaterEnums::OPEN_POSITIONING_NONE),
- specified_left("specified_left"),
- specified_bottom("specified_bottom"),
+ positioning("positioning", LLFloaterEnums::POSITIONING_RELATIVE),
header_height("header_height", 0),
legacy_header_height("legacy_header_height", 0),
close_image("close_image"),
@@ -249,9 +247,7 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)
mCanClose(p.can_close),
mDragOnLeft(p.can_drag_on_left),
mResizable(p.can_resize),
- mOpenPositioning(p.open_positioning),
- mSpecifiedLeft(p.specified_left),
- mSpecifiedBottom(p.specified_bottom),
+ mPositioning(p.positioning),
mMinWidth(p.min_width),
mMinHeight(p.min_height),
mHeaderHeight(p.header_height),
@@ -547,10 +543,18 @@ LLFloater::~LLFloater()
void LLFloater::storeRectControl()
{
- if( mRectControl.size() > 1 )
+ if (!mRectControl.empty())
{
getControlGroup()->setRect( mRectControl, getRect() );
}
+ if (!mPosXControl.empty() && mPositioning == LLFloaterEnums::POSITIONING_RELATIVE)
+ {
+ getControlGroup()->setF32( mPosXControl, mPosition.mX );
+ }
+ if (!mPosYControl.empty() && mPositioning == LLFloaterEnums::POSITIONING_RELATIVE)
+ {
+ getControlGroup()->setF32( mPosYControl, mPosition.mY );
+ }
}
void LLFloater::storeVisibilityControl()
@@ -569,23 +573,6 @@ void LLFloater::storeDockStateControl()
}
}
-LLRect LLFloater::getSavedRect() const
-{
- LLRect rect;
-
- if (mRectControl.size() > 1)
- {
- rect = getControlGroup()->getRect(mRectControl);
- }
-
- return rect;
-}
-
-bool LLFloater::hasSavedRect() const
-{
- return !getSavedRect().isEmpty();
-}
-
// static
std::string LLFloater::getControlName(const std::string& name, const LLSD& key)
{
@@ -863,7 +850,7 @@ void LLFloater::applyControlsAndPosition(LLFloater* other)
{
if (!applyRectControl())
{
- applyPositioning(other);
+ applyPositioning(other, true);
}
}
}
@@ -872,29 +859,68 @@ bool LLFloater::applyRectControl()
{
bool saved_rect = false;
+ LLRect screen_rect = calcScreenRect();
+ mPosition = LLCoordGL(screen_rect.getCenterX(), screen_rect.getCenterY()).convert();
+
LLFloater* last_in_group = LLFloaterReg::getLastFloaterInGroup(mInstanceName);
if (last_in_group && last_in_group != this)
{
// other floaters in our group, position ourselves relative to them and don't save the rect
mRectControl.clear();
- mOpenPositioning = LLFloaterEnums::OPEN_POSITIONING_CASCADE_GROUP;
+ mPositioning = LLFloaterEnums::POSITIONING_CASCADE_GROUP;
}
- else if (mRectControl.size() > 1)
+ else
{
- // If we have a saved rect, use it
- const LLRect& rect = getControlGroup()->getRect(mRectControl);
- saved_rect = rect.notEmpty();
- if (saved_rect)
+ bool rect_specified = false;
+ if (!mRectControl.empty())
{
- setOrigin(rect.mLeft, rect.mBottom);
-
- if (mResizable)
+ // If we have a saved rect, use it
+ const LLRect& rect = getControlGroup()->getRect(mRectControl);
+ if (rect.notEmpty()) saved_rect = true;
+ if (saved_rect)
{
- reshape(llmax(mMinWidth, rect.getWidth()), llmax(mMinHeight, rect.getHeight()));
+ setOrigin(rect.mLeft, rect.mBottom);
+
+ if (mResizable)
+ {
+ reshape(llmax(mMinWidth, rect.getWidth()), llmax(mMinHeight, rect.getHeight()));
+ }
+ mPositioning = LLFloaterEnums::POSITIONING_RELATIVE;
+ LLRect screen_rect = calcScreenRect();
+ mPosition = LLCoordGL(screen_rect.getCenterX(), screen_rect.getCenterY()).convert();
+ rect_specified = true;
}
}
+
+ LLControlVariablePtr x_control = getControlGroup()->getControl(mPosXControl);
+ LLControlVariablePtr y_control = getControlGroup()->getControl(mPosYControl);
+ if (x_control.notNull()
+ && y_control.notNull()
+ && !x_control->isDefault()
+ && !y_control->isDefault())
+ {
+ mPosition.mX = x_control->getValue().asReal();
+ mPosition.mY = y_control->getValue().asReal();
+ mPositioning = LLFloaterEnums::POSITIONING_RELATIVE;
+ applyRelativePosition();
+
+ saved_rect = true;
+ }
+
+ // remember updated position
+ if (rect_specified)
+ {
+ storeRectControl();
+ }
}
+ if (saved_rect)
+ {
+ // propagate any derived positioning data back to settings file
+ storeRectControl();
+ }
+
+
return saved_rect;
}
@@ -911,50 +937,56 @@ bool LLFloater::applyDockState()
return docked;
}
-void LLFloater::applyPositioning(LLFloater* other)
+void LLFloater::applyPositioning(LLFloater* other, bool on_open)
{
// Otherwise position according to the positioning code
- switch (mOpenPositioning)
+ switch (mPositioning)
{
- case LLFloaterEnums::OPEN_POSITIONING_CENTERED:
+ case LLFloaterEnums::POSITIONING_CENTERED:
center();
break;
- case LLFloaterEnums::OPEN_POSITIONING_SPECIFIED:
- {
- // Translate relative to snap rect
- setOrigin(mSpecifiedLeft, mSpecifiedBottom);
- const LLRect& snap_rect = gFloaterView->getSnapRect();
- translate(snap_rect.mLeft, snap_rect.mBottom);
- translateIntoRect(snap_rect);
- }
+ case LLFloaterEnums::POSITIONING_SPECIFIED:
break;
- case LLFloaterEnums::OPEN_POSITIONING_CASCADE_GROUP:
- case LLFloaterEnums::OPEN_POSITIONING_CASCADING:
- if (other != NULL && other != this)
+ case LLFloaterEnums::POSITIONING_CASCADING:
+ if (!on_open)
{
- stackWith(*other);
+ applyRelativePosition();
}
- else
+ // fall through
+ case LLFloaterEnums::POSITIONING_CASCADE_GROUP:
+ if (on_open)
{
- static const U32 CASCADING_FLOATER_HOFFSET = 0;
- static const U32 CASCADING_FLOATER_VOFFSET = 0;
+ if (other != NULL && other != this)
+ {
+ stackWith(*other);
+ }
+ else
+ {
+ static const U32 CASCADING_FLOATER_HOFFSET = 0;
+ static const U32 CASCADING_FLOATER_VOFFSET = 0;
- const LLRect& snap_rect = gFloaterView->getSnapRect();
+ const LLRect& snap_rect = gFloaterView->getSnapRect();
- const S32 horizontal_offset = CASCADING_FLOATER_HOFFSET;
- const S32 vertical_offset = snap_rect.getHeight() - CASCADING_FLOATER_VOFFSET;
+ const S32 horizontal_offset = CASCADING_FLOATER_HOFFSET;
+ const S32 vertical_offset = snap_rect.getHeight() - CASCADING_FLOATER_VOFFSET;
- S32 rect_height = getRect().getHeight();
- setOrigin(horizontal_offset, vertical_offset - rect_height);
+ S32 rect_height = getRect().getHeight();
+ setOrigin(horizontal_offset, vertical_offset - rect_height);
- translate(snap_rect.mLeft, snap_rect.mBottom);
- translateIntoRect(snap_rect);
+ translate(snap_rect.mLeft, snap_rect.mBottom);
+ }
+ setFollows(FOLLOWS_TOP | FOLLOWS_LEFT);
}
break;
- case LLFloaterEnums::OPEN_POSITIONING_NONE:
+ case LLFloaterEnums::POSITIONING_RELATIVE:
+ {
+ applyRelativePosition();
+
+ break;
+ }
default:
// Do nothing
break;
@@ -1072,7 +1104,9 @@ void LLFloater::handleReshape(const LLRect& new_rect, bool by_user)
if (by_user && !isMinimized())
{
storeRectControl();
- mOpenPositioning = LLFloaterEnums::OPEN_POSITIONING_NONE;
+ mPositioning = LLFloaterEnums::POSITIONING_RELATIVE;
+ LLRect screen_rect = calcScreenRect();
+ mPosition = LLCoordGL(screen_rect.getCenterX(), screen_rect.getCenterY()).convert();
}
// if not minimized, adjust all snapped dependents to new shape
@@ -1250,6 +1284,7 @@ void LLFloater::setMinimized(BOOL minimize)
// Reshape *after* setting mMinimized
reshape( mExpandedRect.getWidth(), mExpandedRect.getHeight(), TRUE );
+ applyPositioning(NULL, false);
}
make_ui_sound("UISndWindowClose");
@@ -1590,7 +1625,7 @@ void LLFloater::setDocked(bool docked, bool pop_on_undock)
if (mDocked)
{
setMinimized(FALSE);
- mOpenPositioning = LLFloaterEnums::OPEN_POSITIONING_NONE;
+ mPositioning = LLFloaterEnums::POSITIONING_RELATIVE;
}
updateTitleButtons();
@@ -1624,7 +1659,7 @@ void LLFloater::onClickTearOff(LLFloater* self)
self->openFloater(self->getKey());
// only force position for floaters that don't have that data saved
- if (self->mRectControl.size() <= 1)
+ if (self->mRectControl.empty())
{
new_rect.setLeftTopAndSize(host_floater->getRect().mLeft + 5, host_floater->getRect().mTop - floater_header_size - 5, self->getRect().getWidth(), self->getRect().getHeight());
self->setRect(new_rect);
@@ -2164,19 +2199,14 @@ LLFloaterView::LLFloaterView (const Params& p)
mSnapOffsetBottom(0),
mSnapOffsetRight(0)
{
+ mSnapView = getHandle();
}
// By default, adjust vertical.
void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent)
{
- S32 old_right = mLastSnapRect.mRight;
- S32 old_top = mLastSnapRect.mTop;
-
LLView::reshape(width, height, called_from_parent);
- S32 new_right = getSnapRect().mRight;
- S32 new_top = getSnapRect().mTop;
-
mLastSnapRect = getSnapRect();
for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
@@ -2189,35 +2219,39 @@ void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent)
continue;
}
- if (!floaterp->isMinimized())
+ if (!floaterp->isMinimized() && floaterp->getCanDrag())
{
- LLRect r = floaterp->getRect();
+ LLRect old_rect = floaterp->getRect();
+ floaterp->applyPositioning(NULL, false);
+ LLRect new_rect = floaterp->getRect();
- // Compute absolute distance from each edge of screen
- S32 left_offset = llabs(r.mLeft - 0);
- S32 right_offset = llabs(old_right - r.mRight);
+ //LLRect r = floaterp->getRect();
- S32 top_offset = llabs(old_top - r.mTop);
- S32 bottom_offset = llabs(r.mBottom - 0);
+ //// Compute absolute distance from each edge of screen
+ //S32 left_offset = llabs(r.mLeft - 0);
+ //S32 right_offset = llabs(old_right - r.mRight);
- S32 translate_x = 0;
- S32 translate_y = 0;
+ //S32 top_offset = llabs(old_top - r.mTop);
+ //S32 bottom_offset = llabs(r.mBottom - 0);
- if (left_offset > right_offset)
- {
- translate_x = new_right - old_right;
- }
+ S32 translate_x = new_rect.mLeft - old_rect.mLeft;
+ S32 translate_y = new_rect.mBottom - old_rect.mBottom;
- if (top_offset < bottom_offset)
- {
- translate_y = new_top - old_top;
- }
+ //if (left_offset > right_offset)
+ //{
+ // translate_x = new_right - old_right;
+ //}
+
+ //if (top_offset < bottom_offset)
+ //{
+ // translate_y = new_top - old_top;
+ //}
// don't reposition immovable floaters
- if (floaterp->getCanDrag())
- {
- floaterp->translate(translate_x, translate_y);
- }
+ //if (floaterp->getCanDrag())
+ //{
+ // floaterp->translate(translate_x, translate_y);
+ //}
BOOST_FOREACH(LLHandle<LLFloater> dependent_floater, floaterp->mDependents)
{
if (dependent_floater.get())
@@ -2913,9 +2947,11 @@ void LLFloater::setInstanceName(const std::string& name)
std::string ctrl_name = getControlName(mInstanceName, mKey);
// save_rect and save_visibility only apply to registered floaters
- if (!mRectControl.empty())
+ if (mSaveRect)
{
mRectControl = LLFloaterReg::declareRectControl(ctrl_name);
+ mPosXControl = LLFloaterReg::declarePosXControl(ctrl_name);
+ mPosYControl = LLFloaterReg::declarePosYControl(ctrl_name);
}
if (!mVisibilityControl.empty())
{
@@ -2972,7 +3008,10 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
LLPanel::initFromParams(p);
// override any follows flags
- setFollows(FOLLOWS_NONE);
+ if (mPositioning != LLFloaterEnums::POSITIONING_SPECIFIED)
+ {
+ setFollows(FOLLOWS_NONE);
+ }
mTitle = p.title;
mShortTitle = p.short_title;
@@ -2991,14 +3030,9 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
mSingleInstance = p.single_instance;
mReuseInstance = p.reuse_instance.isProvided() ? p.reuse_instance : p.single_instance;
- mOpenPositioning = p.open_positioning;
- mSpecifiedLeft = p.specified_left;
- mSpecifiedBottom = p.specified_bottom;
+ mPositioning = p.positioning;
- if (p.save_rect && mRectControl.empty())
- {
- mRectControl = "t"; // flag to build mRectControl name once mInstanceName is set
- }
+ mSaveRect = p.save_rect;
if (p.save_visibility)
{
mVisibilityControl = "t"; // flag to build mVisibilityControl name once mInstanceName is set
@@ -3113,7 +3147,7 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
params.rect.left.set(0);
}
params.from_xui = true;
- applyXUILayout(params, parent);
+ applyXUILayout(params, parent, parent == gFloaterView ? gFloaterView->getSnapRect() : parent->getLocalRect());
initFromParams(params);
initFloater(params);
@@ -3272,8 +3306,27 @@ void LLFloater::stackWith(LLFloater& other)
next_rect.setLeftTopAndSize(next_rect.mLeft, next_rect.mTop, getRect().getWidth(), getRect().getHeight());
setShape(next_rect);
+
+ if (!other.getHost())
+ {
+ other.mPositioning = LLFloaterEnums::POSITIONING_CASCADE_GROUP;
+ other.setFollows(FOLLOWS_LEFT | FOLLOWS_TOP);
+ }
}
+void LLFloater::applyRelativePosition()
+{
+ LLRect snap_rect = gFloaterView->getSnapRect();
+ LLRect floater_view_screen_rect = gFloaterView->calcScreenRect();
+ snap_rect.translate(floater_view_screen_rect.mLeft, floater_view_screen_rect.mBottom);
+ LLRect floater_screen_rect = calcScreenRect();
+
+ LLCoordGL new_center = mPosition.convert();
+ LLCoordGL cur_center(floater_screen_rect.getCenterX(), floater_screen_rect.getCenterY());
+ translate(new_center.mX - cur_center.mX, new_center.mY - cur_center.mY);
+}
+
+
LLCoordFloater::LLCoordFloater(F32 x, F32 y, LLFloater& floater)
: coord_t((S32)x, (S32)y)
{
@@ -3306,9 +3359,12 @@ bool LLCoordFloater::operator==(const LLCoordFloater& other) const
LLCoordCommon LL_COORD_FLOATER::convertToCommon() const
{
- const LLCoordFloater& self = static_cast<const LLCoordFloater&>(*this);
+ const LLCoordFloater& self = static_cast<const LLCoordFloater&>(LLCoordFloater::getTypedCoords(*this));
LLRect snap_rect = gFloaterView->getSnapRect();
+ LLRect floater_view_screen_rect = gFloaterView->calcScreenRect();
+ snap_rect.translate(floater_view_screen_rect.mLeft, floater_view_screen_rect.mBottom);
+
LLFloater* floaterp = mFloater.get();
S32 floater_width = floaterp ? floaterp->getRect().getWidth() : 0;
S32 floater_height = floaterp ? floaterp->getRect().getHeight() : 0;
@@ -3348,8 +3404,12 @@ LLCoordCommon LL_COORD_FLOATER::convertToCommon() const
void LL_COORD_FLOATER::convertFromCommon(const LLCoordCommon& from)
{
- LLCoordFloater& self = static_cast<LLCoordFloater&>(*this);
+ LLCoordFloater& self = static_cast<LLCoordFloater&>(LLCoordFloater::getTypedCoords(*this));
LLRect snap_rect = gFloaterView->getSnapRect();
+ LLRect floater_view_screen_rect = gFloaterView->calcScreenRect();
+ snap_rect.translate(floater_view_screen_rect.mLeft, floater_view_screen_rect.mBottom);
+
+
LLFloater* floaterp = mFloater.get();
S32 floater_width = floaterp ? floaterp->getRect().getWidth() : 0;
S32 floater_height = floaterp ? floaterp->getRect().getHeight() : 0;
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index a7cc9ae961..64d6dcea04 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -64,12 +64,12 @@ namespace LLFloaterEnums
{
enum EOpenPositioning
{
- OPEN_POSITIONING_NONE,
- OPEN_POSITIONING_CASCADING,
- OPEN_POSITIONING_CASCADE_GROUP,
- OPEN_POSITIONING_CENTERED,
- OPEN_POSITIONING_SPECIFIED,
- OPEN_POSITIONING_COUNT
+ POSITIONING_RELATIVE,
+ POSITIONING_CASCADING,
+ POSITIONING_CASCADE_GROUP,
+ POSITIONING_CENTERED,
+ POSITIONING_SPECIFIED,
+ POSITIONING_COUNT
};
}
@@ -163,10 +163,7 @@ public:
can_dock,
show_title;
- Optional<LLFloaterEnums::EOpenPositioning> open_positioning;
- Optional<S32> specified_left;
- Optional<S32> specified_bottom;
-
+ Optional<LLFloaterEnums::EOpenPositioning> positioning;
Optional<S32> header_height,
legacy_header_height; // HACK see initFromXML()
@@ -272,8 +269,6 @@ public:
BOOL isResizable() const { return mResizable; }
void setResizeLimits( S32 min_width, S32 min_height );
void getResizeLimits( S32* min_width, S32* min_height ) { *min_width = mMinWidth; *min_height = mMinHeight; }
- LLRect getSavedRect() const;
- bool hasSavedRect() const;
static std::string getControlName(const std::string& name, const LLSD& key);
static LLControlGroup* getControlGroup();
@@ -355,7 +350,7 @@ public:
void enableResizeCtrls(bool enable, bool width = true, bool height = true);
- bool isPositioning(LLFloaterEnums::EOpenPositioning p) const { return (p == mOpenPositioning); }
+ bool isPositioning(LLFloaterEnums::EOpenPositioning p) const { return (p == mPositioning); }
protected:
void applyControlsAndPosition(LLFloater* other);
@@ -363,7 +358,9 @@ protected:
virtual bool applyRectControl();
bool applyDockState();
- void applyPositioning(LLFloater* other);
+ void applyPositioning(LLFloater* other, bool on_open);
+ void applyRelativePosition();
+
void storeRectControl();
void storeVisibilityControl();
void storeDockStateControl();
@@ -427,7 +424,10 @@ public:
commit_signal_t* mMinimizeSignal;
protected:
+ bool mSaveRect;
std::string mRectControl;
+ std::string mPosXControl;
+ std::string mPosYControl;
std::string mVisibilityControl;
std::string mDocStateControl;
LLSD mKey; // Key used for retrieving instances; set (for now) by LLFLoaterReg
@@ -453,9 +453,7 @@ private:
BOOL mDragOnLeft;
BOOL mResizable;
- LLFloaterEnums::EOpenPositioning mOpenPositioning;
- S32 mSpecifiedLeft;
- S32 mSpecifiedBottom;
+ LLFloaterEnums::EOpenPositioning mPositioning;
LLCoordFloater mPosition;
S32 mMinWidth;
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index e144b68f5e..9115eb7174 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -96,7 +96,9 @@ LLFloater* LLFloaterReg::getLastFloaterCascading()
{
LLFloater* inst = *iter;
- if (inst->getVisible() && inst->isPositioning(LLFloaterEnums::OPEN_POSITIONING_CASCADING))
+ if (inst->getVisible()
+ && (inst->isPositioning(LLFloaterEnums::POSITIONING_CASCADING)
+ || inst->isPositioning(LLFloaterEnums::POSITIONING_CASCADE_GROUP)))
{
if (candidate_rect.mTop > inst->getRect().mTop)
{
@@ -358,9 +360,7 @@ void LLFloaterReg::restoreVisibleInstances()
//static
std::string LLFloaterReg::getRectControlName(const std::string& name)
{
- std::string res = std::string("floater_rect_") + name;
- LLStringUtil::replaceChar( res, ' ', '_' );
- return res;
+ return std::string("floater_rect_") + getBaseControlName(name);
}
//static
@@ -368,19 +368,48 @@ std::string LLFloaterReg::declareRectControl(const std::string& name)
{
std::string controlname = getRectControlName(name);
LLFloater::getControlGroup()->declareRect(controlname, LLRect(),
- llformat("Window Position and Size for %s", name.c_str()),
+ llformat("Window Size for %s", name.c_str()),
TRUE);
return controlname;
}
+std::string LLFloaterReg::declarePosXControl(const std::string& name)
+{
+ std::string controlname = std::string("floater_pos_") + getBaseControlName(name) + "_x";
+ LLFloater::getControlGroup()->declareF32(controlname,
+ 10.f,
+ llformat("Window X Position for %s", name.c_str()),
+ TRUE);
+ return controlname;
+}
+
+std::string LLFloaterReg::declarePosYControl(const std::string& name)
+{
+ std::string controlname = std::string("floater_pos_") + getBaseControlName(name) + "_y";
+ LLFloater::getControlGroup()->declareF32(controlname,
+ 10.f,
+ llformat("Window Y Position for %s", name.c_str()),
+ TRUE);
+
+ return controlname;
+}
+
+
//static
std::string LLFloaterReg::getVisibilityControlName(const std::string& name)
{
- std::string res = std::string("floater_vis_") + name;
+ return std::string("floater_vis_") + getBaseControlName(name);
+}
+
+//static
+std::string LLFloaterReg::getBaseControlName(const std::string& name)
+{
+ std::string res(name);
LLStringUtil::replaceChar( res, ' ', '_' );
return res;
}
+
//static
std::string LLFloaterReg::declareVisibilityControl(const std::string& name)
{
diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h
index 534cf8b40a..a1e1f8a988 100644
--- a/indra/llui/llfloaterreg.h
+++ b/indra/llui/llfloaterreg.h
@@ -115,9 +115,11 @@ public:
// Control Variables
static std::string getRectControlName(const std::string& name);
static std::string declareRectControl(const std::string& name);
+ static std::string declarePosXControl(const std::string& name);
+ static std::string declarePosYControl(const std::string& name);
static std::string getVisibilityControlName(const std::string& name);
static std::string declareVisibilityControl(const std::string& name);
-
+ static std::string getBaseControlName(const std::string& name);
static std::string declareDockStateControl(const std::string& name);
static std::string getDockStateControlName(const std::string& name);
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index ae262f794e..4c730286da 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -113,7 +113,26 @@ S32 LLLayoutPanel::getLayoutDim() const
? getRect().getWidth()
: getRect().getHeight()));
}
-
+
+S32 LLLayoutPanel::getTargetDim() const
+{
+ return mTargetDim;
+}
+
+void LLLayoutPanel::setTargetDim(S32 value)
+{
+ LLRect new_rect(getRect());
+ if (mOrientation == LLLayoutStack::HORIZONTAL)
+ {
+ new_rect.mRight = new_rect.mLeft + value;
+ }
+ else
+ {
+ new_rect.mTop = new_rect.mBottom + value;
+ }
+ setShape(new_rect, true);
+}
+
S32 LLLayoutPanel::getVisibleDim() const
{
F32 min_dim = getRelevantMinDim();
@@ -172,12 +191,15 @@ void LLLayoutPanel::handleReshape(const LLRect& new_rect, bool by_user)
LLLayoutStack* stackp = dynamic_cast<LLLayoutStack*>(getParent());
if (stackp)
{
- stackp->mNeedsLayout = true;
if (by_user)
- {
- // tell layout stack to account for new shape
+ { // tell layout stack to account for new shape
+
+ // make sure that panels have already been auto resized
+ stackp->updateLayout();
+ // now apply requested size to panel
stackp->updatePanelRect(this, new_rect);
}
+ stackp->mNeedsLayout = true;
}
LLPanel::handleReshape(new_rect, by_user);
}
@@ -241,7 +263,6 @@ void LLLayoutStack::draw()
drawChild(panelp, 0, 0, !clip_rect.isEmpty());
}
}
- mAnimatedThisFrame = false;
}
void LLLayoutStack::removeChild(LLView* view)
@@ -310,7 +331,7 @@ void LLLayoutStack::updateLayout()
if (!mNeedsLayout) return;
- bool animation_in_progress = animatePanels();
+ bool continue_animating = animatePanels();
F32 total_visible_fraction = 0.f;
S32 space_to_distribute = (mOrientation == HORIZONTAL)
? getRect().getWidth()
@@ -415,7 +436,7 @@ void LLLayoutStack::updateLayout()
// 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;
+ mNeedsLayout = continue_animating;
} // end LLLayoutStack::updateLayout
LLLayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
@@ -488,6 +509,7 @@ void LLLayoutStack::updateClass()
for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
it->updateLayout();
+ it->mAnimatedThisFrame = false;
}
}
@@ -557,7 +579,7 @@ void LLLayoutStack::normalizeFractionalSizes()
bool LLLayoutStack::animatePanels()
{
- bool animation_in_progress = false;
+ bool continue_animating = false;
//
// animate visibility
@@ -577,14 +599,15 @@ bool LLLayoutStack::animatePanels()
}
}
- animation_in_progress = true;
+ mAnimatedThisFrame = true;
+ continue_animating = true;
}
else
{
if (panelp->mVisibleAmt != 1.f)
{
panelp->mVisibleAmt = 1.f;
- animation_in_progress = true;
+ mAnimatedThisFrame = true;
}
}
}
@@ -601,14 +624,15 @@ bool LLLayoutStack::animatePanels()
}
}
- animation_in_progress = true;
+ continue_animating = true;
+ mAnimatedThisFrame = true;
}
else
{
if (panelp->mVisibleAmt != 0.f)
{
panelp->mVisibleAmt = 0.f;
- animation_in_progress = true;
+ mAnimatedThisFrame = true;
}
}
}
@@ -616,22 +640,31 @@ bool LLLayoutStack::animatePanels()
F32 collapse_state = panelp->mCollapsed ? 1.f : 0.f;
if (panelp->mCollapseAmt != collapse_state)
{
- if (!mAnimatedThisFrame)
+ if (mAnimate)
{
- panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, collapse_state, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
- }
- animation_in_progress = true;
+ if (!mAnimatedThisFrame)
+ {
+ panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, collapse_state, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
+ }
- if (llabs(panelp->mCollapseAmt - collapse_state) < 0.001f)
+ if (llabs(panelp->mCollapseAmt - collapse_state) < 0.001f)
+ {
+ panelp->mCollapseAmt = collapse_state;
+ }
+
+ mAnimatedThisFrame = true;
+ continue_animating = true;
+ }
+ else
{
panelp->mCollapseAmt = collapse_state;
+ mAnimatedThisFrame = true;
}
}
}
- mAnimatedThisFrame = true;
-
- return animation_in_progress;
+ if (mAnimatedThisFrame) mNeedsLayout = true;
+ return continue_animating;
}
void LLLayoutStack::updatePanelRect( LLLayoutPanel* resized_panel, const LLRect& new_rect )
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index d32caec5f9..648cd5fdce 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -155,6 +155,8 @@ public:
void setVisible(BOOL visible);
S32 getLayoutDim() const;
+ S32 getTargetDim() const;
+ void setTargetDim(S32 value);
S32 getMinDim() const { return llmax(0, mMinDim); }
void setMinDim(S32 value) { mMinDim = value; }
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 7e84814c51..d0fbf4b913 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -1047,7 +1047,7 @@ void LLLineEditor::cut()
// Prepare for possible rollback
LLLineEditorRollback rollback( this );
- gClipboard.copyFromSubstring( mText.getWString(), left_pos, length );
+ LLClipboard::instance().copyToClipboard( mText.getWString(), left_pos, length );
deleteSelection();
// Validate new string and rollback the if needed.
@@ -1078,13 +1078,13 @@ void LLLineEditor::copy()
{
S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
S32 length = llabs( mSelectionStart - mSelectionEnd );
- gClipboard.copyFromSubstring( mText.getWString(), left_pos, length );
+ LLClipboard::instance().copyToClipboard( mText.getWString(), left_pos, length );
}
}
BOOL LLLineEditor::canPaste() const
{
- return !mReadOnly && gClipboard.canPasteString();
+ return !mReadOnly && LLClipboard::instance().isTextAvailable();
}
void LLLineEditor::paste()
@@ -1115,14 +1115,7 @@ void LLLineEditor::pasteHelper(bool is_primary)
if (can_paste_it)
{
LLWString paste;
- if (is_primary)
- {
- paste = gClipboard.getPastePrimaryWString();
- }
- else
- {
- paste = gClipboard.getPasteWString();
- }
+ LLClipboard::instance().pasteFromClipboard(paste, is_primary);
if (!paste.empty())
{
@@ -1209,13 +1202,13 @@ void LLLineEditor::copyPrimary()
{
S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
S32 length = llabs( mSelectionStart - mSelectionEnd );
- gClipboard.copyFromPrimarySubstring( mText.getWString(), left_pos, length );
+ LLClipboard::instance().copyToClipboard( mText.getWString(), left_pos, length, true);
}
}
BOOL LLLineEditor::canPastePrimary() const
{
- return !mReadOnly && gClipboard.canPastePrimaryString();
+ return !mReadOnly && LLClipboard::instance().isTextAvailable(true);
}
void LLLineEditor::updatePrimary()
diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp
index 20bed050ad..9b7e30bb04 100644
--- a/indra/llui/llscrollcontainer.cpp
+++ b/indra/llui/llscrollcontainer.cpp
@@ -389,10 +389,17 @@ void LLScrollContainer::calcVisibleSize( S32 *visible_width, S32 *visible_height
{
*show_h_scrollbar = TRUE;
*visible_height -= scrollbar_size;
- // Note: Do *not* recompute *show_v_scrollbar here because with
- // the (- scrollbar_size) we just did we will always add a vertical scrollbar
- // even if the height of the items is actually less than the visible size.
- // Fear not though: there's enough calcVisibleSize() calls to add a vertical slider later.
+
+ // The view inside the scroll container should not be extended
+ // to container's full height to ensure the correct computation
+ // of *show_v_scrollbar after subtracting horizontal scrollbar_size.
+
+ // Must retest now that visible_height has changed
+ if( !*show_v_scrollbar && ((doc_height - *visible_height) > 1) )
+ {
+ *show_v_scrollbar = TRUE;
+ *visible_width -= scrollbar_size;
+ }
}
}
}
diff --git a/indra/llui/llscrollcontainer.h b/indra/llui/llscrollcontainer.h
index 3aa79cc255..d87c95b3d7 100644
--- a/indra/llui/llscrollcontainer.h
+++ b/indra/llui/llscrollcontainer.h
@@ -91,7 +91,7 @@ public:
void setReserveScrollCorner( BOOL b ) { mReserveScrollCorner = b; }
LLRect getVisibleContentRect();
LLRect getContentWindowRect();
- const LLRect& getScrolledViewRect() const { return mScrolledView ? mScrolledView->getRect() : LLRect::null; }
+ virtual const LLRect getScrolledViewRect() const { return mScrolledView ? mScrolledView->getRect() : LLRect::null; }
void pageUp(S32 overlap = 0);
void pageDown(S32 overlap = 0);
void goToTop();
@@ -116,6 +116,9 @@ public:
bool autoScroll(S32 x, S32 y);
+protected:
+ LLView* mScrolledView;
+
private:
// internal scrollbar handlers
virtual void scrollHorizontal( S32 new_pos );
@@ -124,7 +127,6 @@ private:
void calcVisibleSize( S32 *visible_width, S32 *visible_height, BOOL* show_h_scrollbar, BOOL* show_v_scrollbar ) const;
LLScrollbar* mScrollbar[SCROLLBAR_COUNT];
- LLView* mScrolledView;
S32 mSize;
BOOL mIsOpaque;
LLUIColor mBackgroundColor;
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index 466fac33ea..b3e1b63db5 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -2504,7 +2504,7 @@ void LLScrollListCtrl::copy()
{
buffer += (*itor)->getContentsCSV() + "\n";
}
- gClipboard.copyFromSubstring(utf8str_to_wstring(buffer), 0, buffer.length());
+ LLClipboard::instance().copyToClipboard(utf8str_to_wstring(buffer), 0, buffer.length());
}
// virtual
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 3409b6817d..9720dded6c 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -1332,7 +1332,7 @@ void LLTextEditor::cut()
}
S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
S32 length = llabs( mSelectionStart - mSelectionEnd );
- gClipboard.copyFromSubstring( getWText(), left_pos, length, mSourceID );
+ LLClipboard::instance().copyToClipboard( getWText(), left_pos, length);
deleteSelection( FALSE );
onKeyStroke();
@@ -1352,12 +1352,12 @@ void LLTextEditor::copy()
}
S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
S32 length = llabs( mSelectionStart - mSelectionEnd );
- gClipboard.copyFromSubstring(getWText(), left_pos, length, mSourceID);
+ LLClipboard::instance().copyToClipboard(getWText(), left_pos, length);
}
BOOL LLTextEditor::canPaste() const
{
- return !mReadOnly && gClipboard.canPasteString();
+ return !mReadOnly && LLClipboard::instance().isTextAvailable();
}
// paste from clipboard
@@ -1393,16 +1393,8 @@ void LLTextEditor::pasteHelper(bool is_primary)
return;
}
- LLUUID source_id;
LLWString paste;
- if (is_primary)
- {
- paste = gClipboard.getPastePrimaryWString(&source_id);
- }
- else
- {
- paste = gClipboard.getPasteWString(&source_id);
- }
+ LLClipboard::instance().pasteFromClipboard(paste, is_primary);
if (paste.empty())
{
@@ -1475,12 +1467,12 @@ void LLTextEditor::copyPrimary()
}
S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
S32 length = llabs( mSelectionStart - mSelectionEnd );
- gClipboard.copyFromPrimarySubstring(getWText(), left_pos, length, mSourceID);
+ LLClipboard::instance().copyToClipboard(getWText(), left_pos, length, true);
}
BOOL LLTextEditor::canPastePrimary() const
{
- return !mReadOnly && gClipboard.canPastePrimaryString();
+ return !mReadOnly && LLClipboard::instance().isTextAvailable(true);
}
void LLTextEditor::updatePrimary()
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 421166dcd4..54843227b7 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1835,7 +1835,10 @@ const LLCtrlQuery & LLView::getFocusRootsQuery()
void LLView::setShape(const LLRect& new_rect, bool by_user)
{
- handleReshape(new_rect, by_user);
+ if (new_rect != getRect())
+ {
+ handleReshape(new_rect, by_user);
+ }
}
void LLView::handleReshape(const LLRect& new_rect, bool by_user)
@@ -2225,145 +2228,163 @@ static bool get_last_child_rect(LLView* parent, LLRect *rect)
}
//static
-void LLView::applyXUILayout(LLView::Params& p, LLView* parent)
+void LLView::applyXUILayout(LLView::Params& p, LLView* parent, LLRect layout_rect)
{
+ if (!parent) return;
+
const S32 VPAD = 4;
const S32 MIN_WIDGET_HEIGHT = 10;
// *NOTE: This will confuse export of floater/panel coordinates unless
// the default is also "topleft". JC
- if (p.layout().empty() && parent)
+ if (p.layout().empty())
{
p.layout = parent->getLayout();
}
- if (parent)
+ if (layout_rect.isEmpty())
{
- LLRect parent_rect = parent->getLocalRect();
- // overwrite uninitialized rect params, using context
- LLRect default_rect = parent->getLocalRect();
+ layout_rect = parent->getLocalRect();
+ }
- bool layout_topleft = (p.layout() == "topleft");
+ // overwrite uninitialized rect params, using context
+ LLRect default_rect = parent->getLocalRect();
- // convert negative or centered coordinates to parent relative values
- // Note: some of this logic matches the logic in TypedParam<LLRect>::setValueFromBlock()
- if (p.rect.left.isProvided() && p.rect.left < 0) p.rect.left = p.rect.left + parent_rect.getWidth();
- if (p.rect.right.isProvided() && p.rect.right < 0) p.rect.right = p.rect.right + parent_rect.getWidth();
- if (p.rect.bottom.isProvided() && p.rect.bottom < 0) p.rect.bottom = p.rect.bottom + parent_rect.getHeight();
- if (p.rect.top.isProvided() && p.rect.top < 0) p.rect.top = p.rect.top + parent_rect.getHeight();
+ bool layout_topleft = (p.layout() == "topleft");
+ // convert negative or centered coordinates to parent relative values
+ // Note: some of this logic matches the logic in TypedParam<LLRect>::setValueFromBlock()
+ if (p.rect.left.isProvided())
+ {
+ p.rect.left = p.rect.left + ((p.rect.left >= 0) ? layout_rect.mLeft : layout_rect.mRight);
+ }
+ if (p.rect.right.isProvided())
+ {
+ p.rect.right = p.rect.right + ((p.rect.right >= 0) ? layout_rect.mLeft : layout_rect.mRight);
+ }
+ if (p.rect.bottom.isProvided())
+ {
+ p.rect.bottom = p.rect.bottom + ((p.rect.bottom >= 0) ? layout_rect.mBottom : layout_rect.mTop);
if (layout_topleft)
{
//invert top to bottom
- if (p.rect.top.isProvided()) p.rect.top = parent_rect.getHeight() - p.rect.top;
- if (p.rect.bottom.isProvided()) p.rect.bottom = parent_rect.getHeight() - p.rect.bottom;
+ p.rect.bottom = layout_rect.mBottom + layout_rect.mTop - p.rect.bottom;
}
-
- // DEPRECATE: automatically fall back to height of MIN_WIDGET_HEIGHT pixels
- if (!p.rect.height.isProvided() && !p.rect.top.isProvided() && p.rect.height == 0)
+ }
+ if (p.rect.top.isProvided())
+ {
+ p.rect.top = p.rect.top + ((p.rect.top >= 0) ? layout_rect.mBottom : layout_rect.mTop);
+ if (layout_topleft)
{
- p.rect.height = MIN_WIDGET_HEIGHT;
+ //invert top to bottom
+ p.rect.top = layout_rect.mBottom + layout_rect.mTop - p.rect.top;
}
+ }
+
+ // DEPRECATE: automatically fall back to height of MIN_WIDGET_HEIGHT pixels
+ if (!p.rect.height.isProvided() && !p.rect.top.isProvided() && p.rect.height == 0)
+ {
+ p.rect.height = MIN_WIDGET_HEIGHT;
+ }
- default_rect.translate(0, default_rect.getHeight());
+ default_rect.translate(0, default_rect.getHeight());
- // If there was a recently constructed child, use its rectangle
- get_last_child_rect(parent, &default_rect);
+ // If there was a recently constructed child, use its rectangle
+ get_last_child_rect(parent, &default_rect);
- if (layout_topleft)
+ if (layout_topleft)
+ {
+ // Invert the sense of bottom_delta for topleft layout
+ if (p.bottom_delta.isProvided())
{
- // Invert the sense of bottom_delta for topleft layout
- if (p.bottom_delta.isProvided())
- {
- p.bottom_delta = -p.bottom_delta;
- }
- else if (p.top_pad.isProvided())
- {
- p.bottom_delta = -(p.rect.height + p.top_pad);
- }
- else if (p.top_delta.isProvided())
- {
- p.bottom_delta =
- -(p.top_delta + p.rect.height - default_rect.getHeight());
- }
- else if (!p.left_delta.isProvided()
- && !p.left_pad.isProvided())
- {
- // set default position is just below last rect
- p.bottom_delta.set(-(p.rect.height + VPAD), false);
- }
- else
- {
- p.bottom_delta.set(0, false);
- }
-
- // default to same left edge
- if (!p.left_delta.isProvided())
- {
- p.left_delta.set(0, false);
- }
- if (p.left_pad.isProvided())
- {
- // left_pad is based on prior widget's right edge
- p.left_delta.set(p.left_pad + default_rect.getWidth(), false);
- }
-
- default_rect.translate(p.left_delta, p.bottom_delta);
+ p.bottom_delta = -p.bottom_delta;
}
- else
- {
- // set default position is just below last rect
- if (!p.bottom_delta.isProvided())
- {
- p.bottom_delta.set(-(p.rect.height + VPAD), false);
- }
- if (!p.left_delta.isProvided())
- {
- p.left_delta.set(0, false);
- }
- default_rect.translate(p.left_delta, p.bottom_delta);
+ else if (p.top_pad.isProvided())
+ {
+ p.bottom_delta = -(p.rect.height + p.top_pad);
}
-
- // this handles case where *both* x and x_delta are provided
- // ignore x in favor of default x + x_delta
- if (p.bottom_delta.isProvided()) p.rect.bottom.set(0, false);
- if (p.left_delta.isProvided()) p.rect.left.set(0, false);
-
- // selectively apply rectangle defaults, making sure that
- // params are not flagged as having been "provided"
- // as rect params are overconstrained and rely on provided flags
- if (!p.rect.left.isProvided())
+ else if (p.top_delta.isProvided())
{
- p.rect.left.set(default_rect.mLeft, false);
- //HACK: get around the fact that setting a rect param component value won't invalidate the existing rect object value
- p.rect.paramChanged(p.rect.left, true);
+ p.bottom_delta =
+ -(p.top_delta + p.rect.height - default_rect.getHeight());
}
- if (!p.rect.bottom.isProvided())
+ else if (!p.left_delta.isProvided()
+ && !p.left_pad.isProvided())
{
- p.rect.bottom.set(default_rect.mBottom, false);
- p.rect.paramChanged(p.rect.bottom, true);
+ // set default position is just below last rect
+ p.bottom_delta.set(-(p.rect.height + VPAD), false);
}
- if (!p.rect.top.isProvided())
+ else
{
- p.rect.top.set(default_rect.mTop, false);
- p.rect.paramChanged(p.rect.top, true);
+ p.bottom_delta.set(0, false);
}
- if (!p.rect.right.isProvided())
+
+ // default to same left edge
+ if (!p.left_delta.isProvided())
{
- p.rect.right.set(default_rect.mRight, false);
- p.rect.paramChanged(p.rect.right, true);
-
+ p.left_delta.set(0, false);
}
- if (!p.rect.width.isProvided())
+ if (p.left_pad.isProvided())
{
- p.rect.width.set(default_rect.getWidth(), false);
- p.rect.paramChanged(p.rect.width, true);
+ // left_pad is based on prior widget's right edge
+ p.left_delta.set(p.left_pad + default_rect.getWidth(), false);
}
- if (!p.rect.height.isProvided())
+
+ default_rect.translate(p.left_delta, p.bottom_delta);
+ }
+ else
+ {
+ // set default position is just below last rect
+ if (!p.bottom_delta.isProvided())
{
- p.rect.height.set(default_rect.getHeight(), false);
- p.rect.paramChanged(p.rect.height, true);
+ p.bottom_delta.set(-(p.rect.height + VPAD), false);
}
+ if (!p.left_delta.isProvided())
+ {
+ p.left_delta.set(0, false);
+ }
+ default_rect.translate(p.left_delta, p.bottom_delta);
+ }
+
+ // this handles case where *both* x and x_delta are provided
+ // ignore x in favor of default x + x_delta
+ if (p.bottom_delta.isProvided()) p.rect.bottom.set(0, false);
+ if (p.left_delta.isProvided()) p.rect.left.set(0, false);
+
+ // selectively apply rectangle defaults, making sure that
+ // params are not flagged as having been "provided"
+ // as rect params are overconstrained and rely on provided flags
+ if (!p.rect.left.isProvided())
+ {
+ p.rect.left.set(default_rect.mLeft, false);
+ //HACK: get around the fact that setting a rect param component value won't invalidate the existing rect object value
+ p.rect.paramChanged(p.rect.left, true);
+ }
+ if (!p.rect.bottom.isProvided())
+ {
+ p.rect.bottom.set(default_rect.mBottom, false);
+ p.rect.paramChanged(p.rect.bottom, true);
+ }
+ if (!p.rect.top.isProvided())
+ {
+ p.rect.top.set(default_rect.mTop, false);
+ p.rect.paramChanged(p.rect.top, true);
+ }
+ if (!p.rect.right.isProvided())
+ {
+ p.rect.right.set(default_rect.mRight, false);
+ p.rect.paramChanged(p.rect.right, true);
+
+ }
+ if (!p.rect.width.isProvided())
+ {
+ p.rect.width.set(default_rect.getWidth(), false);
+ p.rect.paramChanged(p.rect.width, true);
+ }
+ if (!p.rect.height.isProvided())
+ {
+ p.rect.height.set(default_rect.getHeight(), false);
+ p.rect.paramChanged(p.rect.height, true);
}
}
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index fd19309a56..1c35349510 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -505,7 +505,7 @@ public:
// Set up params after XML load before calling new(),
// usually to adjust layout.
- static void applyXUILayout(Params& p, LLView* parent);
+ static void applyXUILayout(Params& p, LLView* parent, LLRect layout_rect = LLRect());
// For re-export of floaters and panels, convert the coordinate system
// to be top-left based.
diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp
index 6834b34387..5b7424acbb 100644
--- a/indra/llwindow/llwindow.cpp
+++ b/indra/llwindow/llwindow.cpp
@@ -192,6 +192,21 @@ BOOL LLWindow::setSize(LLCoordScreen size)
return setSizeImpl(size);
}
+BOOL LLWindow::setSize(LLCoordWindow size)
+{
+ //HACK: we are inconsistently using minimum window dimensions
+ // in this case, we are constraining the inner "client" rect and other times
+ // we constrain the outer "window" rect
+ // There doesn't seem to be a good way to do this consistently without a bunch of platform
+ // specific code
+ if (!getMaximized())
+ {
+ size.mX = llmax(size.mX, mMinWindowWidth);
+ size.mY = llmax(size.mY, mMinWindowHeight);
+ }
+ return setSizeImpl(size);
+}
+
// virtual
void LLWindow::setMinSize(U32 min_width, U32 min_height, bool enforce_immediately)
@@ -440,7 +455,7 @@ BOOL LLWindowManager::isWindowValid(LLWindow *window)
//coordinate conversion utility funcs that forward to llwindow
LLCoordCommon LL_COORD_TYPE_WINDOW::convertToCommon() const
{
- const LLCoordWindow& self = static_cast<const LLCoordWindow&>(*this);
+ const LLCoordWindow& self = LLCoordWindow::getTypedCoords(*this);
LLWindow* windowp = &(*LLWindow::beginInstances());
LLCoordGL out;
@@ -450,7 +465,7 @@ LLCoordCommon LL_COORD_TYPE_WINDOW::convertToCommon() const
void LL_COORD_TYPE_WINDOW::convertFromCommon(const LLCoordCommon& from)
{
- LLCoordWindow& self = static_cast<LLCoordWindow&>(*this);
+ LLCoordWindow& self = LLCoordWindow::getTypedCoords(*this);
LLWindow* windowp = &(*LLWindow::beginInstances());
LLCoordGL from_gl(from);
@@ -459,7 +474,7 @@ void LL_COORD_TYPE_WINDOW::convertFromCommon(const LLCoordCommon& from)
LLCoordCommon LL_COORD_TYPE_SCREEN::convertToCommon() const
{
- const LLCoordScreen& self = static_cast<const LLCoordScreen&>(*this);
+ const LLCoordScreen& self = LLCoordScreen::getTypedCoords(*this);
LLWindow* windowp = &(*LLWindow::beginInstances());
LLCoordGL out;
@@ -469,7 +484,7 @@ LLCoordCommon LL_COORD_TYPE_SCREEN::convertToCommon() const
void LL_COORD_TYPE_SCREEN::convertFromCommon(const LLCoordCommon& from)
{
- LLCoordScreen& self = static_cast<LLCoordScreen&>(*this);
+ LLCoordScreen& self = LLCoordScreen::getTypedCoords(*this);
LLWindow* windowp = &(*LLWindow::beginInstances());
LLCoordGL from_gl(from);
diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h
index d2971581d2..4da87f4e06 100644
--- a/indra/llwindow/llwindow.h
+++ b/indra/llwindow/llwindow.h
@@ -73,6 +73,7 @@ public:
virtual BOOL getSize(LLCoordWindow *size) = 0;
virtual BOOL setPosition(LLCoordScreen position) = 0;
BOOL setSize(LLCoordScreen size);
+ BOOL setSize(LLCoordWindow size);
virtual void setMinSize(U32 min_width, U32 min_height, bool enforce_immediately = true);
virtual BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) = 0;
virtual BOOL setCursorPosition(LLCoordWindow position) = 0;
@@ -172,6 +173,7 @@ protected:
virtual BOOL canDelete();
virtual BOOL setSizeImpl(LLCoordScreen size) = 0;
+ virtual BOOL setSizeImpl(LLCoordWindow size) = 0;
protected:
LLWindowCallbacks* mCallbacks;
diff --git a/indra/llwindow/llwindowheadless.h b/indra/llwindow/llwindowheadless.h
index d4a778cb85..1f767f4c97 100644
--- a/indra/llwindow/llwindowheadless.h
+++ b/indra/llwindow/llwindowheadless.h
@@ -47,6 +47,7 @@ public:
/*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;};
/*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;};
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size) {return FALSE;};
+ /*virtual*/ BOOL setSizeImpl(LLCoordWindow size) {return FALSE;};
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;};
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;};
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;};
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index c952f8bbcf..32bb84cba5 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -1266,6 +1266,31 @@ BOOL LLWindowMacOSX::setSizeImpl(const LLCoordScreen size)
return TRUE;
}
+BOOL LLWindowMacOSX::setSizeImpl(const LLCoordWindow size)
+{
+ Rect client_rect;
+ if (mWindow)
+ {
+ OSStatus err = GetWindowBounds(mWindow, kWindowContentRgn, &client_rect);
+ if (err == noErr)
+ {
+ client_rect.right = client_rect.left + size.mX;
+ client_rect.bottom = client_rect.top + size.mY;
+ err = SetWindowBounds(mWindow, kWindowContentRgn, &client_rect);
+ }
+ if (err == noErr)
+ {
+ return TRUE;
+ }
+ else
+ {
+ llinfos << "Error setting size" << err << llendl;
+ return FALSE;
+ }
+ }
+ return FALSE;
+}
+
void LLWindowMacOSX::swapBuffers()
{
aglSwapBuffers(mContext);
diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h
index 073f294b54..52ba8b3bf3 100644
--- a/indra/llwindow/llwindowmacosx.h
+++ b/indra/llwindow/llwindowmacosx.h
@@ -59,6 +59,7 @@ public:
/*virtual*/ BOOL getSize(LLCoordWindow *size);
/*virtual*/ BOOL setPosition(LLCoordScreen position);
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size);
+ /*virtual*/ BOOL setSizeImpl(LLCoordWindow size);
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 5f5baceef8..3d33af9d9b 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -981,6 +981,25 @@ BOOL LLWindowSDL::setSizeImpl(const LLCoordScreen size)
return FALSE;
}
+BOOL LLWindowSDL::setSizeImpl(const LLCoordWindow size)
+{
+ if(mWindow)
+ {
+ // Push a resize event onto SDL's queue - we'll handle it
+ // when it comes out again.
+ SDL_Event event;
+ event.type = SDL_VIDEORESIZE;
+ event.resize.w = size.mX;
+ event.resize.h = size.mY;
+ SDL_PushEvent(&event); // copied into queue
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
void LLWindowSDL::swapBuffers()
{
if (mWindow)
diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h
index 59719e4046..4e2a269ea3 100644
--- a/indra/llwindow/llwindowsdl.h
+++ b/indra/llwindow/llwindowsdl.h
@@ -64,6 +64,7 @@ public:
/*virtual*/ BOOL getSize(LLCoordWindow *size);
/*virtual*/ BOOL setPosition(LLCoordScreen position);
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size);
+ /*virtual*/ BOOL setSizeImpl(LLCoordWindow size);
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index ebc3203f14..bc85acbf45 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -872,10 +872,30 @@ BOOL LLWindowWin32::setSizeImpl(const LLCoordScreen size)
return FALSE;
}
+ WINDOWPLACEMENT placement;
+ placement.length = sizeof(WINDOWPLACEMENT);
+
+ if (!GetWindowPlacement(mWindowHandle, &placement)) return FALSE;
+
+ placement.showCmd = SW_RESTORE;
+
+ if (!SetWindowPlacement(mWindowHandle, &placement)) return FALSE;
+
moveWindow(position, size);
return TRUE;
}
+BOOL LLWindowWin32::setSizeImpl(const LLCoordWindow size)
+{
+ RECT window_rect = {0, 0, size.mX, size.mY };
+ DWORD dw_ex_style = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
+ DWORD dw_style = WS_OVERLAPPEDWINDOW;
+
+ AdjustWindowRectEx(&window_rect, dw_style, FALSE, dw_ex_style);
+
+ return setSizeImpl(LLCoordScreen(window_rect.right - window_rect.left, window_rect.bottom - window_rect.top));
+}
+
// changing fullscreen resolution
BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp)
{
@@ -886,12 +906,12 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
DWORD current_refresh;
DWORD dw_ex_style;
DWORD dw_style;
- RECT window_rect;
+ RECT window_rect = {0, 0, 0, 0};
S32 width = size.mX;
S32 height = size.mY;
BOOL auto_show = FALSE;
- if (mhRC)
+ if (mhRC)
{
auto_show = TRUE;
resetDisplayResolution();
@@ -986,7 +1006,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
dw_ex_style = WS_EX_APPWINDOW;
dw_style = WS_POPUP;
- // Move window borders out not to cover window contents
+ // Move window borders out not to cover window contents.
+ // This converts client rect to window rect, i.e. expands it by the window border size.
AdjustWindowRectEx(&window_rect, dw_style, FALSE, dw_ex_style);
}
// If it failed, we don't want to run fullscreen
@@ -1014,6 +1035,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
dw_style = WS_OVERLAPPEDWINDOW;
}
+
// don't post quit messages when destroying old windows
mPostQuit = FALSE;
@@ -1798,6 +1820,10 @@ static LLFastTimer::DeclareTimer FTM_MOUSEHANDLER("Handle Mouse");
LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_param, LPARAM l_param)
{
+ // Ignore clicks not originated in the client area, i.e. mouse-up events not preceded with a WM_LBUTTONDOWN.
+ // This helps prevent avatar walking after maximizing the window by double-clicking the title bar.
+ static bool sHandleLeftMouseUp = true;
+
LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(h_wnd, GWL_USERDATA);
@@ -2144,10 +2170,20 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
window_imp->handleUnicodeUTF16((U16)w_param, gKeyboard->currentMask(FALSE));
return 0;
+ case WM_NCLBUTTONDOWN:
+ {
+ window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_NCLBUTTONDOWN");
+ // A click in a non-client area, e.g. title bar or window border.
+ sHandleLeftMouseUp = false;
+ }
+ break;
+
case WM_LBUTTONDOWN:
{
window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_LBUTTONDOWN");
LLFastTimer t2(FTM_MOUSEHANDLER);
+ sHandleLeftMouseUp = true;
+
if (LLWinImm::isAvailable() && window_imp->mPreeditor)
{
window_imp->interruptLanguageTextInput();
@@ -2212,6 +2248,13 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
{
window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_LBUTTONUP");
LLFastTimer t2(FTM_MOUSEHANDLER);
+
+ if (!sHandleLeftMouseUp)
+ {
+ sHandleLeftMouseUp = true;
+ break;
+ }
+
//if (gDebugClicks)
//{
// LL_INFOS("Window") << "WndProc left button up" << LL_ENDL;
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
index b3602be8b7..54c9ac4d4d 100644
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -58,6 +58,7 @@ public:
/*virtual*/ BOOL getSize(LLCoordWindow *size);
/*virtual*/ BOOL setPosition(LLCoordScreen position);
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size);
+ /*virtual*/ BOOL setSizeImpl(LLCoordWindow size);
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
diff --git a/indra/lscript/lscript_byteformat.h b/indra/lscript/lscript_byteformat.h
index 7dd21bb1ad..a294def734 100644
--- a/indra/lscript/lscript_byteformat.h
+++ b/indra/lscript/lscript_byteformat.h
@@ -529,6 +529,7 @@ typedef enum e_lscript_runtime_permissions
SCRIPT_PERMISSION_CHANGE_PERMISSIONS,
SCRIPT_PERMISSION_TRACK_CAMERA,
SCRIPT_PERMISSION_CONTROL_CAMERA,
+ SCRIPT_PERMISSION_TELEPORT,
SCRIPT_PERMISSION_EOF
} LSCRIPTRunTimePermissions;
@@ -545,6 +546,7 @@ const U32 LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_EOF] =
(0x1 << 9), // SCRIPT_PERMISSION_CHANGE_PERMISSIONS
(0x1 << 10),// SCRIPT_PERMISSION_TRACK_CAMERA
(0x1 << 11),// SCRIPT_PERMISSION_CONTROL_CAMERA
+ (0x1 << 12),// SCRIPT_PERMISSION_TELEPORT
};
// http_request string constants
diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l
index 4e103ae2ba..96b7e57e97 100644
--- a/indra/lscript/lscript_compile/indra.l
+++ b/indra/lscript/lscript_compile/indra.l
@@ -212,7 +212,8 @@ extern "C" { int yyerror(const char *fmt, ...); }
"PERMISSION_CHANGE_JOINTS" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_CHANGE_JOINTS]; return(INTEGER_CONSTANT); }
"PERMISSION_CHANGE_PERMISSIONS" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_CHANGE_PERMISSIONS]; return(INTEGER_CONSTANT); }
"PERMISSION_TRACK_CAMERA" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_TRACK_CAMERA]; return(INTEGER_CONSTANT); }
-"PERMISSION_CONTROL_CAMERA" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_CONTROL_CAMERA]; return(INTEGER_CONSTANT); }
+"PERMISSION_CONTROL_CAMERA" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_CONTROL_CAMERA]; return(INTEGER_CONSTANT); }
+"PERMISSION_TELEPORT" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_TELEPORT]; return(INTEGER_CONSTANT); }
"INVENTORY_TEXTURE" { count(); yylval.ival = LLAssetType::AT_TEXTURE; return(INTEGER_CONSTANT); }
"INVENTORY_SOUND" { count(); yylval.ival = LLAssetType::AT_SOUND; return(INTEGER_CONSTANT); }
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 3c9bde34b7..9aaefa9c6a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -41,12 +41,13 @@ include(UnixInstall)
include(LLKDU)
include(ViewerMiscLibs)
include(LLLogin)
+include(VisualLeakDetector)
include(GLOD)
include(CMakeCopyIfDifferent)
include_directories(
${DBUSGLIB_INCLUDE_DIRS}
- ${JSONCPP_INCLUDE_DIRS}
+ ${JSONCPP_INCLUDE_DIR}
${GLOD_INCLUDE_DIR}
${LLAUDIO_INCLUDE_DIRS}
${LLCHARACTER_INCLUDE_DIRS}
@@ -287,7 +288,6 @@ set(viewer_SOURCE_FILES
llinspectremoteobject.cpp
llinspecttoast.cpp
llinventorybridge.cpp
- llinventoryclipboard.cpp
llinventoryfilter.cpp
llinventoryfunctions.cpp
llinventoryicon.cpp
@@ -303,6 +303,7 @@ set(viewer_SOURCE_FILES
lllistbrowser.cpp
lllistcontextmenu.cpp
lllistview.cpp
+ lllocalbitmaps.cpp
lllocaltextureobject.cpp
lllocationhistory.cpp
lllocationinputctrl.cpp
@@ -842,7 +843,6 @@ set(viewer_HEADER_FILES
llinspectremoteobject.h
llinspecttoast.h
llinventorybridge.h
- llinventoryclipboard.h
llinventoryfilter.h
llinventoryfunctions.h
llinventoryicon.h
@@ -859,6 +859,7 @@ set(viewer_HEADER_FILES
lllistbrowser.h
lllistcontextmenu.h
lllistview.h
+ lllocalbitmaps.h
lllocaltextureobject.h
lllocationhistory.h
lllocationinputctrl.h
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index 82b43432eb..318b69438a 100644
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -91,6 +91,7 @@ PERMISSION_CHANGE_LINKS Passed to llRequestPermissions library function to req
# PERMISSION_CHANGE_PERMISSIONS Passed to llRequestPermissions library function to request permission to change permissions
PERMISSION_TRACK_CAMERA Passed to llRequestPermissions library function to request permission to track agent's camera
PERMISSION_CONTROL_CAMERA Passed to llRequestPermissions library function to request permission to change agent's camera
+PERMISSION_TELEPORT Passed to llRequestPermissions library function to request permission to teleport agent
DEBUG_CHANNEL Chat channel reserved for debug and error messages from scripts
PUBLIC_CHANNEL Chat channel that broadcasts to all nearby users
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ee8c15752b..05c05b9393 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -621,6 +621,28 @@
<key>Value</key>
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/avatars.html</string>
</map>
+ <key>AvatarRotateThresholdSlow</key>
+ <map>
+ <key>Comment</key>
+ <string>Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving slowly (degrees)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <integer>60</integer>
+ </map>
+ <key>AvatarRotateThresholdFast</key>
+ <map>
+ <key>Comment</key>
+ <string>Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving fast (degrees)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <integer>2</integer>
+ </map>
<key>AvatarBakedTextureUploadTimeout</key>
<map>
<key>Comment</key>
@@ -4282,17 +4304,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>InventoryInboxToggleState</key>
- <map>
- <key>Comment</key>
- <string>Stores the open/closed state of inventory Received items panel</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>InventoryLinking</key>
<map>
<key>Comment</key>
@@ -8228,7 +8239,7 @@
<key>Type</key>
<string>U32</string>
<key>Value</key>
- <real>128</real>
+ <real>512</real>
</map>
<key>RenderSpecularResY</key>
@@ -8252,7 +8263,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>8</real>
+ <real>384</real>
</map>
<key>RenderDeferred</key>
@@ -9619,18 +9630,29 @@
<key>Value</key>
<integer>1</integer>
</map>
- <key>ShowConsoleWindow</key>
- <map>
- <key>Comment</key>
- <string>Show log in separate OS window</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
- <key>NavBarShowCoordinates</key>
+ <key>ShowConsoleWindow</key>
+ <map>
+ <key>Comment</key>
+ <string>Show log in separate OS window</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>EnableVisualLeakDetector</key>
+ <map>
+ <key>Comment</key>
+ <string>EnableVisualLeakDetector</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>NavBarShowCoordinates</key>
<map>
<key>Comment</key>
<string>Show coordinates in navigation bar</string>
@@ -12766,7 +12788,7 @@
<key>WindowX</key>
<map>
<key>Comment</key>
- <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
+ <string>X coordinate of upper left corner of SL viewer window, relative to upper left corner of primary display (pixels)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -12777,7 +12799,7 @@
<key>WindowY</key>
<map>
<key>Comment</key>
- <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
+ <string>Y coordinate of upper left corner of SL viewer window, relative to upper left corner of primary display (pixels)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index 8cdd8ed838..143126b334 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -33,6 +33,28 @@
<key>Value</key>
<string />
</map>
+ <key>InventoryInboxHeight</key>
+ <map>
+ <key>Comment</key>
+ <string>Inventory inbox panel height in Inventory floater.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>200</integer>
+ </map>
+ <key>InventoryInboxToggleState</key>
+ <map>
+ <key>Comment</key>
+ <string>Stores the open/closed state of inventory Received Items panel.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DisplayDestinationsOnInitialRun</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl
index 3e4d438ed3..7a35905280 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -34,5 +36,5 @@ uniform sampler2D diffuseMap;
void main()
{
- gl_FragColor = vec4(vertex_color.rgb, texture2D(diffuseMap, vary_texcoord0.xy).a);
+ frag_color = vec4(vertex_color.rgb, texture2D(diffuseMap, vary_texcoord0.xy).a);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index c012efa056..dd87ddb330 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -26,15 +26,15 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect depthMap;
vec4 diffuseLookup(vec2 texcoord);
-uniform mat4 shadow_matrix[6];
-uniform vec4 shadow_clip;
uniform vec2 screen_res;
vec3 atmosLighting(vec3 light);
@@ -69,6 +69,6 @@ void main()
color.rgb += diff.rgb * vary_pointlight_col.rgb;
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
index 8641827777..beb3290187 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
@@ -26,15 +26,15 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect depthMap;
uniform sampler2D diffuseMap;
-uniform mat4 shadow_matrix[6];
-uniform vec4 shadow_clip;
uniform vec2 screen_res;
vec3 atmosLighting(vec3 light);
@@ -81,9 +81,9 @@ void main()
color.rgb += diff.rgb * vary_pointlight_col.rgb;
- gl_FragColor = color;
- //gl_FragColor = vec4(1,0,1,1);
- //gl_FragColor = vec4(1,0,1,1)*shadow;
+ frag_color = color;
+ //frag_color = vec4(1,0,1,1);
+ //frag_color = vec4(1,0,1,1)*shadow;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl
index c13ea702db..cb87b754b4 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl
@@ -26,14 +26,14 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect depthMap;
uniform sampler2D diffuseMap;
-uniform mat4 shadow_matrix[6];
-uniform vec4 shadow_clip;
uniform vec2 screen_res;
vec3 atmosLighting(vec3 light);
@@ -79,6 +79,6 @@ void main()
color.rgb += diff.rgb * vary_pointlight_col.rgb;
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
index eada38eaaa..5a0e8ff684 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
@@ -41,7 +41,6 @@ vec3 atmosAffectDirectionalLight(float lightIntensity);
VARYING vec3 vary_position;
VARYING vec3 vary_ambient;
VARYING vec3 vary_directional;
-VARYING vec3 vary_normal;
VARYING vec3 vary_fragcoord;
VARYING vec3 vary_pointlight_col;
VARYING vec4 vertex_color;
@@ -110,8 +109,7 @@ void main()
gl_Position = frag_pos;
vary_position = pos.xyz;
- vary_normal = norm;
-
+
calcAtmospherics(pos.xyz);
vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
index 5c36118a50..cf38a2f4f7 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
@@ -48,7 +48,6 @@ VARYING vec3 vary_ambient;
VARYING vec3 vary_directional;
VARYING vec3 vary_fragcoord;
VARYING vec3 vary_position;
-VARYING vec3 vary_light;
VARYING vec3 vary_pointlight_col;
VARYING vec4 vertex_color;
@@ -134,8 +133,6 @@ void main()
// Add windlight lights
col.rgb = atmosAmbient(vec3(0.));
- vary_light = light_position[0].xyz;
-
vary_ambient = col.rgb*diffuse_color.rgb;
vary_directional.rgb = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, light_position[0].xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a)));
diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl
index 402f681631..22c9a4d14e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl
@@ -23,17 +23,17 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D diffuseMap;
-VARYING vec4 vertex_color;
VARYING vec2 vary_texcoord0;
void main()
{
- //gl_FragColor = vec4(1,1,1,vertex_color.a * texture2D(diffuseMap, vary_texcoord0.xy).a);
- gl_FragColor = vec4(1,1,1,1);
+ frag_color = vec4(1,1,1,1);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
index ded6cced27..81961d7746 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
@@ -27,11 +27,8 @@ uniform mat4 modelview_matrix;
uniform mat4 texture_matrix0;
ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
ATTRIBUTE vec2 texcoord0;
-VARYING vec4 vertex_color;
-
mat4 getObjectSkinnedTransform();
void main()
@@ -42,8 +39,6 @@ void main()
mat = modelview_matrix * mat;
vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz;
- vertex_color = diffuse_color;
-
vec4 p = projection_matrix * vec4(pos, 1.0);
p.z = max(p.z, -p.w+0.01);
gl_Position = p;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl
new file mode 100644
index 0000000000..5f395801e5
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl
@@ -0,0 +1,148 @@
+/**
+ * @file avatarAlphaNoColorV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, 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$
+ */
+
+uniform mat4 projection_matrix;
+
+ATTRIBUTE vec3 position;
+ATTRIBUTE vec3 normal;
+ATTRIBUTE vec2 texcoord0;
+
+vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
+mat4 getSkinnedTransform();
+void calcAtmospherics(vec3 inPositionEye);
+
+float calcDirectionalLight(vec3 n, vec3 l);
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
+
+vec3 atmosAmbient(vec3 light);
+vec3 atmosAffectDirectionalLight(float lightIntensity);
+vec3 scaleDownLight(vec3 light);
+vec3 scaleUpLight(vec3 light);
+
+VARYING vec3 vary_position;
+VARYING vec3 vary_ambient;
+VARYING vec3 vary_directional;
+VARYING vec3 vary_fragcoord;
+VARYING vec3 vary_pointlight_col;
+VARYING vec2 vary_texcoord0;
+
+
+uniform float near_clip;
+
+uniform vec4 color;
+
+uniform vec4 light_position[8];
+uniform vec3 light_direction[8];
+uniform vec3 light_attenuation[8];
+uniform vec3 light_diffuse[8];
+
+float calcDirectionalLight(vec3 n, vec3 l)
+{
+ float a = max(dot(n,l),0.0);
+ return a;
+}
+
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
+{
+ //get light vector
+ vec3 lv = lp.xyz-v;
+
+ //get distance
+ float d = dot(lv,lv);
+
+ float da = 0.0;
+
+ if (d > 0.0 && la > 0.0 && fa > 0.0)
+ {
+ //normalize light vector
+ lv = normalize(lv);
+
+ //distance attenuation
+ float dist2 = d/la;
+ da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
+
+ // spotlight coefficient.
+ float spot = max(dot(-ln, lv), is_pointlight);
+ da *= spot*spot; // GL_SPOT_EXPONENT=2
+
+ //angular attenuation
+ da *= max(dot(n, lv), 0.0);
+ }
+
+ return da;
+}
+
+void main()
+{
+ vary_texcoord0 = texcoord0;
+
+ vec4 pos;
+ vec3 norm;
+
+ mat4 trans = getSkinnedTransform();
+ vec4 pos_in = vec4(position.xyz, 1.0);
+ pos.x = dot(trans[0], pos_in);
+ pos.y = dot(trans[1], pos_in);
+ pos.z = dot(trans[2], pos_in);
+ pos.w = 1.0;
+
+ norm.x = dot(trans[0].xyz, normal);
+ norm.y = dot(trans[1].xyz, normal);
+ norm.z = dot(trans[2].xyz, normal);
+ norm = normalize(norm);
+
+ vec4 frag_pos = projection_matrix * pos;
+ gl_Position = frag_pos;
+
+ vary_position = pos.xyz;
+
+ calcAtmospherics(pos.xyz);
+
+ vec4 col = vec4(0.0, 0.0, 0.0, 1.0);
+
+ // Collect normal lights
+ col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].y, light_attenuation[2].z);
+ col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].y, light_attenuation[3].z);
+ col.rgb += light_diffuse[4].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[4], light_direction[4], light_attenuation[4].x, light_attenuation[4].y, light_attenuation[4].z);
+ col.rgb += light_diffuse[5].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[5], light_direction[5], light_attenuation[5].x, light_attenuation[5].y, light_attenuation[5].z);
+ col.rgb += light_diffuse[6].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[6], light_direction[6], light_attenuation[6].x, light_attenuation[6].y, light_attenuation[6].z);
+ col.rgb += light_diffuse[7].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[7], light_direction[7], light_attenuation[7].x, light_attenuation[7].y, light_attenuation[7].z);
+
+ vary_pointlight_col = col.rgb*color.rgb;
+
+ col.rgb = vec3(0,0,0);
+
+ // Add windlight lights
+ col.rgb = atmosAmbient(vec3(0.));
+
+ vary_ambient = col.rgb*color.rgb;
+ vary_directional = color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, light_position[0].xyz), 0.0));
+
+ col.rgb = col.rgb * color.rgb;
+
+ vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip);
+}
+
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
index 9a3b2e3e8a..46d2aa4877 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
uniform sampler2D diffuseMap;
@@ -41,9 +43,9 @@ void main()
discard;
}
- gl_FragData[0] = vec4(diff.rgb, 0.0);
- gl_FragData[1] = vec4(0,0,0,0);
+ frag_data[0] = vec4(diff.rgb, 0.0);
+ frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
index 558a88009a..3686f2f647 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D diffuseMap;
@@ -33,7 +35,7 @@ VARYING vec4 post_pos;
void main()
{
- gl_FragColor = vec4(1,1,1,1);
+ frag_color = vec4(1,1,1,1);
gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
index 60d4dae99f..f400eb7a5b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect depthMap;
@@ -111,6 +113,6 @@ void main()
col /= defined_weight.xyxx;
col.y *= col.y;
- gl_FragColor = col;
+ frag_color = col;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
index 6cc5f23aca..680eadb852 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
uniform sampler2D diffuseMap;
@@ -46,9 +48,9 @@ void main()
dot(norm,vary_mat1),
dot(norm,vary_mat2));
- gl_FragData[0] = vec4(col, 0.0);
- gl_FragData[1] = vertex_color.aaaa; // spec
- //gl_FragData[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
+ frag_data[0] = vec4(col, 0.0);
+ frag_data[1] = vertex_color.aaaa; // spec
+ //frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
vec3 nvn = normalize(tnorm);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
index 6c205074b4..8ba75010a2 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
@@ -30,7 +30,7 @@ ATTRIBUTE vec3 position;
ATTRIBUTE vec4 diffuse_color;
ATTRIBUTE vec3 normal;
ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec2 texcoord2;
+ATTRIBUTE vec3 binormal;
VARYING vec3 vary_mat0;
VARYING vec3 vary_mat1;
@@ -52,7 +52,7 @@ void main()
vec3 n = normalize((mat * vec4(normal.xyz+position.xyz, 1.0)).xyz-pos.xyz);
- vec3 b = normalize((mat * vec4(vec4(texcoord2,0,1).xyz+position.xyz, 1.0)).xyz-pos.xyz);
+ vec3 b = normalize((mat * vec4(binormal.xyz+position.xyz, 1.0)).xyz-pos.xyz);
vec3 t = cross(b, n);
vary_mat0 = vec3(t.x, b.x, n.x);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
index db272cf601..1d8ca04ccd 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
@@ -25,7 +25,9 @@
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
/////////////////////////////////////////////////////////////////////////
@@ -98,8 +100,8 @@ void main()
color *= 2.;
/// Gamma correct for WL (soft clip effect).
- gl_FragData[0] = vec4(scaleSoftClip(color.rgb), alpha1);
- gl_FragData[1] = vec4(0.0,0.0,0.0,0.0);
- gl_FragData[2] = vec4(0,0,1,0);
+ frag_data[0] = vec4(scaleSoftClip(color.rgb), alpha1);
+ frag_data[1] = vec4(0.0,0.0,0.0,0.0);
+ frag_data[2] = vec4(0,0,1,0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
index e612efba61..ccbc3c557c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -83,6 +85,6 @@ void main()
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*0.5+0.5;
+ frag_color.rgb = diff.rgb + bloom.rgb;
+ frag_color.a = sc/max_cof*0.5+0.5;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
index e9989a4e48..b2027d3a5d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
uniform float minimum_alpha;
@@ -44,9 +46,9 @@ void main()
discard;
}
- gl_FragData[0] = vec4(col.rgb, 0.0);
- gl_FragData[1] = vec4(0,0,0,0); // spec
+ frag_data[0] = vec4(col.rgb, 0.0);
+ frag_data[1] = vec4(0,0,0,0); // spec
vec3 nvn = normalize(vary_normal);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
index fdf8d72b38..ead384b07c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
VARYING vec3 vary_normal;
@@ -43,8 +45,8 @@ void main()
discard;
}
- gl_FragData[0] = vec4(col.rgb, 0.0);
- gl_FragData[1] = vec4(0,0,0,0);
+ frag_data[0] = vec4(col.rgb, 0.0);
+ frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
index bb20e2ca47..f73fa6f231 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
@@ -25,7 +25,9 @@
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
uniform float minimum_alpha;
@@ -44,9 +46,9 @@ void main()
discard;
}
- gl_FragData[0] = vec4(col.rgb, 0.0);
- gl_FragData[1] = vec4(0,0,0,0); // spec
+ frag_data[0] = vec4(col.rgb, 0.0);
+ frag_data[1] = vec4(0,0,0,0); // spec
vec3 nvn = normalize(vary_normal);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
index 7bde49eb86..227aa2aae3 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
uniform sampler2D diffuseMap;
@@ -36,10 +38,10 @@ VARYING vec2 vary_texcoord0;
void main()
{
vec3 col = vertex_color.rgb * texture2D(diffuseMap, vary_texcoord0.xy).rgb;
- gl_FragData[0] = vec4(col, 0.0);
- gl_FragData[1] = vertex_color.aaaa; // spec
- //gl_FragData[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
+ frag_data[0] = vec4(col, 0.0);
+ frag_data[1] = vertex_color.aaaa; // spec
+ //frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
vec3 nvn = normalize(vary_normal);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
index 75b45111e0..d442e5403a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
VARYING vec3 vary_normal;
@@ -35,9 +37,9 @@ void main()
{
vec3 col = vertex_color.rgb * diffuseLookup(vary_texcoord0.xy).rgb;
- gl_FragData[0] = vec4(col, 0.0);
- gl_FragData[1] = vertex_color.aaaa; // spec
- //gl_FragData[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
+ frag_data[0] = vec4(col, 0.0);
+ frag_data[1] = vertex_color.aaaa; // spec
+ //frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
vec3 nvn = normalize(vary_normal);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl b/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
index 01e3505359..a425e5062e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -37,14 +39,24 @@ uniform vec2 screen_res;
uniform float max_cof;
uniform float res_scale;
+uniform float dof_width;
+uniform float dof_height;
VARYING vec2 vary_fragcoord;
+vec4 dofSample(sampler2DRect tex, vec2 tc)
+{
+ tc.x = min(tc.x, dof_width);
+ tc.y = min(tc.y, dof_height);
+
+ return texture2DRect(tex, tc);
+}
+
void main()
{
vec2 tc = vary_fragcoord.xy;
- vec4 dof = texture2DRect(diffuseRect, vary_fragcoord.xy*res_scale);
+ vec4 dof = dofSample(diffuseRect, vary_fragcoord.xy*res_scale);
vec4 diff = texture2DRect(lightMap, vary_fragcoord.xy);
@@ -63,5 +75,5 @@ void main()
diff = mix(diff, col*0.25, a);
}
- gl_FragColor = mix(diff, dof, a);
+ frag_color = mix(diff, dof, a);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl b/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
index 92f78125d8..6aa4d7b4ed 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
vec3 fullbrightAtmosTransport(vec3 light);
@@ -45,6 +47,6 @@ void main()
color.rgb = fullbrightScaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
index 84ae2f9f10..36433a5827 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -46,6 +48,6 @@ void main()
color.rgb = fullbrightScaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
index 5af9406452..e02a7b405b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
#define FXAA_PC 1
@@ -341,18 +343,23 @@ A. Or use FXAA_GREEN_AS_LUMA.
// 1 = API supports gather4 on alpha channel.
// 0 = API does not support gather4 on alpha channel.
//
+ #if (FXAA_GLSL_130 == 0)
+ #define FXAA_GATHER4_ALPHA 0
+ #endif
#if (FXAA_HLSL_5 == 1)
#define FXAA_GATHER4_ALPHA 1
#endif
- #ifdef GL_ARB_gpu_shader5
- #define FXAA_GATHER4_ALPHA 1
- #endif
- #ifdef GL_NV_gpu_shader5
- #define FXAA_GATHER4_ALPHA 1
- #endif
#ifndef FXAA_GATHER4_ALPHA
- #define FXAA_GATHER4_ALPHA 0
- #endif
+ #ifdef GL_ARB_gpu_shader5
+ #define FXAA_GATHER4_ALPHA 1
+ #endif
+ #ifdef GL_NV_gpu_shader5
+ #define FXAA_GATHER4_ALPHA 1
+ #endif
+ #ifndef FXAA_GATHER4_ALPHA
+ #define FXAA_GATHER4_ALPHA 0
+ #endif
+ #endif
#endif
/*============================================================================
@@ -2113,6 +2120,6 @@ void main()
//diff = texture2D(diffuseMap, vary_tc);
- gl_FragColor = diff;
+ frag_color = diff;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
index 29ca80ae92..da1b234240 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect depthMap;
@@ -184,5 +186,5 @@ void main()
vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
- gl_FragColor.xyz = giAmbient(pos, norm);
+ frag_color.xyz = giAmbient(pos, norm);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
index a44173a2a4..bc0719cb82 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
uniform float minimum_alpha;
@@ -45,7 +47,7 @@ void main()
discard;
}
- gl_FragData[0] = vec4(col.rgb, col.a * 0.005);
- gl_FragData[1] = texture2D(specularMap, vary_texcoord0.xy);
- gl_FragData[2] = vec4(texture2D(normalMap, vary_texcoord0.xy).xyz, 0.0);
+ frag_data[0] = vec4(col.rgb, col.a * 0.005);
+ frag_data[1] = texture2D(specularMap, vary_texcoord0.xy);
+ frag_data[2] = vec4(texture2D(normalMap, vary_texcoord0.xy).xyz, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl
index e014a14ad8..dcf474824d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl
@@ -26,12 +26,14 @@
uniform sampler2DRect diffuseMap;
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec2 vary_fragcoord;
void main()
{
- gl_FragColor = texture2DRect(diffuseMap, vary_fragcoord.xy);
+ frag_color = texture2DRect(diffuseMap, vary_fragcoord.xy);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
index 179c721a2f..4d01eeb64e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect depthMap;
@@ -126,7 +128,7 @@ void main()
if (sa > 0.0)
{
- sa = texture2D(lightFunc,vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
+ sa = 6 * texture2D(lightFunc, vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
sa *= noise;
col += da*sa*light_col[i].rgb*spec.rgb;
}
@@ -141,6 +143,6 @@ void main()
discard;
}
- gl_FragColor.rgb = out_col;
- gl_FragColor.a = 0.0;
+ frag_color.rgb = out_col;
+ frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
index 2196d14895..75de47614c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
//class 1 -- no shadows
@@ -242,6 +244,6 @@ void main()
}
}
- gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ frag_color.rgb = col;
+ frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl b/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl
index 879942d8fa..62cfa5c316 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D alphaMap;
@@ -52,5 +54,5 @@ void main()
norm *= 0.5;
norm += 0.5;
- gl_FragColor = vec4(norm, alpha);
+ frag_color = vec4(norm, alpha);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
index b673d00d6e..19800a8b8e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -107,7 +109,7 @@ void main()
float sa = dot(normalize(lv-normalize(pos)),norm);
if (sa > 0.0)
{
- sa = texture2D(lightFunc, vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
+ sa = 6 * texture2D(lightFunc, vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
sa *= noise;
col += da*sa*color.rgb*spec.rgb;
}
@@ -118,6 +120,6 @@ void main()
discard;
}
- gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ frag_color.rgb = col;
+ frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
index 18d451bf87..bf362e21a4 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -122,5 +124,5 @@ void main()
diff /= w;
}
- gl_FragColor = diff;
+ frag_color = diff;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
index c275434777..eb5beeef39 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -40,6 +42,6 @@ void main()
vec4 diff = texture2DRect(diffuseRect, vary_fragcoord.xy);
vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy/screen_res);
- gl_FragColor = diff + bloom;
+ frag_color = diff + bloom;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl
index 0d5c8e7287..bd0cb50464 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl
@@ -1,5 +1,5 @@
/**
- * @file postgiV.glsl
+ * @file postDeferredV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -24,17 +24,17 @@
*/
uniform mat4 modelview_projection_matrix;
-
-ATTRIBUTE vec3 position;
+ATTRIBUTE vec3 position;
VARYING vec2 vary_fragcoord;
+
uniform vec2 screen_res;
void main()
{
//transform vertex
vec4 pos = modelview_projection_matrix * vec4(position.xyz, 1.0);
- gl_Position = pos;
+ gl_Position = pos;
vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
index 84d65d5b3b..96f9628424 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
@@ -24,8 +24,10 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
- out vec4 gl_FragColor;
- #endif
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
+#endif
uniform sampler2DRect depthMap;
uniform sampler2DRect normalMap;
@@ -96,5 +98,5 @@ void main()
col = col*col*blur_quad.x + col*blur_quad.y + blur_quad.z;
- gl_FragColor.rgb = col;
+ frag_color.rgb = col;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
index c1fb7b55d4..cf8cf8364a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -44,7 +46,7 @@ void main()
discard;
}
- gl_FragColor = vec4(1,1,1,1);
+ frag_color = vec4(1,1,1,1);
gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
index bf75ca262e..7e55fdc12a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
@@ -24,14 +24,16 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 post_pos;
void main()
{
- gl_FragColor = vec4(1,1,1,1);
+ frag_color = vec4(1,1,1,1);
gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
index 96ad0aa93a..faa54a316e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
/////////////////////////////////////////////////////////////////////////
@@ -57,8 +59,8 @@ void main()
color *= 2.;
/// Gamma correct for WL (soft clip effect).
- gl_FragData[0] = vec4(scaleSoftClip(color.rgb), 1.0);
- gl_FragData[1] = vec4(0.0,0.0,0.0,0.0);
- gl_FragData[2] = vec4(0,0,1,0);
+ frag_data[0] = vec4(scaleSoftClip(color.rgb), 1.0);
+ frag_data[1] = vec4(0.0,0.0,0.0,0.0);
+ frag_data[2] = vec4(0,0,1,0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
index cb7603f4fd..7c02d31d43 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
@@ -26,7 +26,6 @@
uniform mat4 modelview_projection_matrix;
ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
// SKY ////////////////////////////////////////////////////////////////////////
// The vertex shader for creating the atmospheric sky
@@ -34,7 +33,6 @@ ATTRIBUTE vec2 texcoord0;
// Output parameters
VARYING vec4 vary_HazeColor;
-VARYING vec2 vary_texcoord0;
// Inputs
uniform vec3 camPosLocal;
@@ -60,8 +58,7 @@ void main()
// World / view / projection
gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
- vary_texcoord0 = texcoord0;
-
+
// Get relative position
vec3 P = position.xyz - camPosLocal.xyz + vec3(0,50,0);
//vec3 P = position.xyz + vec3(0,50,0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index 0c53a4ffa5..66e3cf6d13 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -299,11 +301,11 @@ void main()
//
vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
float sa = dot(refnormpersp, sun_dir.xyz);
- vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).r;
+ vec3 dumbshiny = vary_SunlitColor*(6 * texture2D(lightFunc, vec2(sa, spec.a)).r);
// add the two types of shiny together
vec3 spec_contrib = dumbshiny * spec.rgb;
- bloom = dot(spec_contrib, spec_contrib);
+ bloom = dot(spec_contrib, spec_contrib) / 4;
col += spec_contrib;
//add environmentmap
@@ -322,7 +324,7 @@ void main()
col = diffuse.rgb;
}
- gl_FragColor.rgb = col;
+ frag_color.rgb = col;
- gl_FragColor.a = bloom;
+ frag_color.a = bloom;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
index cc0f4e5b6b..7ed8ed3370 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
@@ -27,7 +27,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -184,6 +186,6 @@ void main()
}
}
- gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ frag_color.rgb = col;
+ frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
index 03fccd2766..821058804c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
VARYING vec4 vertex_color;
@@ -36,7 +38,7 @@ void main()
{
vec4 col = vertex_color * texture2D(diffuseMap, vary_texcoord0.xy);
- gl_FragData[0] = col;
- gl_FragData[1] = vec4(0,0,0,0);
- gl_FragData[2] = vec4(0,0,1,0);
+ frag_data[0] = col;
+ frag_data[1] = vec4(0,0,0,0);
+ frag_data[2] = vec4(0,0,1,0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
index adc7c5d005..5ca817aff6 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
@@ -28,10 +28,12 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
void main()
{
- gl_FragColor = vec4(0,0,0,0);
+ frag_color = vec4(0,0,0,0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightNoFragCoordV.glsl
index e5d3bb8ea6..47e9d15fbc 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightNoFragCoordV.glsl
@@ -1,5 +1,5 @@
/**
- * @file giV.glsl
+ * @file sunLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -24,13 +24,8 @@
*/
uniform mat4 modelview_projection_matrix;
-
+
ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
-
-VARYING vec4 vertex_color;
-VARYING vec2 vary_fragcoord;
uniform vec2 screen_res;
@@ -39,10 +34,4 @@ void main()
//transform vertex
vec4 pos = modelview_projection_matrix * vec4(position.xyz, 1.0);
gl_Position = pos;
-
- vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res;
- vec4 tex = vec4(texcoord0,0,1);
- tex.w = 1.0;
-
- vertex_color = diffuse_color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
index fc5959a33c..2422d73a3e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
//class 1 -- no shadow, SSAO only
@@ -37,8 +39,6 @@ uniform sampler2D noiseMap;
// Inputs
-uniform mat4 shadow_matrix[6];
-uniform vec4 shadow_clip;
uniform float ssao_radius;
uniform float ssao_max_radius;
uniform float ssao_factor;
@@ -49,9 +49,6 @@ VARYING vec2 vary_fragcoord;
uniform mat4 inv_proj;
uniform vec2 screen_res;
-uniform float shadow_bias;
-uniform float shadow_offset;
-
vec4 getPosition(vec2 pos_screen)
{
float depth = texture2DRect(depthMap, pos_screen.xy).r;
@@ -128,8 +125,8 @@ void main()
vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
- gl_FragColor[0] = 1.0;
- gl_FragColor[1] = calcAmbientOcclusion(pos, norm);
- gl_FragColor[2] = 1.0;
- gl_FragColor[3] = 1.0;
+ frag_color[0] = 1.0;
+ frag_color[1] = calcAmbientOcclusion(pos, norm);
+ frag_color[2] = 1.0;
+ frag_color[3] = 1.0;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
index 5522e6c41d..8a5e482e80 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
uniform sampler2D detail_0;
@@ -51,9 +53,9 @@ void main()
float alphaFinal = texture2D(alpha_ramp, vary_texcoord1.zw).a;
vec4 outColor = mix( mix(color3, color2, alpha2), mix(color1, color0, alpha1), alphaFinal );
- gl_FragData[0] = vec4(outColor.rgb, 0.0);
- gl_FragData[1] = vec4(0,0,0,0);
+ frag_data[0] = vec4(outColor.rgb, 0.0);
+ frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
index ea98d6884c..6cf6106b51 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
uniform sampler2D diffuseMap;
@@ -43,8 +45,8 @@ void main()
discard;
}
- gl_FragData[0] = vec4(vertex_color.rgb*col.rgb, 0.0);
- gl_FragData[1] = vec4(0,0,0,0);
+ frag_data[0] = vec4(vertex_color.rgb*col.rgb, 0.0);
+ frag_data[1] = vec4(0,0,0,0);
vec3 nvn = normalize(vary_normal);
- gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+ frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl
index 20d0170535..d4d2f5f571 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -43,7 +45,7 @@ void main()
discard;
}
- gl_FragColor = vec4(1,1,1,1);
+ frag_color = vec4(1,1,1,1);
gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
index 4c9ea24a24..42dc7c0980 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragData[3];
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
#endif
vec3 scaleSoftClip(vec3 inColor);
@@ -157,7 +159,7 @@ void main()
//wavef = normalize(wavef);
vec3 screenspacewavef = (norm_mat*vec4(wavef, 1.0)).xyz;
- gl_FragData[0] = vec4(color.rgb, 0.5); // diffuse
- gl_FragData[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
- gl_FragData[2] = vec4(screenspacewavef.xy*0.5+0.5, screenspacewavef.z, screenspacewavef.z*0.5); // normalxyz, displace
+ frag_data[0] = vec4(color.rgb, 0.5); // diffuse
+ frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
+ frag_data[2] = vec4(screenspacewavef.xy*0.5+0.5, screenspacewavef.z, screenspacewavef.z*0.5); // normalxyz, displace
}
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
index 9a3d792224..0f5eb288fd 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseMap;
@@ -46,7 +48,7 @@ void main()
float lum = smoothstep(minLuminance, minLuminance+1.0, dot(col.rgb, lumWeights ) );
float warmth = smoothstep(minLuminance, minLuminance+1.0, max(col.r * warmthWeights.r, max(col.g * warmthWeights.g, col.b * warmthWeights.b)) );
- gl_FragColor.rgb = col.rgb;
- gl_FragColor.a = max(col.a, mix(lum, warmth, warmthAmount) * maxExtractAlpha);
+ frag_color.rgb = col.rgb;
+ frag_color.a = max(col.a, mix(lum, warmth, warmthAmount) * maxExtractAlpha);
}
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
index 90bb84323c..c1f6af9f57 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D diffuseMap;
@@ -54,5 +56,5 @@ void main()
col += kern[6] * texture2D(diffuseMap, vary_texcoord2.zw);
col += kern[7] * texture2D(diffuseMap, vary_texcoord3.zw);
- gl_FragColor = vec4(col.rgb * glowStrength, col.a);
+ frag_color = vec4(col.rgb * glowStrength, col.a);
}
diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl
index 18f6d91804..668a710c04 100644
--- a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -59,6 +61,6 @@ void main()
/// Add WL Components
outColor.rgb = atmosLighting(outColor.rgb * vertex_color.rgb);
- gl_FragColor = vec4(scaleSoftClip(outColor.rgb), 1.0);
+ frag_color = vec4(scaleSoftClip(outColor.rgb), 1.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl
index e5c7ced52c..a956562396 100644
--- a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -60,6 +62,6 @@ void main()
outColor.rgb = atmosLighting(outColor.rgb * vertex_color.rgb);
outColor = applyWaterFog(outColor);
- gl_FragColor = outColor;
+ frag_color = outColor;
}
diff --git a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl
index 1fdb90f792..0d8dab0a41 100644
--- a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D diffuseMap;
@@ -106,5 +108,5 @@ void main()
vec4 fb = texture2D(screenTex, distort);
- gl_FragColor = applyWaterFog(fb,view.xyz);
+ frag_color = applyWaterFog(fb,view.xyz);
}
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
index 444c896d38..79bffab745 100644
--- a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
vec3 scaleSoftClip(vec3 inColor);
@@ -135,5 +137,5 @@ void main()
color.rgb = scaleSoftClip(color.rgb);
color.a = spec * sunAngle2;
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl b/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl
index d2f5e1987a..f520f301d9 100644
--- a/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D diffuseMap;
@@ -42,5 +44,5 @@ void main()
discard;
}
- gl_FragColor = col;
+ frag_color = col;
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl
index 4b481ba834..a96d04cc39 100644
--- a/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D diffuseMap;
@@ -38,5 +40,5 @@ void main()
{
vec4 color = vertex_color*texture2D(diffuseMap, vary_texcoord0.xy);
color.a *= custom_alpha;
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/debugF.glsl b/indra/newview/app_settings/shaders/class1/interface/debugF.glsl
index 6bcc97ba18..67c6baddbb 100644
--- a/indra/newview/app_settings/shaders/class1/interface/debugF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/debugF.glsl
@@ -24,12 +24,14 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform vec4 color;
void main()
{
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
index f67703b839..ed803de277 100644
--- a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
#extension GL_ARB_texture_rectangle : enable
@@ -37,6 +39,6 @@ VARYING vec2 vary_texcoord1;
void main()
{
- gl_FragColor = texture2D(glowMap, vary_texcoord0.xy) +
+ frag_color = texture2D(glowMap, vary_texcoord0.xy) +
texture2DRect(screenMap, vary_texcoord1.xy);
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl
index c66a6e5b48..59520bb99f 100644
--- a/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -38,5 +40,5 @@ void main()
{
vec3 col = texture2DRect(diffuseRect, vary_tc*screen_res).rgb;
- gl_FragColor = vec4(col.rgb, dot(col.rgb, vec3(0.299, 0.587, 0.144)));
+ frag_color = vec4(col.rgb, dot(col.rgb, vec3(0.299, 0.587, 0.144)));
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
index ecbc30f05f..6cc9bbbea2 100644
--- a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform vec4 color;
@@ -34,5 +36,5 @@ VARYING vec2 vary_texcoord0;
void main()
{
- gl_FragColor = color*texture2D(diffuseMap, vary_texcoord0.xy);
+ frag_color = color*texture2D(diffuseMap, vary_texcoord0.xy);
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl
index 85f819f4c2..db130e456c 100644
--- a/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl
@@ -24,10 +24,12 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
void main()
{
- gl_FragColor = vec4(1,1,1,1);
+ frag_color = vec4(1,1,1,1);
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/onetexturenocolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/onetexturenocolorF.glsl
index fafeb5a7b4..415181126b 100644
--- a/indra/newview/app_settings/shaders/class1/interface/onetexturenocolorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/onetexturenocolorF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D tex0;
@@ -33,5 +35,5 @@ VARYING vec2 vary_texcoord0;
void main()
{
- gl_FragColor = texture2D(tex0, vary_texcoord0.xy);
+ frag_color = texture2D(tex0, vary_texcoord0.xy);
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
index f790122749..67dc500493 100644
--- a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D tex0;
@@ -36,5 +38,5 @@ void main()
{
float alpha = texture2D(tex0, vary_texcoord0.xy).a * vertex_color.a;
- gl_FragColor = vec4(vertex_color.rgb, alpha);
+ frag_color = vec4(vertex_color.rgb, alpha);
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/splattexturerectF.glsl b/indra/newview/app_settings/shaders/class1/interface/splattexturerectF.glsl
index a0bb255cfa..772bb374e8 100644
--- a/indra/newview/app_settings/shaders/class1/interface/splattexturerectF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/splattexturerectF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect screenMap;
@@ -36,5 +38,5 @@ VARYING vec2 vary_texcoord0;
void main()
{
- gl_FragColor = texture2DRect(screenMap, vary_texcoord0.xy) * vertex_color;
+ frag_color = texture2DRect(screenMap, vary_texcoord0.xy) * vertex_color;
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl
index cdb48163dd..95679e93e7 100644
--- a/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D tex0;
@@ -35,5 +37,5 @@ VARYING vec2 vary_texcoord1;
void main()
{
- gl_FragColor = texture2D(tex0, vary_texcoord0.xy)+texture2D(tex1, vary_texcoord1.xy);
+ frag_color = texture2D(tex0, vary_texcoord0.xy)+texture2D(tex1, vary_texcoord1.xy);
}
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
index 36d6e06fc5..299bfb72aa 100644
--- a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D diffuseMap;
@@ -34,5 +36,5 @@ VARYING vec4 vertex_color;
void main()
{
- gl_FragColor = vertex_color*texture2D(diffuseMap, vary_texcoord0.xy);
+ frag_color = vertex_color*texture2D(diffuseMap, vary_texcoord0.xy);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
index 10413bdeb0..cf29939cb2 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -48,6 +50,6 @@ void default_lighting()
color.rgb = scaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
index 1164e5b0a6..4070d41f47 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -50,6 +52,6 @@ void default_lighting()
color.rgb = scaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
index 735f5b3813..d6ebfcb825 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -41,6 +43,6 @@ void default_lighting()
color.rgb = scaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
index ba99c0ed71..6c34643aab 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -48,6 +50,6 @@ void fullbright_lighting()
color.rgb = fullbrightScaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
index c3edc0bd70..2ff7f795b0 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -41,6 +43,6 @@ void fullbright_lighting()
color.rgb = fullbrightScaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
index 276fad4f44..f4477bd29a 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -50,6 +52,6 @@ void fullbright_lighting()
color.rgb = fullbrightScaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedF.glsl
index 4e1e664e6b..2738ff8947 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -43,6 +45,6 @@ void fullbright_lighting()
color.rgb = fullbrightScaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
index c981e9eba2..777c8b45bb 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -50,6 +52,6 @@ void fullbright_shiny_lighting()
color.a = max(color.a, vertex_color.a);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl
index a4893f0359..4fa3b1d939 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -51,6 +53,6 @@ void fullbright_shiny_lighting()
color.a = max(color.a, vertex_color.a);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
index c10cde98e0..58984a4263 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
@@ -23,7 +23,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -48,6 +50,6 @@ void fullbright_shiny_lighting_water()
color.rgb = fullbrightScaleSoftClip(color.rgb);
color.a = max(color.a, vertex_color.a);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
index e9b26087f4..a39b7205d7 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
@@ -23,7 +23,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -49,6 +51,6 @@ void fullbright_shiny_lighting_water()
color.rgb = fullbrightScaleSoftClip(color.rgb);
color.a = max(color.a, vertex_color.a);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
index 754b2922d9..99a6fe85fe 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -48,6 +50,6 @@ void fullbright_lighting_water()
color.rgb = fullbrightAtmosTransport(color.rgb);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl
index 2547f9e750..df182168f3 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -41,6 +43,6 @@ void fullbright_lighting_water()
color.rgb = fullbrightAtmosTransport(color.rgb);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
index f69b907dc7..63f92a8844 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -48,6 +50,6 @@ void fullbright_lighting_water()
color.rgb = fullbrightAtmosTransport(color.rgb);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedF.glsl
index aa3ef8cdd9..0e68091e7c 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -41,6 +43,6 @@ void fullbright_lighting_water()
color.rgb = fullbrightAtmosTransport(color.rgb);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl
index 9f1a358b53..0aca768021 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -43,6 +45,6 @@ void default_lighting()
color.rgb = scaleSoftClip(color.rgb);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
index e9c27dbefd..52e3b2ad02 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -49,6 +51,6 @@ void shiny_lighting()
color.rgb = scaleSoftClip(color.rgb);
color.a = max(color.a, vertex_color.a);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl
index 595ad74365..474d5ea496 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -50,6 +52,6 @@ void shiny_lighting()
color.rgb = scaleSoftClip(color.rgb);
color.a = max(color.a, vertex_color.a);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
index 68c727d62c..d2a4c47aac 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -46,6 +48,6 @@ void shiny_lighting_water()
color.rgb = atmosLighting(color.rgb);
color.a = max(color.a, vertex_color.a);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl
index f32b9e1958..f3bd662364 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -47,6 +49,6 @@ void shiny_lighting_water()
color.rgb = atmosLighting(color.rgb);
color.a = max(color.a, vertex_color.a);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
index 103dd633c9..b68240ba0d 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -46,6 +48,6 @@ void default_lighting_water()
color.rgb = atmosLighting(color.rgb);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
index bef72752da..da3b20012d 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -50,6 +52,6 @@ void default_lighting_water()
color = applyWaterFog(color);
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
index e9537d1e9d..00609e93cd 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
@@ -24,8 +24,10 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
-#endif
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
+#endif
VARYING vec4 vertex_color;
VARYING vec2 vary_texcoord0;
@@ -39,6 +41,6 @@ void default_lighting_water()
color.rgb = atmosLighting(color.rgb);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl
index 8b0c25b705..13ecb7a636 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -41,6 +43,6 @@ void default_lighting_water()
color.rgb = atmosLighting(color.rgb);
- gl_FragColor = applyWaterFog(color);
+ frag_color = applyWaterFog(color);
}
diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
index 4b85d61aca..d55f0db530 100644
--- a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2D texture0;
@@ -38,5 +40,5 @@ void main()
float tex0 = texture2D(texture0, vary_texcoord0.xy).a;
float tex1 = texture2D(texture1, vary_texcoord1.xy).a;
- gl_FragColor = vec4(tex0+(1.0-tex1)-0.5);
+ frag_color = vec4(tex0+(1.0-tex1)-0.5);
}
diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
index 3c6e22b295..add437d144 100644
--- a/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform float minimum_alpha;
@@ -42,5 +44,5 @@ void main()
discard;
}
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl b/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl
index a95c9e0ab9..7c0699d72f 100644
--- a/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl
@@ -23,9 +23,9 @@
* $/LicenseInfo$
*/
-ATTRIBUTE float texture_index;
+ATTRIBUTE ivec4 texture_index;
-VARYING float vary_texture_index;
+VARYING_FLAT ivec4 vary_texture_index;
void passTextureIndex()
{
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
index 1179b212ae..08f6ec63fe 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -78,7 +80,7 @@ void main()
vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
frag *= screen_res;
- float shadow = 1.0;
+ float shadow = 0.0;
vec4 pos = vec4(vary_position, 1.0);
vec4 spos = pos;
@@ -87,31 +89,65 @@ void main()
{
vec4 lpos;
- if (spos.z < -shadow_clip.z)
+ vec4 near_split = shadow_clip*-0.75;
+ vec4 far_split = shadow_clip*-1.25;
+ vec4 transition_domain = near_split-far_split;
+ float weight = 0.0;
+
+ if (spos.z < near_split.z)
{
lpos = shadow_matrix[3]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap3, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap3, lpos, 0.25)*w;
+ weight += w;
shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
}
- else if (spos.z < -shadow_clip.y)
+
+ if (spos.z < near_split.y && spos.z > far_split.z)
{
lpos = shadow_matrix[2]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap2, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
+ w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap2, lpos, 0.75)*w;
+ weight += w;
}
- else if (spos.z < -shadow_clip.x)
+
+ if (spos.z < near_split.x && spos.z > far_split.y)
{
lpos = shadow_matrix[1]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap1, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
+ w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
+ shadow += pcfShadow(shadowMap1, lpos, 0.75)*w;
+ weight += w;
}
- else
+
+ if (spos.z > far_split.x)
{
lpos = shadow_matrix[0]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap0, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
+
+ shadow += pcfShadow(shadowMap0, lpos, 1.0)*w;
+ weight += w;
}
+
+
+ shadow /= weight;
+ }
+ else
+ {
+ shadow = 1.0;
}
vec4 diff = diffuseLookup(vary_texcoord0.xy);
@@ -125,6 +161,6 @@ void main()
color.rgb += diff.rgb * vary_pointlight_col.rgb;
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
index 0df557f2aa..aae6a070e2 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRectShadow shadowMap0;
@@ -91,7 +93,7 @@ void main()
vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
frag *= screen_res;
- float shadow = 1.0;
+ float shadow = 0.0;
vec4 pos = vec4(vary_position, 1.0);
vec4 spos = pos;
@@ -100,33 +102,68 @@ void main()
{
vec4 lpos;
- if (spos.z < -shadow_clip.z)
+ vec4 near_split = shadow_clip*-0.75;
+ vec4 far_split = shadow_clip*-1.25;
+ vec4 transition_domain = near_split-far_split;
+ float weight = 0.0;
+
+ if (spos.z < near_split.z)
{
lpos = shadow_matrix[3]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap3, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap3, lpos, 0.25)*w;
+ weight += w;
shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
}
- else if (spos.z < -shadow_clip.y)
+
+ if (spos.z < near_split.y && spos.z > far_split.z)
{
lpos = shadow_matrix[2]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap2, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
+ w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap2, lpos, 0.75)*w;
+ weight += w;
}
- else if (spos.z < -shadow_clip.x)
+
+ if (spos.z < near_split.x && spos.z > far_split.y)
{
lpos = shadow_matrix[1]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap1, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
+ w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
+ shadow += pcfShadow(shadowMap1, lpos, 0.75)*w;
+ weight += w;
}
- else
+
+ if (spos.z > far_split.x)
{
lpos = shadow_matrix[0]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap0, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
+
+ shadow += pcfShadow(shadowMap0, lpos, 1.0)*w;
+ weight += w;
}
+
+
+ shadow /= weight;
+
}
-
+ else
+ {
+ shadow = 1.0;
+ }
+
vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
vec4 col = vec4(vary_ambient + vary_directional.rgb*shadow, vertex_color.a);
@@ -138,6 +175,6 @@ void main()
color.rgb += diff.rgb * vary_pointlight_col.rgb;
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl
index 331dbc7079..931577359e 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRectShadow shadowMap0;
@@ -90,7 +92,7 @@ void main()
vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
frag *= screen_res;
- float shadow = 1.0;
+ float shadow = 0.0;
vec4 pos = vec4(vary_position, 1.0);
vec4 spos = pos;
@@ -99,31 +101,65 @@ void main()
{
vec4 lpos;
- if (spos.z < -shadow_clip.z)
+ vec4 near_split = shadow_clip*-0.75;
+ vec4 far_split = shadow_clip*-1.25;
+ vec4 transition_domain = near_split-far_split;
+ float weight = 0.0;
+
+ if (spos.z < near_split.z)
{
lpos = shadow_matrix[3]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap3, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap3, lpos, 0.25)*w;
+ weight += w;
shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
}
- else if (spos.z < -shadow_clip.y)
+
+ if (spos.z < near_split.y && spos.z > far_split.z)
{
lpos = shadow_matrix[2]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap2, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
+ w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap2, lpos, 0.75)*w;
+ weight += w;
}
- else if (spos.z < -shadow_clip.x)
+
+ if (spos.z < near_split.x && spos.z > far_split.y)
{
lpos = shadow_matrix[1]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap1, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
+ w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
+ shadow += pcfShadow(shadowMap1, lpos, 0.75)*w;
+ weight += w;
}
- else
+
+ if (spos.z > far_split.x)
{
lpos = shadow_matrix[0]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap0, lpos, 1.5);
+
+ float w = 1.0;
+ w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
+
+ shadow += pcfShadow(shadowMap0, lpos, 1.0)*w;
+ weight += w;
}
+
+
+ shadow /= weight;
+ }
+ else
+ {
+ shadow = 1.0;
}
vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
@@ -137,6 +173,6 @@ void main()
color.rgb += diff.rgb * vary_pointlight_col.rgb;
- gl_FragColor = color;
+ frag_color = color;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index 14a683971a..f7f1f649ce 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -253,6 +255,6 @@ void main()
}
}
- gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ frag_color.rgb = col;
+ frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index 27ea77b5a2..a137bea30f 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
uniform sampler2DRect diffuseRect;
@@ -307,11 +309,11 @@ void main()
//
vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
float sa = dot(refnormpersp, sun_dir.xyz);
- vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).r;
+ vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*(6 * texture2D(lightFunc, vec2(sa, spec.a)).r);
// add the two types of shiny together
vec3 spec_contrib = dumbshiny * spec.rgb;
- bloom = dot(spec_contrib, spec_contrib);
+ bloom = dot(spec_contrib, spec_contrib) / 4;
col += spec_contrib;
//add environmentmap
@@ -330,6 +332,6 @@ void main()
col = diffuse.rgb;
}
- gl_FragColor.rgb = col;
- gl_FragColor.a = bloom;
+ frag_color.rgb = col;
+ frag_color.a = bloom;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index 31bd0c79da..99a277fbfc 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
VARYING vec4 vertex_color;
@@ -201,6 +203,6 @@ void main()
}
}
- gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ frag_color.rgb = col;
+ frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
index 229c2f4b67..8c4ccf9cb3 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -26,7 +26,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
//class 2, shadows, no SSAO
@@ -129,11 +131,11 @@ void main()
/*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL
{
- gl_FragColor = vec4(0.0); // doesn't matter
+ frag_color = vec4(0.0); // doesn't matter
return;
}*/
- float shadow = 1.0;
+ float shadow = 0.0;
float dp_directional_light = max(0.0, dot(norm, sun_dir.xyz));
vec3 shadow_pos = pos.xyz + displace*norm;
@@ -152,32 +154,62 @@ void main()
{
vec4 lpos;
- if (spos.z < -shadow_clip.z)
+ vec4 near_split = shadow_clip*-0.75;
+ vec4 far_split = shadow_clip*-1.25;
+ vec4 transition_domain = near_split-far_split;
+ float weight = 0.0;
+
+ if (spos.z < near_split.z)
{
lpos = shadow_matrix[3]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap3, lpos, 0.25);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap3, lpos, 0.25)*w;
+ weight += w;
shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
}
- else if (spos.z < -shadow_clip.y)
+
+ if (spos.z < near_split.y && spos.z > far_split.z)
{
lpos = shadow_matrix[2]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap2, lpos, 0.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
+ w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap2, lpos, 0.75)*w;
+ weight += w;
}
- else if (spos.z < -shadow_clip.x)
+
+ if (spos.z < near_split.x && spos.z > far_split.y)
{
lpos = shadow_matrix[1]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap1, lpos, 0.75);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
+ w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
+ shadow += pcfShadow(shadowMap1, lpos, 0.75)*w;
+ weight += w;
}
- else
+
+ if (spos.z > far_split.x)
{
lpos = shadow_matrix[0]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap0, lpos, 1.0);
+
+ float w = 1.0;
+ w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
+
+ shadow += pcfShadow(shadowMap0, lpos, 1.0)*w;
+ weight += w;
}
+
+ shadow /= weight;
+
// take the most-shadowed value out of these two:
// * the blurred sun shadow in the light (shadow) map
// * an unblurred dot product between the sun and this norm
@@ -198,19 +230,19 @@ void main()
shadow = 1.0;
}
- gl_FragColor[0] = shadow;
- gl_FragColor[1] = 1.0;
+ frag_color[0] = shadow;
+ frag_color[1] = 1.0;
spos = vec4(shadow_pos+norm*spot_shadow_offset, 1.0);
//spotlight shadow 1
vec4 lpos = shadow_matrix[4]*spos;
- gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.8);
+ frag_color[2] = pcfShadow(shadowMap4, lpos, 0.8);
//spotlight shadow 2
lpos = shadow_matrix[5]*spos;
- gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.8);
+ frag_color[3] = pcfShadow(shadowMap5, lpos, 0.8);
- //gl_FragColor.rgb = pos.xyz;
- //gl_FragColor.b = shadow;
+ //frag_color.rgb = pos.xyz;
+ //frag_color.b = shadow;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
index 6b420833b9..02075a7687 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
@@ -25,7 +25,9 @@
#extension GL_ARB_texture_rectangle : enable
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
//class 2 -- shadows and SSAO
@@ -190,11 +192,11 @@ void main()
/*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL
{
- gl_FragColor = vec4(0.0); // doesn't matter
+ frag_color = vec4(0.0); // doesn't matter
return;
}*/
- float shadow = 1.0;
+ float shadow = 0.0;
float dp_directional_light = max(0.0, dot(norm, sun_dir.xyz));
vec3 shadow_pos = pos.xyz + displace*norm;
@@ -212,33 +214,63 @@ void main()
else
{
vec4 lpos;
-
- if (spos.z < -shadow_clip.z)
+
+ vec4 near_split = shadow_clip*-0.75;
+ vec4 far_split = shadow_clip*-1.25;
+ vec4 transition_domain = near_split-far_split;
+ float weight = 0.0;
+
+ if (spos.z < near_split.z)
{
lpos = shadow_matrix[3]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap3, lpos, 0.25);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap3, lpos, 0.25)*w;
+ weight += w;
shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
}
- else if (spos.z < -shadow_clip.y)
+
+ if (spos.z < near_split.y && spos.z > far_split.z)
{
lpos = shadow_matrix[2]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap2, lpos, 0.5);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
+ w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
+ shadow += pcfShadow(shadowMap2, lpos, 0.75)*w;
+ weight += w;
}
- else if (spos.z < -shadow_clip.x)
+
+ if (spos.z < near_split.x && spos.z > far_split.y)
{
lpos = shadow_matrix[1]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap1, lpos, 0.75);
+
+ float w = 1.0;
+ w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
+ w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
+ shadow += pcfShadow(shadowMap1, lpos, 0.75)*w;
+ weight += w;
}
- else
+
+ if (spos.z > far_split.x)
{
lpos = shadow_matrix[0]*spos;
lpos.xy *= shadow_res;
- shadow = pcfShadow(shadowMap0, lpos, 1.0);
+
+ float w = 1.0;
+ w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
+
+ shadow += pcfShadow(shadowMap0, lpos, 1.0)*w;
+ weight += w;
}
+
+ shadow /= weight;
+
// take the most-shadowed value out of these two:
// * the blurred sun shadow in the light (shadow) map
// * an unblurred dot product between the sun and this norm
@@ -259,19 +291,19 @@ void main()
shadow = 1.0;
}
- gl_FragColor[0] = shadow;
- gl_FragColor[1] = calcAmbientOcclusion(pos, norm);
+ frag_color[0] = shadow;
+ frag_color[1] = calcAmbientOcclusion(pos, norm);
spos = vec4(shadow_pos+norm*spot_shadow_offset, 1.0);
//spotlight shadow 1
vec4 lpos = shadow_matrix[4]*spos;
- gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.8);
+ frag_color[2] = pcfShadow(shadowMap4, lpos, 0.8);
//spotlight shadow 2
lpos = shadow_matrix[5]*spos;
- gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.8);
+ frag_color[3] = pcfShadow(shadowMap5, lpos, 0.8);
- //gl_FragColor.rgb = pos.xyz;
- //gl_FragColor.b = shadow;
+ //frag_color.rgb = pos.xyz;
+ //frag_color.b = shadow;
}
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
index 4ab06c6e21..96c70651b1 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
/////////////////////////////////////////////////////////////////////////
@@ -96,7 +98,7 @@ void main()
color *= 2.;
/// Gamma correct for WL (soft clip effect).
- gl_FragColor.rgb = scaleSoftClip(color.rgb);
- gl_FragColor.a = alpha1;
+ frag_color.rgb = scaleSoftClip(color.rgb);
+ frag_color.a = alpha1;
}
diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
index c9d96b2cf4..e2a2367626 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
@@ -24,7 +24,9 @@
*/
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 gl_FragColor;
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
#endif
/////////////////////////////////////////////////////////////////////////
@@ -57,7 +59,7 @@ void main()
color *= 2.;
/// Gamma correct for WL (soft clip effect).
- gl_FragColor.rgb = scaleSoftClip(color.rgb);
- gl_FragColor.a = 1.0;
+ frag_color.rgb = scaleSoftClip(color.rgb);
+ frag_color.a = 1.0;
}
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index 6931b55c4c..bad60a9757 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -26,6 +26,10 @@
#include "llviewerprecompiledheaders.h"
+#ifdef INCLUDE_VLD
+#include "vld.h"
+#endif
+
#include "llappviewerwin32.h"
#include "llmemtype.h"
@@ -105,6 +109,14 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
+#ifdef INCLUDE_VLD
+ // only works for debug builds (hard coded into vld.h)
+ #ifdef _DEBUG
+ // start with Visual Leak Detector turned off
+ VLDGlobalDisable();
+ #endif // _DEBUG
+#endif // INCLUDE_VLD
+
LLMemType mt1(LLMemType::MTYPE_STARTUP);
const S32 MAX_HEAPS = 255;
diff --git a/indra/newview/llassetuploadqueue.cpp b/indra/newview/llassetuploadqueue.cpp
index 7e50098a17..f943759bb8 100644
--- a/indra/newview/llassetuploadqueue.cpp
+++ b/indra/newview/llassetuploadqueue.cpp
@@ -123,7 +123,9 @@ public:
for(LLSD::array_const_iterator line = compile_errors.beginArray();
line < compile_errors.endArray(); line++)
{
- mSupplier->log(line->asString());
+ std::string str = line->asString();
+ str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
+ mSupplier->log(str);
llinfos << content["errors"] << llendl;
}
}
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 9a7cdcfa21..f618af9536 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -738,6 +738,11 @@ void LLAvatarActions::shareWithAvatars()
LLFloaterAvatarPicker* picker =
LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2), TRUE, FALSE);
+ if (!picker)
+ {
+ return;
+ }
+
picker->setOkBtnEnableCb(boost::bind(is_give_inventory_acceptable));
picker->openFriendsTab();
LLNotificationsUtil::add("ShareNotification");
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index a42677845e..4f5f9e22b6 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -100,6 +100,7 @@ BOOL LLFloaterScriptQueue::postBuild()
{
childSetAction("close",onCloseBtn,this);
getChildView("close")->setEnabled(FALSE);
+ setVisible(true);
return TRUE;
}
@@ -158,7 +159,6 @@ void LLFloaterScriptQueue::addObject(const LLUUID& id)
BOOL LLFloaterScriptQueue::start()
{
- //llinfos << "LLFloaterCompileQueue::start()" << llendl;
std::string buffer;
LLSelectMgr *mgr = LLSelectMgr::getInstance();
@@ -178,7 +178,7 @@ BOOL LLFloaterScriptQueue::start()
args["[COUNT]"] = llformat ("%d", mObjectIDs.count());
buffer = getString ("Starting", args);
- getChild<LLScrollListCtrl>("queue output")->setCommentText(buffer);
+ getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
return nextObject();
}
@@ -211,7 +211,7 @@ BOOL LLFloaterScriptQueue::nextObject()
if(isDone() && !mDone)
{
mDone = true;
- getChild<LLScrollListCtrl>("queue output")->setCommentText(getString("Done"));
+ getChild<LLScrollListCtrl>("queue output")->addSimpleElement(getString("Done"), ADD_BOTTOM);
getChildView("close")->setEnabled(TRUE);
}
return successful_start;
@@ -277,7 +277,7 @@ public:
return;
}
- queue->getChild<LLScrollListCtrl>("queue output")->setCommentText(message);
+ queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(message, ADD_BOTTOM);
}
private:
@@ -464,7 +464,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
}
if(queue && (buffer.size() > 0))
{
- queue->getChild<LLScrollListCtrl>("queue output")->setCommentText(buffer);
+ queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
}
delete data;
}
@@ -637,7 +637,7 @@ void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj,
LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
std::string buffer;
buffer = getString("Resetting") + (": ") + item->getName();
- getChild<LLScrollListCtrl>("queue output")->setCommentText(buffer);
+ getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_ScriptReset);
msg->nextBlockFast(_PREHASH_AgentData);
@@ -690,7 +690,7 @@ void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj,
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
std::string buffer;
buffer = getString("Running") + (": ") + item->getName();
- list->setCommentText(buffer);
+ list->addSimpleElement(buffer, ADD_BOTTOM);
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_SetScriptRunning);
@@ -745,7 +745,7 @@ void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj,
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
std::string buffer;
buffer = getString("NotRunning") + (": ") +item->getName();
- list->setCommentText(buffer);
+ list->addSimpleElement(buffer, ADD_BOTTOM);
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_SetScriptRunning);
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index b002c11af5..0103373fd2 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -1138,6 +1138,8 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
return;
}
+ llassert(LLPipeline::sImpostorRender || !avatarp->isVisuallyMuted());
+
/*if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview, 3=morph view
{
gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f));
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 5d6081a35c..a93b2b71de 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -125,8 +125,16 @@ BOOL LLViewerDynamicTexture::render()
//-----------------------------------------------------------------------------
void LLViewerDynamicTexture::preRender(BOOL clear_depth)
{
- {
- // force rendering to on-screen portion of frame buffer
+ //only images up to 512x512 are supported
+ llassert(mFullHeight <= 512);
+ llassert(mFullWidth <= 512);
+
+ if (gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete())
+ { //using offscreen render target, just use the bottom left corner
+ mOrigin.set(0, 0);
+ }
+ else
+ { // force rendering to on-screen portion of frame buffer
LLCoordScreen window_pos;
gViewerWindow->getWindow()->getPosition( &window_pos );
mOrigin.set(0, gViewerWindow->getWindowHeightRaw() - mFullHeight); // top left corner
@@ -140,9 +148,9 @@ void LLViewerDynamicTexture::preRender(BOOL clear_depth)
mOrigin.mY += window_pos.mY;
mOrigin.mY = llmax(mOrigin.mY, 0) ;
}
-
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
+
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// Set up camera
LLViewerCamera* camera = LLViewerCamera::getInstance();
mCamera.setOrigin(*camera);
@@ -208,6 +216,13 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
return TRUE;
}
+ bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete();
+
+ if (use_fbo)
+ {
+ gPipeline.mWaterDis.bindTarget();
+ }
+
LLGLSLShader::bindNoShader();
LLVertexBuffer::unbind();
@@ -241,6 +256,11 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
}
}
+ if (use_fbo)
+ {
+ gPipeline.mWaterDis.flush();
+ }
+
return ret;
}
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index cfb4147e71..4108d69e82 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -1742,14 +1742,22 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
LLVector4a texIdx;
- F32 index = (F32) (mTextureIndex < 255 ? mTextureIndex : 0);
+ U8 index = mTextureIndex < 255 ? mTextureIndex : 0;
+
+ F32 val = 0.f;
+ U8* vp = (U8*) &val;
+ vp[0] = index;
+ vp[1] = 0;
+ vp[2] = 0;
+ vp[3] = 0;
+
llassert(index <= LLGLSLShader::sIndexedTextureChannels-1);
LLVector4Logical mask;
mask.clear();
mask.setElement<3>();
- texIdx.set(0,0,0,index);
+ texIdx.set(0,0,0,val);
{
LLFastTimer t(FTM_FACE_POSITION_STORE);
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index f4b6dc2c81..575b613ccf 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -39,7 +39,7 @@
#include "llagent.h"
#include "llclipboard.h"
-#include "llinventoryclipboard.h"
+#include "llclipboard.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
#include "llfloatersidepanelcontainer.h"
@@ -1118,7 +1118,7 @@ BOOL LLFavoritesBarCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
}
void copy_slurl_to_clipboard_cb(std::string& slurl)
{
- gClipboard.copyFromString(utf8str_to_wstring(slurl));
+ LLClipboard::instance().copyToClipboard(utf8str_to_wstring(slurl),0,slurl.size());
LLSD args;
args["SLURL"] = slurl;
@@ -1187,7 +1187,7 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)
}
else if (action == "copy")
{
- LLInventoryClipboard::instance().store(mSelectedItemID);
+ LLClipboard::instance().copyToClipboard(mSelectedItemID, LLAssetType::AT_LANDMARK);
}
else if (action == "paste")
{
@@ -1211,13 +1211,13 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)
BOOL LLFavoritesBarCtrl::isClipboardPasteable() const
{
- if (!LLInventoryClipboard::instance().hasContents())
+ if (!LLClipboard::instance().hasContents())
{
return FALSE;
}
LLDynamicArray<LLUUID> objects;
- LLInventoryClipboard::instance().retrieve(objects);
+ LLClipboard::instance().pasteFromClipboard(objects);
S32 count = objects.count();
for(S32 i = 0; i < count; i++)
{
@@ -1246,7 +1246,7 @@ void LLFavoritesBarCtrl::pastFromClipboard() const
{
LLInventoryItem* item = NULL;
LLDynamicArray<LLUUID> objects;
- LLInventoryClipboard::instance().retrieve(objects);
+ LLClipboard::instance().pasteFromClipboard(objects);
S32 count = objects.count();
LLUUID parent_id(mFavoriteFolderId);
for(S32 i = 0; i < count; i++)
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index a7388d21a3..bca4b5e447 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -210,7 +210,9 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
LLSD row;
BOOL item_is_multi = FALSE;
- if ( inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED )
+ if ((inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED
+ || inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS)
+ && !(inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK))
{
item_is_multi = TRUE;
}
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index d495f20a9a..56051ff684 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -32,7 +32,7 @@
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
-#include "llinventoryclipboard.h"
+#include "llclipboard.h"
#include "llagent.h"
#include "llappearancemgr.h"
@@ -90,6 +90,12 @@ public:
if(mFloater)
{
mFloater->addGesture(inv_item,NULL,mFloater->getChild<LLScrollListCtrl>("gesture_list"));
+
+ // EXP-1909 (Pasted gesture displayed twice)
+ // The problem is that addGesture is called here for the second time for the same item (which is copied)
+ // First time addGesture is called from LLFloaterGestureObserver::changed(), which is a callback for inventory
+ // change. So we need to refresh the gesture list to avoid duplicates.
+ mFloater->refreshAll();
}
}
};
@@ -391,11 +397,11 @@ bool LLFloaterGesture::isActionEnabled(const LLSD& command)
std::string command_name = command.asString();
if("paste" == command_name)
{
- if(!LLInventoryClipboard::instance().hasContents())
+ if(!LLClipboard::instance().hasContents())
return false;
LLDynamicArray<LLUUID> ids;
- LLInventoryClipboard::instance().retrieve(ids);
+ LLClipboard::instance().pasteFromClipboard(ids);
for(LLDynamicArray<LLUUID>::iterator it = ids.begin(); it != ids.end(); it++)
{
LLInventoryItem* item = gInventory.getItem(*it);
@@ -490,27 +496,26 @@ void LLFloaterGesture::onActivateBtnClick()
void LLFloaterGesture::onCopyPasteAction(const LLSD& command)
{
std::string command_name = command.asString();
- // since we select this comman inventory item had already arrived .
+ // Since we select this command, the inventory items must have already arrived
if("copy_gesture" == command_name)
{
uuid_vec_t ids;
getSelectedIds(ids);
- // make sure that clopboard is empty
- LLInventoryClipboard::instance().reset();
+ // Make sure the clipboard is empty
+ LLClipboard::instance().reset();
for(uuid_vec_t::iterator it = ids.begin(); it != ids.end(); it++)
{
LLInventoryItem* item = gInventory.getItem(*it);
if(item && item->getInventoryType() == LLInventoryType::IT_GESTURE)
{
- LLInventoryClipboard::instance().add(item->getUUID());
+ LLClipboard::instance().addToClipboard(item->getUUID(),LLAssetType::AT_GESTURE);
}
}
}
else if ("paste" == command_name)
{
- LLInventoryClipboard& clipbord = LLInventoryClipboard::instance();
LLDynamicArray<LLUUID> ids;
- clipbord.retrieve(ids);
+ LLClipboard::instance().pasteFromClipboard(ids);
if(ids.empty() || !gInventory.isCategoryComplete(mGestureFolderID))
return;
LLInventoryCategory* gesture_dir = gInventory.getCategory(mGestureFolderID);
@@ -530,11 +535,11 @@ void LLFloaterGesture::onCopyPasteAction(const LLSD& command)
gesture_dir->getUUID(), getString("copy_name", string_args), cb);
}
}
- clipbord.reset();
+ LLClipboard::instance().reset();
}
else if ("copy_uuid" == command_name)
{
- gClipboard.copyFromString(utf8str_to_wstring(mGestureList->getCurrentID().asString()), mGestureList->getCurrentID());
+ LLClipboard::instance().copyToClipboard(mGestureList->getCurrentID(),LLAssetType::AT_GESTURE);
}
}
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index a34e0353ec..fb905eae11 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -1123,8 +1123,12 @@ bool LLPanelObjectTools::callbackSimWideDeletes( const LLSD& notification, const
void LLPanelObjectTools::onClickSet()
{
+ LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLPanelObjectTools::callbackAvatarID, this, _1,_2));
// grandparent is a floater, which can have a dependent
- gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelObjectTools::callbackAvatarID, this, _1,_2)));
+ if (picker)
+ {
+ gFloaterView->getParentFloater(this)->addDependentFloater(picker);
+ }
}
void LLPanelObjectTools::onClickSetBySelection(void* data)
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 95da8ff948..ee18c95b34 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -2739,7 +2739,12 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
void LLPanelLandAccess::onClickAddAccess()
{
- gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1)) );
+ LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
+ boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1));
+ if (picker)
+ {
+ gFloaterView->getParentFloater(this)->addDependentFloater(picker);
+ }
}
void LLPanelLandAccess::callbackAvatarCBAccess(const uuid_vec_t& ids)
@@ -2783,7 +2788,12 @@ void LLPanelLandAccess::onClickRemoveAccess(void* data)
// static
void LLPanelLandAccess::onClickAddBanned()
{
- gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1)));
+ LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
+ boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1));
+ if (picker)
+ {
+ gFloaterView->getParentFloater(this)->addDependentFloater(picker);
+ }
}
// static
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 676059779c..17850ff35d 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -650,7 +650,10 @@ void LLPanelRegionGeneralInfo::onClickKick()
// in order to set up floater dependency
LLFloater* parent_floater = gFloaterView->getParentFloater(this);
LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelRegionGeneralInfo::onKickCommit, this, _1), FALSE, TRUE);
- parent_floater->addDependentFloater(child_floater);
+ if (child_floater)
+ {
+ parent_floater->addDependentFloater(child_floater);
+ }
}
void LLPanelRegionGeneralInfo::onKickCommit(const uuid_vec_t& ids)
@@ -1470,7 +1473,10 @@ void LLPanelEstateInfo::onClickKickUser()
// in order to set up floater dependency
LLFloater* parent_floater = gFloaterView->getParentFloater(this);
LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::onKickUserCommit, this, _1), FALSE, TRUE);
- parent_floater->addDependentFloater(child_floater);
+ if (child_floater)
+ {
+ parent_floater->addDependentFloater(child_floater);
+ }
}
void LLPanelEstateInfo::onKickUserCommit(const uuid_vec_t& ids)
@@ -1891,6 +1897,26 @@ void LLPanelEstateInfo::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_
gAgent.sendReliableMessage();
}
+// static
+void LLPanelEstateInfo::updateEstateOwnerName(const std::string& name)
+{
+ LLPanelEstateInfo* panelp = LLFloaterRegionInfo::getPanelEstate();
+ if (panelp)
+ {
+ panelp->setOwnerName(name);
+ }
+}
+
+// static
+void LLPanelEstateInfo::updateEstateName(const std::string& name)
+{
+ LLPanelEstateInfo* panelp = LLFloaterRegionInfo::getPanelEstate();
+ if (panelp)
+ {
+ panelp->getChildRef<LLTextBox>("estate_name").setText(name);
+ }
+}
+
void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
{
BOOL god = gAgent.isGodlike();
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index ae45949b4a..e36ef4604b 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -294,6 +294,9 @@ public:
void updateControls(LLViewerRegion* region);
+ static void updateEstateName(const std::string& name);
+ static void updateEstateOwnerName(const std::string& name);
+
virtual bool refreshFromRegion(LLViewerRegion* region);
virtual bool estateUpdate(LLMessageSystem* msg);
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index c08848b1ea..3ec1e372eb 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -285,7 +285,11 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
void LLFloaterReporter::onClickSelectAbuser()
{
- gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterReporter::callbackAvatarID, this, _1, _2), FALSE, TRUE ));
+ LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLFloaterReporter::callbackAvatarID, this, _1, _2), FALSE, TRUE );
+ if (picker)
+ {
+ gFloaterView->getParentFloater(this)->addDependentFloater(picker);
+ }
}
void LLFloaterReporter::callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index 3434841d09..64c0dfa023 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -392,8 +392,12 @@ void LLFloaterSellLandUI::onChangeValue(LLUICtrl *ctrl, void *userdata)
void LLFloaterSellLandUI::doSelectAgent()
{
+ LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLFloaterSellLandUI::callbackAvatarPick, this, _1, _2), FALSE, TRUE);
// grandparent is a floater, in order to set up dependency
- addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterSellLandUI::callbackAvatarPick, this, _1, _2), FALSE, TRUE));
+ if (picker)
+ {
+ addDependentFloater(picker);
+ }
}
void LLFloaterSellLandUI::callbackAvatarPick(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
diff --git a/indra/newview/llfloatervoiceeffect.cpp b/indra/newview/llfloatervoiceeffect.cpp
index 030fed0575..227720bee3 100644
--- a/indra/newview/llfloatervoiceeffect.cpp
+++ b/indra/newview/llfloatervoiceeffect.cpp
@@ -145,7 +145,9 @@ void LLFloaterVoiceEffect::refreshEffectList()
for (voice_effect_list_t::const_iterator it = template_list.begin(); it != template_list.end(); ++it)
{
const LLUUID& effect_id = it->second;
- std::string effect_name = getString("effect_" + it->first); // will throw an error if the effect is not listed in the XML
+
+ std::string localized_effect = "effect_" + it->first;
+ std::string effect_name = hasString(localized_effect) ? getString(localized_effect) : it->first; // XML contains localized effects names
LLSD effect_properties = effect_interface->getVoiceEffectProperties(effect_id);
diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp
index 3b5c3663fb..3fe2518de6 100644
--- a/indra/newview/llfloaterwebcontent.cpp
+++ b/indra/newview/llfloaterwebcontent.cpp
@@ -169,7 +169,7 @@ void LLFloaterWebContent::geometryChanged(const std::string &uuid, S32 x, S32 y,
void LLFloaterWebContent::geometryChanged(S32 x, S32 y, S32 width, S32 height)
{
// Make sure the layout of the browser control is updated, so this calculation is correct.
- LLLayoutStack::updateClass();
+ getChild<LLLayoutStack>("stack1")->updateLayout();
// TODO: need to adjust size and constrain position to make sure floaters aren't moved outside the window view, etc.
LLCoordWindow window_size;
@@ -258,7 +258,7 @@ void LLFloaterWebContent::open_media(const Params& p)
if (!p.preferred_media_size().isEmpty())
{
- LLLayoutStack::updateClass();
+ getChild<LLLayoutStack>("stack1")->updateLayout();
LLRect browser_rect = mWebBrowser->calcScreenRect();
LLCoordWindow window_size;
getWindow()->getSize(&window_size);
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 86001e4146..1fa194ab19 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -30,7 +30,7 @@
#include "llcallbacklist.h"
#include "llinventorybridge.h"
-#include "llinventoryclipboard.h" // *TODO: remove this once hack below gone.
+#include "llclipboard.h" // *TODO: remove this once hack below gone.
#include "llinventoryfilter.h"
#include "llinventoryfunctions.h"
#include "llinventorymodelbackgroundfetch.h"
@@ -165,6 +165,33 @@ void LLCloseAllFoldersFunctor::doItem(LLFolderViewItem* item)
{ }
///----------------------------------------------------------------------------
+/// Class LLFolderViewScrollContainer
+///----------------------------------------------------------------------------
+
+// virtual
+const LLRect LLFolderViewScrollContainer::getScrolledViewRect() const
+{
+ LLRect rect = LLRect::null;
+ if (mScrolledView)
+ {
+ LLFolderView* folder_view = dynamic_cast<LLFolderView*>(mScrolledView);
+ if (folder_view)
+ {
+ S32 height = folder_view->mRunningHeight;
+
+ rect = mScrolledView->getRect();
+ rect.setLeftTopAndSize(rect.mLeft, rect.mTop, rect.getWidth(), height);
+ }
+ }
+
+ return rect;
+}
+
+LLFolderViewScrollContainer::LLFolderViewScrollContainer(const LLScrollContainer::Params& p)
+: LLScrollContainer(p)
+{}
+
+///----------------------------------------------------------------------------
/// Class LLFolderView
///----------------------------------------------------------------------------
LLFolderView::Params::Params()
@@ -429,8 +456,8 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen
}
else
{
- folderp->setVisible(show_folder_state == LLInventoryFilter::SHOW_ALL_FOLDERS || // always show folders?
- (folderp->getFiltered(filter_generation) || folderp->hasFilteredDescendants(filter_generation))); // passed filter or has descendants that passed filter
+ folderp->setVisible((show_folder_state == LLInventoryFilter::SHOW_ALL_FOLDERS || // always show folders?
+ (folderp->getFiltered(filter_generation) || folderp->hasFilteredDescendants(filter_generation))));
}
if (folderp->getVisible())
@@ -535,6 +562,7 @@ void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent)
{
width = scroll_rect.getWidth();
}
+
LLView::reshape(width, height, called_from_parent);
mReshapeSignal(mSelectedItems, FALSE);
}
@@ -769,7 +797,7 @@ void LLFolderView::sanitizeSelection()
// if nothing selected after prior constraints...
if (mSelectedItems.empty())
{
- // ...select first available parent of original selection, or "My Inventory" otherwise
+ // ...select first available parent of original selection
LLFolderViewItem* new_selection = NULL;
if (original_selected_item)
{
@@ -943,6 +971,9 @@ void LLFolderView::draw()
// We should call this method to also notify parent about required rect.
// See EXT-7564, EXT-7047.
arrangeFromRoot();
+ LLUI::popMatrix();
+ LLUI::pushMatrix();
+ LLUI::translate((F32)getRect().mLeft, (F32)getRect().mBottom);
}
}
@@ -1014,6 +1045,24 @@ bool isDescendantOfASelectedItem(LLFolderViewItem* item, const std::vector<LLFol
return false;
}
+// static
+void LLFolderView::removeCutItems()
+{
+ // There's no item in "cut" mode on the clipboard -> exit
+ if (!LLClipboard::instance().isCutMode())
+ return;
+
+ // Get the list of clipboard item uuids and iterate through them
+ LLDynamicArray<LLUUID> objects;
+ LLClipboard::instance().pasteFromClipboard(objects);
+ for (LLDynamicArray<LLUUID>::const_iterator iter = objects.begin();
+ iter != objects.end();
+ ++iter)
+ {
+ gInventory.removeObject(*iter);
+ }
+}
+
void LLFolderView::onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
@@ -1293,7 +1342,7 @@ BOOL LLFolderView::canCopy() const
void LLFolderView::copy()
{
// *NOTE: total hack to clear the inventory clipboard
- LLInventoryClipboard::instance().reset();
+ LLClipboard::instance().reset();
S32 count = mSelectedItems.size();
if(getVisible() && getEnabled() && (count > 0))
{
@@ -1334,7 +1383,7 @@ BOOL LLFolderView::canCut() const
void LLFolderView::cut()
{
// clear the inventory clipboard
- LLInventoryClipboard::instance().reset();
+ LLClipboard::instance().reset();
S32 count = mSelectedItems.size();
if(getVisible() && getEnabled() && (count > 0))
{
@@ -1348,6 +1397,7 @@ void LLFolderView::cut()
listener->cutToClipboard();
}
}
+ LLFolderView::removeCutItems();
}
mSearchString.clear();
}
@@ -1961,19 +2011,13 @@ void LLFolderView::deleteAllChildren()
void LLFolderView::scrollToShowSelection()
{
- // If items are filtered while background fetch is in progress
- // scrollbar resets to the first filtered item. See EXT-3981.
- // However we allow scrolling for folder views with mAutoSelectOverride
- // (used in Places SP) as an exception because the selection in them
- // is not reset during items filtering. See STORM-133.
- if ( (!LLInventoryModelBackgroundFetch::instance().folderFetchActive() || mAutoSelectOverride)
- && mSelectedItems.size() )
+ if ( mSelectedItems.size() )
{
mNeedsScroll = TRUE;
}
}
-// If the parent is scroll containter, scroll it to make the selection
+// If the parent is scroll container, scroll it to make the selection
// is maximally visible.
void LLFolderView::scrollToShowItem(LLFolderViewItem* item, const LLRect& constraint_rect)
{
@@ -2108,10 +2152,10 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
removeSelectedItems();
return true;
}
-
- if ("copy" == action)
- {
- LLInventoryClipboard::instance().reset();
+ if (("copy" == action) || ("cut" == action))
+ {
+ // Clear the clipboard before we start adding things on it
+ LLClipboard::instance().reset();
}
static const std::string change_folder_string = "change_folder_type_";
@@ -2192,46 +2236,56 @@ void LLFolderView::doIdle()
arrangeAll();
}
+ if (mFilter->isModified() && mFilter->isNotDefault())
+ {
+ mNeedsAutoSelect = TRUE;
+ }
mFilter->clearModified();
- BOOL filter_modified_and_active = mCompletedFilterGeneration < mFilter->getCurrentGeneration() &&
- mFilter->isNotDefault();
- mNeedsAutoSelect = filter_modified_and_active &&
- !(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());
- // filter to determine visiblity before arranging
+ // filter to determine visibility before arranging
filterFromRoot();
// automatically show matching items, and select first one if we had a selection
- // do this every frame until user puts keyboard focus into the inventory window
- // signaling the end of the automatic update
- // only do this when mNeedsFilter is set, meaning filtered items have
- // potentially changed
if (mNeedsAutoSelect)
{
LLFastTimer t3(FTM_AUTO_SELECT);
// select new item only if a filtered item not currently selected
LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back();
- if ((selected_itemp && !selected_itemp->getFiltered()) && !mAutoSelectOverride)
+ if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyFiltered()))
{
- // select first filtered item
- LLSelectFirstFilteredItem filter;
- applyFunctorRecursively(filter);
+ // these are named variables to get around gcc not binding non-const references to rvalues
+ // and functor application is inherently non-const to allow for stateful functors
+ LLSelectFirstFilteredItem functor;
+ applyFunctorRecursively(functor);
}
// Open filtered folders for folder views with mAutoSelectOverride=TRUE.
// Used by LLPlacesFolderView.
if (mAutoSelectOverride && !mFilter->getFilterSubString().empty())
{
- LLOpenFilteredFolders filter;
- applyFunctorRecursively(filter);
+ // these are named variables to get around gcc not binding non-const references to rvalues
+ // and functor application is inherently non-const to allow for stateful functors
+ LLOpenFilteredFolders functor;
+ applyFunctorRecursively(functor);
}
scrollToShowSelection();
}
+ BOOL filter_finished = mCompletedFilterGeneration >= mFilter->getCurrentGeneration()
+ && !LLInventoryModelBackgroundFetch::instance().folderFetchActive();
+ if (filter_finished
+ || gFocusMgr.childHasKeyboardFocus(inventory_panel)
+ || gFocusMgr.childHasMouseCapture(inventory_panel))
+ {
+ // finishing the filter process, giving focus to the folder view, or dragging the scrollbar all stop the auto select process
+ mNeedsAutoSelect = FALSE;
+ }
+
+
// during filtering process, try to pin selected item's location on screen
// this will happen when searching your inventory and when new items arrive
- if (filter_modified_and_active)
+ if (!filter_finished)
{
// calculate rectangle to pin item to at start of animated rearrange
if (!mPinningSelectedItem && !mSelectedItems.empty())
@@ -2297,7 +2351,7 @@ void LLFolderView::doIdle()
{
scrollToShowItem(mSelectedItems.back(), constraint_rect);
// continue scrolling until animated layout change is done
- if (!filter_modified_and_active
+ if (filter_finished
&& (!needsArrange() || !is_visible))
{
mNeedsScroll = FALSE;
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 1d018b5e6a..da8bb15f8e 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -44,6 +44,7 @@
#include "lldepthstack.h"
#include "lleditmenuhandler.h"
#include "llfontgl.h"
+#include "llscrollcontainer.h"
#include "lltooldraganddrop.h"
#include "llviewertexture.h"
@@ -54,15 +55,33 @@ class LLInventoryModel;
class LLPanel;
class LLLineEditor;
class LLMenuGL;
-class LLScrollContainer;
class LLUICtrl;
class LLTextBox;
+/**
+ * Class LLFolderViewScrollContainer
+ *
+ * A scroll container which provides the information about the height
+ * of currently displayed folder view contents.
+ * Used for updating vertical scroll bar visibility in inventory panel.
+ * See LLScrollContainer::calcVisibleSize().
+ */
+class LLFolderViewScrollContainer : public LLScrollContainer
+{
+public:
+ /*virtual*/ ~LLFolderViewScrollContainer() {};
+ /*virtual*/ const LLRect getScrolledViewRect() const;
+
+protected:
+ LLFolderViewScrollContainer(const LLScrollContainer::Params& p);
+ friend class LLUICtrlFactory;
+};
+
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLFolderView
//
-// Th LLFolderView represents the root level folder view object. It
-// manages the screen region of the folder view.
+// The LLFolderView represents the root level folder view object.
+// It manages the screen region of the folder view.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
@@ -81,6 +100,9 @@ public:
Params();
};
+
+ friend class LLFolderViewScrollContainer;
+
LLFolderView(const Params&);
virtual ~LLFolderView( void );
@@ -88,7 +110,7 @@ public:
virtual LLFolderView* getRoot() { return this; }
- // FolderViews default to sort by name. This will change that,
+ // FolderViews default to sort by name. This will change that,
// and resort the items if necessary.
void setSortOrder(U32 order);
void setFilterPermMask(PermissionMask filter_perm_mask);
@@ -117,20 +139,20 @@ public:
virtual void setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse);
virtual BOOL addFolder( LLFolderViewFolder* folder);
- // Finds width and height of this object and it's children. Also
- // makes sure that this view and it's children are the right size.
+ // Find width and height of this object and its children. Also
+ // makes sure that this view and its children are the right size.
virtual S32 arrange( S32* width, S32* height, S32 filter_generation );
void arrangeAll() { mArrangeGeneration++; }
S32 getArrangeGeneration() { return mArrangeGeneration; }
- // applies filters to control visibility of inventory items
+ // Apply filters to control visibility of inventory items
virtual void filter( LLInventoryFilter& filter);
- // get the last selected item
+ // Get the last selected item
virtual LLFolderViewItem* getCurSelectedItem( void );
- // Record the selected item and pass it down the hierachy.
+ // Record the selected item and pass it down the hierarchy.
virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
BOOL take_keyboard_focus);
@@ -140,13 +162,13 @@ public:
// Called once a frame to update the selection if mSelectThisID has been set
void updateSelection();
- // This method is used to toggle the selection of an item. Walks
- // children, and keeps track of selected objects.
+ // This method is used to toggle the selection of an item.
+ // Walks children and keeps track of selected objects.
virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
virtual std::set<LLUUID> getSelectionList() const;
- // make sure if ancestor is selected, descendents are not
+ // Make sure if ancestor is selected, descendents are not
void sanitizeSelection();
void clearSelection();
void addToSelectionList(LLFolderViewItem* item);
@@ -157,21 +179,22 @@ public:
void setDraggingOverItem(LLFolderViewItem* item) { mDraggingOverItem = item; }
LLFolderViewItem* getDraggingOverItem() { return mDraggingOverItem; }
- // deletion functionality
+ // Deletion functionality
void removeSelectedItems();
+ static void removeCutItems();
- // open the selected item.
+ // Open the selected item
void openSelectedItems( void );
void propertiesSelectedItems( void );
- // change the folder type
+ // Change the folder type
void changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type);
void autoOpenItem(LLFolderViewFolder* item);
void closeAutoOpenedFolders();
BOOL autoOpenTest(LLFolderViewFolder* item);
- // copy & paste
+ // Copy & paste
virtual void copy();
virtual BOOL canCopy() const;
@@ -184,7 +207,7 @@ public:
virtual void doDelete();
virtual BOOL canDoDelete() const;
- // public rename functionality - can only start the process
+ // Public rename functionality - can only start the process
void startRenamingSelectedItem( void );
// These functions were used when there was only one folderview,
@@ -325,7 +348,7 @@ protected:
/**
* Is used to determine if we need to cut text In LLFolderViewItem to avoid horizontal scroll.
- * NOTE: For now it uses only to cut LLFolderViewItem::mLabel text to be used for Landmarks in Places Panel.
+ * NOTE: For now it's used only to cut LLFolderViewItem::mLabel text for Landmarks in Places Panel.
*/
bool mUseEllipses; // See EXT-719
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index aee31ca033..06682dcbf1 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -75,7 +75,7 @@ public:
virtual void move( LLFolderViewEventListener* parent_listener ) = 0;
virtual BOOL isItemCopyable() const = 0;
virtual BOOL copyToClipboard() const = 0;
- virtual void cutToClipboard() = 0;
+ virtual BOOL cutToClipboard() const = 0;
virtual BOOL isClipboardPasteable() const = 0;
virtual void pasteFromClipboard() = 0;
virtual void pasteLinkFromClipboard() = 0;
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index afad27b4e0..d2b4866987 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -40,6 +40,7 @@
#include "llviewerwindow.h" // Argh, only for setCursor()
// linden library includes
+#include "llclipboard.h"
#include "llfocusmgr.h" // gFocusMgr
#include "lltrans.h"
@@ -220,6 +221,11 @@ BOOL LLFolderViewItem::potentiallyVisible()
{
// we haven't been checked against min required filter
// or we have and we passed
+ return potentiallyFiltered();
+}
+
+BOOL LLFolderViewItem::potentiallyFiltered()
+{
return getLastFilterGeneration() < getRoot()->getFilter()->getMinRequiredGeneration() || getFiltered();
}
@@ -1002,7 +1008,7 @@ void LLFolderViewItem::draw()
LLColor4 color = (mIsSelected && filled) ? sHighlightFgColor : sFgColor;
if (highlight_link) color = sLinkColor;
if (in_library) color = sLibraryColor;
-
+
F32 right_x = 0;
F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
F32 text_left = (F32)(ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + mIndentation);
@@ -1158,7 +1164,37 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
mNeedsSort = false;
}
- mHasVisibleChildren = hasFilteredDescendants(filter_generation);
+ // evaluate mHasVisibleChildren
+ mHasVisibleChildren = false;
+ if (hasFilteredDescendants(filter_generation))
+ {
+ // We have to verify that there's at least one child that's not filtered out
+ bool found = false;
+ // Try the items first
+ for (items_t::iterator iit = mItems.begin(); iit != mItems.end(); ++iit)
+ {
+ LLFolderViewItem* itemp = (*iit);
+ found = (itemp->getFiltered(filter_generation));
+ if (found)
+ break;
+ }
+ if (!found)
+ {
+ // If no item found, try the folders
+ for (folders_t::iterator fit = mFolders.begin(); fit != mFolders.end(); ++fit)
+ {
+ LLFolderViewFolder* folderp = (*fit);
+ found = ( folderp->getListener()
+ && (folderp->getFiltered(filter_generation)
+ || (folderp->getFilteredFolder(filter_generation)
+ && folderp->hasFilteredDescendants(filter_generation))));
+ if (found)
+ break;
+ }
+ }
+
+ mHasVisibleChildren = found;
+ }
// calculate height as a single item (without any children), and reshapes rectangle to match
LLFolderViewItem::arrange( width, height, filter_generation );
@@ -1311,7 +1347,7 @@ void LLFolderViewFolder::requestSort()
void LLFolderViewFolder::setCompletedFilterGeneration(S32 generation, BOOL recurse_up)
{
- mMostFilteredDescendantGeneration = llmin(mMostFilteredDescendantGeneration, generation);
+ //mMostFilteredDescendantGeneration = llmin(mMostFilteredDescendantGeneration, generation);
mCompletedFilterGeneration = generation;
// only aggregate up if we are a lower (older) value
if (recurse_up
@@ -1345,7 +1381,8 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
&& !mPassedFilter) // and did not pass the filter
{
// go ahead and flag this folder as done
- mLastFilterGeneration = filter_generation;
+ mLastFilterGeneration = filter_generation;
+ mStringMatchOffset = std::string::npos;
}
else // filter self only on first pass through
{
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 4e8dc2da16..3c7592046a 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -304,7 +304,8 @@ public:
BOOL isDescendantOf( const LLFolderViewFolder* potential_ancestor );
S32 getIndentation() { return mIndentation; }
- virtual BOOL potentiallyVisible(); // do we know for a fact that this item has been filtered out?
+ virtual BOOL potentiallyVisible(); // do we know for a fact that this item won't be displayed?
+ virtual BOOL potentiallyFiltered(); // do we know for a fact that this item has been filtered out?
virtual BOOL getFiltered();
virtual BOOL getFiltered(S32 filter_generation);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 2de2b17373..b86c453d61 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -47,7 +47,7 @@
#include "llgiveinventory.h"
#include "llimfloater.h"
#include "llimview.h"
-#include "llinventoryclipboard.h"
+#include "llclipboard.h"
#include "llinventorydefines.h"
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
@@ -143,6 +143,42 @@ bool isMarketplaceSendAction(const std::string& action)
return ("send_to_marketplace" == action);
}
+// Used by LLFolderBridge as callback for directory fetching recursion
+class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
+{
+public:
+ LLRightClickInventoryFetchDescendentsObserver(const uuid_vec_t& ids) : LLInventoryFetchDescendentsObserver(ids) {}
+ ~LLRightClickInventoryFetchDescendentsObserver() {}
+ virtual void execute(bool clear_observer = false);
+ virtual void done()
+ {
+ execute(true);
+ }
+};
+
+// Used by LLFolderBridge as callback for directory content items fetching
+class LLRightClickInventoryFetchObserver : public LLInventoryFetchItemsObserver
+{
+public:
+ LLRightClickInventoryFetchObserver(const uuid_vec_t& ids) : LLInventoryFetchItemsObserver(ids) { };
+ ~LLRightClickInventoryFetchObserver() {}
+ void execute(bool clear_observer = false)
+ {
+ if (clear_observer)
+ {
+ dec_busy_count();
+ gInventory.removeObserver(this);
+ delete this;
+ }
+ // we've downloaded all the items, so repaint the dialog
+ LLFolderBridge::staticFolderOptionsMenu();
+ }
+ virtual void done()
+ {
+ execute(true);
+ }
+};
+
// +=================================================+
// | LLInvFVBridge |
// +=================================================+
@@ -215,13 +251,27 @@ BOOL LLInvFVBridge::isLink() const
/**
* @brief Adds this item into clipboard storage
*/
-void LLInvFVBridge::cutToClipboard()
+BOOL LLInvFVBridge::cutToClipboard() const
+{
+ const LLInventoryObject* obj = gInventory.getObject(mUUID);
+ if (obj && isItemMovable() && isItemRemovable())
+ {
+ LLClipboard::instance().setCutMode(true);
+ return LLClipboard::instance().addToClipboard(mUUID);
+ }
+ return FALSE;
+}
+
+BOOL LLInvFVBridge::copyToClipboard() const
{
- if(isItemMovable())
+ const LLInventoryObject* obj = gInventory.getObject(mUUID);
+ if (obj && isItemCopyable())
{
- LLInventoryClipboard::instance().cut(mUUID);
+ return LLClipboard::instance().addToClipboard(mUUID);
}
+ return FALSE;
}
+
// *TODO: make sure this does the right thing
void LLInvFVBridge::showProperties()
{
@@ -396,6 +446,11 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
for(; it != end; ++it)
{
gInventory.moveObject((*it), trash_id);
+ LLViewerInventoryItem* item = gInventory.getItem(*it);
+ if (item)
+ {
+ model->updateItem(item);
+ }
}
// notify inventory observers.
@@ -404,7 +459,8 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
BOOL LLInvFVBridge::isClipboardPasteable() const
{
- if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
+ // Return FALSE on degenerated cases: empty clipboard, no inventory, no agent
+ if (!LLClipboard::instance().hasContents() || !isAgentInventory())
{
return FALSE;
}
@@ -414,37 +470,42 @@ BOOL LLInvFVBridge::isClipboardPasteable() const
return FALSE;
}
- const LLUUID &agent_id = gAgent.getID();
+ // In cut mode, whatever is on the clipboard is always pastable
+ if (LLClipboard::instance().isCutMode())
+ {
+ return TRUE;
+ }
+ // In normal mode, we need to check each element of the clipboard to know if we can paste or not
LLDynamicArray<LLUUID> objects;
- LLInventoryClipboard::instance().retrieve(objects);
+ LLClipboard::instance().pasteFromClipboard(objects);
S32 count = objects.count();
for(S32 i = 0; i < count; i++)
{
const LLUUID &item_id = objects.get(i);
- // Can't paste folders
+ // Folders are pastable if all items in there are copyable
const LLInventoryCategory *cat = model->getCategory(item_id);
if (cat)
{
+ LLFolderBridge cat_br(mInventoryPanel.get(), mRoot, item_id);
+ if (!cat_br.isItemCopyable())
return FALSE;
+ // Skip to the next item in the clipboard
+ continue;
}
- const LLInventoryItem *item = model->getItem(item_id);
- if (item)
- {
- if (!item->getPermissions().allowCopyBy(agent_id))
- {
+ // Each item must be copyable to be pastable
+ LLItemBridge item_br(mInventoryPanel.get(), mRoot, item_id);
+ if (!item_br.isItemCopyable())
return FALSE;
}
- }
- }
return TRUE;
}
BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
{
- if (!LLInventoryClipboard::instance().hasContents() || !isAgentInventory())
+ if (!LLClipboard::instance().hasContents() || !isAgentInventory())
{
return FALSE;
}
@@ -455,7 +516,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
}
LLDynamicArray<LLUUID> objects;
- LLInventoryClipboard::instance().retrieve(objects);
+ LLClipboard::instance().pasteFromClipboard(objects);
S32 count = objects.count();
for(S32 i = 0; i < count; i++)
{
@@ -606,6 +667,12 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
disabled_items.push_back(std::string("Copy"));
}
+ items.push_back(std::string("Cut"));
+ if (!isItemMovable() || !isItemRemovable())
+ {
+ disabled_items.push_back(std::string("Cut"));
+ }
+
if (canListOnMarketplace())
{
items.push_back(std::string("Marketplace Separator"));
@@ -917,7 +984,7 @@ void LLInvFVBridge::changeItemParent(LLInventoryModel* model,
const LLUUID& new_parent_id,
BOOL restamp)
{
- change_item_parent(model, item, new_parent_id, restamp);
+ model->changeItemParent(item, new_parent_id, restamp);
}
// static
@@ -926,7 +993,7 @@ void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model,
const LLUUID& new_parent_id,
BOOL restamp)
{
- change_category_parent(model, cat, new_parent_id, restamp);
+ model->changeCategoryParent(cat, new_parent_id, restamp);
}
LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
@@ -1285,6 +1352,12 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(buffer));
return;
}
+ else if ("cut" == action)
+ {
+ cutToClipboard();
+ LLFolderView::removeCutItems();
+ return;
+ }
else if ("copy" == action)
{
copyToClipboard();
@@ -1292,7 +1365,6 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
}
else if ("paste" == action)
{
- // Single item only
LLInventoryItem* itemp = model->getItem(mUUID);
if (!itemp) return;
@@ -1667,16 +1739,6 @@ BOOL LLItemBridge::isItemCopyable() const
return FALSE;
}
-BOOL LLItemBridge::copyToClipboard() const
-{
- if(isItemCopyable())
- {
- LLInventoryClipboard::instance().add(mUUID);
- return TRUE;
- }
- return FALSE;
-}
-
LLViewerInventoryItem* LLItemBridge::getItem() const
{
LLViewerInventoryItem* item = NULL;
@@ -1710,16 +1772,20 @@ BOOL LLFolderBridge::isItemMovable() const
LLInventoryObject* obj = getInventoryObject();
if(obj)
{
- return (!LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType()));
+ // If it's a protected type folder, we can't move it
+ if (LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType()))
+ return FALSE;
+ return TRUE;
}
return FALSE;
}
void LLFolderBridge::selectItem()
{
+ // Have no fear: the first thing start() does is to test if everything for that folder has been fetched...
+ LLInventoryModelBackgroundFetch::instance().start(getUUID(), true);
}
-
// Iterate through a folder's children to determine if
// all the children are removable.
class LLIsItemRemovable : public LLFolderViewFunctor
@@ -1775,19 +1841,35 @@ BOOL LLFolderBridge::isUpToDate() const
BOOL LLFolderBridge::isItemCopyable() const
{
- // Can copy folders to paste-as-link, but not for straight paste.
- return gSavedSettings.getBOOL("InventoryLinking");
+ // Folders are copyable if items in them are, recursively, copyable.
+
+ // Get the content of the folder
+ LLInventoryModel::cat_array_t* cat_array;
+ LLInventoryModel::item_array_t* item_array;
+ gInventory.getDirectDescendentsOf(mUUID,cat_array,item_array);
+
+ // Check the items
+ LLInventoryModel::item_array_t item_array_copy = *item_array;
+ for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++)
+ {
+ LLInventoryItem* item = *iter;
+ LLItemBridge item_br(mInventoryPanel.get(), mRoot, item->getUUID());
+ if (!item_br.isItemCopyable())
+ return FALSE;
}
-BOOL LLFolderBridge::copyToClipboard() const
+ // Check the folders
+ LLInventoryModel::cat_array_t cat_array_copy = *cat_array;
+ for (LLInventoryModel::cat_array_t::iterator iter = cat_array_copy.begin(); iter != cat_array_copy.end(); iter++)
{
- if(isItemCopyable())
- {
- LLInventoryClipboard::instance().add(mUUID);
+ LLViewerInventoryCategory* category = *iter;
+ LLFolderBridge cat_br(mInventoryPanel.get(), mRoot, category->getUUID());
+ if (!cat_br.isItemCopyable())
+ return FALSE;
+ }
+
return TRUE;
}
- return FALSE;
-}
BOOL LLFolderBridge::isClipboardPasteable() const
{
@@ -1804,7 +1886,7 @@ BOOL LLFolderBridge::isClipboardPasteable() const
}
LLDynamicArray<LLUUID> objects;
- LLInventoryClipboard::instance().retrieve(objects);
+ LLClipboard::instance().pasteFromClipboard(objects);
const LLViewerInventoryCategory *current_cat = getCategory();
// Search for the direct descendent of current Friends subfolder among all pasted items,
@@ -1842,7 +1924,7 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const
const BOOL is_in_friend_folder = LLFriendCardsManager::instance().isCategoryInFriendFolder( current_cat );
const LLUUID &current_cat_id = current_cat->getUUID();
LLDynamicArray<LLUUID> objects;
- LLInventoryClipboard::instance().retrieve(objects);
+ LLClipboard::instance().pasteFromClipboard(objects);
S32 count = objects.count();
for(S32 i = 0; i < count; i++)
{
@@ -2432,121 +2514,114 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
return accept;
}
-//Used by LLFolderBridge as callback for directory recursion.
-class LLRightClickInventoryFetchObserver : public LLInventoryFetchItemsObserver
-{
-public:
- LLRightClickInventoryFetchObserver(const uuid_vec_t& ids) :
- LLInventoryFetchItemsObserver(ids),
- mCopyItems(false)
- { };
- LLRightClickInventoryFetchObserver(const uuid_vec_t& ids,
- const LLUUID& cat_id,
- bool copy_items) :
- LLInventoryFetchItemsObserver(ids),
- mCatID(cat_id),
- mCopyItems(copy_items)
- { };
- virtual void done()
- {
- // we've downloaded all the items, so repaint the dialog
- LLFolderBridge::staticFolderOptionsMenu();
-
- gInventory.removeObserver(this);
- delete this;
- }
-
-protected:
- LLUUID mCatID;
- bool mCopyItems;
-
-};
-
-//Used by LLFolderBridge as callback for directory recursion.
-class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
-{
-public:
- LLRightClickInventoryFetchDescendentsObserver(const uuid_vec_t& ids,
- bool copy_items) :
- LLInventoryFetchDescendentsObserver(ids),
- mCopyItems(copy_items)
- {}
- ~LLRightClickInventoryFetchDescendentsObserver() {}
- virtual void done();
-protected:
- bool mCopyItems;
-};
-
-void LLRightClickInventoryFetchDescendentsObserver::done()
+void LLRightClickInventoryFetchDescendentsObserver::execute(bool clear_observer)
{
- // Avoid passing a NULL-ref as mCompleteFolders.front() down to
- // gInventory.collectDescendents()
+ // Bail out immediately if no descendents
if( mComplete.empty() )
{
llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl;
+ if (clear_observer)
+ {
dec_busy_count();
gInventory.removeObserver(this);
delete this;
+ }
return;
}
- // What we do here is get the complete information on the items in
- // the library, and set up an observer that will wait for that to
- // happen.
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t item_array;
- gInventory.collectDescendents(mComplete.front(),
- cat_array,
- item_array,
- LLInventoryModel::EXCLUDE_TRASH);
- S32 count = item_array.count();
-#if 0 // HACK/TODO: Why?
- // This early causes a giant menu to get produced, and doesn't seem to be needed.
- if(!count)
- {
- llwarns << "Nothing fetched in category " << mCompleteFolders.front()
- << llendl;
+ // Copy the list of complete fetched folders while "this" is still valid
+ uuid_vec_t completed_folder = mComplete;
+
+ // Clean up, and remove this as an observer now since recursive calls
+ // could notify observers and throw us into an infinite loop.
+ if (clear_observer)
+ {
dec_busy_count();
gInventory.removeObserver(this);
delete this;
- return;
}
-#endif
- uuid_vec_t ids;
- for(S32 i = 0; i < count; ++i)
+ for (uuid_vec_t::iterator current_folder = completed_folder.begin(); current_folder != completed_folder.end(); ++current_folder)
{
- ids.push_back(item_array.get(i)->getUUID());
- }
+ // Get the information on the fetched folder items and subfolders and fetch those
+ LLInventoryModel::cat_array_t* cat_array;
+ LLInventoryModel::item_array_t* item_array;
+ gInventory.getDirectDescendentsOf(*current_folder, cat_array, item_array);
- LLRightClickInventoryFetchObserver* outfit = new LLRightClickInventoryFetchObserver(ids, mComplete.front(), mCopyItems);
+ S32 item_count = item_array->count();
+ S32 cat_count = cat_array->count();
+
+ // Move to next if current folder empty
+ if ((item_count == 0) && (cat_count == 0))
+ {
+ continue;
+ }
- // clean up, and remove this as an observer since the call to the
- // outfit could notify observers and throw us into an infinite
- // loop.
- dec_busy_count();
- gInventory.removeObserver(this);
- delete this;
+ uuid_vec_t ids;
+ LLRightClickInventoryFetchObserver* outfit = NULL;
+ LLRightClickInventoryFetchDescendentsObserver* categories = NULL;
- // increment busy count and either tell the inventory to check &
- // call done, or add this object to the inventory for observation.
- inc_busy_count();
+ // Fetch the items
+ if (item_count)
+ {
+ for (S32 i = 0; i < item_count; ++i)
+ {
+ ids.push_back(item_array->get(i)->getUUID());
+ }
+ outfit = new LLRightClickInventoryFetchObserver(ids);
+ }
+ // Fetch the subfolders
+ if (cat_count)
+ {
+ for (S32 i = 0; i < cat_count; ++i)
+ {
+ ids.push_back(cat_array->get(i)->getUUID());
+ }
+ categories = new LLRightClickInventoryFetchDescendentsObserver(ids);
+ }
- // do the fetch
+ // Perform the item fetch
+ if (outfit)
+ {
outfit->startFetch();
- outfit->done(); //Not interested in waiting and this will be right 99% of the time.
+ outfit->execute(); // Not interested in waiting and this will be right 99% of the time.
+ delete outfit;
//Uncomment the following code for laggy Inventory UI.
-/* if(outfit->isFinished())
+ /*
+ if (outfit->isFinished())
{
// everything is already here - call done.
- outfit->done();
+ outfit->execute();
+ delete outfit;
}
else
{
- // it's all on it's way - add an observer, and the inventory
+ // it's all on its way - add an observer, and the inventory
// will call done for us when everything is here.
+ inc_busy_count();
gInventory.addObserver(outfit);
- }*/
+ }
+ */
+ }
+ // Perform the subfolders fetch : this is where we truly recurse down the folder hierarchy
+ if (categories)
+ {
+ categories->startFetch();
+ if (categories->isFinished())
+ {
+ // everything is already here - call done.
+ categories->execute();
+ delete categories;
+ }
+ else
+ {
+ // it's all on its way - add an observer, and the inventory
+ // will call done for us when everything is here.
+ inc_busy_count();
+ gInventory.addObserver(categories);
+ }
+ }
+ }
}
@@ -2665,6 +2740,12 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
modifyOutfit(TRUE);
return;
}
+ else if ("cut" == action)
+ {
+ cutToClipboard();
+ LLFolderView::removeCutItems();
+ return;
+ }
else if ("copy" == action)
{
copyToClipboard();
@@ -2867,7 +2948,7 @@ bool LLFolderBridge::removeItemResponse(const LLSD& notification, const LLSD& re
{
// move it to the trash
LLPreview::hide(mUUID);
- remove_category(getInventoryModel(), mUUID);
+ getInventoryModel()->removeCategory(mUUID);
return TRUE;
}
return FALSE;
@@ -2886,7 +2967,7 @@ void LLFolderBridge::pasteFromClipboard()
const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
LLDynamicArray<LLUUID> objects;
- LLInventoryClipboard::instance().retrieve(objects);
+ LLClipboard::instance().pasteFromClipboard(objects);
if (move_is_into_outbox)
{
@@ -2936,7 +3017,8 @@ void LLFolderBridge::pasteFromClipboard()
const LLUUID& item_id = (*iter);
LLInventoryItem *item = model->getItem(item_id);
- if (item)
+ LLInventoryObject *obj = model->getObject(item_id);
+ if (obj)
{
if (move_is_into_current_outfit || move_is_into_outfit)
{
@@ -2945,10 +3027,21 @@ void LLFolderBridge::pasteFromClipboard()
dropToOutfit(item, move_is_into_current_outfit);
}
}
- else if(LLInventoryClipboard::instance().isCutMode())
+ else if (LLClipboard::instance().isCutMode())
+ {
+ // Do a move to "paste" a "cut"
+ // move_inventory_item() is not enough, as we have to update inventory locally too
+ if (LLAssetType::AT_CATEGORY == obj->getType())
+ {
+ LLViewerInventoryCategory* vicat = (LLViewerInventoryCategory *) model->getCategory(item_id);
+ llassert(vicat);
+ if (vicat)
+ {
+ changeCategoryParent(model, vicat, parent_id, FALSE);
+ }
+ }
+ else
{
- // move_inventory_item() is not enough,
- //we have to update inventory locally too
LLViewerInventoryItem* viitem = dynamic_cast<LLViewerInventoryItem*>(item);
llassert(viitem);
if (viitem)
@@ -2956,6 +3049,19 @@ void LLFolderBridge::pasteFromClipboard()
changeItemParent(model, viitem, parent_id, FALSE);
}
}
+ }
+ else
+ {
+ // Do a "copy" to "paste" a regular copy clipboard
+ if (LLAssetType::AT_CATEGORY == obj->getType())
+ {
+ LLViewerInventoryCategory* vicat = (LLViewerInventoryCategory *) model->getCategory(item_id);
+ llassert(vicat);
+ if (vicat)
+ {
+ copy_inventory_category(model, vicat, parent_id);
+ }
+ }
else
{
copy_inventory_item(
@@ -2969,6 +3075,9 @@ void LLFolderBridge::pasteFromClipboard()
}
}
}
+ // Change mode to paste for next paste
+ LLClipboard::instance().setCutMode(false);
+ }
}
void LLFolderBridge::pasteLinkFromClipboard()
@@ -2992,7 +3101,7 @@ void LLFolderBridge::pasteLinkFromClipboard()
const LLUUID parent_id(mUUID);
LLDynamicArray<LLUUID> objects;
- LLInventoryClipboard::instance().retrieve(objects);
+ LLClipboard::instance().pasteFromClipboard(objects);
for (LLDynamicArray<LLUUID>::const_iterator iter = objects.begin();
iter != objects.end();
++iter)
@@ -3030,6 +3139,8 @@ void LLFolderBridge::pasteLinkFromClipboard()
LLPointer<LLInventoryCallback>(NULL));
}
}
+ // Change mode to paste for next paste
+ LLClipboard::instance().setCutMode(false);
}
}
@@ -3287,16 +3398,19 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
folders.push_back(category->getUUID());
sSelf = getHandle();
- LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(folders, FALSE);
+ LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(folders);
fetch->startFetch();
- inc_busy_count();
if (fetch->isFinished())
{
+ // Do not call execute() or done() here as if the folder is here, there's likely no point drilling down
+ // This saves lots of time as buildContextMenu() is called a lot
+ delete fetch;
buildContextMenuFolderOptions(flags);
}
else
{
// it's all on its way - add an observer, and the inventory will call done for us when everything is here.
+ inc_busy_count();
gInventory.addObserver(fetch);
}
}
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 3b4f845f54..dc9e88d54d 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -106,8 +106,8 @@ public:
virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch);
virtual void move(LLFolderViewEventListener* new_parent_bridge) {}
virtual BOOL isItemCopyable() const { return FALSE; }
- virtual BOOL copyToClipboard() const { return FALSE; }
- virtual void cutToClipboard();
+ virtual BOOL copyToClipboard() const;
+ virtual BOOL cutToClipboard() const;
virtual BOOL isClipboardPasteable() const;
virtual BOOL isClipboardPasteableAsLink() const;
virtual void pasteFromClipboard() {}
@@ -212,7 +212,6 @@ public:
virtual BOOL renameItem(const std::string& new_name);
virtual BOOL removeItem();
virtual BOOL isItemCopyable() const;
- virtual BOOL copyToClipboard() const;
virtual BOOL hasChildren() const { return FALSE; }
virtual BOOL isUpToDate() const { return TRUE; }
@@ -275,7 +274,6 @@ public:
virtual BOOL isItemCopyable() const;
virtual BOOL isClipboardPasteable() const;
virtual BOOL isClipboardPasteableAsLink() const;
- virtual BOOL copyToClipboard() const;
static void createWearable(LLFolderBridge* bridge, LLWearableType::EType type);
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 5496c273f2..4d0af94f9f 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -39,8 +39,11 @@
#include "llviewerfoldertype.h"
// linden library includes
+#include "llclipboard.h"
#include "lltrans.h"
+LLFastTimer::DeclareTimer FT_FILTER_CLIPBOARD("Filter Clipboard");
+
LLInventoryFilter::FilterOps::FilterOps() :
mFilterObjectTypes(0xffffffffffffffffULL),
mFilterCategoryTypes(0xffffffffffffffffULL),
@@ -88,11 +91,15 @@ LLInventoryFilter::~LLInventoryFilter()
BOOL LLInventoryFilter::check(const LLFolderViewItem* item)
{
- // If it's a folder and we're showing all folders, return TRUE automatically.
+ // Clipboard cut items are *always* filtered so we need this value upfront
+ const LLFolderViewEventListener* listener = item->getListener();
+ const BOOL passed_clipboard = (listener ? checkAgainstClipboard(listener->getUUID()) : TRUE);
+
+ // If it's a folder and we're showing all folders, return automatically.
const BOOL is_folder = (dynamic_cast<const LLFolderViewFolder*>(item) != NULL);
if (is_folder && (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS))
{
- return TRUE;
+ return passed_clipboard;
}
mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos;
@@ -103,6 +110,7 @@ BOOL LLInventoryFilter::check(const LLFolderViewItem* item)
const BOOL passed = (passed_filtertype &&
passed_permissions &&
passed_filterlink &&
+ passed_clipboard &&
(mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos));
return passed;
@@ -114,8 +122,10 @@ bool LLInventoryFilter::check(const LLInventoryItem* item)
const bool passed_filtertype = checkAgainstFilterType(item);
const bool passed_permissions = checkAgainstPermissions(item);
+ const BOOL passed_clipboard = checkAgainstClipboard(item->getUUID());
const bool passed = (passed_filtertype &&
passed_permissions &&
+ passed_clipboard &&
(mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos));
return passed;
@@ -145,12 +155,15 @@ bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder) const
bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
{
+ // Always check against the clipboard
+ const BOOL passed_clipboard = checkAgainstClipboard(folder_id);
+
// we're showing all folders, overriding filter
if (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
{
- return true;
+ return passed_clipboard;
}
-
+
if (mFilterOps.mFilterTypes & FILTERTYPE_CATEGORY)
{
// Can only filter categories for items in your inventory
@@ -163,7 +176,7 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
return false;
}
- return true;
+ return passed_clipboard;
}
BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) const
@@ -255,7 +268,7 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
}
}
}
-
+
return TRUE;
}
@@ -309,6 +322,31 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLInventoryItem* item) cons
return true;
}
+// Items and folders that are on the clipboard or, recursively, in a folder which
+// is on the clipboard must be filtered out if the clipboard is in the "cut" mode.
+bool LLInventoryFilter::checkAgainstClipboard(const LLUUID& object_id) const
+{
+ if (LLClipboard::instance().isCutMode())
+ {
+ LLFastTimer ft(FT_FILTER_CLIPBOARD);
+ LLUUID current_id = object_id;
+ LLInventoryObject *current_object = gInventory.getObject(object_id);
+ while (current_id.notNull() && current_object)
+ {
+ if (LLClipboard::instance().isOnClipboard(current_id))
+ {
+ return false;
+ }
+ current_id = current_object->getParentUUID();
+ if (current_id.notNull())
+ {
+ current_object = gInventory.getObject(current_id);
+ }
+ }
+ }
+ return true;
+}
+
BOOL LLInventoryFilter::checkAgainstPermissions(const LLFolderViewItem* item) const
{
const LLFolderViewEventListener* listener = item->getListener();
@@ -364,6 +402,11 @@ std::string::size_type LLInventoryFilter::getStringMatchOffset() const
return mSubStringMatchOffset;
}
+BOOL LLInventoryFilter::isDefault() const
+{
+ return !isNotDefault();
+}
+
// has user modified default filter params?
BOOL LLInventoryFilter::isNotDefault() const
{
@@ -379,7 +422,7 @@ BOOL LLInventoryFilter::isNotDefault() const
not_default |= (mFilterOps.mMinDate != mDefaultFilterOps.mMinDate);
not_default |= (mFilterOps.mMaxDate != mDefaultFilterOps.mMaxDate);
not_default |= (mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo);
-
+
return not_default;
}
@@ -558,8 +601,14 @@ void LLInventoryFilter::setDateRange(time_t min_date, time_t max_date)
setModified();
}
- areDateLimitsSet() ? mFilterOps.mFilterTypes |= FILTERTYPE_DATE
- : mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ if (areDateLimitsSet())
+ {
+ mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
+ }
+ else
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ }
}
void LLInventoryFilter::setDateRangeLastLogoff(BOOL sl)
@@ -575,8 +624,14 @@ void LLInventoryFilter::setDateRangeLastLogoff(BOOL sl)
setModified();
}
- areDateLimitsSet() ? mFilterOps.mFilterTypes |= FILTERTYPE_DATE
- : mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ if (areDateLimitsSet())
+ {
+ mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
+ }
+ else
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ }
}
BOOL LLInventoryFilter::isSinceLogoff() const
@@ -622,8 +677,14 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
}
}
- areDateLimitsSet() ? mFilterOps.mFilterTypes |= FILTERTYPE_DATE
- : mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ if (areDateLimitsSet())
+ {
+ mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
+ }
+ else
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ }
}
void LLInventoryFilter::setFilterLinks(U64 filter_links)
@@ -947,7 +1008,7 @@ void LLInventoryFilter::fromLLSD(LLSD& data)
{
if(data.has("filter_types"))
{
- setFilterObjectTypes((U32)data["filter_types"].asInteger());
+ setFilterObjectTypes((U64)data["filter_types"].asInteger());
}
if(data.has("min_date") && data.has("max_date"))
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index 6be2acfaa3..9e600c036f 100644
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -124,6 +124,7 @@ public:
BOOL checkAgainstPermissions(const LLFolderViewItem* item) const;
bool checkAgainstPermissions(const LLInventoryItem* item) const;
BOOL checkAgainstFilterLinks(const LLFolderViewItem* item) const;
+ bool checkAgainstClipboard(const LLUUID& object_id) const;
std::string::size_type getStringMatchOffset() const;
@@ -162,6 +163,7 @@ public:
// +-------------------------------------------------------------------+
// + Default
// +-------------------------------------------------------------------+
+ BOOL isDefault() const;
BOOL isNotDefault() const;
void markDefault();
void resetDefault();
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index dd92188e9d..ab5b082915 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -54,7 +54,6 @@
#include "lliconctrl.h"
#include "llimview.h"
#include "llinventorybridge.h"
-#include "llinventoryclipboard.h"
#include "llinventorymodel.h"
#include "llinventorypanel.h"
#include "lllineeditor.h"
@@ -109,91 +108,6 @@ void append_path(const LLUUID& id, std::string& path)
path.append(temp);
}
-void change_item_parent(LLInventoryModel* model,
- LLViewerInventoryItem* item,
- const LLUUID& new_parent_id,
- BOOL restamp)
-{
- if (item->getParentUUID() != new_parent_id)
- {
- LLInventoryModel::update_list_t update;
- LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
- update.push_back(old_folder);
- LLInventoryModel::LLCategoryUpdate new_folder(new_parent_id, 1);
- update.push_back(new_folder);
- gInventory.accountForUpdate(update);
-
- LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
- new_item->setParent(new_parent_id);
- new_item->updateParentOnServer(restamp);
- model->updateItem(new_item);
- model->notifyObservers();
- }
-}
-
-void change_category_parent(LLInventoryModel* model,
- LLViewerInventoryCategory* cat,
- const LLUUID& new_parent_id,
- BOOL restamp)
-{
- if (!model || !cat)
- {
- return;
- }
-
- // Can't move a folder into a child of itself.
- if (model->isObjectDescendentOf(new_parent_id, cat->getUUID()))
- {
- return;
- }
-
- LLInventoryModel::update_list_t update;
- LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
- update.push_back(old_folder);
- LLInventoryModel::LLCategoryUpdate new_folder(new_parent_id, 1);
- update.push_back(new_folder);
- model->accountForUpdate(update);
-
- LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
- new_cat->setParent(new_parent_id);
- new_cat->updateParentOnServer(restamp);
- model->updateCategory(new_cat);
- model->notifyObservers();
-}
-
-void remove_category(LLInventoryModel* model, const LLUUID& cat_id)
-{
- if (!model || !get_is_category_removable(model, cat_id))
- {
- return;
- }
-
- // Look for any gestures and deactivate them
- LLInventoryModel::cat_array_t descendent_categories;
- LLInventoryModel::item_array_t descendent_items;
- gInventory.collectDescendents(cat_id, descendent_categories, descendent_items, FALSE);
-
- for (LLInventoryModel::item_array_t::const_iterator iter = descendent_items.begin();
- iter != descendent_items.end();
- ++iter)
- {
- const LLViewerInventoryItem* item = (*iter);
- const LLUUID& item_id = item->getUUID();
- if (item->getType() == LLAssetType::AT_GESTURE
- && LLGestureMgr::instance().isGestureActive(item_id))
- {
- LLGestureMgr::instance().deactivateGesture(item_id);
- }
- }
-
- LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
- if (cat)
- {
- const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
- change_category_parent(model, cat, trash_id, TRUE);
- }
-}
-
void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name)
{
LLViewerInventoryCategory* cat;
@@ -214,6 +128,49 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s
model->notifyObservers();
}
+void copy_inventory_category(LLInventoryModel* model,
+ LLViewerInventoryCategory* cat,
+ const LLUUID& parent_id,
+ const LLUUID& root_copy_id)
+{
+ // Create the initial folder
+ LLUUID new_cat_uuid = gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName());
+ model->notifyObservers();
+
+ // We need to exclude the initial root of the copy to avoid recursively copying the copy, etc...
+ LLUUID root_id = (root_copy_id.isNull() ? new_cat_uuid : root_copy_id);
+
+ // Get the content of the folder
+ LLInventoryModel::cat_array_t* cat_array;
+ LLInventoryModel::item_array_t* item_array;
+ gInventory.getDirectDescendentsOf(cat->getUUID(),cat_array,item_array);
+
+ // Copy all the items
+ LLInventoryModel::item_array_t item_array_copy = *item_array;
+ for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++)
+ {
+ LLInventoryItem* item = *iter;
+ copy_inventory_item(
+ gAgent.getID(),
+ item->getPermissions().getOwner(),
+ item->getUUID(),
+ new_cat_uuid,
+ std::string(),
+ LLPointer<LLInventoryCallback>(NULL));
+ }
+
+ // Copy all the folders
+ LLInventoryModel::cat_array_t cat_array_copy = *cat_array;
+ for (LLInventoryModel::cat_array_t::iterator iter = cat_array_copy.begin(); iter != cat_array_copy.end(); iter++)
+ {
+ LLViewerInventoryCategory* category = *iter;
+ if (category->getUUID() != root_id)
+ {
+ copy_inventory_category(model, category, new_cat_uuid, root_id);
+ }
+ }
+}
+
class LLInventoryCollectAllItems : public LLInventoryCollectFunctor
{
public:
@@ -568,8 +525,7 @@ void move_to_outbox_cb_action(const LLSD& payload)
LLUUID parent = viitem->getParentUUID();
- change_item_parent(
- &gInventory,
+ gInventory.changeItemParent(
viitem,
dest_folder_id,
false);
@@ -596,7 +552,7 @@ void move_to_outbox_cb_action(const LLSD& payload)
if (cat_array->empty() && item_array->empty())
{
- remove_category(&gInventory, parent);
+ gInventory.removeCategory(parent);
}
if (parent == top_level_folder)
@@ -670,7 +626,7 @@ void move_item_within_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, S32
LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) inv_item;
- change_item_parent(&gInventory,
+ gInventory.changeItemParent(
viewer_inv_item,
dest_folder,
false);
@@ -992,20 +948,24 @@ void LLSaveFolderState::setApply(BOOL apply)
void LLSaveFolderState::doFolder(LLFolderViewFolder* folder)
{
LLMemType mt(LLMemType::MTYPE_INVENTORY_DO_FOLDER);
+ LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
+ if(!bridge) return;
+
if(mApply)
{
// we're applying the open state
- LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
- if(!bridge) return;
LLUUID id(bridge->getUUID());
if(mOpenFolders.find(id) != mOpenFolders.end())
{
- folder->setOpen(TRUE);
+ if (!folder->isOpen())
+ {
+ folder->setOpen(TRUE);
+ }
}
else
{
// keep selected filter in its current state, this is less jarring to user
- if (!folder->isSelected())
+ if (!folder->isSelected() && folder->isOpen())
{
folder->setOpen(FALSE);
}
@@ -1016,8 +976,6 @@ void LLSaveFolderState::doFolder(LLFolderViewFolder* folder)
// we're recording state at this point
if(folder->isOpen())
{
- LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
- if(!bridge) return;
mOpenFolders.insert(bridge->getUUID());
}
}
@@ -1053,7 +1011,6 @@ void LLSelectFirstFilteredItem::doItem(LLFolderViewItem *item)
{
item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
}
- item->getRoot()->scrollToShowSelection();
mItemSelected = TRUE;
}
}
@@ -1067,7 +1024,6 @@ void LLSelectFirstFilteredItem::doFolder(LLFolderViewFolder* folder)
{
folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
}
- folder->getRoot()->scrollToShowSelection();
mItemSelected = TRUE;
}
}
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index ce2b89b22e..5cf9c528b0 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -57,20 +57,10 @@ void show_task_item_profile(const LLUUID& item_uuid, const LLUUID& object_id);
void show_item_original(const LLUUID& item_uuid);
-void change_item_parent(LLInventoryModel* model,
- LLViewerInventoryItem* item,
- const LLUUID& new_parent_id,
- BOOL restamp);
-
-void change_category_parent(LLInventoryModel* model,
- LLViewerInventoryCategory* cat,
- const LLUUID& new_parent_id,
- BOOL restamp);
-
-void remove_category(LLInventoryModel* model, const LLUUID& cat_id);
-
void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name);
+void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id = LLUUID::null);
+
// Generates a string containing the path to the item specified by item_id.
void append_path(const LLUUID& id, std::string& path);
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index a71b699fdd..85ecb133d0 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -30,6 +30,7 @@
#include "llagent.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
+#include "llclipboard.h"
#include "llinventorypanel.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
@@ -46,6 +47,8 @@
#include "llviewerregion.h"
#include "llcallbacklist.h"
#include "llvoavatarself.h"
+#include "llgesturemgr.h"
+#include <typeinfo>
//#define DIFF_INVENTORY_FILES
#ifdef DIFF_INVENTORY_FILES
@@ -1017,6 +1020,66 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id)
}
}
+// Migrated from llinventoryfunctions
+void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
+ const LLUUID& new_parent_id,
+ BOOL restamp)
+{
+ if (item->getParentUUID() == new_parent_id)
+ {
+ LL_DEBUGS("Inventory") << "'" << item->getName() << "' (" << item->getUUID()
+ << ") is already in folder " << new_parent_id << LL_ENDL;
+ }
+ else
+ {
+ LL_INFOS("Inventory") << "Moving '" << item->getName() << "' (" << item->getUUID()
+ << ") from " << item->getParentUUID() << " to folder "
+ << new_parent_id << LL_ENDL;
+ LLInventoryModel::update_list_t update;
+ LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
+ update.push_back(old_folder);
+ LLInventoryModel::LLCategoryUpdate new_folder(new_parent_id, 1);
+ update.push_back(new_folder);
+ accountForUpdate(update);
+
+ LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+ new_item->setParent(new_parent_id);
+ new_item->updateParentOnServer(restamp);
+ updateItem(new_item);
+ notifyObservers();
+ }
+}
+
+// Migrated from llinventoryfunctions
+void LLInventoryModel::changeCategoryParent(LLViewerInventoryCategory* cat,
+ const LLUUID& new_parent_id,
+ BOOL restamp)
+{
+ if (!cat)
+ {
+ return;
+ }
+
+ // Can't move a folder into a child of itself.
+ if (isObjectDescendentOf(new_parent_id, cat->getUUID()))
+ {
+ return;
+ }
+
+ LLInventoryModel::update_list_t update;
+ LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
+ update.push_back(old_folder);
+ LLInventoryModel::LLCategoryUpdate new_folder(new_parent_id, 1);
+ update.push_back(new_folder);
+ accountForUpdate(update);
+
+ LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
+ new_cat->setParent(new_parent_id);
+ new_cat->updateParentOnServer(restamp);
+ updateCategory(new_cat);
+ notifyObservers();
+}
+
// Delete a particular inventory object by ID.
void LLInventoryModel::deleteObject(const LLUUID& id)
{
@@ -1110,50 +1173,82 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
return;
}
LLPointer<LLViewerInventoryCategory> cat = getCategory(id);
- if(cat.notNull())
- {
- // do the cache accounting
- llinfos << "LLInventoryModel::purgeDescendentsOf " << cat->getName()
- << llendl;
- S32 descendents = cat->getDescendentCount();
- if(descendents > 0)
- {
- LLCategoryUpdate up(id, -descendents);
- accountForUpdate(up);
+ if (cat.notNull())
+ {
+ if (LLClipboard::instance().hasContents() && LLClipboard::instance().isCutMode())
+ {
+ // Something on the clipboard is in "cut mode" and needs to be preserved
+ llinfos << "LLInventoryModel::purgeDescendentsOf " << cat->getName()
+ << " iterate and purge non hidden items" << llendl;
+ cat_array_t* categories;
+ item_array_t* items;
+ // Get the list of direct descendants in tha categoy passed as argument
+ getDirectDescendentsOf(id, categories, items);
+ std::vector<LLUUID> list_uuids;
+ // Make a unique list with all the UUIDs of the direct descendants (items and categories are not treated differently)
+ // Note: we need to do that shallow copy as purging things will invalidate the categories or items lists
+ for (cat_array_t::const_iterator it = categories->begin(); it != categories->end(); ++it)
+ {
+ list_uuids.push_back((*it)->getUUID());
+ }
+ for (item_array_t::const_iterator it = items->begin(); it != items->end(); ++it)
+ {
+ list_uuids.push_back((*it)->getUUID());
+ }
+ // Iterate through the list and only purge the UUIDs that are not on the clipboard
+ for (std::vector<LLUUID>::const_iterator it = list_uuids.begin(); it != list_uuids.end(); ++it)
+ {
+ if (!LLClipboard::instance().isOnClipboard(*it))
+ {
+ purgeObject(*it);
+ }
+ }
}
+ else
+ {
+ // Fast purge
+ // do the cache accounting
+ llinfos << "LLInventoryModel::purgeDescendentsOf " << cat->getName()
+ << llendl;
+ S32 descendents = cat->getDescendentCount();
+ if(descendents > 0)
+ {
+ LLCategoryUpdate up(id, -descendents);
+ accountForUpdate(up);
+ }
- // we know that descendent count is 0, aide since the
- // accounting may actually not do an update, we should force
- // it here.
- cat->setDescendentCount(0);
+ // we know that descendent count is 0, however since the
+ // accounting may actually not do an update, we should force
+ // it here.
+ cat->setDescendentCount(0);
+
+ // send it upstream
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessage("PurgeInventoryDescendents");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID());
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->nextBlock("InventoryData");
+ msg->addUUID("FolderID", id);
+ gAgent.sendReliableMessage();
- // send it upstream
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessage("PurgeInventoryDescendents");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("InventoryData");
- msg->addUUID("FolderID", id);
- gAgent.sendReliableMessage();
-
- // unceremoniously remove anything we have locally stored.
- cat_array_t categories;
- item_array_t items;
- collectDescendents(id,
- categories,
- items,
- INCLUDE_TRASH);
- S32 count = items.count();
- S32 i;
- for(i = 0; i < count; ++i)
- {
- deleteObject(items.get(i)->getUUID());
- }
- count = categories.count();
- for(i = 0; i < count; ++i)
- {
- deleteObject(categories.get(i)->getUUID());
+ // unceremoniously remove anything we have locally stored.
+ cat_array_t categories;
+ item_array_t items;
+ collectDescendents(id,
+ categories,
+ items,
+ INCLUDE_TRASH);
+ S32 count = items.count();
+ for(S32 i = 0; i < count; ++i)
+ {
+ deleteObject(items.get(i)->getUUID());
+ }
+ count = categories.count();
+ for(S32 i = 0; i < count; ++i)
+ {
+ deleteObject(categories.get(i)->getUUID());
+ }
}
}
}
@@ -2931,21 +3026,77 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderT
void LLInventoryModel::removeItem(const LLUUID& item_id)
{
LLViewerInventoryItem* item = getItem(item_id);
- const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if (item && item->getParentUUID() != new_parent)
+ if (! item)
{
- LLInventoryModel::update_list_t update;
- LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
- update.push_back(old_folder);
- LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
- update.push_back(new_folder);
- accountForUpdate(update);
+ LL_WARNS("Inventory") << "couldn't find inventory item " << item_id << LL_ENDL;
+ }
+ else
+ {
+ const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ if (new_parent.notNull())
+ {
+ LL_INFOS("Inventory") << "Moving to Trash (" << new_parent << "):" << LL_ENDL;
+ changeItemParent(item, new_parent, TRUE);
+ }
+ }
+}
- LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
- new_item->setParent(new_parent);
- new_item->updateParentOnServer(TRUE);
- updateItem(new_item);
- notifyObservers();
+void LLInventoryModel::removeCategory(const LLUUID& category_id)
+{
+ if (! get_is_category_removable(this, category_id))
+ {
+ return;
+ }
+
+ // Look for any gestures and deactivate them
+ LLInventoryModel::cat_array_t descendent_categories;
+ LLInventoryModel::item_array_t descendent_items;
+ collectDescendents(category_id, descendent_categories, descendent_items, FALSE);
+
+ for (LLInventoryModel::item_array_t::const_iterator iter = descendent_items.begin();
+ iter != descendent_items.end();
+ ++iter)
+ {
+ const LLViewerInventoryItem* item = (*iter);
+ const LLUUID& item_id = item->getUUID();
+ if (item->getType() == LLAssetType::AT_GESTURE
+ && LLGestureMgr::instance().isGestureActive(item_id))
+ {
+ LLGestureMgr::instance().deactivateGesture(item_id);
+ }
+ }
+
+ LLViewerInventoryCategory* cat = getCategory(category_id);
+ if (cat)
+ {
+ const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ if (trash_id.notNull())
+ {
+ changeCategoryParent(cat, trash_id, TRUE);
+ }
+ }
+}
+
+void LLInventoryModel::removeObject(const LLUUID& object_id)
+{
+ LLInventoryObject* obj = getObject(object_id);
+ if (dynamic_cast<LLViewerInventoryItem*>(obj))
+ {
+ removeItem(object_id);
+ }
+ else if (dynamic_cast<LLViewerInventoryCategory*>(obj))
+ {
+ removeCategory(object_id);
+ }
+ else if (obj)
+ {
+ LL_WARNS("Inventory") << "object ID " << object_id
+ << " is an object of unrecognized class "
+ << typeid(*obj).name() << LL_ENDL;
+ }
+ else
+ {
+ LL_WARNS("Inventory") << "object ID " << object_id << " not found" << LL_ENDL;
}
}
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 7cd85c4ab7..8382e875b4 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -306,6 +306,16 @@ public:
// observer notification, or server update is performed.
void moveObject(const LLUUID& object_id, const LLUUID& cat_id);
+ // Migrated from llinventoryfunctions
+ void changeItemParent(LLViewerInventoryItem* item,
+ const LLUUID& new_parent_id,
+ BOOL restamp);
+
+ // Migrated from llinventoryfunctions
+ void changeCategoryParent(LLViewerInventoryCategory* cat,
+ const LLUUID& new_parent_id,
+ BOOL restamp);
+
//--------------------------------------------------------------------
// Delete
//--------------------------------------------------------------------
@@ -315,8 +325,13 @@ public:
// consistent internal state. No cache accounting, observer
// notification, or server update is performed.
void deleteObject(const LLUUID& id);
+ /// move Item item_id to Trash
void removeItem(const LLUUID& item_id);
-
+ /// move Category category_id to Trash
+ void removeCategory(const LLUUID& category_id);
+ /// removeItem() or removeCategory(), whichever is appropriate
+ void removeObject(const LLUUID& object_id);
+
// Delete a particular inventory object by ID, and delete it from
// the server. Also updates linked items.
void purgeObject(const LLUUID& id);
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 01a8ecfb5d..71dd963f28 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -33,6 +33,7 @@
#include "llagentwearables.h"
#include "llappearancemgr.h"
#include "llavataractions.h"
+#include "llclipboard.h"
#include "llfloaterinventory.h"
#include "llfloaterreg.h"
#include "llfloatersidepanelcontainer.h"
@@ -206,10 +207,11 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
LLScrollContainer::Params scroller_params(params.scroll());
scroller_params.rect(scroller_view_rect);
- mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroller_params);
+ mScroller = LLUICtrlFactory::create<LLFolderViewScrollContainer>(scroller_params);
addChild(mScroller);
mScroller->addChild(mFolderRoot);
mFolderRoot->setScrollContainer(mScroller);
+ mFolderRoot->setFollowsAll();
mFolderRoot->addChild(mFolderRoot->mStatusTextBox);
}
@@ -247,6 +249,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
getFilter()->setFilterEmptySystemFolders();
}
+ // keep track of the clipboard state so that we avoid filtering too much
+ mClipboardState = LLClipboard::instance().getGeneration();
+
// Initialize base class params.
LLPanel::initFromParams(params);
}
@@ -277,6 +282,14 @@ void LLInventoryPanel::draw()
{
// Select the desired item (in case it wasn't loaded when the selection was requested)
mFolderRoot->updateSelection();
+
+ // Nudge the filter if the clipboard state changed
+ if (mClipboardState != LLClipboard::instance().getGeneration())
+ {
+ mClipboardState = LLClipboard::instance().getGeneration();
+ getFilter()->setModified(LLClipboard::instance().isCutMode() ? LLInventoryFilter::FILTER_MORE_RESTRICTIVE : LLInventoryFilter::FILTER_LESS_RESTRICTIVE);
+ }
+
LLPanel::draw();
}
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 7d805f6862..6db59afb9b 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -222,6 +222,7 @@ public:
private:
std::string mSortOrderSetting;
+ int mClipboardState;
//--------------------------------------------------------------------
// Hidden folders
diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp
new file mode 100644
index 0000000000..459e52c4f4
--- /dev/null
+++ b/indra/newview/lllocalbitmaps.cpp
@@ -0,0 +1,942 @@
+/**
+ * @file lllocalbitmaps.cpp
+ * @author Vaalith Jinn
+ * @brief Local Bitmaps source
+ *
+ * $LicenseInfo:firstyear=2011&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 headers */
+#include "llviewerprecompiledheaders.h"
+
+/* own header */
+#include "lllocalbitmaps.h"
+
+/* boost: will not compile unless equivalent is undef'd, beware. */
+#ifdef equivalent
+#undef equivalent
+#endif
+#include <boost/filesystem.hpp>
+
+/* image compression headers. */
+#include "llimagebmp.h"
+#include "llimagetga.h"
+#include "llimagejpeg.h"
+#include "llimagepng.h"
+
+/* time headers */
+#include <time.h>
+#include <ctime>
+
+/* misc headers */
+#include "llscrolllistctrl.h"
+#include "llfilepicker.h"
+#include "llviewertexturelist.h"
+#include "llviewerobjectlist.h"
+#include "llviewerobject.h"
+#include "llface.h"
+#include "llvoavatarself.h"
+#include "llwearable.h"
+#include "llagentwearables.h"
+#include "lltexlayerparams.h"
+#include "llvovolume.h"
+#include "llnotificationsutil.h"
+
+/*=======================================*/
+/* Formal declarations, constants, etc. */
+/*=======================================*/
+std::list<LLLocalBitmap*> LLLocalBitmapMgr::sBitmapList;
+LLLocalBitmapTimer LLLocalBitmapMgr::sTimer;
+bool LLLocalBitmapMgr::sNeedsRebake;
+
+static const F32 LL_LOCAL_TIMER_HEARTBEAT = 3.0;
+static const BOOL LL_LOCAL_USE_MIPMAPS = true;
+static const S32 LL_LOCAL_DISCARD_LEVEL = 0;
+static const U32 LL_LOCAL_TEXLAYER_FOR_IDX = 0;
+static const bool LL_LOCAL_SLAM_FOR_DEBUG = true;
+static const bool LL_LOCAL_REPLACE_ON_DEL = true;
+static const S32 LL_LOCAL_UPDATE_RETRIES = 5;
+
+/*=======================================*/
+/* LLLocalBitmap: unit class */
+/*=======================================*/
+LLLocalBitmap::LLLocalBitmap(std::string filename)
+ : mFilename(filename)
+ , mShortName(gDirUtilp->getBaseFileName(filename, true))
+ , mValid(false)
+ , mLastModified()
+ , mLinkStatus(LS_ON)
+ , mUpdateRetries(LL_LOCAL_UPDATE_RETRIES)
+{
+ mTrackingID.generate();
+
+ /* extension */
+ std::string temp_exten = gDirUtilp->getExtension(mFilename);
+
+ if (temp_exten == "bmp")
+ {
+ mExtension = ET_IMG_BMP;
+ }
+ else if (temp_exten == "tga")
+ {
+ mExtension = ET_IMG_TGA;
+ }
+ else if (temp_exten == "jpg" || temp_exten == "jpeg")
+ {
+ mExtension = ET_IMG_JPG;
+ }
+ else if (temp_exten == "png")
+ {
+ mExtension = ET_IMG_PNG;
+ }
+ else
+ {
+ llwarns << "File of no valid extension given, local bitmap creation aborted." << "\n"
+ << "Filename: " << mFilename << llendl;
+ return; // no valid extension.
+ }
+
+ /* next phase of unit creation is nearly the same as an update cycle.
+ we're running updateSelf as a special case with the optional UT_FIRSTUSE
+ which omits the parts associated with removing the outdated texture */
+ mValid = updateSelf(UT_FIRSTUSE);
+}
+
+LLLocalBitmap::~LLLocalBitmap()
+{
+ // replace IDs with defaults, if set to do so.
+ if(LL_LOCAL_REPLACE_ON_DEL && mValid) // fix for STORM-1837
+ {
+ replaceIDs(mWorldID, IMG_DEFAULT);
+ LLLocalBitmapMgr::doRebake();
+ }
+
+ // delete self from gimagelist
+ LLViewerFetchedTexture* image = gTextureList.findImage(mWorldID);
+ gTextureList.deleteImage(image);
+
+ if (image)
+ {
+ image->unref();
+ }
+}
+
+/* accessors */
+std::string LLLocalBitmap::getFilename()
+{
+ return mFilename;
+}
+
+std::string LLLocalBitmap::getShortName()
+{
+ return mShortName;
+}
+
+LLUUID LLLocalBitmap::getTrackingID()
+{
+ return mTrackingID;
+}
+
+LLUUID LLLocalBitmap::getWorldID()
+{
+ return mWorldID;
+}
+
+bool LLLocalBitmap::getValid()
+{
+ return mValid;
+}
+
+/* update functions */
+bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)
+{
+ bool updated = false;
+
+ if (mLinkStatus == LS_ON)
+ {
+ // verifying that the file exists
+ if (gDirUtilp->fileExists(mFilename))
+ {
+ // verifying that the file has indeed been modified
+ const std::time_t temp_time = boost::filesystem::last_write_time(boost::filesystem::path(mFilename));
+ LLSD new_last_modified = asctime(localtime(&temp_time));
+
+ if (mLastModified.asString() != new_last_modified.asString())
+ {
+ /* loading the image file and decoding it, here is a critical point which,
+ if fails, invalidates the whole update (or unit creation) process. */
+ LLPointer<LLImageRaw> raw_image = new LLImageRaw();
+ if (decodeBitmap(raw_image))
+ {
+ // decode is successful, we can safely proceed.
+ LLUUID old_id = LLUUID::null;
+ if (!(optional_firstupdate == UT_FIRSTUSE) && !mWorldID.isNull())
+ {
+ old_id = mWorldID;
+ }
+ mWorldID.generate();
+ mLastModified = new_last_modified;
+
+ LLPointer<LLViewerFetchedTexture> texture = new LLViewerFetchedTexture
+ ("file://"+mFilename, mWorldID, LL_LOCAL_USE_MIPMAPS);
+
+ texture->createGLTexture(LL_LOCAL_DISCARD_LEVEL, raw_image);
+ texture->setCachedRawImage(LL_LOCAL_DISCARD_LEVEL, raw_image);
+ texture->ref();
+
+ gTextureList.addImage(texture);
+
+ if (!optional_firstupdate == UT_FIRSTUSE)
+ {
+ // seek out everything old_id uses and replace it with mWorldID
+ replaceIDs(old_id, mWorldID);
+
+ // remove old_id from gimagelist
+ LLViewerFetchedTexture* image = gTextureList.findImage(old_id);
+ gTextureList.deleteImage(image);
+ image->unref();
+ }
+
+ mUpdateRetries = LL_LOCAL_UPDATE_RETRIES;
+ updated = true;
+ }
+
+ // if decoding failed, we get here and it will attempt to decode it in the next cycles
+ // until mUpdateRetries runs out. this is done because some software lock the bitmap while writing to it
+ else
+ {
+ if (mUpdateRetries)
+ {
+ mUpdateRetries--;
+ }
+ else
+ {
+ llwarns << "During the update process the following file was found" << "\n"
+ << "but could not be opened or decoded for " << LL_LOCAL_UPDATE_RETRIES << " attempts." << "\n"
+ << "Filename: " << mFilename << "\n"
+ << "Disabling further update attempts for this file." << llendl;
+
+ LLSD notif_args;
+ notif_args["FNAME"] = mFilename;
+ notif_args["NRETRIES"] = LL_LOCAL_UPDATE_RETRIES;
+ LLNotificationsUtil::add("LocalBitmapsUpdateFailedFinal", notif_args);
+
+ mLinkStatus = LS_BROKEN;
+ }
+ }
+ }
+
+ } // end if file exists
+
+ else
+ {
+ llwarns << "During the update process, the following file was not found." << "\n"
+ << "Filename: " << mFilename << "\n"
+ << "Disabling further update attempts for this file." << llendl;
+
+ LLSD notif_args;
+ notif_args["FNAME"] = mFilename;
+ LLNotificationsUtil::add("LocalBitmapsUpdateFileNotFound", notif_args);
+
+ mLinkStatus = LS_BROKEN;
+ }
+ }
+
+ return updated;
+}
+
+bool LLLocalBitmap::decodeBitmap(LLPointer<LLImageRaw> rawimg)
+{
+ bool decode_successful = false;
+
+ switch (mExtension)
+ {
+ case ET_IMG_BMP:
+ {
+ LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
+ if (bmp_image->load(mFilename) && bmp_image->decode(rawimg, 0.0f))
+ {
+ rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
+ decode_successful = true;
+ }
+ break;
+ }
+
+ case ET_IMG_TGA:
+ {
+ LLPointer<LLImageTGA> tga_image = new LLImageTGA;
+ if ((tga_image->load(mFilename) && tga_image->decode(rawimg))
+ && ((tga_image->getComponents() == 3) || (tga_image->getComponents() == 4)))
+ {
+ rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
+ decode_successful = true;
+ }
+ break;
+ }
+
+ case ET_IMG_JPG:
+ {
+ LLPointer<LLImageJPEG> jpeg_image = new LLImageJPEG;
+ if (jpeg_image->load(mFilename) && jpeg_image->decode(rawimg, 0.0f))
+ {
+ rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
+ decode_successful = true;
+ }
+ break;
+ }
+
+ case ET_IMG_PNG:
+ {
+ LLPointer<LLImagePNG> png_image = new LLImagePNG;
+ if (png_image->load(mFilename) && png_image->decode(rawimg, 0.0f))
+ {
+ rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
+ decode_successful = true;
+ }
+ break;
+ }
+
+ default:
+ {
+ // separating this into -several- llwarns calls because in the extremely unlikely case that this happens
+ // accessing mFilename and any other object properties might very well crash the viewer.
+ // getting here should be impossible, or there's been a pretty serious bug.
+
+ llwarns << "During a decode attempt, the following local bitmap had no properly assigned extension." << llendl;
+ llwarns << "Filename: " << mFilename << llendl;
+ llwarns << "Disabling further update attempts for this file." << llendl;
+ mLinkStatus = LS_BROKEN;
+ }
+ }
+
+ return decode_successful;
+}
+
+void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)
+{
+ // checking for misuse.
+ if (old_id == new_id)
+ {
+ llinfos << "An attempt was made to replace a texture with itself. (matching UUIDs)" << "\n"
+ << "Texture UUID: " << old_id.asString() << llendl;
+ return;
+ }
+
+ updateUserPrims(old_id, new_id);
+ updateUserSculpts(old_id, new_id); // isn't there supposed to be an IMG_DEFAULT_SCULPT or something?
+
+ // default safeguard image for layers
+ if( new_id == IMG_DEFAULT )
+ {
+ new_id = IMG_DEFAULT_AVATAR;
+ }
+
+ /* It doesn't actually update all of those, it merely checks if any of them
+ contain the referenced ID and if so, updates. */
+ updateUserLayers(old_id, new_id, LLWearableType::WT_ALPHA);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_EYES);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_GLOVES);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_JACKET);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_PANTS);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_SHIRT);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_SHOES);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_SKIN);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_SKIRT);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_SOCKS);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_TATTOO);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_UNDERPANTS);
+ updateUserLayers(old_id, new_id, LLWearableType::WT_UNDERSHIRT);
+}
+
+// this function sorts the faces from a getFaceList[getNumFaces] into a list of objects
+// in order to prevent multiple sendTEUpdate calls per object during updateUserPrims
+std::vector<LLViewerObject*> LLLocalBitmap::prepUpdateObjects(LLUUID old_id)
+{
+ std::vector<LLViewerObject*> obj_list;
+ LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id);
+
+ for(U32 face_iterator = 0; face_iterator < old_texture->getNumFaces(); face_iterator++)
+ {
+ // getting an object from a face
+ LLFace* face_to_object = (*old_texture->getFaceList())[face_iterator];
+
+ if(face_to_object)
+ {
+ LLViewerObject* affected_object = face_to_object->getViewerObject();
+
+ if(affected_object)
+ {
+
+ // we have an object, we'll take it's UUID and compare it to
+ // whatever we already have in the returnable object list.
+ // if there is a match - we do not add (to prevent duplicates)
+ LLUUID mainlist_obj_id = affected_object->getID();
+ bool add_object = true;
+
+ // begin looking for duplicates
+ std::vector<LLViewerObject*>::iterator objlist_iter = obj_list.begin();
+ for(; (objlist_iter != obj_list.end()) && add_object; objlist_iter++)
+ {
+ LLViewerObject* obj = *objlist_iter;
+ if (obj->getID() == mainlist_obj_id)
+ {
+ add_object = false; // duplicate found.
+ }
+ }
+ // end looking for duplicates
+
+ if(add_object)
+ {
+ obj_list.push_back(affected_object);
+ }
+
+ }
+
+ }
+
+ } // end of face-iterating for()
+
+ return obj_list;
+}
+
+void LLLocalBitmap::updateUserPrims(LLUUID old_id, LLUUID new_id)
+{
+ std::vector<LLViewerObject*> objectlist = prepUpdateObjects(old_id);
+
+ for(std::vector<LLViewerObject*>::iterator object_iterator = objectlist.begin();
+ object_iterator != objectlist.end(); object_iterator++)
+ {
+ LLViewerObject* object = *object_iterator;
+
+ if(object)
+ {
+ bool update_obj = false;
+ S32 num_faces = object->getNumFaces();
+
+ for (U8 face_iter = 0; face_iter < num_faces; face_iter++)
+ {
+ if (object->mDrawable)
+ {
+ LLFace* face = object->mDrawable->getFace(face_iter);
+ if (face && face->getTexture() && face->getTexture()->getID() == old_id)
+ {
+ object->setTEImage(face_iter, LLViewerTextureManager::getFetchedTexture
+ (new_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
+
+ update_obj = true;
+ }
+ }
+ }
+
+ if (update_obj)
+ {
+ object->sendTEUpdate();
+ }
+ }
+ }
+
+}
+
+void LLLocalBitmap::updateUserSculpts(LLUUID old_id, LLUUID new_id)
+{
+ LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id);
+ for(U32 volume_iter = 0; volume_iter < old_texture->getNumVolumes(); volume_iter++)
+ {
+ LLVOVolume* volume_to_object = (*old_texture->getVolumeList())[volume_iter];
+ LLViewerObject* object = (LLViewerObject*)volume_to_object;
+
+ if(object)
+ {
+ if (object->isSculpted() && object->getVolume() &&
+ object->getVolume()->getParams().getSculptID() == old_id)
+ {
+ LLSculptParams* old_params = (LLSculptParams*)object->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
+ LLSculptParams new_params(*old_params);
+ new_params.setSculptTexture(new_id);
+ object->setParameterEntry(LLNetworkData::PARAMS_SCULPT, new_params, TRUE);
+ }
+ }
+ }
+}
+
+void LLLocalBitmap::updateUserLayers(LLUUID old_id, LLUUID new_id, LLWearableType::EType type)
+{
+ U32 count = gAgentWearables.getWearableCount(type);
+ for(U32 wearable_iter = 0; wearable_iter < count; wearable_iter++)
+ {
+ LLWearable* wearable = gAgentWearables.getWearable(type, wearable_iter);
+ if (wearable)
+ {
+ std::vector<LLLocalTextureObject*> texture_list = wearable->getLocalTextureListSeq();
+ for(std::vector<LLLocalTextureObject*>::iterator texture_iter = texture_list.begin();
+ texture_iter != texture_list.end(); texture_iter++)
+ {
+ LLLocalTextureObject* lto = *texture_iter;
+
+ if (lto && lto->getID() == old_id)
+ {
+ U32 local_texlayer_index = 0; /* can't keep that as static const, gives errors, so i'm leaving this var here */
+ LLVOAvatarDefines::EBakedTextureIndex baked_texind =
+ lto->getTexLayer(local_texlayer_index)->getTexLayerSet()->getBakedTexIndex();
+
+ LLVOAvatarDefines::ETextureIndex reg_texind = getTexIndex(type, baked_texind);
+ if (reg_texind != LLVOAvatarDefines::TEX_NUM_INDICES)
+ {
+ U32 index = gAgentWearables.getWearableIndex(wearable);
+ gAgentAvatarp->setLocalTexture(reg_texind, gTextureList.getImage(new_id), FALSE, index);
+ gAgentAvatarp->wearableUpdated(type, FALSE);
+
+ /* telling the manager to rebake once update cycle is fully done */
+ LLLocalBitmapMgr::setNeedsRebake();
+ }
+
+ }
+ }
+ }
+ }
+}
+
+LLVOAvatarDefines::ETextureIndex LLLocalBitmap::getTexIndex(
+ LLWearableType::EType type, LLVOAvatarDefines::EBakedTextureIndex baked_texind)
+{
+ LLVOAvatarDefines::ETextureIndex result = LLVOAvatarDefines::TEX_NUM_INDICES; // using as a default/fail return.
+
+ switch(type)
+ {
+ case LLWearableType::WT_ALPHA:
+ {
+ switch(baked_texind)
+ {
+ case LLVOAvatarDefines::BAKED_EYES:
+ {
+ result = LLVOAvatarDefines::TEX_EYES_ALPHA;
+ break;
+ }
+
+ case LLVOAvatarDefines::BAKED_HAIR:
+ {
+ result = LLVOAvatarDefines::TEX_HAIR_ALPHA;
+ break;
+ }
+
+ case LLVOAvatarDefines::BAKED_HEAD:
+ {
+ result = LLVOAvatarDefines::TEX_HEAD_ALPHA;
+ break;
+ }
+
+ case LLVOAvatarDefines::BAKED_LOWER:
+ {
+ result = LLVOAvatarDefines::TEX_LOWER_ALPHA;
+ break;
+ }
+ case LLVOAvatarDefines::BAKED_UPPER:
+ {
+ result = LLVOAvatarDefines::TEX_UPPER_ALPHA;
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+
+ }
+ break;
+
+ }
+
+ case LLWearableType::WT_EYES:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_EYES)
+ {
+ result = LLVOAvatarDefines::TEX_EYES_IRIS;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_GLOVES:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_UPPER)
+ {
+ result = LLVOAvatarDefines::TEX_UPPER_GLOVES;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_JACKET:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
+ {
+ result = LLVOAvatarDefines::TEX_LOWER_JACKET;
+ }
+ else if (baked_texind == LLVOAvatarDefines::BAKED_UPPER)
+ {
+ result = LLVOAvatarDefines::TEX_UPPER_JACKET;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_PANTS:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
+ {
+ result = LLVOAvatarDefines::TEX_LOWER_PANTS;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_SHIRT:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_UPPER)
+ {
+ result = LLVOAvatarDefines::TEX_UPPER_SHIRT;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_SHOES:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
+ {
+ result = LLVOAvatarDefines::TEX_LOWER_SHOES;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_SKIN:
+ {
+ switch(baked_texind)
+ {
+ case LLVOAvatarDefines::BAKED_HEAD:
+ {
+ result = LLVOAvatarDefines::TEX_HEAD_BODYPAINT;
+ break;
+ }
+
+ case LLVOAvatarDefines::BAKED_LOWER:
+ {
+ result = LLVOAvatarDefines::TEX_LOWER_BODYPAINT;
+ break;
+ }
+ case LLVOAvatarDefines::BAKED_UPPER:
+ {
+ result = LLVOAvatarDefines::TEX_UPPER_BODYPAINT;
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+
+ }
+ break;
+ }
+
+ case LLWearableType::WT_SKIRT:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_SKIRT)
+ {
+ result = LLVOAvatarDefines::TEX_SKIRT;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_SOCKS:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
+ {
+ result = LLVOAvatarDefines::TEX_LOWER_SOCKS;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_TATTOO:
+ {
+ switch(baked_texind)
+ {
+ case LLVOAvatarDefines::BAKED_HEAD:
+ {
+ result = LLVOAvatarDefines::TEX_HEAD_TATTOO;
+ break;
+ }
+
+ case LLVOAvatarDefines::BAKED_LOWER:
+ {
+ result = LLVOAvatarDefines::TEX_LOWER_TATTOO;
+ break;
+ }
+ case LLVOAvatarDefines::BAKED_UPPER:
+ {
+ result = LLVOAvatarDefines::TEX_UPPER_TATTOO;
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+
+ }
+ break;
+ }
+
+ case LLWearableType::WT_UNDERPANTS:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
+ {
+ result = LLVOAvatarDefines::TEX_LOWER_UNDERPANTS;
+ }
+
+ break;
+ }
+
+ case LLWearableType::WT_UNDERSHIRT:
+ {
+ if (baked_texind == LLVOAvatarDefines::BAKED_UPPER)
+ {
+ result = LLVOAvatarDefines::TEX_UPPER_UNDERSHIRT;
+ }
+
+ break;
+ }
+
+ default:
+ {
+ llwarns << "Unknown wearable type: " << (int)type << "\n"
+ << "Baked Texture Index: " << (int)baked_texind << "\n"
+ << "Filename: " << mFilename << "\n"
+ << "TrackingID: " << mTrackingID << "\n"
+ << "InworldID: " << mWorldID << llendl;
+ }
+
+ }
+ return result;
+}
+
+/*=======================================*/
+/* LLLocalBitmapTimer: timer class */
+/*=======================================*/
+LLLocalBitmapTimer::LLLocalBitmapTimer() : LLEventTimer(LL_LOCAL_TIMER_HEARTBEAT)
+{
+}
+
+LLLocalBitmapTimer::~LLLocalBitmapTimer()
+{
+}
+
+void LLLocalBitmapTimer::startTimer()
+{
+ mEventTimer.start();
+}
+
+void LLLocalBitmapTimer::stopTimer()
+{
+ mEventTimer.stop();
+}
+
+bool LLLocalBitmapTimer::isRunning()
+{
+ return mEventTimer.getStarted();
+}
+
+BOOL LLLocalBitmapTimer::tick()
+{
+ LLLocalBitmapMgr::doUpdates();
+ return FALSE;
+}
+
+/*=======================================*/
+/* LLLocalBitmapMgr: manager class */
+/*=======================================*/
+LLLocalBitmapMgr::LLLocalBitmapMgr()
+{
+ // The class is all made of static members, should i even bother instantiating?
+}
+
+LLLocalBitmapMgr::~LLLocalBitmapMgr()
+{
+}
+
+bool LLLocalBitmapMgr::addUnit()
+{
+ bool add_successful = false;
+
+ LLFilePicker& picker = LLFilePicker::instance();
+ if (picker.getMultipleOpenFiles(LLFilePicker::FFLOAD_IMAGE))
+ {
+ sTimer.stopTimer();
+
+ std::string filename = picker.getFirstFile();
+ while(!filename.empty())
+ {
+ LLLocalBitmap* unit = new LLLocalBitmap(filename);
+
+ if (unit->getValid())
+ {
+ sBitmapList.push_back(unit);
+ add_successful = true;
+ }
+ else
+ {
+ llwarns << "Attempted to add invalid or unreadable image file, attempt cancelled.\n"
+ << "Filename: " << filename << llendl;
+
+ LLSD notif_args;
+ notif_args["FNAME"] = filename;
+ LLNotificationsUtil::add("LocalBitmapsVerifyFail", notif_args);
+
+ delete unit;
+ unit = NULL;
+ }
+
+ filename = picker.getNextFile();
+ }
+
+ sTimer.startTimer();
+ }
+
+ return add_successful;
+}
+
+void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)
+{
+ if (!sBitmapList.empty())
+ {
+ std::vector<LLLocalBitmap*> to_delete;
+ for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
+ { /* finding which ones we want deleted and making a separate list */
+ LLLocalBitmap* unit = *iter;
+ if (unit->getTrackingID() == tracking_id)
+ {
+ to_delete.push_back(unit);
+ }
+ }
+
+ for(std::vector<LLLocalBitmap*>::iterator del_iter = to_delete.begin();
+ del_iter != to_delete.end(); del_iter++)
+ { /* iterating over a temporary list, hence preserving the iterator validity while deleting. */
+ LLLocalBitmap* unit = *del_iter;
+ sBitmapList.remove(unit);
+ delete unit;
+ unit = NULL;
+ }
+ }
+}
+
+LLUUID LLLocalBitmapMgr::getWorldID(LLUUID tracking_id)
+{
+ LLUUID world_id = LLUUID::null;
+
+ for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
+ {
+ LLLocalBitmap* unit = *iter;
+ if (unit->getTrackingID() == tracking_id)
+ {
+ world_id = unit->getWorldID();
+ }
+ }
+
+ return world_id;
+}
+
+std::string LLLocalBitmapMgr::getFilename(LLUUID tracking_id)
+{
+ std::string filename = "";
+
+ for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
+ {
+ LLLocalBitmap* unit = *iter;
+ if (unit->getTrackingID() == tracking_id)
+ {
+ filename = unit->getFilename();
+ }
+ }
+
+ return filename;
+}
+
+void LLLocalBitmapMgr::feedScrollList(LLScrollListCtrl* ctrl)
+{
+ if (ctrl)
+ {
+ ctrl->clearRows();
+
+ if (!sBitmapList.empty())
+ {
+ for (local_list_iter iter = sBitmapList.begin();
+ iter != sBitmapList.end(); iter++)
+ {
+ LLSD element;
+ element["columns"][0]["column"] = "unit_name";
+ element["columns"][0]["type"] = "text";
+ element["columns"][0]["value"] = (*iter)->getShortName();
+
+ element["columns"][1]["column"] = "unit_id_HIDDEN";
+ element["columns"][1]["type"] = "text";
+ element["columns"][1]["value"] = (*iter)->getTrackingID();
+
+ ctrl->addElement(element);
+ }
+ }
+ }
+
+}
+
+void LLLocalBitmapMgr::doUpdates()
+{
+ // preventing theoretical overlap in cases with huge number of loaded images.
+ sTimer.stopTimer();
+ sNeedsRebake = false;
+
+ for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
+ {
+ (*iter)->updateSelf();
+ }
+
+ doRebake();
+ sTimer.startTimer();
+}
+
+void LLLocalBitmapMgr::setNeedsRebake()
+{
+ sNeedsRebake = true;
+}
+
+void LLLocalBitmapMgr::doRebake()
+{ /* separated that from doUpdates to insure a rebake can be called separately during deletion */
+ if (sNeedsRebake)
+ {
+ gAgentAvatarp->forceBakeAllTextures(LL_LOCAL_SLAM_FOR_DEBUG);
+ sNeedsRebake = false;
+ }
+}
+
diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h
new file mode 100644
index 0000000000..7a23c7ef6e
--- /dev/null
+++ b/indra/newview/lllocalbitmaps.h
@@ -0,0 +1,136 @@
+/**
+ * @file lllocalbitmaps.h
+ * @author Vaalith Jinn
+ * @brief Local Bitmaps header
+ *
+ * $LicenseInfo:firstyear=2011&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_LOCALBITMAPS_H
+#define LL_LOCALBITMAPS_H
+
+#include "lleventtimer.h"
+#include "llwearabletype.h"
+#include "llvoavatardefines.h"
+
+class LLScrollListCtrl;
+
+class LLLocalBitmap
+{
+ public: /* main */
+ LLLocalBitmap(std::string filename);
+ ~LLLocalBitmap();
+
+ public: /* accessors */
+ std::string getFilename();
+ std::string getShortName();
+ LLUUID getTrackingID();
+ LLUUID getWorldID();
+ bool getValid();
+
+ public: /* self update public section */
+ enum EUpdateType
+ {
+ UT_FIRSTUSE,
+ UT_REGUPDATE
+ };
+
+ bool updateSelf(EUpdateType = UT_REGUPDATE);
+
+ private: /* self update private section */
+ bool decodeBitmap(LLPointer<LLImageRaw> raw);
+ void replaceIDs(LLUUID old_id, LLUUID new_id);
+ std::vector<LLViewerObject*> prepUpdateObjects(LLUUID old_id);
+ void updateUserPrims(LLUUID old_id, LLUUID new_id);
+ void updateUserSculpts(LLUUID old_id, LLUUID new_id);
+ void updateUserLayers(LLUUID old_id, LLUUID new_id, LLWearableType::EType type);
+ LLVOAvatarDefines::ETextureIndex getTexIndex(LLWearableType::EType type, LLVOAvatarDefines::EBakedTextureIndex baked_texind);
+
+ private: /* private enums */
+ enum ELinkStatus
+ {
+ LS_ON,
+ LS_BROKEN,
+ };
+
+ enum EExtension
+ {
+ ET_IMG_BMP,
+ ET_IMG_TGA,
+ ET_IMG_JPG,
+ ET_IMG_PNG
+ };
+
+ private: /* members */
+ std::string mFilename;
+ std::string mShortName;
+ LLUUID mTrackingID;
+ LLUUID mWorldID;
+ bool mValid;
+ LLSD mLastModified;
+ EExtension mExtension;
+ ELinkStatus mLinkStatus;
+ S32 mUpdateRetries;
+
+};
+
+class LLLocalBitmapTimer : public LLEventTimer
+{
+ public:
+ LLLocalBitmapTimer();
+ ~LLLocalBitmapTimer();
+
+ public:
+ void startTimer();
+ void stopTimer();
+ bool isRunning();
+ BOOL tick();
+
+};
+
+class LLLocalBitmapMgr
+{
+ public:
+ LLLocalBitmapMgr();
+ ~LLLocalBitmapMgr();
+
+ public:
+ static bool addUnit();
+ static void delUnit(LLUUID tracking_id);
+
+ static LLUUID getWorldID(LLUUID tracking_id);
+ static std::string getFilename(LLUUID tracking_id);
+
+ static void feedScrollList(LLScrollListCtrl* ctrl);
+ static void doUpdates();
+ static void setNeedsRebake();
+ static void doRebake();
+
+ private:
+ static std::list<LLLocalBitmap*> sBitmapList;
+ static LLLocalBitmapTimer sTimer;
+ static bool sNeedsRebake;
+ typedef std::list<LLLocalBitmap*>::iterator local_list_iter;
+};
+
+#endif
+
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index bd20210190..f461c7e46f 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -508,6 +508,7 @@ void LLMeshRepoThread::run()
while (!mLODReqQ.empty() && count < MAX_MESH_REQUESTS_PER_SECOND && sActiveLODRequests < sMaxConcurrentRequests)
{
+ if (mMutex)
{
mMutex->lock();
LODRequest req = mLODReqQ.front();
@@ -525,6 +526,7 @@ void LLMeshRepoThread::run()
while (!mHeaderReqQ.empty() && count < MAX_MESH_REQUESTS_PER_SECOND && sActiveHeaderRequests < sMaxConcurrentRequests)
{
+ if (mMutex)
{
mMutex->lock();
HeaderRequest req = mHeaderReqQ.front();
@@ -671,6 +673,12 @@ std::string LLMeshRepoThread::constructUrl(LLUUID mesh_id)
bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
{ //protected by mMutex
+
+ if (!mHeaderMutex)
+ {
+ return false;
+ }
+
mHeaderMutex->lock();
if (mMeshHeader.find(mesh_id) == mMeshHeader.end())
@@ -747,6 +755,11 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
{ //protected by mMutex
+ if (!mHeaderMutex)
+ {
+ return false;
+ }
+
mHeaderMutex->lock();
if (mMeshHeader.find(mesh_id) == mMeshHeader.end())
@@ -824,6 +837,11 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
{ //protected by mMutex
+ if (!mHeaderMutex)
+ {
+ return false;
+ }
+
mHeaderMutex->lock();
if (mMeshHeader.find(mesh_id) == mMeshHeader.end())
@@ -950,6 +968,11 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params, U32& c
//return false if failed to get mesh lod.
bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod, U32& count)
{ //protected by mMutex
+ if (!mHeaderMutex)
+ {
+ return false;
+ }
+
mHeaderMutex->lock();
bool retval = true;
@@ -1068,10 +1091,11 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat
{
LLUUID mesh_id = mesh_params.getSculptID();
- mHeaderMutex->lock();
- mMeshHeaderSize[mesh_id] = header_size;
- mMeshHeader[mesh_id] = header;
- mHeaderMutex->unlock();
+ {
+ LLMutexLock lock(mHeaderMutex);
+ mMeshHeaderSize[mesh_id] = header_size;
+ mMeshHeader[mesh_id] = header;
+ }
//check for pending requests
pending_lod_map::iterator iter = mPendingLOD.find(mesh_params);
@@ -1646,6 +1670,11 @@ void LLMeshUploadThread::requestWholeModelFee()
void LLMeshRepoThread::notifyLoadedMeshes()
{
+ if (!mMutex)
+ {
+ return;
+ }
+
while (!mLoadedQ.empty())
{
mMutex->lock();
@@ -2357,93 +2386,92 @@ void LLMeshRepository::notifyLoadedMeshes()
}
}
- mMeshMutex->lock();
- mThread->mMutex->lock();
-
- //popup queued error messages from background threads
- while (!mUploadErrorQ.empty())
{
- LLNotificationsUtil::add("MeshUploadError", mUploadErrorQ.front());
- mUploadErrorQ.pop();
- }
+ LLMutexLock lock1(mMeshMutex);
+ LLMutexLock lock2(mThread->mMutex);
+
+ //popup queued error messages from background threads
+ while (!mUploadErrorQ.empty())
+ {
+ LLNotificationsUtil::add("MeshUploadError", mUploadErrorQ.front());
+ mUploadErrorQ.pop();
+ }
- S32 push_count = LLMeshRepoThread::sMaxConcurrentRequests-(LLMeshRepoThread::sActiveHeaderRequests+LLMeshRepoThread::sActiveLODRequests);
+ S32 push_count = LLMeshRepoThread::sMaxConcurrentRequests-(LLMeshRepoThread::sActiveHeaderRequests+LLMeshRepoThread::sActiveLODRequests);
- if (push_count > 0)
- {
- //calculate "score" for pending requests
+ if (push_count > 0)
+ {
+ //calculate "score" for pending requests
- //create score map
- std::map<LLUUID, F32> score_map;
+ //create score map
+ std::map<LLUUID, F32> score_map;
- for (U32 i = 0; i < 4; ++i)
- {
- for (mesh_load_map::iterator iter = mLoadingMeshes[i].begin(); iter != mLoadingMeshes[i].end(); ++iter)
+ for (U32 i = 0; i < 4; ++i)
{
- F32 max_score = 0.f;
- for (std::set<LLUUID>::iterator obj_iter = iter->second.begin(); obj_iter != iter->second.end(); ++obj_iter)
+ for (mesh_load_map::iterator iter = mLoadingMeshes[i].begin(); iter != mLoadingMeshes[i].end(); ++iter)
{
- LLViewerObject* object = gObjectList.findObject(*obj_iter);
-
- if (object)
+ F32 max_score = 0.f;
+ for (std::set<LLUUID>::iterator obj_iter = iter->second.begin(); obj_iter != iter->second.end(); ++obj_iter)
{
- LLDrawable* drawable = object->mDrawable;
- if (drawable)
+ LLViewerObject* object = gObjectList.findObject(*obj_iter);
+
+ if (object)
{
- F32 cur_score = drawable->getRadius()/llmax(drawable->mDistanceWRTCamera, 1.f);
- max_score = llmax(max_score, cur_score);
+ LLDrawable* drawable = object->mDrawable;
+ if (drawable)
+ {
+ F32 cur_score = drawable->getRadius()/llmax(drawable->mDistanceWRTCamera, 1.f);
+ max_score = llmax(max_score, cur_score);
+ }
}
}
- }
- score_map[iter->first.getSculptID()] = max_score;
+ score_map[iter->first.getSculptID()] = max_score;
+ }
+ }
+
+ //set "score" for pending requests
+ for (std::vector<LLMeshRepoThread::LODRequest>::iterator iter = mPendingRequests.begin(); iter != mPendingRequests.end(); ++iter)
+ {
+ iter->mScore = score_map[iter->mMeshParams.getSculptID()];
+ }
+
+ //sort by "score"
+ std::sort(mPendingRequests.begin(), mPendingRequests.end(), LLMeshRepoThread::CompareScoreGreater());
+
+ while (!mPendingRequests.empty() && push_count > 0)
+ {
+ LLMeshRepoThread::LODRequest& request = mPendingRequests.front();
+ mThread->loadMeshLOD(request.mMeshParams, request.mLOD);
+ mPendingRequests.erase(mPendingRequests.begin());
+ LLMeshRepository::sLODPending--;
+ push_count--;
}
}
- //set "score" for pending requests
- for (std::vector<LLMeshRepoThread::LODRequest>::iterator iter = mPendingRequests.begin(); iter != mPendingRequests.end(); ++iter)
+ //send skin info requests
+ while (!mPendingSkinRequests.empty())
{
- iter->mScore = score_map[iter->mMeshParams.getSculptID()];
+ mThread->loadMeshSkinInfo(mPendingSkinRequests.front());
+ mPendingSkinRequests.pop();
}
-
- //sort by "score"
- std::sort(mPendingRequests.begin(), mPendingRequests.end(), LLMeshRepoThread::CompareScoreGreater());
-
- while (!mPendingRequests.empty() && push_count > 0)
+
+ //send decomposition requests
+ while (!mPendingDecompositionRequests.empty())
{
- LLMeshRepoThread::LODRequest& request = mPendingRequests.front();
- mThread->loadMeshLOD(request.mMeshParams, request.mLOD);
- mPendingRequests.erase(mPendingRequests.begin());
- LLMeshRepository::sLODPending--;
- push_count--;
+ mThread->loadMeshDecomposition(mPendingDecompositionRequests.front());
+ mPendingDecompositionRequests.pop();
}
- }
-
- //send skin info requests
- while (!mPendingSkinRequests.empty())
- {
- mThread->loadMeshSkinInfo(mPendingSkinRequests.front());
- mPendingSkinRequests.pop();
- }
- //send decomposition requests
- while (!mPendingDecompositionRequests.empty())
- {
- mThread->loadMeshDecomposition(mPendingDecompositionRequests.front());
- mPendingDecompositionRequests.pop();
- }
+ //send physics shapes decomposition requests
+ while (!mPendingPhysicsShapeRequests.empty())
+ {
+ mThread->loadMeshPhysicsShape(mPendingPhysicsShapeRequests.front());
+ mPendingPhysicsShapeRequests.pop();
+ }
- //send physics shapes decomposition requests
- while (!mPendingPhysicsShapeRequests.empty())
- {
- mThread->loadMeshPhysicsShape(mPendingPhysicsShapeRequests.front());
- mPendingPhysicsShapeRequests.pop();
+ mThread->notifyLoadedMeshes();
}
-
- mThread->notifyLoadedMeshes();
-
- mThread->mMutex->unlock();
- mMeshMutex->unlock();
mThread->mSignal->signal();
}
@@ -3091,13 +3119,14 @@ void LLPhysicsDecomp::doDecomposition()
num_hulls = LLConvexDecomposition::getInstance()->getNumHullsFromStage(stage);
}
- mMutex->lock();
- mCurRequest->mHull.clear();
- mCurRequest->mHull.resize(num_hulls);
+ {
+ LLMutexLock lock(mMutex);
+ mCurRequest->mHull.clear();
+ mCurRequest->mHull.resize(num_hulls);
- mCurRequest->mHullMesh.clear();
- mCurRequest->mHullMesh.resize(num_hulls);
- mMutex->unlock();
+ mCurRequest->mHullMesh.clear();
+ mCurRequest->mHullMesh.resize(num_hulls);
+ }
for (S32 i = 0; i < num_hulls; ++i)
{
@@ -3121,14 +3150,14 @@ void LLPhysicsDecomp::doDecomposition()
get_vertex_buffer_from_mesh(mesh, mCurRequest->mHullMesh[i]);
- mMutex->lock();
- mCurRequest->mHull[i] = p;
- mMutex->unlock();
+ {
+ LLMutexLock lock(mMutex);
+ mCurRequest->mHull[i] = p;
+ }
}
{
LLMutexLock lock(mMutex);
-
mCurRequest->setStatusMessage("FAIL");
completeCurrent();
}
@@ -3196,7 +3225,6 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
LLCDMeshData mesh;
-#if 1
setMeshData(mesh, true);
LLCDResult ret = decomp->buildSingleHull() ;
@@ -3207,11 +3235,12 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
}
else
{
- mMutex->lock();
- mCurRequest->mHull.clear();
- mCurRequest->mHull.resize(1);
- mCurRequest->mHullMesh.clear();
- mMutex->unlock();
+ {
+ LLMutexLock lock(mMutex);
+ mCurRequest->mHull.clear();
+ mCurRequest->mHull.resize(1);
+ mCurRequest->mHullMesh.clear();
+ }
std::vector<LLVector3> p;
LLCDHull hull;
@@ -3227,93 +3256,12 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
p.push_back(vert);
v = (F32*) (((U8*) v) + hull.mVertexStrideBytes);
}
-
- mMutex->lock();
- mCurRequest->mHull[0] = p;
- mMutex->unlock();
- }
-#else
- setMeshData(mesh, false);
-
- //set all parameters to default
- std::map<std::string, const LLCDParam*> param_map;
-
- static const LLCDParam* params = NULL;
- static S32 param_count = 0;
-
- if (!params)
- {
- param_count = decomp->getParameters(&params);
- }
-
- for (S32 i = 0; i < param_count; ++i)
- {
- decomp->setParam(params[i].mName, params[i].mDefault.mIntOrEnumValue);
- }
-
- const S32 STAGE_DECOMPOSE = mStageID["Decompose"];
- const S32 STAGE_SIMPLIFY = mStageID["Simplify"];
- const S32 DECOMP_PREVIEW = 0;
- const S32 SIMPLIFY_RETAIN = 0;
-
- decomp->setParam("Decompose Quality", DECOMP_PREVIEW);
- decomp->setParam("Simplify Method", SIMPLIFY_RETAIN);
- decomp->setParam("Retain%", 0.f);
-
- LLCDResult ret = LLCD_OK;
- ret = decomp->executeStage(STAGE_DECOMPOSE);
-
- if (ret)
- {
- llwarns << "Could not execute decomposition stage when attempting to create single hull." << llendl;
- make_box(mCurRequest);
- }
- else
- {
- ret = decomp->executeStage(STAGE_SIMPLIFY);
-
- if (ret)
- {
- llwarns << "Could not execute simiplification stage when attempting to create single hull." << llendl;
- make_box(mCurRequest);
- }
- else
+
{
- S32 num_hulls =0;
- if (LLConvexDecomposition::getInstance() != NULL)
- {
- num_hulls = LLConvexDecomposition::getInstance()->getNumHullsFromStage(STAGE_SIMPLIFY);
- }
-
- mMutex->lock();
- mCurRequest->mHull.clear();
- mCurRequest->mHull.resize(num_hulls);
- mCurRequest->mHullMesh.clear();
- mMutex->unlock();
-
- for (S32 i = 0; i < num_hulls; ++i)
- {
- std::vector<LLVector3> p;
- LLCDHull hull;
- // if LLConvexDecomposition is a stub, num_hulls should have been set to 0 above, and we should not reach this code
- LLConvexDecomposition::getInstance()->getHullFromStage(STAGE_SIMPLIFY, i, &hull);
-
- const F32* v = hull.mVertexBase;
-
- for (S32 j = 0; j < hull.mNumVertices; ++j)
- {
- LLVector3 vert(v[0], v[1], v[2]);
- p.push_back(vert);
- v = (F32*) (((U8*) v) + hull.mVertexStrideBytes);
- }
-
- mMutex->lock();
- mCurRequest->mHull[i] = p;
- mMutex->unlock();
- }
+ LLMutexLock lock(mMutex);
+ mCurRequest->mHull[0] = p;
}
- }
-#endif
+ }
{
completeCurrent();
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 1dc4d796ab..ef5ef2ddc8 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -640,7 +640,7 @@ void LLOutfitsList::onOutfitsRemovalConfirmation(const LLSD& notification, const
if (mSelectedOutfitUUID.notNull())
{
- remove_category(&gInventory, mSelectedOutfitUUID);
+ gInventory.removeCategory(mSelectedOutfitUUID);
}
}
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index ca48e8561b..7a15d93181 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -289,12 +289,12 @@ void LLPanelGroupInvite::impl::callbackClickAdd(void* userdata)
//Soon the avatar picker will be embedded into this panel
//instead of being it's own separate floater. But that is next week.
//This will do for now. -jwolk May 10, 2006
- LLFloater* parentp;
-
- parentp = gFloaterView->getParentFloater(panelp);
- parentp->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(impl::callbackAddUsers, _1,
- panelp->mImplementation),
- TRUE));
+ LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
+ boost::bind(impl::callbackAddUsers, _1, panelp->mImplementation), TRUE);
+ if (picker)
+ {
+ gFloaterView->getParentFloater(panelp)->addDependentFloater(picker);
+ }
}
}
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index c7454e85a9..68a3b6d1cd 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -1149,7 +1149,7 @@ Rules:
- cut/rename/delete in any other accordions
- paste - only in Favorites, Landmarks accordions
3. For Folders we can: perform any action in Landmarks accordion, except Received folder
- 4. We can not paste folders from Clipboard (processed by LLFolderView::canPaste())
+ 4. We can paste folders from Clipboard (processed by LLFolderView::canPaste())
5. Check LLFolderView/Inventory Bridges rules
*/
bool LLLandmarksPanel::canItemBeModified(const std::string& command_name, LLFolderViewItem* item) const
@@ -1206,8 +1206,7 @@ bool LLLandmarksPanel::canItemBeModified(const std::string& command_name, LLFold
if ("cut" == command_name)
{
- // "Cut" disabled for folders. See EXT-8697.
- can_be_modified = root_folder->canCut() && listenerp->getInventoryType() != LLInventoryType::IT_CATEGORY;
+ can_be_modified = root_folder->canCut();
}
else if ("rename" == command_name)
{
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index c3c62920d3..c11597f532 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -375,7 +375,7 @@ void LLPanelMainInventory::onClearSearch()
if (mActivePanel)
{
mActivePanel->setFilterSubString(LLStringUtil::null);
- mActivePanel->setFilterTypes(0xffffffff);
+ mActivePanel->setFilterTypes(0xffffffffffffffffULL);
mActivePanel->setFilterLinks(LLInventoryFilter::FILTERLINK_INCLUDE_LINKS);
}
@@ -726,7 +726,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
void LLFloaterInventoryFinder::draw()
{
LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW);
- U32 filter = 0xffffffff;
+ U64 filter = 0xffffffffffffffffULL;
BOOL filtered_by_all_types = TRUE;
if (!getChild<LLUICtrl>("check_animation")->getValue())
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 98ea680504..1ca24f3031 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -124,7 +124,7 @@ public:
virtual void move(LLFolderViewEventListener* parent_listener);
virtual BOOL isItemCopyable() const;
virtual BOOL copyToClipboard() const;
- virtual void cutToClipboard();
+ virtual BOOL cutToClipboard() const;
virtual BOOL isClipboardPasteable() const;
virtual void pasteFromClipboard();
virtual void pasteLinkFromClipboard();
@@ -524,8 +524,9 @@ BOOL LLTaskInvFVBridge::copyToClipboard() const
return FALSE;
}
-void LLTaskInvFVBridge::cutToClipboard()
+BOOL LLTaskInvFVBridge::cutToClipboard() const
{
+ return FALSE;
}
BOOL LLTaskInvFVBridge::isClipboardPasteable() const
@@ -1568,7 +1569,7 @@ void LLPanelObjectInventory::reset()
scroll_p.rect(scroller_rect);
scroll_p.tab_stop(true);
scroll_p.follows.flags(FOLLOWS_ALL);
- mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroll_p);
+ mScroller = LLUICtrlFactory::create<LLFolderViewScrollContainer>(scroll_p);
addChild(mScroller);
mScroller->addChild(mFolders);
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 1f1cccad85..c63d89fc98 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -358,7 +358,7 @@ void LLTeleportHistoryPanel::ContextMenu::onInfo()
//static
void LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback(const std::string& slurl)
{
- gClipboard.copyFromString(utf8str_to_wstring(slurl));
+ LLClipboard::instance().copyToClipboard(utf8str_to_wstring(slurl),0,slurl.size());
}
void LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard()
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index eb4c7572d4..280cc11179 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -467,7 +467,7 @@ void LLPanelTopInfoBar::onContextMenuItemClicked(const LLSD::String& item)
LLAgentUI::buildSLURL(slurl, false);
LLUIString location_str(slurl.getSLURLString());
- gClipboard.copyFromString(location_str);
+ LLClipboard::instance().copyToClipboard(location_str,0,location_str.length());
}
}
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index e2801c09bd..3b9934d4be 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -302,6 +302,6 @@ void LLPanelWearing::copyToClipboard()
}
}
- gClipboard.copyFromString(utf8str_to_wstring(text));
+ LLClipboard::instance().copyToClipboard(utf8str_to_wstring(text),0,text.size());
}
// EOF
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 4974dde282..3a9360fd23 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -29,7 +29,6 @@
#include "llpreviewnotecard.h"
#include "llinventory.h"
-#include "llinventoryfunctions.h" // for change_item_parent()
#include "llagent.h"
#include "llassetuploadresponders.h"
@@ -494,7 +493,7 @@ void LLPreviewNotecard::deleteNotecard()
if (item != NULL)
{
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- change_item_parent(&gInventory, item, trash_id, FALSE);
+ gInventory.changeItemParent(item, trash_id, FALSE);
}
closeFloater();
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index c8b67cc9ec..4f9ab318a5 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -78,7 +78,6 @@ static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox";
//
// Helpers
//
-
class LLInboxAddedObserver : public LLInventoryCategoryAddedObserver
{
public:
@@ -130,6 +129,11 @@ LLSidepanelInventory::LLSidepanelInventory()
LLSidepanelInventory::~LLSidepanelInventory()
{
+ LLLayoutPanel* inbox_layout_panel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
+
+ // Save the InventoryMainPanelHeight in settings per account
+ gSavedPerAccountSettings.setS32("InventoryInboxHeight", inbox_layout_panel->getTargetDim());
+
if (mCategoriesObserver && gInventory.containsObserver(mCategoriesObserver))
{
gInventory.removeObserver(mCategoriesObserver);
@@ -226,7 +230,12 @@ BOOL LLSidepanelInventory::postBuild()
bool is_inbox_collapsed = !inbox_button->getToggleState();
// Restore the collapsed inbox panel state
- inv_stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME), is_inbox_collapsed);
+ LLLayoutPanel* inbox_panel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
+ inv_stack->collapsePanel(inbox_panel, is_inbox_collapsed);
+ if (!is_inbox_collapsed)
+ {
+ inbox_panel->setTargetDim(gSavedPerAccountSettings.getS32("InventoryInboxHeight"));
+ }
// Set the inbox visible based on debug settings (final setting comes from http request below)
enableInbox(gSavedSettings.getBOOL("InventoryDisplayInbox"));
@@ -370,10 +379,19 @@ void LLSidepanelInventory::onToggleInboxBtn()
// Expand/collapse the indicated panel
inv_stack->collapsePanel(inboxPanel, !inbox_expanded);
- if (inbox_expanded && inboxPanel->isInVisibleChain())
+ if (inbox_expanded)
{
- gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected());
+ inboxPanel->setTargetDim(gSavedPerAccountSettings.getS32("InventoryInboxHeight"));
+ if (inboxPanel->isInVisibleChain())
+ {
+ gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected());
+ }
}
+ else
+ {
+ gSavedPerAccountSettings.setS32("InventoryInboxHeight", inboxPanel->getTargetDim());
+ }
+
}
void LLSidepanelInventory::onOpen(const LLSD& key)
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 19a944e88e..ed9faa0706 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -67,6 +67,9 @@
#include "lluictrlfactory.h"
#include "lltrans.h"
+#include "llradiogroup.h"
+#include "llfloaterreg.h"
+#include "lllocalbitmaps.h"
static const S32 HPAD = 4;
static const S32 VPAD = 4;
@@ -78,6 +81,8 @@ static const F32 CONTEXT_CONE_IN_ALPHA = 0.0f;
static const F32 CONTEXT_CONE_OUT_ALPHA = 1.f;
static const F32 CONTEXT_FADE_TIME = 0.08f;
+static const S32 LOCAL_TRACKING_ID_COLUMN = 1;
+
//static const char CURRENT_IMAGE_NAME[] = "Current Texture";
//static const char WHITE_IMAGE_NAME[] = "Blank Texture";
//static const char NO_IMAGE_NAME[] = "None";
@@ -142,6 +147,12 @@ public:
static void onApplyImmediateCheck(LLUICtrl* ctrl, void* userdata);
void onTextureSelect( const LLTextureEntry& te );
+ static void onModeSelect(LLUICtrl* ctrl, void *userdata);
+ static void onBtnAdd(void* userdata);
+ static void onBtnRemove(void* userdata);
+ static void onBtnUpload(void* userdata);
+ static void onLocalScrollCommit(LLUICtrl* ctrl, void* userdata);
+
protected:
LLPointer<LLViewerTexture> mTexturep;
LLTextureCtrl* mOwner;
@@ -169,8 +180,10 @@ protected:
BOOL mNoCopyTextureSelected;
F32 mContextConeOpacity;
LLSaveFolderState mSavedFolderState;
-
BOOL mSelectedItemPinned;
+
+ LLRadioGroup* mModeSelector;
+ LLScrollListCtrl* mLocalScrollCtrl;
};
LLFloaterTexturePicker::LLFloaterTexturePicker(
@@ -437,6 +450,17 @@ BOOL LLFloaterTexturePicker::postBuild()
mInventoryPanel->setSelection(findItemID(mImageAssetID, FALSE), TAKE_FOCUS_NO);
}
+ mModeSelector = getChild<LLRadioGroup>("mode_selection");
+ mModeSelector->setCommitCallback(onModeSelect, this);
+ mModeSelector->setSelectedIndex(0, 0);
+
+ childSetAction("l_add_btn", LLFloaterTexturePicker::onBtnAdd, this);
+ childSetAction("l_rem_btn", LLFloaterTexturePicker::onBtnRemove, this);
+ childSetAction("l_upl_btn", LLFloaterTexturePicker::onBtnUpload, this);
+
+ mLocalScrollCtrl = getChild<LLScrollListCtrl>("l_name_list");
+ mLocalScrollCtrl->setCommitCallback(onLocalScrollCommit, this);
+ LLLocalBitmapMgr::feedScrollList(mLocalScrollCtrl);
mNoCopyTextureSelected = FALSE;
@@ -464,7 +488,6 @@ BOOL LLFloaterTexturePicker::postBuild()
// virtual
void LLFloaterTexturePicker::draw()
{
- S32 floater_header_size = getHeaderHeight();
if (mOwner)
{
// draw cone of context pointing back to texture swatch
@@ -554,10 +577,7 @@ void LLFloaterTexturePicker::draw()
}
// Border
- LLRect border( BORDER_PAD,
- getRect().getHeight() - floater_header_size - BORDER_PAD,
- ((getMinWidth() / 2) - TEXTURE_INVENTORY_PADDING - HPAD) - BORDER_PAD,
- BORDER_PAD + FOOTER_HEIGHT + (getRect().getHeight() - getMinHeight()));
+ LLRect border = getChildView("preview_widget")->getRect();
gl_rect_2d( border, LLColor4::black, FALSE );
@@ -748,7 +768,15 @@ void LLFloaterTexturePicker::onBtnSelect(void* userdata)
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
if (self->mOwner)
{
- self->mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_SELECT);
+ LLUUID local_id = LLUUID::null;
+
+ if (self->mLocalScrollCtrl->getVisible() && !self->mLocalScrollCtrl->getAllSelected().empty())
+ {
+ LLUUID temp_id = self->mLocalScrollCtrl->getFirstSelected()->getColumn(LOCAL_TRACKING_ID_COLUMN)->getValue().asUUID();
+ local_id = LLLocalBitmapMgr::getWorldID(temp_id);
+ }
+
+ self->mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_SELECT, local_id);
}
self->closeFloater();
}
@@ -792,6 +820,112 @@ void LLFloaterTexturePicker::onSelectionChange(const std::deque<LLFolderViewItem
}
// static
+void LLFloaterTexturePicker::onModeSelect(LLUICtrl* ctrl, void *userdata)
+{
+ LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
+ bool mode = (self->mModeSelector->getSelectedIndex() == 0);
+
+ self->getChild<LLButton>("Default")->setVisible(mode);
+ self->getChild<LLButton>("Blank")->setVisible(mode);
+ self->getChild<LLButton>("None")->setVisible(mode);
+ self->getChild<LLButton>("Pipette")->setVisible(mode);
+ self->getChild<LLFilterEditor>("inventory search editor")->setVisible(mode);
+ self->getChild<LLInventoryPanel>("inventory panel")->setVisible(mode);
+
+ /*self->getChild<LLCheckBox>("show_folders_check")->setVisible(mode);
+ no idea under which conditions the above is even shown, needs testing. */
+
+ self->getChild<LLButton>("l_add_btn")->setVisible(!mode);
+ self->getChild<LLButton>("l_rem_btn")->setVisible(!mode);
+ self->getChild<LLButton>("l_upl_btn")->setVisible(!mode);
+ self->getChild<LLScrollListCtrl>("l_name_list")->setVisible(!mode);
+}
+
+// static
+void LLFloaterTexturePicker::onBtnAdd(void* userdata)
+{
+ if (LLLocalBitmapMgr::addUnit() == true)
+ {
+ LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
+ LLLocalBitmapMgr::feedScrollList(self->mLocalScrollCtrl);
+ }
+}
+
+// static
+void LLFloaterTexturePicker::onBtnRemove(void* userdata)
+{
+ LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
+ std::vector<LLScrollListItem*> selected_items = self->mLocalScrollCtrl->getAllSelected();
+
+ if (!selected_items.empty())
+ {
+ for(std::vector<LLScrollListItem*>::iterator iter = selected_items.begin();
+ iter != selected_items.end(); iter++)
+ {
+ LLScrollListItem* list_item = *iter;
+ if (list_item)
+ {
+ LLUUID tracking_id = list_item->getColumn(LOCAL_TRACKING_ID_COLUMN)->getValue().asUUID();
+ LLLocalBitmapMgr::delUnit(tracking_id);
+ }
+ }
+
+ self->getChild<LLButton>("l_rem_btn")->setEnabled(false);
+ self->getChild<LLButton>("l_upl_btn")->setEnabled(false);
+ LLLocalBitmapMgr::feedScrollList(self->mLocalScrollCtrl);
+ }
+
+}
+
+// static
+void LLFloaterTexturePicker::onBtnUpload(void* userdata)
+{
+ LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
+ std::vector<LLScrollListItem*> selected_items = self->mLocalScrollCtrl->getAllSelected();
+
+ if (selected_items.empty())
+ {
+ return;
+ }
+
+ /* currently only allows uploading one by one, picks the first item from the selection list. (not the vector!)
+ in the future, it might be a good idea to check the vector size and if more than one units is selected - opt for multi-image upload. */
+
+ LLUUID tracking_id = (LLUUID)self->mLocalScrollCtrl->getSelectedItemLabel(LOCAL_TRACKING_ID_COLUMN);
+ std::string filename = LLLocalBitmapMgr::getFilename(tracking_id);
+
+ if (!filename.empty())
+ {
+ LLFloaterReg::showInstance("upload_image", LLSD(filename));
+ }
+
+}
+
+//static
+void LLFloaterTexturePicker::onLocalScrollCommit(LLUICtrl* ctrl, void* userdata)
+{
+ LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
+ std::vector<LLScrollListItem*> selected_items = self->mLocalScrollCtrl->getAllSelected();
+ bool has_selection = !selected_items.empty();
+
+ self->getChild<LLButton>("l_rem_btn")->setEnabled(has_selection);
+ self->getChild<LLButton>("l_upl_btn")->setEnabled(has_selection && (selected_items.size() < 2));
+ /* since multiple-localbitmap upload is not implemented, upl button gets disabled if more than one is selected. */
+
+ if (has_selection)
+ {
+ LLUUID tracking_id = (LLUUID)self->mLocalScrollCtrl->getSelectedItemLabel(LOCAL_TRACKING_ID_COLUMN);
+ LLUUID inworld_id = LLLocalBitmapMgr::getWorldID(tracking_id);
+ self->mOwner->setImageAssetID(inworld_id);
+
+ if (self->childGetValue("apply_immediate_check").asBoolean())
+ {
+ self->mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_CHANGE, inworld_id);
+ }
+ }
+}
+
+// static
void LLFloaterTexturePicker::onShowFolders(LLUICtrl* ctrl, void *user_data)
{
LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl;
@@ -1133,7 +1267,7 @@ void LLTextureCtrl::onFloaterClose()
mFloaterHandle.markDead();
}
-void LLTextureCtrl::onFloaterCommit(ETexturePickOp op)
+void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLUUID id)
{
LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get();
@@ -1146,14 +1280,24 @@ void LLTextureCtrl::onFloaterCommit(ETexturePickOp op)
// (i.e. op == TEXTURE_SELECT) or texture changes via DnD.
else if (mCommitOnSelection || op == TEXTURE_SELECT)
mViewModel->setDirty(); // *TODO: shouldn't we be using setValue() here?
-
- if( floaterp->isDirty() )
+
+ if(floaterp->isDirty() || id.notNull()) // mModelView->setDirty does not work.
{
setTentative( FALSE );
- mImageItemID = floaterp->findItemID(floaterp->getAssetID(), FALSE);
- lldebugs << "mImageItemID: " << mImageItemID << llendl;
- mImageAssetID = floaterp->getAssetID();
- lldebugs << "mImageAssetID: " << mImageAssetID << llendl;
+
+ if (id.notNull())
+ {
+ mImageItemID = id;
+ mImageAssetID = id;
+ }
+ else
+ {
+ mImageItemID = floaterp->findItemID(floaterp->getAssetID(), FALSE);
+ lldebugs << "mImageItemID: " << mImageItemID << llendl;
+ mImageAssetID = floaterp->getAssetID();
+ lldebugs << "mImageAssetID: " << mImageAssetID << llendl;
+ }
+
if (op == TEXTURE_SELECT && mOnSelectCallback)
{
mOnSelectCallback( this, LLSD() );
diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h
index b1312d641f..3abe84dcc3 100644
--- a/indra/newview/lltexturectrl.h
+++ b/indra/newview/lltexturectrl.h
@@ -157,7 +157,7 @@ public:
void closeDependentFloater();
void onFloaterClose();
- void onFloaterCommit(ETexturePickOp op);
+ void onFloaterCommit(ETexturePickOp op, LLUUID id = LLUUID::null);
// This call is returned when a drag is detected. Your callback
// should return TRUE if the drag is acceptable.
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index de305bf3d9..a8060649ba 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -243,8 +243,8 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
mBtnCallbackData.push_back(userdata);
LLButton::Params p;
- bool is_ignore_btn = form_element["index"].asInteger() == -1;
- const LLFontGL* font = is_ignore_btn ? sFontSmall: sFont; // for ignore button in script dialog
+ bool make_small_btn = form_element["index"].asInteger() == -1 || form_element["index"].asInteger() == -2;
+ const LLFontGL* font = make_small_btn ? sFontSmall: sFont; // for block and ignore buttons in script dialog
p.name(form_element["name"].asString());
p.label(form_element["text"].asString());
p.font(font);
@@ -264,7 +264,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
p.rect.width = 1;
p.auto_resize = true;
}
- else if (mIsScriptDialog && is_ignore_btn)
+ else if (mIsScriptDialog && make_small_btn)
{
// this is ignore button, make it smaller
p.rect.height = BTN_HEIGHT_SMALL;
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index eccb2cf2f1..81ad96f39e 100644
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -75,6 +75,7 @@ LLToolBarView::LLToolBarView(const LLToolBarView::Params& p)
mDragStarted(false),
mShowToolbars(true),
mDragToolbarButton(NULL),
+ mDragItem(NULL),
mToolbarsLoaded(false)
{
for (S32 i = 0; i < TOOLBAR_COUNT; i++)
@@ -579,7 +580,6 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp
uuid_vec_t cargo_ids;
types.push_back(DAD_WIDGET);
cargo_ids.push_back(uuid);
- gClipboard.setSourceObject(uuid,LLAssetType::AT_WIDGET);
LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_VIEWER;
LLUUID srcID;
LLToolDragAndDrop::getInstance()->beginMultiDrag(types, cargo_ids, src, srcID);
@@ -662,6 +662,18 @@ void LLToolBarView::resetDragTool(LLToolBarButton* toolbarButton)
gToolBarView->mDragToolbarButton = toolbarButton;
}
+// Provide a handle on a free standing inventory item containing references to the tool.
+// This might be used by Drag and Drop to move around references to tool items.
+LLInventoryObject* LLToolBarView::getDragItem()
+{
+ if (mDragToolbarButton)
+ {
+ LLUUID item_uuid = mDragToolbarButton->getCommandId().uuid();
+ mDragItem = new LLInventoryObject (item_uuid, LLUUID::null, LLAssetType::AT_WIDGET, "");
+ }
+ return mDragItem;
+}
+
void LLToolBarView::setToolBarsVisible(bool visible)
{
mShowToolbars = visible;
diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h
index be66bcae36..9c4194ebed 100644
--- a/indra/newview/lltoolbarview.h
+++ b/indra/newview/lltoolbarview.h
@@ -31,6 +31,7 @@
#include "lluictrl.h"
#include "lltoolbar.h"
#include "llcommandmanager.h"
+#include "llinventory.h"
class LLUICtrlFactory;
@@ -106,6 +107,7 @@ public:
static BOOL handleDragTool(S32 x, S32 y, const LLUUID& uuid, LLAssetType::EType type);
static BOOL handleDropTool(void* cargo_data, S32 x, S32 y, LLToolBar* toolbar);
static void resetDragTool(LLToolBarButton* toolbarButton);
+ LLInventoryObject* getDragItem();
bool isModified() const;
@@ -129,6 +131,7 @@ private:
bool mDragStarted;
LLToolBarButton* mDragToolbarButton;
+ LLInventoryObject* mDragItem;
bool mShowToolbars;
};
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index c7ab934f9e..4f4eef0f3d 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -48,6 +48,7 @@
#include "llpreviewnotecard.h"
#include "llrootview.h"
#include "llselectmgr.h"
+#include "lltoolbarview.h"
#include "lltoolmgr.h"
#include "lltooltip.h"
#include "lltrans.h"
@@ -2528,7 +2529,7 @@ LLInventoryObject* LLToolDragAndDrop::locateInventory(
}
else if(mSource == SOURCE_VIEWER)
{
- item = (LLViewerInventoryItem*)gClipboard.getSourceObject();
+ item = (LLViewerInventoryItem*)gToolBarView->getDragItem();
}
if(item) return item;
if(cat) return cat;
diff --git a/indra/newview/llurllineeditorctrl.cpp b/indra/newview/llurllineeditorctrl.cpp
index 56b5bbf942..cad5769042 100644
--- a/indra/newview/llurllineeditorctrl.cpp
+++ b/indra/newview/llurllineeditorctrl.cpp
@@ -89,5 +89,5 @@ void LLURLLineEditor::copyEscapedURLToClipboard()
else // human-readable location
text_to_copy = utf8str_to_wstring(unescaped_text);
- gClipboard.copyFromString( text_to_copy );
+ LLClipboard::instance().copyToClipboard(text_to_copy, 0, text_to_copy.size());
}
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 093b84413a..ab45aae5cc 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -181,6 +181,16 @@ static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
return true;
}
+static bool handleLUTBufferChanged(const LLSD& newvalue)
+{
+ if (gPipeline.isInit())
+ {
+ gPipeline.releaseLUTBuffers();
+ gPipeline.createLUTBuffers();
+ }
+ return true;
+}
+
static bool handleAnisotropicChanged(const LLSD& newvalue)
{
LLImageGL::sGlobalUseAnisotropic = newvalue.asBoolean();
@@ -569,9 +579,9 @@ void settings_setup_listeners()
gSavedSettings.getControl("RenderUIBuffer")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
gSavedSettings.getControl("RenderDepthOfField")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
- gSavedSettings.getControl("RenderSpecularResX")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
- gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
- gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
+ gSavedSettings.getControl("RenderSpecularResX")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
+ gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
+ gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
gSavedSettings.getControl("RenderAnisotropic")->getSignal()->connect(boost::bind(&handleAnisotropicChanged, _2));
gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 12aed8f448..7481414b5c 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -25,6 +25,11 @@
*/
#include "llviewerprecompiledheaders.h"
+
+#ifdef INCLUDE_VLD
+#include "vld.h"
+#endif
+
#include "llviewermenu.h"
// linden library includes
@@ -214,7 +219,7 @@ void near_sit_down_point(BOOL success, void *);
void velocity_interpolate( void* );
-
+void handle_visual_leak_detector_toggle(void*);
void handle_rebake_textures(void*);
BOOL check_admin_override(void*);
void handle_admin_override_toggle(void*);
@@ -2018,6 +2023,15 @@ class LLAdvancedToggleViewAdminOptions : public view_listener_t
}
};
+class LLAdvancedToggleVisualLeakDetector : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ handle_visual_leak_detector_toggle(NULL);
+ return true;
+ }
+};
+
class LLAdvancedCheckViewAdminOptions : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -3444,6 +3458,35 @@ void handle_admin_override_toggle(void*)
show_debug_menus();
}
+void handle_visual_leak_detector_toggle(void*)
+{
+ static bool vld_enabled = false;
+
+ if ( vld_enabled )
+ {
+#ifdef INCLUDE_VLD
+ // only works for debug builds (hard coded into vld.h)
+#ifdef _DEBUG
+ // start with Visual Leak Detector turned off
+ VLDDisable();
+#endif // _DEBUG
+#endif // INCLUDE_VLD
+ vld_enabled = false;
+ }
+ else
+ {
+#ifdef INCLUDE_VLD
+ // only works for debug builds (hard coded into vld.h)
+ #ifdef _DEBUG
+ // start with Visual Leak Detector turned off
+ VLDEnable();
+ #endif // _DEBUG
+#endif // INCLUDE_VLD
+
+ vld_enabled = true;
+ };
+}
+
void handle_god_mode(void*)
{
gAgent.requestEnterGodMode();
@@ -6513,31 +6556,37 @@ class LLToolsSelectedScriptAction : public view_listener_t
std::string action = userdata.asString();
bool mono = false;
std::string msg, name;
+ std::string title;
if (action == "compile mono")
{
name = "compile_queue";
mono = true;
msg = "Recompile";
+ title = LLTrans::getString("CompileQueueTitle");
}
if (action == "compile lsl")
{
name = "compile_queue";
msg = "Recompile";
+ title = LLTrans::getString("CompileQueueTitle");
}
else if (action == "reset")
{
name = "reset_queue";
msg = "Reset";
+ title = LLTrans::getString("ResetQueueTitle");
}
else if (action == "start")
{
name = "start_queue";
msg = "SetRunning";
+ title = LLTrans::getString("RunQueueTitle");
}
else if (action == "stop")
{
name = "stop_queue";
msg = "SetRunningNot";
+ title = LLTrans::getString("NotRunQueueTitle");
}
LLUUID id; id.generate();
@@ -6546,6 +6595,7 @@ class LLToolsSelectedScriptAction : public view_listener_t
{
queue->setMono(mono);
queue_actions(queue, msg);
+ queue->setTitle(title);
}
else
{
@@ -8237,6 +8287,8 @@ void initialize_menus()
view_listener_t::addMenu(new LLAdvancedEnableViewAdminOptions(), "Advanced.EnableViewAdminOptions");
view_listener_t::addMenu(new LLAdvancedToggleViewAdminOptions(), "Advanced.ToggleViewAdminOptions");
view_listener_t::addMenu(new LLAdvancedCheckViewAdminOptions(), "Advanced.CheckViewAdminOptions");
+ view_listener_t::addMenu(new LLAdvancedToggleVisualLeakDetector(), "Advanced.ToggleVisualLeakDetector");
+
view_listener_t::addMenu(new LLAdvancedRequestAdminStatus(), "Advanced.RequestAdminStatus");
view_listener_t::addMenu(new LLAdvancedLeaveAdminStatus(), "Advanced.LeaveAdminStatus");
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index dc55247df2..dc2ea4bd1f 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -975,11 +975,12 @@ void upload_done_callback(
args["REASON"] = std::string(LLAssetStorage::getErrorString(result));
LLNotificationsUtil::add("CannotUploadReason", args);
}
+
+ delete data;
+ data = NULL;
}
LLUploadDialog::modalUploadFinished();
- delete data;
- data = NULL;
// *NOTE: This is a pretty big hack. What this does is check the
// file picker if there are any more pending uploads. If so,
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 2917fee62e..854e2bea52 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -156,7 +156,8 @@ const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] =
"AddAndRemoveJoints",
"ChangePermissions",
"TrackYourCamera",
- "ControlYourCamera"
+ "ControlYourCamera",
+ "TeleportYourAgent"
};
const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
@@ -171,7 +172,8 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
FALSE, // AddAndRemoveJoints
FALSE, // ChangePermissions
FALSE, // TrackYourCamera,
- FALSE // ControlYourCamera
+ FALSE, // ControlYourCamera
+ FALSE // TeleportYourAgent
};
bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
@@ -1065,7 +1067,9 @@ public:
// If we now try to remove the inventory item, it will cause a nested
// notifyObservers() call, which won't work.
// So defer moving the item to trash until viewer gets idle (in a moment).
- LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeItem, &gInventory, mObjectID));
+ // Use removeObject() rather than removeItem() because at this level,
+ // the object could be either an item or a folder.
+ LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeObject, &gInventory, mObjectID));
gInventory.removeObserver(this);
delete this;
}
@@ -6845,12 +6849,14 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
LLPanelEstateCovenant::updateEstateName(estate_name);
LLPanelLandCovenant::updateEstateName(estate_name);
+ LLPanelEstateInfo::updateEstateName(estate_name);
LLFloaterBuyLand::updateEstateName(estate_name);
std::string owner_name =
LLSLURL("agent", estate_owner_id, "inspect").getSLURLString();
LLPanelEstateCovenant::updateEstateOwnerName(owner_name);
LLPanelLandCovenant::updateEstateOwnerName(owner_name);
+ LLPanelEstateInfo::updateEstateOwnerName(owner_name);
LLFloaterBuyLand::updateEstateOwnerName(owner_name);
LLPanelPlaceProfile* panel = LLFloaterSidePanelContainer::getPanel<LLPanelPlaceProfile>("places", "panel_place_profile");
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index e590f29a9a..cd300accb7 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -877,6 +877,13 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
LLMemType mt(LLMemType::MTYPE_OBJECT);
U32 retval = 0x0;
+ // If region is removed from the list it is also deleted.
+ if (!LLWorld::instance().isRegionListed(mRegionp))
+ {
+ llwarns << "Updating object in an invalid region" << llendl;
+ return retval;
+ }
+
// Coordinates of objects on simulators are region-local.
U64 region_handle;
mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle);
@@ -3478,7 +3485,8 @@ LLNameValue *LLViewerObject::getNVPair(const std::string& name) const
void LLViewerObject::updatePositionCaches() const
{
- if(mRegionp)
+ // If region is removed from the list it is also deleted.
+ if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
{
if (!isRoot())
{
@@ -3495,7 +3503,8 @@ void LLViewerObject::updatePositionCaches() const
const LLVector3d LLViewerObject::getPositionGlobal() const
{
- if(mRegionp)
+ // If region is removed from the list it is also deleted.
+ if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
{
LLVector3d position_global = mRegionp->getPosGlobalFromRegion(getPositionRegion());
@@ -3514,7 +3523,8 @@ const LLVector3d LLViewerObject::getPositionGlobal() const
const LLVector3 &LLViewerObject::getPositionAgent() const
{
- if (mRegionp)
+ // If region is removed from the list it is also deleted.
+ if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
{
if (mDrawable.notNull() && (!mDrawable->isRoot() && getParent()))
{
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index 6db2138688..10c61c01d5 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -363,6 +363,12 @@ void LLViewerShaderMgr::setShaders()
//NEVER use more than 16 texture channels (work around for prevalent driver bug)
LLGLSLShader::sIndexedTextureChannels = llmin(LLGLSLShader::sIndexedTextureChannels, 16);
+ if (gGLManager.mGLSLVersionMajor < 1 ||
+ (gGLManager.mGLSLVersionMajor == 1 && gGLManager.mGLSLVersionMinor <= 20))
+ { //NEVER use indexed texture rendering when GLSL version is 1.20 or earlier
+ LLGLSLShader::sIndexedTextureChannels = 1;
+ }
+
reentrance = true;
if (LLRender::sGLCoreProfile)
@@ -407,6 +413,8 @@ void LLViewerShaderMgr::setShaders()
// Shaders
LL_INFOS("ShaderLoading") << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << LL_ENDL;
+ LL_INFOS("ShaderLoading") << llformat("Using GLSL %d.%d", gGLManager.mGLSLVersionMajor, gGLManager.mGLSLVersionMinor) << llendl;
+
for (S32 i = 0; i < SHADER_COUNT; i++)
{
mVertexShaderLevel[i] = 0;
@@ -416,6 +424,7 @@ void LLViewerShaderMgr::setShaders()
LLGLSLShader::sNoFixedFunction = false;
LLVertexBuffer::unbind();
if (LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")
+ && (gGLManager.mGLSLVersionMajor > 1 || gGLManager.mGLSLVersionMinor >= 10)
&& gSavedSettings.getBOOL("VertexShaderEnable"))
{
//using shaders, disable fixed function
@@ -741,7 +750,10 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
shaders.push_back( make_pair( "windlight/atmosphericsV.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) );
shaders.push_back( make_pair( "avatar/avatarSkinV.glsl", 1 ) );
shaders.push_back( make_pair( "avatar/objectSkinV.glsl", 1 ) );
- shaders.push_back( make_pair( "objects/indexedTextureV.glsl", 1 ) );
+ if (gGLManager.mGLSLVersionMajor >= 2 || gGLManager.mGLSLVersionMinor >= 30)
+ {
+ shaders.push_back( make_pair( "objects/indexedTextureV.glsl", 1 ) );
+ }
shaders.push_back( make_pair( "objects/nonindexedTextureV.glsl", 1 ) );
// We no longer have to bind the shaders to global glhandles, they are automatically added to a map now.
@@ -758,11 +770,11 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
// (in order of shader function call depth for reference purposes, deepest level first)
shaders.clear();
- S32 ch = llmax(LLGLSLShader::sIndexedTextureChannels-1, 1);
+ S32 ch = 1;
- if (gGLManager.mGLVersion < 3.1f)
- { //force to 1 texture index channel for old drivers
- ch = 1;
+ if (gGLManager.mGLSLVersionMajor > 1 || gGLManager.mGLSLVersionMinor >= 30)
+ { //use indexed texture rendering for GLSL >= 1.30
+ ch = llmax(LLGLSLShader::sIndexedTextureChannels-1, 1);
}
std::vector<S32> index_channels;
@@ -1206,6 +1218,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
std::string fragment;
+ std::string vertex = "deferred/sunLightV.glsl";
if (gSavedSettings.getBOOL("RenderDeferredSSAO"))
{
@@ -1214,11 +1227,15 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
else
{
fragment = "deferred/sunLightF.glsl";
+ if (mVertexShaderLevel[SHADER_DEFERRED] == 1)
+ { //no shadows, no SSAO, no frag coord
+ vertex = "deferred/sunLightNoFragCoordV.glsl";
+ }
}
gDeferredSunProgram.mName = "Deferred Sun Shader";
gDeferredSunProgram.mShaderFiles.clear();
- gDeferredSunProgram.mShaderFiles.push_back(make_pair("deferred/sunLightV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredSunProgram.mShaderFiles.push_back(make_pair(vertex, GL_VERTEX_SHADER_ARB));
gDeferredSunProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB));
gDeferredSunProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
success = gDeferredSunProgram.createShader(NULL, NULL);
@@ -1416,7 +1433,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredAvatarAlphaProgram.mFeatures.isAlphaLighting = true;
gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;
gDeferredAvatarAlphaProgram.mShaderFiles.clear();
- gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaNoColorV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedNoColorF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredAvatarAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
@@ -1440,7 +1457,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
gDeferredPostProgram.mName = "Deferred Post Shader";
gDeferredPostProgram.mShaderFiles.clear();
- gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoTCV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredPostProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
success = gDeferredPostProgram.createShader(NULL, NULL);
@@ -1450,7 +1467,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
gDeferredCoFProgram.mName = "Deferred CoF Shader";
gDeferredCoFProgram.mShaderFiles.clear();
- gDeferredCoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredCoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoTCV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredCoFProgram.mShaderFiles.push_back(make_pair("deferred/cofF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredCoFProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
success = gDeferredCoFProgram.createShader(NULL, NULL);
@@ -1460,7 +1477,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
gDeferredDoFCombineProgram.mName = "Deferred DoFCombine Shader";
gDeferredDoFCombineProgram.mShaderFiles.clear();
- gDeferredDoFCombineProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredDoFCombineProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoTCV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredDoFCombineProgram.mShaderFiles.push_back(make_pair("deferred/dofCombineF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredDoFCombineProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
success = gDeferredDoFCombineProgram.createShader(NULL, NULL);
@@ -1470,7 +1487,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
gDeferredPostNoDoFProgram.mName = "Deferred Post Shader";
gDeferredPostNoDoFProgram.mShaderFiles.clear();
- gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoTCV.glsl", GL_VERTEX_SHADER_ARB));
gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoDoFF.glsl", GL_FRAGMENT_SHADER_ARB));
gDeferredPostNoDoFProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
success = gDeferredPostNoDoFProgram.createShader(NULL, NULL);
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index e0a362596d..b386c73d2a 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -65,6 +65,7 @@ class LLViewerTextureList
friend class LLTextureView;
friend class LLViewerTextureManager;
+ friend class LLLocalBitmap;
public:
static BOOL createUploadFile(const std::string& filename, const std::string& out_filename, const U8 codec);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 589714c25c..ecd76f5495 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -610,7 +610,7 @@ public:
addText(xpos, ypos, llformat("%d/%d Mesh HTTP Requests/Retries", LLMeshRepository::sHTTPRequestCount,
LLMeshRepository::sHTTPRetryCount));
ypos += y_inc;
-
+
addText(xpos, ypos, llformat("%d/%d Mesh LOD Pending/Processing", LLMeshRepository::sLODPending, LLMeshRepository::sLODProcessing));
ypos += y_inc;
@@ -1969,12 +1969,12 @@ void LLViewerWindow::shutdownViews()
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())
@@ -1982,17 +1982,17 @@ void LLViewerWindow::shutdownViews()
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;
gIMMgr = NULL;
@@ -2161,13 +2161,19 @@ void LLViewerWindow::reshape(S32 width, S32 height)
// tell the OS specific window code about min window size
mWindow->setMinSize(min_window_width, min_window_height);
+ LLCoordScreen window_rect;
+ if (mWindow->getSize(&window_rect))
+ {
// Only save size if not maximized
- gSavedSettings.setU32("WindowWidth", mWindowRectRaw.getWidth());
- gSavedSettings.setU32("WindowHeight", mWindowRectRaw.getHeight());
+ gSavedSettings.setU32("WindowWidth", window_rect.mX);
+ gSavedSettings.setU32("WindowHeight", window_rect.mY);
+ }
}
LLViewerStats::getInstance()->setStat(LLViewerStats::ST_WINDOW_WIDTH, (F64)width);
LLViewerStats::getInstance()->setStat(LLViewerStats::ST_WINDOW_HEIGHT, (F64)height);
+
+ LLLayoutStack::updateClass();
}
}
@@ -4100,7 +4106,7 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
gViewerWindow->getWindow()->getSize(&size);
if ( size != new_size )
{
- gViewerWindow->getWindow()->setSize(new_size.convert());
+ gViewerWindow->getWindow()->setSize(new_size);
}
}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index bc7f5a9744..a7a4281860 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -149,10 +149,6 @@ const F32 PELVIS_LAG_WALKING = 0.4f; // ...while walking
const F32 PELVIS_LAG_MOUSELOOK = 0.15f;
const F32 MOUSELOOK_PELVIS_FOLLOW_FACTOR = 0.5f;
const F32 PELVIS_LAG_WHEN_FOLLOW_CAM_IS_ON = 0.0001f; // not zero! - something gets divided by this!
-
-const F32 PELVIS_ROT_THRESHOLD_SLOW = 60.0f; // amount of deviation allowed between
-const F32 PELVIS_ROT_THRESHOLD_FAST = 2.0f; // the pelvis and the view direction
- // when moving fast & slow
const F32 TORSO_NOISE_AMOUNT = 1.0f; // Amount of deviation from up-axis, in degrees
const F32 TORSO_NOISE_SPEED = 0.2f; // Time scale factor on torso noise.
@@ -3365,7 +3361,7 @@ void LLVOAvatar::slamPosition()
mRoot.updateWorldMatrixChildren();
}
-bool LLVOAvatar::isVisuallyMuted()
+bool LLVOAvatar::isVisuallyMuted() const
{
static LLCachedControl<U32> max_attachment_bytes(gSavedSettings, "RenderAutoMuteByteLimit");
static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit");
@@ -3434,7 +3430,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
// the rest should only be done occasionally for far away avatars
//--------------------------------------------------------------------
- if (visible && !isSelf() && !mIsDummy && sUseImpostors && !mNeedsAnimUpdate && !sFreezeCounter)
+ if (visible && (!isSelf() || isVisuallyMuted()) && !mIsDummy && sUseImpostors && !mNeedsAnimUpdate && !sFreezeCounter)
{
const LLVector4a* ext = mDrawable->getSpatialExtents();
LLVector4a size;
@@ -3474,6 +3470,11 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE;
}
+ else
+ {
+ mUpdatePeriod = 1;
+ }
+
// don't early out for your own avatar, as we rely on your animations playing reliably
// for example, the "turn around" animation when entering customize avatar needs to trigger
@@ -3652,7 +3653,11 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
BOOL self_in_mouselook = isSelf() && gAgentCamera.cameraMouselook();
LLVector3 pelvisDir( mRoot.getWorldMatrix().getFwdRow4().mV );
- F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, PELVIS_ROT_THRESHOLD_SLOW, PELVIS_ROT_THRESHOLD_FAST);
+
+ static LLCachedControl<F32> s_pelvis_rot_threshold_slow(gSavedSettings, "AvatarRotateThresholdSlow");
+ static LLCachedControl<F32> s_pelvis_rot_threshold_fast(gSavedSettings, "AvatarRotateThresholdFast");
+
+ F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, s_pelvis_rot_threshold_slow, s_pelvis_rot_threshold_fast);
if (self_in_mouselook)
{
@@ -5029,7 +5034,7 @@ void LLVOAvatar::addDebugText(const std::string& text)
//-----------------------------------------------------------------------------
// getID()
//-----------------------------------------------------------------------------
-const LLUUID& LLVOAvatar::getID()
+const LLUUID& LLVOAvatar::getID() const
{
return mID;
}
@@ -7532,12 +7537,16 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
void LLVOAvatar::dumpArchetypeXML( void* )
{
LLAPRFile outfile;
- outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,"new archetype.xml"), LL_APR_WB );
- apr_file_t* file = outfile.getFileHandle() ;
+ outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"new archetype.xml"), LL_APR_WB );
+ apr_file_t* file = outfile.getFileHandle();
if (!file)
{
return;
}
+ else
+ {
+ llinfos << "xmlfile write handle obtained : " << gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"new archetype.xml") << llendl;
+ }
apr_file_printf( file, "<?xml version=\"1.0\" encoding=\"US-ASCII\" standalone=\"yes\"?>\n" );
apr_file_printf( file, "<linden_genepool version=\"1.0\">\n" );
@@ -7577,6 +7586,11 @@ void LLVOAvatar::dumpArchetypeXML( void* )
}
apr_file_printf( file, "\t</archetype>\n" );
apr_file_printf( file, "\n</linden_genepool>\n" );
+ //explictly close the file if it is still open which it should be
+ if (file)
+ {
+ outfile.close();
+ }
}
@@ -8296,7 +8310,7 @@ void LLVOAvatar::updateImpostors()
BOOL LLVOAvatar::isImpostor() const
{
- return (sUseImpostors && mUpdatePeriod >= IMPOSTOR_PERIOD) ? TRUE : FALSE;
+ return (isVisuallyMuted() || (sUseImpostors && mUpdatePeriod >= IMPOSTOR_PERIOD)) ? TRUE : FALSE;
}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index dd0317f555..6a4e09593c 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -185,7 +185,7 @@ public:
void resetSpecificJointPosition( const std::string& name );
virtual const char* getAnimationPrefix() { return "avatar"; }
- virtual const LLUUID& getID();
+ virtual const LLUUID& getID() const;
virtual LLVector3 getVolumePos(S32 joint_index, LLVector3& volume_offset);
virtual LLJoint* findCollisionVolume(U32 volume_id);
virtual S32 getCollisionVolumeID(std::string &name);
@@ -382,7 +382,7 @@ private:
public:
U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
- bool isVisuallyMuted();
+ bool isVisuallyMuted() const;
U32 renderRigid();
U32 renderSkinned(EAvatarRenderPass pass);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 438d578ac5..e7c35d8220 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -4714,11 +4714,11 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
buffer_index = -1;
}
- S32 texture_index_channels = LLGLSLShader::sIndexedTextureChannels-1; //always reserve one for shiny for now just for simplicity
+ S32 texture_index_channels = 1;
- if (gGLManager.mGLVersion < 3.1f)
+ if (gGLManager.mGLSLVersionMajor > 1 || gGLManager.mGLSLVersionMinor >= 30)
{
- texture_index_channels = 1;
+ texture_index_channels = LLGLSLShader::sIndexedTextureChannels-1; //always reserve one for shiny for now just for simplicity;
}
if (LLPipeline::sRenderDeferred && distance_sort)
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index 315616e8a5..cd78157944 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -160,7 +160,7 @@ BOOL LLVOWater::updateGeometry(LLDrawable *drawable)
static const unsigned int vertices_per_quad = 4;
static const unsigned int indices_per_quad = 6;
- const S32 size = gSavedSettings.getBOOL("RenderTransparentWater") && !LLGLSLShader::sNoFixedFunction ? 16 : 1;
+ const S32 size = gSavedSettings.getBOOL("RenderTransparentWater") && LLGLSLShader::sNoFixedFunction ? 16 : 1;
const S32 num_quads = size * size;
face->setSize(vertices_per_quad * num_quads,
@@ -197,6 +197,13 @@ BOOL LLVOWater::updateGeometry(LLDrawable *drawable)
F32 size_inv = 1.f / size;
+ F32 z_fudge = 0.f;
+
+ if (getIsEdgePatch())
+ { //bump edge patches down 10 cm to prevent aliasing along edges
+ z_fudge = -0.1f;
+ }
+
for (y = 0; y < size; y++)
{
for (x = 0; x < size; x++)
@@ -205,6 +212,7 @@ BOOL LLVOWater::updateGeometry(LLDrawable *drawable)
position_agent = getPositionAgent() - getScale() * 0.5f;
position_agent.mV[VX] += (x + 0.5f) * step_x;
position_agent.mV[VY] += (y + 0.5f) * step_y;
+ position_agent.mV[VZ] += z_fudge;
*verticesp++ = position_agent - right + up;
*verticesp++ = position_agent - right - up;
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 0f7f63061b..402504933c 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -810,6 +810,20 @@ const LLLocalTextureObject* LLWearable::getLocalTextureObject(S32 index) const
return NULL;
}
+std::vector<LLLocalTextureObject*> LLWearable::getLocalTextureListSeq()
+{
+ std::vector<LLLocalTextureObject*> result;
+
+ for(te_map_t::const_iterator iter = mTEMap.begin();
+ iter != mTEMap.end(); iter++)
+ {
+ LLLocalTextureObject* lto = iter->second;
+ result.push_back(lto);
+ }
+
+ return result;
+}
+
void LLWearable::setLocalTextureObject(S32 index, LLLocalTextureObject &lto)
{
if( mTEMap.find(index) != mTEMap.end() )
diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h
index fd614ade64..3d8c53a755 100644
--- a/indra/newview/llwearable.h
+++ b/indra/newview/llwearable.h
@@ -106,6 +106,7 @@ public:
LLLocalTextureObject* getLocalTextureObject(S32 index);
const LLLocalTextureObject* getLocalTextureObject(S32 index) const;
+ std::vector<LLLocalTextureObject*> getLocalTextureListSeq();
void setLocalTextureObject(S32 index, LLLocalTextureObject &lto);
void addVisualParam(LLVisualParam *param);
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index fbd8b3ada3..3d971e738e 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -1188,20 +1188,23 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
iter != LLCharacter::sInstances.end(); ++iter)
{
LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter;
- LLVector3d pos_global = pVOAvatar->getPositionGlobal();
- LLUUID uuid = pVOAvatar->getID();
- if( !pVOAvatar->isDead()
- && !pVOAvatar->isSelf()
- && !uuid.isNull() &&
- dist_vec_squared(pos_global, relative_to) <= radius_squared)
+
+ if (!pVOAvatar->isDead() && !pVOAvatar->isSelf())
{
- if(positions != NULL)
- {
- positions->push_back(pos_global);
- }
- if(avatar_ids !=NULL)
+ LLVector3d pos_global = pVOAvatar->getPositionGlobal();
+ LLUUID uuid = pVOAvatar->getID();
+
+ if (!uuid.isNull()
+ && dist_vec_squared(pos_global, relative_to) <= radius_squared)
{
- avatar_ids->push_back(uuid);
+ if(positions != NULL)
+ {
+ positions->push_back(pos_global);
+ }
+ if(avatar_ids !=NULL)
+ {
+ avatar_ids->push_back(uuid);
+ }
}
}
}
@@ -1232,6 +1235,11 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
}
}
+bool LLWorld::isRegionListed(const LLViewerRegion* region) const
+{
+ region_list_t::const_iterator it = find(mRegionList.begin(), mRegionList.end(), region);
+ return it != mRegionList.end();
+}
LLHTTPRegistration<LLEstablishAgentCommunication>
gHTTPRegistrationEstablishAgentCommunication(
diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h
index d8ab4bc508..f350009d10 100644
--- a/indra/newview/llworld.h
+++ b/indra/newview/llworld.h
@@ -157,6 +157,11 @@ public:
std::vector<LLVector3d>* positions = NULL,
const LLVector3d& relative_to = LLVector3d(), F32 radius = FLT_MAX) const;
+ // Returns 'true' if the region is in mRegionList,
+ // 'false' if the region has been removed due to region change
+ // or if the circuit to this simulator had been lost.
+ bool isRegionListed(const LLViewerRegion* region) const;
+
private:
region_list_t mActiveRegionList;
region_list_t mRegionList;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index a64655960f..ab994c71cb 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -811,6 +811,10 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
if (LLPipeline::sRenderDeferred)
{
+ // Set this flag in case we crash while resizing window or allocating space for deferred rendering targets
+ gSavedSettings.setBOOL("RenderInitError", TRUE);
+ gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
+
S32 shadow_detail = RenderShadowDetail;
BOOL ssao = RenderDeferredSSAO;
@@ -872,6 +876,10 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
mShadow[i].release();
}
}
+
+ // don't disable shaders on next session
+ gSavedSettings.setBOOL("RenderInitError", FALSE);
+ gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
}
else
{
@@ -1027,11 +1035,7 @@ void LLPipeline::releaseGLBuffers()
mTrueNoiseMap = 0;
}
- if (mLightFunc)
- {
- LLImageGL::deleteTextures(1, &mLightFunc);
- mLightFunc = 0;
- }
+ releaseLUTBuffers();
mWaterRef.release();
mWaterDis.release();
@@ -1047,6 +1051,15 @@ void LLPipeline::releaseGLBuffers()
LLVOAvatar::resetImpostors();
}
+void LLPipeline::releaseLUTBuffers()
+{
+ if (mLightFunc)
+ {
+ LLImageGL::deleteTextures(1, &mLightFunc);
+ mLightFunc = 0;
+ }
+}
+
void LLPipeline::releaseScreenBuffers()
{
mUIScreen.release();
@@ -1076,10 +1089,11 @@ void LLPipeline::createGLBuffers()
if (LLPipeline::sWaterReflections)
{ //water reflection texture
- U32 res = (U32) gSavedSettings.getS32("RenderWaterRefResolution");
+ U32 res = (U32) llmax(gSavedSettings.getS32("RenderWaterRefResolution"), 512);
mWaterRef.allocate(res,res,GL_RGBA,TRUE,FALSE);
- mWaterDis.allocate(res,res,GL_RGBA,TRUE,FALSE);
+ //always use FBO for mWaterDis so it can be used for avatar texture bakes
+ mWaterDis.allocate(res,res,GL_RGBA,TRUE,FALSE,LLTexUnit::TT_TEXTURE, true);
}
mHighlight.allocate(256,256,GL_RGBA, FALSE, FALSE);
@@ -1141,50 +1155,69 @@ void LLPipeline::createGLBuffers()
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
}
+ createLUTBuffers();
+ }
+
+ gBumpImageList.restoreGL();
+}
+
+void LLPipeline::createLUTBuffers()
+{
+ if (sRenderDeferred)
+ {
if (!mLightFunc)
{
U32 lightResX = gSavedSettings.getU32("RenderSpecularResX");
U32 lightResY = gSavedSettings.getU32("RenderSpecularResY");
- U8* lg = new U8[lightResX*lightResY];
-
+ U8* ls = new U8[lightResX*lightResY];
+ F32 specExp = gSavedSettings.getF32("RenderSpecularExponent");
+ // Calculate the (normalized) Blinn-Phong specular lookup texture.
for (U32 y = 0; y < lightResY; ++y)
{
for (U32 x = 0; x < lightResX; ++x)
{
- //spec func
+ ls[y*lightResX+x] = 0;
F32 sa = (F32) x/(lightResX-1);
F32 spec = (F32) y/(lightResY-1);
- //lg[y*lightResX+x] = (U8) (powf(sa, 128.f*spec*spec)*255);
-
- //F32 sp = acosf(sa)/(1.f-spec);
-
- sa = powf(sa, gSavedSettings.getF32("RenderSpecularExponent"));
- F32 a = acosf(sa*0.25f+0.75f);
- F32 m = llmax(0.5f-spec*0.5f, 0.001f);
- F32 t2 = tanf(a)/m;
- t2 *= t2;
-
- F32 c4a = (3.f+4.f*cosf(2.f*a)+cosf(4.f*a))/8.f;
- F32 bd = 1.f/(4.f*m*m*c4a)*powf(F_E, -t2);
-
- lg[y*lightResX+x] = (U8) (llclamp(bd, 0.f, 1.f)*255);
+ F32 n = spec * spec * specExp;
+
+ // Nothing special here. Just your typical blinn-phong term.
+ spec = powf(sa, n);
+
+ // Apply our normalization function.
+ // Note: This is the full equation that applies the full normalization curve, not an approximation.
+ // This is fine, given we only need to create our LUT once per buffer initialization.
+ // The only trade off is we have a really low dynamic range.
+ // This means we have to account for things not being able to exceed 0 to 1 in our shaders.
+ spec *= (((n + 2) * (n + 4)) / (8 * F_PI * (powf(2, -n/2) + n)));
+
+ // Always sample at a 1.0/2.2 curve.
+ // This "Gamma corrects" our specular term, boosting our lower exponent reflections.
+ spec = powf(spec, 1.f/2.2f);
+
+ // Easy fix for our dynamic range problem: divide by 6 here, multiply by 6 in our shaders.
+ // This allows for our specular term to exceed a value of 1 in our shaders.
+ // This is something that can be important for energy conserving specular models where higher exponents can result in highlights that exceed a range of 0 to 1.
+ // Technically, we could just use an R16F texture, but driver support for R16F textures can be somewhat spotty at times.
+ // This works remarkably well for higher specular exponents, though banding can sometimes be seen on lower exponents.
+ // Combined with a bit of noise and trilinear filtering, the banding is hardly noticable.
+ ls[y*lightResX+x] = (U8)(llclamp(spec * (1.f / 6), 0.f, 1.f) * 255);
}
}
-
+
LLImageGL::generateTextures(1, &mLightFunc);
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc);
- LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_R8, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, lg);
+ LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_R8, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, ls);
gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR);
-
- delete [] lg;
+
+ delete [] ls;
}
}
-
- gBumpImageList.restoreGL();
}
-void LLPipeline::restoreGL()
+
+void LLPipeline::restoreGL()
{
LLMemType mt_cb(LLMemType::MTYPE_PIPELINE_RESTORE_GL);
assertInitialized();
@@ -6642,9 +6675,12 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
mDeferredLight.flush();
}
+ U32 dof_width = (U32) (mScreen.getWidth()*CameraDoFResScale);
+ U32 dof_height = (U32) (mScreen.getHeight()*CameraDoFResScale);
+
{ //perform DoF sampling at half-res (preserve alpha channel)
mScreen.bindTarget();
- glViewport(0,0,(GLsizei) (mScreen.getWidth()*CameraDoFResScale), (GLsizei) (mScreen.getHeight()*CameraDoFResScale));
+ glViewport(0,0, dof_width, dof_height);
gGL.setColorMask(true, false);
shader = &gDeferredPostProgram;
@@ -6657,7 +6693,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
shader->uniform1f(LLShaderMgr::DOF_MAX_COF, CameraMaxCoF);
shader->uniform1f(LLShaderMgr::DOF_RES_SCALE, CameraDoFResScale);
-
+
gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
gGL.vertex2f(-1,-1);
@@ -6702,6 +6738,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
shader->uniform1f(LLShaderMgr::DOF_MAX_COF, CameraMaxCoF);
shader->uniform1f(LLShaderMgr::DOF_RES_SCALE, CameraDoFResScale);
+ shader->uniform1f(LLShaderMgr::DOF_WIDTH, dof_width-1);
+ shader->uniform1f(LLShaderMgr::DOF_HEIGHT, dof_height-1);
gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
@@ -8811,16 +8849,16 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
da = powf(da, split_exp.mV[2]);
-
F32 sxp = split_exp.mV[1] + (split_exp.mV[0]-split_exp.mV[1])*da;
-
-
+
for (U32 i = 0; i < 4; ++i)
{
F32 x = (F32)(i+1)/4.f;
x = powf(x, sxp);
mSunClipPlanes.mV[i] = near_clip+range*x;
}
+
+ mSunClipPlanes.mV[0] *= 1.25f; //bump back first split for transition padding
}
// convenience array of 4 near clip plane distances
@@ -8877,8 +8915,8 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
delta += (frust[i+4]-frust[(i+2)%4+4])*0.05f;
delta.normVec();
F32 dp = delta*pn;
- frust[i] = eye + (delta*dist[j]*0.95f)/dp;
- frust[i+4] = eye + (delta*dist[j+1]*1.05f)/dp;
+ frust[i] = eye + (delta*dist[j]*0.75f)/dp;
+ frust[i+4] = eye + (delta*dist[j+1]*1.25f)/dp;
}
shadow_cam.calcAgentFrustumPlanes(frust);
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 3c4e389ce0..b8b4f164fe 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -114,8 +114,10 @@ public:
void doResetVertexBuffers();
void resizeScreenTexture();
void releaseGLBuffers();
+ void releaseLUTBuffers();
void releaseScreenBuffers();
void createGLBuffers();
+ void createLUTBuffers();
void allocateScreenBuffer(U32 resX, U32 resY);
bool allocateScreenBuffer(U32 resX, U32 resY, U32 samples);
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 b893ab79e5..9e330f9766 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -374,7 +374,7 @@ 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">
- Avatare auf dieser Parzelle sehen und mit ihnen chatten
+ Avatare in anderen Parzellen k繹nnen Avatare in dieser Parzelle sehen und mit ihnen chatten
</text>
<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">
@@ -458,12 +458,12 @@ Nur groe Parzellen k繹nnen in der Suche aufgef羹hrt werden.
<text name="Limit access to this parcel to:">
Zugang zu dieser Parzelle
</text>
- <check_box label="ffentlichen Zugang erlauben [MATURITY]" name="public_access"/>
+ <check_box label="ffentlichen Zugang gestatten (bei Deaktivierung dieser Option werden Bannlinien generiert)" name="public_access"/>
<text name="Only Allow" width="400">
- Zugang auf Einwohner beschr瓣nken, die 羹berpr羹ft wurden von:
+ Zugang nur Einwohnern gestatten, die:
</text>
- <check_box label="Zahlungsinformation gespeichert [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Einwohner ohne Zahlungsinformation nicht zulassen."/>
- <check_box label="Alters羹berpr羹fung [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Einwohner ohne Alters羹berpr羹fung nicht zulassen. Weitere Informationen finden Sie im [SUPPORT_SITE]."/>
+ <check_box label="Zahlungsinformationen hinterlegt haben [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Um diese Parzelle besuchen zu k繹nnen, m羹ssen Einwohner Zahlungsinformationen hinterlegt haben. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+ <check_box label="ihr Alter best瓣tigt haben [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Um diese Parzelle besuchen zu k繹nnen, m羹ssen Einwohner ihr Alter best瓣tigt haben. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
<check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register Allgemein festlegen."/>
<check_box label="P瓣sse verkaufen an:" name="PassCheck" tool_tip="Erm繹glicht befristeten Zugang zu dieser Parzelle"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/de/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_anim_preview.xml
new file mode 100644
index 0000000000..3dc554b120
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_animation_anim_preview.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Anim Preview" title="ANIMATION.ANIM">
+ <text name="name_label">
+ Name:
+ </text>
+ <text name="description_label">
+ Beschreibung:
+ </text>
+ <button label="Hochladen (L$[AMOUNT])" name="ok_btn"/>
+ <button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_bvh_preview.xml
new file mode 100644
index 0000000000..9a6f5e0166
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_animation_bvh_preview.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview">
+ <floater.string name="failed_to_initialize">
+ Bewegung konnte nicht initialisiert werden
+ </floater.string>
+ <floater.string name="anim_too_long">
+ Animationsdatei ist [LENGTH] Sekunden lang.
+
+Maximal erlaubt sind [MAX_LENGTH] Sekunden.
+ </floater.string>
+ <floater.string name="failed_file_read">
+ Animationsdatei kann nicht gelesen werden.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ OK
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ Vorzeitiges Dateiende.
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ Constraint-Definition kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ BVH-Datei kann nicht ge繹ffnet werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ Ung羹ltige HIERARCHY-Kopfzeile.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ ROOT oder JOINT nicht gefunden.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ JOINT-Name nicht erfasst.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ OFFSET nicht gefunden.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ CHANNELS nicht gefunden.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ Rotationsreihenfolge kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ Rotationsachse kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ MOTION nicht gefunden.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ Anzahl der Bilder kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ Bildzeit kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ Positionswerte k繹nnen nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ Rotationswerte k繹nnen nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ Transformationsdatei kann nicht ge繹ffnet werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ Transformationskopfzeile kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ Transformationsnamen k繹nnen nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ Ignorieren-Transformationswert kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ Relativer Transformationswert kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ Outname-Transformationswert kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ Transformationsmatrix kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Mergechild-Name kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Mergeparent-Name kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ Priority-Wert kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ Loop-Wert kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ EaseIn-Werte k繹nnen nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ EaseOut-Werte k繹nnen nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Hand-Morph-Wert kann nicht erfasst werden.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ Emote-Name kann nicht gelesen werden.
+ </floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ Falscher Root-Joint-Name, hip verwenden.
+ </floater.string>
+ <text name="name_label">
+ Name:
+ </text>
+ <text name="description_label">
+ Beschreibung:
+ </text>
+ <spinner label="Priorit瓣t" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation 羹berschrieben werden k繹nnen"/>
+ <check_box label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife"/>
+ <spinner label="Ein (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen"/>
+ <spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen"/>
+ <text name="hand_label">
+ Handhaltung
+ </text>
+ <combo_box name="hand_pose_combo" tool_tip="Steuert w瓣hrend der Animation die Bewegung der H瓣nde">
+ <combo_box.item label="Dehnen" name="Spread"/>
+ <combo_box.item label="Entspannt" name="Relaxed"/>
+ <combo_box.item label="Beide zeigen" name="PointBoth"/>
+ <combo_box.item label="Faust" name="Fist"/>
+ <combo_box.item label="Links entspannt" name="RelaxedLeft"/>
+ <combo_box.item label="Nach links zeigen" name="PointLeft"/>
+ <combo_box.item label="Linke Faust" name="FistLeft"/>
+ <combo_box.item label="Rechts entspannt" name="RelaxedRight"/>
+ <combo_box.item label="Nach rechts zeigen" name="PointRight"/>
+ <combo_box.item label="Rechte Faust" name="FistRight"/>
+ <combo_box.item label="Rechts salutieren" name="SaluteRight"/>
+ <combo_box.item label="Tippen" name="Typing"/>
+ <combo_box.item label="Friedensgeste rechts" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ Ausdruck
+ </text>
+ <combo_box name="emote_combo" tool_tip="Steuert Gesichtsregungen w瓣hrend der Animation">
+ <item label="(Keine)" name="[None]" value=""/>
+ <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
+ <item label="ngstlich" name="Afraid" value="ngstlich"/>
+ <item label="Ver瓣rgert" name="Angry" value="Ver瓣rgert"/>
+ <item label="Grinst" name="BigSmile" value="Grinst"/>
+ <item label="Gelangweilt" name="Bored" value="Gelangweilt"/>
+ <item label="Weinen" name="Cry" value="Weinen"/>
+ <item label="Verachtung" name="Disdain" value="Verachtung"/>
+ <item label="Verlegen" name="Embarrassed" value="Verlegen"/>
+ <item label="Stirnrunzeln" name="Frown" value="Stirnrunzeln"/>
+ <item label="K羹ssen" name="Kiss" value="K羹ssen"/>
+ <item label="Lachen" name="Laugh" value="Lachen"/>
+ <item label="B瓣瓣瓣h" name="Plllppt" value="B瓣瓣瓣h"/>
+ <item label="Angewidert" name="Repulsed" value="Angewidert"/>
+ <item label="Traurig" name="Sad" value="Traurig"/>
+ <item label="Achselzucken" name="Shrug" value="Achselzucken"/>
+ <item label="L瓣cheln" name="Smile" value="L瓣cheln"/>
+ <item label="berraschung" name="Surprise" value="berraschung"/>
+ <item label="Zwinkern" name="Wink" value="Zwinkern"/>
+ <item label="Sorgenvoll" name="Worry" value="Sorgenvoll"/>
+ </combo_box>
+ <text name="preview_label">
+ Vorschau w瓣hrend:
+ </text>
+ <combo_box name="preview_base_anim" tool_tip="Hiermit k繹nnen Sie das Verhalten Ihres Avatars testen, w瓣hrend Ihr Avatar normale Bewegungen ausf羹hrt.">
+ <item label="Stehen" name="Standing" value="Stehen"/>
+ <item label="Gehen" name="Walking" value="Gehen"/>
+ <item label="Sitzen" name="Sitting" value="Sitzen"/>
+ <item label="Fliegen" name="Flying" value="Fliegen"/>
+ </combo_box>
+ <spinner label="Einblenden (s)" name="ease_in_time" tool_tip="Einblendungszeit f羹r Animationen (in Sekunden)"/>
+ <spinner label="Ausblenden (s)" name="ease_out_time" tool_tip="Ausblendungszeit f羹r Animationen (in Sekunden)"/>
+ <button name="play_btn" tool_tip="Animation abspielen"/>
+ <button name="pause_btn" tool_tip="Animation unterbrechen"/>
+ <button name="stop_btn" tool_tip="Animation anhalten"/>
+ <text name="bad_animation_text">
+ Animationsdatei kann nicht gelesen werden.
+
+Wir empfehlen exportierte BVH-Dateien aus Poser 4.
+ </text>
+ <button label="Hochladen (L$[AMOUNT])" name="ok_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/de/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..a412b530a4
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_merchant_outbox.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_merchant_outbox" title="HNDLER-OUTBOX">
+ <string name="OutboxFolderCount1">
+ 1 Ordner
+ </string>
+ <string name="OutboxFolderCountN">
+ [NUM] Ordner
+ </string>
+ <string name="OutboxImporting">
+ Ordner 羹bertragen...
+ </string>
+ <string name="OutboxInitializing">
+ Initialisieren...
+ </string>
+ <panel label="">
+ <panel>
+ <panel name="outbox_inventory_placeholder_panel">
+ <text name="outbox_inventory_placeholder_title">
+ Laden...
+ </text>
+ </panel>
+ </panel>
+ <panel>
+ <button label="In Marktplatz 羹bertragen" name="outbox_import_btn" tool_tip="In meinen Marktplatz-Laden verschieben"/>
+ </panel>
+ </panel>
+</floater>
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 a90f36f202..ee26d51d32 100644
--- a/indra/newview/skins/default/xui/de/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_wizard.xml
@@ -6,12 +6,12 @@
<button label="2. Optimieren" name="optimize_btn"/>
<button label="1. Datei ausw瓣hlen" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
Modelldatei ausw瓣hlen
</text>
</panel>
- <panel name="content">
+ <panel name="choose_file_content">
<text name="advanced_users_text">
Fortgeschrittene Benutzer: Wenn Sie bereits mit Tools zur Erstellung von 3D-Inhalten vertraut sind, k繹nnen Sie den erweiterten Uploader verwenden.
</text>
@@ -35,26 +35,26 @@
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
Modell optimieren
</text>
</panel>
- <text name="description">
+ <text name="optimize_description">
Wir haben das Modell auf Leistung optimiert. Sie k繹nnen es bei Bedarf weiter anpassen.
</text>
- <panel name="content">
+ <panel name="optimize_content">
<text name="high_detail_text">
- Detailstufe generieren: Hoch
+ Detailstufe generieren: hoch
</text>
<text name="medium_detail_text">
- Detailstufe generieren: Mittel
+ Detailstufe generieren: mittel
</text>
<text name="low_detail_text">
- Detailstufe generieren: Niedrig
+ Detailstufe generieren: niedrig
</text>
<text name="lowest_detail_text">
- Detailstufe generieren: Niedrigste
+ Detailstufe generieren: niedrigste
</text>
</panel>
<panel name="content2">
@@ -79,15 +79,15 @@
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
Physik anpassen
</text>
</panel>
- <text name="description">
+ <text name="physics_description">
Wir erstellen eine Form f羹r die Auenh羹lle des Modells. Passen Sie die Detailstufe der Form wie f羹r den beabsichtigten Zweck erforderlich an.
</text>
- <panel name="content">
+ <panel name="physics_content">
<button label="Physik neu berechnen" name="recalculate_physics_btn"/>
<button label="Neu berechnen..." name="recalculating_physics_btn"/>
<text name="lod_label">
@@ -110,17 +110,17 @@
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
berpr羹fen
</text>
</panel>
- <panel name="content">
+ <panel name="review_content">
<text name="review_prim_equiv">
Auswirkung auf Parzelle/Region: Prim-quivalenzwert [EQUIV]
</text>
<text name="review_fee">
- Die f羹r das Hochladen anfallende Geb羹hr in H繹he von [FEE]L$ wird von Ihrem Konto abgebucht.
+ Die f羹r das Hochladen anfallende Geb羹hr in H繹he von L$[FEE] wird von Ihrem Konto abgebucht.
</text>
<text name="review_confirmation">
Durch Klicken auf Hochladen best瓣tigen Sie, dass Sie die erforderlichen Rechte f羹r das im Modell enthaltene Material besitzen.
@@ -128,8 +128,8 @@
</panel>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
Upload abgeschlossen
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml
index 3dcdb52555..2dd47a27ad 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_animation.xml
@@ -7,6 +7,6 @@
Beschreibung:
</text>
<line_editor left="108" name="desc" width="160"/>
- <button label="Inworld abspielen" label_selected="Stopp" name="Anim play btn" tool_tip="Diese Animation so wiedergeben, dass andere sie sehen k繹nnen." width="116"/>
- <button label="Lokal abspielen" label_selected="Stopp" left="171" name="Anim audition btn" tool_tip="Diese Animation so wiedergeben, dass nur Sie sie sehen." width="116"/>
+ <button label="Inworld abspielen" label_selected="Stopp" name="Inworld" tool_tip="Diese Animation so wiedergeben, dass andere sie sehen k繹nnen."/>
+ <button label="Lokal wiedergeben" label_selected="Stopp" name="Locally" tool_tip="Diese Animation so wiedergeben, dass nur Sie sie sehen."/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/de/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..429447c378
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_test_layout_stacks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="LAYOUTSTACK-TESTS"/>
diff --git a/indra/newview/skins/default/xui/de/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/de/floater_test_text_vertical_aligment.xml
new file mode 100644
index 0000000000..506d2b013a
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_test_text_vertical_aligment.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="TEST-FENSTER"/>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index cf1d03f32d..dee89b28e5 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -1,5 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="BAU-WERKZEUGE" title="">
+ <floater.string name="grid_screen_text">
+ Bildschirm
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Lokal
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Welt
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referenz
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Anhang
+ </floater.string>
<floater.string name="status_rotate">
An den farbigen B瓣ndern ziehen, um das Objekt zu drehen
</floater.string>
@@ -63,7 +78,12 @@
</text>
<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures" top_pad="-5"/>
<check_box initial_value="true" label="Einrasten" name="checkbox snap to grid" top_pad="15"/>
- <button label="Optionen..." label_selected="Optionen..." name="Options..." tool_tip="Mehr Raster-Optionen anzeigen"/>
+ <combo_box name="combobox grid mode" tool_tip="W瓣hlen Sie das gew羹nschte Rasterlineal zum Positionieren des Objekts aus.">
+ <combo_box.item label="Welt" name="World"/>
+ <combo_box.item label="Lokal" name="Local"/>
+ <combo_box.item label="Referenz" name="Reference"/>
+ </combo_box>
+ <button label="" label_selected="Optionen..." name="Options..." tool_tip="Mehr Raster-Optionen anzeigen"/>
<button label="" label_selected="" name="ToolCube" tool_tip="W羹rfel"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
diff --git a/indra/newview/skins/default/xui/de/floater_voice_effect.xml b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
index 3dc0fc2322..413a46525c 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
@@ -42,13 +42,16 @@
<string name="effect_Demon">
D瓣mon
</string>
+ <string name="effect_Female Elf">
+ Weibliche Elfe
+ </string>
<string name="effect_Flirty">
Kokett
</string>
<string name="effect_Foxy">
Attraktiv
</string>
- <string name="effect_Halloween_2010_Bonus">
+ <string name="effect_Halloween 2010 Bonus">
Bonus_Halloween_2010
</string>
<string name="effect_Helium">
@@ -57,9 +60,18 @@
<string name="effect_Husky">
Rauchig
</string>
+ <string name="effect_Husky Whisper">
+ Rauchiges Fl羹stern
+ </string>
<string name="effect_Intercom">
Intercom
</string>
+ <string name="effect_Julia">
+ Julia
+ </string>
+ <string name="effect_Lo Lilt">
+ Leises Tr瓣llern
+ </string>
<string name="effect_Macho">
Macho
</string>
@@ -69,6 +81,9 @@
<string name="effect_Mini">
Mini
</string>
+ <string name="effect_Model">
+ Modell
+ </string>
<string name="effect_Nano">
Nano
</string>
@@ -90,6 +105,9 @@
<string name="effect_Roxanne">
Roxanne
</string>
+ <string name="effect_Rumble">
+ Rumpeln
+ </string>
<string name="effect_Sabrina">
Sabrina
</string>
@@ -102,6 +120,9 @@
<string name="effect_Shorty">
Shorty
</string>
+ <string name="effect_Smaller">
+ Kleiner
+ </string>
<string name="effect_Sneaky">
Hinterh瓣ltig
</string>
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml
index 7c47913e30..73e0029b76 100644
--- a/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
<menu_item_call label="Ber羹hren" name="touch"/>
<menu_item_call label="Sitzen" name="sit"/>
<menu_item_call label="Bezahlen" name="pay"/>
@@ -12,7 +12,8 @@
<menu_item_call label="Hinzuf羹gen" name="add"/>
<menu_item_call label="Melden" name="report"/>
<menu_item_call label="Ignorieren" name="block"/>
+ <menu_item_call label="Freischalten" name="unblock"/>
<menu_item_call label="Hineinzoomen" name="zoom_in"/>
<menu_item_call label="Entfernen" name="remove"/>
<menu_item_call label="Weitere Infos" name="more_info"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml
index 733a0b85c3..39b3099336 100644
--- a/indra/newview/skins/default/xui/de/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/de/menu_inventory.xml
@@ -59,6 +59,7 @@
<menu_item_call label="Eigenschaften" name="Properties"/>
<menu_item_call label="Umbenennen" name="Rename"/>
<menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/>
+ <menu_item_call label="Ausschneiden" name="Cut"/>
<menu_item_call label="Kopieren" name="Copy"/>
<menu_item_call label="Einf羹gen" name="Paste"/>
<menu_item_call label="Als Link einf羹gen" name="Paste As Link"/>
@@ -84,6 +85,6 @@
<menu_item_call label="Hinzuf羹gen" name="Wearable Add"/>
<menu_item_call label="Ausziehen" name="Take Off"/>
<menu_item_call label="In H瓣ndler-Outbox kopieren" name="Merchant Copy"/>
- <menu_item_call label="In H瓣ndler-Outbox verschieben" name="Merchant Move"/>
+ <menu_item_call label="In Marktplatz 羹bertragen" name="Marketplace Send"/>
<menu_item_call label="--keine Optionen--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_login.xml b/indra/newview/skins/default/xui/de/menu_login.xml
index c90205fbe4..b43b41a5dc 100644
--- a/indra/newview/skins/default/xui/de/menu_login.xml
+++ b/indra/newview/skins/default/xui/de/menu_login.xml
@@ -17,8 +17,8 @@
<menu_item_call label="Fenstergr繹e einstellen..." name="Set Window Size..."/>
<menu_item_call label="Servicebedingungen anzeigen" name="TOS"/>
<menu_item_call label="Wichtige Meldung anzeigen" name="Critical"/>
- <menu_item_call label="Test Medienbrowser" name="Web Browser Test"/>
<menu_item_call label="Web Content Floater Debug Test" name="Web Content Floater Debug Test"/>
+ <menu label="Protokollierungsstufe festlegen" name="Set Logging Level"/>
<menu_item_check label="Grid-Auswahl anzeigen" name="Show Grid Picker"/>
<menu_item_call label="Benachrichtigungs-Konsole anzeigen" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index a81874bee9..d011c7295c 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -14,14 +14,14 @@
<menu_item_check label="Fliegen" name="Fly"/>
<menu_item_check label="Immer rennen" name="Always Run"/>
<menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/>
+ <menu_item_call label="Gehen/Rennen/Fliegen..." name="Walk / run / fly"/>
</menu>
<menu label="Status" name="Status">
<menu_item_call label="Abwesend" name="Set Away"/>
<menu_item_call label="Besch瓣ftigt" name="Set Busy"/>
</menu>
- <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="L$ kaufen..." name="Buy and Sell L$"/>
+ <menu_item_call label="H瓣ndler-Outbox..." name="MerchantOutbox"/>
<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>
@@ -63,7 +63,7 @@
<menu_item_check label="Parzelleneigenschaften" name="Parcel Properties"/>
<menu_item_check label="Men羹 Erweitert" name="Show Advanced Menu"/>
</menu>
- <menu label="Sonne" name="Environment Settings">
+ <menu label="Sonne" name="Sun">
<menu_item_call label="Sonnenaufgang" name="Sunrise"/>
<menu_item_call label="Mittag" name="Noon"/>
<menu_item_call label="Sonnenuntergang" name="Sunset"/>
@@ -178,22 +178,22 @@
<menu_item_check label="Fadenkreuz f羹r Mouselook anzeigen" name="ShowCrosshairs"/>
</menu>
<menu label="Darstellungstypen" name="Rendering Types">
- <menu_item_check label="Einfach" name="Simple"/>
- <menu_item_check label="Alpha" name="Alpha"/>
- <menu_item_check label="Baum" name="Tree"/>
- <menu_item_check label="Avatare" name="Character"/>
- <menu_item_check label="Fl瓣chenpatch" name="Surface Patch"/>
- <menu_item_check label="Himmel" name="Sky"/>
- <menu_item_check label="Wasser" name="Water"/>
- <menu_item_check label="Boden" name="Ground"/>
- <menu_item_check label="Volumen" name="Volume"/>
- <menu_item_check label="Gras" name="Grass"/>
- <menu_item_check label="Wolken" name="Clouds"/>
- <menu_item_check label="Partikel" name="Particles"/>
- <menu_item_check label="Unebenheiten" name="Bump"/>
+ <menu_item_check label="Einfach" name="Rendering Type Simple"/>
+ <menu_item_check label="Alpha" name="Rendering Type Alpha"/>
+ <menu_item_check label="Baum" name="Rendering Type Tree"/>
+ <menu_item_check label="Avatare" name="Rendering Type Character"/>
+ <menu_item_check label="Fl瓣chenpatch" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="Himmel" name="Rendering Type Sky"/>
+ <menu_item_check label="Wasser" name="Rendering Type Water"/>
+ <menu_item_check label="Boden" name="Rendering Type Ground"/>
+ <menu_item_check label="Volumen" name="Rendering Type Volume"/>
+ <menu_item_check label="Gras" name="Rendering Type Grass"/>
+ <menu_item_check label="Wolken" name="Rendering Type Clouds"/>
+ <menu_item_check label="Partikel" name="Rendering Type Particles"/>
+ <menu_item_check label="Unebenheiten" name="Rendering Type Bump"/>
</menu>
<menu label="Rendering-Eigenschaften" name="Rendering Features">
- <menu_item_check label="UI" name="UI"/>
+ <menu_item_check label="UI" name="ToggleUI"/>
<menu_item_check label="Ausgew瓣hlt" name="Selected"/>
<menu_item_check label="Farblich hervorgehoben" name="Highlighted"/>
<menu_item_check label="Dynamische Texturen" name="Dynamic Textures"/>
@@ -207,8 +207,6 @@
<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_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"/>
@@ -217,13 +215,6 @@
<menu_item_check label="Joystick-Flycam" name="Joystick Flycam"/>
<menu_item_call label="Ansicht zur羹cksetzen" name="Reset View"/>
<menu_item_call label="Letzten Chatter ansehen" name="Look at Last Chatter"/>
- <menu label="Bauwerkzeug ausw瓣hlen" name="Select Tool">
- <menu_item_call label="Fokus-Werkzeug" name="Focus"/>
- <menu_item_call label="Werkzeug Bewegen" name="Move"/>
- <menu_item_call label="Bearbeiten" name="Edit"/>
- <menu_item_call label="Werkzeug Erstellen&quot;" name="Create"/>
- <menu_item_call label="Land-Werkzeug" name="Land"/>
- </menu>
<menu_item_call label="Hineinzoomen" name="Zoom In"/>
<menu_item_call label="Zoom-Standard" name="Zoom Default"/>
<menu_item_call label="Wegzoomen" name="Zoom Out"/>
@@ -296,6 +287,7 @@
<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="Byte in Anh瓣ngen" name="attachment bytes"/>
<menu_item_check label="Formen" name="Sculpt"/>
</menu>
<menu label="Rendering" name="Rendering">
@@ -337,9 +329,8 @@
<menu_item_call label="Aufnahme starten" name="Start Record"/>
<menu_item_call label="Aufnahme stoppen" name="Stop Record"/>
</menu>
- <menu label="Welt" name="World">
+ <menu label="Welt" name="DevelopWorld">
<menu_item_check label="Sonnen-Override f羹r Sim" name="Sim Sun Override"/>
- <menu_item_check label="Pulsierender Strahl" name="Cheesy Beacon"/>
<menu_item_check label="Festgelegtes Wetter" name="Fixed Weather"/>
<menu_item_call label="Regionsobjekt-Cache ausgeben" name="Dump Region Object Cache"/>
</menu>
@@ -371,11 +362,11 @@
</menu>
<menu label="Avatar" name="Character">
<menu label="Geladene Textur nehmen" name="Grab Baked Texture">
- <menu_item_call label="Iris" name="Iris"/>
- <menu_item_call label="Kopf" name="Head"/>
- <menu_item_call label="Oberk繹rper" name="Upper Body"/>
- <menu_item_call label="Unterk繹rper" name="Lower Body"/>
- <menu_item_call label="Rock" name="Skirt"/>
+ <menu_item_call label="Iris" name="Grab Iris"/>
+ <menu_item_call label="Kopf" name="Grab Head"/>
+ <menu_item_call label="Oberk繹rper" name="Grab Upper Body"/>
+ <menu_item_call label="Unterk繹rper" name="Grab Lower Body"/>
+ <menu_item_call label="Rock" name="Grab Skirt"/>
</menu>
<menu label="Avatar-Tests" name="Character Tests">
<menu_item_call label="Aussehen als XML speichern" name="Appearance To XML"/>
@@ -403,20 +394,28 @@
<menu_item_check label="HTTP-Texturen" name="HTTP Textures"/>
<menu_item_check label="HTTP-Inventar" name="HTTP Inventory"/>
<menu_item_call label="Bilder komprimieren" name="Compress Images"/>
+ <menu_item_call label="Visual Leak Detector aktivieren" name="Enable Visual Leak Detector"/>
<menu_item_check label="Ausgabe Fehlerbeseitigung ausgeben" name="Output Debug Minidump"/>
<menu_item_check label="Bei n瓣chster Ausf羹hrung Fenster 繹ffnen" name="Console Window"/>
+ <menu label="Protokollierungsstufe festlegen" name="Set Logging Level">
+ <menu_item_check label="Debug" name="Debug"/>
+ <menu_item_check label="Info" name="Info"/>
+ <menu_item_check label="Warnung" name="Warning"/>
+ <menu_item_check label="Fehler" name="Error"/>
+ <menu_item_check label="Keine" name="None"/>
+ </menu>
<menu_item_call label="Admin-Status anfordern" name="Request Admin Options"/>
<menu_item_call label="Admin-Status verlassen" name="Leave Admin Options"/>
<menu_item_check label="Admin-Men羹 anzeigen" name="View Admin Options"/>
</menu>
<menu label="Admin" name="Admin">
- <menu label="Object">
- <menu_item_call label="Kopie nehmen" name="Take Copy"/>
- <menu_item_call label="Besitzer zu mir zwingen" name="Force Owner To Me"/>
- <menu_item_call label="Erlaubnis des Besitzers erzwingen" name="Force Owner Permissive"/>
+ <menu label="Objekt" name="AdminObject">
+ <menu_item_call label="Kopie nehmen" name="Admin Take Copy"/>
+ <menu_item_call label="Mich zum Besitzer machen" name="Force Owner To Me"/>
+ <menu_item_call label="Besitzererlaubnis erzwingen" name="Force Owner Permissive"/>
<menu_item_call label="L繹schen" name="Delete"/>
- <menu_item_call label="Fest" name="Lock"/>
- <menu_item_call label="Asset-ID zulassen" name="Get Assets IDs"/>
+ <menu_item_call label="Sperren" name="Lock"/>
+ <menu_item_call label="Asset-IDs abrufen" name="Get Assets IDs"/>
</menu>
<menu label="Parzelle" name="Parcel">
<menu_item_call label="Besitzer zu mir zwingen" name="Owner To Me"/>
@@ -447,14 +446,14 @@
<menu_item_call label="Physik" name="Physics"/>
<menu_item_call label="Alle Kleider" name="All Clothes"/>
</menu>
- <menu label="Hilfe" name="Help">
+ <menu label="Hilfe" name="DeprecatedHelp">
<menu_item_call label="Offizielles Linden-Blog" name="Official Linden Blog"/>
<menu_item_call label="Scripting-Portal" name="Scripting Portal"/>
<menu label="Fehlermeldungen" name="Bug Reporting">
<menu_item_call label="Allgemeiner Probleme-Tracker" name="Public Issue Tracker"/>
<menu_item_call label="Hilfe zum Allgemeinen Probleme-Tracker" name="Publc Issue Tracker Help"/>
<menu_item_call label="Fehlermeldungs-1x1" name="Bug Reporing 101"/>
- <menu_item_call label="Sicherheitsfragen" name="Security Issues"/>
+ <menu_item_call label="Sicherheitsprobleme" name="Security Issues"/>
<menu_item_call label="QA-Wiki" name="QA Wiki"/>
</menu>
</menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index a34b938a7a..ac068fcd4e 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -86,17 +86,38 @@ Stellen Sie sicher, dass Ihre Internetverbindung funktioniert.
<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
</notification>
<notification name="ConfirmNoCopyToOutbox">
- Ihnen fehlt die Berechtigung zum Kopieren dieses Artikels in die H瓣ndler-Outbox. M繹chten Sie wirklich den folgenden Artikel verschieben?
- [ITEM_NAME]
- <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ Sie sind nicht berechtigt, einen oder mehrere dieser Artikel in die H瓣ndler-Outbox zu kopieren. Sie k繹nnen sie verschieben oder zur羹cklassen.
+ <usetemplate name="okcancelbuttons" notext="Artikel nicht verschieben" yestext="Artikel verschieben"/>
+ </notification>
+ <notification name="OutboxFolderCreated">
+ F羹r jeden Artikel, den Sie in die oberste Ebene Ihrer H瓣ndler-Outbox 羹bertragen haben, wurde ein neuer Ordner erstellt.
+ <usetemplate ignoretext="Neuer Ordner in H瓣ndler-Outbox erstellt" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadComplete">
- Marktplatz-Upload abgeschlossen.
- <usetemplate name="okbutton" yestext="Hurra!"/>
+ <notification name="OutboxImportComplete">
+ Erfolg
+
+Alle Ordner wurden erfolgreich an den Marktplatz 羹bertragen.
+ <usetemplate ignoretext="Alle Ordner an den Marktplatz 羹bertragen" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadHadErrors">
- Marktplatz-Upload mit Fehlern abgeschlossen. Korrigieren Sie die Fehler in Ihrer Outbox und versuchen Sie es erneut. Vielen Dank!
- <usetemplate name="okbutton" yestext="Erneut versuchen"/>
+ <notification name="OutboxImportHadErrors">
+ Einige Ordner wurden nicht 羹bertragen
+
+Beim bertragen bestimmter Ordner an den Marktplatz ist ein Fehler aufgetreten. Diese Ordner befinden sich noch in Ihrer H瓣ndler-Outbox.
+
+Weitere Informationen finden Sie im [[MARKETPLACE_IMPORTS_URL] Fehlerprotokoll].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportFailed">
+ bertragung fehlgeschlagen
+
+Aufgrund eines System- oder Netzwerkfehlers wurden keine Ordner an den Marktplatz 羹bertragen. Versuchen Sie es sp瓣ter erneut.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxInitFailed">
+ Marktplatzinitialisierung fehlgeschlagen
+
+Marktplatzinitialisierung aufgrund eines System- oder Netzwerkfehlers fehlgeschlagen. Versuchen Sie es sp瓣ter erneut.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CompileQueueSaveText">
Der Text f羹r ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
@@ -656,7 +677,7 @@ Erwartet wurde [VALIDS]
Ausgabedatei konnte nicht erstellt werden: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- Der Mehrfach-Upload von Animationsdateien wird zurzeit von [APP_NAME] nicht unterst羹tzt.
+ Der Bulk-Upload von BVH-Animationsdateien wird zurzeit von [APP_NAME] nicht unterst羹tzt.
</notification>
<notification name="CannotUploadReason">
Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
@@ -1448,7 +1469,7 @@ Zur Installation des Updates muss [APP_NAME] neu gestartet werden.
<usetemplate ignoretext="Best瓣tigen, bevor Objekte an Ihre Eigent羹mer zur羹ckgegeben werden" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- Sie sind Mitglied der Gruppe &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
+ Sie sind gegenw瓣rtig Mitglied der Gruppe &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
Diese Gruppe verlassen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
@@ -2623,16 +2644,16 @@ Anfrage gestatten?
&lt;nolink&gt;[TITLE]&lt;/nolink&gt; von [NAME]
[MESSAGE]
<form name="form">
- <button name="Mute" text="Blockieren"/>
- <button name="Ignore" text="Ignorieren"/>
+ <button name="Client_Side_Mute" text="Blockieren"/>
+ <button name="Client_Side_Ignore" text="Ignorieren"/>
</form>
</notification>
<notification name="ScriptDialogGroup">
&lt;nolink&gt;[TITLE]&lt;/nolink&gt; von [GROUPNAME]
[MESSAGE]
<form name="form">
- <button name="Mute" text="Blockieren"/>
- <button name="Ignore" text="Ignorieren"/>
+ <button name="Client_Side_Mute" text="Blockieren"/>
+ <button name="Client_Side_Ignore" text="Ignorieren"/>
</form>
</notification>
<notification name="BuyLindenDollarSuccess">
@@ -2831,6 +2852,18 @@ f羹r folgende Einwohner freigeben:
[RESIDENTS]
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
+ <notification name="ShareFolderConfirmation">
+ Es kann nur jeweils ein Ordner geteilt werden.
+
+M繹chten Sie wirklich die folgenden Artikel:
+
+&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
+
+mit den folgenden Einwohnern teilen:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
<notification name="ItemsShared">
Objekte wurden erfolgreich freigegeben.
</notification>
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml
index 2068c39024..07ad761791 100644
--- a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml
@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="Chat 羹bersetzen" name="translate_chat_checkbox"/>
+ <layout_stack name="stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Chat 羹bersetzen" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml
index b93bd3e442..aecf6f62fc 100644
--- a/indra/newview/skins/default/xui/de/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml
@@ -16,10 +16,10 @@
(unbekannt)
</text>
<text name="Only Allow">
- Zugang nur dann, wenn 羹berpr羹ft mit:
+ Zugang nur Einwohnern gestatten, die:
</text>
- <check_box label="Zahlungsinformation gespeichert" name="limit_payment" tool_tip="Einwohner ohne Zahlungsinformation nicht zulassen."/>
- <check_box label="Alters羹berpr羹fung" name="limit_age_verified" tool_tip="Einwohner ohne Alters羹berpr羹fung verbannen. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+ <check_box label="Zahlungsinformationen hinterlegt haben" name="limit_payment" tool_tip="Um diesen Grundbesitz besuchen zu k繹nnen, m羹ssen Einwohner Zahlungsinformationen hinterlegt haben. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+ <check_box label="ihr Alter best瓣tigt haben" name="limit_age_verified" tool_tip="Um diesen Grundbesitz besuchen zu k繹nnen, m羹ssen Einwohner ihr Alter best瓣tigt haben. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
<check_box label="Voice-Chat erlauben" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<text name="abuse_email_text" width="222">
diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml
index adfe2a342b..7e03aeff15 100644
--- a/indra/newview/skins/default/xui/de/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/de/panel_script_ed.xml
@@ -22,6 +22,8 @@
<menu label="Datei" name="File">
<menu_item_call label="Speichern" name="Save"/>
<menu_item_call label="Alle nderungen zur羹cksetzen" name="Revert All Changes"/>
+ <menu_item_call label="Aus Datei laden..." name="LoadFromFile"/>
+ <menu_item_call label="In Datei speichern..." name="SaveToFile"/>
</menu>
<menu label="Bearbeiten" name="Edit">
<menu_item_call label="R羹ckg瓣ngig" name="Undo"/>
diff --git a/indra/newview/skins/default/xui/de/panel_status_bar.xml b/indra/newview/skins/default/xui/de/panel_status_bar.xml
index 2493d60df6..14ace0ac3a 100644
--- a/indra/newview/skins/default/xui/de/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml
@@ -15,7 +15,7 @@
<panel.string name="buycurrencylabel">
[AMT] L$
</panel.string>
- <panel name="balance_bg">
+ <panel left="-415" name="balance_bg" width="205">
<text name="balance" tool_tip="Klicken, um L$-Guthaben zu aktualisieren" value="20 L$"/>
<button label="L$ kaufen" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
<button label="Einkaufen" name="goShop" tool_tip="Second Life-Marktplatz 繹ffnen" width="85"/>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
index 674ea3376b..18aad64f96 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
@@ -2,47 +2,24 @@
<panel label="Sonstiges" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<layout_stack name="inventory_layout_stack">
- <layout_panel name="inbox_outbox_layout_panel">
- <layout_stack name="inbox_outbox_layout_stack">
- <layout_panel name="inbox_layout_panel">
- <panel label="" name="marketplace_inbox">
- <string name="InboxLabelWithArg">
- Erhaltene Artikel ([NUM])
- </string>
- <string name="InboxLabelNoArg">
- Erhaltene Artikel
- </string>
- <button label="Erhaltene Artikel" name="inbox_btn"/>
- <text name="inbox_fresh_new_count">
- [NUM] neu
- </text>
- <panel tool_tip="Drag and drop items to your inventory to manage and use them">
- <text name="inbox_inventory_placeholder">
- Eink瓣ufe auf dem Marktplatz werden hierher geliefert.
- </text>
- </panel>
- </panel>
- </layout_panel>
- <layout_panel name="outbox_layout_panel">
- <panel label="" name="marketplace_outbox">
- <string name="OutboxLabelWithArg">
- H瓣ndler-Outbox ([NUM])
- </string>
- <string name="OutboxLabelNoArg">
- H瓣ndler-Outbox
- </string>
- <button label="H瓣ndler-Outbox" name="outbox_btn"/>
- <button label="" name="outbox_sync_btn" tool_tip="In meinen Marktplatz-Laden verschieben"/>
- <panel>
- <panel name="outbox_inventory_placeholder_panel">
- <text name="outbox_inventory_placeholder_title">
- Laden...
- </text>
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Erhaltene Artikel ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Erhaltene Artikel
+ </string>
+ <button label="Erhaltene Artikel" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] neu
+ </text>
+ <panel name="inbox_inventory_placeholder_panel" tool_tip="Artikel zur Verwendung in Ihr Inventar ziehen">
+ <text name="inbox_inventory_placeholder">
+ Eink瓣ufe aus dem Marktplatz werden hierher geliefert.
+ </text>
+ </panel>
+ </panel>
</layout_panel>
</layout_stack>
<panel name="button_panel">
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 14e9fcdb7f..d917d33d12 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -181,8 +181,8 @@ Aktuelle Informationen finden Sie unter www.secondlife.com/status.
</string>
<string name="LoginFailedPremiumOnly">
Die Anmeldung bei Second Life ist vor羹bergehend eingeschr瓣nkt, um sicherzustellen, dass Einwohner, die sich bereits inworld aufhalten, das bestm繹gliche Erlebnis haben.
-
-Benutzer mit kostenlosen Konten k繹nnen sich w瓣hrend dieses Zeitraums nicht bei Second Life anmelden, damit die Kapazit瓣t den Benutzern zur Verf羹gung steht, die ein geb羹hrenpflichtiges Premium-Konto besitzen.
+
+Benutzer mit kostenlosen Konten k繹nnen sich w瓣hrend dieses Zeitraums nicht bei Second Life anmelden, damit die Kapazit瓣t Benutzern zur Verf羹gung steht, die ein geb羹hrenpflichtiges Premium-Konto besitzen.
</string>
<string name="LoginFailedComputerProhibited">
Der Zugriff auf Second Life ist von diesem Computer aus nicht m繹glich.
@@ -339,17 +339,35 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Sie k繹nnen nur ein einzelnes Objekt hierher ziehen
</string>
<string name="TooltipPrice" value="[AMOUNT] L$"/>
+ <string name="TooltipOutboxDragToWorld">
+ Sie k繹nnen Artikel nicht in Ihrer H瓣ndler-Outbox rezzen
+ </string>
<string name="TooltipOutboxNoTransfer">
- Eines oder mehrere dieser Objekte k繹nnen nicht verkauft oder an einen anderen Benutzer 羹bertragen werden.
+ Einer oder mehrere dieser Artikel k繹nnen nicht verkauft oder 羹bertragen werden.
+ </string>
+ <string name="TooltipOutboxNotInInventory">
+ Nur Artikel direkt aus Ihrem Inventar k繹nnen in Ihre H瓣ndler-Outbox gelegt werden
</string>
<string name="TooltipOutboxWorn">
- Sie tragen eines oder mehrere dieser Objekte. Nehmen Sie es/sie von Ihrem Avatar ab und versuchen Sie dann erneut, es/sie zu verschieben.
+ Artikel, die Sie tragen, k繹nnen nicht in Ihre H瓣ndler-Outbox gelegt werden.
+ </string>
+ <string name="TooltipOutboxCallingCard">
+ Sie k繹nnen keine Visitenkarten in Ihre H瓣ndler-Outbox legen
</string>
<string name="TooltipOutboxFolderLevels">
- Dieser Ordner hat zu viele Unterordnerebenen. Ordnen Sie die Unterordner so an, dass maximal vier Verschachtelungsebenen vorhanden sind (Stammordner enth瓣lt A enth瓣lt B enth瓣lt C).
+ Tiefe der verschachtelten Ordner 羹berschreitet 3
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ Anzahl von Unterordnern im obersten Ordner 羹berschreitet 20
</string>
<string name="TooltipOutboxTooManyObjects">
- Dieser Ordner enth瓣lt mehr als 200 Objekte. Verpacken Sie einige dieser Artikel in Beh瓣ltern, um die Anzahl zu verringern.
+ Anzahl von Artikeln im obersten Ordner 羹berschreitet 200
+ </string>
+ <string name="TooltipDragOntoOwnChild">
+ Sie k繹nnen einen Ordner nicht in einen seiner untergeordneten Ordner verschieben
+ </string>
+ <string name="TooltipDragOntoSelf">
+ Sie k繹nnen einen Ordner nicht in sich selbst verschieben
</string>
<string name="TooltipHttpUrl">
Anklicken, um Webseite anzuzeigen
@@ -817,6 +835,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="anim_yes_head">
Ja
</string>
+ <string name="multiple_textures">
+ Mehrfach
+ </string>
<string name="texture_loading">
Wird geladen...
</string>
@@ -976,6 +997,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="choose_the_directory">
Verzeichnis ausw瓣hlen
</string>
+ <string name="script_files">
+ Skripts
+ </string>
<string name="AvatarSetNotAway">
Nicht abwesend
</string>
@@ -1214,43 +1238,36 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Sie haben keine Kopie dieser Textur in Ihrem Inventar.
</string>
<string name="InventoryInboxNoItems">
- 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.
+ Eink瓣ufe aus dem Marktplatz erscheinen hier. Sie k繹nnen diese dann zur Verwendung in Ihr Inventar ziehen.
</string>
<string name="MarketplaceURL">
- http://marketplace.[DOMAIN_NAME]
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
</string>
<string name="MarketplaceURL_CreateStore">
- http://marketplace.[DOMAIN_NAME]/create_store
+ http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4
</string>
- <string name="MarketplaceURL_LearnMore">
- http://marketplace.[DOMAIN_NAME]/learn_more
- </string>
- <string name="InventoryOutboxCreationErrorTitle">
- Ihre H瓣ndler-Outbox ist nicht richtig konfiguriert
+ <string name="MarketplaceURL_Dashboard">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard
</string>
- <string name="InventoryOutboxCreationErrorTooltip">
- Konfigurationsfehler in H瓣ndler-Outbox
+ <string name="MarketplaceURL_Imports">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports
</string>
- <string name="InventoryOutboxCreationError">
- Wenden Sie sich zur Behebung des Problems an den Kundendienst.
+ <string name="MarketplaceURL_LearnMore">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryOutboxNotMerchantTitle">
- Jeder kann Artikel im Marktplatz verkaufen
- </string>
- <string name="InventoryOutboxNotMerchantTooltip">
- Werden Sie H瓣ndler!
+ Jeder kann Artikel im Marktplatz verkaufen.
</string>
+ <string name="InventoryOutboxNotMerchantTooltip"/>
<string name="InventoryOutboxNotMerchant">
- [[MARKETPLACE_URL] Im Second Life Marktplatz] werden 羹ber eine Million virtuelle Produkte zum Verkauf angeboten, die alle von Einwohnern erstellt wurden. Auch Sie k繹nnen selbst erstellte Artikel sowie bestimmte gekaufte Artikel verkaufen. Die Einrichtung eines H瓣ndlerkontos geht blitzschnell und ist kostenlos. [[LEARN_MORE_URL] Lesen Sie weitere Informationen] oder [[CREATE_STORE_URL] 繹ffnen Sie einen Laden] im Marktplatz, um Ihre Objekte zu verkaufen.
+ Wenn Sie als H瓣ndler aktiv werden m繹chten, m羹ssen Sie einen [[MARKETPLACE_CREATE_STORE_URL] Laden im Marktplatz erstellen].
</string>
<string name="InventoryOutboxNoItemsTitle">
- Eine neue Methode, um Artikel in den Marktplatz zu 羹bertragen
- </string>
- <string name="InventoryOutboxNoItemsTooltip">
- Legen Sie Artikel hier ab, um sie zum Verkauf im Marktplatz vorzubereiten
+ Ihre Outbox ist leer.
</string>
+ <string name="InventoryOutboxNoItemsTooltip"/>
<string name="InventoryOutboxNoItems">
- Ziehen Sie zu verkaufende Artikel oder Ordner in diesen Bereich. Es erscheinen Kopien der Artikel; Ihr Inventar bleibt unver瓣ndert, es sei denn, es handelt sich um einen nicht kopierbaren Artikel. Wenn die Artikel in den Marktplatz 羹bertragen werden sollen, klicken Sie auf die Schaltfl瓣che Hochladen. Nach bertragung der Artikel in Ihr Marktplatz-Inventar verschwinden sie aus diesem Ordner.
+ Ziehen Sie Ordner in dien Bereich und klicken Sie auf In Marktplatz 羹bertragen, um sie im [[MARKETPLACE_DASHBOARD_URL] Marktplatz] zum Verkauf anzubieten.
</string>
<string name="Marketplace Error None">
Keine Fehler
@@ -3907,6 +3924,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="Saved_message">
(Gespeichert am [LONG_TIMESTAMP])
</string>
+ <string name="IM_unblock_only_groups_friends">
+ Wenn Sie diese Meldung sehen, m羹ssen Sie unter Einstellungen &gt; Privatsph瓣re die Option Nur IMs und Anrufe von Freunden oder Gruppen durchstellen deaktivieren.
+ </string>
<string name="answered_call">
Ihr Anruf wurde entgegengenommen
</string>
@@ -4103,8 +4123,8 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Online
</string>
<string name="uploading_abuse_report">
- Bericht wird hochgeladen...
-
+ Hochladen...
+
Missbrauchsbericht
</string>
<string name="New Shape">
@@ -4372,8 +4392,8 @@ Missbrauchsbericht
<string name="server_is_down">
Trotz all unserer Bem羹hungen ist ein unerwarteter Fehler aufgetreten.
- Bitte 羹berpr羹fen Sie status.secondlifegrid.net, um festzustellen, ob ein Problem besteht.
- Falls Sie weiterhin Problem haben, 羹berpr羹fen Sie bitte Ihre Netzwerk- und Firewalleinstellungen.
+ Bitte 羹berpr羹fen Sie status.secondlifegrid.net, um herauszufinden, ob ein Problem besteht.
+ Falls Sie weiterhin Problem haben, 羹berpr羹fen Sie bitte Ihre Netzwerk- und Firewalleinstellungen.
</string>
<string name="dateTimeWeekdaysNames">
Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag
@@ -4839,6 +4859,9 @@ Setzen Sie den Editorpfad in Anf羹hrungszeichen
<string name="Command_Move_Label">
Gehen / Rennen / Fliegen
</string>
+ <string name="Command_Outbox_Label">
+ H瓣ndler-Outbox
+ </string>
<string name="Command_People_Label">
Leute
</string>
@@ -4911,6 +4934,9 @@ Setzen Sie den Editorpfad in Anf羹hrungszeichen
<string name="Command_Move_Tooltip">
Ihren Avatar bewegen
</string>
+ <string name="Command_Outbox_Tooltip">
+ Artikel zum Verkauf in den Marktplatz 羹bertragen
+ </string>
<string name="Command_People_Tooltip">
Freunde, Gruppen und Leute in der N瓣he
</string>
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index c7e9ec781d..060d889003 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="centered"
+ positioning="centered"
legacy_header_height="18"
height="440"
layout="topleft"
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 3a6c2678c1..fb123ec4d1 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
can_tear_off="false"
height="420"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_avatar.xml b/indra/newview/skins/default/xui/en/floater_avatar.xml
index 82c3403008..cd5cca02bd 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
ignore_ui_scale="false"
legacy_header_height="225"
can_minimize="true"
can_close="true"
can_resize="true"
min_height="230"
- min_width="450"
+ min_width="515"
height="230"
layout="topleft"
name="Avatar"
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index cbbbeb6094..1a55dc2e2c 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
legacy_header_height="18"
can_resize="true"
height="350"
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 4673c6def5..22bc488a92 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="specified"
- specified_left="458"
- specified_bottom="80"
+ positioning="specified"
+ left="458"
+ bottom="-80"
+ follows="left|bottom"
legacy_header_height="18"
can_minimize="true"
can_close="true"
diff --git a/indra/newview/skins/default/xui/en/floater_chat_bar.xml b/indra/newview/skins/default/xui/en/floater_chat_bar.xml
index 63992462b3..688a01ce7b 100644
--- a/indra/newview/skins/default/xui/en/floater_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/floater_chat_bar.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="specified"
- specified_left="10"
- specified_bottom="10"
+ positioning="specified"
+ left="10"
+ bottom="-10"
height="60"
layout="topleft"
legacy_header_height="25"
diff --git a/indra/newview/skins/default/xui/en/floater_critical.xml b/indra/newview/skins/default/xui/en/floater_critical.xml
index 13b15bf724..143bcb4430 100644
--- a/indra/newview/skins/default/xui/en/floater_critical.xml
+++ b/indra/newview/skins/default/xui/en/floater_critical.xml
@@ -6,7 +6,7 @@
height="500"
layout="topleft"
name="modal container"
- open_positioning="centered"
+ positioning="centered"
width="600">
<button
height="20"
diff --git a/indra/newview/skins/default/xui/en/floater_destinations.xml b/indra/newview/skins/default/xui/en/floater_destinations.xml
index 373114a1eb..39aa8e07bb 100644
--- a/indra/newview/skins/default/xui/en/floater_destinations.xml
+++ b/indra/newview/skins/default/xui/en/floater_destinations.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
ignore_ui_scale="false"
legacy_header_height="225"
can_minimize="true"
diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml
index b96a94a849..200e9b9537 100644
--- a/indra/newview/skins/default/xui/en/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_gesture.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
save_rect="true"
legacy_header_height="18"
can_resize="true"
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 cd075abc41..c06cb63f8a 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
legacy_header_height="18"
can_resize="true"
height="600"
diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml
index 86232de1a4..44d2c14cc8 100644
--- a/indra/newview/skins/default/xui/en/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_image_preview.xml
@@ -2,7 +2,7 @@
<floater
legacy_header_height="18"
can_minimize="false"
- height="440"
+ height="460"
layout="topleft"
name="Image Preview"
help_topic="image_preview"
@@ -108,7 +108,7 @@
<text
type="string"
length="1"
- bottom="225"
+ bottom="250"
height="45"
word_wrap="true"
follows="top|left"
@@ -137,7 +137,7 @@ Try saving image as 24 bit Targa (.tga).
layout="topleft"
left="165"
name="cancel_btn"
- top="410"
+ top="430"
width="125" />
<button
follows="bottom|left"
diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml
index 6e1bb8fcd0..59f6a9434c 100644
--- a/indra/newview/skins/default/xui/en/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/en/floater_joystick.xml
@@ -13,6 +13,7 @@
</floater.string>
<check_box
bottom="38"
+ height="10"
control_name="JoystickEnabled"
halign="left"
label="Enable Joystick:"
@@ -28,6 +29,7 @@
width="380" />
<spinner
bottom="48"
+ height="10"
control_name="JoystickAxis1"
decimal_digits="0"
increment="1"
@@ -41,6 +43,7 @@
width="140" />
<spinner
bottom="48"
+ height="10"
control_name="JoystickAxis2"
decimal_digits="0"
increment="1"
@@ -54,6 +57,7 @@
width="140" />
<spinner
bottom="48"
+ height="10"
control_name="JoystickAxis0"
decimal_digits="0"
increment="1"
@@ -67,6 +71,7 @@
width="140" />
<spinner
bottom="68"
+ height="10"
control_name="JoystickAxis4"
decimal_digits="0"
increment="1"
@@ -80,6 +85,7 @@
width="140" />
<spinner
bottom="68"
+ height="10"
control_name="JoystickAxis5"
decimal_digits="0"
increment="1"
@@ -93,6 +99,7 @@
width="140" />
<spinner
bottom="68"
+ height="10"
control_name="JoystickAxis3"
decimal_digits="0"
increment="1"
@@ -106,6 +113,7 @@
width="140" />
<spinner
bottom="88"
+ height="10"
control_name="JoystickAxis6"
decimal_digits="0"
increment="1"
@@ -119,6 +127,7 @@
width="140" />
<check_box
bottom_delta="18"
+ height="10"
control_name="ZoomDirect"
label="Direct Zoom"
layout="topleft"
@@ -127,6 +136,7 @@
width="60" />
<check_box
bottom_delta="0"
+ height="10"
control_name="Cursor3D"
label="3D Cursor"
layout="topleft"
@@ -135,6 +145,7 @@
width="60" />
<check_box
bottom_delta="0"
+ height="10"
control_name="AutoLeveling"
label="Auto Level"
layout="topleft"
@@ -157,6 +168,7 @@
</text>
<check_box
bottom="127"
+ height="10"
control_name="JoystickAvatarEnabled"
halign="center"
label="Avatar"
@@ -166,6 +178,7 @@
width="60" />
<check_box
bottom="127"
+ height="10"
control_name="JoystickBuildEnabled"
halign="center"
label="Build"
@@ -175,6 +188,7 @@
width="60" />
<check_box
bottom="127"
+ height="10"
control_name="JoystickFlycamEnabled"
halign="center"
label="Flycam"
@@ -257,6 +271,7 @@
</text>
<spinner
bottom="144"
+ height="10"
control_name="AvatarAxisScale1"
decimal_digits="2"
label_width="0"
@@ -268,6 +283,7 @@
width="56" />
<spinner
bottom="144"
+ height="10"
control_name="BuildAxisScale1"
decimal_digits="2"
label_width="0"
@@ -279,6 +295,7 @@
width="56" />
<spinner
bottom="144"
+ height="10"
control_name="FlycamAxisScale1"
decimal_digits="2"
label_width="0"
@@ -301,6 +318,7 @@
</text>
<spinner
bottom="164"
+ height="10"
control_name="AvatarAxisScale2"
decimal_digits="2"
label_width="0"
@@ -312,6 +330,7 @@
width="56" />
<spinner
bottom="164"
+ height="10"
control_name="BuildAxisScale2"
decimal_digits="2"
label_width="0"
@@ -323,6 +342,7 @@
width="56" />
<spinner
bottom="164"
+ height="10"
control_name="FlycamAxisScale2"
decimal_digits="2"
label_width="0"
@@ -345,6 +365,7 @@
</text>
<spinner
bottom="184"
+ height="10"
control_name="AvatarAxisScale0"
decimal_digits="2"
label_width="0"
@@ -356,6 +377,7 @@
width="56" />
<spinner
bottom="184"
+ height="10"
control_name="BuildAxisScale0"
decimal_digits="2"
label_width="0"
@@ -367,6 +389,7 @@
width="56" />
<spinner
bottom="184"
+ height="10"
control_name="FlycamAxisScale0"
decimal_digits="2"
label_width="0"
@@ -389,6 +412,7 @@
</text>
<spinner
bottom="204"
+ height="10"
control_name="AvatarAxisScale4"
decimal_digits="2"
label_width="0"
@@ -400,6 +424,7 @@
width="56" />
<spinner
bottom="204"
+ height="10"
control_name="BuildAxisScale4"
decimal_digits="2"
label_width="0"
@@ -411,6 +436,7 @@
width="56" />
<spinner
bottom="204"
+ height="10"
control_name="FlycamAxisScale4"
decimal_digits="2"
label_width="0"
@@ -433,6 +459,7 @@
</text>
<spinner
bottom="224"
+ height="10"
control_name="AvatarAxisScale5"
decimal_digits="2"
label_width="0"
@@ -444,6 +471,7 @@
width="56" />
<spinner
bottom="224"
+ height="10"
control_name="BuildAxisScale5"
decimal_digits="2"
label_width="0"
@@ -455,6 +483,7 @@
width="56" />
<spinner
bottom="224"
+ height="10"
control_name="FlycamAxisScale5"
decimal_digits="2"
label_width="0"
@@ -477,6 +506,7 @@
</text>
<spinner
bottom="244"
+ height="10"
control_name="BuildAxisScale3"
decimal_digits="2"
label_width="0"
@@ -488,6 +518,7 @@
width="56" />
<spinner
bottom="244"
+ height="10"
control_name="FlycamAxisScale3"
decimal_digits="2"
label_width="0"
@@ -510,6 +541,7 @@
</text>
<spinner
bottom="274"
+ height="10"
control_name="AvatarAxisDeadZone1"
decimal_digits="2"
increment="0.01"
@@ -520,6 +552,7 @@
width="56" />
<spinner
bottom="274"
+ height="10"
control_name="BuildAxisDeadZone1"
decimal_digits="2"
increment="0.01"
@@ -530,6 +563,7 @@
width="56" />
<spinner
bottom="274"
+ height="10"
control_name="FlycamAxisDeadZone1"
decimal_digits="2"
increment="0.01"
@@ -551,6 +585,7 @@
</text>
<spinner
bottom="294"
+ height="10"
control_name="AvatarAxisDeadZone2"
decimal_digits="2"
increment="0.01"
@@ -561,6 +596,7 @@
width="56" />
<spinner
bottom="294"
+ height="10"
control_name="BuildAxisDeadZone2"
decimal_digits="2"
increment="0.01"
@@ -571,6 +607,7 @@
width="56" />
<spinner
bottom="294"
+ height="10"
control_name="FlycamAxisDeadZone2"
decimal_digits="2"
increment="0.01"
@@ -592,6 +629,7 @@
</text>
<spinner
bottom="314"
+ height="10"
control_name="AvatarAxisDeadZone0"
decimal_digits="2"
increment="0.01"
@@ -602,6 +640,7 @@
width="56" />
<spinner
bottom="314"
+ height="10"
control_name="BuildAxisDeadZone0"
decimal_digits="2"
increment="0.01"
@@ -612,6 +651,7 @@
width="56" />
<spinner
bottom="314"
+ height="10"
control_name="FlycamAxisDeadZone0"
decimal_digits="2"
increment="0.01"
@@ -633,6 +673,7 @@
</text>
<spinner
bottom="334"
+ height="10"
control_name="AvatarAxisDeadZone4"
decimal_digits="2"
increment="0.01"
@@ -643,6 +684,7 @@
width="56" />
<spinner
bottom="334"
+ height="10"
control_name="BuildAxisDeadZone4"
decimal_digits="2"
increment="0.01"
@@ -653,6 +695,7 @@
width="56" />
<spinner
bottom="334"
+ height="10"
control_name="FlycamAxisDeadZone4"
decimal_digits="2"
increment="0.01"
@@ -674,6 +717,7 @@
</text>
<spinner
bottom="354"
+ height="10"
control_name="AvatarAxisDeadZone5"
decimal_digits="2"
increment="0.01"
@@ -684,6 +728,7 @@
width="56" />
<spinner
bottom="354"
+ height="10"
control_name="BuildAxisDeadZone5"
decimal_digits="2"
increment="0.01"
@@ -694,6 +739,7 @@
width="56" />
<spinner
bottom="354"
+ height="10"
control_name="FlycamAxisDeadZone5"
decimal_digits="2"
increment="0.01"
@@ -715,6 +761,7 @@
</text>
<spinner
bottom="374"
+ height="10"
control_name="BuildAxisDeadZone3"
decimal_digits="2"
increment="0.01"
@@ -725,6 +772,7 @@
width="56" />
<spinner
bottom="374"
+ height="10"
control_name="FlycamAxisDeadZone3"
decimal_digits="2"
increment="0.01"
@@ -802,6 +850,7 @@
</text>
<spinner
bottom="430"
+ height="10"
control_name="FlycamAxisScale6"
decimal_digits="2"
label_width="0"
@@ -824,6 +873,7 @@
</text>
<spinner
bottom="450"
+ height="10"
control_name="FlycamAxisDeadZone6"
decimal_digits="2"
increment="0.01"
diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
index 3737294ebe..390ec9ab7d 100644
--- a/indra/newview/skins/default/xui/en/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="centered"
+ positioning="centered"
legacy_header_height="18"
height="430"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml
index 3eeebcf120..b8893e11d9 100644
--- a/indra/newview/skins/default/xui/en/floater_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_map.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
can_minimize="true"
can_resize="true"
chrome="true"
diff --git a/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml
index 3d33d19de5..b98f280b56 100644
--- a/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml
+++ b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
can_close="true"
can_resize="true"
height="440"
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index 065dab0413..4e7ee7913f 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="specified"
- specified_left="320"
- specified_bottom="80"
+ positioning="specified"
+ left="320"
+ bottom="-80"
legacy_header_height="18"
can_dock="false"
can_minimize="true"
diff --git a/indra/newview/skins/default/xui/en/floater_my_appearance.xml b/indra/newview/skins/default/xui/en/floater_my_appearance.xml
index 1c4b25a7b0..fdea7a821a 100644
--- a/indra/newview/skins/default/xui/en/floater_my_appearance.xml
+++ b/indra/newview/skins/default/xui/en/floater_my_appearance.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
legacy_header_height="18"
can_resize="true"
height="588"
diff --git a/indra/newview/skins/default/xui/en/floater_my_inventory.xml b/indra/newview/skins/default/xui/en/floater_my_inventory.xml
index cd0b59dc51..184f296255 100644
--- a/indra/newview/skins/default/xui/en/floater_my_inventory.xml
+++ b/indra/newview/skins/default/xui/en/floater_my_inventory.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
can_close="true"
can_resize="true"
height="570"
diff --git a/indra/newview/skins/default/xui/en/floater_people.xml b/indra/newview/skins/default/xui/en/floater_people.xml
index d6d8431150..08d0b00a83 100644
--- a/indra/newview/skins/default/xui/en/floater_people.xml
+++ b/indra/newview/skins/default/xui/en/floater_people.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
can_close="true"
can_resize="true"
height="570"
diff --git a/indra/newview/skins/default/xui/en/floater_picks.xml b/indra/newview/skins/default/xui/en/floater_picks.xml
index 7882116662..984894b016 100644
--- a/indra/newview/skins/default/xui/en/floater_picks.xml
+++ b/indra/newview/skins/default/xui/en/floater_picks.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
can_close="true"
can_resize="true"
height="572"
diff --git a/indra/newview/skins/default/xui/en/floater_places.xml b/indra/newview/skins/default/xui/en/floater_places.xml
index ccceac0a7b..b241e265a9 100644
--- a/indra/newview/skins/default/xui/en/floater_places.xml
+++ b/indra/newview/skins/default/xui/en/floater_places.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
legacy_header_height="18"
can_resize="true"
height="588"
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index b2662331b0..bd6faf4ed8 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
- open_positioning="centered"
+ positioning="centered"
default_tab_group="1"
height="460"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index dd818e2e06..c3e7028dc5 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
legacy_header_height="18"
can_resize="true"
height="775"
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 0c38283d59..49d64767cc 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
legacy_header_height="18"
can_minimize="true"
can_close="true"
diff --git a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml
index 548e24efba..e1fefc3631 100644
--- a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml
@@ -3,6 +3,7 @@
legacy_header_height="18"
can_resize="true"
height="600"
+ single_instance="false"
layout="topleft"
name="floater_test_text_editor"
translate="false"
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index 13c850c86c..10854f5a49 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -115,6 +115,7 @@
</flyout_button>
<check_box
bottom_delta="35"
+ height="10"
label="Checkbox"
layout="topleft"
tool_tip="checkbox"
@@ -275,6 +276,7 @@
<!-- "spinner" is a numerical input widget with an up and down arrow to
change the value. -->
<spinner
+ height="10"
bottom_delta="35"
follows="top|left"
label="Spinner"
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index cad7d72ed7..ffb8b842f0 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -3,15 +3,17 @@
legacy_header_height="18"
can_minimize="false"
can_resize="true"
- height="290"
+ height="330"
layout="topleft"
- min_height="290"
+ min_height="330"
min_width="410"
name="texture picker"
help_topic="texture_picker"
title="PICK: TEXTURE"
width="410">
- <floater.string
+
+<!-- top static -->
+ <floater.string
name="choose_picture">
Click to choose a picture
</floater.string>
@@ -19,6 +21,16 @@
name="pick title">
Pick:
</floater.string>
+
+ <view
+ left="4"
+ top="20"
+ name="preview_widget"
+ height="165"
+ width="165"
+ follows="left|top"
+ />
+
<text
type="string"
length="1"
@@ -34,70 +46,94 @@
width="163">
Multiple textures
</text>
+
+ <!-- mode selector -->
+ <radio_group
+ control_name="mode_selection"
+ height="20"
+ layout="topleft"
+ left="18"
+ top_pad="80"
+ name="mode_selection"
+ follows="left|top">
+ <radio_item
+ label="Inventory"
+ name="inventory"
+ top_delta="20"
+ layout="topleft"
+ height="16"
+ left="0"
+ value="0"
+ width="80" />
+ <radio_item
+ label="Local"
+ left_pad="0"
+ layout="topleft"
+ top_delta="0"
+ height="16"
+ name="local"
+ value="1"
+ width="75" />
+ </radio_group>
+ <!-- -->
+
<text
type="string"
length="1"
follows="left|top"
height="14"
layout="topleft"
- left_delta="0"
+ left_delta="-12"
name="unknown"
- top_pad="80"
- width="163">
+ top_pad="4"
+ width="">
Size: [DIMENSIONS]
</text>
+
+<!-- middle: inventory mode -->
+
<button
enabled="false"
- follows="left|bottom"
- height="20"
+ follows="left|top"
+ height="18"
label="Default"
label_selected="Default"
layout="topleft"
- left_delta="0"
name="Default"
- top_pad="4"
- width="80" />
+ width="73"
+ left="94"
+ top="215"/>
<button
+ follows="left|top"
+ height="20"
+ label="Blank"
+ label_selected="Blank"
+ layout="topleft"
+ left_delta="0"
+ name="Blank"
+ top_pad="5"
+ width="73" />
+ <button
enabled="false"
- follows="left|bottom"
+ follows="left|top"
height="20"
label="None"
label_selected="None"
layout="topleft"
- left_pad="4"
+ left_delta="0"
name="None"
- top_delta="0"
- width="80" />
- <button
- follows="left|bottom"
- height="20"
- label="Blank"
- label_selected="Blank"
- layout="topleft"
- left="4"
- name="Blank"
top_pad="5"
- width="80" />
- <button
- follows="left|bottom"
+ width="73" />
+ <button
+ follows="left|top"
height="28"
image_selected="eye_button_active.tga"
image_unselected="eye_button_inactive.tga"
layout="topleft"
- left_pad="50"
- top_delta="3"
+ left_delta="-80"
+ top_delta="-25"
name="Pipette"
width="28" />
- <check_box
- follows="left|bottom"
- height="20"
- initial_value="true"
- label="Apply now"
- layout="topleft"
- left="4"
- name="apply_immediate_check"
- top="262"
- width="120" />
<filter_editor
follows="left|top|right"
height="23"
@@ -113,7 +149,7 @@
bg_alpha_color="DkGray2"
border="false"
follows="all"
- height="200"
+ height="233"
layout="topleft"
left_delta="0"
name="inventory panel"
@@ -128,23 +164,89 @@
top_pad="0"
left_delta="-3"
width="200" />
- <button
- follows="right|bottom"
+
+<!-- middle: local mode -->
+ <button
+ follows="left|top"
+ height="18"
+ label="Add"
+ label_selected="Add"
+ layout="topleft"
+ left="94"
+ top="215"
+ name="l_add_btn"
+ width="73"
+ visible="false"/>
+ <button
+ enabled="false"
+ follows="left|top"
+ height="20"
+ label="Remove"
+ label_selected="Remove"
+ layout="topleft"
+ left_delta="0"
+ name="l_rem_btn"
+ top_pad="5"
+ width="73"
+ visible="false"/>
+ <button
+ enabled="false"
+ follows="left|top"
+ height="20"
+ label="Upload"
+ label_selected="Upload"
+ layout="topleft"
+ left_delta="0"
+ name="l_upl_btn"
+ top_pad="5"
+ width="73"
+ visible="false"/>
+ <scroll_list
+ name="l_name_list"
+ left="170"
+ top="22"
+ width="235"
+ height="260"
+ follows="left|top|right|bottom"
+ column_padding="0"
+ can_resize="false"
+ draw_heading="true"
+ multi_select="true"
+ search_column="1"
+ visible="false">
+ <column name="unit_name" label="Name" dynamicwidth="true" />
+ <column name="unit_id_HIDDEN" label="ID" width="0" />
+ </scroll_list>
+
+<!-- bottom static -->
+ <button
+ follows="bottom"
height="20"
label="OK"
label_selected="OK"
layout="topleft"
- right="-120"
+ left="95"
+ top="-30"
name="Select"
width="100" />
<button
- follows="right|bottom"
+ follows="bottom"
height="20"
label="Cancel"
label_selected="Cancel"
layout="topleft"
- right="-10"
- left_pad="5"
+ left_delta="120"
+ top_delta="0"
name="Cancel"
width="100" />
+ <check_box
+ follows="left|bottom"
+ height="20"
+ initial_value="true"
+ label="Apply now"
+ layout="topleft"
+ left="6"
+ name="apply_immediate_check"
+ top_delta="0"
+ width="120" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 2d63c94fe1..e37740d20c 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
legacy_header_height="18"
height="580"
layout="topleft"
@@ -1206,6 +1206,7 @@ even though the user gets a free copy.
label="Modify"
layout="topleft"
left="10"
+ height="10"
name="checkbox next owner can modify"
width="85" />
<check_box
diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml
index fcaae9d172..d8211c24a7 100644
--- a/indra/newview/skins/default/xui/en/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/en/floater_toybox.xml
@@ -10,7 +10,7 @@
layout="topleft"
legacy_header_height="18"
name="Toybox"
- open_positioning="centered"
+ positioning="centered"
save_rect="true"
single_instance="true"
title="TOOLBAR BUTTONS"
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 d99b29f324..dce2720cf8 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- open_positioning="cascading"
+ positioning="cascading"
can_resize="true"
can_minimize="true"
can_close="true"
diff --git a/indra/newview/skins/default/xui/en/floater_voice_effect.xml b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
index 77fb21e27c..35cb2670d0 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
@@ -36,15 +36,20 @@
<string name="effect_Cyber">Cyber</string>
<string name="effect_DeepBot">DeepBot</string>
<string name="effect_Demon">Demon</string>
+ <string name="effect_Female Elf">Female Elf</string>
<string name="effect_Flirty">Flirty</string>
<string name="effect_Foxy">Foxy</string>
- <string name="effect_Halloween_2010_Bonus">Halloween_2010_Bonus</string>
+ <string name="effect_Halloween 2010 Bonus">Halloween_2010_Bonus</string>
<string name="effect_Helium">Helium</string>
<string name="effect_Husky">Husky</string>
+ <string name="effect_Husky Whisper">Husky Whisper</string>
<string name="effect_Intercom">Intercom</string>
+ <string name="effect_Julia">Julia</string>
+ <string name="effect_Lo Lilt">Lo Lilt</string>
<string name="effect_Macho">Macho</string>
<string name="effect_Micro">Micro</string>
<string name="effect_Mini">Mini</string>
+ <string name="effect_Model">Model</string>
<string name="effect_Nano">Nano</string>
<string name="effect_Nightmare">Nightmare</string>
<string name="effect_PopBot">PopBot</string>
@@ -52,10 +57,12 @@
<string name="effect_Radio">Radio</string>
<string name="effect_Robot">Robot</string>
<string name="effect_Roxanne">Roxanne</string>
+ <string name="effect_Rumble">Rumble</string>
<string name="effect_Sabrina">Sabrina</string>
<string name="effect_Samantha">Samantha</string>
<string name="effect_Sexy">Sexy</string>
<string name="effect_Shorty">Shorty</string>
+ <string name="effect_Smaller">Smaller</string>
<string name="effect_Sneaky">Sneaky</string>
<string name="effect_Stallion">Stallion</string>
<string name="effect_Sultry">Sultry</string>
diff --git a/indra/newview/skins/default/xui/en/floater_window_size.xml b/indra/newview/skins/default/xui/en/floater_window_size.xml
index 355d257785..115fe413f3 100644
--- a/indra/newview/skins/default/xui/en/floater_window_size.xml
+++ b/indra/newview/skins/default/xui/en/floater_window_size.xml
@@ -28,22 +28,50 @@
tool_tip="width x height"
top_pad="5"
width="179">
- <combo_box.item
- label="1000 x 700 (default)"
- name="item0"
- value="1000 x 700" />
- <combo_box.item
- label="1024 x 768"
- name="item1"
- value="1024 x 768" />
- <combo_box.item
- label="1280 x 720 (720p)"
- name="item2"
- value="1280 x 720" />
- <combo_box.item
- label="1920 x 1080 (1080p)"
- name="item3"
- value="1920 x 1080" />
+ <combo_box.item
+ label="1000 x 700 (default)"
+ name="item1"
+ value="1000 x 700" />
+ <combo_box.item
+ label="1024 x 768 (4:3 XGA)"
+ name="item2"
+ value="1024 x 768" />
+ <combo_box.item
+ label="1280 x 720 (16:9 HDTV)"
+ name="item3"
+ value="1280 x 720" />
+ <combo_box.item
+ label="1280 x 800 (5:8 WXGA)"
+ name="item4"
+ value="1280 x 800" />
+ <combo_box.item
+ label="1280 x 1024 (5:4 SXGA)"
+ name="item5"
+ value="1280 x 1024" />
+ <combo_box.item
+ label="1440 x 900 (8:5 WSXGA)"
+ name="item7"
+ value="1440 x 900" />
+ <combo_box.item
+ label="1600 x 900 (16:9 HD+)"
+ name="item8"
+ value="1600 x 900" />
+ <combo_box.item
+ label="1600 x 1200 (4:3 UXGA)"
+ name="item9"
+ value="1600 x 1200" />
+ <combo_box.item
+ label="1680 x 1050 (8:5 WSXGA+)"
+ name="item10"
+ value="1680 x 1050" />
+ <combo_box.item
+ label="1920 x 1080 (16:9 HDTV)"
+ name="item11"
+ value="1920 x 1080" />
+ <combo_box.item
+ label="1920 x 1200 (8:5 WUXGA)"
+ name="item12"
+ value="1920 x 1200" />
</combo_box>
<button
follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index 56d79f62c7..83407069d2 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -2,7 +2,7 @@
<floater
legacy_header_height="18"
can_resize="true"
- open_positioning="centered"
+ positioning="centered"
height="600"
layout="topleft"
min_height="520"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index ef4a1bc061..b13bf5b508 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -453,6 +453,14 @@
layout="topleft"
name="Copy Separator" />
<menu_item_call
+ label="Cut"
+ layout="topleft"
+ name="Cut">
+ <menu_item_call.on_click
+ function="Inventory.DoToSelected"
+ parameter="cut" />
+ </menu_item_call>
+ <menu_item_call
label="Copy"
layout="topleft"
name="Copy">
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 1d11abcf73..5ba566b175 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3268,6 +3268,14 @@
<menu_item_call.on_click
function="Advanced.CompressImage" />
</menu_item_call>
+
+ <menu_item_call
+ label="Enable Visual Leak Detector"
+ name="Enable Visual Leak Detector">
+ <menu_item_call.on_click
+ function="Advanced.ToggleVisualLeakDetector" />
+ </menu_item_call>
+
<menu_item_check
label="Output Debug Minidump"
name="Output Debug Minidump">
@@ -3294,6 +3302,7 @@
name="Set Logging Level"
tear_off="true">
<menu_item_check
+ name="Debug"
label="Debug">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
@@ -3303,6 +3312,7 @@
parameter="0" />
</menu_item_check>
<menu_item_check
+ name="Info"
label="Info">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
@@ -3312,6 +3322,7 @@
parameter="1" />
</menu_item_check>
<menu_item_check
+ name="Warning"
label="Warning">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
@@ -3321,6 +3332,7 @@
parameter="2" />
</menu_item_check>
<menu_item_check
+ name="Error"
label="Error">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
@@ -3330,6 +3342,7 @@
parameter="3" />
</menu_item_check>
<menu_item_check
+ name="None"
label="None">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 59dd17ea9d..afc5b916e7 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -7696,4 +7696,31 @@ Otherwise, you can look at the Map and find places marked &quot;Infohub&quot;.
You died and have been teleported to your home location.
</global>
+ <notification
+ icon="alertmodal.tga"
+ name="LocalBitmapsUpdateFileNotFound"
+ persist="true"
+ type="notify">
+[FNAME] could not be updated because the file could no longer be found.
+Disabling future updates for this file.
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="LocalBitmapsUpdateFailedFinal"
+ persist="true"
+ type="notify">
+[FNAME] could not be opened or decoded for [NRETRIES] attempts, and is now considered broken.
+Disabling future updates for this file.
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="LocalBitmapsVerifyFail"
+ persist="true"
+ type="notify">
+Attempted to add an invalid or unreadable image file [FNAME] which could not be opened or decoded.
+Attempt cancelled.
+ </notification>
+
</notifications>
diff --git a/indra/newview/skins/default/xui/en/panel_chat_item.xml b/indra/newview/skins/default/xui/en/panel_chat_item.xml
index 1b97de2b05..1ef99649e6 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_item.xml
@@ -18,6 +18,7 @@
<text_chat
top="3"
left="30"
+ right="-10"
height="120"
text_color="white"
word_wrap="true"
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 e9427a2388..3f67a48b14 100644
--- a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
+++ b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
@@ -85,6 +85,7 @@
top_delta="0"
width="95" />
<check_box
+ height="10"
bottom_delta="20"
follows="left|top"
label="Constrain proportions"
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
index 9057ebb65e..71d808fa4b 100644
--- a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
@@ -114,6 +114,7 @@
width="95" />
<check_box
bottom_delta="20"
+ height="10"
follows="left|top"
label="Constrain proportions"
layout="topleft"
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 b966358f18..781ab17403 100644
--- a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
@@ -132,6 +132,7 @@
width="95" />
<check_box
bottom_delta="20"
+ height="10"
follows="left|top"
label="Constrain proportions"
layout="topleft"
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 5bd383b81e..0dd357aa1a 100644
--- a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
@@ -119,6 +119,7 @@
top_delta="0"
width="95" />
<check_box
+ height="10"
bottom_delta="20"
label="Constrain proportions"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 22c1139cdb..3aa34439f1 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -35,8 +35,8 @@
</panel.string>
<panel
height="18"
- left="-370"
- width="160"
+ left="-395"
+ width="185"
top="1"
follows="right|top"
name="balance_bg">
diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml
index 0b5aff54ca..37a904bca8 100644
--- a/indra/newview/skins/default/xui/en/panel_toast.xml
+++ b/indra/newview/skins/default/xui/en/panel_toast.xml
@@ -10,7 +10,6 @@
-->
<floater
- open_positioning="none"
legacy_header_height="0"
header_height="0"
name="toast"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index ee790e8dd4..6ecb57b41d 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -48,10 +48,10 @@
height="300"
width="330" />
</layout_panel>
- <layout_panel
+ <layout_panel
width="330"
layout="topleft"
- auto_resize="true"
+ auto_resize="false"
user_resize="true"
follows="left|right|top"
name="inbox_layout_panel"
@@ -105,6 +105,7 @@
[NUM] new
</text>
<panel
+ name="inbox_inventory_placeholder_panel"
follows="all"
left="10"
bottom="235"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 9752652679..4ccec4838a 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -403,8 +403,9 @@ Please try logging in again in a minute.</string>
<string name="AddAndRemoveJoints">Add and remove joints with other objects</string>
<string name="ChangePermissions">Change its permissions</string>
<string name="TrackYourCamera">Track your camera</string>
- <string name="ControlYourCamera">Control your camera</string>
- <string name="NotConnected">Not Connected</string>
+ <string name="ControlYourCamera">Control your camera</string>
+ <string name="TeleportYourAgent">Teleport you</string>
+ <string name="NotConnected">Not Connected</string>
<!-- Sim Access labels -->
<string name="SIM_ACCESS_PG">General</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml
index adbb183317..97a5ae7d4e 100644
--- a/indra/newview/skins/default/xui/en/widgets/floater.xml
+++ b/indra/newview/skins/default/xui/en/widgets/floater.xml
@@ -2,7 +2,7 @@
<!-- See also settings.xml UIFloater* settings for configuration -->
<floater
name="floater"
- open_positioning="none"
+ positioning="none"
layout="topleft"
bg_opaque_color="FloaterFocusBackgroundColor"
bg_alpha_color="FloaterDefaultBackgroundColor"
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 6b8a1ff906..fd54d74af2 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -373,7 +373,7 @@ 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">
- a los avatares de esta parcela y chatear con ellos
+ Los avatares de otras parcelas pueden ver a los avatares de esta parcela y chatear con ellos
</text>
<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">
@@ -460,12 +460,12 @@ los media:
<text name="Limit access to this parcel to:">
Acceso a esta parcela
</text>
- <check_box label="Permitir el acceso p繳blico [MATURITY]" name="public_access"/>
+ <check_box label="Permitir el acceso p繳blico (si no seleccionas esta opci籀n, se crear獺n l穩neas de prohibici籀n)" name="public_access"/>
<text name="Only Allow">
- Restringir el acceso a residentes verificados con:
+ Permitir 繳nicamente el acceso a los Residentes que:
</text>
- <check_box label="Informaci籀n de pago aportada [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Expulsa a los Residentes no identificados."/>
- <check_box label="Verificaci籀n de edad [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Expulsa a los Residentes que no hayan verificado su edad. M獺s informaci籀n en [SUPPORT_SITE]."/>
+ <check_box label="Han aportado informaci籀n de pago [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Para poder acceder a esta parcela los Residentes deben haber aportado informaci籀n de pago en su cuenta. Para m獺s informaci籀n, ver [SUPPORT_SITE]."/>
+ <check_box label="Han verificado su edad [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Para poder acceder a esta parcela los Residentes deben haber verificado su edad. Para m獺s informaci籀n, ver [SUPPORT_SITE]."/>
<check_box label="Acceso permitido al grupo: [GROUP]" name="GroupCheck" tool_tip="Elija el grupo en la pesta簽a General."/>
<check_box label="Vender pases a:" name="PassCheck" tool_tip="Permitir acceso temporal a esta parcela"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/es/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/es/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..a7c17fc136
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_merchant_outbox.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_merchant_outbox" title="BUZN DE SALIDA DE COMERCIANTE">
+ <string name="OutboxFolderCount1">
+ 1 carpeta
+ </string>
+ <string name="OutboxFolderCountN">
+ [NUM] carpetas
+ </string>
+ <string name="OutboxImporting">
+ Enviando carpetas...
+ </string>
+ <string name="OutboxInitializing">
+ Inicializando...
+ </string>
+ <panel label="">
+ <panel>
+ <panel name="outbox_inventory_placeholder_panel">
+ <text name="outbox_inventory_placeholder_title">
+ Cargando...
+ </text>
+ </panel>
+ </panel>
+ <panel>
+ <button label="Enviar al Mercado" name="outbox_import_btn" tool_tip="Poner en el escaparate de Mi Mercado"/>
+ </panel>
+ </panel>
+</floater>
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 e27db5a1c4..5bd6b5e0e5 100644
--- a/indra/newview/skins/default/xui/es/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/es/floater_model_wizard.xml
@@ -6,12 +6,12 @@
<button label="2. Optimizar" name="optimize_btn"/>
<button label="1. Seleccionar archivo" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
Elige el archivo de modelo
</text>
</panel>
- <panel name="content">
+ <panel name="choose_file_content">
<text name="advanced_users_text">
Usuarios avanzados: si tienes experiencia con las herramientas de creaci籀n de contenidos 3D, quiz獺 te interese utilizar la funci籀n de subida avanzada.
</text>
@@ -19,7 +19,7 @@
<text name="Cache location">
Elige el archivo de modelo que deseas subir
</text>
- <button label="Buscar..." label_selected="Buscar..." name="browse"/>
+ <button label="Examinar..." label_selected="Examinar..." name="browse"/>
<text name="Model types">
Second Life admite los archivos COLLADA (.dae)
</text>
@@ -35,15 +35,15 @@
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
Optimizar el modelo
</text>
</panel>
- <text name="description">
+ <text name="optimize_description">
Hemos optimizado el rendimiento del modelo, pero puedes ajustarlo m獺s si lo deseas.
</text>
- <panel name="content">
+ <panel name="optimize_content">
<text name="high_detail_text">
Generar el nivel de detalle: Alto
</text>
@@ -79,15 +79,15 @@
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
Ajustar la f穩sica
</text>
</panel>
- <text name="description">
+ <text name="physics_description">
Crearemos una forma para la apariencia exterior del modelo. Ajusta el nivel de detalle de la forma seg繳n se necesite para el prop籀sito proyectado del modelo.
</text>
- <panel name="content">
+ <panel name="physics_content">
<button label="Recalcular f穩sica" name="recalculate_physics_btn"/>
<button label="Recalculando..." name="recalculating_physics_btn"/>
<text name="lod_label">
@@ -110,12 +110,12 @@
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Revisar
</text>
</panel>
- <panel name="content">
+ <panel name="review_content">
<text name="review_prim_equiv">
Impacto en la parcela/regi籀n: [EQUIV] equivalentes en prim
</text>
@@ -128,8 +128,8 @@
</panel>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
Subida finalizada
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/es/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/es/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..b479d5f6d6
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_test_layout_stacks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="LAYOUTSTACK TESTS"/>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml
index bcdc25894f..9d0a8c50ef 100644
--- a/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
<menu_item_call label="Tocar" name="touch"/>
<menu_item_call label="Sentarse" name="sit"/>
<menu_item_call label="Pagar" name="pay"/>
@@ -12,7 +12,8 @@
<menu_item_call label="A簽adir" name="add"/>
<menu_item_call label="Denunciar" name="report"/>
<menu_item_call label="Ignorar" name="block"/>
+ <menu_item_call label="No ignorar" name="unblock"/>
<menu_item_call label="Acercar el zoom" name="zoom_in"/>
<menu_item_call label="Quitar" name="remove"/>
<menu_item_call label="M獺s informaci籀n" name="more_info"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml
index f1f1ef091f..4a8f37dee4 100644
--- a/indra/newview/skins/default/xui/es/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/es/menu_inventory.xml
@@ -84,6 +84,6 @@
<menu_item_call label="A簽adir" name="Wearable Add"/>
<menu_item_call label="Quitarse" name="Take Off"/>
<menu_item_call label="Copiar al Buz籀n de salida de comerciante" name="Merchant Copy"/>
- <menu_item_call label="Mover al Buz籀n de salida de comerciante" name="Merchant Move"/>
+ <menu_item_call label="Enviar al Mercado" name="Marketplace Send"/>
<menu_item_call label="--sin opciones--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml
index e3abf7ad62..289ac3f075 100644
--- a/indra/newview/skins/default/xui/es/menu_login.xml
+++ b/indra/newview/skins/default/xui/es/menu_login.xml
@@ -16,8 +16,8 @@
<menu_item_call label="Definir el tama簽o de la ventana..." name="Set Window Size..."/>
<menu_item_call label="Mostrar los &apos;TOS&apos;" name="TOS"/>
<menu_item_call label="Mostrar mensaje cr穩tico" name="Critical"/>
- <menu_item_call label="Prueba de navegadores de medios" name="Web Browser Test"/>
<menu_item_call label="Prueba de depuraci籀n de ventanas de contenido web" name="Web Content Floater Debug Test"/>
+ <menu label="Configurar el nivel de registro" name="Set Logging Level"/>
<menu_item_check label="Mostrar el selector de Grid" name="Show Grid Picker"/>
<menu_item_call label="Mostrar la consola de notificaciones" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 4762e3f4a4..9522d4eac6 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -14,14 +14,13 @@
<menu_item_check label="Volar" name="Fly"/>
<menu_item_check label="Correr siempre" name="Always Run"/>
<menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/>
+ <menu_item_call label="Caminar / Correr / Volar..." name="Walk / run / fly"/>
</menu>
<menu label="Estado" name="Status">
<menu_item_call label="Ausente" name="Set Away"/>
<menu_item_call label="Ocupado" name="Set Busy"/>
</menu>
- <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="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>
@@ -63,7 +62,7 @@
<menu_item_check label="Propiedades de la parcela" name="Parcel Properties"/>
<menu_item_check label="Men繳 Avanzado" name="Show Advanced Menu"/>
</menu>
- <menu label="Sol" name="Environment Settings">
+ <menu label="Sol" name="Sun">
<menu_item_call label="Amanecer" name="Sunrise"/>
<menu_item_call label="Mediod穩a" name="Noon"/>
<menu_item_call label="Atardecer" name="Sunset"/>
@@ -178,22 +177,22 @@
<menu_item_check label="Mostrar el Punto de Mira en la vista subjetiva" name="ShowCrosshairs"/>
</menu>
<menu label="Objetos representados" name="Rendering Types">
- <menu_item_check label="Simple" name="Simple"/>
- <menu_item_check label="Alfa" name="Alpha"/>
- <menu_item_check label="rbol" name="Tree"/>
- <menu_item_check label="Avatares" name="Character"/>
- <menu_item_check label="Parche de superficie" name="Surface Patch"/>
- <menu_item_check label="Cielo" name="Sky"/>
- <menu_item_check label="Agua" name="Water"/>
- <menu_item_check label="Terreno" name="Ground"/>
- <menu_item_check label="volumen" name="Volume"/>
- <menu_item_check label="Hierba" name="Grass"/>
- <menu_item_check label="Nubes" name="Clouds"/>
- <menu_item_check label="Part穩culas" name="Particles"/>
- <menu_item_check label="Efectos de relieve" name="Bump"/>
+ <menu_item_check label="Simple" name="Rendering Type Simple"/>
+ <menu_item_check label="Alfa" name="Rendering Type Alpha"/>
+ <menu_item_check label="rbol" name="Rendering Type Tree"/>
+ <menu_item_check label="Avatares" name="Rendering Type Character"/>
+ <menu_item_check label="Parcela de superficie" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="Cielo" name="Rendering Type Sky"/>
+ <menu_item_check label="Agua" name="Rendering Type Water"/>
+ <menu_item_check label="Terreno" name="Rendering Type Ground"/>
+ <menu_item_check label="Volumen" name="Rendering Type Volume"/>
+ <menu_item_check label="Hierba" name="Rendering Type Grass"/>
+ <menu_item_check label="Nubes" name="Rendering Type Clouds"/>
+ <menu_item_check label="Part穩culas" name="Rendering Type Particles"/>
+ <menu_item_check label="Efectos de relieve" name="Rendering Type Bump"/>
</menu>
<menu label="Rasgos renderizados" name="Rendering Features">
- <menu_item_check label="UI" name="UI"/>
+ <menu_item_check label="UI" name="ToggleUI"/>
<menu_item_check label="Seleccionado" name="Selected"/>
<menu_item_check label="Realzados" name="Highlighted"/>
<menu_item_check label="Texturas din獺micas" name="Dynamic Textures"/>
@@ -206,8 +205,6 @@
<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_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"/>
@@ -216,13 +213,6 @@
<menu_item_check label="Flycam del joystick" name="Joystick Flycam"/>
<menu_item_call label="Volver a la vista por defecto" name="Reset View"/>
<menu_item_call label="Mirar al 繳ltimo que habl籀" name="Look at Last Chatter"/>
- <menu label="Seleccionar la herramienta de construcci籀n" name="Select Tool">
- <menu_item_call label="Herramienta Visi籀n" name="Focus"/>
- <menu_item_call label="Herramienta Mover" name="Move"/>
- <menu_item_call label="Herramienta Editar" name="Edit"/>
- <menu_item_call label="Herramienta Crear" name="Create"/>
- <menu_item_call label="Herramienta Terreno" name="Land"/>
- </menu>
<menu_item_call label="Acercar el zoom" name="Zoom In"/>
<menu_item_call label="Zoom por defecto" name="Zoom Default"/>
<menu_item_call label="Alejar el zoom" name="Zoom Out"/>
@@ -278,6 +268,7 @@
<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="Bytes de adjunto" name="attachment bytes"/>
<menu_item_check label="Esculpir" name="Sculpt"/>
</menu>
<menu label="Rendering" name="Rendering">
@@ -300,11 +291,10 @@
<menu_item_call label="Drop a Packet" name="Drop a Packet"/>
</menu>
<menu_item_call label="Bumps, Pushes &amp; Hits" name="Bumps, Pushes &amp;amp; Hits"/>
- <menu label="World" name="World">
- <menu_item_check label="Region Sun Override" name="Sim Sun Override"/>
- <menu_item_check label="Beacon flashing effect" name="Cheesy Beacon"/>
- <menu_item_check label="Fixed Weather" name="Fixed Weather"/>
- <menu_item_call label="Dump Region Object Cache" name="Dump Region Object Cache"/>
+ <menu label="Mundo virtual" name="DevelopWorld">
+ <menu_item_check label="Anular el sol del Sim" name="Sim Sun Override"/>
+ <menu_item_check label="Meteorolog穩a fija" name="Fixed Weather"/>
+ <menu_item_call label="Volcar la cach矇 de objetos de la regi籀n" name="Dump Region Object Cache"/>
</menu>
<menu label="UI" name="UI">
<menu_item_call label="Prueba de navegadores de medios" name="Web Browser Test"/>
@@ -324,11 +314,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="Head" name="Head"/>
- <menu_item_call label="Upper Body" name="Upper Body"/>
- <menu_item_call label="Lower Body" name="Lower Body"/>
- <menu_item_call label="Skirt" name="Skirt"/>
+ <menu_item_call label="Iris" name="Grab Iris"/>
+ <menu_item_call label="Cabeza" name="Grab Head"/>
+ <menu_item_call label="Parte superior del cuerpo" name="Grab Upper Body"/>
+ <menu_item_call label="Parte inferior del cuerpo" name="Grab Lower Body"/>
+ <menu_item_call label="Falda" name="Grab Skirt"/>
</menu>
<menu label="Character Tests" name="Character Tests">
<menu_item_call label="Toggle Character Geometry" name="Toggle Character Geometry"/>
@@ -345,17 +335,19 @@
<menu_item_check label="HTTP Textures" name="HTTP Textures"/>
<menu_item_check label="Inventario HTTP" name="HTTP Inventory"/>
<menu_item_check label="Console Window on next Run" name="Console Window"/>
+ <menu label="Configurar el nivel de registro" name="Set Logging Level"/>
<menu_item_call label="Request Admin Status" name="Request Admin Options"/>
<menu_item_call label="Leave Admin Status" name="Leave Admin Options"/>
<menu_item_check label="Show Admin Menu" name="View Admin Options"/>
</menu>
<menu label="Admin" name="Admin">
- <menu label="Object">
- <menu_item_call label="Coger una copia" name="Take Copy"/>
- <menu_item_call label="Force Owner To Me" name="Force Owner To Me"/>
- <menu_item_call label="Force Owner Permissive" name="Force Owner Permissive"/>
+ <menu label="Objeto" name="AdminObject">
+ <menu_item_call label="Tomar una copia" name="Admin Take Copy"/>
+ <menu_item_call label="Forzar que yo sea el propietario" name="Force Owner To Me"/>
+ <menu_item_call label="Forzar permiso al propietario" name="Force Owner Permissive"/>
<menu_item_call label="Eliminar" name="Delete"/>
- <menu_item_call label="Lock" name="Lock"/>
+ <menu_item_call label="Bloquear" name="Lock"/>
+ <menu_item_call label="Obtener ID de objetos" name="Get Assets IDs"/>
</menu>
<menu label="Parcel" name="Parcel">
<menu_item_call label="Force Owner To Me" name="Owner To Me"/>
@@ -372,5 +364,16 @@
<menu label="Take Off Clothing" name="Take Off Clothing">
<menu_item_call label="F穩sica" name="Physics"/>
</menu>
+ <menu label="Ayuda" name="DeprecatedHelp">
+ <menu_item_call label="Blog oficial" name="Official Linden Blog"/>
+ <menu_item_call label="Portal de programaci籀n" name="Scripting Portal"/>
+ <menu label="Informes de fallos" name="Bug Reporting">
+ <menu_item_call label="Public Issue Tracker" name="Public Issue Tracker"/>
+ <menu_item_call label="Ayuda del Public Issue Tracker" name="Publc Issue Tracker Help"/>
+ <menu_item_call label="Informes de fallos - instrucciones" name="Bug Reporing 101"/>
+ <menu_item_call label="Problemas de seguridad" name="Security Issues"/>
+ <menu_item_call label="Wiki QA" name="QA Wiki"/>
+ </menu>
+ </menu>
</menu>
</menu_bar>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index e0a20683c5..d47c3d7ad8 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -86,17 +86,38 @@ Aseg繳rate de que tu conexi籀n a Internet est獺 funcionando adecuadamente.
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="No guardarlos" yestext="Guardarlos"/>
</notification>
<notification name="ConfirmNoCopyToOutbox">
- No tienes permiso para copiar este objeto en el Buz籀n de salida de comerciante. 聶Est獺s seguro de que quieres mover el objeto siguiente?
- [ITEM_NAME]
- <usetemplate name="okcancelbuttons" notext="No" yestext="S穩"/>
+ No tienes permiso para copiar uno o varios de estos objetos en el Buz籀n de salida de comerciante. Puedes moverlos o dej獺rtelos.
+ <usetemplate name="okcancelbuttons" notext="No mover objeto(s)" yestext="Mover objeto(s)"/>
+ </notification>
+ <notification name="OutboxFolderCreated">
+ Se ha creado una carpeta nueva para cada objeto que has transferido al nivel superior de tu Buz籀n de salida de comerciante.
+ <usetemplate ignoretext="Se ha creado una carpeta nueva en el Buz籀n de salida de comerciante" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadComplete">
- Env穩o al mercado finalizado.
- <usetemplate name="okbutton" yestext="癒Hurra!"/>
+ <notification name="OutboxImportComplete">
+ xito
+
+Todas las carpetas se han enviado correctamente al Mercado.
+ <usetemplate ignoretext="Todas las carpetas enviadas al Mercado" name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportHadErrors">
+ Algunas carpetas no se han transferido
+
+Han ocurrido errores al enviar algunas carpetas al Mercado. Dichas carpetas todav穩a est獺n en tu Buz籀n de salida de comerciante.
+
+Puedes consultar m獺s informaci籀n en el [[MARKETPLACE_IMPORTS_URL] registro de errores].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="OutboxUploadHadErrors">
- El env穩o al mercado ha tenido errores. Corrige los problemas de tu buz籀n de salida y repite la operaci籀n. Muchas gracias.
- <usetemplate name="okbutton" yestext="Reintentar"/>
+ <notification name="OutboxImportFailed">
+ Error de transferencia
+
+No se han enviado carpetas al Mercado a causa de un error del sistema o de la red. Vuelve a intentarlo m獺s tarde.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxInitFailed">
+ Error al inicializar el mercado
+
+La inicializaci籀n del mercado ha fallado por un error del sistema o de la red. Vuelve a intentarlo m獺s tarde.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CompileQueueSaveText">
Hubo un problema al subir el texto de un script por la siguiente raz籀n: [REASON]. Por favor, int矇ntalo m獺s tarde.
@@ -1442,8 +1463,8 @@ Debemos reiniciar [APP_NAME] para instalar la actualizaci籀n.
<usetemplate ignoretext="Confirmar antes de devolver objetos a sus propietarios." name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- Actualmente, eres miembro del grupo &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
-聶Dejar el grupo?
+ Actualmente perteneces al grupo &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
+聶Deseas abandonar el grupo?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
@@ -2823,6 +2844,18 @@ Con los siguientes residentes:
[RESIDENTS]
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
+ <notification name="ShareFolderConfirmation">
+ S籀lo puedes compartir una carpeta en cada momento.
+
+聶Est獺s seguro de que quieres compartir los elementos siguientes?
+
+&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
+
+Con los siguientes Residentes:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Aceptar"/>
+ </notification>
<notification name="ItemsShared">
Los elementos se han compartido correctamente.
</notification>
diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml
index 3d0de4f083..84c1ed7686 100644
--- a/indra/newview/skins/default/xui/es/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml
@@ -23,10 +23,10 @@
<check_box label="Permitir el acceso p繳blico" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Restringir el acceso a cuentas verificadas por:
+ Permitir 繳nicamente el acceso a los Residentes que:
</text>
- <check_box label="Informaci籀n de pago aportada" name="limit_payment" tool_tip="Expulsa a los Residentes no identificados."/>
- <check_box label="Verificaci籀n de la edad" name="limit_age_verified" tool_tip="Expulsa a los Residentes que no hayan verificado su edad. M獺s informaci籀n en [SUPPORT_SITE]."/>
+ <check_box label="Han aportado la informaci籀n de pago." name="limit_payment" tool_tip="Para poder acceder a este estado los Residentes deben haber aportado informaci籀n de pago en su cuenta. Para m獺s informaci籀n, ver [SUPPORT_SITE]."/>
+ <check_box label="Han verificado su edad" name="limit_age_verified" tool_tip="Para poder acceder a este estado los Residentes deben haber verificado su edad. Para m獺s informaci籀n, ver [SUPPORT_SITE]."/>
<check_box label="Permitir el chat de voz" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Permitir el teleporte a cualquier punto" name="allow_direct_teleport"/>
diff --git a/indra/newview/skins/default/xui/es/panel_script_ed.xml b/indra/newview/skins/default/xui/es/panel_script_ed.xml
index 46952c6974..4c4077b96f 100644
--- a/indra/newview/skins/default/xui/es/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/es/panel_script_ed.xml
@@ -22,6 +22,8 @@
<menu label="Archivo" name="File">
<menu_item_call label="Guardar" name="Save"/>
<menu_item_call label="Deshacer todos los cambios" name="Revert All Changes"/>
+ <menu_item_call label="Cargar desde archivo..." name="LoadFromFile"/>
+ <menu_item_call label="Guardar en archivo..." name="SaveToFile"/>
</menu>
<menu label="Editar" name="Edit">
<menu_item_call label="Deshacer" name="Undo"/>
diff --git a/indra/newview/skins/default/xui/es/panel_status_bar.xml b/indra/newview/skins/default/xui/es/panel_status_bar.xml
index 79b2c32b23..7eead3bc18 100644
--- a/indra/newview/skins/default/xui/es/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/es/panel_status_bar.xml
@@ -15,7 +15,7 @@
<panel.string name="buycurrencylabel">
[AMT] L$
</panel.string>
- <panel name="balance_bg">
+ <panel left="-410" name="balance_bg" width="200">
<text name="balance" tool_tip="Haz clic para actualizar tu saldo en L$" value="20 L$"/>
<button label="Comprar L$" name="buyL" tool_tip="Pulsa para comprar m獺s L$"/>
<button label="Comprar" name="goShop" tool_tip="Abrir el mercado de Second Life" width="80"/>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
index 79d0cb84e8..f68dcc65e3 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
@@ -2,47 +2,24 @@
<panel label="Cosas" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<layout_stack name="inventory_layout_stack">
- <layout_panel name="inbox_outbox_layout_panel">
- <layout_stack name="inbox_outbox_layout_stack">
- <layout_panel name="inbox_layout_panel">
- <panel label="" name="marketplace_inbox">
- <string name="InboxLabelWithArg">
- Objetos recibidos ([NUM])
- </string>
- <string name="InboxLabelNoArg">
- Objetos recibidos
- </string>
- <button label="Objetos recibidos" name="inbox_btn"/>
- <text name="inbox_fresh_new_count">
- [NUM] nuevos
- </text>
- <panel tool_tip="Drag and drop items to your inventory to manage and use them">
- <text name="inbox_inventory_placeholder">
- Aqu穩 se entregar獺n las compras realizadas en el mercado.
- </text>
- </panel>
- </panel>
- </layout_panel>
- <layout_panel name="outbox_layout_panel">
- <panel label="" name="marketplace_outbox">
- <string name="OutboxLabelWithArg">
- Buz籀n de salida de comerciante ([NUM])
- </string>
- <string name="OutboxLabelNoArg">
- Buz籀n de salida de comerciante
- </string>
- <button label="Buz籀n de salida de comerciante" name="outbox_btn"/>
- <button label="" name="outbox_sync_btn" tool_tip="Poner en el escaparate de Mi Mercado"/>
- <panel>
- <panel name="outbox_inventory_placeholder_panel">
- <text name="outbox_inventory_placeholder_title">
- Cargando...
- </text>
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Objetos recibidos ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Objetos recibidos
+ </string>
+ <button label="Objetos recibidos" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] nuevos
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Aqu穩 se entregar獺n las compras realizadas en el mercado.
+ </text>
+ </panel>
+ </panel>
</layout_panel>
</layout_stack>
<panel name="button_panel">
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 2a6f32f84f..67c65c6ce9 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -171,9 +171,9 @@ Actualmente, solo se permite iniciar sesi籀n a los empleados.
Consulta www.secondlife.com/status si deseas obtener actualizaciones.
</string>
<string name="LoginFailedPremiumOnly">
- Se ha restringido de manera temporal el inicio de sesi籀n en Second Life con el fin de garantizar una experiencia 籀ptima a nuestros residentes.
-
-Aquellos usuarios que dispongan de cuentas gratuitas no podr獺n acceder a Second Life durante este per穩odo de tiempo, ya que el prop籀sito de esta medida es obtener espacio suficiente para los residentes que hayan pagado por acceder a Second Life.
+ Las conexiones a Second Life se han restringido provisionalmente para garantizar que los usuarios que ya est獺n conectados tengan la mejor experiencia posible.
+
+Durante este tiempo, las personas con cuentas gratuitas no podr獺n acceder a Second Life, ya que tienen prioridad los usuarios con una cuenta de pago.
</string>
<string name="LoginFailedComputerProhibited">
No se puede acceder a Second Life desde este ordenador.
@@ -330,17 +330,35 @@ Intenta iniciar sesi籀n de nuevo en unos instantes.
Aqu穩 se puede arrastrar s籀lo un 穩tem
</string>
<string name="TooltipPrice" value="[AMOUNT] L$:"/>
+ <string name="TooltipOutboxDragToWorld">
+ No puedes colocar objetos en tu buz籀n de salida de comerciante
+ </string>
<string name="TooltipOutboxNoTransfer">
- Uno o varios de estos objetos no se pueden vender o transferir a otro usuario.
+ Uno o varios de estos objetos no se pueden vender o transferir.
+ </string>
+ <string name="TooltipOutboxNotInInventory">
+ Tu buz籀n de salida de comerciante s籀lo puede aceptar objetos procedentes directamente de tu inventario
</string>
<string name="TooltipOutboxWorn">
- Llevas puestos uno o m獺s de estos objetos. Qu穩tatelos del avatar y vuelve a intentar moverlos.
+ No puedes poner art穩culos que llevas puestos en el buz籀n de salida de comerciante
+ </string>
+ <string name="TooltipOutboxCallingCard">
+ No puedes poner tarjetas de visita en tu buz籀n de salida de comerciante
</string>
<string name="TooltipOutboxFolderLevels">
- Esta carpeta tiene demasiados niveles de subcarpetas. Reorganiza las carpetas interiores de forma que tengas como m獺ximo 4 niveles de profundidad (la carpeta ra穩z contiene A, que contiene B, que contiene C).
+ La profundidad de carpetas anidadas excede de 3
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ El n繳mero de subcarpetas de la carpeta de nivel superior excede de 20
</string>
<string name="TooltipOutboxTooManyObjects">
- Esta carpeta contiene m獺s de 200 objetos. Guarda algunos objetos en una caja para disminuir su cantidad.
+ El n繳mero de elementos de la carpeta de nivel superior excede de 200
+ </string>
+ <string name="TooltipDragOntoOwnChild">
+ No puedes mover una carpeta a su carpeta secundaria
+ </string>
+ <string name="TooltipDragOntoSelf">
+ No puedes mover una carpeta dentro de s穩 misma
</string>
<string name="TooltipHttpUrl">
Pulsa para ver esta p獺gina web
@@ -961,6 +979,9 @@ Intenta iniciar sesi籀n de nuevo en unos instantes.
<string name="choose_the_directory">
Elegir directorio
</string>
+ <string name="script_files">
+ Scripts
+ </string>
<string name="AvatarSetNotAway">
Salir del estado ausente
</string>
@@ -1199,43 +1220,36 @@ Intenta iniciar sesi籀n de nuevo en unos instantes.
No tienes en tu inventario una copia de esta textura
</string>
<string name="InventoryInboxNoItems">
- 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.
+ Aqu穩 aparecer獺n algunos de los objetos que recibas, como los regalos Premium. Despu矇s puedes arrastrarlos a tu inventario.
</string>
<string name="MarketplaceURL">
- http://marketplace.[DOMAIN_NAME]
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
</string>
<string name="MarketplaceURL_CreateStore">
- http://marketplace.[DOMAIN_NAME]/create_store
+ http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4
</string>
- <string name="MarketplaceURL_LearnMore">
- http://marketplace.[DOMAIN_NAME]/learn_more
- </string>
- <string name="InventoryOutboxCreationErrorTitle">
- Tu Buz籀n de salida de comerciante no est獺 configurado correctamente
+ <string name="MarketplaceURL_Dashboard">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard
</string>
- <string name="InventoryOutboxCreationErrorTooltip">
- Error de configuraci籀n del Buz籀n de salida de comerciante
+ <string name="MarketplaceURL_Imports">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports
</string>
- <string name="InventoryOutboxCreationError">
- Ponte en contacto con el servicio de atenci籀n al cliente para resolver el problema.
+ <string name="MarketplaceURL_LearnMore">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryOutboxNotMerchantTitle">
- Cualquiera puede vender objetos en el mercado
- </string>
- <string name="InventoryOutboxNotMerchantTooltip">
- 癒Hazte comerciante!
+ Cualquier usuario puede vender objetos en el mercado.
</string>
+ <string name="InventoryOutboxNotMerchantTooltip"/>
<string name="InventoryOutboxNotMerchant">
- [[MARKETPLACE_URL] El Mercado de Second Life] pone en venta m獺s de un mill籀n de productos virtuales, todos ellos creados por residentes. T繳 tambi矇n puedes vender los objetos que crees, as穩 como algunos de los objetos que hayas comprado. Es f獺cil y es gratuito. [[LEARN_MORE_URL] M獺s informaci籀n] o [[CREATE_STORE_URL] crea una tienda] en el mercado para empezar.
+ Para hacerte comerciante debes [[MARKETPLACE_CREATE_STORE_URL] crear una tienda del Mercado].
</string>
<string name="InventoryOutboxNoItemsTitle">
- Una nueva forma para enviar objetos al mercado
- </string>
- <string name="InventoryOutboxNoItemsTooltip">
- Arrastra y coloca aqu穩 los objetos que desees preparar para venderlos en el mercado
+ El buz籀n de salida est獺 vac穩o.
</string>
+ <string name="InventoryOutboxNoItemsTooltip"/>
<string name="InventoryOutboxNoItems">
- Arrastra a esta zona los objetos o carpetas que desees vender. Aparecer獺 una copia del objeto, sin quitarlo de tu inventario, salvo que el objeto arrastrado sea &quot;no copiable&quot;. Cuando est矇s listo para enviar los objetos al mercado, pulsa en el bot籀n Subir. Cuando se hayan trasladado los objetos a tu inventario en el mercado, desaparecer獺n de esta carpeta.
+ Arrastra carpetas a esta secci籀n y pulsa en &quot;Enviar al Mercado&quot; para incluirlas en la lista de venta del [[MARKETPLACE_DASHBOARD_URL] Mercado].
</string>
<string name="Marketplace Error None">
Sin errores
@@ -4017,7 +4031,7 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
</string>
<string name="uploading_abuse_report">
Subiendo...
-
+
Denuncia de infracci籀n
</string>
<string name="New Shape">
@@ -4285,7 +4299,7 @@ Denuncia de infracci籀n
<string name="server_is_down">
Parece que hay alg繳n problema que ha escapado a nuestros controles.
- Visita status.secondlifegrid.net para ver si hay alguna incidencia conocida que est矇 afectando al servicio.
+ Visita status.secondlifegrid.net para ver si hay alguna incidencia conocida que est矇 afectando al servicio.
Si sigues teniendo problemas, comprueba la configuraci籀n de la red y del servidor de seguridad.
</string>
<string name="dateTimeWeekdaysNames">
@@ -4752,6 +4766,9 @@ Int矇ntalo incluyendo la ruta de acceso al editor entre comillas
<string name="Command_Move_Label">
Caminar / Correr / Volar
</string>
+ <string name="Command_Outbox_Label">
+ Buz籀n de salida de comerciante
+ </string>
<string name="Command_People_Label">
Gente
</string>
@@ -4824,6 +4841,9 @@ Int矇ntalo incluyendo la ruta de acceso al editor entre comillas
<string name="Command_Move_Tooltip">
Desplazando el avatar
</string>
+ <string name="Command_Outbox_Tooltip">
+ Transfiere objetos a tu mercado para venderlos
+ </string>
<string name="Command_People_Tooltip">
Amigos, grupos y personas pr籀ximas
</string>
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 b554a0a892..6f8885487a 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -377,7 +377,7 @@ 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">
- et chatter avec les avatars sur cette parcelle
+ Les avatars pr矇sents sur d&apos;autres parcelles peuvent voir et chatter avec les avatars pr矇sents sur cette parcelle.
</text>
<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">
@@ -465,12 +465,12 @@ musique :
<text name="Limit access to this parcel to:">
Acc癡s cette parcelle
</text>
- <check_box label="Autoriser l&apos;acc癡s public [MATURITY]" name="public_access"/>
+ <check_box label="Autoriser l&apos;acc癡s public (des lignes d&apos;interdiction seront cr矇矇es si cette case n&apos;est pas coch矇e)" name="public_access"/>
<text name="Only Allow">
- Limiter l&apos;acc癡s aux r矇sidents v矇rifi矇s par :
+ Conditions d&apos;acc癡s des r矇sidents :
</text>
- <check_box label="Informations de paiement enregistr矇es [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Bannir les r矇sidents non identifi矇s."/>
- <check_box label="V矇rification de l&apos;璽ge [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Bannir les r矇sidents qui n&apos;ont pas v矇rifi矇 leur 璽ge. Consultez la page [SUPPORT_SITE] pour plus d&apos;informations."/>
+ <check_box label="Informations de paiement enregistr矇es [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Pour pouvoir acc矇der cette parcelle, les r矇sidents doivent avoir enregistr矇 des informations de paiement. Consultez le [SUPPORT_SITE] pour plus d&apos;informations."/>
+ <check_box label="ge v矇rifi矇 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Pour que les r矇sidents puissent acc矇der cette parcelle, leur 璽ge doit avoir fait l&apos;objet d&apos;une v矇rification. Consultez le [SUPPORT_SITE] pour plus d&apos;informations."/>
<check_box label="Autoriser l&apos;acc癡s au groupe: [GROUP]" name="GroupCheck" tool_tip="D矇finir le groupe l&apos;onglet G矇n矇ral."/>
<check_box label="Vendre des pass :" name="PassCheck" tool_tip="Autoriser un acc癡s temporaire cette parcelle"/>
<combo_box name="pass_combo" width="110">
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_anim_preview.xml
new file mode 100644
index 0000000000..e82518ce80
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_animation_anim_preview.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Anim Preview" title="ANIMATION.ANIM">
+ <text name="name_label">
+ Nom:
+ </text>
+ <text name="description_label">
+ Description :
+ </text>
+ <button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
+ <button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_bvh_preview.xml
new file mode 100644
index 0000000000..84c40b5987
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_animation_bvh_preview.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview">
+ <floater.string name="failed_to_initialize">
+ chec de l&apos;initialisation du mouvement
+ </floater.string>
+ <floater.string name="anim_too_long">
+ La dur矇e du fichier d&apos;animation est de [LENGTH] secondes.
+
+La limite maximale est de [MAX_LENGTH] secondes.
+ </floater.string>
+ <floater.string name="failed_file_read">
+ Impossible de lire le fichier d&apos;animation.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ Ok
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ Fin pr矇matur矇e du fichier.
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ Impossible de lire la d矇finition des contraintes.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ Impossible d&apos;ouvrir le fichier BVH.
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ En-t礙te HIERARCHY non valide.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ Impossible de trouver ROOT ou JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ Impossible d&apos;obtenir le nom JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ Impossible de trouver OFFSET.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ CHANNELS introuvables.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ Impossible d&apos;obtenir l&apos;ordre de rotation.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ Impossible d&apos;obtenir l&apos;axe de rotation.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ Impossible de trouver MOTION.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ Impossible d&apos;obtenir le nombre d&apos;images.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ Impossible d&apos;obtenir la dur矇e des images.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ Impossible d&apos;obtenir les valeurs de position.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ Impossible d&apos;obtenir les valeurs de rotation.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ Impossible d&apos;ouvrir le fichier de traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ Impossible de lire l&apos;en-t礙te de traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ Impossible de lire les noms de traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ Impossible de lire la valeur ignorant la traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ Impossible de lire la valeur relative de la traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ Impossible de lire la valeur outname de la traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ Impossible de lire la matrice de traduction.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Impossible d&apos;obtenir le nom mergechild.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Impossible d&apos;obtenir le nom mergeparent.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ Impossible d&apos;obtenir la valeur priority.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ Impossible d&apos;obtenir la valeur loop.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ Impossible d&apos;obtenir les valeurs easeIn.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ Impossible d&apos;obtenir les valeurs easeOut.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Impossible d&apos;obtenir la valeur hand morph.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ Impossible de lire le nom emote.
+ </floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ Nom root joint incorrect ; utiliser &quot;hip&quot;.
+ </floater.string>
+ <text name="name_label">
+ Nom:
+ </text>
+ <text name="description_label">
+ Description :
+ </text>
+ <spinner label="Priorit矇" name="priority" tool_tip="Contr繫le quelles autres animations peuvent 礙tre remplac矇es par cette animation."/>
+ <check_box label="Boucle" name="loop_check" tool_tip="Entra簾ne la lecture en boucle de cette animation."/>
+ <spinner label="D矇but (%)" name="loop_in_point" tool_tip="D矇finit le point de l&apos;animation auquel retourne la boucle."/>
+ <spinner label="Fin (%)" name="loop_out_point" tool_tip="D矇finit le point de l&apos;animation auquel se termine la boucle."/>
+ <text name="hand_label">
+ Pose des mains
+ </text>
+ <combo_box name="hand_pose_combo" tool_tip="Contr繫le ce que font les mains pendant l&apos;animation.">
+ <combo_box.item label="cart矇es" name="Spread"/>
+ <combo_box.item label="D矇tendues" name="Relaxed"/>
+ <combo_box.item label="Montrer du doigt (les deux)" name="PointBoth"/>
+ <combo_box.item label="Poing" name="Fist"/>
+ <combo_box.item label="D矇tendue (gauche)" name="RelaxedLeft"/>
+ <combo_box.item label="Montrer du doigt (gauche)" name="PointLeft"/>
+ <combo_box.item label="Poing (gauche)" name="FistLeft"/>
+ <combo_box.item label="D矇tendue (droite)" name="RelaxedRight"/>
+ <combo_box.item label="Montrer du doigt (droite)" name="PointRight"/>
+ <combo_box.item label="Poing (droite)" name="FistRight"/>
+ <combo_box.item label="Salut (droite)" name="SaluteRight"/>
+ <combo_box.item label="Clavier" name="Typing"/>
+ <combo_box.item label="Paix (droite)" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ Expression
+ </text>
+ <combo_box name="emote_combo" tool_tip="Contr繫le ce que fait le visage pendant l&apos;animation.">
+ <item label="(Aucune)" name="[None]" value=""/>
+ <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
+ <item label="Effray矇" name="Afraid" value="Effray矇"/>
+ <item label="En col癡re" name="Angry" value="En col癡re"/>
+ <item label="Grand sourire" name="BigSmile" value="Grand sourire"/>
+ <item label="Ennui" name="Bored" value="Ennui"/>
+ <item label="Pleurer" name="Cry" value="Pleurer"/>
+ <item label="M矇pris" name="Disdain" value="M矇pris"/>
+ <item label="G礙ne" name="Embarrassed" value="G礙ne"/>
+ <item label="Froncer les sourcils" name="Frown" value="Froncer les sourcils"/>
+ <item label="Embrasser" name="Kiss" value="Embrasser"/>
+ <item label="Rire" name="Laugh" value="Rire"/>
+ <item label="Tirer la langue" name="Plllppt" value="Tirer la langue"/>
+ <item label="D矇go羶t" name="Repulsed" value="D矇go羶t"/>
+ <item label="Triste" name="Sad" value="Triste"/>
+ <item label="Hausser les 矇paules" name="Shrug" value="Hausser les 矇paules"/>
+ <item label="Sourire" name="Smile" value="Sourire"/>
+ <item label="Surprise" name="Surprise" value="Surprise"/>
+ <item label="Clin d&apos;il" name="Wink" value="Clin d&apos;il"/>
+ <item label="Inqui矇tude" name="Worry" value="Inqui矇tude"/>
+ </combo_box>
+ <text name="preview_label">
+ Aper癟u
+ </text>
+ <combo_box name="preview_base_anim" tool_tip="Permet de tester le comportement de l&apos;animation lorsque votre avatar effectue certaines actions courantes.">
+ <item label="Debout" name="Standing" value="Debout"/>
+ <item label="En marche" name="Walking" value="En marche"/>
+ <item label="Assis" name="Sitting" value="Assis"/>
+ <item label="En vol" name="Flying" value="En vol"/>
+ </combo_box>
+ <spinner label="Transition d矇but (s)" name="ease_in_time" tool_tip="Dur矇e (en secondes) de l&apos;entr矇e en fondu de l&apos;animation."/>
+ <spinner label="Transition fin (s)" name="ease_out_time" tool_tip="Dur矇e (en secondes) de la sortie en fondu de l&apos;animation."/>
+ <button name="play_btn" tool_tip="Lire l&apos;animation."/>
+ <button name="pause_btn" tool_tip="Suspendre l&apos;animation."/>
+ <button name="stop_btn" tool_tip="Arr礙ter la lecture de l&apos;animation."/>
+ <text name="bad_animation_text">
+ Impossible de lire le fichier d&apos;animation.
+
+Les fichiers BVH export矇s depuis Poser 4 sont recommand矇s.
+ </text>
+ <button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_chat_bar.xml b/indra/newview/skins/default/xui/fr/floater_chat_bar.xml
index c7d27c0589..890411d091 100644
--- a/indra/newview/skins/default/xui/fr/floater_chat_bar.xml
+++ b/indra/newview/skins/default/xui/fr/floater_chat_bar.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="chat_bar" title="CHAT PRS DE MOI">
<panel name="bottom_panel">
- <line_editor label="Cliquer ici pour chatter." name="chat_box" tool_tip="Appuyer sur Entr矇e pour dire, Ctrl-Entr矇e pour crier"/>
- <button name="show_nearby_chat" tool_tip="Affiche/Masque le journal de chats pr癡s de vous"/>
+ <line_editor label="Cliquer ici pour chatter." name="chat_box" tool_tip="Appuyer sur Entr矇e pour dire, Ctrl+Entr矇e pour crier"/>
+ <button name="show_nearby_chat" tool_tip="Afficher/masquer le journal de chat pr癡s de vous."/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/fr/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..b491dd6aed
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_merchant_outbox.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_merchant_outbox" title="BOTE D&apos;ENVOI VENDEUR">
+ <string name="OutboxFolderCount1">
+ 1 dossier
+ </string>
+ <string name="OutboxFolderCountN">
+ [NUM] dossiers
+ </string>
+ <string name="OutboxImporting">
+ Envoi de dossiers...
+ </string>
+ <string name="OutboxInitializing">
+ Initialisation...
+ </string>
+ <panel label="">
+ <panel>
+ <panel name="outbox_inventory_placeholder_panel">
+ <text name="outbox_inventory_placeholder_title">
+ Chargement...
+ </text>
+ </panel>
+ </panel>
+ <panel>
+ <button label="Envoyer vers la Place du march矇" name="outbox_import_btn" tool_tip="Vers ma vitrine de la Place du march矇"/>
+ </panel>
+ </panel>
+</floater>
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 63feb1d403..128b9d6fa4 100644
--- a/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
@@ -6,12 +6,12 @@
<button label="2. Optimisation" name="optimize_btn"/>
<button label="1. S矇lection du fichier" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
Choisir un fichier de mod癡le
</text>
</panel>
- <panel name="content">
+ <panel name="choose_file_content">
<text name="advanced_users_text">
Utilisateurs exp矇riment矇s : si vous 礙tes habitu矇 utiliser des outils de cr矇ation de contenu en 3D, l&apos;outil de chargement avanc矇 est mis votre disposition.
</text>
@@ -30,20 +30,20 @@
AVERTISSEMENT :
</text>
<text name="warning_text">
- Vous ne pourrez pas effectuer l&apos;矇tape de chargement finale du mod癡le sur les serveurs Second Life. [secondlife:///app/floater/learn_more D矇couvrez comment] configurer votre compte pour les chargements de mod癡le de maillage.
+ Vous ne pourrez pas effectuer l&apos;矇tape de chargement finale du mod癡le sur les serveurs Second Life. [secondlife:///app/floater/learn_more D矇couvrez comment] configurer votre compte pour le chargement de mod癡les de maillage.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
Optimiser le mod癡le
</text>
</panel>
- <text name="description">
+ <text name="optimize_description">
Le mod癡le a 矇t矇 optimis矇 en termes de performances. Vous pouvez l&apos;ajuster si vous le souhaitez.
</text>
- <panel name="content">
+ <panel name="optimize_content">
<text name="high_detail_text">
G矇n矇rer le niveau de d矇tail : lev矇
</text>
@@ -79,15 +79,15 @@
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
Ajuster les propri矇t矇s physiques
</text>
</panel>
- <text name="description">
+ <text name="physics_description">
Une forme va 礙tre cr矇矇e pour l&apos;enveloppe externe du mod癡le. Ajustez le niveau de d矇tail de la forme en fonction de l&apos;objectif souhait矇 pour votre mod癡le.
</text>
- <panel name="content">
+ <panel name="physics_content">
<button label="Recalcul physique" name="recalculate_physics_btn"/>
<button label="Recalcul en cours..." name="recalculating_physics_btn"/>
<text name="lod_label">
@@ -110,12 +110,12 @@
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
V矇rification
</text>
</panel>
- <panel name="content">
+ <panel name="review_content">
<text name="review_prim_equiv">
Impact sur la parcelle/r矇gion : 矇quivalent [EQUIV] prims
</text>
@@ -128,8 +128,8 @@
</panel>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
Chargement termin矇
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
index fdd2ac8beb..f2cb1d5e70 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
Description :
</text>
- <button label="Ex矇cuter dans Second Life" label_selected="Stop" name="Anim play btn" tool_tip="Lire cette animation de fa癟on ce que les autres puissent la voir" width="131"/>
- <button label="Ex矇cuter localement" label_selected="Stop" left="160" name="Anim audition btn" tool_tip="Lire cette animation de fa癟on ce que vous soyez la seule personne pouvoir la voir" width="120"/>
+ <button label="Ex矇cuter dans Second Life" label_selected="Arr礙ter" name="Inworld" tool_tip="Lire cette animation de fa癟on ce que les autres la voient."/>
+ <button label="Ex矇cuter localement" label_selected="Arr礙ter" name="Locally" tool_tip="Lire cette animation de fa癟on ce que vous soyez la seule personne la voir."/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/fr/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..b479d5f6d6
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_test_layout_stacks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="LAYOUTSTACK TESTS"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/fr/floater_test_text_vertical_aligment.xml
new file mode 100644
index 0000000000..702170ef52
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_test_text_vertical_aligment.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="FLOATER TEST"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index af5678ff0e..e21c6f4c08 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -1,5 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="OUTILS POUR LA CONSTRUCTION" title="">
+ <floater.string name="grid_screen_text">
+ cran
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Monde
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ R矇f矇rence
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ l矇ment attach矇
+ </floater.string>
<floater.string name="status_rotate">
Pour faire tourner l&apos;objet, faites glisser les bandes de couleur.
</floater.string>
@@ -63,7 +78,12 @@
</text>
<check_box initial_value="true" label="tirer les textures" name="checkbox stretch textures"/>
<check_box initial_value="true" label="Fixer" name="checkbox snap to grid"/>
- <button label="Options..." label_selected="Options..." name="Options..." tool_tip="Afficher d&apos;autres options de grille"/>
+ <combo_box name="combobox grid mode" tool_tip="Choisir le type d&apos;axe de grille pour le positionnement de l&apos;objet.">
+ <combo_box.item label="Monde" name="World"/>
+ <combo_box.item label="Local" name="Local"/>
+ <combo_box.item label="R矇f矇rence" name="Reference"/>
+ </combo_box>
+ <button label="" label_selected="Options..." name="Options..." tool_tip="Afficher d&apos;autres options de grille"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
@@ -106,7 +126,7 @@
Aucune s矇lection effectu矇e.
</text>
<text name="remaining_capacity">
- [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Plus d'infos]
+ [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Plus d&apos;infos]
</text>
<tab_container name="Object Info Tabs">
<panel label="G矇n矇ral" name="General">
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
index 92ee6ecf24..671fb5c14d 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
@@ -42,13 +42,16 @@
<string name="effect_Demon">
D矇mon
</string>
+ <string name="effect_Female Elf">
+ Femme elfe
+ </string>
<string name="effect_Flirty">
Flirt
</string>
<string name="effect_Foxy">
S矇duction
</string>
- <string name="effect_Halloween_2010_Bonus">
+ <string name="effect_Halloween 2010 Bonus">
Halloween_2010_Bonus
</string>
<string name="effect_Helium">
@@ -57,9 +60,18 @@
<string name="effect_Husky">
Rauque
</string>
+ <string name="effect_Husky Whisper">
+ Murmure rauque
+ </string>
<string name="effect_Intercom">
Interphone
</string>
+ <string name="effect_Julia">
+ Julia
+ </string>
+ <string name="effect_Lo Lilt">
+ M矇lodieux
+ </string>
<string name="effect_Macho">
Macho
</string>
@@ -69,6 +81,9 @@
<string name="effect_Mini">
Mini
</string>
+ <string name="effect_Model">
+ Mod癡le
+ </string>
<string name="effect_Nano">
Nano
</string>
@@ -90,6 +105,9 @@
<string name="effect_Roxanne">
Roxanne
</string>
+ <string name="effect_Rumble">
+ Grondement
+ </string>
<string name="effect_Sabrina">
Sabrina
</string>
@@ -102,6 +120,9 @@
<string name="effect_Shorty">
Petite voix
</string>
+ <string name="effect_Smaller">
+ Plus faible
+ </string>
<string name="effect_Sneaky">
Sournois
</string>
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml
index 074bb54cdc..f3b974aba5 100644
--- a/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
<menu_item_call label="Toucher" name="touch"/>
<menu_item_call label="M&apos;asseoir" name="sit"/>
<menu_item_call label="Payer" name="pay"/>
@@ -12,7 +12,8 @@
<menu_item_call label="Ajouter" name="add"/>
<menu_item_call label="Signaler" name="report"/>
<menu_item_call label="Ignorer" name="block"/>
+ <menu_item_call label="Ne plus ignorer" name="unblock"/>
<menu_item_call label="Zoomer en avant" name="zoom_in"/>
<menu_item_call label="Supprimer" name="remove"/>
<menu_item_call label="En savoir plus" name="more_info"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml
index 403111c4de..59dcff9075 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml
@@ -59,6 +59,7 @@
<menu_item_call label="Propri矇t矇s" name="Properties"/>
<menu_item_call label="Renommer" name="Rename"/>
<menu_item_call label="Copier l&apos;UUID (identifiant universel unique)" name="Copy Asset UUID"/>
+ <menu_item_call label="Couper" name="Cut"/>
<menu_item_call label="Copier" name="Copy"/>
<menu_item_call label="Coller" name="Paste"/>
<menu_item_call label="Coller comme lien" name="Paste As Link"/>
@@ -84,6 +85,6 @@
<menu_item_call label="Ajouter" name="Wearable Add"/>
<menu_item_call label="Enlever" name="Take Off"/>
<menu_item_call label="Copier vers la bo簾te d&apos;envoi vendeur" name="Merchant Copy"/>
- <menu_item_call label="D矇placer vers la bo簾te d&apos;envoi vendeur" name="Merchant Move"/>
+ <menu_item_call label="Envoyer vers la Place du march矇" name="Marketplace Send"/>
<menu_item_call label="--aucune option--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml
index 8210c1be51..dc6b2793ca 100644
--- a/indra/newview/skins/default/xui/fr/menu_login.xml
+++ b/indra/newview/skins/default/xui/fr/menu_login.xml
@@ -17,8 +17,8 @@
<menu_item_call label="D矇finir la taille de la fen礙tre..." name="Set Window Size..."/>
<menu_item_call label="Afficher les conditions d&apos;utilisation" name="TOS"/>
<menu_item_call label="Afficher le message critique" name="Critical"/>
- <menu_item_call label="Test du navigateur de m矇dias" name="Web Browser Test"/>
<menu_item_call label="Test de d矇bogage de la fen礙tre flottante du contenu Web" name="Web Content Floater Debug Test"/>
+ <menu label="D矇finir le niveau de connexion" name="Set Logging Level"/>
<menu_item_check label="Afficher le s矇lecteur de grille" name="Show Grid Picker"/>
<menu_item_call label="Afficher la console des notifications" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 9303815c30..3c3d4f5f69 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -14,14 +14,14 @@
<menu_item_check label="Voler" name="Fly"/>
<menu_item_check label="Toujours courir" name="Always Run"/>
<menu_item_call label="Arr礙ter mon animation" name="Stop Animating My Avatar"/>
+ <menu_item_call label="Marcher / Courir / Voler..." name="Walk / run / fly"/>
</menu>
<menu label="Statut" name="Status">
<menu_item_call label="Absent" name="Set Away"/>
<menu_item_call label="Occup矇" name="Set Busy"/>
</menu>
- <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="Acheter des L$..." name="Buy and Sell L$"/>
+ <menu_item_call label="Bo簾te d&apos;envoi vendeur..." name="MerchantOutbox"/>
<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>
@@ -63,7 +63,7 @@
<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 label="Luminosit矇" name="Environment Settings">
+ <menu label="Luminosit矇" name="Sun">
<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"/>
@@ -178,22 +178,22 @@
<menu_item_check label="Afficher le r矇ticule de la vue subjective" name="ShowCrosshairs"/>
</menu>
<menu label="Types de rendu" name="Rendering Types">
- <menu_item_check label="Simple" name="Simple"/>
- <menu_item_check label="Alpha" name="Alpha"/>
- <menu_item_check label="Arbre" name="Tree"/>
- <menu_item_check label="Avatars" name="Character"/>
- <menu_item_check label="Patch de surface" name="Surface Patch"/>
- <menu_item_check label="Ciel" name="Sky"/>
- <menu_item_check label="Eau" name="Water"/>
- <menu_item_check label="Sol" name="Ground"/>
- <menu_item_check label="Volume" name="Volume"/>
- <menu_item_check label="Herbe" name="Grass"/>
- <menu_item_check label="Nuages" name="Clouds"/>
- <menu_item_check label="Particules" name="Particles"/>
- <menu_item_check label="Placage de relief" name="Bump"/>
+ <menu_item_check label="Simple" name="Rendering Type Simple"/>
+ <menu_item_check label="Alpha" name="Rendering Type Alpha"/>
+ <menu_item_check label="Arbre" name="Rendering Type Tree"/>
+ <menu_item_check label="Avatars" name="Rendering Type Character"/>
+ <menu_item_check label="Patch de surface" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="Ciel" name="Rendering Type Sky"/>
+ <menu_item_check label="Eau" name="Rendering Type Water"/>
+ <menu_item_check label="Sol" name="Rendering Type Ground"/>
+ <menu_item_check label="Volume" name="Rendering Type Volume"/>
+ <menu_item_check label="Herbe" name="Rendering Type Grass"/>
+ <menu_item_check label="Nuages" name="Rendering Type Clouds"/>
+ <menu_item_check label="Particules" name="Rendering Type Particles"/>
+ <menu_item_check label="Placage de relief" name="Rendering Type Bump"/>
</menu>
<menu label="Fonctionnalit矇s de rendu" name="Rendering Features">
- <menu_item_check label="Interface" name="UI"/>
+ <menu_item_check label="Interface" name="ToggleUI"/>
<menu_item_check label="S矇lection" name="Selected"/>
<menu_item_check label="En surbrillance" name="Highlighted"/>
<menu_item_check label="Textures dynamiques" name="Dynamic Textures"/>
@@ -207,8 +207,6 @@
<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_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"/>
@@ -217,13 +215,6 @@
<menu_item_check label="Joystick Flycam" name="Joystick Flycam"/>
<menu_item_call label="R矇initialiser la vue" name="Reset View"/>
<menu_item_call label="Regarder la derni癡re conversation" name="Look at Last Chatter"/>
- <menu label="S矇lectionner un outil de construction" name="Select Tool">
- <menu_item_call label="Outil de mise au point" name="Focus"/>
- <menu_item_call label="Outil de d矇placement" name="Move"/>
- <menu_item_call label="Outil de modification" name="Edit"/>
- <menu_item_call label="Outil de cr矇ation" name="Create"/>
- <menu_item_call label="Outil Terrain" name="Land"/>
- </menu>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>
<menu_item_call label="Zoom par d矇faut" name="Zoom Default"/>
<menu_item_call label="Zoomer en arri癡re" name="Zoom Out"/>
@@ -296,6 +287,7 @@
<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="Octets d&apos;矇l矇ments attach矇s" name="attachment bytes"/>
<menu_item_check label="Sculpture" name="Sculpt"/>
</menu>
<menu label="Rendu" name="Rendering">
@@ -337,9 +329,8 @@
<menu_item_call label="Commencer l&apos;enregistrement" name="Start Record"/>
<menu_item_call label="Arr礙ter l&apos;enregistrement" name="Stop Record"/>
</menu>
- <menu label="Monde" name="World">
+ <menu label="Monde" name="DevelopWorld">
<menu_item_check label="Ignorer les param癡tres du soleil de la sim" name="Sim Sun Override"/>
- <menu_item_check label="Balise anim矇e" name="Cheesy Beacon"/>
<menu_item_check label="M矇t矇o fixe" name="Fixed Weather"/>
<menu_item_call label="Vidage de cache d&apos;objet de la r矇gion" name="Dump Region Object Cache"/>
</menu>
@@ -371,11 +362,11 @@
</menu>
<menu label="Avatar" name="Character">
<menu label="R矇cup矇rer la texture fix矇e" name="Grab Baked Texture">
- <menu_item_call label="Iris" name="Iris"/>
- <menu_item_call label="T礙te" name="Head"/>
- <menu_item_call label="Haut du corps" name="Upper Body"/>
- <menu_item_call label="Bas du corps" name="Lower Body"/>
- <menu_item_call label="Jupe" name="Skirt"/>
+ <menu_item_call label="Iris" name="Grab Iris"/>
+ <menu_item_call label="T礙te" name="Grab Head"/>
+ <menu_item_call label="Haut du corps" name="Grab Upper Body"/>
+ <menu_item_call label="Bas du corps" name="Grab Lower Body"/>
+ <menu_item_call label="Jupe" name="Grab Skirt"/>
</menu>
<menu label="Tests personnages" name="Character Tests">
<menu_item_call label="Apparence dans XML" name="Appearance To XML"/>
@@ -403,20 +394,28 @@
<menu_item_check label="Textures HTTP" name="HTTP Textures"/>
<menu_item_check label="Inventaire HTTP" name="HTTP Inventory"/>
<menu_item_call label="Compresser les images" name="Compress Images"/>
+ <menu_item_call label="Activer Visual Leak Detector" name="Enable Visual Leak Detector"/>
<menu_item_check label="Output Debug Minidump" name="Output Debug Minidump"/>
<menu_item_check label="Console Window on next Run" name="Console Window"/>
+ <menu label="D矇finir le niveau de connexion" name="Set Logging Level">
+ <menu_item_check label="D矇bogage" name="Debug"/>
+ <menu_item_check label="Infos" name="Info"/>
+ <menu_item_check label="Avertissement" name="Warning"/>
+ <menu_item_check label="Erreur" name="Error"/>
+ <menu_item_check label="Aucun" name="None"/>
+ </menu>
<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_check label="Afficher le menu Admin" name="View Admin Options"/>
</menu>
<menu label="Admin" name="Admin">
- <menu label="Object">
- <menu_item_call label="Prendre une copie" name="Take Copy"/>
- <menu_item_call label="T矇l矇porter le propri矇taire" name="Force Owner To Me"/>
+ <menu label="Objet" name="AdminObject">
+ <menu_item_call label="Prendre une copie" name="Admin Take Copy"/>
+ <menu_item_call label="Me faire devenir propri矇taire" name="Force Owner To Me"/>
<menu_item_call label="Forcer la permission du propri矇taire" name="Force Owner Permissive"/>
<menu_item_call label="Supprimer" name="Delete"/>
<menu_item_call label="Verrouiller" name="Lock"/>
- <menu_item_call label="Obtenir les ID d&apos;actifs" name="Get Assets IDs"/>
+ <menu_item_call label="Obtenir les ID des actifs" name="Get Assets IDs"/>
</menu>
<menu label="Parcelle" name="Parcel">
<menu_item_call label="T矇l矇porter le propri矇taire" name="Owner To Me"/>
@@ -447,10 +446,10 @@
<menu_item_call label="Propri矇t矇s physiques" name="Physics"/>
<menu_item_call label="Tous les habits" name="All Clothes"/>
</menu>
- <menu label="Aide" name="Help">
+ <menu label="Aide" name="DeprecatedHelp">
<menu_item_call label="Blog officiel des Linden" name="Official Linden Blog"/>
<menu_item_call label="Portail d&apos;矇criture de scripts" name="Scripting Portal"/>
- <menu label="Signaler des bugs" name="Bug Reporting">
+ <menu label="Signaler un bug" name="Bug Reporting">
<menu_item_call label="JIRA" name="Public Issue Tracker"/>
<menu_item_call label="Aide du JIRA" name="Publc Issue Tracker Help"/>
<menu_item_call label="Comment signaler des bugs" name="Bug Reporing 101"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 2f9bf23bc4..746a4b1d55 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -86,16 +86,37 @@ Veuillez v矇rifier votre connexion Internet.
<usetemplate canceltext="Cancel" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
</notification>
<notification name="ConfirmNoCopyToOutbox">
- Vous n&apos;礙tes pas autoris矇 copier cet article dans la bo簾te d&apos;envoi vers la Place du march矇. Voulez-vous vraiment d矇placer l&apos;article suivant ?
- [ITEM_NAME]
- <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ Vous n&apos;礙tes pas autoris矇 copier un ou plusieurs de ces articles dans la bo簾te d&apos;envoi vendeur. Vous pouvez les d矇placer ou les laisser.
+ <usetemplate name="okcancelbuttons" notext="Ne pas d矇placer les articles" yestext="D矇placer les articles"/>
+ </notification>
+ <notification name="OutboxFolderCreated">
+ Un nouveau dossier a 矇t矇 cr矇矇 pour chaque article que vous avez transf矇r矇 vers le niveau sup矇rieur de votre bo簾te d&apos;envoi vendeur.
+ <usetemplate ignoretext="Un nouveau dossier a 矇t矇 cr矇矇 dans la bo簾te d&apos;envoi vendeur." name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadComplete">
- Chargement sur la Place du march矇 termin矇.
- <usetemplate name="okbutton" yestext="Hourra !"/>
+ <notification name="OutboxImportComplete">
+ Transfert r矇ussi
+
+Tous les dossiers ont 矇t矇 envoy矇s vers la Place du march矇.
+ <usetemplate ignoretext="Tous les dossiers envoy矇s vers la Place du march矇" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadHadErrors">
- Chargement sur la Place du march矇 effectu矇 avec des erreurs ! Corrigez les probl癡mes dans votre bo簾te d&apos;envoi et r矇essayez. Merci!
+ <notification name="OutboxImportHadErrors">
+ Impossible de transf矇rer certains dossiers
+
+Des erreurs se sont produites lors de l&apos;envoi de certains dossiers vers la Place du march矇. Ces dossiers sont toujours disponibles dans votre bo簾te d&apos;envoi vendeur.
+
+Pour plus d&apos;informations, consultez le [[MARKETPLACE_IMPORTS_URL] journal des erreurs].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportFailed">
+ chec de transfert
+
+Aucun dossier n&apos;a 矇t矇 envoy矇 vers la Place du march矇 en raison d&apos;une erreur syst癡me ou r矇seau. Veuillez r矇essayer ult矇rieurement.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxInitFailed">
+ chec d&apos;initialisation de la Place du march矇
+
+L&apos;initialisation de la Place du march矇 a 矇chou矇 en raison d&apos;une erreur syst癡me ou r矇seau. Veuillez r矇essayer ult矇rieurement.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CompileQueueSaveText">
@@ -648,7 +669,7 @@ Assurez-vous que le fichier a l&apos;extension correcte.
Impossible de cr矇er le fichier de sortie: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- Actuellement, [APP_NAME] ne prend pas en charge le chargement de lots de fichiers d&apos;animation.
+ Actuellement, [APP_NAME] ne prend pas en charge le chargement par lot de fichiers d&apos;animation au format BVH.
</notification>
<notification name="CannotUploadReason">
Impossible de charger [FILE] suite au probl癡me suivant: [REASON]
@@ -1434,7 +1455,7 @@ Version [VERSION]
</notification>
<notification name="GroupLeaveConfirmMember">
Vous 礙tes actuellement membre du groupe &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
-Quitter le groupe?
+Quitter le groupe ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
@@ -2609,16 +2630,16 @@ Accepter cette requ礙te?
&lt;nolink&gt;[TITLE]&lt;/nolink&gt; de [NAME]
[MESSAGE]
<form name="form">
- <button name="Mute" text="Ignorer"/>
- <button name="Ignore" text="Ignorer"/>
+ <button name="Client_Side_Mute" text="Bloquer"/>
+ <button name="Client_Side_Ignore" text="Ignorer"/>
</form>
</notification>
<notification name="ScriptDialogGroup">
&lt;nolink&gt;[TITLE]&lt;/nolink&gt; de [GROUPNAME]
[MESSAGE]
<form name="form">
- <button name="Mute" text="Ignorer"/>
- <button name="Ignore" text="Ignorer"/>
+ <button name="Client_Side_Mute" text="Bloquer"/>
+ <button name="Client_Side_Ignore" text="Ignorer"/>
</form>
</notification>
<notification name="BuyLindenDollarSuccess">
@@ -2816,6 +2837,18 @@ avec les r矇sidents suivants :
[RESIDENTS] ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
+ <notification name="ShareFolderConfirmation">
+ Vous ne pouvez partager qu&apos;un dossier la fois.
+
+Voulez-vous vraiment partager les articles suivants :
+
+&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
+
+avec les r矇sidents suivants :
+
+[RESIDENTS] ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Ok"/>
+ </notification>
<notification name="ItemsShared">
Articles partag矇s.
</notification>
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 00bd6e81ae..b02e53269b 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,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="Traduire le chat" name="translate_chat_checkbox"/>
+ <layout_stack name="stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Traduire le chat" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
index fb650ff646..9d97d1bf29 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
@@ -18,10 +18,10 @@ domaine.
(inconnu)
</text>
<text name="Only Allow">
- Limiter l&apos;acc癡s aux comptes v矇rifi矇s par :
+ Conditions d&apos;acc癡s des r矇sidents :
</text>
- <check_box label="Infos de paiement enregistr矇es" name="limit_payment" tool_tip="Bannir les r矇sidents non identifi矇s"/>
- <check_box label="V矇rification de l&apos;璽ge" name="limit_age_verified" tool_tip="Bannir les r矇sidents qui n&apos;ont pas v矇rifi矇 leur 璽ge. Consultez la page [SUPPORT_SITE] pour plus d&apos;informations."/>
+ <check_box label="Informations de paiement enregistr矇es" name="limit_payment" tool_tip="Pour pouvoir acc矇der ce domaine, les r矇sidents doivent avoir enregistr矇 des informations de paiement. Consultez le [SUPPORT_SITE] pour plus d&apos;informations."/>
+ <check_box label="ge v矇rifi矇" name="limit_age_verified" tool_tip="Pour que les r矇sidents puissent acc矇der ce domaine, leur 璽ge doit avoir fait l&apos;objet d&apos;une v矇rification. Consultez le [SUPPORT_SITE] pour plus d&apos;informations."/>
<check_box label="Autoriser les chats vocaux" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<text name="abuse_email_text">
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
index 2b08ae56c5..29fbe3c7e7 100644
--- a/indra/newview/skins/default/xui/fr/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
@@ -22,6 +22,8 @@
<menu label="Fichier" name="File">
<menu_item_call label="Enregistrer" name="Save"/>
<menu_item_call label="Annuler tous les changements" name="Revert All Changes"/>
+ <menu_item_call label="Charger depuis un fichier..." name="LoadFromFile"/>
+ <menu_item_call label="Enregistrer sous..." name="SaveToFile"/>
</menu>
<menu label="Modifier" name="Edit">
<menu_item_call label="Annuler" name="Undo"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
index c0d59a3182..ba36a7d299 100644
--- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
@@ -15,7 +15,7 @@
<panel.string name="buycurrencylabel">
[AMT] L$
</panel.string>
- <panel name="balance_bg">
+ <panel left="-405" name="balance_bg" width="195">
<text name="balance" tool_tip="Cliquer sur ce bouton pour actualiser votre solde en L$." value="20 L$"/>
<button label="Acheter L$" name="buyL" tool_tip="Cliquer pour acheter plus de L$."/>
<button label="Achats" name="goShop" tool_tip="Ouvrir la Place du march矇 Second Life." width="75"/>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
index 969bd1ac44..1b9c832679 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
@@ -2,47 +2,24 @@
<panel label="Choses" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<layout_stack name="inventory_layout_stack">
- <layout_panel name="inbox_outbox_layout_panel">
- <layout_stack name="inbox_outbox_layout_stack">
- <layout_panel name="inbox_layout_panel">
- <panel label="" name="marketplace_inbox">
- <string name="InboxLabelWithArg">
- Articles re癟us ([NUM])
- </string>
- <string name="InboxLabelNoArg">
- Articles re癟us
- </string>
- <button label="Articles re癟us" name="inbox_btn"/>
- <text name="inbox_fresh_new_count">
- [NUM] nouv.
- </text>
- <panel tool_tip="Drag and drop items to your inventory to manage and use them">
- <text name="inbox_inventory_placeholder">
- Ici seront livr矇s les achats effectu矇s sur la Place du march矇.
- </text>
- </panel>
- </panel>
- </layout_panel>
- <layout_panel name="outbox_layout_panel">
- <panel label="" name="marketplace_outbox">
- <string name="OutboxLabelWithArg">
- Bo簾te d&apos;envoi vendeur ([NUM])
- </string>
- <string name="OutboxLabelNoArg">
- Bo簾te d&apos;envoi vendeur
- </string>
- <button label="Bo簾te d&apos;envoi vendeur" name="outbox_btn"/>
- <button label="" name="outbox_sync_btn" tool_tip="Vers ma vitrine de la Place du march矇"/>
- <panel>
- <panel name="outbox_inventory_placeholder_panel">
- <text name="outbox_inventory_placeholder_title">
- Chargement...
- </text>
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Articles re癟us ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Articles re癟us
+ </string>
+ <button label="Articles re癟us" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] nouv.
+ </text>
+ <panel name="inbox_inventory_placeholder_panel" tool_tip="Glisser-d矇poser des articles dans votre inventaire pour les utiliser.">
+ <text name="inbox_inventory_placeholder">
+ Ici seront livr矇s les achats effectu矇s sur la Place du march矇.
+ </text>
+ </panel>
+ </panel>
</layout_panel>
</layout_stack>
<panel name="button_panel">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index d959a96565..3eebed450f 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -181,8 +181,8 @@ Consultez la page www.secondlife.com/status pour plus d&apos;informations.
</string>
<string name="LoginFailedPremiumOnly">
Les connexions Second Life sont temporairement limit矇es afin de s&apos;assurer que l&apos;exp矇rience des utilisateurs pr矇sents dans le monde virtuel soit optimale.
-
-Les personnes disposant de comptes gratuits ne pourront pas acc矇der Second Life pendant ce temps afin de permettre celles qui ont pay矇 pour pouvoir utiliser Second Life puissent le faire.
+
+Les personnes disposant de comptes gratuits ne pourront pas acc矇der Second Life pendant ce temps afin de permettre celles qui ont pay矇 pour pouvoir utiliser Second Life de le faire.
</string>
<string name="LoginFailedComputerProhibited">
Impossible d&apos;acc矇der Second Life depuis cet ordinateur.
@@ -339,17 +339,35 @@ Veuillez r矇essayer de vous connecter dans une minute.
Impossible de faire glisser plus d&apos;un objet ici
</string>
<string name="TooltipPrice" value="[AMOUNT] L$:"/>
+ <string name="TooltipOutboxDragToWorld">
+ Impossible de rezzer des articles dans la bo簾te d&apos;envoi vendeur
+ </string>
<string name="TooltipOutboxNoTransfer">
- Impossible de vendre ou de transf矇rer un ou plusieurs de ces objets un autre utilisateur.
+ Impossible de vendre ou de transf矇rer un ou plusieurs de ces objets.
+ </string>
+ <string name="TooltipOutboxNotInInventory">
+ La bo簾te d&apos;envoi vendeur n&apos;accepte que les articles directement issus de votre inventaire.
</string>
<string name="TooltipOutboxWorn">
- Vous portez un ou plusieurs de ces objets. Retirez-les de votre avatar, puis r矇essayez de les d矇placer.
+ Impossible de placer des articles que vous portez dans votre bo簾te d&apos;envoi vendeur
+ </string>
+ <string name="TooltipOutboxCallingCard">
+ Impossible de placer des cartes de visite dans votre bo簾te d&apos;envoi vendeur
</string>
<string name="TooltipOutboxFolderLevels">
- Trop de niveaux de sous-dossiers dans ce dossier. R矇organisez-le de sorte qu&apos;un maximum de 4 niveaux soit utilis矇 (dossier racine contenant A contenant B contenant C).
+ Il existe plus de 3 niveaux de dossiers imbriqu矇s.
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ Le dossier de niveau sup矇rieur contient plus de 20 sous-dossiers.
</string>
<string name="TooltipOutboxTooManyObjects">
- Ce dossier contient plus de 200 objets. Regroupez une partie des articles dans un paquet afin de r矇duire le nombre d&apos;objets.
+ Le dossier de niveau sup矇rieur contient plus de 200 articles.
+ </string>
+ <string name="TooltipDragOntoOwnChild">
+ Impossible de d矇placer un dossier vers son enfant
+ </string>
+ <string name="TooltipDragOntoSelf">
+ Impossible de d矇placer un dossier vers lui-m礙me
</string>
<string name="TooltipHttpUrl">
Cliquez pour afficher cette page web
@@ -817,6 +835,9 @@ Veuillez r矇essayer de vous connecter dans une minute.
<string name="anim_yes_head">
Oui
</string>
+ <string name="multiple_textures">
+ Multiples
+ </string>
<string name="texture_loading">
Chargement...
</string>
@@ -976,6 +997,9 @@ Veuillez r矇essayer de vous connecter dans une minute.
<string name="choose_the_directory">
Choisir le r矇pertoire
</string>
+ <string name="script_files">
+ Scripts
+ </string>
<string name="AvatarSetNotAway">
Pr矇sent
</string>
@@ -1214,43 +1238,36 @@ 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">
- 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.
+ Les achats que vous avez effectu矇s sur la Place du march矇 s&apos;affichent ici. Vous pouvez alors les faire glisser vers votre inventaire afin de les utiliser.
</string>
<string name="MarketplaceURL">
- http://marketplace.[DOMAIN_NAME]
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
</string>
<string name="MarketplaceURL_CreateStore">
- http://marketplace.[DOMAIN_NAME]/create_store
+ http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4
</string>
- <string name="MarketplaceURL_LearnMore">
- http://marketplace.[DOMAIN_NAME]/learn_more
- </string>
- <string name="InventoryOutboxCreationErrorTitle">
- Configuration incorrecte de votre bo簾te d&apos;envoi vendeur
+ <string name="MarketplaceURL_Dashboard">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard
</string>
- <string name="InventoryOutboxCreationErrorTooltip">
- Erreur de configuration de la bo簾te d&apos;envoi vendeur
+ <string name="MarketplaceURL_Imports">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports
</string>
- <string name="InventoryOutboxCreationError">
- Veuillez contacter le service client癡le pour r矇soudre le probl癡me.
+ <string name="MarketplaceURL_LearnMore">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryOutboxNotMerchantTitle">
- Tout le monde peut vendre des articles sur la Place du march矇
- </string>
- <string name="InventoryOutboxNotMerchantTooltip">
- Devenez vendeur!
+ Tout le monde peut vendre des articles sur la Place du march矇.
</string>
+ <string name="InventoryOutboxNotMerchantTooltip"/>
<string name="InventoryOutboxNotMerchant">
- [[MARKETPLACE_URL] La Place du march矇 Second Life] comprend plus d&apos;un million de produits virtuels vendre, tous cr矇矇s par des r矇sidents. Vous aussi pouvez vendre les articles que vous cr矇ez, ainsi que certains articles que vous avez achet矇s. Le processus est simple et la configuration gratuite. [[LEARN_MORE_URL] En savoir plus] ou [[CREATE_STORE_URL] cr矇er une boutique] sur la Place du march矇 pour d矇marrer
+ Pour devenir vendeur, vous devez [[MARKETPLACE_CREATE_STORE_URL] cr矇er une boutique sur la Place du march矇].
</string>
<string name="InventoryOutboxNoItemsTitle">
- Un nouveau moyen d&apos;envoyer des articles sur la Place du march矇
- </string>
- <string name="InventoryOutboxNoItemsTooltip">
- Glisser-d矇poser des articles ici afin de les pr矇parer la vente sur la Place du march矇.
+ Votre bo簾te d&apos;envoi est vide.
</string>
+ <string name="InventoryOutboxNoItemsTooltip"/>
<string name="InventoryOutboxNoItems">
- Faites glisser les articles ou dossiers d&apos;articles vendre dans cette zone. Une copie de l&apos;article s&apos;affiche, sans que votre inventaire ne soit modifi矇, sauf si vous avez fait glisser un article pour lequel la copie est interdite. Une fois pr礙t envoyer les articles vers la Place du march矇, cliquez sur le bouton Charger. Les articles disparaissent de ce dossier lorsqu&apos;ils ont 矇t矇 d矇plac矇s vers l&apos;inventaire de la Place du march矇.
+ Pour mettre des dossiers en vente sur la [[MARKETPLACE_DASHBOARD_URL] Place du march矇], faites-les glisser vers cette zone et cliquez sur &quot;Envoyer vers la Place du march矇&quot;.
</string>
<string name="Marketplace Error None">
Aucune erreur
@@ -3907,6 +3924,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
<string name="Saved_message">
(Enregistrement: [LONG_TIMESTAMP])
</string>
+ <string name="IM_unblock_only_groups_friends">
+ Pour afficher ce message, vous devez d矇sactiver la case Seuls mes amis et groupes peuvent m&apos;appeler ou m&apos;envoyer un IM, sous Pr矇f矇rences/Confidentialit矇.
+ </string>
<string name="answered_call">
Votre appel a fait l&apos;objet d&apos;une r矇ponse
</string>
@@ -4103,9 +4123,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
En ligne
</string>
<string name="uploading_abuse_report">
- Chargement en cours...
+ Chargement...
-de l&apos;infraction signal矇e
+du rapport d&apos;infraction
</string>
<string name="New Shape">
Nouvelle silhouette
@@ -4372,7 +4392,7 @@ de l&apos;infraction signal矇e
<string name="server_is_down">
Malgr矇 nos efforts, une erreur inattendue s&apos;est produite.
- Veuillez vous reporter status.secondlifegrid.net afin de d矇terminer si un probl癡me connu existe avec ce service.
+ Veuillez vous reporter status.secondlifegrid.net afin de d矇terminer si un probl癡me connu existe avec ce service.
Si le probl癡me persiste, v矇rifiez la configuration de votre r矇seau et de votre pare-feu.
</string>
<string name="dateTimeWeekdaysNames">
@@ -4839,6 +4859,9 @@ Essayez avec le chemin d&apos;acc癡s l&apos;矇diteur entre guillemets doubles
<string name="Command_Move_Label">
Marcher / Courir / Voler
</string>
+ <string name="Command_Outbox_Label">
+ Bo簾te d&apos;envoi vendeur
+ </string>
<string name="Command_People_Label">
Personnes
</string>
@@ -4911,6 +4934,9 @@ Essayez avec le chemin d&apos;acc癡s l&apos;矇diteur entre guillemets doubles
<string name="Command_Move_Tooltip">
Faire bouger votre avatar
</string>
+ <string name="Command_Outbox_Tooltip">
+ Transf矇rer des articles vers votre place de march矇 afin de les vendre.
+ </string>
<string name="Command_People_Tooltip">
Amis, groupes et personnes pr癡s de vous
</string>
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 528cf185fc..cfc3ad8fdb 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -378,7 +378,7 @@ 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">
- e chattare con avatar in questo lotto
+ Gli avatar su altri lotti possono vedere gli avatar su questo lotto e chattare con loro
</text>
<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">
@@ -465,12 +465,12 @@ Media:
<text name="Limit access to this parcel to:">
Accesso a questo terreno
</text>
- <check_box label="Consenti l&apos;accesso pubblico [MATURITY]" name="public_access"/>
+ <check_box label="Consenti l&apos;accesso pubblico (se si rimuove la selezione vengono create linee di espulsione)" name="public_access"/>
<text name="Only Allow">
- Consenti l&apos;accesso soltanto ai residenti verificati tramite:
+ Consenti l&apos;accesso solo ai Residenti che:
</text>
- <check_box label="Informazioni di pagamento in archivio [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Espelli i residenti non identificati."/>
- <check_box label="Verifica dell&apos;et [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Espelli i residenti che non hanno la loro et verificata. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
+ <check_box label="Hanno informazioni di pagamento in archivio [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Per poter visitare questo lotto i Residenti devono aver fornito informazioni di pagamento a Linden Lab. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
+ <check_box label="Hanno verificato l&apos;et [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Per poter visitare questo lotto i Residenti devono aver verificato la propria et. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
<check_box label="Permetti accesso al gruppo: [GROUP]" name="GroupCheck" tool_tip="Imposta il gruppo nel pannello generale."/>
<check_box label="Vendi pass a:" name="PassCheck" tool_tip="Permetti in questo terreno l&apos;accesso temporaneo"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/it/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/it/floater_animation_anim_preview.xml
new file mode 100644
index 0000000000..a2bce00141
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_animation_anim_preview.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Anim Preview" title="ANIMATION.ANIM">
+ <text name="name_label">
+ Nome:
+ </text>
+ <text name="description_label">
+ Descrizione:
+ </text>
+ <button label="Carica ([AMOUNT] L$)" name="ok_btn"/>
+ <button label="Annulla" label_selected="Annulla" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/it/floater_animation_bvh_preview.xml
new file mode 100644
index 0000000000..a4319f2e77
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_animation_bvh_preview.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview">
+ <floater.string name="failed_to_initialize">
+ Movimento non inizializzato
+ </floater.string>
+ <floater.string name="anim_too_long">
+ La lunghezza del file di animazione 癡 di [LENGTH] secondi.
+
+La lunghezza massima dell&apos;animazione 癡 [MAX_LENGTH] secondi.
+ </floater.string>
+ <floater.string name="failed_file_read">
+ Impossibile leggere il file di animazione.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ Ok
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ Fine prematura del file.
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ Impossibile leggere la definizione del vincolo.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ Impossibile aprire il file BVH.
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ Intestazione HIERARCHY non valida.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ Impossibile trovare la ROOT o JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ Impossibile trovare il nome JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ Impossibile trovare OFFSET.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ Impossibile trovare CHANNELS.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ Impossibile ottenere un ordine di rotazione.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ Rotazione dell&apos;asse non disponibile.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ Impossibile trovare MOTION.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ Impossibile ottenere il numero dei frame.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ Impossibile ottenere il tempo del frame.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ Impossibile ottenere i valori della posizione.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ Impossibile ottenere i valori di rotazione.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ Impossibile aprire il file di traduzione.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ Impossibile leggere l&apos;intestazione della traduzione.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ Impossibile leggere i nomi della traduzione.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ Impossibile leggere la traduzione, ignora il valore.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ Impossibile leggere la traduzione del valore relativo.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ Valore non trovato.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ Impossibile leggere la matrice di traduzione.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Impossibile trovare il nome mergechild.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Impossibile ottenere il nome mergeparent.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ Impossibile ottenere il valore di priorit.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ Impossibile ottenere il valore di ripetizione.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ Impossibile ottenere i valori easeIn.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ Cannot get ease Out values.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Impossibile ottenere il valore morph della mano.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ Impossibile leggere il nome emote.
+ </floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ Nome non corretto del root joint, usa &quot;hip&quot;.
+ </floater.string>
+ <text name="name_label">
+ Nome:
+ </text>
+ <text name="description_label">
+ Descrizione:
+ </text>
+ <spinner label="Priorit" name="priority" tool_tip="Definisce quali altre animazioni possono essere sostituite da questa animazione"/>
+ <check_box label="Ripetizione" name="loop_check" tool_tip="Riproduce questa animazione in ripetizione"/>
+ <spinner label="Dentro(%)" name="loop_in_point" tool_tip="Imposta il punto sul quale ritorna l&apos;animazione"/>
+ <spinner label="Fuori(%)" name="loop_out_point" tool_tip="Imposta il punto sul quale termina l&apos;animazione"/>
+ <text name="hand_label">
+ Posa delle mani
+ </text>
+ <combo_box name="hand_pose_combo" tool_tip="Definisce ci簷 che fanno le mani durante l&apos;animazione">
+ <combo_box.item label="Estese" name="Spread"/>
+ <combo_box.item label="Rilassate" name="Relaxed"/>
+ <combo_box.item label="Indicano entrambe" name="PointBoth"/>
+ <combo_box.item label="Pugno" name="Fist"/>
+ <combo_box.item label="Sinistra rilassata" name="RelaxedLeft"/>
+ <combo_box.item label="Indica sinistra" name="PointLeft"/>
+ <combo_box.item label="Pugno con la sinistra" name="FistLeft"/>
+ <combo_box.item label="Destra rilassata" name="RelaxedRight"/>
+ <combo_box.item label="Indica destra" name="PointRight"/>
+ <combo_box.item label="Pugno destro" name="FistRight"/>
+ <combo_box.item label="Saluta a destra" name="SaluteRight"/>
+ <combo_box.item label="Battitura" name="Typing"/>
+ <combo_box.item label="Pace a destra" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ Espressione
+ </text>
+ <combo_box name="emote_combo" tool_tip="Definisce ci簷 che fa il viso durante l&apos;animazione">
+ <item label="(Nulla)" name="[None]" value=""/>
+ <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
+ <item label="Spavento" name="Afraid" value="Spavento"/>
+ <item label="Arrabbiato" name="Angry" value="Arrabbiato"/>
+ <item label="Grande sorriso" name="BigSmile" value="Grande sorriso"/>
+ <item label="Annoiato" name="Bored" value="Annoiato"/>
+ <item label="Pianto" name="Cry" value="Pianto"/>
+ <item label="Disdegno" name="Disdain" value="Disdegno"/>
+ <item label="Imbarazzato" name="Embarrassed" value="Imbarazzato"/>
+ <item label="Accigliato" name="Frown" value="Accigliato"/>
+ <item label="Bacio" name="Kiss" value="Bacio"/>
+ <item label="Risata" name="Laugh" value="Risata"/>
+ <item label="Linguaccia" name="Plllppt" value="Linguaccia"/>
+ <item label="Repulsione" name="Repulsed" value="Repulsione"/>
+ <item label="Triste" name="Sad" value="Triste"/>
+ <item label="Scrollata di spalle" name="Shrug" value="Scrollata di spalle"/>
+ <item label="Sorriso" name="Smile" value="Sorriso"/>
+ <item label="Stupore" name="Surprise" value="Stupore"/>
+ <item label="Occhiolino" name="Wink" value="Occhiolino"/>
+ <item label="Preoccupato" name="Worry" value="Preoccupato"/>
+ </combo_box>
+ <text name="preview_label">
+ Anteprima mentre
+ </text>
+ <combo_box name="preview_base_anim" tool_tip="Prova il comportamento dell&apos;animazione mentre l&apos;avatar esegue attivit comuni.">
+ <item label="In piedi" name="Standing" value="In piedi"/>
+ <item label="Camminare" name="Walking" value="Camminare"/>
+ <item label="Seduto" name="Sitting" value="Seduto"/>
+ <item label="Volare" name="Flying" value="Volare"/>
+ </combo_box>
+ <spinner label="Transizione in ingresso (sec)" name="ease_in_time" tool_tip="Durata (in secondi) della fusione in entrata delle animazioni"/>
+ <spinner label="Transizione in uscita (sec)" name="ease_out_time" tool_tip="Durata (in secondi) della fusione in uscita delle animazioni"/>
+ <button name="play_btn" tool_tip="Riproduci la tua animazione"/>
+ <button name="pause_btn" tool_tip="Metti in pausa la tua animazione"/>
+ <button name="stop_btn" tool_tip="Interrompi la riproduzione dell&apos;animazione"/>
+ <text name="bad_animation_text">
+ Impossibile leggere il file di animazione.
+
+Consigliamo file BVH esportati da Poser 4.
+ </text>
+ <button label="Carica ([AMOUNT] L$)" name="ok_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/it/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..02f257d466
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_merchant_outbox.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_merchant_outbox" title="CASELLA IN USCITA DEL RIVENDITORE">
+ <string name="OutboxFolderCount1">
+ 1 cartella
+ </string>
+ <string name="OutboxFolderCountN">
+ [NUM] cartelle
+ </string>
+ <string name="OutboxImporting">
+ Invio cartelle...
+ </string>
+ <string name="OutboxInitializing">
+ Inizializzazione...
+ </string>
+ <panel label="">
+ <panel>
+ <panel name="outbox_inventory_placeholder_panel">
+ <text name="outbox_inventory_placeholder_title">
+ Caricamento...
+ </text>
+ </panel>
+ </panel>
+ <panel>
+ <button label="Invia a Marketplace" name="outbox_import_btn" tool_tip="Push su negozio Marketplace"/>
+ </panel>
+ </panel>
+</floater>
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 7c1b13c18f..ab5fdb29e4 100644
--- a/indra/newview/skins/default/xui/it/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/it/floater_model_wizard.xml
@@ -6,12 +6,12 @@
<button label="2. Ottimizza" name="optimize_btn"/>
<button label="1. Seleziona file" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
Seleziona file modello
</text>
</panel>
- <panel name="content">
+ <panel name="choose_file_content">
<text name="advanced_users_text">
Utenti avanzati: Gli utenti che hanno dimestichezza con gli strumenti di creazione 3D possono usare le opzioni di caricamento avanzate.
</text>
@@ -35,15 +35,15 @@
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
Ottimizza modello
</text>
</panel>
- <text name="description">
+ <text name="optimize_description">
Abbiamo ottimizzato il modello per migliorare le prestazioni. Se necessario, pu簷 essere regolato ulteriormente.
</text>
- <panel name="content">
+ <panel name="optimize_content">
<text name="high_detail_text">
Genera livello di dettaglio: Alto
</text>
@@ -79,15 +79,15 @@
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
Modifica fisica
</text>
</panel>
- <text name="description">
+ <text name="physics_description">
Verr creata una forma per lo scafo esterno del modello. Regola il livello di dettaglio della forma in base al fine desiderato del modello.
</text>
- <panel name="content">
+ <panel name="physics_content">
<button label="Ricalcola fisica" name="recalculate_physics_btn"/>
<button label="Ricalcolo in corso..." name="recalculating_physics_btn"/>
<text name="lod_label">
@@ -110,12 +110,12 @@
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Rivedi
</text>
</panel>
- <panel name="content">
+ <panel name="review_content">
<text name="review_prim_equiv">
Impatto sul lotto o sulla regione: [EQUIV] prim equivalenti
</text>
@@ -128,8 +128,8 @@
</panel>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
Caricamento completato
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_animation.xml b/indra/newview/skins/default/xui/it/floater_preview_animation.xml
index 73082c9526..ed609c70fa 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_animation.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
Descrizione:
</text>
- <button label="Riproduci in Second Life" label_selected="Ferma" left="20" name="Anim play btn" tool_tip="Riproduci questa animazione cos穫 che gli altri possano vederla" width="131"/>
- <button label="Esegui localmente" label_selected="Ferma" left="162" name="Anim audition btn" tool_tip="Riproduci questa animazione cos穫 che solo tu possa vederla" width="125"/>
+ <button label="Riproduci in Second Life" label_selected="Ferma" name="Inworld" tool_tip="Riproduci questa animazione cos穫 che gli altri possano vederla"/>
+ <button label="Riproduci localmente" label_selected="Ferma" name="Locally" tool_tip="Riproduci questa animazione cos穫 che solo tu possa vederla"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/it/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..b479d5f6d6
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_test_layout_stacks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="LAYOUTSTACK TESTS"/>
diff --git a/indra/newview/skins/default/xui/it/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/it/floater_test_text_vertical_aligment.xml
new file mode 100644
index 0000000000..23da6f7588
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_test_text_vertical_aligment.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="FINESTRA DI TEST"/>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 0d981e2424..c963ac72e6 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -1,5 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="STRUMENTI PER COSTRUZIONE">
+ <floater.string name="grid_screen_text">
+ Schermo
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Locale
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Mondo
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Riferimento
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Allegato
+ </floater.string>
<floater.string name="status_rotate">
Sposta le fasce colorate per ruotare l&apos;oggetto
</floater.string>
@@ -63,7 +78,12 @@
</text>
<check_box initial_value="true" label="Ridimensiona le texture" name="checkbox stretch textures"/>
<check_box initial_value="true" label="Scatto" name="checkbox snap to grid"/>
- <button label="Opzioni..." label_selected="Opzioni..." name="Options..." tool_tip="Vedi pi羅 opzioni della griglia"/>
+ <combo_box name="combobox grid mode" tool_tip="Scegli il tipo di righello per posizionare l&apos;oggetto">
+ <combo_box.item label="Mondo" name="World"/>
+ <combo_box.item label="Locale" name="Local"/>
+ <combo_box.item label="Riferimento" name="Reference"/>
+ </combo_box>
+ <button label="" label_selected="Opzioni..." name="Options..." tool_tip="Vedi pi羅 opzioni della griglia"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="Piramide"/>
diff --git a/indra/newview/skins/default/xui/it/floater_voice_effect.xml b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
index a0e49525ea..c83b11f698 100644
--- a/indra/newview/skins/default/xui/it/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
@@ -42,13 +42,16 @@
<string name="effect_Demon">
Demonio
</string>
+ <string name="effect_Female Elf">
+ Elfo donna
+ </string>
<string name="effect_Flirty">
Civettuolo
</string>
<string name="effect_Foxy">
Scaltro
</string>
- <string name="effect_Halloween_2010_Bonus">
+ <string name="effect_Halloween 2010 Bonus">
Halloween_2010_Bonus
</string>
<string name="effect_Helium">
@@ -57,9 +60,18 @@
<string name="effect_Husky">
Fusto
</string>
+ <string name="effect_Husky Whisper">
+ Sospiro rauco
+ </string>
<string name="effect_Intercom">
Interfono
</string>
+ <string name="effect_Julia">
+ Julia
+ </string>
+ <string name="effect_Lo Lilt">
+ Inflessione bassa
+ </string>
<string name="effect_Macho">
Macho
</string>
@@ -69,6 +81,9 @@
<string name="effect_Mini">
Mini
</string>
+ <string name="effect_Model">
+ Modella
+ </string>
<string name="effect_Nano">
Nano
</string>
@@ -90,6 +105,9 @@
<string name="effect_Roxanne">
Rosanna
</string>
+ <string name="effect_Rumble">
+ Rombo
+ </string>
<string name="effect_Sabrina">
Sabrina
</string>
@@ -102,6 +120,9 @@
<string name="effect_Shorty">
Bassotto
</string>
+ <string name="effect_Smaller">
+ Pi羅 piccolo
+ </string>
<string name="effect_Sneaky">
Vile
</string>
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml
index ede4a507c0..4740c9bf67 100644
--- a/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
<menu_item_call label="Tocca" name="touch"/>
<menu_item_call label="Siediti" name="sit"/>
<menu_item_call label="Paga" name="pay"/>
@@ -12,7 +12,8 @@
<menu_item_call label="Aggiungi" name="add"/>
<menu_item_call label="Segnala" name="report"/>
<menu_item_call label="Blocca" name="block"/>
+ <menu_item_call label="Sblocca" name="unblock"/>
<menu_item_call label="Zoom avanti" name="zoom_in"/>
<menu_item_call label="Rimuovi" name="remove"/>
<menu_item_call label="Maggiori informazioni" name="more_info"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml
index 57aa4dc97d..4bf6be82fd 100644
--- a/indra/newview/skins/default/xui/it/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/it/menu_inventory.xml
@@ -59,6 +59,7 @@
<menu_item_call label="Propriet" name="Properties"/>
<menu_item_call label="Rinomina" name="Rename"/>
<menu_item_call label="Copia UUID dell&apos;oggetto" name="Copy Asset UUID"/>
+ <menu_item_call label="Taglia" name="Cut"/>
<menu_item_call label="Copia" name="Copy"/>
<menu_item_call label="Incolla" name="Paste"/>
<menu_item_call label="Incolla come link" name="Paste As Link"/>
@@ -84,6 +85,6 @@
<menu_item_call label="Aggiungi" name="Wearable Add"/>
<menu_item_call label="Togli" name="Take Off"/>
<menu_item_call label="Copia nella casella venditore in uscita" name="Merchant Copy"/>
- <menu_item_call label="Passa alla casella venditore in uscita" name="Merchant Move"/>
+ <menu_item_call label="Invia a Marketplace" name="Marketplace Send"/>
<menu_item_call label="--nessuna opzione--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml
index 834db974da..7b060e6565 100644
--- a/indra/newview/skins/default/xui/it/menu_login.xml
+++ b/indra/newview/skins/default/xui/it/menu_login.xml
@@ -16,8 +16,8 @@
<menu_item_call label="Imposta dimensioni della finestra..." name="Set Window Size..."/>
<menu_item_call label="Mostra i Termini del servizio (TOS)" name="TOS"/>
<menu_item_call label="Mostra messaggio critico" name="Critical"/>
- <menu_item_call label="Test browser multimedia" name="Web Browser Test"/>
<menu_item_call label="Test debug finestra contenuti Web" name="Web Content Floater Debug Test"/>
+ <menu label="Imposta livello di registrazione" name="Set Logging Level"/>
<menu_item_check label="Mostra selettore griglia" name="Show Grid Picker"/>
<menu_item_call label="Mostra Console notifiche" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 5140d2b1ec..99b7e3c4e6 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -14,14 +14,14 @@
<menu_item_check label="Vola" name="Fly"/>
<menu_item_check label="Corri sempre" name="Always Run"/>
<menu_item_call label="Ferma animazione" name="Stop Animating My Avatar"/>
+ <menu_item_call label="Cammina / corri / vola..." name="Walk / run / fly"/>
</menu>
<menu label="Stato" name="Status">
<menu_item_call label="Assente" name="Set Away"/>
<menu_item_call label="Non disponibile" name="Set Busy"/>
</menu>
- <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="Acquista L$..." name="Buy and Sell L$"/>
+ <menu_item_call label="Casella venditore in uscita..." name="MerchantOutbox"/>
<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>
@@ -63,7 +63,7 @@
<menu_item_check label="Propriet del lotto" name="Parcel Properties"/>
<menu_item_check label="Menu Avanzato" name="Show Advanced Menu"/>
</menu>
- <menu label="Sole" name="Environment Settings">
+ <menu label="Sole" name="Sun">
<menu_item_call label="Alba" name="Sunrise"/>
<menu_item_call label="Mezzogiorno" name="Noon"/>
<menu_item_call label="Tramonto" name="Sunset"/>
@@ -178,22 +178,22 @@
<menu_item_check label="Mostra mirino visuale soggettiva" name="ShowCrosshairs"/>
</menu>
<menu label="Modalit di rendering" name="Rendering Types">
- <menu_item_check label="Semplice" name="Simple"/>
- <menu_item_check label="Alpha (Trasparenza)" name="Alpha"/>
- <menu_item_check label="Albero" name="Tree"/>
- <menu_item_check label="Avatar" name="Character"/>
- <menu_item_check label="Superficie chiusa" name="Surface Patch"/>
- <menu_item_check label="Cielo" name="Sky"/>
- <menu_item_check label="Acqua" name="Water"/>
- <menu_item_check label="Suolo" name="Ground"/>
- <menu_item_check label="Volume" name="Volume"/>
- <menu_item_check label="Erba" name="Grass"/>
- <menu_item_check label="Nuvole" name="Clouds"/>
- <menu_item_check label="Particelle" name="Particles"/>
- <menu_item_check label="Urti" name="Bump"/>
+ <menu_item_check label="Semplice" name="Rendering Type Simple"/>
+ <menu_item_check label="Alpha (Trasparenza)" name="Rendering Type Alpha"/>
+ <menu_item_check label="Albero" name="Rendering Type Tree"/>
+ <menu_item_check label="Avatar" name="Rendering Type Character"/>
+ <menu_item_check label="Toppa superficie" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="Cielo" name="Rendering Type Sky"/>
+ <menu_item_check label="Acqua" name="Rendering Type Water"/>
+ <menu_item_check label="Suolo" name="Rendering Type Ground"/>
+ <menu_item_check label="Volume" name="Rendering Type Volume"/>
+ <menu_item_check label="Erba" name="Rendering Type Grass"/>
+ <menu_item_check label="Nuvole" name="Rendering Type Clouds"/>
+ <menu_item_check label="Particelle" name="Rendering Type Particles"/>
+ <menu_item_check label="Urto" name="Rendering Type Bump"/>
</menu>
<menu label="Caratteristiche di rendering" name="Rendering Features">
- <menu_item_check label="Interfaccia utente" name="UI"/>
+ <menu_item_check label="Interfaccia utente" name="ToggleUI"/>
<menu_item_check label="Selezionati" name="Selected"/>
<menu_item_check label="Evidenziato" name="Highlighted"/>
<menu_item_check label="Texture dinamiche" name="Dynamic Textures"/>
@@ -206,8 +206,6 @@
<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_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"/>
@@ -216,13 +214,6 @@
<menu_item_check label="Joystick Flycam" name="Joystick Flycam"/>
<menu_item_call label="Reimposta vista" name="Reset View"/>
<menu_item_call label="Guarda l&apos;ultima conversazione" name="Look at Last Chatter"/>
- <menu label="Seleziona strumento di costruzione" name="Select Tool">
- <menu_item_call label="Strumento Ingrandisci" name="Focus"/>
- <menu_item_call label="Strumento Movimento" name="Move"/>
- <menu_item_call label="Strumento Modifica" name="Edit"/>
- <menu_item_call label="Strumento Crea" name="Create"/>
- <menu_item_call label="Strumento Terreno" name="Land"/>
- </menu>
<menu_item_call label="Zoom avanti" name="Zoom In"/>
<menu_item_call label="Zoom predefinito" name="Zoom Default"/>
<menu_item_call label="Zoom indietro" name="Zoom Out"/>
@@ -278,6 +269,7 @@
<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="Byte collegamento" name="attachment bytes"/>
<menu_item_check label="Scolpisci" name="Sculpt"/>
</menu>
<menu label="Rendering" name="Rendering">
@@ -300,9 +292,8 @@
<menu_item_call label="Lascia un pacchetto" name="Drop a Packet"/>
</menu>
<menu_item_call label="Urti, spinte e contatti" name="Bumps, Pushes &amp;amp; Hits"/>
- <menu label="Mondo" name="World">
- <menu_item_check label="Esclusione al sole della regione" name="Sim Sun Override"/>
- <menu_item_check label="Effetto marcatore lampeggiante" name="Cheesy Beacon"/>
+ <menu label="Mondo" name="DevelopWorld">
+ <menu_item_check label="Esclusione al sole della simulazione" name="Sim Sun Override"/>
<menu_item_check label="Clima fisso" name="Fixed Weather"/>
<menu_item_call label="Dump della cache oggetti regione" name="Dump Region Object Cache"/>
</menu>
@@ -324,11 +315,11 @@
</menu>
<menu label="Avatar" name="Character">
<menu label="Grab Baked Texture" name="Grab Baked Texture">
- <menu_item_call label="Iride" name="Iris"/>
- <menu_item_call label="Testa" name="Head"/>
- <menu_item_call label="Parte superiore del corpo" name="Upper Body"/>
- <menu_item_call label="Parte inferiore del corpo" name="Lower Body"/>
- <menu_item_call label="Gonna" name="Skirt"/>
+ <menu_item_call label="Iride" name="Grab Iris"/>
+ <menu_item_call label="Testa" name="Grab Head"/>
+ <menu_item_call label="Parte superiore del corpo" name="Grab Upper Body"/>
+ <menu_item_call label="Parte inferiore del corpo" name="Grab Lower Body"/>
+ <menu_item_call label="Gonna" name="Grab Skirt"/>
</menu>
<menu label="Test personaggio" name="Character Tests">
<menu_item_call label="Alterna la geometria dei personaggi" name="Toggle Character Geometry"/>
@@ -344,18 +335,27 @@
</menu>
<menu_item_check label="Texture HTTP" name="HTTP Textures"/>
<menu_item_check label="Inventario HTTP" name="HTTP Inventory"/>
+ <menu_item_call label="Attiva Visual Leak Detector" name="Enable Visual Leak Detector"/>
<menu_item_check label="Finestra Console al prossimo lancio" name="Console Window"/>
+ <menu label="Imposta livello di registrazione" name="Set Logging Level">
+ <menu_item_check label="Debug" name="Debug"/>
+ <menu_item_check label="Informazioni" name="Info"/>
+ <menu_item_check label="Attenzione" name="Warning"/>
+ <menu_item_check label="Errore" name="Error"/>
+ <menu_item_check label="Nessuno" name="None"/>
+ </menu>
<menu_item_call label="Richiedi diritti Admin" name="Request Admin Options"/>
<menu_item_call label="Lascia stato Admin" name="Leave Admin Options"/>
<menu_item_check label="Mostra menu Admin" name="View Admin Options"/>
</menu>
<menu label="Admin" name="Admin">
- <menu label="Object">
- <menu_item_call label="Prendi copia" name="Take Copy"/>
+ <menu label="Oggetto" name="AdminObject">
+ <menu_item_call label="Prendi copia" name="Admin Take Copy"/>
<menu_item_call label="Rendimi proprietario" name="Force Owner To Me"/>
<menu_item_call label="Forza permesso proprietario" name="Force Owner Permissive"/>
<menu_item_call label="Elimina" name="Delete"/>
<menu_item_call label="Blocca" name="Lock"/>
+ <menu_item_call label="Ottieni ID asset" name="Get Assets IDs"/>
</menu>
<menu label="Lotto" name="Parcel">
<menu_item_call label="Rendimi proprietario" name="Owner To Me"/>
@@ -372,5 +372,16 @@
<menu label="Take Off Clothing" name="Take Off Clothing">
<menu_item_call label="Fisica" name="Physics"/>
</menu>
+ <menu label="Guida" name="DeprecatedHelp">
+ <menu_item_call label="Blog ufficiale Linden" name="Official Linden Blog"/>
+ <menu_item_call label="Portale script" name="Scripting Portal"/>
+ <menu label="Segnalazione bug" name="Bug Reporting">
+ <menu_item_call label="Monitoraggio problemi pubblici" name="Public Issue Tracker"/>
+ <menu_item_call label="Guida Monitoraggio problemi pubblici" name="Publc Issue Tracker Help"/>
+ <menu_item_call label="Guida alla segnalazione di bug" name="Bug Reporing 101"/>
+ <menu_item_call label="Problemi sicurezza" name="Security Issues"/>
+ <menu_item_call label="Wiki domande e risposte" name="QA Wiki"/>
+ </menu>
+ </menu>
</menu>
</menu_bar>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index fcc515186d..0e6fee60d1 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -86,17 +86,38 @@ Accertati che la tua connessione Internet stia funzionando correttamente.
<usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Non salvare" yestext="Salva"/>
</notification>
<notification name="ConfirmNoCopyToOutbox">
- Non hai l&apos;autorizzazione necessaria per copiare questo oggetto nella casella in uscita di Marketplace. Sei sicuro di volere spostare gli oggetti seguenti?
- [ITEM_NAME]
- <usetemplate name="okcancelbuttons" notext="No" yestext="S穫"/>
+ Non hai l&apos;autorizzazione necessaria per copiare almeno uno di questi elementi nella casella in uscita del rivenditore. Puoi spostarli o lasciarli indietro.
+ <usetemplate name="okcancelbuttons" notext="Non spostare gli oggetti" yestext="Sposta oggetti"/>
</notification>
- <notification name="OutboxUploadComplete">
- Caricamento di Marketplace completato.
- <usetemplate name="okbutton" yestext="Ottimo!"/>
+ <notification name="OutboxFolderCreated">
+ Una nuova cartella 癡 stata creata per ciascun elemento trasferito nel livello superiore della casella in uscita del rivenditore.
+ <usetemplate ignoretext="Una nuova cartella 癡 stata creata nella casella in uscita del rivenditore" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadHadErrors">
- Caricamento di Marketplace completato senza errori. Correggi i problemi nella casella in uscita e riprova. Grazie.
- <usetemplate name="okbutton" yestext="Riprova"/>
+ <notification name="OutboxImportComplete">
+ Successo
+
+Tutte le cartelle sono state inviate a Marketplace correttamente.
+ <usetemplate ignoretext="Tutte le cartelle inviate a Marketplace" name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportHadErrors">
+ Alcune cartelle non sono state trasferite
+
+Si sono verificati degli errori durante l&apos;invio di alcune cartelle a Marketplace. Tali cartelle sono ancora nella casella in uscita del rivenditore.
+
+Per ulteriori informazioni consulta il [[MARKETPLACE_IMPORTS_URL] registro errori].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportFailed">
+ Trasferimento non riuscito
+
+Nessuna cartella 癡 stata inviata a Marketplace, a causa di un errore di sistema o di rete. Riprova pi羅 tardi.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxInitFailed">
+ Inizializzazione Marketplace non riuscita
+
+L&apos;inizializzazione con il Marketplace non ha avuto successo a causa di un errore di sistema o di rete. Riprova pi羅 tardi.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CompileQueueSaveText">
C&apos;癡 stato un problema importando il testo di uno script per la seguente ragione: [REASON]. Riprova pi羅 tardi.
@@ -647,7 +668,7 @@ Attese [VALIDS]
Impossibile creare il file in uscita: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- [APP_NAME] non supporta ancora il caricamento in blocco di file di animazione.
+ [APP_NAME] non supporta ancora il caricamento in blocco di file di animazione in formato BVH.
</notification>
<notification name="CannotUploadReason">
Impossibile importare il file [FILE] a causa del seguente motivo: [REASON]
@@ -1437,8 +1458,8 @@ Per installare l&apos;aggiornamento 癡 necessario riavviare [APP_NAME].
<usetemplate ignoretext="Conferma prima di restituire gli oggetti ai relativi proprietari" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- Sei attualmente un membro del gruppo &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
-Vuoi lasciare il gruppo?
+ Attualmente sei un membro del gruppo &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
+Lasciare il gruppo?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
@@ -2611,16 +2632,16 @@ Concedi questa richiesta?
&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; di [NAME]
[MESSAGE]
<form name="form">
- <button name="Mute" text="Blocca"/>
- <button name="Ignore" text="Ignora"/>
+ <button name="Client_Side_Mute" text="Blocca"/>
+ <button name="Client_Side_Ignore" text="Ignora"/>
</form>
</notification>
<notification name="ScriptDialogGroup">
&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; di [GROUPNAME]
[MESSAGE]
<form name="form">
- <button name="Mute" text="Blocca"/>
- <button name="Ignore" text="Ignora"/>
+ <button name="Client_Side_Mute" text="Blocca"/>
+ <button name="Client_Side_Ignore" text="Ignora"/>
</form>
</notification>
<notification name="BuyLindenDollarSuccess">
@@ -2818,6 +2839,18 @@ Con i seguenti residenti?
[RESIDENTS]
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
+ <notification name="ShareFolderConfirmation">
+ Si pu簷 condividere solo una cartella alla volta.
+
+Sei sicuro di volere condividere gli oggetti seguenti:
+
+&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
+
+Con i seguenti residenti:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Ok"/>
+ </notification>
<notification name="ItemsShared">
Gli oggetti sono stati condivisi.
</notification>
diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat.xml
index 1b529e2737..d46a15c735 100644
--- a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/it/panel_nearby_chat.xml
@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="Traduci chat" name="translate_chat_checkbox"/>
+ <layout_stack name="stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Traduci chat" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_estate.xml b/indra/newview/skins/default/xui/it/panel_region_estate.xml
index 61e3f31024..da6b6b277f 100644
--- a/indra/newview/skins/default/xui/it/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_estate.xml
@@ -23,10 +23,10 @@
<check_box label="Permetti accesso pubblico" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Limita l&apos;accesso agli account verificati con:
+ Consenti l&apos;accesso solo ai Residenti che:
</text>
- <check_box label="Informazioni di pagamento in archivio" name="limit_payment" tool_tip="Espelli i residenti non identificati"/>
- <check_box label="Verifica et" name="limit_age_verified" tool_tip="Espelli i residenti che non hanno la loro et verificata. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
+ <check_box label="Hanno memorizzato le informazioni per l&apos;addebito" name="limit_payment" tool_tip="Per poter visitare questa propriet immobiliare i Residenti devono aver fornito informazioni di pagamento a Linden Lab. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
+ <check_box label="Hanno verificato l&apos;et" name="limit_age_verified" tool_tip="Per poter visitare questa propriet immobiliare i Residenti devono aver verificato la propria et. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
<check_box label="Permetti la chat voice" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Permetti teleport diretto" name="allow_direct_teleport"/>
diff --git a/indra/newview/skins/default/xui/it/panel_script_ed.xml b/indra/newview/skins/default/xui/it/panel_script_ed.xml
index 950dfacf3a..d7ee8230b3 100644
--- a/indra/newview/skins/default/xui/it/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/it/panel_script_ed.xml
@@ -22,6 +22,8 @@
<menu label="File" name="File">
<menu_item_call label="Salva" name="Save"/>
<menu_item_call label="Annulla tutte le modifiche" name="Revert All Changes"/>
+ <menu_item_call label="Carica da file..." name="LoadFromFile"/>
+ <menu_item_call label="Salva su file..." name="SaveToFile"/>
</menu>
<menu label="Modifica" name="Edit">
<menu_item_call label="Annulla" name="Undo"/>
diff --git a/indra/newview/skins/default/xui/it/panel_status_bar.xml b/indra/newview/skins/default/xui/it/panel_status_bar.xml
index 4abc90113f..0aaf89d8c8 100644
--- a/indra/newview/skins/default/xui/it/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/it/panel_status_bar.xml
@@ -15,7 +15,7 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <panel name="balance_bg">
+ <panel left="-405" name="balance_bg" width="195">
<text name="balance" tool_tip="Clicca per aggiornare il tuo saldo in L$" value="L$ 20"/>
<button label="Acquista L$" name="buyL" tool_tip="Clicca per acquistare pi羅 L$"/>
<button label="Acquisti" name="goShop" tool_tip="Apri Mercato Second Life" width="75"/>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
index 5d6c7681f9..5ac0961bd7 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
@@ -2,47 +2,24 @@
<panel label="Cose" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<layout_stack name="inventory_layout_stack">
- <layout_panel name="inbox_outbox_layout_panel">
- <layout_stack name="inbox_outbox_layout_stack">
- <layout_panel name="inbox_layout_panel">
- <panel label="" name="marketplace_inbox">
- <string name="InboxLabelWithArg">
- Oggetti ricevuti ([NUM])
- </string>
- <string name="InboxLabelNoArg">
- Oggetti ricevuti
- </string>
- <button label="Oggetti ricevuti" name="inbox_btn"/>
- <text name="inbox_fresh_new_count">
- [NUM] nuovi
- </text>
- <panel tool_tip="Drag and drop items to your inventory to manage and use them">
- <text name="inbox_inventory_placeholder">
- Gli acquisti dal mercato verranno consegnati qui.
- </text>
- </panel>
- </panel>
- </layout_panel>
- <layout_panel name="outbox_layout_panel">
- <panel label="" name="marketplace_outbox">
- <string name="OutboxLabelWithArg">
- Casella venditore in uscita ([NUM])
- </string>
- <string name="OutboxLabelNoArg">
- Casella venditore in uscita
- </string>
- <button label="Casella venditore in uscita" name="outbox_btn"/>
- <button label="" name="outbox_sync_btn" tool_tip="Push su negozio Marketplace"/>
- <panel>
- <panel name="outbox_inventory_placeholder_panel">
- <text name="outbox_inventory_placeholder_title">
- Caricamento in corso...
- </text>
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Oggetti ricevuti ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Oggetti ricevuti
+ </string>
+ <button label="Oggetti ricevuti" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] nuovi
+ </text>
+ <panel name="inbox_inventory_placeholder_panel" tool_tip="Trascina gli elementi nell&apos;inventario per usarli">
+ <text name="inbox_inventory_placeholder">
+ Gli acquisti dal mercato verranno consegnati qui.
+ </text>
+ </panel>
+ </panel>
</layout_panel>
</layout_stack>
<panel name="button_panel">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index c81dd0f55d..8529fadd7d 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -178,8 +178,8 @@ Visita www.secondlife.com/status per aggiornamenti.
</string>
<string name="LoginFailedPremiumOnly">
L&apos;accesso a Second Life 癡 temporaneamente limitato per garantire che chi 癡 nel mondo virtuale abbia la migliore esperienza possibile.
-
-Le persona con account gratuiti non potrenno accedere a Second Life durante questo periodo, per lasciare spazio alle persone che hanno pagato per Second Life.
+
+Le persone con account gratuiti non potranno accedere a Second Life durante questo periodo, per lasciare spazio alle persone che hanno pagato per Second Life.
</string>
<string name="LoginFailedComputerProhibited">
Non si pu簷 accedere a Second Life da questo computer.
@@ -336,17 +336,35 @@ Prova ad accedere nuovamente tra un minuto.
Solo un singolo oggetto pu簷 essere creato qui
</string>
<string name="TooltipPrice" value="L$ [AMOUNT]:"/>
+ <string name="TooltipOutboxDragToWorld">
+ Non puoi rezzare elementi nella tua casella in uscita del rivenditore
+ </string>
<string name="TooltipOutboxNoTransfer">
- Almeno un oggetto non pu簷 essere venduto o trasferito a un altro utente.
+ Almeno uno di questi oggetti non pu簷 essere venduto o trasferito.
+ </string>
+ <string name="TooltipOutboxNotInInventory">
+ La tua casella in uscita del rivenditore pu簷 accettare solo elementi provenienti dal tuo inventario
</string>
<string name="TooltipOutboxWorn">
- Stai indossando almeno uno degli oggetti. Rimuovili dall&apos;avatar e prova nuovamente a spostarli.
+ Non puoi mettere gli elementi che indossi nella casella in uscita del rivenditore
+ </string>
+ <string name="TooltipOutboxCallingCard">
+ Non puoi inserire il tuo biglietto da visita nella tua casella in uscita del rivenditore
</string>
<string name="TooltipOutboxFolderLevels">
- Questa cartella contiene troppi livelli di cartelle nidificate. Riordina le cartelle interne in modo che non ci siano pi羅 di 4 livelli (cartella principale che contiene la cartella A, che contiene la cartella B, che contiene la cartella C).
+ La profondit delle caselle nidificate 癡 maggiore di 3
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ Il numero di sottocartelle nella cartella al livello pi羅 alto 癡 maggiore di 20
</string>
<string name="TooltipOutboxTooManyObjects">
- Questa cartella contiene pi羅 di 200 oggetti. Inserisci alcuni oggetti in scatole per ridurne il numero.
+ Il numero di elementi nella cartella al livello pi羅 alto 癡 maggiore di 200
+ </string>
+ <string name="TooltipDragOntoOwnChild">
+ Non puoi spostare una cartella nella relativa cartella secondaria
+ </string>
+ <string name="TooltipDragOntoSelf">
+ Non puoi spostare una cartella in se stessa
</string>
<string name="TooltipHttpUrl">
Clicca per visitare questa pagina web
@@ -811,6 +829,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="anim_yes_head">
Si
</string>
+ <string name="multiple_textures">
+ Multiple
+ </string>
<string name="texture_loading">
Caricamento in corso...
</string>
@@ -967,6 +988,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="choose_the_directory">
Scegli la cartella
</string>
+ <string name="script_files">
+ Script
+ </string>
<string name="AvatarSetNotAway">
Imposta come non assente
</string>
@@ -1205,43 +1229,36 @@ Prova ad accedere nuovamente tra un minuto.
Non hai una copia di questa texture nel tuo inventario
</string>
<string name="InventoryInboxNoItems">
- 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.
+ Gli acquissti dal mercato verranno mostrati qui. Potrai quindi trascinarli nel tuo inventario per usarli.
</string>
<string name="MarketplaceURL">
- http://marketplace.[DOMAIN_NAME]/learn_more
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
</string>
<string name="MarketplaceURL_CreateStore">
- http://marketplace.[DOMAIN_NAME]/create_store
+ http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4
</string>
- <string name="MarketplaceURL_LearnMore">
- http://marketplace.[DOMAIN_NAME]/learn_more
- </string>
- <string name="InventoryOutboxCreationErrorTitle">
- La casella in uscita del rivenditore non 癡 configurata correttamente
+ <string name="MarketplaceURL_Dashboard">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard
</string>
- <string name="InventoryOutboxCreationErrorTooltip">
- Errore di configurazione della casella in uscita del rivenditore
+ <string name="MarketplaceURL_Imports">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports
</string>
- <string name="InventoryOutboxCreationError">
- Contatta l&apos;Assistenza clienti per correggere il problema.
+ <string name="MarketplaceURL_LearnMore">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryOutboxNotMerchantTitle">
- Chiunque pu簷 vendere oggetti nel Marketplace
- </string>
- <string name="InventoryOutboxNotMerchantTooltip">
- Diventa un rivenditore!
+ Chiunque pu簷 vendere oggetti nel Marketplace.
</string>
+ <string name="InventoryOutboxNotMerchantTooltip"/>
<string name="InventoryOutboxNotMerchant">
- [[MARKETPLACE_URL] Second Life Marketplace] offre in vendita pi羅 di un milione di prodotti virtuali, tutti creati da Residenti. Anche tu puoi vendere gli oggetti che crei, oltre ad alcuni degli oggetti che hai acquistato. facile da usare e l&apos;impostazione 癡 gratuita. [[LEARN_MORE_URL] Leggi ulteriori informazioni] oppure [[CREATE_STORE_URL] crea un negozio] sul Marketplace per cominciare.
+ Per diventare un venditore, devi [[MARKETPLACE_CREATE_STORE_URL] creare un negozio nel Marketplace].
</string>
<string name="InventoryOutboxNoItemsTitle">
- Un nuovo modo di inviare oggetti al Marketplace
- </string>
- <string name="InventoryOutboxNoItemsTooltip">
- Trascina gli oggetti qui per prepararli per la vendita nel Marketplace
+ La tua casella in uscita 癡 vuota.
</string>
+ <string name="InventoryOutboxNoItemsTooltip"/>
<string name="InventoryOutboxNoItems">
- Trascina elementi o cartelle che desideri vendere in quest&apos;area. Verr visualizzata una copia dell&apos;elemento, senza che venga modificato l&apos;inventario, tranne nel caso in cui venga trascinato un oggetto per cui non 癡 permessa la copia. Clicca sul pulsante Carica per caricare gli elementi su Marketplace. Dopo aver spostato gli elementi nell&apos;inventario di Marketplace, non saranno pi羅 visibili in questa cartella.
+ Trascina le cartelle in questa area e clicca su &quot;Invia a Marketplace&quot; per metterle in vendita su [[MARKETPLACE_DASHBOARD_URL] Marketplace].
</string>
<string name="Marketplace Error None">
Nessun errore
@@ -1253,7 +1270,7 @@ Prova ad accedere nuovamente tra un minuto.
Errore: questa cartella non include alcun contenuto.
</string>
<string name="Marketplace Error Unassociated Products">
- Errore: Oggetto non caricato perch矇 il tuo account venditore ha troppi oggetti che non sono associati con dei prodotti. Per risolvere questo errore, esegui l&apos;accesso al sito di Marketplace e riduci il numero di oggetti non associati.
+ Errore: Oggetto non caricato perch矇 il tuo account venditore ha troppi oggetti che non sono associati con dei prodotti. Per risolvere questo errore, esegui l&apos;accesso al sito di Marketplace e riduci il numero di oggetti non associati.
</string>
<string name="Marketplace Error Object Limit">
Errore: questo elemento contiene troppi oggetti. Per risolvere questo problema, inserisci pi羅 oggetti insieme in una scatola per ridurre a meno di 200 il numero totale di oggetti.
@@ -3829,6 +3846,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Saved_message">
(Salvato [LONG_TIMESTAMP])
</string>
+ <string name="IM_unblock_only_groups_friends">
+ Per vedere questo messaggio, devi deselezionare &apos;Solo amici e gruppi possono chiamarmi o mandarmi IM&apos; in Preferenze/Privacy.
+ </string>
<string name="answered_call">
Risposto alla chiamata
</string>
@@ -4014,7 +4034,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
</string>
<string name="uploading_abuse_report">
Caricamento in corso...
-
+
Segnala abuso
</string>
<string name="New Shape">
@@ -4282,7 +4302,7 @@ Segnala abuso
<string name="server_is_down">
Nonostante i nostri tentativi, si 癡 verificato un errore imprevisto.
- Consulta la pagina status.secondlifegrid.net per determinare se si sia verificato un problema noto con il servizio.
+ Consulta la pagina status.secondlifegrid.net per determinare se si sia verificato un problema noto con il servizio.
Se il problema continua, ti consigliamo di controllare le tue impostazioni di rete e della firewall.
</string>
<string name="dateTimeWeekdaysNames">
@@ -4749,6 +4769,9 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Command_Move_Label">
Cammina / corri / vola
</string>
+ <string name="Command_Outbox_Label">
+ Casella in uscita del rivenditore
+ </string>
<string name="Command_People_Label">
Persone
</string>
@@ -4821,6 +4844,9 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Command_Move_Tooltip">
Movimento avatar
</string>
+ <string name="Command_Outbox_Tooltip">
+ Trasferisci elementi al tuo mercato per la vendita
+ </string>
<string name="Command_People_Tooltip">
Amici, gruppi e persone vicine
</string>
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 816a6ff203..7c87bad5a3 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -375,7 +375,7 @@
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="胯芥胯阡豢"/>
<text name="allow_label5">
- 桀箇颯怒U踴潦思艾扼整
+ 隞桀箇颯怒U踴潦桀箇颯怒U踴潦思艾扼
</text>
<check_box label="U踴潦銵函內" name="SeeAvatarsCheck" tool_tip="隞桀箇颯柴U踴潦桀箇颯怒U踴潦思艾具閮勗胯芥U踴潦思艾扼怒整"/>
<text name="landing_point">
@@ -459,12 +459,12 @@
<text name="Limit access to this parcel to:">
桀箇颯詻柴U胯颯
</text>
- <check_box label="芥胯U胯颯嫘閮勗胯 [MATURITY]" name="public_access"/>
+ <check_box label="芥胯U胯颯嫘閮勗荔柴芥瑯扼喋芥怒函亦甇U押扎喋雿整嚗" name="public_access"/>
<text name="Only Allow">
- 甈∼桐鈭箝柴U胯颯嫘閮勗荔
+ 甈∼桐鈭箝怒柴踴U胯颯嫘閮勗荔
</text>
- <check_box label="舀梁駁脫 [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="芰Ⅱ隤桐鈭箝桃乓蝳甇U整"/>
- <check_box label="撟湧耦蝣箄 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="撟湧耦蝣箄皜整艾芥雿鈭箝桃乓蝳甇U整 閰喋晞 [SUPPORT_SITE] 閬找"/>
+ <check_box label="舀晞駁脯艾 [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="舀晞駁脯艾芥具桀箇颯怒U胯颯嫘具胯扼整閰喟敦怒扎艾胯[SUPPORT_SITE] 閬扼"/>
+ <check_box label="撟湧耦蝣箄皜扼 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="桀箇颯怒U胯颯嫘怒胯撟湧耦蝣箄皜整敹閬整閰喟敦怒扎艾胯[SUPPORT_SITE] 閬扼"/>
<check_box label="啜怒潦柴U胯颯嫘閮勗荔[GROUP]" name="GroupCheck" tool_tip="銝研踴扼啜怒潦豢艾"/>
<check_box label="亙渲迂胯鞎拙ㄡ嚗" name="PassCheck" tool_tip="桀箇颯詻桐芥U胯颯嫘閮勗胯整"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/ja/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_anim_preview.xml
new file mode 100644
index 0000000000..2bada303ae
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_animation_anim_preview.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Anim Preview" title="ANIMATION.ANIM">
+ <text name="name_label">
+ 嚗
+ </text>
+ <text name="description_label">
+ 隤祆嚗
+ </text>
+ <button label="U准潦嚗L$[AMOUNT]嚗" name="ok_btn"/>
+ <button label="瘨" label_selected="瘨" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_bvh_preview.xml
new file mode 100644
index 0000000000..f74bab3598
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_animation_bvh_preview.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview">
+ <floater.string name="failed_to_initialize">
+ 扼整扼
+ </floater.string>
+ <floater.string name="anim_too_long">
+ U∼潦瑯扼喋∼扎怒桅瑯 [LENGTH] 蝘扼
+
+U∼潦瑯扼喋格憭折瑯 [MAX_LENGTH] 蝘扼
+ </floater.string>
+ <floater.string name="failed_file_read">
+ U∼潦瑯扼喋∼扎怒隤准踹整
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ Ok
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ ∼扎怒桃蝡胯銝摰具扼
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ 嗥摰蝢押隤准踹整
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ BVH ∼扎怒整
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ HIERARCHY 潦∪嫘扼
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ ROOT 整 JOINT 閬扎整
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ JOINT 敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ OFFSET 閬扎整
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ CHANNELS 閬扎整
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ 頠a摨敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ 頠Z遘敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ MOTION 閬扎整
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ 研潦啜敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ 研潦敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ 雿蝵柴桀扎敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ 頠W扎敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ 憭∼扎怒整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ 憭潦隤准踹整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ 憭隤准踹整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ 憭∟扎隤准踹整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ 憭詨紋扎隤准踹整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ 憭 outname 扎隤准踹整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ 憭銵隤准踹整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Mergechild 敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Mergeparent 敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ priority 扎敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ loop 扎敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ easeln 扎敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ easeOut 扎敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Hand morph 扎敺扼整
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ emote 隤准踴具整
+ </floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ 怒潦詻扼扎喋銝甇扼hip雿輻具艾
+ </floater.string>
+ <text name="name_label">
+ 嚗
+ </text>
+ <text name="description_label">
+ 隤祆嚗
+ </text>
+ <spinner label="芸摨" name="priority" tool_tip="柴U∼潦瑯扼喋扼押柴U∼潦瑯扼喋銝詻扼瘙箝整"/>
+ <check_box label="怒潦" name="loop_check" tool_tip="柴U∼潦瑯扼喋怒潦怒整"/>
+ <spinner label="扎喉嚗嚗" name="loop_in_point" tool_tip="U∼潦瑯扼喋柴怒潦敺拙萼嫘閮剖整"/>
+ <spinner label="U艾嚗嚗嚗" name="loop_out_point" tool_tip="U∼潦瑯扼喋柴怒潦蝯鈭嫘閮剖整"/>
+ <text name="hand_label">
+ 柴潦
+ </text>
+ <combo_box name="hand_pose_combo" tool_tip="U∼潦瑯扼喳銝准格桀瘙箝整">
+ <combo_box.item label="摨" name="Spread"/>
+ <combo_box.item label="芥押胯" name="Relaxed"/>
+ <combo_box.item label="颱腹" name="PointBoth"/>
+ <combo_box.item label="" name="Fist"/>
+ <combo_box.item label="芥押胯嫘餃椰" name="RelaxedLeft"/>
+ <combo_box.item label="餃椰" name="PointLeft"/>
+ <combo_box.item label="喋銝餃椰" name="FistLeft"/>
+ <combo_box.item label="芥押胯嫘餃" name="RelaxedRight"/>
+ <combo_box.item label="餃" name="PointRight"/>
+ <combo_box.item label="喋銝餃" name="FistRight"/>
+ <combo_box.item label="祉兮餃" name="SaluteRight"/>
+ <combo_box.item label="踴扎喋" name="Typing"/>
+ <combo_box.item label="潦嫘餃" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ 銵冽
+ </text>
+ <combo_box name="emote_combo" tool_tip="U∼潦瑯扼喳銝准桅株”瘙箝整">
+ <item label="嚗芥嚗" name="[None]" value=""/>
+ <item label="U潦潦潦潦" name="Aaaaah" value="U潦潦潦潦"/>
+ <item label="" name="Afraid" value=""/>
+ <item label="" name="Angry" value=""/>
+ <item label="皞U桃" name="BigSmile" value="皞U桃"/>
+ <item label="撅" name="Bored" value="撅"/>
+ <item label="瘜" name="Cry" value="瘜"/>
+ <item label="頠質" name="Disdain" value="頠質"/>
+ <item label="乓" name="Embarrassed" value="乓"/>
+ <item label="" name="Frown" value=""/>
+ <item label="准" name="Kiss" value="准"/>
+ <item label="蝚" name="Laugh" value="蝚"/>
+ <item label="扎" name="Plllppt" value="扎"/>
+ <item label="憳芣" name="Repulsed" value="憳芣"/>
+ <item label="脯" name="Sad" value="脯"/>
+ <item label="押" name="Shrug" value="押"/>
+ <item label="敺桃" name="Smile" value="敺桃"/>
+ <item label="撽" name="Surprise" value="撽"/>
+ <item label="艾喋" name="Wink" value="艾喋"/>
+ <item label="敹" name="Worry" value="敹"/>
+ </combo_box>
+ <text name="preview_label">
+ 研乓潔葉桀雿
+ </text>
+ <combo_box name="preview_base_anim" tool_tip="雿輻具艾U踴潦銝祉芥U胯瑯扼喋摰銵艾怒U∼潦瑯扼喋桀雿嫘整">
+ <item label="蝡" name="Standing" value="蝡"/>
+ <item label="甇押" name="Walking" value="甇押"/>
+ <item label="摨扼" name="Sitting" value="摨扼"/>
+ <item label="憌" name="Flying" value="憌"/>
+ </combo_box>
+ <spinner label="扎潦箝扎喉蝘嚗" name="ease_in_time" tool_tip="U∼潦瑯扼喋柴研喋扎單嚗蝘嚗"/>
+ <spinner label="扎潦箝U艾嚗蝘嚗" name="ease_out_time" tool_tip="U∼潦瑯扼喋柴研喋U艾嚗蝘嚗"/>
+ <button name="play_btn" tool_tip="U∼潦瑯扼喋"/>
+ <button name="pause_btn" tool_tip="U∼潦瑯扼喋銝甇U"/>
+ <button name="stop_btn" tool_tip="U∼潦瑯扼喋桀甇U"/>
+ <text name="bad_animation_text">
+ U∼潦瑯扼喋∼扎怒隤准踹整
+
+Poser 4 具胯嫘潦 BVH ∼扎怒扼整
+ </text>
+ <button label="U准潦嚗L$[AMOUNT]嚗" name="ok_btn"/>
+ <button label="瘨" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_chat_bar.xml b/indra/newview/skins/default/xui/ja/floater_chat_bar.xml
index 504cea5931..11f223ade6 100644
--- a/indra/newview/skins/default/xui/ja/floater_chat_bar.xml
+++ b/indra/newview/skins/default/xui/ja/floater_chat_bar.xml
@@ -2,6 +2,6 @@
<floater name="chat_bar" title="餈柴">
<panel name="bottom_panel">
<line_editor label="胯芥胯艾憪整" name="chat_box" tool_tip="Enter 准潦潦西店Ctrl + Enter 准潦批怒喋整"/>
- <button name="show_nearby_chat" tool_tip="餈柴准啜銵函內駁銵函內"/>
+ <button name="show_nearby_chat" tool_tip="餈柴准啜銵函內嚗銵函內"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
index 725214086a..c01c46211e 100644
--- a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="∠押U扎柴准">
+<floater name="item properties" title="扎喋喋芥U扎柴准">
<floater.string name="unknown">
(銝嚗
</floater.string>
@@ -24,11 +24,11 @@
<text name="LabelCreatorTitle">
胯芥具潦踴
</text>
- <button label="" label_selected="" name="BtnCreator"/>
+ <button label="准潦..." label_selected="" name="BtnCreator"/>
<text name="LabelOwnerTitle">
芥潦潘
</text>
- <button label="" label_selected="" name="BtnOwner"/>
+ <button label="准潦..." label_selected="" name="BtnOwner"/>
<text name="LabelAcquiredTitle">
交交嚗
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
index 47d57da031..af96edda79 100644
--- a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="餈敺∠押U扎">
+<floater name="Inventory Finder" title="扎喋喋芣餈敺U扎">
<check_box label="U∼潦瑯扼" name="check_animation"/>
<check_box label="喋潦芥喋啜颯怒潦" name="check_calling_card"/>
<check_box label="" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/ja/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..c59a3dc0ab
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_merchant_outbox.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_merchant_outbox" title="潦喋U艾胯">
+ <string name="OutboxFolderCount1">
+ 1 柴押怒
+ </string>
+ <string name="OutboxFolderCountN">
+ [NUM] 柴押怒
+ </string>
+ <string name="OutboxImporting">
+ 押怒靽∩葉...
+ </string>
+ <string name="OutboxInitializing">
+ 銝...
+ </string>
+ <panel label="">
+ <panel>
+ <panel name="outbox_inventory_placeholder_panel">
+ <text name="outbox_inventory_placeholder_title">
+ 准潦銝...
+ </text>
+ </panel>
+ </panel>
+ <panel>
+ <button label="潦晞研扎嫘恍靽" name="outbox_import_btn" tool_tip="芸柴潦晞研扎孵准怎宏"/>
+ </panel>
+ </panel>
+</floater>
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 6aaa9a42a5..746bd8553c 100644
--- a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
@@ -6,20 +6,20 @@
<button label="2. 拙" name="optimize_btn"/>
<button label="1. ∼扎怒豢" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
U怒∼扎怒豢
</text>
</panel>
- <panel name="content">
+ <panel name="choose_file_content">
<text name="advanced_users_text">
- 銝蝝艾潦嗚潦桀游嚗3D 喋喋喋桀嗡潦怒雿踴嫘胯擃摨艾芥U准潦潦閰艾
+ 銝蝝艾潦嗚潦桀游嚗3D 喋喋喋嗡潦怒桐蝙具急艾嫘胯擃摨艾芥U准潦潦閰艾
</text>
<button label="U喋嫘U潦怠踴" name="switch_to_advanced"/>
<text name="Cache location">
- U准潦U怒∼扎怒桅豢
+ U准潦U怒∼扎怒豢
</text>
- <button label="" label_selected="" name="browse"/>
+ <button label="..." label_selected="..." name="browse"/>
<text name="Model types">
Second Life COLLADA (.dae) ∼扎怒萸潦整
</text>
@@ -35,15 +35,15 @@
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
U怒拙
</text>
</panel>
- <text name="description">
- 押潦喋嫘閬艾U怒拙整敹閬怠西矽氬艾
+ <text name="optimize_description">
+ U怒胯押潦喋嫘閬行拙艾整敹閬怠西矽氬艾
</text>
- <panel name="content">
+ <panel name="optimize_content">
<text name="high_detail_text">
甈∼格餉底蝝啣漲雿嚗擃
</text>
@@ -79,16 +79,16 @@
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
拍雿具株矽
</text>
</panel>
- <text name="description">
+ <text name="physics_description">
U怒桀畾餅柴瑯扼扎臬蝷整雿整U怒桃桃怠艾瑯扼扎株底蝝啣漲隤踵氬艾
</text>
- <panel name="content">
- <button label="拍瞍蝞艾扼扎閮蝞" name="recalculate_physics_btn"/>
+ <panel name="physics_content">
+ <button label="拍雿具閮蝞" name="recalculate_physics_btn"/>
<button label="閮蝞銝..." name="recalculating_physics_btn"/>
<text name="lod_label">
拍雿具柴研乓
@@ -110,12 +110,12 @@
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
蝣箄
</text>
</panel>
- <panel name="content">
+ <panel name="review_content">
<text name="review_prim_equiv">
箇/芥潦詻扼喋詻株瘀[EQUIV] 芥蝞
</text>
@@ -123,13 +123,13 @@
L$ [FEE] 柴U准潦芥柴U怒艾喋怨瘙整
</text>
<text name="review_confirmation">
- U准潦踴喋胯芥胯具U怒怠怒整芥U怒格璅押雿輻刻迂胯具隤具怒芥整
+ U准潦踴喋胯芥胯具怒U怒怠怒整芥U怒格璅押雿輻刻迂胯格隤具怒芥整
</text>
</panel>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
U准潦摰鈭
</text>
</panel>
@@ -137,7 +137,7 @@
U怒U准潦整
</text>
<text name="inventory_text">
- 舀∠押柴芥詻扼胯押怒怒整
+ 胯扎喋喋芥柴芥詻扼胯押怒怒整
</text>
<text name="charged_fee">
芥柴U怒艾喋 L$ [FEE] 隢瘙整
diff --git a/indra/newview/skins/default/xui/ja/floater_my_inventory.xml b/indra/newview/skins/default/xui/ja/floater_my_inventory.xml
index c6a789b63b..d708fc3dec 100644
--- a/indra/newview/skins/default/xui/ja/floater_my_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/floater_my_inventory.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_inventory" title="∠"/>
+<floater name="floater_my_inventory" title="扎喋喋"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_object_weights.xml b/indra/newview/skins/default/xui/ja/floater_object_weights.xml
index 3bd9b6b069..d727a268fb 100644
--- a/indra/newview/skins/default/xui/ja/floater_object_weights.xml
+++ b/indra/newview/skins/default/xui/ja/floater_object_weights.xml
@@ -6,7 +6,7 @@
<text name="objects_label" value="芥詻扼胯"/>
<text name="prims" value="--"/>
<text name="prims_label" value="芥"/>
- <text name="weights_of_selected_text" value="豢皜輸柴柴艾具扎"/>
+ <text name="weights_of_selected_text" value="豢皜踴U扎柴艾具扎"/>
<text name="download" value="--"/>
<text name="download_label" value="艾喋准潦"/>
<text name="physics" value="--"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_openobject.xml b/indra/newview/skins/default/xui/ja/floater_openobject.xml
index bd1b650f98..af02ffedda 100644
--- a/indra/newview/skins/default/xui/ja/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/ja/floater_openobject.xml
@@ -3,6 +3,6 @@
<text name="object_name">
[DESC]:
</text>
- <button label="∠押怒喋" label_selected="∠押怒喋" name="copy_to_inventory_button"/>
+ <button label="扎喋喋芥怒喋" label_selected="扎喋喋芥怒喋" name="copy_to_inventory_button"/>
<button label="喋潦西" label_selected="喋潦西" name="copy_and_wear_button"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_people.xml b/indra/newview/skins/default/xui/ja/floater_people.xml
index 08bee88103..b180658ab7 100644
--- a/indra/newview/skins/default/xui/ja/floater_people.xml
+++ b/indra/newview/skins/default/xui/ja/floater_people.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_people" title="鈭">
<panel_container name="main_panel">
- <panel label="啜怒潦" name="panel_group_info_sidetray"/>
+ <panel label="啜怒潦准潦" name="panel_group_info_sidetray"/>
<panel label="准胯雿鈭箝具芥詻扼胯" name="panel_block_list_sidetray"/>
</panel_container>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
index 4fc59e16d3..a3042f66ea 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
隤祆嚗
</text>
- <button label="扎喋胯潦怒批" label_selected="甇" name="Anim play btn" tool_tip="隞鈭箝怒閬怠整"/>
- <button label="准潦怒怠" label_selected="甇" name="Anim audition btn" tool_tip="芸閬怠整"/>
+ <button label="扎喋胯潦怒批" label_selected="甇" name="Inworld" tool_tip="隞鈭箝怨怠"/>
+ <button label="准潦怒怠" label_selected="甇" name="Locally" tool_tip="芸閬怠"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
index 6ea1d79cfc..4617fd1d92 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
@@ -4,7 +4,7 @@
胯嫘嚗 [NAME]
</floater.string>
<floater.string name="Copy">
- ∠押怒喋
+ 扎喋喋芥怒喋
</floater.string>
<text name="desc txt">
隤祆嚗
diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
index cf4732a68e..f145a2e8b8 100644
--- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
@@ -10,7 +10,7 @@
</string>
<string name="inventory_progress_str">
- ∠押思摮
+ 扎喋喋芥思摮
</string>
<string name="local_progress_str">
喋喋乓潦踴思摮
@@ -22,7 +22,7 @@
∼潦怒靽∼整
</string>
<string name="inventory_succeeded_str">
- ∠押思摮整
+ 扎喋喋芥思摮整
</string>
<string name="local_succeeded_str">
喋喋乓潦踴思摮整
@@ -34,7 +34,7 @@
∼潦怒靽∼扼整扼
</string>
<string name="inventory_failed_str">
- ∠押思摮扼整扼
+ 扎喋喋芥思摮扼整扼
</string>
<string name="local_failed_str">
喋喋乓潦踴思摮扼整扼
diff --git a/indra/newview/skins/default/xui/ja/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/ja/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..31b5bbd3bf
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_test_layout_stacks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="研扎U艾嫘踴胯嫘"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/ja/floater_test_text_vertical_aligment.xml
new file mode 100644
index 0000000000..40fd8e9f93
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_test_text_vertical_aligment.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="嫘具艾喋"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index 8eddf55a44..2d12a5e56a 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -1,5 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="嗡潦" title="">
+ <floater.string name="grid_screen_text">
+ 駁
+ </floater.string>
+ <floater.string name="grid_local_text">
+ 准潦怒
+ </floater.string>
+ <floater.string name="grid_world_text">
+ 銝
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ 芥∼研喋
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ U踴∼喋
+ </floater.string>
<floater.string name="status_rotate">
脯桐喋押啜艾芥詻扼胯頠
</floater.string>
@@ -63,7 +78,12 @@
</text>
<check_box initial_value="true" label="胯嫘撘撱嗚啜" name="checkbox stretch textures"/>
<check_box initial_value="true" label="嫘" name="checkbox snap to grid"/>
- <button label="芥瑯扼..." label_selected="芥瑯扼" name="Options..." tool_tip="啜芥芥瑯扼喋銵函內整"/>
+ <combo_box name="combobox grid mode" tool_tip="芥詻扼胯桅蝵柴思蝙啜芥怒潦押桃車憿豢">
+ <combo_box.item label="銝" name="World"/>
+ <combo_box.item label="准潦怒" name="Local"/>
+ <combo_box.item label="芥∼研喋" name="Reference"/>
+ </combo_box>
+ <button label="" label_selected="芥瑯扼" name="Options..." tool_tip="啜芥芥瑯扼喋銵函內整"/>
<button label="" label_selected="" name="ToolCube" tool_tip="准乓潦"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="芥箝"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="押"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
index 801b7a9db0..ee675e143b 100644
--- a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
@@ -42,13 +42,16 @@
<string name="effect_Demon">
潦U
</string>
+ <string name="effect_Female Elf">
+ 憟單扼柴具怒
+ </string>
<string name="effect_Flirty">
瘞柴
</string>
<string name="effect_Foxy">
</string>
- <string name="effect_Halloween_2010_Bonus">
+ <string name="effect_Halloween 2010 Bonus">
准艾訛2010_潦
</string>
<string name="effect_Helium">
@@ -57,9 +60,18 @@
<string name="effect_Husky">
嫘准
</string>
+ <string name="effect_Husky Whisper">
+ 嫘U潦准潦艾嫘
+ </string>
<string name="effect_Intercom">
扎喋踴潦
</string>
+ <string name="effect_Julia">
+ 詻乓芥
+ </string>
+ <string name="effect_Lo Lilt">
+ 頠賢翰
+ </string>
<string name="effect_Macho">
</string>
@@ -69,6 +81,9 @@
<string name="effect_Mini">
</string>
+ <string name="effect_Model">
+ U
+ </string>
<string name="effect_Nano">
</string>
@@ -90,6 +105,9 @@
<string name="effect_Roxanne">
准胯萸
</string>
+ <string name="effect_Rumble">
+ 押喋
+ </string>
<string name="effect_Sabrina">
萸芥
</string>
@@ -102,6 +120,9 @@
<string name="effect_Shorty">
</string>
+ <string name="effect_Smaller">
+ 撠
+ </string>
<string name="effect_Sneaky">
喋賬喋
</string>
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml
index 2edade70bf..5a0519ba19 100644
--- a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
<menu_item_call label="閫艾" name="touch"/>
<menu_item_call label="摨扼" name="sit"/>
<menu_item_call label="舀" name="pay"/>
@@ -12,7 +12,8 @@
<menu_item_call label="餈賢" name="add"/>
<menu_item_call label="勗" name="report"/>
<menu_item_call label="准" name="block"/>
+ <menu_item_call label="准航圾" name="unblock"/>
<menu_item_call label="箝潦扎" name="zoom_in"/>
<menu_item_call label="" name="remove"/>
<menu_item_call label="閰喟敦" name="more_info"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml
index 9449e61274..d1893a0fc8 100644
--- a/indra/newview/skins/default/xui/ja/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml
@@ -59,6 +59,7 @@
<menu_item_call label="准" name="Properties"/>
<menu_item_call label="憭氬" name="Rename"/>
<menu_item_call label="UUID 喋潦" name="Copy Asset UUID"/>
+ <menu_item_call label="怒" name="Cut"/>
<menu_item_call label="喋" name="Copy"/>
<menu_item_call label="鞎潦隞" name="Paste"/>
<menu_item_call label="芥喋胯鞎潦隞" name="Paste As Link"/>
@@ -84,6 +85,6 @@
<menu_item_call label="餈賢" name="Wearable Add"/>
<menu_item_call label="憭" name="Take Off"/>
<menu_item_call label="潦喋柴U艾胯嫘怒喋" name="Merchant Copy"/>
- <menu_item_call label="潦喋柴U艾胯嫘怎宏" name="Merchant Move"/>
+ <menu_item_call label="潦晞研扎嫘恍靽" name="Marketplace Send"/>
<menu_item_call label="嚗嚗芥瑯扼喋芥嚗嚗" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml
index 1f425df83c..f38dbc71a8 100644
--- a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_gear_default">
- <menu_item_call label="啜∠押艾喋" name="new_window"/>
+ <menu_item_call label="啜扎喋喋芥艾喋" name="new_window"/>
<menu_item_check label="找蒂寞踴" name="sort_by_name"/>
<menu_item_check label="啜思蒂寞踴" name="sort_by_recent"/>
<menu_item_check label="押怒撣詻怠思蒂嫘" name="sort_folders_by_name"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml
index 4c88f17f3d..ab6d9e3546 100644
--- a/indra/newview/skins/default/xui/ja/menu_login.xml
+++ b/indra/newview/skins/default/xui/ja/menu_login.xml
@@ -17,8 +17,8 @@
<menu_item_call label="艾喋艾柴萸扎箝閮剖..." name="Set Window Size..."/>
<menu_item_call label="拍刻蝝銵函內" name="TOS"/>
<menu_item_call label="胯芥怒怒∼颯潦詻銵函內" name="Critical"/>
- <menu_item_call label="∼U押艾嗚柴嫘" name="Web Browser Test"/>
<menu_item_call label="Web 喋喋喋准潦踴潦柴啜嫘" name="Web Content Floater Debug Test"/>
+ <menu label="准啜研怒閮剖" name="Set Logging Level"/>
<menu_item_check label="啜芥怒潦銵函內" name="Show Grid Picker"/>
<menu_item_call label="乓喋喋賬潦怒銵函內" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml
index e64f97fda5..c455204722 100644
--- a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_folder_gear">
<menu_item_call label="押喋潦胯餈賢" name="add_landmark"/>
<menu_item_call label="押怒餈賢" name="add_folder"/>
- <menu_item_call label="敺拙" name="restore_item"/>
+ <menu_item_call label="U扎敺拙" name="restore_item"/>
<menu_item_call label="" name="cut"/>
<menu_item_call label="喋" name="copy_folder"/>
<menu_item_call label="鞎潦隞" name="paste"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml
index f416b5b1f6..579f2c2cbd 100644
--- a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_ladmark_gear">
<menu_item_call label="研潦" name="teleport"/>
<menu_item_call label="刻底" name="more_info"/>
<menu_item_call label="啣喋怨”蝷" name="show_on_map"/>
<menu_item_call label="押喋潦胯餈賢" name="add_landmark"/>
<menu_item_call label="押怒餈賢" name="add_folder"/>
- <menu_item_call label="敺拙" name="restore_item"/>
+ <menu_item_call label="U扎敺拙" name="restore_item"/>
<menu_item_call label="" name="cut"/>
<menu_item_call label="押喋潦胯喋" name="copy_landmark"/>
<menu_item_call label="SLurl 喋" name="copy_slurl"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml
index 7af2f9e2cd..147ab44a1b 100644
--- a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="∠押U扎銵函內" name="show_item"/>
+ <menu_item_call label="扎喋喋芥U扎銵函內" name="show_item"/>
<menu_item_call label="胯芥潦怒喋" name="url_copy_label"/>
<menu_item_call label="SLurl 胯芥潦怒喋" name="url_copy"/>
</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 ef3261f1d4..8496dfb1db 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -4,8 +4,8 @@
<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_call label="啜∠押艾喋" name="NewInventoryWindow"/>
+ <menu_item_check label="扎喋喋..." name="Inventory"/>
+ <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"/>
@@ -14,14 +14,14 @@
<menu_item_check label="憌" name="Fly"/>
<menu_item_check label="撣詻怨粥" name="Always Run"/>
<menu_item_call label="蝘柴U∼潦瑯扼喋甇U" name="Stop Animating My Avatar"/>
+ <menu_item_call label="甇抵嚗韏啗嚗憌銵..." name="Walk / run / fly"/>
</menu>
<menu label="准啜扎" name="Status">
<menu_item_call label="銝撣凋葉" name="Set Away"/>
<menu_item_call label="颲潦蹂葉" name="Set Busy"/>
</menu>
- <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="L$ 株頃..." name="Buy and Sell L$"/>
+ <menu_item_call label="潦喋U艾胯..." name="MerchantOutbox"/>
<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>
@@ -63,11 +63,11 @@
<menu_item_check label="箇颯准" name="Parcel Properties"/>
<menu_item_check label="U喋嫘∼乓" name="Show Advanced Menu"/>
</menu>
- <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"/>
- <menu_item_call label="瘛勗" name="Midnight"/>
+ <menu_item_call label="憭銝" name="Midnight"/>
<menu_item_call label="芥潦詻扼喋株身摰雿輻" name="Use Region Settings"/>
</menu>
<menu label="芰嗥啣具踴" name="Environment Editor">
@@ -113,7 +113,7 @@
<menu_item_call label="鞎瑯" name="Menu Object Buy"/>
<menu_item_call label="" name="Menu Object Take"/>
<menu_item_call label="喋潦" name="Take Copy"/>
- <menu_item_call label="∠押思摮" name="Save Object Back to My Inventory"/>
+ <menu_item_call label="扎扎喋喋芥思摮" name="Save Object Back to My Inventory"/>
<menu_item_call label="芥詻扼胯桐葉頨怒思摮" name="Save Object Back to Object Contents"/>
<menu_item_call label="芥詻扼胯餈氬" name="Return Object back to Owner"/>
</menu>
@@ -178,22 +178,22 @@
<menu_item_check label="銝鈭箇妍閬嫘柴具怠摮蝺銵函內" name="ShowCrosshairs"/>
</menu>
<menu label="研喋芥喋堆蝔桅嚗" name="Rendering Types">
- <menu_item_check label="瑯喋" name="Simple"/>
- <menu_item_check label="U怒" name="Alpha"/>
- <menu_item_check label="" name="Tree"/>
- <menu_item_check label="U踴" name="Character"/>
- <menu_item_check label="萸潦扼嫘" name="Surface Patch"/>
- <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="U怒" name="Rendering Type Alpha"/>
+ <menu_item_check label="" name="Rendering Type Tree"/>
+ <menu_item_check label="U踴" 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="研喋芥喋堆璈踝" name="Rendering Features">
- <menu_item_check label="UI" name="UI"/>
+ <menu_item_check label="UI" name="ToggleUI"/>
<menu_item_check label="豢皜" name="Selected"/>
<menu_item_check label="扎押扎" name="Highlighted"/>
<menu_item_check label="扎胯胯嫘" name="Dynamic Textures"/>
@@ -207,8 +207,6 @@
<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_check label="U喋嫘∼乓潦銵函內 - 研研瑯潦柴瑯扼潦怒" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="艾喋艾" name="Close Window"/>
<menu_item_call label="具艾柴艾喋艾" name="Close All Windows"/>
@@ -217,13 +215,6 @@
<menu_item_check label="詻扼扎嫘胯押扎怒" 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="箝潦扎" name="Zoom In"/>
<menu_item_call label="箝潦嚗押怒嚗" name="Zoom Default"/>
<menu_item_call label="箝潦U艾" name="Zoom Out"/>
@@ -296,6 +287,7 @@
<menu_item_check label="研扎准嫘" name="Raycast"/>
<menu_item_check label="憸具柴胯" name="Wind Vectors"/>
<menu_item_check label="颯株底蝝啣漲" name="rendercomplexity"/>
+ <menu_item_check label="瘛颱U扎柴扎" name="attachment bytes"/>
<menu_item_check label="嫘怒怒" name="Sculpt"/>
</menu>
<menu label="研喋芥喋" name="Rendering">
@@ -337,17 +329,16 @@
<menu_item_call label="閮脤憪" name="Start Record"/>
<menu_item_call label="閮脣甇" name="Stop Record"/>
</menu>
- <menu label="銝" name="World">
+ <menu label="銝" name="DevelopWorld">
<menu_item_check label="瑯桀云賬株身摰∟" name="Sim Sun Override"/>
- <menu_item_check label="潦喋喋撘瑁矽銵函內" name="Cheesy Beacon"/>
<menu_item_check label="箏憭拇" name="Fixed Weather"/>
- <menu_item_call label="芥潦詻扼喋芥詻扼胯柴准瑯乓喋" name="Dump Region Object Cache"/>
+ <menu_item_call label="芥潦詻扼喋芥詻扼胯柴准瑯乓喋" name="Dump Region Object Cache"/>
</menu>
<menu label="UI" name="UI">
<menu_item_call label="∼U押艾嗚柴嫘" name="Web Browser Test"/>
<menu_item_call label="Web 喋喋喋押艾" name="Web Content Browser"/>
<menu_item_call label="SelectMgr 喋" name="Dump SelectMgr"/>
- <menu_item_call label="∠押桀箏" name="Dump Inventory"/>
+ <menu_item_call label="扎喋喋芥桀箏" name="Dump Inventory"/>
<menu_item_call label="踴扎潦喋" name="Dump Timers"/>
<menu_item_call label="押潦怒嫘潦怒潦喋" name="Dump Focus Holder"/>
<menu_item_call label="豢芥詻扼胯晞芥喋" name="Print Selected Object Info"/>
@@ -371,11 +362,11 @@
</menu>
<menu label="U踴" name="Character">
<menu label="潦胯胯嫘敺" name="Grab Baked Texture">
- <menu_item_call label="" name="Iris"/>
- <menu_item_call label="" name="Head"/>
- <menu_item_call label="銝頨" name="Upper Body"/>
- <menu_item_call label="銝頨" name="Lower Body"/>
- <menu_item_call label="嫘怒潦" name="Skirt"/>
+ <menu_item_call label="" name="Grab Iris"/>
+ <menu_item_call label="" name="Grab Head"/>
+ <menu_item_call label="銝頨" name="Grab Upper Body"/>
+ <menu_item_call label="銝頨" name="Grab Lower Body"/>
+ <menu_item_call label="嫘怒潦" name="Grab Skirt"/>
</menu>
<menu label="准押胯踴潦嫘" name="Character Tests">
<menu_item_call label="摰孵尿 XML 思摮" name="Appearance To XML"/>
@@ -401,22 +392,30 @@
<menu_item_call label="准潦怒怒胯嫘喋" name="Dump Local Textures"/>
</menu>
<menu_item_check label="HTTP Texture" name="HTTP Textures"/>
- <menu_item_check label="HTTP ∠" name="HTTP Inventory"/>
+ <menu_item_check label="HTTP 扎喋喋" name="HTTP Inventory"/>
<menu_item_call label="抒葬餃" name="Compress Images"/>
+ <menu_item_call label="Visual Leak Detector 嫘怒" name="Enable Visual Leak Detector"/>
<menu_item_check label="啁具柴喋箏" name="Output Debug Minidump"/>
<menu_item_check label="甈∪株絲怒喋喋賬潦怒艾喋艾銵函內" name="Console Window"/>
+ <menu label="准啜研怒閮剖" name="Set Logging Level">
+ <menu_item_check label="" name="Debug"/>
+ <menu_item_check label="" name="Info"/>
+ <menu_item_check label="霅血" name="Warning"/>
+ <menu_item_check label="具押" name="Error"/>
+ <menu_item_check label="芥" name="None"/>
+ </menu>
<menu_item_call label="蝞∠嫘潦踴嫘桀潦喳箝" name="Request Admin Options"/>
<menu_item_call label="蝞∠嫘潦踴寡圾" name="Leave Admin Options"/>
<menu_item_check label="蝞∠∼乓潦銵函內" name="View Admin Options"/>
</menu>
<menu label="蝞∠" name="Admin">
- <menu label="Object">
- <menu_item_call label="喋潦" name="Take Copy"/>
+ <menu label="芥詻扼胯" name="AdminObject">
+ <menu_item_call label="喋潦" name="Admin Take Copy"/>
<menu_item_call label="蝘怒" name="Force Owner To Me"/>
- <menu_item_call label="璅拚摰銵" name="Force Owner Permissive"/>
+ <menu_item_call label="璅拚桀銵" name="Force Owner Permissive"/>
<menu_item_call label="" name="Delete"/>
<menu_item_call label="准" name="Lock"/>
- <menu_item_call label="U颯 ID 敺" name="Get Assets IDs"/>
+ <menu_item_call label="U颯 ID 敺" name="Get Assets IDs"/>
</menu>
<menu label="箇" name="Parcel">
<menu_item_call label="蝘怒" name="Owner To Me"/>
@@ -447,7 +446,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="嫘胯芥潦踴" name="Scripting Portal"/>
<menu label="啜桀勗" name="Bug Reporting">
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 20468c8c2a..54031ccf12 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -85,17 +85,38 @@
<usetemplate canceltext="准喋颯" name="yesnocancelbuttons" notext="靽摮芥" yestext="靽摮"/>
</notification>
<notification name="ConfirmNoCopyToOutbox">
- 潦喋柴U艾胯嫘怒喋潦璅拚整甈∼柴U扎蝘餃整嚗
-[ITEM_NAME]
- <usetemplate name="okcancelbuttons" notext="" yestext="胯"/>
+ 柴U扎 1 扎整航啜潦喋U艾胯嫘怒喋潦閮勗胯整蝘餃蝵柴颯怒具胯扼整
+ <usetemplate name="okcancelbuttons" notext="U扎蝘餃芥" yestext="U扎蝘餃"/>
+ </notification>
+ <notification name="OutboxFolderCreated">
+ 潦喋U艾胯嫘格銝雿怨誥U扎怒扎 1 扎格啜押怒雿整
+ <usetemplate ignoretext="啜押怒潦喋U艾胯孵思整" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadComplete">
- 潦晞研扎嫘詻柴U准潦摰鈭整
- <usetemplate name="okbutton" yestext="嚗"/>
+ <notification name="OutboxImportComplete">
+
+
+潦晞研扎嫘急迤撣詻恍靽∼嫘艾柴押怒
+ <usetemplate ignoretext="潦晞研扎嫘恍靽∼嫘艾柴押怒" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadHadErrors">
- 潦晞研扎嫘詻柴U准潦桀鈭怒具押潦箇整U艾胯嫘桀憿閫瘙箝艾銝摨艾閰艾具整
- <usetemplate name="okbutton" yestext="押歹"/>
+ <notification name="OutboxImportHadErrors">
+ 銝具柴押怒航誥整扼
+
+銝具柴押怒潦晞研扎嫘恍靽∼具怒具押潦箇整柴押怒胯整潦喋U艾胯孵怒整
+
+閰喟敦怒扎艾胯[[MARKETPLACE_IMPORTS_URL] 具押潦准財閬扼
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportFailed">
+ 頠a怠仃
+
+瑯嫘整胯胯潦胯柴具押潦柴押怒胯潦晞研扎嫘恍靽∼整扼敺扼銝摨艾閰艾
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxInitFailed">
+ 潦晞研扎嫘桀怠仃
+
+瑯嫘整胯胯潦胯柴具押潦柴潦晞研扎嫘桀怠仃整敺扼銝摨艾閰艾
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CompileQueueSaveText">
甈∼桃晞扼嫘胯芥具准嫘柴U准潦怠憿韏瑯整
@@ -243,7 +264,7 @@ L$ 銝頞喋艾柴扼柴啜怒潦怠具扼
<usetemplate name="okcancelbuttons" notext="准喋颯" yestext="OK"/>
</notification>
<notification name="ReturnObjectsDeededToGroup">
- 桀箇颯柴啜怒潦 [NAME] 望柴嫘艾柴芥詻扼胯隞亙格柴∠押急颯具艾整
+ 桀箇颯柴啜怒潦 [NAME] 望柴嫘艾柴芥詻扼胯隞亙格柴扎喋喋芥急颯具艾整
雿蝬銵整嚗
*霅血* 怒
@@ -254,21 +275,21 @@ L$ 銝頞喋艾柴扼柴啜怒潦怠具扼
<notification name="ReturnObjectsOwnedByUser">
桀箇颯扼
雿鈭 [NAME] 具艾柴芥詻扼胯
-砌犖柴∠押急砍怨氬艾扼嚗
+砌犖柴扎喋喋芥急砍怨氬艾扼嚗
芥詻扼胯嚗 [N]
<usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
</notification>
<notification name="ReturnObjectsOwnedBySelf">
桀啣箇餃怒芥嫘艾柴芥詻扼胯
-芥柴∠押急颯具艾整蝬整嚗
+芥柴扎喋喋芥急颯具艾整蝬整嚗
芥詻扼胯嚗 [N]
<usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
</notification>
<notification name="ReturnObjectsNotOwnedBySelf">
桀啣箇餃怒芥隞亙嫘艾柴芥詻扼胯
-格柴∠押急颯具艾整
+格柴扎喋喋芥急颯具艾整
雿蝬銵整嚗
啜怒潦怨革皜∼鞎押颯研潦喋胯柴芥詻扼胯胯隞亙格怨氬整
@@ -279,7 +300,7 @@ L$ 銝頞喋艾柴扼柴啜怒潦怠具扼
</notification>
<notification name="ReturnObjectsNotOwnedByUser">
桀啣箇餃怒
-[NAME]隞亙怒柴芥詻扼胯嫘艾格柴∠押怨氬具艾整
+[NAME]隞亙怒柴芥詻扼胯嫘艾格柴扎喋喋芥怨氬具艾整
雿蝬銵整嚗啜怒潦怨革皜∼鞎押颯研潦喋胯柴芥詻扼胯胯隞亙格怨氬整
*霅血* 怒
@@ -443,14 +464,14 @@ L$ 銝頞喋艾柴扼柴啜怒潦怠具扼
詻扼嫘潦桐摮怠仃整撠敺艾銝摨西岫艾
</notification>
<notification name="GestureSaveFailedObjectNotFound">
- 詻扼嫘潦桐摮怠仃整芥詻扼胯整舫a芥詻扼胯∠押閬扎整
+ 詻扼嫘潦桐摮怠仃整芥詻扼胯整舫a芥詻扼胯扎喋喋芥閬扎整
芥詻扼胯蝭脣怠具芥整臬扎航賣扼整
</notification>
<notification name="GestureSaveFailedReason">
甈∼桃晞扼詻扼嫘潦桐摮怠憿韏瑯整 [REASON] 敺扼銝摨西岫艾
</notification>
<notification name="SaveNotecardFailObjectNotFound">
- 潦怒潦桐摮怠仃整芥詻扼胯整舫a芥詻扼胯∠押閬扎整
+ 潦怒潦桐摮怠仃整芥詻扼胯整舫a芥詻扼胯扎喋喋芥閬扎整
芥詻扼胯蝭脣怠具芥整臬扎航賣扼整
</notification>
<notification name="SaveNotecardFailReason">
@@ -514,11 +535,11 @@ L$ 銝頞喋艾柴扼柴啜怒潦怠具扼
[REGION] 扼胯啣耦桀氬扼整
</notification>
<notification name="CannotCopyWarning">
- 芥怒琉ITEMS]具U扎喋潦閮勗胯整隞桐鈭箝急靘具柴U扎胯芥柴∠押扎整砍怒柴U扎霅脯整嚗
+ 芥怒琉ITEMS]具U扎喋潦閮勗胯整隞桐鈭箝急靘具柴U扎胯芥柴扎喋喋芥扎整砍怒柴U扎霅脯整嚗
<usetemplate name="okcancelbuttons" notext="" yestext="胯"/>
</notification>
<notification name="CannotGiveItem">
- ∠押柴U扎皜∼整
+ 扎喋喋芥柴U扎皜∼整
</notification>
<notification name="TransactionCancelled">
撘准喋颯怒整
@@ -531,7 +552,7 @@ L$ 銝頞喋艾柴扼柴啜怒潦怠具扼
</notification>
<notification name="CannotCopyCountItems">
芥舫豢 [COUNT] 柴U扎柴柴喋潦閮晞艾整
-柴U扎胯芥柴∠押憭晞整
+柴U扎胯芥柴扎喋喋芥憭晞整
砍怒U扎皜∼扼嚗
<usetemplate name="okcancelbuttons" notext="" yestext="胯"/>
</notification>
@@ -672,7 +693,7 @@ L$ 銝頞喋艾柴扼柴啜怒潦怠具扼
箏∼扎怒雿扼整嚗 [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- 曉 [APP_NAME] 扼胯U∼潦瑯扼喋桐研U准潦胯萸潦艾整
+ 曉 [APP_NAME] 扼胯BVH 敶W柴U∼潦瑯扼喋∼扎怒桐研U准潦胯萸潦艾整
</notification>
<notification name="CannotUploadReason">
甈∼桃晞扼 [FILE] U准潦扼整嚗 [REASON]
@@ -775,7 +796,7 @@ L$ 銝頞喋艾柴扼柴啜怒潦怠具扼
研潦桃啜閬扎整桃啜銝怠拍具扼芥嗆扼急皛艾航賣扼整啣敺怒氬艾
</notification>
<notification name="no_inventory_host">
- ∠押瑯嫘舐曉典拍具扼整
+ 扎喋喋芥瑯嫘舐曉典拍具扼整
</notification>
<notification name="CannotSetLandOwnerNothingSelected">
唳閮剖扼整嚗
@@ -938,7 +959,7 @@ L$ 航整
<usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
</notification>
<notification name="ConfirmItemCopy">
- 柴U扎芥格∠押怒喋潦整嚗
+ 柴U扎芥柴扎喋喋芥怒喋潦整嚗
<usetemplate name="okcancelbuttons" notext="瘨" yestext="喋"/>
</notification>
<notification name="ResolutionSwitchFail">
@@ -990,7 +1011,7 @@ L$ 航整
</form>
</notification>
<notification label="函押靽摮" name="SaveWearableAs">
- U扎亙扳∠押思摮嚗
+ U扎亙扼扎喋喋芥思摮嚗
<form name="form">
<input name="message">
[DESC]嚗啗嚗
@@ -1472,8 +1493,8 @@ http://secondlife.com/download 啜潦詻扼喋艾喋准潦
<usetemplate ignoretext="芥詻扼胯怨氬桃Ⅱ隤" name="okcancelignore" notext="瘨" yestext="OK"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- 曉具芥 &lt;nolink&gt;[GROUP]&lt;/nolink&gt; 柴∼喋潦扼
-柴啜怒潦整嚗
+ 曉具芥 &lt;nolink&gt;[GROUP]&lt;/nolink&gt; 啜怒潦柴∼喋潦扼
+啜怒潦梢整嚗
<usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
@@ -1875,7 +1896,7 @@ Adult 撠具芥潦詻扼喋怠乓怒胯雿鈭箝柴U怒艾喋撟湧耦蝣
</notification>
<notification name="BuyCopy">
喋潦 [OWNER] L$ [PRICE] 扯頃乓整嚗
-鞈澆乓芥詻扼胯胯芥柴∠押怒喋潦整
+鞈澆乓芥詻扼胯胯芥柴扎喋喋芥怒喋潦整
航賬芣雿胯
靽格迤嚗[MODIFYPERM]喋潘[COPYPERM]
鞎押颯研潦喋嚗[RESELLPERM] 扼
@@ -1883,7 +1904,7 @@ Adult 撠具芥潦詻扼喋怠乓怒胯雿鈭箝柴U怒艾喋撟湧耦蝣
</notification>
<notification name="BuyCopyNoOwner">
L$ [PRICE] 扼喋潦鞈澆乓整嚗
-鞈澆乓芥詻扼胯胯芥柴∠押怒喋潦整
+鞈澆乓芥詻扼胯胯芥柴扎喋喋芥怒喋潦整
航賬芣雿胯
靽格迤嚗[MODIFYPERM]喋潘[COPYPERM]
鞎押颯研潦喋嚗[RESELLPERM] 扼
@@ -1891,12 +1912,12 @@ Adult 撠具芥潦詻扼喋怠乓怒胯雿鈭箝柴U怒艾喋撟湧耦蝣
</notification>
<notification name="BuyContents">
銝剛澈 [OWNER] L$ [PRICE] 扯頃乓整嚗
-鞈澆乓銝剛澈胯芥柴∠押怒喋潦整
+鞈澆乓銝剛澈胯芥柴扎喋喋芥怒喋潦整
<usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
</notification>
<notification name="BuyContentsNoOwner">
L嚗 [PRICE] 找葉頨怒鞈澆乓整嚗
-鞈澆乓銝剛澈胯芥柴∠押怒喋潦整
+鞈澆乓銝剛澈胯芥柴扎喋喋芥怒喋潦整
<usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
</notification>
<notification name="ConfirmPurchase">
@@ -1925,20 +1946,20 @@ Adult 撠具芥潦詻扼喋怠乓怒胯雿鈭箝柴U怒艾喋撟湧耦蝣
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="MoveInventoryFromObject">
- 喋潔胯格∠押U扎豢整
-柴U扎胯喋潦芥整整芥柴∠押怎宏整
+ 喋潔胯柴扎喋喋芥U扎豢整
+柴U扎胯喋潦芥整整芥柴扎喋喋芥怎宏整
U扎整嚗
<usetemplate ignoretext="喋潔胯柴U扎芥詻扼胯株郎" name="okcancelignore" notext="准喋颯" yestext="OK"/>
</notification>
<notification name="MoveInventoryFromScriptedObject">
- 喋潔胯格∠押U扎豢整
-柴U扎胯喋潦怒芥柴∠押怎宏整
-柴芥詻扼胯胯嫘胯芥隞芥柴扼∠押怎宏
+ 喋潔胯柴扎喋喋芥U扎豢整
+柴U扎胯喋潦怒芥柴扎喋喋芥怎宏整
+柴芥詻扼胯胯嫘胯芥隞芥柴扼扎喋喋芥怎宏
嫘胯芥怨炊雿韏瑯航賣扼整
-∠押U扎蝘餃整嚗
+扎喋喋芥U扎蝘餃整嚗
<usetemplate ignoretext="嫘胯芥乓柴芥詻扼胯憯柴喋潔胯柴U扎株郎" name="okcancelignore" notext="准喋颯" yestext="OK"/>
</notification>
<notification name="ClickActionNotPayable">
@@ -2047,7 +2068,7 @@ Linden Lab
</notification>
<notification name="ConfirmEmptyTrash">
輻拳桐葉頨怒嫘血扎整嚗
- <usetemplate ignoretext="∠押柴輻拳押怒蝛箝怒桃Ⅱ隤" name="okcancelignore" notext="准喋颯" yestext="OK"/>
+ <usetemplate ignoretext="扎喋喋芥柴輻拳押怒蝛箝怒桃Ⅱ隤" name="okcancelignore" notext="准喋颯" yestext="OK"/>
</notification>
<notification name="ConfirmClearBrowserCache">
押怒Web璊蝝U桀悼甇氬嫘血扎整嚗
@@ -2231,7 +2252,7 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
閬芥具嫘潦扼 IM 靽∼扼整
</notification>
<notification name="TransferInventoryAcrossParentEstates">
- 閬芥具嫘潦扳∠押蝘餃具胯扼整
+ 閬芥具嫘潦扼扎喋喋芥蝘餃具胯扼整
</notification>
<notification name="UnableToLoadNotecard">
潦怒潦隤准輯噯整具批摨艾閰艾
@@ -2283,7 +2304,7 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
[NAME] 胯芥皜∼U扎整
</notification>
<notification name="InventoryDeclined">
- [NAME] 胯∠押格靘准整
+ [NAME] 胯扎喋喋芥格靘准整
</notification>
<notification name="ObjectMessage">
[NAME]嚗 [MESSAGE]
@@ -2368,16 +2389,16 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
</form>
</notification>
<notification name="OwnedObjectsReturned">
- 豢啜桀箇颱怒芥柴芥詻扼胯胯嫘艾芥柴∠押怨氬整
+ 豢啜桀箇颱怒芥柴芥詻扼胯胯嫘艾芥柴扎喋喋芥怨氬整
</notification>
<notification name="OtherObjectsReturned">
- [NAME] 豢箇颯怒芥詻扼胯胯格∠押怨氬整
+ [NAME] 豢箇颯怒芥詻扼胯胯柴扎喋喋芥怨氬整
</notification>
<notification name="OtherObjectsReturned2">
[NAME] 具桐鈭箝豢箇颱柴芥詻扼胯胯砌犖怨氬整
</notification>
<notification name="GroupObjectsReturned">
- 豢箇颱柴[GROUPNAME] 具啜怒潦典望艾芥詻扼胯胯格柴∠押怨氬整
+ 豢箇颱柴[GROUPNAME] 具啜怒潦典望艾芥詻扼胯胯格柴扎喋喋芥怨氬整
霅脫腹艾鞎押颯研潦喋胯柴芥詻扼胯胯隞亙格怨氬整
啜怒潦怨革皜∼艾鞎押颯研潦喋銝胯柴芥詻扼胯胯扎整
</notification>
@@ -2596,7 +2617,7 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
</notification>
<notification name="OfferCallingCard">
[NAME] 喋潦芥喋啜怒潦皜∼具艾整
-芥格∠押怒胯潦胯餈賢桐鈭箝怎押 IM 具扼整
+芥柴扎喋喋芥怒胯潦胯餈賢桐鈭箝怎押 IM 具扼整
<form name="form">
<button name="Accept" text="乓"/>
<button name="Decline" text="颲"/>
@@ -2658,16 +2679,16 @@ Web 潦詻怒芥喋胯具隞鈭箝桀湔怎陛怒U胯颯
[NAME] 柴&lt;nolink&gt;[TITLE]&lt;/nolink&gt;
[MESSAGE]
<form name="form">
- <button name="Mute" text="准"/>
- <button name="Ignore" text="∟"/>
+ <button name="Client_Side_Mute" text="准"/>
+ <button name="Client_Side_Ignore" text="∟"/>
</form>
</notification>
<notification name="ScriptDialogGroup">
[GROUPNAME] 柴&lt;nolink&gt;[TITLE]&lt;/nolink&gt;
[MESSAGE]
<form name="form">
- <button name="Mute" text="准"/>
- <button name="Ignore" text="∟"/>
+ <button name="Client_Side_Mute" text="准"/>
+ <button name="Client_Side_Ignore" text="∟"/>
</form>
</notification>
<notification name="BuyLindenDollarSuccess">
@@ -2686,7 +2707,7 @@ M 准潦潦血氬整
<notification name="FirstSandbox">
胯萸喋胯嫘具芥U扼雿鈭箝嗡摮艾嗚具扼整
-批嗡柴舀蝯扎典扎整嗡U扎喋胯芥胯艾詻喋∠押怠乓艾∪萼柴敹芥
+批嗡柴舀蝯扎典扎整嗡U扎喋胯芥胯艾詻喋扎喋喋芥怠乓艾∪萼柴敹芥
</notification>
<notification name="MaxListSelectMessage">
柴芥嫘 [MAX_SELECT] 整扼柴U扎豢扼整
@@ -2707,7 +2728,7 @@ M 准潦潦血氬整
[NAME] 胯芸怒准胯閫扎整
</notification>
<notification name="AutoUnmuteByInventory">
- [NAME] 舀∠押芸怒准胯閫扎整
+ [NAME] 胯扎喋喋芥芸怒准胯閫扎整
</notification>
<notification name="VoiceInviteGroup">
[NAME] [GROUP] 柴扎嫘喋潦怒怠整
@@ -2862,6 +2883,18 @@ M 准潦潦血氬整
[RESIDENTS]
<usetemplate name="okcancelbuttons" notext="瘨" yestext="OK"/>
</notification>
+ <notification name="ShareFolderConfirmation">
+ 押怒臭摨艾 1 扎望扼整
+
+甈∼柴U扎望整嚗
+
+&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
+
+甈∼桐鈭箝典望嚗
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="瘨" yestext="Ok"/>
+ </notification>
<notification name="ItemsShared">
U扎望整
</notification>
@@ -2988,7 +3021,7 @@ M 准潦潦血氬整
怒∼押株嫘憭氬怒胯瘞游像餃氬喋喋准潦怒雿踴整Escape 潦整舀酋銵具閬嫘芥颯整
</notification>
<notification label="扎喋喋" name="HintInventory">
- ∠押怒胯芥柴U扎嫘血怒整整啜餈賢U扎胯啜踴思閬扯”蝷箝艾整
+ 扎喋喋芥怒胯芥柴U扎嫘血怒整整啜餈賢U扎胯啜踴思閬扯”蝷箝艾整
</notification>
<notification label="芥柴芥喋喋" name="HintLindenDollar">
芥 L$ 畾擃扼芥喋喋怒鞈澆乓怒胯L$ 株頃乓胯芥胯整
@@ -3096,7 +3129,7 @@ M 准潦潦血氬整
<usetemplate name="okcancelbuttons" notext="蝯鈭芥" yestext="蝯鈭"/>
</notification>
<notification label="" name="NoInventory">
- ∠押株”蝷箝胯U喋嫘U潦扼柴踹拍具扼整准啜U艾艾U潦憭氬整嚗
+ 扎喋喋芥株”蝷箝胯U喋嫘U潦扼柴踹拍具扼整准啜U艾艾U潦憭氬整嚗
<usetemplate name="okcancelbuttons" notext="蝯鈭芥" yestext="蝯鈭"/>
</notification>
<notification label="" name="NoAppearance">
diff --git a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml
index f7f575206a..49749732c9 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
<layout_stack name="vertical_stack">
<layout_panel name="group_info_btn_panel">
- <button label="啜怒潦" name="group_info_btn"/>
+ <button label="啜怒潦准潦" name="group_info_btn"/>
</layout_panel>
<layout_panel name="call_btn_panel">
<button label="啜怒潦喋潦" name="call_btn"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml
index 85406702bc..7aa1aec6d0 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="啜怒潦" name="GroupInfo">
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="啜怒潦扎喋喋" name="GroupInfo">
<panel.string name="default_needs_apply_text">
靽摮艾芥憭氬整
</panel.string>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
index 96e0382975..ddad6c1f9b 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="" name="notices_tab">
<panel.string name="help_text">
乓扼∼颯潦詻具扼乓怒U扎瘛颱具扼整
@@ -39,10 +39,10 @@
<text name="string">
怒U扎押堆准行溶隞艾嚗
</text>
- <button label="∠" name="open_inventory" tool_tip="∠押整"/>
+ <button label="扎喋喋" name="open_inventory" tool_tip="扎喋喋芥整"/>
<button label="憭" label_selected="瘛颱押" name="remove_attachment" tool_tip="芥桅乓瘛颱U扎扎整"/>
<button label="靽" label_selected="靽" name="send_notice"/>
- <group_drop_target name="drop_target" tool_tip="∠押柴U扎柴胯嫘怒押啜艾乓其蝺恍整 瘛颱怒胯柴U扎柴喋潦典鞎押颯研潦喋格貝芥怒敹閬整"/>
+ <group_drop_target name="drop_target" tool_tip="扎喋喋芥柴U扎柴胯嫘怒押啜艾乓其蝺恍整 瘛颱怒胯柴U扎柴喋潦典鞎押颯研潦喋格貝芥怒敹閬整"/>
</panel>
<panel label="颯桅乓銵函內" name="panel_view_past_notice">
<text name="lbl">
diff --git a/indra/newview/skins/default/xui/ja/panel_landmarks.xml b/indra/newview/skins/default/xui/ja/panel_landmarks.xml
index e3b716c35b..24d6ff23ae 100644
--- a/indra/newview/skins/default/xui/ja/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/ja/panel_landmarks.xml
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Landmarks">
<accordion name="landmarks_accordion">
<accordion_tab name="tab_favorites" title="瘞怠乓"/>
<accordion_tab name="tab_landmarks" title=" 押喋潦"/>
- <accordion_tab name="tab_inventory" title="∠"/>
+ <accordion_tab name="tab_inventory" title="扎喋喋"/>
<accordion_tab name="tab_library" title="押扎押"/>
</accordion>
<panel name="bottom_panel">
diff --git a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
index ff968696b7..f908262f4f 100644
--- a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="" name="main inventory panel">
<panel.string name="ItemcountFetching">
[ITEM_COUNT] 柴U扎敺銝准扼... [FILTER]
@@ -9,9 +9,9 @@
<text name="ItemcountText">
U扎嚗
</text>
- <filter_editor label="∠押怒踴" name="inventory search editor"/>
+ <filter_editor label="扎喋喋芥怒踴" name="inventory search editor"/>
<tab_container name="inventory filter tabs">
- <inventory_panel label="∠" name="All Items"/>
+ <inventory_panel label="扎喋喋" name="All Items"/>
<recent_inventory_panel label="" name="Recent Items"/>
</tab_container>
<layout_stack name="bottom_panel">
diff --git a/indra/newview/skins/default/xui/ja/panel_me.xml b/indra/newview/skins/default/xui/ja/panel_me.xml
index 896bbff0ee..3df1ae8048 100644
--- a/indra/newview/skins/default/xui/ja/panel_me.xml
+++ b/indra/newview/skins/default/xui/ja/panel_me.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label=" 准潦" name="panel_me">
- <panel label=" " name="panel_picks"/>
+ <panel label="-" name="panel_picks"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
index aca055bb43..4048b48d3a 100644
--- a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="蝧餉迅" name="translate_chat_checkbox"/>
+ <layout_stack name="stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="蝧餉迅" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/ja/panel_outbox_inventory.xml
index 47f570ab86..1a14283113 100644
--- a/indra/newview/skins/default/xui/ja/panel_outbox_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outbox_inventory.xml
@@ -1,2 +1,2 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<outbox_inventory_panel name="inventory_outbox" tool_tip="怒押啜U喋准具芥桀准思蒂喋整"/>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<outbox_inventory_panel name="inventory_outbox" tool_tip="U扎怒押啜U喋准具芥桀准思蒂喋整"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
index 6897660214..e89ce0c479 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Side tray Outfit Edit panel -->
<panel label="U艾桃楊" name="outfit_edit">
<string name="No Outfit" value="U艾芥"/>
@@ -30,7 +30,7 @@
<button label="怨蕭..." name="show_add_wearables_btn" tool_tip="嚗"/>
</layout_panel>
<layout_panel name="filter_panel">
- <filter_editor label="∠押桃函押怒踴" name="look_item_filter"/>
+ <filter_editor label="扎喋喋芥桃函押怒踴" name="look_item_filter"/>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
index 2a0647653d..93df0ba2bd 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="" name="Outfits">
<panel.string name="wear_outfit_tooltip">
豢U艾具
</panel.string>
<panel.string name="wear_items_tooltip">
- 豢
+ 豢U扎
</panel.string>
<tab_container name="appearance_tabs">
<panel label=" U艾" name="outfitslist_tab"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
index 1c90f7327e..88c31451b5 100644
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Side tray panel -->
<panel label="鈭" name="people_panel">
<string name="no_recent_people" value="餈鈭斗鈭箝胯整 銝蝺思隞脤U扼嚗 [secondlife:///app/search/people 璊蝝兡 [secondlife:///app/worldmap 銝啣設 閰艾"/>
@@ -73,7 +73,7 @@
<button label="喋潦" name="call_btn" tool_tip="桐鈭箝怒喋潦怒"/>
</layout_panel>
<layout_panel name="share_btn_lp">
- <button label="望" name="share_btn" tool_tip="∠押柴U扎望"/>
+ <button label="望" name="share_btn" tool_tip="扎喋喋芥柴U扎望"/>
</layout_panel>
<layout_panel name="teleport_btn_lp">
<button label="研潦" name="teleport_btn" tool_tip="研潦整"/>
@@ -81,7 +81,7 @@
</layout_stack>
<layout_stack name="bottom_bar_ls1">
<layout_panel name="group_info_btn_lp">
- <button label="啜怒潦" name="group_info_btn" tool_tip="啜怒潦晞銵函內整"/>
+ <button label="啜怒潦准潦" name="group_info_btn" tool_tip="啜怒潦准潦怒銵函內整"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
<button label="啜怒潦" name="chat_btn" tool_tip="憪整"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_estate.xml b/indra/newview/skins/default/xui/ja/panel_region_estate.xml
index 5b2ef36045..2e58c5a8f1 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_estate.xml
@@ -16,10 +16,10 @@
嚗銝嚗
</text>
<text name="Only Allow">
- 甈∼柴U怒艾喋柴踴U胯颯嫘閮勗荔
+ 甈∼桐鈭箝怒柴踴U胯颯嫘閮勗荔
</text>
- <check_box label="舀梁駁脫" name="limit_payment" tool_tip="芰Ⅱ隤桐鈭箝桃乓蝳甇U整"/>
- <check_box label="撟湧耦蝣箄皜" name="limit_age_verified" tool_tip="撟湧耦蝣箄皜整艾芥雿鈭箝桃乓蝳甇U整 閰喋晞 [SUPPORT_SITE] 閬找"/>
+ <check_box label="舀晞駁脯艾" name="limit_payment" tool_tip="舀晞駁脯艾芥具桐怒U胯颯嫘具胯扼整閰喟敦怒扎艾胯[SUPPORT_SITE] 閬扼"/>
+ <check_box label="撟湧耦蝣箄皜扼" name="limit_age_verified" tool_tip="桐怒U胯颯嫘怒胯撟湧耦蝣箄皜整敹閬整閰喟敦怒扎艾胯[SUPPORT_SITE] 閬扼"/>
<check_box label="扎嫘閮勗" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<text name="abuse_email_text">
diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
index 9fdd16d567..14d55002a3 100644
--- a/indra/newview/skins/default/xui/ja/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
@@ -22,6 +22,8 @@
<menu label="∼扎" name="File">
<menu_item_call label="靽摮" name="Save"/>
<menu_item_call label="憭氬急颯" name="Revert All Changes"/>
+ <menu_item_call label="∼扎怒准潦..." name="LoadFromFile"/>
+ <menu_item_call label="∼扎怒思摮..." name="SaveToFile"/>
</menu>
<menu label="蝺券" name="Edit">
<menu_item_call label="急颯" name="Undo"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml
index 46f2b0a3f9..e496e6602b 100644
--- a/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?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 扎豢艾
+ 餃扎喋喋芥思摮怒 L$[UPLOAD_COST] 株祥具整餃胯嫘具虫摮怒臬像孵耦撘 1 扎豢艾
</text>
<combo_box label="閫摨" name="texture_size_combo">
<combo_box.item label="曉具柴艾喋" name="CurrentWindow"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
index cd5b7590ad..c3b1cd91e7 100644
--- a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?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="扎喋喋芥思摮嚗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_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
index 4fb876f690..f09643d562 100644
--- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
@@ -15,7 +15,7 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <panel name="balance_bg">
+ <panel left="-370" name="balance_bg" width="160">
<text name="balance" tool_tip="胯芥胯 L$ 畾擃湔" value="L$20"/>
<button label="L$ 株頃" name="buyL" tool_tip="胯芥胯 L$ 鞈澆乓整"/>
<button label="摨" name="goShop" tool_tip="Second Life 潦晞研扎嫘" width="40"/>
diff --git a/indra/newview/skins/default/xui/ja/role_actions.xml b/indra/newview/skins/default/xui/ja/role_actions.xml
index c53ad838f7..896ed556ae 100644
--- a/indra/newview/skins/default/xui/ja/role_actions.xml
+++ b/indra/newview/skins/default/xui/ja/role_actions.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<role_actions>
<action_set description="株賢怒胯啜怒潦∼喋潦餈賢扎敺嗚芥急啜∼喋潦桀隤璅拚怒整整" name="Membership">
<action description="柴啜怒潦思犖敺" longdescription="敶孵脯颯胯瑯扼喋柴∼喋潦踴怒敺踴喋潦艾柴啜怒潦怒∼喋潦敺整" name="member invite" value="1"/>
@@ -51,7 +51,7 @@
<action description="啜怒潦芥詻扼胯株" longdescription="啜怒潦桀箇颱柴芥詻扼胯柴∼啜怒潦柴芥詻扼胯餈氬怒胯唳晞嚗芥詻扼胯踴雿踴整" name="land return group owned" value="48"/>
<action description="啜怒潦怨身摰艾芥詻扼胯餈" longdescription="啜怒潦桀箇颱柴芥詻扼胯柴∼啜怒潦怨身摰艾芥詻扼胯餈氬怒胯唳晞嚗芥詻扼胯踴雿踴整" name="land return group set" value="33"/>
<action description="啜怒潦芥詻扼胯株" longdescription="啜怒潦桀箇颱柴芥詻扼胯柴∼啜怒潦隞亙柴芥詻扼胯餈氬怒胯唳晞嚗芥詻扼胯踴雿踴整" name="land return non group" value="34"/>
- <action description="芥喋唾ˊ格押雿輻具行航有雿" longdescription="芥喋唾ˊ格邦具璊押璊航有乓株賢扼 格押胯芥格∠拙柴押扎押芥 &gt; 芥詻扼胯押怒怒整嗡∼乓潦找具扼整" name="land gardening" value="35"/>
+ <action description="芥喋唾ˊ格押雿輻具行航有雿" longdescription="芥喋唾ˊ格邦具璊押璊航有乓株賢扼 格押胯芥柴扎喋喋芸柴押扎押芥 &gt; 芥詻扼胯押怒怒整嗡∼乓潦找具扼整" name="land gardening" value="35"/>
</action_set>
<action_set description="柴賢怒胯啜怒潦柴芥詻扼胯霅脫腹靽格迤鞎拙ㄡ璅拚怒整整 憭氬胯嗡潦怒 &gt; 銝研踴扯整 芥詻扼胯喋胯芥胯艾蝺券刻身摰摰嫘蝣箄扼整" name="Object Management">
<action description="啜怒潦怒芥詻扼胯霅脫腹" longdescription="嗡潦怒 &gt; 銝研踴扼芥詻扼胯啜怒潦怨革皜∼整" name="object deed" value="36"/>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
index fc0293307b..51d6d48f90 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
@@ -2,47 +2,24 @@
<panel label="" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<layout_stack name="inventory_layout_stack">
- <layout_panel name="inbox_outbox_layout_panel">
- <layout_stack name="inbox_outbox_layout_stack">
- <layout_panel name="inbox_layout_panel">
- <panel label="" name="marketplace_inbox">
- <string name="InboxLabelWithArg">
- 嚗[NUM]嚗
- </string>
- <string name="InboxLabelNoArg">
-
- </string>
- <button label="" name="inbox_btn"/>
- <text name="inbox_fresh_new_count">
- [NUM] 格啣
- </text>
- <panel tool_tip="Drag and drop items to your inventory to manage and use them">
- <text name="inbox_inventory_placeholder">
- 潦晞研扎嫘鞈澆乓胯恍整
- </text>
- </panel>
- </panel>
- </layout_panel>
- <layout_panel name="outbox_layout_panel">
- <panel label="" name="marketplace_outbox">
- <string name="OutboxLabelWithArg">
- 潦喋柴U艾胯 ([NUM])
- </string>
- <string name="OutboxLabelNoArg">
- 潦喋柴U艾胯
- </string>
- <button label="潦喋柴U艾胯" name="outbox_btn"/>
- <button label="" name="outbox_sync_btn" tool_tip="芸柴潦晞研扎孵准怎宏"/>
- <panel>
- <panel name="outbox_inventory_placeholder_panel">
- <text name="outbox_inventory_placeholder_title">
- 准潦喋...
- </text>
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ U扎嚗[NUM]嚗
+ </string>
+ <string name="InboxLabelNoArg">
+ U扎
+ </string>
+ <button label="U扎" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] 格啜U扎
+ </text>
+ <panel name="inbox_inventory_placeholder_panel" tool_tip="U扎雿輻具怒胯柴U扎扎喋喋芥怒押啜U喋准">
+ <text name="inbox_inventory_placeholder">
+ 潦晞研扎嫘鞈澆乓胯恍整
+ </text>
+ </panel>
+ </panel>
</layout_panel>
</layout_stack>
<panel name="button_panel">
@@ -51,7 +28,7 @@
<button label="准潦" name="info_btn" tool_tip="芥詻扼胯柴准潦怒銵函內"/>
</layout_panel>
<layout_panel name="share_btn_lp">
- <button label="望" name="share_btn" tool_tip="∠押柴U扎望"/>
+ <button label="望" name="share_btn" tool_tip="扎喋喋芥柴U扎望"/>
</layout_panel>
<layout_panel name="shop_btn_lp">
<button label="摨" name="shop_btn" tool_tip="潦晞研扎嫘柴萸扎"/>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml
index d820994b59..6931e448b3 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="item properties" title="U扎柴准潦">
<panel.string name="unknown">
嚗銝嚗
@@ -16,13 +16,13 @@
[year,datetime,local] [mth,datetime,local] [day,datetime,local] [wkday,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local]
</panel.string>
<panel.string name="origin_inventory">
- 嚗∠抬
+ 嚗扎喋喋迎
</panel.string>
<panel.string name="origin_inworld">
嚗扎喋胯潦怒嚗
</panel.string>
<text name="title" value="U扎柴准潦"/>
- <text name="origin" value="嚗∠抬"/>
+ <text name="origin" value="嚗扎喋喋迎"/>
<scroll_container name="item_profile_scroll">
<panel label="" name="item_profile">
<text name="LabelItemNameTitle">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index c6b033ed95..680ef60890 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -181,8 +181,8 @@ http://secondlife.com/viewer-access-faq
</string>
<string name="LoginFailedPremiumOnly">
U怒准啜扎喋艾艾潦嗚潦急銝柴扎喋胯潦怒雿擉靘Second Life 詻柴准啜扎喋臭怠園艾整
-
-喋閮喋整U怒艾喋柴艾潦嗚潦芸怒暹嫘柴具⊥U怒艾喋柴艾潦嗚潦怒 Second Life 詻柴U胯颯嫘柴艾整
+
+喋閮喋整U怒艾喋柴艾潦嗚潦芸曉具柴具⊥U怒艾喋柴艾潦嗚潦怒 Second Life 詻柴U胯颯嫘柴艾整
</string>
<string name="LoginFailedComputerProhibited">
柴賬喋喋 Second Life 怒U胯颯嫘扼整
@@ -339,17 +339,35 @@ support@secondlife.com 怒
U扎 1 扎怒押啜扼整
</string>
<string name="TooltipPrice" value="L$[AMOUNT]嚗"/>
+ <string name="TooltipOutboxDragToWorld">
+ 潦喋胯孵柴U扎 Rez 具胯扼整
+ </string>
<string name="TooltipOutboxNoTransfer">
- 芥詻扼胯 1 扎整航啜胯乓柴艾潦嗚潦怠ㄡ皜∼霅脫腹扼芥柴扼
+ 芥詻扼胯 1 扎整航啜臬ㄡ皜∼霅脫腹扼芥柴扼
+ </string>
+ <string name="TooltipOutboxNotInInventory">
+ 潦喋U艾胯嫘扼胯芸柴扎喋喋芥柴U扎乓具扼整
</string>
<string name="TooltipOutboxWorn">
- 芥胯芥詻扼胯 1 扎整航啜鋆艾整U踴潦憭喟宏艾踴艾
+ 具艾U扎潦喋U艾胯嫘怠乓具胯扼整
+ </string>
+ <string name="TooltipOutboxCallingCard">
+ 喋潦芥喋啜怒潦潦喋U艾胯嫘怠乓具胯扼整
</string>
<string name="TooltipOutboxFolderLevels">
- 柴押怒怒萸押怒桅撅扎憭整萸押怒4撅支誑嚗怒潦押怒桐隹桐雨桐青具憸具恬怒整具氬艾
+ 嫘乓押怒格楛 3 頞艾整
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ 銝雿押怒柴萸押怒啜 20 頞艾整
</string>
<string name="TooltipOutboxTooManyObjects">
- 柴押怒怒 200 隞乩柴芥詻扼胯怒整整柴扎胯嫘怠乓芥詻扼胯啜皜艾
+ 銝雿押怒柴U扎啜 200 頞艾整
+ </string>
+ <string name="TooltipDragOntoOwnChild">
+ 押怒桀押怒怎宏具胯扼整
+ </string>
+ <string name="TooltipDragOntoSelf">
+ 押怒柴押怒芾澈怎宏具胯扼整
</string>
<string name="TooltipHttpUrl">
胯芥胯艾 Web 潦詻閬整
@@ -817,6 +835,9 @@ support@secondlife.com 怒
<string name="anim_yes_head">
</string>
+ <string name="multiple_textures">
+ 銴
+ </string>
<string name="texture_loading">
准潦喋...
</string>
@@ -976,6 +997,9 @@ support@secondlife.com 怒
<string name="choose_the_directory">
</string>
+ <string name="script_files">
+ 嫘胯芥
+ </string>
<string name="AvatarSetNotAway">
銝撣凋葉閫
</string>
@@ -1211,70 +1235,63 @@ support@secondlife.com 怒
怒押喋潦胯押啜艾瘞怠乓怨蕭整
</string>
<string name="InventoryNoTexture">
- ∠押怒柴胯嫘柴喋潦整
+ 扎喋喋芸怒柴胯嫘柴喋潦整
</string>
<string name="InventoryInboxNoItems">
- 鞈澆乓芥押血敺U扎胯怨”蝷箝∠押柴押怒怒押啜衣宏具扼啜閬芥芥游怒臬扎具扼整
+ 潦晞研扎嫘扯頃乓胯怨”蝷箝整桀U扎扎喋喋芥怒押啜啜柴U扎雿輻具扼整
</string>
<string name="MarketplaceURL">
- http://marketplace.[DOMAIN_NAME]
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
</string>
<string name="MarketplaceURL_CreateStore">
- http://marketplace.[DOMAIN_NAME]/create_store
+ http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4
</string>
- <string name="MarketplaceURL_LearnMore">
- http://marketplace.[DOMAIN_NAME]/learn_more
- </string>
- <string name="InventoryOutboxCreationErrorTitle">
- 潦喋U艾胯嫘甇閮剖艾整
+ <string name="MarketplaceURL_Dashboard">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard
</string>
- <string name="InventoryOutboxCreationErrorTooltip">
- 潦喋U艾胯嫘株身摰具押
+ <string name="MarketplaceURL_Imports">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports
</string>
- <string name="InventoryOutboxCreationError">
- 憿閫瘙箝怒胯怒嫘踴潦萸潦嫘怒
+ <string name="MarketplaceURL_LearnMore">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryOutboxNotMerchantTitle">
- 潦晞研扎嫘舐桀ㄡ氬扼
- </string>
- <string name="InventoryOutboxNotMerchantTooltip">
- 芥潦喋恬
+ 潦晞研扎嫘扼航狐扼U扎憯脯具扼整
</string>
+ <string name="InventoryOutboxNotMerchantTooltip"/>
<string name="InventoryOutboxNotMerchant">
- [[MARKETPLACE_URL] Second Life 潦晞研扎鉛 扼胯SL 雿鈭箝嗡 100 銝嫣誑銝鞎拙ㄡ艾整芥芸株芯縑雿芥鞈澆乓U扎具血ㄡ艾踴整格舐陛扼颯U舐⊥扼[[LEARN_MORE_URL] ∼扯底蝝啜蝣箝]潦晞研扎嫘俎[CREATE_STORE_URL] 嫘U雿] 整
+ 潦喋怒芥嫘胯[[MARKETPLACE_CREATE_STORE_URL] 潦晞研扎嫘嫘U雿]敹閬整
</string>
<string name="InventoryOutboxNoItemsTitle">
- 潦晞研扎嫘詻格啜箄瑟寞
- </string>
- <string name="InventoryOutboxNoItemsTooltip">
- 怒押啜U喋准扼潦晞研扎嫘桀ㄡ押具芥整
+ U艾胯嫘舐征扼
</string>
+ <string name="InventoryOutboxNoItemsTooltip"/>
<string name="InventoryOutboxNoItems">
- 鞎拙ㄡ整胯押怒柴具芥U怒押啜整喋潔胯柴U扎扼芥押啜柴喋潦銵函內扼芥格∠押摰怎宏扼胯整潦晞研扎嫘怠皞氬U准潦踴喋胯芥胯整胯潦晞研扎嫘扎喋喋芥怎宏嫘扼柴押怒扎整
+ [[MARKETPLACE_DASHBOARD_URL] 潦晞研扎鉛怨痔憯脯U扎銝閬扼怒胯押怒柴具芥U怒押啜潦晞研扎嫘恍靽∼胯芥胯整
</string>
<string name="Marketplace Error None">
具押潦芥
</string>
<string name="Marketplace Error Not Merchant">
- 具押潘潦晞研扎嫘怠怒芥芾澈潦喋駁脯敹閬整嚗駁脯舐⊥扼嚗
+ 具押潘潦晞研扎嫘怒U扎怒芥芾澈潦喋駁脯敹閬整嚗駁脯舐⊥扼嚗
</string>
<string name="Marketplace Error Empty Folder">
具押潘柴押怒舐征扼
</string>
<string name="Marketplace Error Unassociated Products">
- 具押潘芥柴潦喋U怒艾喋怒胯函⊿V柴U扎憭柴U扎U准潦扼整扼柴具押潦閫瘨怒胯潦晞研扎嫘柴艾扼萸扎怒准啜扎喋恍V柴芥U扎啜皜艾
+ 具押潘芥柴潦喋U怒艾喋怒胯恍a隞艾芥U扎憭柴U扎U准潦扼整扼柴具押潦閫瘨怒胯潦晞研扎嫘 Web 萸扎怒准啜扎喋a隞艾芥U扎格啜皜艾
</string>
<string name="Marketplace Error Object Limit">
- 具押潘桀怠怒整芥詻扼胯憭整芥詻扼胯扎胯嫘怒整具芥詻扼胯啜200隞乩急艾
+ 具押潘柴U扎怠怒整芥詻扼胯憭整芥詻扼胯扎胯嫘怒整具芥詻扼胯啜200隞乩急艾
</string>
<string name="Marketplace Error Folder Depth">
- 具押潘桀胯嫘乓押怒桅撅扎憭整嫘乓押怒 3 撅支誑怒整具氬艾
+ 具押潘柴U扎胯嫘乓押怒桅撅扎憭整嫘乓押怒 3 撅支誑怒整具氬艾
</string>
<string name="Marketplace Error Unsellable Item">
- 具押潘桅柴潦晞研扎嫘扯痔憯脯具胯扼整
+ 具押潘柴U扎潦晞研扎嫘扯痔憯脯具胯扼整
</string>
<string name="Marketplace Error Internal Import">
- 具押潘桀恍U血憿箇整啜艾閰艾
+ 具押潘柴U扎恍U血憿箇整啜艾閰艾
</string>
<string name="Open landmarks">
押喋潦胯
@@ -1323,7 +1340,7 @@ support@secondlife.com 怒
<string name="No Filters" value=" "/>
<string name="Since Logoff" value=" - 准啜芥隞交"/>
<string name="InvFolder My Inventory">
- ∠
+ 扎喋喋
</string>
<string name="InvFolder Library">
押扎押
@@ -1356,7 +1373,7 @@ support@secondlife.com 怒
啗押怒
</string>
<string name="InvFolder Inventory">
- ∠
+ 扎喋喋
</string>
<string name="InvFolder Uncompressed Images">
抒葬艾芥餃
@@ -3907,6 +3924,9 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
<string name="Saved_message">
嚗靽摮交嚗[LONG_TIMESTAMP]嚗
</string>
+ <string name="IM_unblock_only_groups_friends">
+ 柴∼颯潦詻銵函內怒胯啣閮剖柴押扎瑯潦扼研喋具啜怒潦隞亙胯喋潦怒 IM 靽∼芥扼胯胯嫘芥怒整
+ </string>
<string name="answered_call">
豢喋潦怒整
</string>
@@ -3938,10 +3958,10 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
[AGENT_NAME] 具喋喋∼研喋嫘
</string>
<string name="inventory_item_offered-im">
- ∠押U扎整
+ 扎喋喋芥U扎整
</string>
<string name="share_alert">
- ∠押怒U扎押啜整
+ 扎喋喋芥怒U扎押啜整
</string>
<string name="no_session_message">
嚗IM 颯瑯扼喋摮具整嚗
@@ -4104,7 +4124,7 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
</string>
<string name="uploading_abuse_report">
U准潦銝...
-
+
憳桀勗
</string>
<string name="New Shape">
@@ -4370,10 +4390,10 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
</string>
<string name="words_separator" value=","/>
<string name="server_is_down">
- 憭批喋閮喋整鈭砍憿箇整
+ 憭批喋閮喋整鈭芥憿箇整
- status.secondlifegrid.net扼萸潦嫘恍UY乓桀憿怒扎艾隤踴嫘
- 憿撘蝬箇游胯雿踴柴胯潦胯∼扎U艾押潦怒株身摰蝣箄艾
+ 萸潦嫘恍UY乓桀憿怒扎艾胯status.secondlifegrid.net 閬扼
+憿撘蝬箇游胯雿踴柴胯潦胯∼扎U艾押潦怒株身摰隤踴嫘艾
</string>
<string name="dateTimeWeekdaysNames">
交::急:瘞湔:冽::
@@ -4825,7 +4845,7 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
</string>
<string name="Command_Inventory_Label">
- ∠
+ 扎喋喋
</string>
<string name="Command_Map_Label">
@@ -4839,6 +4859,9 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
<string name="Command_Move_Label">
甇抵 / 韏啗 / 憌銵
</string>
+ <string name="Command_Outbox_Label">
+ 潦喋U艾胯
+ </string>
<string name="Command_People_Label">
</string>
@@ -4897,7 +4920,7 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
銝祉踴嫘胯桀銵寞
</string>
<string name="Command_Inventory_Tooltip">
- ∠押銵函內颱蝙
+ 扎喋喋芥銵函內颱蝙
</string>
<string name="Command_Map_Tooltip">
銝啣
@@ -4911,6 +4934,9 @@ www.secondlife.com 啜潦詻扼喋艾喋准潦艾
<string name="Command_Move_Tooltip">
U踴潦桃宏
</string>
+ <string name="Command_Outbox_Tooltip">
+ 鞎拙ㄡ具怒U扎潦晞研扎嫘怨誥
+ </string>
<string name="Command_People_Tooltip">
研喋啜怒潦餈桐犖
</string>
diff --git a/indra/newview/skins/default/xui/ja/teleport_strings.xml b/indra/newview/skins/default/xui/ja/teleport_strings.xml
index 6c69c7a231..64f01f4030 100644
--- a/indra/newview/skins/default/xui/ja/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/ja/teleport_strings.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+嚜<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<teleport_messages>
<message_set name="errors">
<message name="invalid_tport">
@@ -45,7 +45,7 @@
研潦桃桃啜閬扎整桃啜銝怠拍具扼芥嗆整胯扼急皛艾航賣扼整啣敺怒氬艾
</message>
<message name="no_inventory_host">
- ∠押瑯嫘舐曉典拍具扼整
+ 扎喋喋芥瑯嫘舐曉典拍具扼整
</message>
</message_set>
<message_set name="progress">
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 30d4b0290c..cd0fb4c41b 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -373,7 +373,7 @@ 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">
- e bater papo com avatares neste lote
+ Avatares em outros lotes podem ver e conversar com avatares neste lote
</text>
<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">
@@ -460,12 +460,12 @@ M穩dia:
<text name="Limit access to this parcel to:">
Acesso a este lote
</text>
- <check_box label="Acesso para p繳blico categoria [MATURITY]" name="public_access"/>
+ <check_box label="Permitir acesso p繳blico (Desmarcar esse item cria limites)" name="public_access"/>
<text name="Only Allow">
- Restringir acesso a contas confirmardas por:
+ Permitir acesso apenas para residentes que:
</text>
- <check_box label="Dados de pagamento fornecidos [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Banir residentes sem identifica癟瓊o."/>
- <check_box label="Idade comprovada: [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Banir residentes que n瓊o comprovaram a idade. Consulte o [SUPPORT_SITE] para saber mais."/>
+ <check_box label="Possuam Dados de pagamento fornecidos [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Os residentes devem ter seus dados de pagamento cadastrados para acessar este lote. Consulte o [SUPPORT_SITE] para saber mais."/>
+ <check_box label="Tiveram sua idade verificada [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Os residentes devem ter a idade verificada para acessar este lote. Consulte o [SUPPORT_SITE] para saber mais."/>
<check_box label="Permitir acesso do grupo: [GROUP]" name="GroupCheck" tool_tip="Definir grupo na aba Geral."/>
<check_box label="Vender passes para:" name="PassCheck" tool_tip="Permite acesso tempor獺rio a este terreno"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/pt/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/pt/floater_animation_anim_preview.xml
new file mode 100644
index 0000000000..05326d8594
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_animation_anim_preview.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Anim Preview" title="ANIMATION.ANIM">
+ <text name="name_label">
+ Nome:
+ </text>
+ <text name="description_label">
+ Descri癟瓊o:
+ </text>
+ <button label="Envio (L$[AMOUNT])" name="ok_btn"/>
+ <button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/pt/floater_animation_bvh_preview.xml
new file mode 100644
index 0000000000..5cae581045
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_animation_bvh_preview.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview">
+ <floater.string name="failed_to_initialize">
+ Falha ao iniciar anima癟瓊o
+ </floater.string>
+ <floater.string name="anim_too_long">
+ O arquivo de anima癟瓊o possui [LENGTH] segundos de dura癟瓊o.
+
+A dura癟瓊o m獺xima da anima癟瓊o 矇 de [MAX_LENGTH] segundos.
+ </floater.string>
+ <floater.string name="failed_file_read">
+ N瓊o foi poss穩vel ler o arquivo de anima癟瓊o.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ Ok
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ Fim de arquivo prematuro.
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ Imposs穩vel ler defini癟瓊o constraint.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ Imposs穩vel abrir arquivo BVH.
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ Invalid HIERARCHY header.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ RAIZ ou JUNTA n瓊o encontrados.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ Imposs穩vel obter nome JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ Imposs穩vel localizar OFFSET.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ Imposs穩vel localizar CHANNELS.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ Imposs穩vel obter ordem de rota癟瓊o.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ Imposs穩vel obter eixo de rota癟瓊o.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ Imposs穩vel localizar MOTION.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ Imposs穩vel determinar n繳mero de quadros.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ Imposs穩vel determinar tempo dos quadros.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ Imposs穩vel definir posicionamento.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ Imposs穩vel definir valores da rota癟瓊o.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ Imposs穩vel abrir arquivo de tradu癟瓊o.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ Imposs穩vel ler cabe癟alho de tradu癟瓊o.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ Imposs穩vel ler nomes traduzidos.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ Imposs穩vel obter valor traduzido a ignorar.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ Imposs穩vel obter valor traduzido relativo.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ Imposs穩vel obter valor traduzido.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ Imposs穩vel ler matriz de tradu癟瓊o.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Imposs穩vel obter nome mergechild.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Imposs穩vel obter nome mergeparent.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ Imposs穩vel obter valor priorit獺rio.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ Imposs穩vel obter valor do loop.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ Imposs穩vel obter valor easeIn.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ Imposs穩vel obter valor easeOut.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Imposs穩vel obter valor de morph da m瓊o.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ Imposs穩vel ler nome do emote.
+ </floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ Nome da junta incorreto, use &quot;quadril&quot;.
+ </floater.string>
+ <text name="name_label">
+ Nome:
+ </text>
+ <text name="description_label">
+ Descri癟瓊o:
+ </text>
+ <spinner label="Prioridade" name="priority" tool_tip="Controla quais anima癟繭es podem ser interrompidas por esta anima癟瓊o"/>
+ <check_box label="Loop" name="loop_check" tool_tip="Executa esta anima癟瓊o sem parar"/>
+ <spinner label="Dentro(%)" name="loop_in_point" tool_tip="Define o ponto em que a anima癟瓊o em loop reinicia"/>
+ <spinner label="Fora(%)" name="loop_out_point" tool_tip="Define o ponto em que a anima癟瓊o em loop acaba"/>
+ <text name="hand_label">
+ Pose das m瓊os
+ </text>
+ <combo_box name="hand_pose_combo" tool_tip="Controla os gestos das m瓊os durante a anima癟瓊o">
+ <combo_box.item label="Abrir" name="Spread"/>
+ <combo_box.item label="Relaxado" name="Relaxed"/>
+ <combo_box.item label="Apontar ambas" name="PointBoth"/>
+ <combo_box.item label="Punho" name="Fist"/>
+ <combo_box.item label="E relaxada" name="RelaxedLeft"/>
+ <combo_box.item label="Apontar E" name="PointLeft"/>
+ <combo_box.item label="Punho E" name="FistLeft"/>
+ <combo_box.item label="D relaxada" name="RelaxedRight"/>
+ <combo_box.item label="Apontar D" name="PointRight"/>
+ <combo_box.item label="Punho D" name="FistRight"/>
+ <combo_box.item label="Sauda癟瓊o D" name="SaluteRight"/>
+ <combo_box.item label="Escrevendo" name="Typing"/>
+ <combo_box.item label="Paz D" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ Express瓊o
+ </text>
+ <combo_box name="emote_combo" tool_tip="Controla as express繭es faciais durante a anima癟瓊o">
+ <item label="(nenhum)" name="[None]" value=""/>
+ <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
+ <item label="Com medo" name="Afraid" value="Com medo"/>
+ <item label="Bravo" name="Angry" value="Bravo"/>
+ <item label="Sorriso contagiante" name="BigSmile" value="Sorriso contagiante"/>
+ <item label=" toa" name="Bored" value=" toa"/>
+ <item label="Chorar" name="Cry" value="Chorar"/>
+ <item label="Desdenho" name="Disdain" value="Desdenho"/>
+ <item label="Com vergonha" name="Embarrassed" value="Com vergonha"/>
+ <item label="Franzir testa" name="Frown" value="Franzir testa"/>
+ <item label="Beijo" name="Kiss" value="Beijo"/>
+ <item label="Rir" name="Laugh" value="Rir"/>
+ <item label="Mostrar a l穩ngua" name="Plllppt" value="Mostrar a l穩ngua"/>
+ <item label="Asco" name="Repulsed" value="Asco"/>
+ <item label="Triste" name="Sad" value="Triste"/>
+ <item label="Encolher os ombros" name="Shrug" value="Encolher os ombros"/>
+ <item label="Sorriso" name="Smile" value="Sorriso"/>
+ <item label="Surpresa" name="Surprise" value="Surpresa"/>
+ <item label="Piscar" name="Wink" value="Piscar"/>
+ <item label="Preocupado" name="Worry" value="Preocupado"/>
+ </combo_box>
+ <text name="preview_label">
+ Visualizar enquanto
+ </text>
+ <combo_box name="preview_base_anim" tool_tip="Use para testar o comportamento de sua anima癟瓊o enquanto seu avatar executa a癟繭es comuns.">
+ <item label="Em p矇" name="Standing" value="Em p矇"/>
+ <item label="Andar" name="Walking" value="Andar"/>
+ <item label="Sentado" name="Sitting" value="Sentado"/>
+ <item label="Voar" name="Flying" value="Voar"/>
+ </combo_box>
+ <spinner label="Aproxima癟瓊o (seg)" name="ease_in_time" tool_tip="Tempo (em segundos) da transi癟瓊o inicial da anima癟瓊o"/>
+ <spinner label="Afastamento (seg)" name="ease_out_time" tool_tip="Tempo (em segundos) da transi癟瓊o de sa穩da da anima癟瓊o"/>
+ <button name="play_btn" tool_tip="Executar anima癟瓊o"/>
+ <button name="pause_btn" tool_tip="Pausar a anima癟瓊o"/>
+ <button name="stop_btn" tool_tip="Interromper a execu癟瓊o da anima癟瓊o"/>
+ <text name="bad_animation_text">
+ N瓊o foi poss穩vel ler o arquivo de anima癟瓊o.
+
+Recomendamos que os arquivos BVH sejam exportados do Poser 4.
+ </text>
+ <button label="Envio (L$[AMOUNT])" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/pt/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..bb6113671b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_merchant_outbox.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_merchant_outbox" title="CAIXA DE SADA DO LOJISTA">
+ <string name="OutboxFolderCount1">
+ 1 pasta
+ </string>
+ <string name="OutboxFolderCountN">
+ [NUM] pasta(s)
+ </string>
+ <string name="OutboxImporting">
+ Enviando pastas...
+ </string>
+ <string name="OutboxInitializing">
+ Iniciando...
+ </string>
+ <panel label="">
+ <panel>
+ <panel name="outbox_inventory_placeholder_panel">
+ <text name="outbox_inventory_placeholder_title">
+ Carregando...
+ </text>
+ </panel>
+ </panel>
+ <panel>
+ <button label="Enviar para Mercado" name="outbox_import_btn" tool_tip="Enviar para a Frente da loja do meu Mercado"/>
+ </panel>
+ </panel>
+</floater>
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 498058f933..0d07303c91 100644
--- a/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
@@ -6,12 +6,12 @@
<button label="2. Otimizar" name="optimize_btn"/>
<button label="1. Selecionra arquivo" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
Escolher arquivo de modelo
</text>
</panel>
- <panel name="content">
+ <panel name="choose_file_content">
<text name="advanced_users_text">
Usu獺rios avan癟ados: se voc礙 estiver familiarizado com ferramentas de cria癟瓊o de conte繳do 3D, use o Advanced Uploader.
</text>
@@ -35,15 +35,15 @@
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
Otimizar modelo
</text>
</panel>
- <text name="description">
+ <text name="optimize_description">
O modelo foi ajustado para desempenho. Fa癟a novos ajustes, se desejar.
</text>
- <panel name="content">
+ <panel name="optimize_content">
<text name="high_detail_text">
Gerar n穩vel de detalhes: Alto
</text>
@@ -54,7 +54,7 @@
Gerar n穩vel de detalhes: Baixo
</text>
<text name="lowest_detail_text">
- Gerar n穩vel de detalhes: mais baixo
+ Gerar n穩vel de detalhes: Mais baixo
</text>
</panel>
<panel name="content2">
@@ -79,15 +79,15 @@
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
Ajustar f穩sico
</text>
</panel>
- <text name="description">
+ <text name="physics_description">
Criaremos uma forma para o corpo externo do modelo. Ajuste o n穩vel de detalhes como necess獺rio para a finalidade desejada de seu modelo.
</text>
- <panel name="content">
+ <panel name="physics_content">
<button label="Recalcular f穩sico" name="recalculate_physics_btn"/>
<button label="Recalculando..." name="recalculating_physics_btn"/>
<text name="lod_label">
@@ -110,12 +110,12 @@
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Revisar
</text>
</panel>
- <panel name="content">
+ <panel name="review_content">
<text name="review_prim_equiv">
Impacto no lote/regi瓊o: [EQUIV] equivalentes de prim
</text>
@@ -128,8 +128,8 @@
</panel>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
Upload conclu穩do
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_animation.xml b/indra/newview/skins/default/xui/pt/floater_preview_animation.xml
index b650b7945c..19474d8099 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_animation.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
Descri癟瓊o:
</text>
- <button label="Tocar inworld" label_selected="Parar" name="Anim play btn" tool_tip="Tocar essa anima癟瓊o de forma que outros possam ver" width="131"/>
- <button label="Executar localmente" label_selected="Parar" left="162" name="Anim audition btn" tool_tip="Tocar essa anima癟瓊o de forma que apenas voc礙 possa ver" width="120"/>
+ <button label="Tocar inworld" label_selected="Parar" name="Inworld" tool_tip="Executar essa anima癟瓊o de forma que outros possam ver"/>
+ <button label="Tocar localmente" label_selected="Parar" name="Locally" tool_tip="Executar anima癟瓊o de forma que apenas voc礙 possa ver"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/pt/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..b479d5f6d6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_test_layout_stacks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="LAYOUTSTACK TESTS"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/pt/floater_test_text_vertical_aligment.xml
new file mode 100644
index 0000000000..dd282bf1fc
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_test_text_vertical_aligment.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="JANELA DE TESTE"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index f35f31f5f7..4b31833602 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -1,5 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="BUILD TOOLS" title="">
+ <floater.string name="grid_screen_text">
+ Tela
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Mundo
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Refer礙ncia
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Anexo
+ </floater.string>
<floater.string name="status_rotate">
Arrastar as faixas coloridas para girar o objeto
</floater.string>
@@ -63,7 +78,12 @@
</text>
<check_box initial_value="true" label="Esticar texturas" name="checkbox stretch textures"/>
<check_box initial_value="true" label="Ajustar" name="checkbox snap to grid"/>
- <button label="Op癟繭es..." label_selected="Op癟繭es..." name="Options..." tool_tip="Mais op癟繭es de grade"/>
+ <combo_box name="combobox grid mode" tool_tip="Selecione o tipo de r矇gua da grade onde o objeto ser獺 colocado">
+ <combo_box.item label="Mundo" name="World"/>
+ <combo_box.item label="Local" name="Local"/>
+ <combo_box.item label="Refer礙ncia" name="Reference"/>
+ </combo_box>
+ <button label="" label_selected="Op癟繭es..." name="Options..." tool_tip="Mais op癟繭es de grade"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="Pir璽mide"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
index 4f01600d9f..b29ca3d699 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
@@ -42,13 +42,16 @@
<string name="effect_Demon">
Dem繫nio
</string>
+ <string name="effect_Female Elf">
+ Elfa
+ </string>
<string name="effect_Flirty">
Paquerador
</string>
<string name="effect_Foxy">
Sensual
</string>
- <string name="effect_Halloween_2010_Bonus">
+ <string name="effect_Halloween 2010 Bonus">
B繫nus_Halloween_2010
</string>
<string name="effect_Helium">
@@ -57,9 +60,18 @@
<string name="effect_Husky">
Rouco
</string>
+ <string name="effect_Husky Whisper">
+ Sussurro rouco
+ </string>
<string name="effect_Intercom">
Interfone
</string>
+ <string name="effect_Julia">
+ Julia
+ </string>
+ <string name="effect_Lo Lilt">
+ Cantarolado baixo
+ </string>
<string name="effect_Macho">
Macho
</string>
@@ -69,6 +81,9 @@
<string name="effect_Mini">
Mini
</string>
+ <string name="effect_Model">
+ Modelo
+ </string>
<string name="effect_Nano">
Nano
</string>
@@ -90,6 +105,9 @@
<string name="effect_Roxanne">
Roxanne
</string>
+ <string name="effect_Rumble">
+ Ronco
+ </string>
<string name="effect_Sabrina">
Sabrina
</string>
@@ -102,6 +120,9 @@
<string name="effect_Shorty">
Baixinho
</string>
+ <string name="effect_Smaller">
+ Menor
+ </string>
<string name="effect_Sneaky">
Sorrateiro
</string>
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml
index 184db26538..7e271904e9 100644
--- a/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
<menu_item_call label="Tocar" name="touch"/>
<menu_item_call label="Sentar" name="sit"/>
<menu_item_call label="Pagar" name="pay"/>
@@ -12,7 +12,8 @@
<menu_item_call label="Adicionar" name="add"/>
<menu_item_call label="Denunciar" name="report"/>
<menu_item_call label="Bloquear" name="block"/>
+ <menu_item_call label="Desbloquear" name="unblock"/>
<menu_item_call label="Mais zoom" name="zoom_in"/>
<menu_item_call label="Tirar" name="remove"/>
<menu_item_call label="Mais informa癟繭es" name="more_info"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml
index ba3879b5a1..09e1fbf72e 100644
--- a/indra/newview/skins/default/xui/pt/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml
@@ -59,6 +59,7 @@
<menu_item_call label="Propriedades" name="Properties"/>
<menu_item_call label="Renomear" name="Rename"/>
<menu_item_call label="Copiar item UUID" name="Copy Asset UUID"/>
+ <menu_item_call label="Cortar" name="Cut"/>
<menu_item_call label="Copiar" name="Copy"/>
<menu_item_call label="Colar" name="Paste"/>
<menu_item_call label="Colar como link" name="Paste As Link"/>
@@ -84,6 +85,6 @@
<menu_item_call label="Adicionar" name="Wearable Add"/>
<menu_item_call label="Tirar" name="Take Off"/>
<menu_item_call label="Copiar para Caixa de sa穩da do lojista" name="Merchant Copy"/>
- <menu_item_call label="Mover para Caixa de sa穩da do lojista" name="Merchant Move"/>
+ <menu_item_call label="Enviar para Mercado" name="Marketplace Send"/>
<menu_item_call label="--Sem op癟繭es--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml
index 94195f1b8c..be94ad49db 100644
--- a/indra/newview/skins/default/xui/pt/menu_login.xml
+++ b/indra/newview/skins/default/xui/pt/menu_login.xml
@@ -16,8 +16,8 @@
<menu_item_call label="Definir tamanho da janela:" name="Set Window Size..."/>
<menu_item_call label="Mostrar TOS" name="TOS"/>
<menu_item_call label="Mostrar mensagem cr穩tica" name="Critical"/>
- <menu_item_call label="Teste de m穩dia do navegador" name="Web Browser Test"/>
<menu_item_call label="Test de Bugs de Conte繳do Web" name="Web Content Floater Debug Test"/>
+ <menu label="Configurar n穩vel de registro em log" name="Set Logging Level"/>
<menu_item_check label="Exibir seletor da grade" name="Show Grid Picker"/>
<menu_item_call label="Exibir painel de notifica癟繭es" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 119a3bdcfe..d7d5d59a33 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -14,14 +14,14 @@
<menu_item_check label="Voar" name="Fly"/>
<menu_item_check label="Correr sempre" name="Always Run"/>
<menu_item_call label="Parar minha anima癟瓊o" name="Stop Animating My Avatar"/>
+ <menu_item_call label="Andar/correr/voar..." name="Walk / run / fly"/>
</menu>
<menu label="Status" name="Status">
<menu_item_call label="Ausente" name="Set Away"/>
<menu_item_call label="Ocupado" name="Set Busy"/>
</menu>
- <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="Comprar L$..." name="Buy and Sell L$"/>
+ <menu_item_call label="Caixa de sa穩da do lojista..." name="MerchantOutbox"/>
<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>
@@ -63,10 +63,10 @@
<menu_item_check label="Propriedades do lote" name="Parcel Properties"/>
<menu_item_check label="Menu avan癟ado" name="Show Advanced Menu"/>
</menu>
- <menu label="Sol" name="Environment Settings">
+ <menu label="Sol" name="Sun">
<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="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>
@@ -178,22 +178,22 @@
<menu_item_check label="Mostrar ret穩culo na vista subjetiva" name="ShowCrosshairs"/>
</menu>
<menu label="Tipos de renderiza癟瓊o" name="Rendering Types">
- <menu_item_check label="Simples" name="Simple"/>
- <menu_item_check label="Alpha" name="Alpha"/>
- <menu_item_check label="rvore" name="Tree"/>
- <menu_item_check label="Avatares" name="Character"/>
- <menu_item_check label="Patch de superf穩cie" name="Surface Patch"/>
- <menu_item_check label="C矇u" name="Sky"/>
- <menu_item_check label="gua" name="Water"/>
- <menu_item_check label="Ch瓊o" name="Ground"/>
- <menu_item_check label="Volume" name="Volume"/>
- <menu_item_check label="Grama" name="Grass"/>
- <menu_item_check label="Nuvens" name="Clouds"/>
- <menu_item_check label="Part穩culas" name="Particles"/>
- <menu_item_check label="Eleva癟瓊o" name="Bump"/>
+ <menu_item_check label="Simples" name="Rendering Type Simple"/>
+ <menu_item_check label="Alpha" name="Rendering Type Alpha"/>
+ <menu_item_check label="rvore" name="Rendering Type Tree"/>
+ <menu_item_check label="Avatares" name="Rendering Type Character"/>
+ <menu_item_check label="Patch de superf穩cie" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="C矇u" name="Rendering Type Sky"/>
+ <menu_item_check label="gua" name="Rendering Type Water"/>
+ <menu_item_check label="Ch瓊o" name="Rendering Type Ground"/>
+ <menu_item_check label="Volume" name="Rendering Type Volume"/>
+ <menu_item_check label="Grama" name="Rendering Type Grass"/>
+ <menu_item_check label="Nuvens" name="Rendering Type Clouds"/>
+ <menu_item_check label="Part穩culas" name="Rendering Type Particles"/>
+ <menu_item_check label="Eleva癟瓊o" name="Rendering Type Bump"/>
</menu>
<menu label="Recursos de renderiza癟瓊o" name="Rendering Features">
- <menu_item_check label="Interface" name="UI"/>
+ <menu_item_check label="Interface" name="ToggleUI"/>
<menu_item_check label="Selecionado" name="Selected"/>
<menu_item_check label="Real癟ado" name="Highlighted"/>
<menu_item_check label="Texturas din璽micas" name="Dynamic Textures"/>
@@ -206,8 +206,6 @@
<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_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"/>
@@ -216,13 +214,6 @@
<menu_item_check label="Flycam Joystick" name="Joystick Flycam"/>
<menu_item_call label="Vis瓊o padr瓊o" name="Reset View"/>
<menu_item_call label="Olhar para quem fala por 繳ltimo" name="Look at Last Chatter"/>
- <menu label="Selecionar ferramenta de constru癟瓊o" name="Select Tool">
- <menu_item_call label="Ferramenta enfoque" name="Focus"/>
- <menu_item_call label="Ferramenta de movimenta癟瓊o" name="Move"/>
- <menu_item_call label="Ferramenta de edi癟瓊o" name="Edit"/>
- <menu_item_call label="Ferramenta criar" name="Create"/>
- <menu_item_call label="Ferramenta de terrenos" name="Land"/>
- </menu>
<menu_item_call label="Mais zoom" name="Zoom In"/>
<menu_item_call label="Zoom padr瓊o" name="Zoom Default"/>
<menu_item_call label="Menos zoom" name="Zoom Out"/>
@@ -278,6 +269,7 @@
<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="Bytes do anexo" name="attachment bytes"/>
<menu_item_check label="Esculpir" name="Sculpt"/>
</menu>
<menu label="Rendering" name="Rendering">
@@ -300,11 +292,10 @@
<menu_item_call label="Drop a Packet" name="Drop a Packet"/>
</menu>
<menu_item_call label="Empurr繭es, trombadas e tapas" name="Bumps, Pushes &amp;amp; Hits"/>
- <menu label="Mundo" name="World">
- <menu_item_check label="Impor sobre sol regional" name="Sim Sun Override"/>
- <menu_item_check label="Efeito baliza piscando" name="Cheesy Beacon"/>
- <menu_item_check label="Fixed Weather" name="Fixed Weather"/>
- <menu_item_call label="Dump Region Object Cache" name="Dump Region Object Cache"/>
+ <menu label="Mundo" name="DevelopWorld">
+ <menu_item_check label="Impor sobre sol de simula癟瓊o" name="Sim Sun Override"/>
+ <menu_item_check label="Clima fixo" name="Fixed Weather"/>
+ <menu_item_call label="Descartar cache do objeto de regi瓊o" name="Dump Region Object Cache"/>
</menu>
<menu label="Interface" name="UI">
<menu_item_call label="Teste de m穩dia do navegador" name="Web Browser Test"/>
@@ -324,11 +315,11 @@
</menu>
<menu label="Avatar" name="Character">
<menu label="Grab Baked Texture" name="Grab Baked Texture">
- <menu_item_call label="ris" name="Iris"/>
- <menu_item_call label="Cabe癟a" name="Head"/>
- <menu_item_call label="Cintura acima" name="Upper Body"/>
- <menu_item_call label="Cintura para baixo" name="Lower Body"/>
- <menu_item_call label="Saia" name="Skirt"/>
+ <menu_item_call label="ris" name="Grab Iris"/>
+ <menu_item_call label="Cabe癟a" name="Grab Head"/>
+ <menu_item_call label="Cintura acima" name="Grab Upper Body"/>
+ <menu_item_call label="Cintura para baixo" name="Grab Lower Body"/>
+ <menu_item_call label="Saia" name="Grab Skirt"/>
</menu>
<menu label="Testes de personagem" name="Character Tests">
<menu_item_call label="Toggle Character Geometry" name="Toggle Character Geometry"/>
@@ -344,18 +335,27 @@
</menu>
<menu_item_check label="Texturas HTTP" name="HTTP Textures"/>
<menu_item_check label="Invent獺rio HTTP" name="HTTP Inventory"/>
+ <menu_item_call label="Habilitar Visual Leak Detector" name="Enable Visual Leak Detector"/>
<menu_item_check label="Console Window on next Run" name="Console Window"/>
+ <menu label="Configurar n穩vel de registro em log" name="Set Logging Level">
+ <menu_item_check label="Depurar" name="Debug"/>
+ <menu_item_check label="Info" name="Info"/>
+ <menu_item_check label="Aviso" name="Warning"/>
+ <menu_item_check label="Error" name="Error"/>
+ <menu_item_check label="Nenhum" name="None"/>
+ </menu>
<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_check label="Mostrar menu admin" name="View Admin Options"/>
</menu>
<menu label="Admin" name="Admin">
- <menu label="Object">
- <menu_item_call label="Pegar uma c籀pia" name="Take Copy"/>
- <menu_item_call label="Force Owner To Me" name="Force Owner To Me"/>
- <menu_item_call label="Force Owner Permissive" name="Force Owner Permissive"/>
+ <menu label="Objeto" name="AdminObject">
+ <menu_item_call label="Pegar uma c籀pia" name="Admin Take Copy"/>
+ <menu_item_call label="For癟ar propriedade para mim" name="Force Owner To Me"/>
+ <menu_item_call label="For癟ar permiss瓊o de propriet獺rio" name="Force Owner Permissive"/>
<menu_item_call label="Excluir" name="Delete"/>
<menu_item_call label="Bloquear" name="Lock"/>
+ <menu_item_call label="Obter IDs dos bens" name="Get Assets IDs"/>
</menu>
<menu label="Lote" name="Parcel">
<menu_item_call label="Force Owner To Me" name="Owner To Me"/>
@@ -372,5 +372,16 @@
<menu label="Take Off Clothing" name="Take Off Clothing">
<menu_item_call label="F穩sico" name="Physics"/>
</menu>
+ <menu label="Ajuda" name="DeprecatedHelp">
+ <menu_item_call label="Blog oficial da Linden" name="Official Linden Blog"/>
+ <menu_item_call label="Portal de scripts" name="Scripting Portal"/>
+ <menu label="Relatar bugs" name="Bug Reporting">
+ <menu_item_call label="Monitor de problemas" name="Public Issue Tracker"/>
+ <menu_item_call label="Ajuda do monitor de problemas" name="Publc Issue Tracker Help"/>
+ <menu_item_call label="Relat籀rio de bugs 101" name="Bug Reporing 101"/>
+ <menu_item_call label="Problemas de seguran癟a" name="Security Issues"/>
+ <menu_item_call label="P獺gina Wiki" name="QA Wiki"/>
+ </menu>
+ </menu>
</menu>
</menu_bar>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 2c5ccd6e19..3b39c0f92c 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -85,17 +85,38 @@ Verifique se a conex瓊o internet est獺 funcionando.
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="N瓊o salvar" yestext="Salvar"/>
</notification>
<notification name="ConfirmNoCopyToOutbox">
- Voc礙 n瓊o tem permiss瓊o para copiar este item para a Caixa de sa穩da do lojista. Tem certeza de que deseja mover o itens a seguir?
- [ITEM_NAME]
- <usetemplate name="okcancelbuttons" notext="N瓊o" yestext="Sim"/>
+ Voc礙 n瓊o possui permiss瓊o para copiar um ou mais destes itens para a Caixa de sa穩da do lojista. Voc礙 pode mov礙-los ou abandon獺-los.
+ <usetemplate name="okcancelbuttons" notext="N瓊o mover item(ns)" yestext="Mover item(ns)"/>
+ </notification>
+ <notification name="OutboxFolderCreated">
+ Uma nova pasta foi criada para cada item transferido para o n穩vel superior de sua Caixa de sa穩da do lojista.
+ <usetemplate ignoretext="Uma nova pasta foi criada na Caixa de sa穩da do lojista" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadComplete">
- Envio para Mercado conclu穩do.
- <usetemplate name="okbutton" yestext="Viva!"/>
+ <notification name="OutboxImportComplete">
+ xito
+
+Todas as pastas foram enviadas para o Mercado com 礙xito.
+ <usetemplate ignoretext="Todas as pastas enviadas para o Mercado" name="okignore" yestext="OK"/>
</notification>
- <notification name="OutboxUploadHadErrors">
- Envio para Mercado conclu穩do com erros! Corrija os problemas em sua caixa de sa穩da e tente novamente. Obrigado.
- <usetemplate name="okbutton" yestext="Tudo bem!"/>
+ <notification name="OutboxImportHadErrors">
+ Algumas pastas n瓊o foram transferidas
+
+Erro ao enviar algumas pastas para o Mercado. Estas pastas ainda est瓊o na sua Caixa de sa穩da do lojista.
+
+Consulte o [[MARKETPLACE_IMPORTS_URL] log de erros] para mais informa癟繭es.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportFailed">
+ Falha de transfer礙ncia
+
+Nenhuma pasta enviada para o Mercado devido a um erro do sistema ou da rede. Tente novamente mais tarde.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="OutboxInitFailed">
+ Falha na inicializa癟瓊o do Mercado
+
+Falha na inicializa癟瓊o do mercado devido a um erro do sistema ou da rede. Tente novamente mais tarde.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CompileQueueSaveText">
Houve um problema com o carregamento do texto para um script devido seguinte raz瓊o: [REASON]. Por favor, tente novamente mais tarde.
@@ -643,7 +664,7 @@ Esperada [VALIDS]
Incapaz de criar arquivo de sa穩da: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- O [APP_NAME] ainda n瓊o faz o upload de v獺rios arquivos de anima癟瓊o de uma vez.
+ O [APP_NAME] ainda n瓊o faz o upload de v獺rios arquivos de anima癟瓊o no formato BVH de uma vez.
</notification>
<notification name="CannotUploadReason">
Incapaz de carregar [FILE] devido ao seguinte motivo: [REASON]
@@ -1424,8 +1445,7 @@ Para instalar a atualiza癟瓊o, ser獺 preciso reiniciar o [APP_NAME].
<usetemplate ignoretext="Confirmar antes de devolver objetos a seus donos" name="okcancelignore" notext="Cancelar" yestext="Retornar"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- Voc礙 矇 atualmente um membro do grupo &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
-Sair do grupo?
+ Voc礙 矇 atualmente um membro do grupo
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sair"/>
</notification>
<notification name="ConfirmKick">
@@ -2592,16 +2612,16 @@ Deseja aceitar?
&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; de [NAME]
[MESSAGE]
<form name="form">
- <button name="Mute" text="Bloquear"/>
- <button name="Ignore" text="Ignorar"/>
+ <button name="Client_Side_Mute" text="Bloquear"/>
+ <button name="Client_Side_Ignore" text="Ignorar"/>
</form>
</notification>
<notification name="ScriptDialogGroup">
&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; de [GROUPNAME]&apos;
[MESSAGE]
<form name="form">
- <button name="Mute" text="Bloquear"/>
- <button name="Ignore" text="Ignorar"/>
+ <button name="Client_Side_Mute" text="Bloquear"/>
+ <button name="Client_Side_Ignore" text="Ignorar"/>
</form>
</notification>
<notification name="BuyLindenDollarSuccess">
@@ -2799,6 +2819,12 @@ Com os seguintes residentes:
[RESIDENTS]
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
+ <notification name="ShareFolderConfirmation">
+ Apenas uma pasta pode ser compartilhada por vez.
+
+Tem certeza de que quer compartilhar os itens abaixo?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
<notification name="ItemsShared">
Itens compartilhados.
</notification>
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
index 15470dc94a..6828d41dee 100644
--- a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="Traduzir bate-papo" name="translate_chat_checkbox"/>
+ <layout_stack name="stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Traduzir bate-papo" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
index e5d394865c..6c5945aa15 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
@@ -23,10 +23,10 @@
<check_box label="Permitir acesso p繳blico" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Restringir acesso a contas confirmardas por:
+ Permitir acesso apenas para residentes que:
</text>
- <check_box label="Dados de pagamento fornecidos" name="limit_payment" tool_tip="Banir residentes sem identifica癟瓊o."/>
- <check_box label="Verifica癟瓊o de idade" name="limit_age_verified" tool_tip="Banir residentes que n瓊o comprovaram a idade. Consulte o [SUPPORT_SITE] para saber mais."/>
+ <check_box label="Dados de pagamento constam no registro." name="limit_payment" tool_tip="Propriedade de acesso restrito a residentes que j獺 cadastraram seus dados de pagamento Consulte o [SUPPORT_SITE] para saber mais."/>
+ <check_box label="A idade foi verificada" name="limit_age_verified" tool_tip="Residentes devem ter a idade verificada para acessar esta propriedade. Consulte o [SUPPORT_SITE] para saber mais."/>
<check_box label="Permitir conversa de voz" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Permitir Tele-transporte direto" name="allow_direct_teleport"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_script_ed.xml b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
index a1acb18cb4..de02aafe2f 100644
--- a/indra/newview/skins/default/xui/pt/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
@@ -22,6 +22,8 @@
<menu label="Arquivo" name="File">
<menu_item_call label="Salvar" name="Save"/>
<menu_item_call label="Reverter todas as altera癟繭es" name="Revert All Changes"/>
+ <menu_item_call label="Carregar do arquivo..." name="LoadFromFile"/>
+ <menu_item_call label="Salvar para o arquivo..." name="SaveToFile"/>
</menu>
<menu label="Editar" name="Edit">
<menu_item_call label="desfazer" name="Undo"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_status_bar.xml b/indra/newview/skins/default/xui/pt/panel_status_bar.xml
index 22853f0643..cb9a6eb757 100644
--- a/indra/newview/skins/default/xui/pt/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/pt/panel_status_bar.xml
@@ -15,7 +15,7 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <panel name="balance_bg">
+ <panel left="-410" name="balance_bg" width="200">
<text name="balance" tool_tip="Atualizar saldo de L$" value="L$20"/>
<button label="Comprar L$" name="buyL" tool_tip="Comprar mais L$"/>
<button label="Comprar" name="goShop" tool_tip="Abrir Mercado do Second Life" width="80"/>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
index 77c552a852..7908ea5f3a 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
@@ -2,47 +2,24 @@
<panel label="Coisas" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<layout_stack name="inventory_layout_stack">
- <layout_panel name="inbox_outbox_layout_panel">
- <layout_stack name="inbox_outbox_layout_stack">
- <layout_panel name="inbox_layout_panel">
- <panel label="" name="marketplace_inbox">
- <string name="InboxLabelWithArg">
- Itens recebidos ([NUM])
- </string>
- <string name="InboxLabelNoArg">
- Itens recebidos
- </string>
- <button label="Itens recebidos" name="inbox_btn"/>
- <text name="inbox_fresh_new_count">
- [NUM] novo(s)
- </text>
- <panel tool_tip="Drag and drop items to your inventory to manage and use them">
- <text name="inbox_inventory_placeholder">
- Compras do marketplace ser瓊o entregues aqui.
- </text>
- </panel>
- </panel>
- </layout_panel>
- <layout_panel name="outbox_layout_panel">
- <panel label="" name="marketplace_outbox">
- <string name="OutboxLabelWithArg">
- Caixa de sa穩da do lojista ([NUM])
- </string>
- <string name="OutboxLabelNoArg">
- Caixa de sa穩da do lojista
- </string>
- <button label="Caixa de sa穩da do lojista" name="outbox_btn"/>
- <button label="" name="outbox_sync_btn" tool_tip="Enviar para a frente do meu mercado"/>
- <panel>
- <panel name="outbox_inventory_placeholder_panel">
- <text name="outbox_inventory_placeholder_title">
- Carregando...
- </text>
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Itens recebidos ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Itens recebidos
+ </string>
+ <button label="Itens recebidos" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] novo(s)
+ </text>
+ <panel name="inbox_inventory_placeholder_panel" tool_tip="Arraste e solte itens para o seu invent獺rio para us獺-los">
+ <text name="inbox_inventory_placeholder">
+ As compras do marketplace ser瓊o entregues aqui.
+ </text>
+ </panel>
+ </panel>
</layout_panel>
</layout_stack>
<panel name="button_panel">
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 4babd9cc43..342a52356b 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -157,9 +157,9 @@ Para saber mais, visite as perguntas frequentes abaixo: http://secondlife.com/vi
O Second Life est獺 fechado para manuten癟瓊o no momento. Somente funcion獺rios podem acess獺-lo. Consulte www.secondlife.com/status para as 繳ltimas atualiza癟繭es.
</string>
<string name="LoginFailedPremiumOnly">
- O acesso ao Second Life est獺 sendo restrito por alguns instantes para que todos tenham a melhor experi礙ncia poss穩vel.
-
-Titulares de contas gratuitas n瓊o poder瓊o acessar o Second Life para acomodar os assinantes do Second Life.
+ Logons do Second Life est瓊o temporariamente restritos para garantir a melhor experi礙ncia poss穩vel para os usu獺rios no mundo virtual.
+
+Pessoas com contas gratuitas n瓊o poder瓊o acessar o Second Life no momento para dar espa癟o para aquelas que pagaram pelo Second Life.
</string>
<string name="LoginFailedComputerProhibited">
O Second Life n瓊o pode ser acessado deste computador. Se voc礙 acredita que houve algum equ穩voco, contate support@secondlife.com.
@@ -291,17 +291,35 @@ Titulares de contas gratuitas n瓊o poder瓊o acessar o Second Life para acomodar
Apenas um item 繳nico pode ser arrastado para este local
</string>
<string name="TooltipPrice" value="L$[AMOUNT]"/>
+ <string name="TooltipOutboxDragToWorld">
+ N瓊o 矇 poss穩vel fazer rez do itens em sua caixa de sa穩da do lojista
+ </string>
<string name="TooltipOutboxNoTransfer">
- Um ou mais objetos n瓊o podem ser vendidos ou transferidos para outros usu獺rio.
+ Um ou mais destes objetos n瓊o podem ser vendidos ou transferidos.
+ </string>
+ <string name="TooltipOutboxNotInInventory">
+ Sua caixa de sa穩da do lojista aceita apenas itens direto do seu invent獺rio
</string>
<string name="TooltipOutboxWorn">
- Voc礙 est獺 usando um ou mais desses objetos. Remova-os de seu avatar e tente mov礙-los novamente.
+ Voc礙 n瓊o pode colocar os itens que est獺 vestindo na sua caixa de sa穩da do lojista
+ </string>
+ <string name="TooltipOutboxCallingCard">
+ N瓊o 矇 poss穩vel colocar cart繭es de visita em sua caixa de sa穩da do lojista
</string>
<string name="TooltipOutboxFolderLevels">
- Esta pasta tem muitos n穩veis de subpastas. Reorganize as pastas internas em at矇 4 n穩veis no m獺ximo (Pasta raiz cont矇m A que cont矇m B que cont矇m C).
+ A profundidade das pastas aninhadas excede 3
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ A contagem de subpastas na pasta de n穩vel superior excede 20
</string>
<string name="TooltipOutboxTooManyObjects">
- Esta pasta cont矇m mais de 200 objetos. Embale alguns dos itens para reduzir a contagem de objetos.
+ A contagem de itens na pasta de n穩vel superior excede 200
+ </string>
+ <string name="TooltipDragOntoOwnChild">
+ N瓊o 矇 poss穩vel mover uma pasta para seu filho
+ </string>
+ <string name="TooltipDragOntoSelf">
+ N瓊o 矇 poss穩vel mover uma pasta para dentro dela mesma
</string>
<string name="TooltipHttpUrl">
Clique para ver a p獺gina web
@@ -766,6 +784,9 @@ Titulares de contas gratuitas n瓊o poder瓊o acessar o Second Life para acomodar
<string name="anim_yes_head">
Sim
</string>
+ <string name="multiple_textures">
+ M繳ltiplo
+ </string>
<string name="texture_loading">
Carregando...
</string>
@@ -922,6 +943,9 @@ Titulares de contas gratuitas n瓊o poder瓊o acessar o Second Life para acomodar
<string name="choose_the_directory">
Selecionar pasta
</string>
+ <string name="script_files">
+ Scripts
+ </string>
<string name="AvatarSetNotAway">
deixar como ausente
</string>
@@ -1160,43 +1184,36 @@ 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">
- 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.
+ Suas compras do Marketplace aparecer瓊o aqui. Depois, voc礙 poder獺 arrast獺-las para seu invent獺rio para us獺-las.
</string>
<string name="MarketplaceURL">
- http://marketplace.[DOMAIN_NAME]
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
</string>
<string name="MarketplaceURL_CreateStore">
- http://marketplace.[DOMAIN_NAME]/create_store
+ http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4
</string>
- <string name="MarketplaceURL_LearnMore">
- http://marketplace.[DOMAIN_NAME]/learn_more
- </string>
- <string name="InventoryOutboxCreationErrorTitle">
- Sua Caixa de sa穩da do lojista n瓊o est獺 configurada corretamente
+ <string name="MarketplaceURL_Dashboard">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard
</string>
- <string name="InventoryOutboxCreationErrorTooltip">
- Erro de configura癟瓊o na Caixa de sa穩da do lojista
+ <string name="MarketplaceURL_Imports">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports
</string>
- <string name="InventoryOutboxCreationError">
- Entre em contato com o Atendimento para corrigir o problema.
+ <string name="MarketplaceURL_LearnMore">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryOutboxNotMerchantTitle">
- Qualquer um pode vender itens no Mercado
- </string>
- <string name="InventoryOutboxNotMerchantTooltip">
- Torne-se um lojista!
+ Qualquer um pode vender itens no Mercado.
</string>
+ <string name="InventoryOutboxNotMerchantTooltip"/>
<string name="InventoryOutboxNotMerchant">
- [[MARKETPLACE_URL] O Mercado do Second Life] oferece mais de um milh瓊o de produtos virtuais para venda, todos criados pelos residentes. Voc礙 tamb矇m pode vender os itens que voc礙 cria, al矇m de alguns itens que comprou. f獺cil e a configura癟瓊o 矇 gratuita. [[LEARN_MORE_URL] Saiba mais] ou [[CREATE_STORE_URL] crie uma loja] no Mercado para come癟ar.
+ Se voc礙 deseja se tornar um lojista, precisar獺 [[MARKETPLACE_CREATE_STORE_URL] criar uma loja no Mercado].
</string>
<string name="InventoryOutboxNoItemsTitle">
- Uma nova maneira de vender os itens no Mercado
- </string>
- <string name="InventoryOutboxNoItemsTooltip">
- Arraste e solte os itens aqui para prepar獺-los para venda no Mercado
+ Sua caixa de sa穩da est獺 vazia
</string>
+ <string name="InventoryOutboxNoItemsTooltip"/>
<string name="InventoryOutboxNoItems">
- Arraste os itens ou pastas que deseja vender para esta 獺rea. Ser獺 exibida uma c籀pia deles, deixando seu invent獺rio inalterado, a menos que voc礙 arraste um item que n瓊o permita c籀pia. Quando estiver pronto para enviar os itens para o Mercado, clique no bot瓊o Enviar. Quando os itens tiverem sido movidos para seu Invent獺rio de mercado, eles desaparecer瓊o desta pasta.
+ Arraste as pastas para estas 獺reas e ent瓊o clique em &quot;Enviar para Mercado&quot; para listar os itens para venda no [[MARKETPLACE_DASHBOARD_URL] Mercado].
</string>
<string name="Marketplace Error None">
Sem erros
@@ -1208,7 +1225,7 @@ Titulares de contas gratuitas n瓊o poder瓊o acessar o Second Life para acomodar
Erro: esta pasta est獺 vazia.
</string>
<string name="Marketplace Error Unassociated Products">
- Erro: ocorreu uma falha ao enviar este item, pois sua conta de lojista tem muitos itens n瓊o associados a produtos. Para corrigir esse erro, fa癟a o login no site do mercado e reduza a contagem de itens n瓊o associados.
+ Erro: ocorreu uma falha ao enviar este item, pois sua conta de lojista tem muitos itens n瓊o associados a produtos. Para corrigir esse erro, fa癟a o login no site do mercado e reduza a contagem de itens n瓊o associados.
</string>
<string name="Marketplace Error Object Limit">
Erro: este item cont矇m muitos objetos. Corrija esse erro unindo os objetos em caixa para reduzir a contagem total a menos de 200.
@@ -3783,6 +3800,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Saved_message">
(Salvo em [LONG_TIMESTAMP])
</string>
+ <string name="IM_unblock_only_groups_friends">
+ Para visualizar esta mensagem, voc礙 deve desmarcar &quot;Apenas amigos e grupos podem me ligar ou enviar MIs&quot; em Prefer礙ncias/Privacidade.
+ </string>
<string name="answered_call">
Liga癟瓊o atendida
</string>
@@ -3971,7 +3991,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
</string>
<string name="uploading_abuse_report">
Carregando...
-
+
Denunciar abuso
</string>
<string name="New Shape">
@@ -4237,10 +4257,10 @@ Denunciar abuso
</string>
<string name="words_separator" value=","/>
<string name="server_is_down">
- Aconteceu algo inesperado, apesar de termos tentador impedir isso.
+ Aconteceu algo inesperado, apesar de termos tentado impedir isso.
- Cheque secondlifegrid.net para saber se foi detectado um problema com o servi癟o.
- Se o problema persisitr, cheque a configura癟瓊o da sua rede e firewall.
+ Cheque secondlifegrid.net para saber se foi detectado um problema com o servi癟o.
+ Se o problema persistir, cheque a configura癟瓊o da sua rede e firewall.
</string>
<string name="dateTimeWeekdaysNames">
Domingo:Segunda:Ter癟a:Quarta:Quinta:Sexta:S獺bado
@@ -4706,6 +4726,9 @@ Tente colocar o caminho do editor entre aspas.
<string name="Command_Move_Label">
Andar/correr/voar
</string>
+ <string name="Command_Outbox_Label">
+ Caixa de sa穩da do lojista
+ </string>
<string name="Command_People_Label">
Pessoas
</string>
@@ -4778,6 +4801,9 @@ Tente colocar o caminho do editor entre aspas.
<string name="Command_Move_Tooltip">
Movendo seu avatar
</string>
+ <string name="Command_Outbox_Tooltip">
+ Transferir itens para o seu mercado para venda
+ </string>
<string name="Command_People_Tooltip">
Amigos, grupos e pessoas pr籀ximas
</string>
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 46414a530a..ee74aad5cc 100644
--- a/indra/newview/skins/default/xui/ru/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ru/floater_about_land.xml
@@ -306,9 +306,6 @@
<panel.string name="push_restrict_region_text">
迮 郋郅郕訄 (郇訄郋邿郕邽 迮迣邽郋郇訄)
</panel.string>
- <panel.string name="see_avs_text">
- 赲訄訄 迡迣邽 訄郕郋赲 邾郋迣 赲邽迡迮
- </panel.string>
<text name="allow_label">
郋郱赲郋郅邽 迡迣邽邾 迠邽迮郅邾:
</text>
@@ -371,7 +368,7 @@
</text>
<texture_picker name="snapshot_ctrl" tool_tip="虳迮郅郕郇邽迮 迡郅 赲訇郋訄 邽郱郋訇訄迠迮郇邽"/>
<text name="allow_label5">
- 訄赲訄訄 郇訄 郋邾 訄郕迮 邽 郋訇訄 郇邽邾邽
+ 赲訄訄 迡迣邽 訄郕郋赲 邾郋迣 赲邽迡迮 訄赲訄訄 郇訄 郋邾 訄郕迮 邽 郋訇訄 郇邽邾邽
</text>
<check_box label="邽迡郇 訄赲訄訄" name="SeeAvatarsCheck" tool_tip="赲訄訄 迡迣邽 訄郕郋赲 邾郋迣 赲邽迡迮 訄赲訄訄 郇訄 郋邾 訄郕迮 邽 郋訇訄 郇邽邾邽 赲 訄迮, 訄 赲 訄郕迠迮 邾郋迠迮迮 赲邽迡迮 邽 邽 郋訇訄 郇邽邾邽."/>
<text name="landing_point">
@@ -446,20 +443,15 @@
<panel.string name="access_estate_defined">
(郈迮迡迮郅迮郇郋 郇訄 郱迮邾郅迮赲郅訄迡迮郇邽邽)
</panel.string>
- <panel.string name="allow_public_access">
- 訄郱迮邽 郋訇邽邿 迡郋郈 ([MATURITY]) (苤郇邽迮 郈邽赲迮迡迮 郕 郋郱迡訄郇邽 郅邽郇邽邿 郱訄郈迮訄)
- </panel.string>
<panel.string name="estate_override">
虴訄 邽 郈訄訄邾迮郋赲 訄郇郋赲郅迮郇訄 郇訄 郋赲郇迮 郱迮邾郅迮赲郅訄迡迮郇邽
</panel.string>
- <text name="Limit access to this parcel to:">
- 郋郈 郇訄 郋 訄郋郕
- </text>
+ <check_box label="訄郱迮邽 郈訇郅邽郇邿 迡郋郈 (郇邽迮 郅訄迠郕訄 郈邽赲迮迡迮 郕 郋郱迡訄郇邽 郅邽郇邽邿 郱訄郈迮訄)" name="public_access"/>
<text name="Only Allow">
- 訄郱迮邽 迡郋郈 郋郅郕郋 迠邽迮郅邾, 郕郋郋:
+ 訄郱迮邽 迡郋郈 郋郅郕郋 訄郕邽邾 迠邽迮郅邾:
</text>
- <check_box label="訄郈邽訄郇訄 邽郇郋邾訄邽 郋訇 郋郈郅訄迮 [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="訄郇邽 郇迮訄郈郋郱郇訄郇郇 迠邽迮郅迮邿."/>
- <check_box label="郋赲迮郕訄 赲郋郱訄訄 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="訄郇邽 迠邽迮郅迮邿, 郇迮 郈郋迮迡邽 郈郋赲迮郕 赲郋郱訄訄. 郋郅迮迮 郈郋迡郋訇郇訄 邽郇郋邾訄邽 郇訄郋迡邽 郱迡迮: [SUPPORT_SITE]."/>
+ <check_box label="訄迮迣邽邽郋赲訄郇訄 邽郇郋邾訄邽 郋訇 郋郈郅訄迮 [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="郅 迡郋郈訄 郕 郋邾 訄郕 迠邽迮郅 迡郋郅迠郇訄 訇 郱訄迮迣邽邽郋赲訄郇訄 邽郇郋邾訄邽 郋訇 郋郈郅訄迮. 郋郅迮迮 郈郋迡郋訇郇訄 邽郇郋邾訄邽 郇訄郋迡邽 郱迡迮: [SUPPORT_SITE]."/>
+ <check_box label="郋迡赲迮迠迡迮郇 赲郋郱訄 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="郅 迡郋郈訄 郕 郋邾 訄郕 迠邽迮郅 迡郋郅迠迮郇 郈郋迡赲迮迡邽 赲郋邿 赲郋郱訄. 郋郅迮迮 郈郋迡郋訇郇訄 邽郇郋邾訄邽 郇訄郋迡邽 郱迡迮: [SUPPORT_SITE]."/>
<check_box label="訄郱迮邽 迡郋郈 迣郈郈迮: [GROUP]" name="GroupCheck" tool_tip="郈郈訄 訄郇訄赲郅邽赲訄迮 郇訄 郋郇郋赲郇郋邿 赲郕郅訄迡郕迮."/>
<check_box label="郋迡訄 迡郋郈:" name="PassCheck" tool_tip="訄郱迮邽 赲迮邾迮郇郇邿 迡郋郈 郕 訄郕."/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/ru/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/ru/floater_animation_anim_preview.xml
new file mode 100644
index 0000000000..711afc2717
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_animation_anim_preview.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Anim Preview" title="ANIMATION.ANIM">
+ <text name="name_label">
+ 訄郱赲訄郇邽迮:
+ </text>
+ <text name="description_label">
+ 郈邽訄郇邽迮:
+ </text>
+ <button label="迮迮迡訄 (L$[AMOUNT])" name="ok_btn"/>
+ <button label="邾迮郇訄" label_selected="邾迮郇訄" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/ru/floater_animation_bvh_preview.xml
new file mode 100644
index 0000000000..8ad9d8657a
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_animation_bvh_preview.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview">
+ <floater.string name="failed_to_initialize">
+ 迮赲郋郱邾郋迠郇郋 邽郇邽邽訄郅邽郱邽郋赲訄 迡赲邽迠迮郇邽迮
+ </floater.string>
+ <floater.string name="anim_too_long">
+ 郅邽郇訄 訄邿郅訄 訄郇邽邾訄邽邽: [LENGTH] .
+
+訄郕邽邾訄郅郇訄 迡郅邽郇訄 訄郇邽邾訄邽邽: [MAX_LENGTH] .
+ </floater.string>
+ <floater.string name="failed_file_read">
+ 迮赲郋郱邾郋迠郇郋 郈郋邽訄 訄邿郅 訄郇邽邾訄邽邽.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ 迮迠迡迮赲迮邾迮郇郇邿 郕郋郇迮 訄邿郅訄.
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ 迮 邾郋迣 郈郋邽訄 郋郈迮迡迮郅迮郇邽迮 郋迣訄郇邽迮郇邽邿.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ 迮 迡訄郅郋 郋郕 BVH-訄邿郅.
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ 迮郈訄赲邽郅郇邿 郱訄迣郋郅郋赲郋郕 HIERARCHY.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ 迮 迡訄郅郋 郇訄邿邽 ROOT 邽郅邽 JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ 迮 迡訄郅郋 郈郋郅邽 邽邾 JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ 迮 迡訄郅郋 郇訄邿邽 OFFSET.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ 迮 迡訄郅郋 郇訄邿邽 CHANNELS.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ 迮 迡訄郅郋 郈郋郅邽 郈郋迡郋郕 赲訄迮郇邽.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ 迮 迡訄郅郋 郈郋郅邽 郋邽 赲訄迮郇邽.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ 迮 迡訄郅郋 郇訄邿邽 MOTION.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ 迮 迡訄郅郋 郈郋郅邽 郕郋郅邽迮赲郋 郕訄迡郋赲.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ 迮 迡訄郅郋 郈郋郅邽 赲迮邾 郕訄迡訄.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ 迮 迡訄郅郋 郈郋郅邽 郱郇訄迮郇邽 position.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ 迮 迡訄郅郋 郈郋郅邽 郱郇訄迮郇邽 rotation.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ 迮 迡訄郅郋 郋郕 訄邿郅 郈迮迮赲郋迡訄.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ 迮 迡訄郅郋 郈郋邽訄 郱訄迣郋郅郋赲郋郕 郈迮迮赲郋迡訄.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ 迮 迡訄郅郋 郈郋邽訄 邽邾迮郇訄 郈迮迮赲郋迡訄.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ 迮 迡訄郅郋 郈郋邽訄 郱郇訄迮郇邽迮 郈迮迮赲郋迡訄 ignore.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ 迮 迡訄郅郋 郈郋邽訄 郱郇訄迮郇邽迮 郈迮迮赲郋迡訄 relative.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ 迮 迡訄郅郋 郈郋邽訄 郱郇訄迮郇邽迮 郈迮迮赲郋迡訄 outname.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ 迮 迡訄郅郋 郈郋邽訄 邾訄邽 郈迮迮赲郋迡訄.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ 迮 迡訄郅郋 郈郋郅邽 邽邾 mergechild.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ 迮 迡訄郅郋 郈郋郅邽 邽邾 mergeparent.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ 迮 迡訄郅郋 郈郋郅邽 郱郇訄迮郇邽迮 priority.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ 迮 迡訄郅郋 郈郋郅邽 郱郇訄迮郇邽迮 loop.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ 迮 迡訄郅郋 郈郋郅邽 郱郇訄迮郇邽 easeIn.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ 迮 迡訄郅郋 郈郋郅邽 郱郇訄迮郇邽 easeOut.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ 迮 迡訄郅郋 郈郋郅邽 郱郇訄迮郇邽迮 hand morph.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ 迮 迡訄郅郋 郈郋邽訄 邽邾 emote.
+ </floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ 迮赲迮郇郋迮 邽邾 郕郋郇迮赲郋迣郋 郋迮迡邽郇迮郇邽, 迡郋郅迠郇郋 訇 竄hip罈.
+ </floater.string>
+ <text name="name_label">
+ 訄郱赲訄郇邽迮:
+ </text>
+ <text name="description_label">
+ 郈邽訄郇邽迮:
+ </text>
+ <spinner label="邽郋邽迮" name="priority" tool_tip="苺郈訄赲郅迮 迮邾, 郕訄郕 迡迣邽迮 訄郇邽邾訄邽邽 邾郋迣 郈迮迮郕赲訄 郋邿"/>
+ <check_box label="虷邽郕郅" name="loop_check" tool_tip="迮郅訄迮 訄郇邽邾訄邽 郱訄邽郕郅迮郇郇郋邿"/>
+ <spinner label="訄訄郅郋(%)" name="loop_in_point" tool_tip="苺訄郇訄赲郅邽赲訄迮 郋郕 赲郋郱赲訄訄 邽郕郅訄"/>
+ <spinner label="郋郇迮(%)" name="loop_out_point" tool_tip="苺訄郇訄赲郅邽赲訄迮 郋郕 郕郋郇訄 邽郕郅訄"/>
+ <text name="hand_label">
+ 郋郅郋迠迮郇邽迮 郈訄郅迮赲
+ </text>
+ <combo_box name="hand_pose_combo" tool_tip="郋郇郋郅邽迮 郈郋郅郋迠迮郇邽迮 郈訄郅迮赲 赲郋 赲迮邾 訄郇邽邾訄邽邽">
+ <combo_box.item label="訄郱赲迮迡迮郇" name="Spread"/>
+ <combo_box.item label="訄郅訄訇郅迮郇" name="Relaxed"/>
+ <combo_box.item label="苺郕訄郱赲訄" name="PointBoth"/>
+ <combo_box.item label="苤迠訄 赲 郕郅訄郕" name="Fist"/>
+ <combo_box.item label="迮赲迮 訄郅訄訇郅迮郇" name="RelaxedLeft"/>
+ <combo_box.item label="迮赲迮 郕訄郱赲訄" name="PointLeft"/>
+ <combo_box.item label="迮赲迮 赲 郕郅訄郕" name="FistLeft"/>
+ <combo_box.item label="訄赲迮 訄郅訄訇郅迮郇" name="RelaxedRight"/>
+ <combo_box.item label="訄赲迮 郕訄郱赲訄" name="PointRight"/>
+ <combo_box.item label="訄赲迮 赲 郕郅訄郕" name="FistRight"/>
+ <combo_box.item label="訄赲迮 赲 郈邽赲迮赲邽邽" name="SaluteRight"/>
+ <combo_box.item label="迮訄訄" name="Typing"/>
+ <combo_box.item label="訄赲迮 竄V罈" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ 訄迠迮郇邽迮 郅邽訄
+ </text>
+ <combo_box name="emote_combo" tool_tip="郋郇郋郅邽迮 赲訄迠迮郇邽迮 郅邽訄 赲郋 赲迮邾 訄郇邽邾訄邽邽">
+ <item label="(郇迮)" name="[None]" value=""/>
+ <item label="訄訄訄訄" name="Aaaaah" value="訄訄訄訄"/>
+ <item label="郋邽" name="Afraid" value="郋邽"/>
+ <item label="郅邽" name="Angry" value="郅邽"/>
+ <item label="虼邽郋郕郋 郅訇訄迮" name="BigSmile" value="虼邽郋郕郋 郅訇訄迮"/>
+ <item label="苤郕訄迮" name="Bored" value="苤郕訄迮"/>
+ <item label="郅訄迮" name="Cry" value="郅訄迮"/>
+ <item label="迮郱邽訄迮" name="Disdain" value="迮郱邽訄迮"/>
+ <item label="苤邾訄迮" name="Embarrassed" value="苤邾訄迮"/>
+ <item label="苭邾邽" name="Frown" value="苭邾邽"/>
+ <item label="虷迮郅迮" name="Kiss" value="虷迮郅迮"/>
+ <item label="苤邾迮迮" name="Laugh" value="苤邾迮迮"/>
+ <item label="訄郱郇邽" name="Plllppt" value="訄郱郇邽"/>
+ <item label="迮 郋迣郅訄訄迮" name="Repulsed" value="迮 郋迣郅訄訄迮"/>
+ <item label="邽" name="Sad" value="邽"/>
+ <item label="迮 郈郋郇邽邾訄迮" name="Shrug" value="迮 郈郋郇邽邾訄迮"/>
+ <item label="苺郅訇訄迮" name="Smile" value="苺郅訇訄迮"/>
+ <item label="苺迡邽赲郅迮" name="Surprise" value="苺迡邽赲郅迮"/>
+ <item label="郋迡邾邽迣邽赲訄迮" name="Wink" value="郋迡邾邽迣邽赲訄迮"/>
+ <item label="迮郈郋郕郋邽" name="Worry" value="迮郈郋郕郋邽"/>
+ </combo_box>
+ <text name="preview_label">
+ 郋邾郋 赲郋 赲迮邾
+ </text>
+ <combo_box name="preview_base_anim" tool_tip="郋邾郋 赲訄迮邿 訄郇邽邾訄邽邽 赲郋 赲迮邾 赲郈郋郅郇迮郇邽 訄赲訄訄郋邾 迡迮邿赲邽邿.">
+ <item label="苤郋郇邽迮" name="Standing" value="苤郋郇邽迮"/>
+ <item label="苭郋迡訇訄" name="Walking" value="苭郋迡訇訄"/>
+ <item label="苤邽迡迮郇邽迮" name="Sitting" value="苤邽迡迮郇邽迮"/>
+ <item label="郋郅迮" name="Flying" value="郋郅迮"/>
+ </combo_box>
+ <spinner label="郋迡 (迮郕.)" name="ease_in_time" tool_tip="郋郅邽迮赲郋 赲迮邾迮郇邽 (赲 迮郕郇迡訄) 迡郅 赲郋迡訄 赲 訄郋赲郋迮 郈郋郅郋迠迮郇邽迮"/>
+ <spinner label="郋迡 (迮郕.)" name="ease_out_time" tool_tip="郋郅邽迮赲郋 赲迮邾迮郇邽 (赲 迮郕郇迡訄) 迡郅 赲郋迡訄 邽郱 訄郇邽邾訄邽邽"/>
+ <button name="play_btn" tool_tip="郋邽迣訄 訄郇邽邾訄邽"/>
+ <button name="pause_btn" tool_tip="邽郋訄郇郋赲邽 訄郇邽邾訄邽"/>
+ <button name="stop_btn" tool_tip="訄郇郋赲邽 郈郋邽迣赲訄郇邽迮 訄郇邽邾訄邽邽"/>
+ <text name="bad_animation_text">
+ 迮赲郋郱邾郋迠郇郋 郈郋邽訄 訄邿郅 訄郇邽邾訄邽邽.
+
+迮郕郋邾迮郇迡迮 邽郈郋郅郱郋赲訄 BVH-訄邿郅, 郕郈郋邽郋赲訄郇郇迮 邽郱 Poser 4.
+ </text>
+ <button label="迮迮迡訄 (L$[AMOUNT])" name="ok_btn"/>
+ <button label="邾迮郇訄" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/ru/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..332fa3b82f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_merchant_outbox.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_merchant_outbox" title="苠衎 苤苭觓虳">
+ <string name="OutboxFolderCount1">
+ 1 郈訄郈郕訄
+ </string>
+ <string name="OutboxFolderCountN">
+ [NUM] 郈訄郈郕邽
+ </string>
+ <string name="OutboxImporting">
+ 郈訄赲郕訄 郈訄郈郋郕....
+ </string>
+ <string name="OutboxInitializing">
+ 郇邽邽訄郅邽郱訄邽...
+ </string>
+ <panel label="">
+ <panel>
+ <panel name="outbox_inventory_placeholder_panel">
+ <text name="outbox_inventory_placeholder_title">
+ 訄迣郱郕訄...
+ </text>
+ </panel>
+ </panel>
+ <panel>
+ <button label="郈訄赲邽 赲 郋迣郋赲邿 迮郇" name="outbox_import_btn" tool_tip="訄赲邽 郇訄 赲邽邽郇 邾郋迮迣郋 邾訄迣訄郱邽郇訄"/>
+ </panel>
+ </panel>
+</floater>
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 5b03dd2c73..c1a63bf7da 100644
--- a/indra/newview/skins/default/xui/ru/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/ru/floater_model_wizard.xml
@@ -6,14 +6,14 @@
<button label="2. 郈邽邾邽郱邽郋赲訄" name="optimize_btn"/>
<button label="1. 訇訄 訄邿郅" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
訇迮邽迮 訄邿郅 邾郋迡迮郅邽
</text>
</panel>
- <panel name="content">
+ <panel name="choose_file_content">
<text name="advanced_users_text">
- 郋郅郱郋赲訄迮郅邾 赲 訄邽迮郇郇郋邾 迮迠邽邾迮: 迮郅邽 赲 邾迮迮迮 郋郱迡訄赲訄 迮邾迮郇迮 迣訄邽迮郕邽迮 郋訇迮郕, 郋, 赲郋郱邾郋迠郇郋, 郱訄郋邽迮 赲郋郈郋郅郱郋赲訄 迮迡赲郋邾 Advanced Uploader, 郕郋郋郋迮 郈迮迡郋訄赲郅迮 訄邽迮郇郇迮 赲郋郱邾郋迠郇郋邽 郈迮迮迡訄邽 郋訇迮郕郋赲.
+ 郋郅郱郋赲訄迮郅邾, 訄訇郋訄邽邾 赲 訄邽迮郇郇郋邾 迮迠邽邾迮: 迮郅邽 赲 邾迮迮迮 郋郱迡訄赲訄 迮邾迮郇迮 迣訄邽迮郕邽迮 郋訇迮郕, 郋, 赲郋郱邾郋迠郇郋, 郱訄郋邽迮 赲郋郈郋郅郱郋赲訄 迮迡赲郋邾 Advanced Uploader, 郕郋郋郋迮 郈迮迡郋訄赲郅迮 訄邽迮郇郇迮 赲郋郱邾郋迠郇郋邽 郈迮迮迡訄邽 郋訇迮郕郋赲.
</text>
<button label="迮迮邿邽 赲 訄邽迮郇郇邿 迮迠邽邾" name="switch_to_advanced"/>
<text name="Cache location">
@@ -35,26 +35,26 @@
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
郈邽邾邽郱邽郋赲訄 邾郋迡迮郅
</text>
</panel>
- <text name="description">
+ <text name="optimize_description">
郋郈邽邾邽郱邽郋赲訄郅邽 邾郋迡迮郅 迡郅 郈郋赲迮郇邽 訇郋迡迮邿赲邽. 郋 迠迮郅訄郇邽 邾郋迠郇郋 赲郈郋郅郇邽 迡郋郈郋郅郇邽迮郅郇 郇訄郋邿郕.
</text>
- <panel name="content">
+ <panel name="optimize_content">
<text name="high_detail_text">
- 苤郋郱迡訄 郋赲迮郇 迡迮訄郅邽郱訄邽邽: 赲郋郕邽邿
+ 苤郋郱迡訄 郋赲迮郇 迡迮訄郅邽郱訄邽邽: 郋郕邽邿
</text>
<text name="medium_detail_text">
- 苤郋郱迡訄 郋赲迮郇 迡迮訄郅邽郱訄邽邽: 迮迡郇邽邿
+ 苤郋郱迡訄 郋赲迮郇 迡迮訄郅邽郱訄邽邽: 苤迮迡郇邽邿
</text>
<text name="low_detail_text">
- 苤郋郱迡訄 郋赲迮郇 迡迮訄郅邽郱訄邽邽: 郇邽郱郕邽邿
+ 苤郋郱迡訄 郋赲迮郇 迡迮訄郅邽郱訄邽邽: 邽郱郕邽邿
</text>
<text name="lowest_detail_text">
- 苤郋郱迡訄 郋赲迮郇 迡迮訄郅邽郱訄邽邽: 訄邾邿 郇邽郱郕邽邿
+ 苤郋郱迡訄 郋赲迮郇 迡迮訄郅邽郱訄邽邽: 苤訄邾邿 郇邽郱郕邽邿
</text>
</panel>
<panel name="content2">
@@ -79,19 +79,19 @@
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- 訄郋邽 邽郱邽郕
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ 訄郋邽 邽郱邽迮郕邽迮 郈訄訄邾迮
</text>
</panel>
- <text name="description">
+ <text name="physics_description">
郋郱迡訄迡邽邾 郋邾 迡郅 赲郇迮郇迮迣郋 郕訄郕訄訄 邾郋迡迮郅邽. 訄郋邿迮 郋赲迮郇 迡迮訄郅邽郱訄邽邽 郋邾 赲 郋郋赲迮赲邽邽 迮郅邾邽, 迡郅 郕郋郋 郈迮迡郇訄郱郇訄迮郇訄 邾郋迡迮郅.
</text>
- <panel name="content">
- <button label="迮迮邽訄 邽郱邽郕" name="recalculate_physics_btn"/>
+ <panel name="physics_content">
+ <button label="迮迮邽訄 邽郱邽迮郕邽迮 迡訄郇郇迮" name="recalculate_physics_btn"/>
<button label="迮迮迮..." name="recalculating_physics_btn"/>
<text name="lod_label">
- 郋邾郋 邽郱邽郕邽
+ 郋邾郋 邽郱邽迮郕邽 迡訄郇郇
</text>
<combo_box name="preview_lod_combo2" tool_tip="苺郋赲迮郇 迡迮訄郅邽郱訄邽邽 郈邽 郈迮迡赲訄邽迮郅郇郋邾 郈郋邾郋迮">
<combo_item name="high">
@@ -110,12 +110,12 @@
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
郋邾郋
</text>
</panel>
- <panel name="content">
+ <panel name="review_content">
<text name="review_prim_equiv">
郋郱迡迮邿赲邽迮 郇訄 訄郋郕/迮迣邽郋郇: 郕赲邽赲訄郅迮郇 赲 郈邽邾邽邽赲訄: [EQUIV]
</text>
@@ -128,8 +128,8 @@
</panel>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
迮迮迡訄訄 郱訄赲迮迮郇訄
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/floater_preview_animation.xml b/indra/newview/skins/default/xui/ru/floater_preview_animation.xml
index a1fabedb85..22c6bc5901 100644
--- a/indra/newview/skins/default/xui/ru/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/ru/floater_preview_animation.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
郈邽訄郇邽迮:
</text>
- <button label="郋邽迣訄 迡郅 赲迮" label_selected="苤郋郈" name="Anim play btn" tool_tip="郋邽迣赲訄郇邽迮 郋邿 訄郇邽邾訄邽邽 邾郋迣 赲邽迡迮 迡迣邽迮 訄郇邽郕邽"/>
- <button label="郋邽迣訄 迡郅 迮訇" label_selected="苤郋郈" name="Anim audition btn" tool_tip="郋邽迣赲訄郇邽迮 郋邿 訄郇邽邾訄邽邽 邾郋迠迮迮 赲邽迡迮 郋郅郕郋 赲"/>
+ <button label="郋邽迣訄 迡郅 赲迮" label_selected="苤郋郈" name="Inworld" tool_tip="郋邽迣赲訄郇邽迮 郋邿 訄郇邽邾訄邽邽 邾郋迣 赲邽迡迮 迡迣邽迮 訄郇邽郕邽"/>
+ <button label="郋邽迣訄 迡郅 迮訇" label_selected="苤郋郈" name="Locally" tool_tip="郋邽迣赲訄郇邽迮 郋邿 訄郇邽邾訄邽邽 邾郋迠迮迮 赲邽迡迮 郋郅郕郋 赲"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/ru/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..b479d5f6d6
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_test_layout_stacks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="LAYOUTSTACK TESTS"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/ru/floater_test_text_vertical_aligment.xml
new file mode 100644
index 0000000000..d0bd86160e
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_test_text_vertical_aligment.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="苠苤苠苠衧 "/>
diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml
index eb9083f7fc..3d7d1198f0 100644
--- a/indra/newview/skins/default/xui/ru/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ru/floater_tools.xml
@@ -1,5 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="苤苠苺苠衎 觓 苤苠苠衧苤苠">
+ <floater.string name="grid_screen_text">
+ 衪郕訄郇
+ </floater.string>
+ <floater.string name="grid_local_text">
+ 郋郕訄郅郇訄
+ </floater.string>
+ <floater.string name="grid_world_text">
+ 邽郋赲訄
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ 苠郋郕訄 郋迮訄
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ 邽郋迮迡邽郇迮郇邽迮
+ </floater.string>
<floater.string name="status_rotate">
迮迮迣邽赲訄邿迮 赲迮郇迮 郈郋郅郋 迡郅 赲訄迮郇邽 郋訇迮郕訄
</floater.string>
@@ -63,7 +78,12 @@
</text>
<check_box initial_value="邽邽郇訄" label="訄迣邽赲訄 迮郕" name="checkbox stretch textures"/>
<check_box initial_value="邽邽郇訄" label="邽赲郱郕訄" name="checkbox snap to grid"/>
- <button label="訄訄邾迮..." name="Options..." tool_tip="郋郈郋郅郇邽迮郅郇迮 郈訄訄邾迮 迮郕邽"/>
+ <combo_box name="combobox grid mode" tool_tip="訇迮邽迮 邽郈 郅邽郇迮邿郕邽 迮郕邽 迡郅 訄郱邾迮迮郇邽 郋訇迮郕訄">
+ <combo_box.item label="邽郋赲訄" name="World"/>
+ <combo_box.item label="郋郕訄郅郇訄" name="Local"/>
+ <combo_box.item label="苠郋郕訄 郋迮訄" name="Reference"/>
+ </combo_box>
+ <button label="" name="Options..." tool_tip="郋郈郋郅郇邽迮郅郇迮 郈訄訄邾迮 迮郕邽"/>
<button name="ToolCube" tool_tip="訇"/>
<button name="ToolPrism" tool_tip="邽郱邾訄"/>
<button name="ToolPyramid" tool_tip="邽訄邾邽迡訄"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_voice_effect.xml b/indra/newview/skins/default/xui/ru/floater_voice_effect.xml
index d4bf615fe4..1eb8a94d7a 100644
--- a/indra/newview/skins/default/xui/ru/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/ru/floater_voice_effect.xml
@@ -42,13 +42,16 @@
<string name="effect_Demon">
Demon
</string>
+ <string name="effect_Female Elf">
+ 苳迮
+ </string>
<string name="effect_Flirty">
Flirty
</string>
<string name="effect_Foxy">
Foxy
</string>
- <string name="effect_Halloween_2010_Bonus">
+ <string name="effect_Halloween 2010 Bonus">
郋郇_郱訄_苭郅郅郋邽郇_2010
</string>
<string name="effect_Helium">
@@ -57,9 +60,18 @@
<string name="effect_Husky">
Husky
</string>
+ <string name="effect_Husky Whisper">
+ 苭邽郈郅邿 迮郈郋
+ </string>
<string name="effect_Intercom">
郇迮郇郇 赲郱
</string>
+ <string name="effect_Julia">
+ Julia
+ </string>
+ <string name="effect_Lo Lilt">
+ 訄郈迮赲
+ </string>
<string name="effect_Macho">
Macho
</string>
@@ -69,6 +81,9 @@
<string name="effect_Mini">
Mini
</string>
+ <string name="effect_Model">
+ 郋迡迮郅
+ </string>
<string name="effect_Nano">
Nano
</string>
@@ -90,6 +105,9 @@
<string name="effect_Roxanne">
Roxanne
</string>
+ <string name="effect_Rumble">
+ 苺訄郇邽迮
+ </string>
<string name="effect_Sabrina">
Sabrina
</string>
@@ -102,6 +120,9 @@
<string name="effect_Shorty">
Shorty
</string>
+ <string name="effect_Smaller">
+ 迮郇迮
+ </string>
<string name="effect_Sneaky">
Sneaky
</string>
diff --git a/indra/newview/skins/default/xui/ru/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ru/menu_inspect_object_gear.xml
index a72b2bef23..30953e830b 100644
--- a/indra/newview/skins/default/xui/ru/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/ru/menu_inspect_object_gear.xml
@@ -12,6 +12,7 @@
<menu_item_call label="郋訇訄赲邽" name="add"/>
<menu_item_call label="郋迠訄郅郋赲訄" name="report"/>
<menu_item_call label="訄訇郅郋郕邽郋赲訄" name="block"/>
+ <menu_item_call label="訄郱訇郅郋郕邽郋赲訄" name="unblock"/>
<menu_item_call label="邽訇郅邽郱邽" name="zoom_in"/>
<menu_item_call label="苺迡訄郅邽" name="remove"/>
<menu_item_call label="郋郈郋郅郇邽迮郅郇訄 邽郇郋邾訄邽" name="more_info"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_inventory.xml b/indra/newview/skins/default/xui/ru/menu_inventory.xml
index 4eeb1e46c2..49f7281b4e 100644
--- a/indra/newview/skins/default/xui/ru/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ru/menu_inventory.xml
@@ -59,6 +59,7 @@
<menu_item_call label="苤赲郋邿赲訄" name="Properties"/>
<menu_item_call label="迮迮邽邾迮郇郋赲訄" name="Rename"/>
<menu_item_call label="郋郈邽郋赲訄 UUID 訄郕邽赲訄" name="Copy Asset UUID"/>
+ <menu_item_call label="迮郱訄" name="Cut"/>
<menu_item_call label="郋郈邽郋赲訄" name="Copy"/>
<menu_item_call label="訄赲邽" name="Paste"/>
<menu_item_call label="訄赲邽 郕訄郕 郅郕" name="Paste As Link"/>
@@ -84,6 +85,6 @@
<menu_item_call label="郋訇訄赲邽" name="Wearable Add"/>
<menu_item_call label="苤郇" name="Take Off"/>
<menu_item_call label="郋郈邽郋赲訄 赲 竄苠郋迣郋赲迮 邽郋迡邽迮罈" name="Merchant Copy"/>
- <menu_item_call label="迮迮邾迮邽 赲 竄苠郋迣郋赲迮 邽郋迡邽迮罈" name="Merchant Move"/>
+ <menu_item_call label="郈訄赲邽 赲 郋迣郋赲邿 迮郇" name="Marketplace Send"/>
<menu_item_call label="- 郇迮 迡迮邿赲邽邿 -" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_login.xml b/indra/newview/skins/default/xui/ru/menu_login.xml
index aa3570f176..93a5ffbb25 100644
--- a/indra/newview/skins/default/xui/ru/menu_login.xml
+++ b/indra/newview/skins/default/xui/ru/menu_login.xml
@@ -17,8 +17,8 @@
<menu_item_call label="訄迡訄 訄郱邾迮 郋郕郇訄..." name="Set Window Size..."/>
<menu_item_call label="郋郕訄郱訄 郅邽迮郇郱邽郋郇郇郋迮 郋迣郅訄迮郇邽迮" name="TOS"/>
<menu_item_call label="郋郕訄郱訄 郋郋訇迮郇邽迮 郋訇 郋邽訇郕迮" name="Critical"/>
- <menu_item_call label="郋赲迮郕訄 邾迮迡邽訄訇訄郱迮訄" name="Web Browser Test"/>
<menu_item_call label="苠迮 郋郅訄迡郕邽 郈郅訄赲訄迮迣郋 郋郕郇訄 赲迮訇-郕郋郇迮郇郋邾" name="Web Content Floater Debug Test"/>
+ <menu label="苺郋赲迮郇 迠郇訄郅訄" name="Set Logging Level"/>
<menu_item_check label="訇郋 迮郕邽" name="Show Grid Picker"/>
<menu_item_call label="郋郇郋郅 赲迮迡郋邾郅迮郇邽邿" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 93d0166568..0699314d97 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -14,14 +14,14 @@
<menu_item_check label="郋郅迮" name="Fly"/>
<menu_item_check label="迮迣迡訄 訇迮迣訄" name="Always Run"/>
<menu_item_call label="訄郇郋赲邽 訄郇邽邾訄邽" name="Stop Animating My Avatar"/>
+ <menu_item_call label="苭郋迡訇訄 / 訇迮迣 / 郈郋郅迮..." name="Walk / run / fly"/>
</menu>
<menu label="苤訄" name="Status">
<menu_item_call label="迮 郇訄 邾迮迮" name="Set Away"/>
<menu_item_call label="迮 訇迮郈郋郕郋邽" name="Set Busy"/>
</menu>
- <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="郈邽 L$..." name="Buy and Sell L$"/>
+ <menu_item_call label="苠郋迣郋赲迮 邽郋迡邽迮..." name="MerchantOutbox"/>
<menu_item_call label="郇郋邾訄邽郋郇郇訄 郈訄郇迮郅 訄郕郕訄郇訄..." name="Manage My Account"/>
<menu_item_call label="訄郋邿郕邽..." name="Preferences"/>
<menu_item_call label="郇郋郈郕邽 郈訄郇迮郅邽 邽郇邾迮郇郋赲..." name="Toolbars"/>
@@ -61,7 +61,7 @@
<menu_item_check label="苤赲郋邿赲訄 訄郕訄" name="Parcel Properties"/>
<menu_item_check label="迮郇 竄郋郈郋郅郇邽迮郅郇郋罈" name="Show Advanced Menu"/>
</menu>
- <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"/>
@@ -176,22 +176,22 @@
<menu_item_check label="郋郕訄郱赲訄 郈邽迮郅 郈邽 郋訇郱郋迮 邾" name="ShowCrosshairs"/>
</menu>
<menu label="苠邽郈 赲邽郱訄郅邽郱訄邽邽" 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="Surface Patch"/>
- <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="苳郇郕邽邽 赲邽郱訄郅邽郱訄邽邽" name="Rendering Features">
- <menu_item_check label="郇迮迮邿 郈郋郅郱郋赲訄迮郅" name="UI"/>
+ <menu_item_check label="郇迮迮邿 郈郋郅郱郋赲訄迮郅" name="ToggleUI"/>
<menu_item_check label="訇訄郇郋" name="Selected"/>
<menu_item_check label="迡迮郅迮郇郋" name="Highlighted"/>
<menu_item_check label="邽郇訄邾邽迮郕邽迮 迮郕" name="Dynamic Textures"/>
@@ -205,8 +205,6 @@
<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_check label="郋郕訄郱訄 邾迮郇 竄郋郈郋郅郇邽迮郅郇郋罈 - 訄郋迮 郋迮訄郇邽迮 郕郅訄赲邽" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="訄郕 郋郕郇郋" name="Close Window"/>
<menu_item_call label="訄郕 赲迮 郋郕郇訄" name="Close All Windows"/>
@@ -215,13 +213,6 @@
<menu_item_check label="訇郱郋 迡迠郋邿邽郕郋邾" 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="邽訇郅邽郱邽" name="Zoom In"/>
<menu_item_call label="苤訄郇迡訄郇邿 邾訄訄訇" name="Zoom Default"/>
<menu_item_call label="郋迡赲邽郇" name="Zoom Out"/>
@@ -294,6 +285,7 @@
<menu_item_check label="邽" name="Raycast"/>
<menu_item_check label="訄郈訄赲郅迮郇邽 赲迮訄" name="Wind Vectors"/>
<menu_item_check label="苤郅郋迠郇郋 赲邽郱訄郅邽郱訄邽邽" name="rendercomplexity"/>
+ <menu_item_check label="訄邿 郈邽郋迮迡邽郇迮郇邽" name="attachment bytes"/>
<menu_item_check label="迮郈郕訄" name="Sculpt"/>
</menu>
<menu label="邽郱訄郅邽郱訄邽" name="Rendering">
@@ -335,9 +327,8 @@
<menu_item_call label="訄訄 郱訄郈邽" name="Start Record"/>
<menu_item_call label="訄郇郋赲邽 郱訄郈邽" name="Stop Record"/>
</menu>
- <menu label="邽" name="World">
+ <menu label="邽" name="DevelopWorld">
<menu_item_check label="迮迮郕邽迮 郋郅郇訄 赲 邽邾郅郋迮" name="Sim Sun Override"/>
- <menu_item_check label="邽迣訄邽邿 邾訄郕" name="Cheesy Beacon"/>
<menu_item_check label="迮邽郱邾迮郇郇訄 郈郋迣郋迡訄" name="Fixed Weather"/>
<menu_item_call label="赲郋迡 郕訄 迮迣邽郋郇訄郅郇 郋訇迮郕郋赲" name="Dump Region Object Cache"/>
</menu>
@@ -369,11 +360,11 @@
</menu>
<menu label="赲訄訄" name="Character">
<menu label="訄赲訄 郱訄郈迮迮郇郇 迮郕" name="Grab Baked Texture">
- <menu_item_call label="訄迡迠郕訄" name="Iris"/>
- <menu_item_call label="郋郅郋赲訄" name="Head"/>
- <menu_item_call label="迮郇 訄 迮郅訄" name="Upper Body"/>
- <menu_item_call label="邽迠郇 訄 迮郅訄" name="Lower Body"/>
- <menu_item_call label="衩訇郕訄" name="Skirt"/>
+ <menu_item_call label="訄迡迠郕訄" name="Grab Iris"/>
+ <menu_item_call label="郋郅郋赲訄" name="Grab Head"/>
+ <menu_item_call label="迮郇 訄 迮郅訄" name="Grab Upper Body"/>
+ <menu_item_call label="邽迠郇 訄 迮郅訄" name="Grab Lower Body"/>
+ <menu_item_call label="衩訇郕訄" name="Grab Skirt"/>
</menu>
<menu label="郋赲迮郕訄 郈迮郋郇訄迠訄" name="Character Tests">
<menu_item_call label="郇迮郇邽邿 赲邽迡 赲 XML" name="Appearance To XML"/>
@@ -401,16 +392,24 @@
<menu_item_check label="苠迮郕 HTTP" name="HTTP Textures"/>
<menu_item_check label="郇赲迮郇訄 HTTP" name="HTTP Inventory"/>
<menu_item_call label="苤迠訄邽迮 邽郱郋訇訄迠迮郇邽邿" name="Compress Images"/>
+ <menu_item_call label="郕郅邽 Visual Leak Detector" name="Enable Visual Leak Detector"/>
<menu_item_check label="赲郋迡 邾邽郇邽迡訄邾郈訄 郈邽 郋郅訄迡郕迮" name="Output Debug Minidump"/>
<menu_item_check label="郕郇郋 郕郋郇郋郅邽 郈邽 郅迮迡迮邾 郱訄郈郕迮" name="Console Window"/>
+ <menu label="苺郋赲迮郇 迠郇訄郅訄" name="Set Logging Level">
+ <menu_item_check label="郅訄迡郕訄" name="Debug"/>
+ <menu_item_check label="郇郋邾訄邽" name="Info"/>
+ <menu_item_check label="迮迡郈迮迠迡迮郇邽迮" name="Warning"/>
+ <menu_item_check label="邽訇郕訄" name="Error"/>
+ <menu_item_check label="迮" name="None"/>
+ </menu>
<menu_item_call label="訄郈郋 訄訄 訄迡邾邽郇邽訄郋訄" name="Request Admin Options"/>
<menu_item_call label="郋迡 邽郱 訄訄 訄迡邾邽郇邽訄郋訄" name="Leave Admin Options"/>
<menu_item_check label="郋郕訄郱訄 邾迮郇 訄迡邾邽郇邽訄郋訄" name="View Admin Options"/>
</menu>
<menu label="迡邾邽郇邽訄郋" name="Admin">
- <menu label="Object">
- <menu_item_call label="郱 郕郋郈邽" name="Take Copy"/>
- <menu_item_call label="訄郱郇訄邽 迮訇 赲郅訄迡迮郅迮邾" name="Force Owner To Me"/>
+ <menu label="訇迮郕" name="AdminObject">
+ <menu_item_call label="苤迡迮郅訄 郕郋郈邽" name="Admin Take Copy"/>
+ <menu_item_call label="訄郱郇訄邽 邾迮郇 赲郅訄迡迮郅迮邾" name="Force Owner To Me"/>
<menu_item_call label="訄郱郇訄邽 郈郋郅郇郋郈訄赲郇邾 赲郅訄迡迮郅迮邾" name="Force Owner Permissive"/>
<menu_item_call label="苺迡訄郅邽" name="Delete"/>
<menu_item_call label="訄 邾迮迮" name="Lock"/>
@@ -445,7 +444,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="邽邽訄郅郇邿 訇郅郋迣 Linden" name="Official Linden Blog"/>
<menu_item_call label="郋訄郅 郕邽郈郋赲" name="Scripting Portal"/>
<menu label="苤郋郋訇迮郇邽迮 郋訇 郋邽訇郕迮" name="Bug Reporting">
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index 04f2f6b486..b4692385d1 100644
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -86,17 +86,38 @@
<usetemplate canceltext="邾迮郇訄" name="yesnocancelbuttons" notext="迮 郋訄郇" yestext="苤郋訄郇邽"/>
</notification>
<notification name="ConfirmNoCopyToOutbox">
- 苺 赲訄 郇迮 郈訄赲 迡郅 郕郋郈邽郋赲訄郇邽 郋迣郋 郅迮邾迮郇訄 赲 邽郋迡 郈訄郈郕 邾訄迣訄郱邽郇訄. 迡迮邿赲邽迮郅郇郋 郋邽迮 郈迮迮邾迮邽 郅迮迡邽邿 郅迮邾迮郇?
- [ITEM_NAME]
- <usetemplate name="okcancelbuttons" notext="迮" yestext="訄"/>
+ 苺 赲訄 郇迮 郈訄赲 郇訄 郕郋郈邽郋赲訄郇邽迮 邽 郈迮迡邾迮郋赲 赲 郈訄郈郕 竄苠郋迣郋赲迮 邽郋迡邽迮罈. 迮迮邾迮邽迮 邽 邽郅邽 郋訄赲迮 郱迡迮.
+ <usetemplate name="okcancelbuttons" notext="迮 郈迮迮邾迮訄 郈迮迡邾迮()" yestext="迮迮邾迮邽 郈迮迡邾迮()"/>
+ </notification>
+ <notification name="OutboxFolderCreated">
+ 郅 郕訄迠迡郋迣郋 郈迮迡邾迮訄, 郈迮迮郇迮迮郇郇郋迣郋 郇訄 赲迮郇邽邿 郋赲迮郇 郈訄郈郕邽 竄苠郋迣郋赲迮 邽郋迡邽迮罈, 郋郱迡訄郇訄 郇郋赲訄 郈訄郈郕訄.
+ <usetemplate ignoretext=" 郈訄郈郕迮 竄苠郋迣郋赲迮 邽郋迡邽迮罈 郋郱迡訄郇訄 郇郋赲訄 郈訄郈郕訄" name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportComplete">
+ 苺郈迮郇郋
+
+迮 郈訄郈郕邽 郈迮郇郋 郋郈訄赲郅迮郇 赲 郋迣郋赲邿 迮郇.
+ <usetemplate ignoretext="迮 郈訄郈郕邽 郋郈訄赲郅迮郇 赲 郋迣郋赲邿 迮郇" name="okignore" yestext="OK"/>
+ </notification>
+ <notification name="OutboxImportHadErrors">
+ 迮郕郋郋迮 郈訄郈郕邽 郇迮 郈迮迮郇迮迮郇
+
+邽訇郕邽 郈邽 郋郈訄赲郕迮 郇迮郕郋郋 郈訄郈郋郕 赲 郋迣郋赲邿 迮郇. 衪邽 郈訄郈郕邽 郋訄郅邽 赲 赲訄迮邿 郈訄郈郕迮 竄苠郋迣郋赲迮 邽郋迡邽迮罈.
+
+郋迡郋訇郇迮迮 邾. 赲 [[MARKETPLACE_IMPORTS_URL] 迠郇訄郅迮 郋邽訇郋郕].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="OutboxUploadComplete">
- 迮迮迡訄訄 邾訄迣訄郱邽郇訄 郱訄赲迮迮郇訄.
- <usetemplate name="okbutton" yestext="苺訄!"/>
+ <notification name="OutboxImportFailed">
+ 邽訇郕訄 郈邽 郈迮迮迡訄迮
+
+訄郈郕邽 郇迮 郋郈訄赲郅迮郇 赲 郋迣郋赲邿 迮郇 邽郱-郱訄 郋邽訇郕邽 邽迮邾 邽郅邽 迮邽. 郋赲郋邽迮 郈郋郈郕 郈郋郱迠迮.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="OutboxUploadHadErrors">
- 迮迮迡訄訄 邾訄迣訄郱邽郇訄 赲郈郋郅郇迮郇訄 郋邽訇郕訄邾邽! 苺訄郇邽迮 郈郋訇郅迮邾 赲 邽郋迡迮邿 郈訄郈郕迮 邽 郈郋赲郋邽迮 郈迮迮迡訄. 苤郈訄邽訇郋!
- <usetemplate name="okbutton" yestext="--!"/>
+ <notification name="OutboxInitFailed">
+ 邽訇郕訄 邽郇邽邽訄郅邽郱訄邽邽 郋迣郋赲郋迣郋 迮郇訄
+
+迮 迡訄郅郋 邽郇邽邽訄郅邽郱邽郋赲訄 郋迣郋赲邿 迮郇 邽郱-郱訄 郋邽訇郕邽 邽迮邾 邽郅邽 迮邽. 郋赲郋邽迮 郈郋郈郕 郈郋郱迠迮.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CompileQueueSaveText">
邽訇郕訄 郈邽 郈迮迮迡訄迮 迮郕訄 郕邽郈訄 郈郋 郅迮迡迮邿 郈邽邽郇迮: [REASON]. 郋赲郋邽迮 郈郋郈郕 郈郋郱迠迮.
@@ -649,7 +670,7 @@
迮赲郋郱邾郋迠郇郋 郋郱迡訄 赲郋迡郇郋邿 訄邿郅: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- [APP_NAME] 郈郋郕訄 郇迮 郈郋迡迡迮迠邽赲訄迮 邾訄郋赲 郈迮迮迡訄 訄邿郅郋赲 訄郇邽邾訄邽邽.
+ [APP_NAME] 郈郋郕訄 郇迮 郈郋迡迡迮迠邽赲訄迮 邾訄郋赲 郈迮迮迡訄 訄邿郅郋赲 訄郇邽邾訄邽邽 郋邾訄訄 BVH.
</notification>
<notification name="CannotUploadReason">
迮赲郋郱邾郋迠郇郋 郈迮迮迡訄 [FILE] 郈郋 郅迮迡迮邿 郈邽邽郇迮: [REASON]
@@ -1436,7 +1457,7 @@ http://secondlife.com/download.
<usetemplate ignoretext="郋迡赲迮迠迡訄 郈迮迮迡 赲郋郱赲訄郋邾 郋訇迮郕郋赲 赲郅訄迡迮郅訄邾" name="okcancelignore" notext="邾迮郇訄" yestext="OK"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- 赲郅迮迮 訄郇邽郕郋邾 迣郈郈 &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
+ 迮邿訄 赲郋迡邽迮 赲 迣郈郈 &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
苭郋邽迮 郈郋郕邽郇 迣郈郈?
<usetemplate name="okcancelbuttons" notext="邾迮郇訄" yestext="OK"/>
</notification>
@@ -2609,16 +2630,16 @@ http://secondlife.com/download.
[NAME] 竄&lt;nolink&gt;[TITLE]&lt;/nolink&gt;罈
[MESSAGE]
<form name="form">
- <button name="Mute" text="郅郋郕邽郋赲訄"/>
- <button name="Ignore" text="迣郇郋邽郋赲訄"/>
+ <button name="Client_Side_Mute" text="訄訇郅郋郕邽郋赲訄"/>
+ <button name="Client_Side_Ignore" text="迣郇郋邽郋赲訄"/>
</form>
</notification>
<notification name="ScriptDialogGroup">
[GROUPNAME] 竄&lt;nolink&gt;[TITLE]&lt;/nolink&gt;罈
[MESSAGE]
<form name="form">
- <button name="Mute" text="郅郋郕邽郋赲訄"/>
- <button name="Ignore" text="迣郇郋邽郋赲訄"/>
+ <button name="Client_Side_Mute" text="訄訇郅郋郕邽郋赲訄"/>
+ <button name="Client_Side_Ignore" text="迣郇郋邽郋赲訄"/>
</form>
</notification>
<notification name="BuyLindenDollarSuccess">
@@ -2816,6 +2837,18 @@ http://secondlife.com/download.
[RESIDENTS]
<usetemplate name="okcancelbuttons" notext="邾迮郇訄" yestext="OK"/>
</notification>
+ <notification name="ShareFolderConfirmation">
+ 訄郱迡訄 邾郋迠郇郋 郋郅郕郋 郋迡郇 郈訄郈郕 郱訄 訄郱.
+
+ 迡迮邿赲邽迮郅郇郋 郋邽迮 郈郋迡迮郅邽 郈迮迡邾迮訄邾邽:
+
+&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
+
+苤郋 郅迮迡邽邾邽 迠邽迮郅邾邽:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="邾迮郇訄" yestext=""/>
+ </notification>
<notification name="ItemsShared">
迮迡邾迮 郈迮郇郋 郋郱迡訄郇.
</notification>
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 8e3aac38d2..a8fdfde1c4 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,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="迮迮赲郋迡邽 訄" name="translate_chat_checkbox"/>
+ <layout_stack name="stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="迮迮赲郋迡邽 訄" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_region_estate.xml b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
index 27ec10b323..93b21704bc 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
@@ -20,10 +20,10 @@
<slider label="苳訄郱訄" name="sun_hour_slider"/>
<check_box label="訄郱迮邽 郋訇邽邿 迡郋郈" name="externally_visible_check"/>
<text name="Only Allow">
- 訄郱迮邽 迡郋郈 郋郅郕郋 訄郕郕訄郇訄邾 郈郋迡赲迮迠迡迮郇邽迮邾:
+ 訄郱迮邽 迡郋郈 郋郅郕郋 訄郕邽邾 迠邽迮郅邾:
</text>
- <check_box label="郇郋邾訄邽邽 郋訇 郋郈郅訄迮 赲 訄邿郅迮" name="limit_payment" tool_tip="訄郇邽 郇迮訄郈郋郱郇訄郇郇 迠邽迮郅迮邿"/>
- <check_box label="郋赲迮郕訄 赲郋郱訄訄" name="limit_age_verified" tool_tip="訄郇邽 迠邽迮郅迮邿, 郇迮 郈郋迮迡邽 郈郋赲迮郕 赲郋郱訄訄. 郋郅迮迮 郈郋迡郋訇郇訄 邽郇郋邾訄邽 郇訄郋迡邽 郱迡迮: [SUPPORT_SITE]."/>
+ <check_box label="訄迮迣邽邽郋赲訄郇訄 邽郇郋邾訄邽 郋訇 郋郈郅訄迮" name="limit_payment" tool_tip="郅 迡郋郈訄 郕 郋邾 郱迮邾郅迮赲郅訄迡迮郇邽 迠邽迮郅 迡郋郅迠郇訄 訇 郱訄迮迣邽邽郋赲訄郇訄 邽郇郋邾訄邽 郋訇 郋郈郅訄迮. 郋郅迮迮 郈郋迡郋訇郇訄 邽郇郋邾訄邽 郇訄郋迡邽 郱迡迮: [SUPPORT_SITE]."/>
+ <check_box label="郋迡赲迮迠迡迮郇 赲郋郱訄" name="limit_age_verified" tool_tip="郅 迡郋郈訄 郕 郋邾 郱迮邾郅迮赲郅訄迡迮郇邽 迠邽迮郅 迡郋郅迠迮郇 郈郋迡赲迮迡邽 赲郋邿 赲郋郱訄. 郋郅迮迮 郈郋迡郋訇郇訄 邽郇郋邾訄邽 郇訄郋迡邽 郱迡迮: [SUPPORT_SITE]."/>
<check_box label="訄郱迮邽 迣郋郅郋郋赲郋迮 郋訇迮郇邽迮" name="voice_chat_check"/>
<check_box label="訄郱迮邽 郈邾郋邿 迮郅迮郈郋" name="allow_direct_teleport"/>
<button label="邽邾迮郇邽" name="apply_btn"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_script_ed.xml b/indra/newview/skins/default/xui/ru/panel_script_ed.xml
index 1a9c512147..05ccaeb54b 100644
--- a/indra/newview/skins/default/xui/ru/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/ru/panel_script_ed.xml
@@ -22,6 +22,8 @@
<menu label="苳訄邿郅" name="File">
<menu_item_call label="苤郋訄郇邽" name="Save"/>
<menu_item_call label="邾迮郇邽 赲迮 邽郱邾迮郇迮郇邽" name="Revert All Changes"/>
+ <menu_item_call label="訄迣郱邽 邽郱 訄邿郅訄..." name="LoadFromFile"/>
+ <menu_item_call label="苤郋訄郇邽 赲 訄邿郅..." name="SaveToFile"/>
</menu>
<menu label="郱邾迮郇邽" name="Edit">
<menu_item_call label="邾迮郇邽" name="Undo"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_status_bar.xml b/indra/newview/skins/default/xui/ru/panel_status_bar.xml
index babe5811ac..9c84ff1fd8 100644
--- a/indra/newview/skins/default/xui/ru/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/ru/panel_status_bar.xml
@@ -15,7 +15,7 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <panel name="balance_bg">
+ <panel left="-450" name="balance_bg" width="240">
<text name="balance" tool_tip="虳迮郅郕郇邽迮 迡郅 郋訇郇郋赲郅迮郇邽 赲訄迮迣郋 訇訄郅訄郇訄 L$" value="L$20"/>
<button label="郈邽 L$" name="buyL" tool_tip="虳迮郅郕郇邽迮 迡郅 郈郋郕郈郕邽 L$"/>
<button label="苠郋迣郋赲邿 迮郇" name="goShop" tool_tip="郕 郋迣郋赲邿 迮郇 Second Life" width="121"/>
diff --git a/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml
index a4150f6e2f..c106c2de79 100644
--- a/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml
@@ -2,47 +2,24 @@
<panel label="迮邽" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<layout_stack name="inventory_layout_stack">
- <layout_panel name="inbox_outbox_layout_panel">
- <layout_stack name="inbox_outbox_layout_stack">
- <layout_panel name="inbox_layout_panel">
- <panel label="" name="marketplace_inbox">
- <string name="InboxLabelWithArg">
- 郋郅迮郇郇迮 赲迮邽 ([NUM])
- </string>
- <string name="InboxLabelNoArg">
- 郋郅迮郇郇迮 赲迮邽
- </string>
- <button label="郋郅迮郇郇迮 赲迮邽" name="inbox_btn"/>
- <text name="inbox_fresh_new_count">
- 郋赲: [NUM]
- </text>
- <panel tool_tip="Drag and drop items to your inventory to manage and use them">
- <text name="inbox_inventory_placeholder">
- 郋郕郈郕邽 邽郱 郋迣郋赲郋迣郋 迮郇訄 訇迡 迡郋訄赲郅迮郇 迡訄.
- </text>
- </panel>
- </panel>
- </layout_panel>
- <layout_panel name="outbox_layout_panel">
- <panel label="" name="marketplace_outbox">
- <string name="OutboxLabelWithArg">
- 苠郋迣郋赲迮 邽郋迡邽迮 ([NUM])
- </string>
- <string name="OutboxLabelNoArg">
- 苠郋迣郋赲迮 邽郋迡邽迮
- </string>
- <button label="苠郋迣郋赲迮 邽郋迡邽迮" name="outbox_btn"/>
- <button label="" name="outbox_sync_btn" tool_tip="訄赲邽 郇訄 赲邽邽郇 邾郋迮迣郋 邾訄迣訄郱邽郇訄"/>
- <panel>
- <panel name="outbox_inventory_placeholder_panel">
- <text name="outbox_inventory_placeholder_title">
- 訄迣郱郕訄...
- </text>
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ 郋郅迮郇郇迮 赲迮邽 ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ 郋郅迮郇郇迮 赲迮邽
+ </string>
+ <button label="郋郅迮郇郇迮 赲迮邽" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ 郋赲: [NUM]
+ </text>
+ <panel name="inbox_inventory_placeholder_panel" tool_tip="迮迮訄邽迮 赲迮邽 赲 赲訄 邽郇赲迮郇訄 迡郅 邽 邽郈郋郅郱郋赲訄郇邽">
+ <text name="inbox_inventory_placeholder">
+ 郋郕郈郕邽 邽郱 郋迣郋赲郋迣郋 迮郇訄 訇迡 迡郋訄赲郅迮郇 迡訄.
+ </text>
+ </panel>
+ </panel>
</layout_panel>
</layout_stack>
<panel name="button_panel">
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index 6d954139ff..8dbc4f092d 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -180,8 +180,8 @@ http://secondlife.com/viewer-access-faq
訇郇郋赲郅迮郇邽迮 郋郋郇邽 邾. 郇訄 赲迮訇-訄郇邽迮 www.secondlife.com/status.
</string>
<string name="LoginFailedPremiumOnly">
- 郋迡 赲 Second Life 赲迮邾迮郇郇郋 郋迣訄郇邽迮郇, 郋訇 郋訇迮郈迮邽 郇訄邽郅迮迮 赲迮邾郈郋赲郋迠迡迮郇邽迮 赲 邽迣郋赲郋邾 邾邽迮.
-
+ 郋迡 赲 Second Life 赲迮邾迮郇郇郋 郋迣訄郇邽迮郇, 郋訇 郋訄郇邽 郇訄邽赲迮迮 郕訄迮赲郋 邽迣郋赲郋迣郋 邾邽訄 迡郅 迮郕邽 郈郋郅郱郋赲訄迮郅迮邿.
+
郋 赲迮邾 郈郋郅郱郋赲訄迮郅迮邿 訇迮郈郅訄郇邾邽 訄郕郕訄郇訄邾邽 郇迮 訇迡迮 迡郋郈訄 郕 Second Life, 郋訇 迮, 郕郋 郱訄郈郅訄邽郅, 訇郅郋 訇郋郅迮 邾迮訄.
</string>
<string name="LoginFailedComputerProhibited">
@@ -339,17 +339,35 @@ support@secondlife.com.
苤迡訄 邾郋迠郇郋 郈迮迮訄邽 郋郅郕郋 郋迡郇 赲迮
</string>
<string name="TooltipPrice" value="L$[AMOUNT]:"/>
+ <string name="TooltipOutboxDragToWorld">
+ 迮郅郱 赲郅郋迠邽 郈迮迡邾迮 邽郱 郈訄郈郕迮 竄苠郋迣郋赲迮 邽郋迡邽迮罈
+ </string>
<string name="TooltipOutboxNoTransfer">
- 虴訄 邽 郋訇迮郕郋赲 郇迮郅郱 郈郋迡訄, 邽郅邽 郋郇邽 郈迮迮迡訄郇 迡迣郋邾 郈郋郅郱郋赲訄迮郅.
+ 虴訄 邽 郋訇迮郕郋赲 郇迮郅郱 郈郋迡訄 邽郅邽 郈迮迮迡訄.
+ </string>
+ <string name="TooltipOutboxNotInInventory">
+ 訄訄 郈訄郈郕訄 竄苠郋迣郋赲迮 邽郋迡邽迮罈 邾郋迠迮 郈郋郅訄 赲迮邽 郋郅郕郋 郇迮郈郋迮迡赲迮郇郇郋 邽郱 赲訄迮迣郋 邽郇赲迮郇訄
</string>
<string name="TooltipOutboxWorn">
- 虴訄 邽 郋訇迮郕郋赲 郇訄 赲訄. 苤郇邽邾邽迮 邽 郋 赲郋迮迣郋 訄赲訄訄訄 邽 郈郋郈郋訇邿迮 郈迮迮邾迮邽 邽 迮迮 訄郱.
+ 郋邽邾迮 郈迮迡邾迮 郇迮郅郱 郈郋邾迮邽 赲 郈訄郈郕 竄苠郋迣郋赲迮 邽郋迡邽迮罈
+ </string>
+ <string name="TooltipOutboxCallingCard">
+ 邽郱邽郕邽 郇迮郅郱 郈郋邾迮邽 赲 郈訄郈郕 竄苠郋迣郋赲迮 邽郋迡邽迮罈
</string>
<string name="TooltipOutboxFolderLevels">
- 郋邿 郈訄郈郕迮 郅邽郕郋邾 邾郇郋迣郋 郋赲郇迮邿 赲郅郋迠迮郇郇 郈訄郈郋郕. 郱邾迮郇邽迮 郕 赲郅郋迠迮郇郇 郈訄郈郋郕, 郋迣訄郇邽邽赲 迮迮 迣郅訇邽郇 4 郋赲郇邾邽 (郕郋郇迮赲訄 郈訄郈郕訄, 赲郅郋迠迮郇郇迮 郈訄郈郕邽 郋赲郇 , 赲郅郋迠迮郇郇迮 赲 郇邽 郈訄郈郕邽 郋赲郇 , 赲郅郋迠迮郇郇迮 赲 郇邽 郈訄郈郕邽 郋赲郇 ).
+ 郅訇邽郇訄 赲郅郋迠迮郇邽 郈訄郈郋郕 郈迮赲訄迮 3
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ 郈訄郈郕迮 赲迮郇迮迣郋 郋赲郇 訇郋郅迮迮 20 郈郋迡郈訄郈郋郕
</string>
<string name="TooltipOutboxTooManyObjects">
- 衪訄 郈訄郈郕訄 郋迡迮迠邽 訇郋郅迮迮 200 郋訇迮郕郋赲. 苤郅郋迠邽迮 郇迮郕郋郋迮 赲迮邽 赲 郕郋郋訇郕邽, 郋訇 邾迮郇邽 邽郅郋 郋訇迮郕郋赲.
+ 郈訄郈郕迮 赲迮郇迮迣郋 郋赲郇 訇郋郅迮迮 200 郈迮迡邾迮郋赲
+ </string>
+ <string name="TooltipDragOntoOwnChild">
+ 訄郈郕 郇迮郅郱 郈迮迮邾迮邽 赲 迮迮 郈郋迡郈訄郈郕
+ </string>
+ <string name="TooltipDragOntoSelf">
+ 訄郈郕 郇迮郅郱 郈迮迮邾迮邽 訄邾 赲 迮訇
</string>
<string name="TooltipHttpUrl">
虳迮郅郕郇邽迮, 郋訇 郈郋邾郋迮 赲迮訇-訄郇邽
@@ -814,6 +832,9 @@ support@secondlife.com.
<string name="anim_yes_head">
苤郋迣郅訄邽迮
</string>
+ <string name="multiple_textures">
+ 迮郕郋郅郕郋
+ </string>
<string name="texture_loading">
訄迣郱郕訄...
</string>
@@ -973,6 +994,9 @@ support@secondlife.com.
<string name="choose_the_directory">
訇訄 郕訄訄郅郋迣
</string>
+ <string name="script_files">
+ 苤郕邽郈
+ </string>
<string name="AvatarSetNotAway">
訄 邾迮迮
</string>
@@ -1211,43 +1235,36 @@ support@secondlife.com.
赲訄迮邾 邽郇赲迮郇訄迮 郇迮 郕郋郈邽邽 郋邿 迮郕
</string>
<string name="InventoryInboxNoItems">
- 郅邽 赲 郕郈邽迮 邽郅邽 郕訄郕-郋 邽郇訄迮 郈郋郅邽迮 郈迮迡邾迮, 郋郇 郈郋赲邽 郱迡迮. 迣郋 邾郋迠郇郋 訇迡迮 郈迮迮訄邽 赲 郈訄郈郕 赲訄迮迣郋 邽郇赲迮郇訄 邽郅邽 迡訄郅邽, 迮郅邽 郋郇 訇郋郅迮 郇迮 郇迠迮郇.
+ 迡迮 訇迡 郈郋郕訄郱訄郇 赲訄邽 郈郋郕郈郕邽 邽郱 郋迣郋赲郋迣郋 迮郇訄. 邾郋迠郇郋 訇迡迮 郈迮迮訄邽 赲 赲訄 邽郇赲迮郇訄 迡郅 邽郈郋郅郱郋赲訄郇邽.
</string>
<string name="MarketplaceURL">
- http://marketplace.[DOMAIN_NAME]
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
</string>
<string name="MarketplaceURL_CreateStore">
- http://marketplace.[DOMAIN_NAME]/create_store
+ http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4
</string>
- <string name="MarketplaceURL_LearnMore">
- http://marketplace.[DOMAIN_NAME]/learn_more
- </string>
- <string name="InventoryOutboxCreationErrorTitle">
- 訄郈郕訄 竄苠郋迣郋赲迮 邽郋迡邽迮罈 郇訄郋迮郇訄 郇迮郈訄赲邽郅郇郋
+ <string name="MarketplaceURL_Dashboard">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard
</string>
- <string name="InventoryOutboxCreationErrorTooltip">
- 邽訇郕訄 郕郋郇邽迣訄邽邽 郈訄郈郕邽 竄苠郋迣郋赲迮 邽郋迡邽迮罈
+ <string name="MarketplaceURL_Imports">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports
</string>
- <string name="InventoryOutboxCreationError">
- 虴郋訇 邽郈訄赲邽 郈郋訇郅迮邾, 郋訇訄邽迮 赲 郅迠訇 郈郋迡迡迮迠郕邽.
+ <string name="MarketplaceURL_LearnMore">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryOutboxNotMerchantTitle">
- 郋迡訄赲訄 赲迮邽 赲 郋迣郋赲郋邾 迮郇迮 邾郋迠迮 郕郋 迣郋迡郇郋
- </string>
- <string name="InventoryOutboxNotMerchantTooltip">
- 苤訄郇迮 郋迣郋赲迮邾!
+ 郋迡訄赲訄 赲迮邽 赲 郋迣郋赲郋邾 迮郇迮 邾郋迠迮 郕郋 迣郋迡郇郋.
</string>
+ <string name="InventoryOutboxNotMerchantTooltip"/>
<string name="InventoryOutboxNotMerchant">
- [[MARKETPLACE_URL] 苠郋迣郋赲邿 迮郇 Second Life] 郈迮迡郅訄迣訄迮 郇訄 郈郋迡訄迠 訇郋郅迮迮 邾邽郅郅邽郋郇訄 赲邽訄郅郇 郈郋迡郕郋赲, 邽 赲迮 郋郇邽 郋郱迡訄郇 迠邽迮郅邾邽 Second Life. 郋迠迮 邾郋迠迮迮 郈郋迡訄赲訄 郋郱迡訄郇郇迮 赲訄邾邽 赲迮邽, 訄 訄郕迠迮 郇迮郕郋郋迮 邽郱 赲迮迮邿, 郕郈郅迮郇郇 赲訄邾邽. 衪郋 郋赲迮邾 郇迮郅郋迠郇郋. 訄郋邿郕訄 赲郈郋郅郇迮 訇迮郈郅訄郇郋. [[LEARN_MORE_URL] 苺郱郇訄邿迮 郈郋迡郋訇郇郋邽] 邽郅邽 [[CREATE_STORE_URL] 郋郱迡訄邿迮 邾訄迣訄郱邽郇] 赲 郋迣郋赲郋邾 迮郇迮, 郋訇 郇訄訄 郋迣郋赲郅.
+ 郅邽 赲 郋邽迮 訄 郋迣郋赲迮邾, [[MARKETPLACE_CREATE_STORE_URL] 郋郱迡訄邿迮 邾訄迣訄郱邽郇].
</string>
<string name="InventoryOutboxNoItemsTitle">
- 郋赲邿 郈郋郋訇 郋郈訄赲郕邽 赲迮迮邿 赲 郋迣郋赲邿 迮郇
- </string>
- <string name="InventoryOutboxNoItemsTooltip">
- 迮迮訄邽迮 赲迮邽 迡訄, 郋訇 郈郋迡迣郋郋赲邽 邽 迡郅 郈郋迡訄迠邽 赲 郋迣郋赲郋邾 迮郇迮
+ 訄訄 郈訄郈郕訄 竄郋迡邽迮罈 郈訄.
</string>
+ <string name="InventoryOutboxNoItemsTooltip"/>
<string name="InventoryOutboxNoItems">
- 迮迮訄郕邽赲訄邿迮 赲 郋訇郅訄 赲迮邽 邽 郈訄郈郕邽, 郕郋郋迮 郋邽迮 郈郋迡訄. 邽 郈迮迮訄郕邽赲訄郇邽邽 郋郱迡訄迮 郕郋郈邽 赲迮邽 (郱訄 邽郕郅迮郇邽迮邾 赲迮迮邿, 郇迮迡郋郈郇 迡郅 郕郋郈邽郋赲訄郇邽), 郈郋郋邾 邽郇赲迮郇訄 郇迮 邽郱邾迮郇迮. 郋迣迡訄 赲迮 迣郋郋赲郋 迡郅 郋郈訄赲郕邽 赲迮迮邿 赲 郋迣郋赲邿 迮郇, 郇訄迠邾邽迮 郕郇郋郈郕 竄迮迮迡訄罈. 迮邽, 郈迮迮邾迮迮郇郇迮 赲 邽郇赲迮郇訄 邾訄迣訄郱邽郇訄, 邽迮郱訄 邽郱 郋邿 郈訄郈郕邽.
+ 迮迮訄邽迮 郈訄郈郕邽 赲 郋訇郅訄 邽 迮郅郕郇邽迮 竄郈訄赲邽 赲 郋迣郋赲邿 迮郇罈, 郋訇 赲訄赲邽 邽 郇訄 郈郋迡訄迠 赲 [[MARKETPLACE_DASHBOARD_URL] 苠郋迣郋赲郋邾 迮郇迮].
</string>
<string name="Marketplace Error None">
邽訇郋郕 郇迮
@@ -3901,6 +3918,9 @@ support@secondlife.com.
<string name="Saved_message">
(苤郋訄郇迮郇郋 [LONG_TIMESTAMP])
</string>
+ <string name="IM_unblock_only_groups_friends">
+ 郅 郈郋邾郋訄 郋迣郋 郋郋訇迮郇邽 郇邽邾邽迮 郅訄迠郋郕 竄苠郋郅郕郋 迡郱 邽 迣郈郈 邾郋迣 郱赲郋郇邽 邾郇迮 邽 郋郈訄赲郅 IM罈 赲 郋郕郇迮 竄訄郋邿郕邽/邽赲訄郇郋罈.
+ </string>
<string name="answered_call">
訄 赲訄 郱赲郋郇郋郕 郋赲迮邽郅邽
</string>
@@ -4098,7 +4118,7 @@ support@secondlife.com.
</string>
<string name="uploading_abuse_report">
訄迣迠訄迮...
-
+
訄郅郋訇訄
</string>
<string name="New Shape">
@@ -4365,7 +4385,8 @@ support@secondlife.com.
<string name="words_separator" value=","/>
<string name="server_is_down">
迮邾郋 郇訄 郇訄邽 邽郅邽, 郋-郋 郇迮郋迠邽迡訄郇郇郋 郈郋郅郋 郇迮 訄郕.
- 郱郇訄郕郋邾迮 郋郈邽訄郇邽迮邾 邽郱赲迮郇 郈郋訇郅迮邾 赲 訄訇郋迮 郋邿 郅迠訇 郇訄 訄邿迮 status.secondlifegrid.net.
+
+ 郱郇訄郕郋邾迮 郋郈邽訄郇邽迮邾 邽郱赲迮郇 郈郋訇郅迮邾 赲 訄訇郋迮 郋邿 郅迠訇 郇訄 訄邿迮 status.secondlifegrid.net.
郅邽 郈郋訇郅迮邾 郈郋迡郋郅迠訄, 郋 郈郋赲迮迮 郈郋迡郕郅迮郇邽迮 郕 迮邽 邽 郇訄郋邿郕邽 訇訄郇迡邾訄訄.
</string>
<string name="dateTimeWeekdaysNames">
@@ -4844,6 +4865,9 @@ support@secondlife.com.
<string name="Command_Move_Label">
苭郋迡訇訄 / 訇迮迣 / 郈郋郅迮
</string>
+ <string name="Command_Outbox_Label">
+ 苠郋迣郋赲迮 邽郋迡邽迮
+ </string>
<string name="Command_People_Label">
迡邽
</string>
@@ -4916,6 +4940,9 @@ support@secondlife.com.
<string name="Command_Move_Tooltip">
迮迮邾迮迮郇邽迮 訄赲訄訄訄
</string>
+ <string name="Command_Outbox_Tooltip">
+ 迮迮郇迮邽 郈迮迡邾迮 赲 郋迣郋赲邿 迮郇 迡郅 郈郋迡訄迠邽
+ </string>
<string name="Command_People_Tooltip">
郱, 迣郈郈 邽 郅迡邽 郈郋訇郅邽郱郋邽
</string>
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 dde658d64d..a478d347a8 100644
--- a/indra/newview/skins/default/xui/tr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/tr/floater_about_land.xml
@@ -306,9 +306,6 @@ Sadece b羹y羹k parseller aramada g繹r羹n羹r.
<panel.string name="push_restrict_region_text">
襤tme Yok (B繹lge Ge癟ersiz K覺lma)
</panel.string>
- <panel.string name="see_avs_text">
- Dier parsellerdeki avatarlar bu
- </panel.string>
<text name="allow_label">
Sakinlere unun i癟in izin ver:
</text>
@@ -371,7 +368,7 @@ 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">
- bu parseldeki avatarlar覺 g繹rebilir ve onlarla sohbet edebilir
+ Baka parsellerdeki avatarlar bu parseldeki avatarlar覺 g繹rebilir ve onlarla sohbet edebilir
</text>
<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">
@@ -446,20 +443,15 @@ Sadece b羹y羹k parseller aramada g繹r羹n羹r.
<panel.string name="access_estate_defined">
(Gayrimenkul taraf覺ndan tan覺mlan覺r)
</panel.string>
- <panel.string name="allow_public_access">
- Kamusal Eriime 襤zin Ver ([MATURITY]) (Not: 襤aret kald覺r覺l覺rsa yasaklama 癟izgileri oluur)
- </panel.string>
<panel.string name="estate_override">
Bu se癟eneklerden biri veya daha fazlas覺 gayrimenkul d羹zeyinde ayarlan覺r
</panel.string>
- <text name="Limit access to this parcel to:">
- Bu Parsele Eriim
- </text>
+ <check_box label="Kamusal Eriime 襤zin Ver (Bunun iaretinin kald覺r覺lmas覺 yasaklama 癟izgileri oluturacakt覺r)" name="public_access"/>
<text name="Only Allow">
- Eriimi ununla dorulanan Sakinlerle S覺n覺rla:
+ Sadece u Sakinlere eriim izni verin:
</text>
- <check_box label="Dosyadaki 繹deme bilgileri [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Tan覺nmayan Sakinleri Yasakla."/>
- <check_box label="Ya dorulama [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Ya覺n覺 dorulamayan Sakinleri yasakla Daha fazla bilgi i癟in [SUPPORT_SITE] adresini ziyaret edin."/>
+ <check_box label="deme bilgileri kay覺tl覺 [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Sakinlerin bu parsele eriebilmesi i癟in 繹deme bilgilerinin kay覺tl覺 olmas覺 gerekir. Daha fazla bilgi i癟in [SUPPORT_SITE] adresini ziyaret edin."/>
+ <check_box label="Ya dorulamas覺 yap覺lm覺 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Sakinlerin bu parsele eriebilmesi i癟in ya dorulamalar覺n覺n yap覺lm覺 olmas覺 gerekir. Daha fazla bilgi i癟in [SUPPORT_SITE] adresini ziyaret edin."/>
<check_box label="Grup Eriimine 襤zin Ver: [GROUP]" name="GroupCheck" tool_tip="Genel sekmesinde grup ayarla."/>
<check_box label="Ge癟i haklr. una sat:" name="PassCheck" tool_tip="Bu parsele ge癟ici eriim verir"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/tr/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/tr/floater_animation_anim_preview.xml
new file mode 100644
index 0000000000..a63e1e107e
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_animation_anim_preview.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Anim Preview" title="ANIMATION.ANIM">
+ <text name="name_label">
+ Ad:
+ </text>
+ <text name="description_label">
+ A癟覺klama:
+ </text>
+ <button label="Kar覺ya Y羹kle (L$[AMOUNT])" name="ok_btn"/>
+ <button label="襤ptal" label_selected="襤ptal" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/tr/floater_animation_bvh_preview.xml
new file mode 100644
index 0000000000..f8800c674d
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_animation_bvh_preview.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview">
+ <floater.string name="failed_to_initialize">
+ Hareket balat覺lamad覺
+ </floater.string>
+ <floater.string name="anim_too_long">
+ Animasyon dosyas覺 [LENGTH] saniye uzunluunda.
+
+Maksimum animasyon uzunluu [LENGTH] saniye.
+ </floater.string>
+ <floater.string name="failed_file_read">
+ Animasyon dosyas覺 okunamad覺.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ Tamam
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ Dosyan覺n zaman覺ndan 繹nce sonu.
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ K覺s覺tlama tan覺m覺 okunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ BVH dosyas覺 a癟覺lamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ Ge癟ersiz H襤YERAR襤 羹st bilgisi.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ KK veya EKLEM bulunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ EKLEM ad覺 al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ OFSET bulunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ KANALLAR bulunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ D繹nd羹rme s覺ras覺 al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ D繹nd羹rme ekseni al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ HAREKET bulunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ kARE SAYISI al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ Kare zaman覺 al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ Konum deerleri al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ D繹nd羹rme deerleri al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ eviri dosyas覺 a癟覺lamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ eviri 羹st bilgisi okunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ eviri adlar覺 okunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ eviri yoksay deeri okunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ eviri nisbi deeri okunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ eviri 癟覺k覺 ad覺 deeri okunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ eviri matrisi okunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Birletirme alt birim ad覺 al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Birletirme 羹st birim ad覺 al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ ncelik deerleri al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ D繹ng羹 (tekrar) deerleri al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ Easln (Yava Balang覺癟) deerleri al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ EaseOut (Yava Biti) deerleri al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ El ekillendirme deeri al覺namad覺.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ Duygu ifadesi ad覺 okunamad覺.
+ </floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ Yanl覺 k繹k eklem ad覺, &quot;kal癟a&quot; kullan覺n
+ </floater.string>
+ <text name="name_label">
+ Ad:
+ </text>
+ <text name="description_label">
+ A癟覺klama:
+ </text>
+ <spinner label="ncelik" name="priority" tool_tip="Bu animasyonun dier animasyonlar覺 ge癟ersiz k覺labilecei kontrolleri"/>
+ <check_box label="D繹ng羹" name="loop_check" tool_tip="Bu animasyonun d繹ng羹lenmesini (tekrarlanmas覺n覺) salar"/>
+ <spinner label="襤癟 (%)" name="loop_in_point" tool_tip="D繹ng羹n羹n d繹nd羹羹 animasyon noktas覺n覺 belirler"/>
+ <spinner label="D覺 (%)" name="loop_out_point" tool_tip="Animasyonda d繹ng羹n羹n bittii noktay覺 belirler"/>
+ <text name="hand_label">
+ El Duruu
+ </text>
+ <combo_box name="hand_pose_combo" tool_tip="Ellerin animasyon s覺ras覺nda neler yapt覺覺n覺 kontrol eder">
+ <combo_box.item label="Yay覺l覺m" name="Spread"/>
+ <combo_box.item label="Rahat" name="Relaxed"/>
+ <combo_box.item label="Her 襤kisi de 襤aret Ediyor" name="PointBoth"/>
+ <combo_box.item label="Yumruk" name="Fist"/>
+ <combo_box.item label="Sol Rahat" name="RelaxedLeft"/>
+ <combo_box.item label="Sol 襤aret Ediyor" name="PointLeft"/>
+ <combo_box.item label="Sol Yumruk" name="FistLeft"/>
+ <combo_box.item label="Sa Rahat" name="RelaxedRight"/>
+ <combo_box.item label="Sa 襤aret Ediyor" name="PointRight"/>
+ <combo_box.item label="Sa Yumruk" name="FistRight"/>
+ <combo_box.item label="Sa覺 Selaml覺yor" name="SaluteRight"/>
+ <combo_box.item label="Yaz覺 Yaz覺yor" name="Typing"/>
+ <combo_box.item label="Sa Bar覺" name="PeaceRight"/>
+ </combo_box>
+ <text name="emote_label">
+ 襤fade
+ </text>
+ <combo_box name="emote_combo" tool_tip="Y羹z羹n animasyon s覺ras覺ndaki ifadesini kontrol eder">
+ <item label="(Hi癟biri)" name="[None]" value=""/>
+ <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
+ <item label="Korkmu" name="Afraid" value="Korkmu"/>
+ <item label="K覺zg覺n" name="Angry" value="K覺zg覺n"/>
+ <item label="Yayg覺n G羹l羹mseyi" name="BigSmile" value="Yayg覺n G羹l羹mseyi"/>
+ <item label="Can覺 S覺k覺lm覺" name="Bored" value="Can覺 S覺k覺lm覺"/>
+ <item label="Alama" name="Cry" value="Alama"/>
+ <item label="Dudak B羹kme" name="Disdain" value="Dudak B羹kme"/>
+ <item label="Utanm覺" name="Embarrassed" value="Utanm覺"/>
+ <item label="Ka atma" name="Frown" value="Ka atma"/>
+ <item label="p羹c羹k" name="Kiss" value="p羹c羹k"/>
+ <item label="G羹lme" name="Laugh" value="G羹lme"/>
+ <item label="Kahkaha" name="Plllppt" value="Kahkaha"/>
+ <item label="Tiksinmi" name="Repulsed" value="Tiksinmi"/>
+ <item label="zg羹n" name="Sad" value="zg羹n"/>
+ <item label="Omuz Silkme" name="Shrug" value="Omuz Silkme"/>
+ <item label="G羹l羹mseme" name="Smile" value="G羹l羹mseme"/>
+ <item label="S羹rpriz" name="Surprise" value="S羹rpriz"/>
+ <item label="G繹z K覺rpma" name="Wink" value="G繹z K覺rpma"/>
+ <item label="Endielenme" name="Worry" value="Endielenme"/>
+ </combo_box>
+ <text name="preview_label">
+ u s覺rada 繹nizle
+ </text>
+ <combo_box name="preview_base_anim" tool_tip="Animasyon davran覺覺n覺z覺 avatar覺n覺z genel hareketleri yaparken test etmek i癟in bunu kullan覺n.">
+ <item label="Ayakta Duruyor" name="Standing" value="Ayakta Duruyor"/>
+ <item label="Y羹r羹yor" name="Walking" value="Y羹r羹yor"/>
+ <item label="Oturuyor" name="Sitting" value="Oturuyor"/>
+ <item label="U癟uyor" name="Flying" value="U癟uyor"/>
+ </combo_box>
+ <spinner label="Yava Balang覺癟 (saniye)" name="ease_in_time" tool_tip="Animasyonun kaynat覺覺 s羹re (saniye olarak)"/>
+ <spinner label="Yava Biti (saniye)" name="ease_out_time" tool_tip="Animasyonun ayr覺t覺覺 s羹re (saniye olarak)"/>
+ <button name="play_btn" tool_tip="Animasyonunu oynat"/>
+ <button name="pause_btn" tool_tip="Animasyonunu duraklat"/>
+ <button name="stop_btn" tool_tip="Animasyo oynatmay覺 durdur"/>
+ <text name="bad_animation_text">
+ Animasyon dosyas覺 okunamad覺.
+
+Poser 4&apos;ten aktar覺lan BHV dosyalar覺n覺 tavsiye ederiz.
+ </text>
+ <button label="Kar覺ya Y羹kle (L$[AMOUNT])" name="ok_btn"/>
+ <button label="襤ptal" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_chat_bar.xml b/indra/newview/skins/default/xui/tr/floater_chat_bar.xml
index dee17b7bc4..988c845982 100644
--- a/indra/newview/skins/default/xui/tr/floater_chat_bar.xml
+++ b/indra/newview/skins/default/xui/tr/floater_chat_bar.xml
@@ -2,6 +2,6 @@
<floater name="chat_bar" title="YAKINDAK襤 SOHBET">
<panel name="bottom_panel">
<line_editor label="Sohbet etmek i癟in buraya t覺klay覺n." name="chat_box" tool_tip="S繹ylemek i癟in Enter, ba覺rmak i癟in Ctrl+Enter yap覺n"/>
- <button name="show_nearby_chat" tool_tip="yak覺n sohbet g羹nl羹羹n羹 g繹sterir/gizler"/>
+ <button name="show_nearby_chat" tool_tip="Yak覺n sohbet g羹nl羹羹n羹 g繹sterir/gizler"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/tr/floater_merchant_outbox.xml
new file mode 100644
index 0000000000..325d1d9ed9
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_merchant_outbox.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_merchant_outbox" title="SATICI G襤DEN KUTUSU">
+ <string name="OutboxFolderCount1">
+ 1 klas繹r
+ </string>
+ <string name="OutboxFolderCountN">
+ [NUM] klas繹r
+ </string>
+ <string name="OutboxImporting">
+ Klas繹rler g繹nderiliyor...
+ </string>
+ <string name="OutboxInitializing">
+ Balat覺l覺yor...
+ </string>
+ <panel label="">
+ <panel>
+ <panel name="outbox_inventory_placeholder_panel">
+ <text name="outbox_inventory_placeholder_title">
+ Y羹kleniyor...
+ </text>
+ </panel>
+ </panel>
+ <panel>
+ <button label="Pazaryerine G繹nder" name="outbox_import_btn" tool_tip="Pazaryeri Vitrinime G繹nder"/>
+ </panel>
+ </panel>
+</floater>
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 b3c72ba2da..9d8b982c24 100644
--- a/indra/newview/skins/default/xui/tr/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/tr/floater_model_wizard.xml
@@ -6,12 +6,12 @@
<button label="2. Optimize et" name="optimize_btn"/>
<button label="1. Dosya Se癟" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
Model dosyas覺n覺 se癟in
</text>
</panel>
- <panel name="content">
+ <panel name="choose_file_content">
<text name="advanced_users_text">
Gelimi kullan覺c覺lar: Eer 3B i癟erik oluturma ara癟lar覺n覺 kullanmay覺 biliyorsan覺z, Gelimi Kar覺ya Y羹kleyiciyi kullanmak isteyebilirsiniz.
</text>
@@ -35,15 +35,15 @@
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
Modeli optimize et
</text>
</panel>
- <text name="description">
+ <text name="optimize_description">
Modeli performans i癟in optimize ettik. 襤stiyorsan覺z daha da ayarlayabilirsiniz.
</text>
- <panel name="content">
+ <panel name="optimize_content">
<text name="high_detail_text">
Ayr覺nt覺 Seviyesi Olutur: Y羹ksek
</text>
@@ -79,15 +79,15 @@
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
Fizik ayarlar覺n覺 yap
</text>
</panel>
- <text name="description">
+ <text name="physics_description">
Modelin d覺 g繹vdesi i癟in bir ekil oluturaca覺z. Modelinizin amac覺na uygun olarak eklin ayr覺nt覺 seviyesini belirleyin.
</text>
- <panel name="content">
+ <panel name="physics_content">
<button label="Fizik hesaplar覺n覺 tekrar yap" name="recalculate_physics_btn"/>
<button label="Tekrar hesaplan覺yor..." name="recalculating_physics_btn"/>
<text name="lod_label">
@@ -110,12 +110,12 @@
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
襤ncele
</text>
</panel>
- <panel name="content">
+ <panel name="review_content">
<text name="review_prim_equiv">
Parsele/b繹lgeye etkisi: [EQUIV] prim edeerleri
</text>
@@ -128,8 +128,8 @@
</panel>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
Kar覺ya y羹kleme bitti
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/floater_preview_animation.xml b/indra/newview/skins/default/xui/tr/floater_preview_animation.xml
index 1c526c75f9..23b4848333 100644
--- a/indra/newview/skins/default/xui/tr/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/tr/floater_preview_animation.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
A癟覺klama:
</text>
- <button label="SL D羹nyas覺nda Oynat" label_selected="Durdur" name="Anim play btn" tool_tip="Bu animasyonu bakalar覺 g繹rebilecek ekilde oynat覺n"/>
- <button label="Yerel Olarak Oynat" label_selected="Durdur" name="Anim audition btn" tool_tip="Bu animasyonu sadece kendinizin g繹rebilecei ekilde oynat覺n"/>
+ <button label="SL D羹nyas覺nda Oynat" label_selected="Durdur" name="Inworld" tool_tip="Bu animasyonu bakalar覺 g繹rebilecek ekilde oynat覺n"/>
+ <button label="Yerel Olarak Oynat" label_selected="Durdur" name="Locally" tool_tip="Bu animasyonu sadece kendinizin g繹rebilecei ekilde oynat覺n"/>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/tr/floater_test_layout_stacks.xml
new file mode 100644
index 0000000000..b479d5f6d6
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_test_layout_stacks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="LAYOUTSTACK TESTS"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/tr/floater_test_text_vertical_aligment.xml
new file mode 100644
index 0000000000..fcb7d87287
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_test_text_vertical_aligment.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Test Floater" title="TEST PENCERES襤"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_tools.xml b/indra/newview/skins/default/xui/tr/floater_tools.xml
index d4ee9995dd..b0c59ced42 100644
--- a/indra/newview/skins/default/xui/tr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/tr/floater_tools.xml
@@ -1,5 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="襤NA ET ARALARI">
+ <floater.string name="grid_screen_text">
+ Ekran
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Yerel
+ </floater.string>
+ <floater.string name="grid_world_text">
+ D羹nya
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referans
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Aksesuar
+ </floater.string>
<floater.string name="status_rotate">
Nesneyi d繹nd羹rmek i癟in renkli bantlar覺 s羹r羹kleyin
</floater.string>
@@ -63,7 +78,12 @@
</text>
<check_box initial_value="true" label="Dokular覺 Uzat" name="checkbox stretch textures"/>
<check_box initial_value="true" label="Yasla" name="checkbox snap to grid"/>
- <button label="Se癟enekler..." name="Options..." tool_tip="襤lave a se癟eneklerine bak"/>
+ <combo_box name="combobox grid mode" tool_tip="Nesneyi konumland覺rmak i癟in a cetvelini se癟in">
+ <combo_box.item label="D羹nya" name="World"/>
+ <combo_box.item label="Yerel" name="Local"/>
+ <combo_box.item label="Referans" name="Reference"/>
+ </combo_box>
+ <button label="" name="Options..." tool_tip="襤lave a se癟eneklerine bak"/>
<button name="ToolCube" tool_tip="K羹p"/>
<button name="ToolPrism" tool_tip="Prizma"/>
<button name="ToolPyramid" tool_tip="Piramit"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_voice_effect.xml b/indra/newview/skins/default/xui/tr/floater_voice_effect.xml
index a10da39a69..3534a3fe90 100644
--- a/indra/newview/skins/default/xui/tr/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/tr/floater_voice_effect.xml
@@ -42,13 +42,16 @@
<string name="effect_Demon">
襤blis
</string>
+ <string name="effect_Female Elf">
+ Dii Cin
+ </string>
<string name="effect_Flirty">
Cilveli
</string>
<string name="effect_Foxy">
Al覺ml覺
</string>
- <string name="effect_Halloween_2010_Bonus">
+ <string name="effect_Halloween 2010 Bonus">
Halloween_2010_Bonus
</string>
<string name="effect_Helium">
@@ -57,9 +60,18 @@
<string name="effect_Husky">
G羹癟l羹
</string>
+ <string name="effect_Husky Whisper">
+ Bouk F覺s覺lt覺
+ </string>
<string name="effect_Intercom">
襤nterkom
</string>
+ <string name="effect_Julia">
+ Julia
+ </string>
+ <string name="effect_Lo Lilt">
+ Yava M覺r覺lt覺
+ </string>
<string name="effect_Macho">
Ma癟o
</string>
@@ -69,6 +81,9 @@
<string name="effect_Mini">
Mini
</string>
+ <string name="effect_Model">
+ Model
+ </string>
<string name="effect_Nano">
Nano
</string>
@@ -90,6 +105,9 @@
<string name="effect_Roxanne">
Roxanne
</string>
+ <string name="effect_Rumble">
+ Gurultu
+ </string>
<string name="effect_Sabrina">
Sabrina
</string>
@@ -102,6 +120,9 @@
<string name="effect_Shorty">
B羹c羹r
</string>
+ <string name="effect_Smaller">
+ Daha K羹癟羹k
+ </string>
<string name="effect_Sneaky">
Sinsi
</string>
diff --git a/indra/newview/skins/default/xui/tr/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/tr/menu_inspect_object_gear.xml
index 02e5415598..d1d3f9ac8d 100644
--- a/indra/newview/skins/default/xui/tr/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/tr/menu_inspect_object_gear.xml
@@ -12,6 +12,7 @@
<menu_item_call label="Ekle" name="add"/>
<menu_item_call label="Raporla" name="report"/>
<menu_item_call label="Engelle" name="block"/>
+ <menu_item_call label="Engellemeyi Kald覺r" name="unblock"/>
<menu_item_call label="Yak覺nlat覺r" name="zoom_in"/>
<menu_item_call label="Kald覺r" name="remove"/>
<menu_item_call label="Ek Bilgi" name="more_info"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_inventory.xml b/indra/newview/skins/default/xui/tr/menu_inventory.xml
index f14066fd7b..170cdebd24 100644
--- a/indra/newview/skins/default/xui/tr/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/tr/menu_inventory.xml
@@ -59,6 +59,7 @@
<menu_item_call label="zellikler" name="Properties"/>
<menu_item_call label="Yeniden Adland覺r" name="Rename"/>
<menu_item_call label="Varl覺k UUID&apos;sini Kopyala" name="Copy Asset UUID"/>
+ <menu_item_call label="Kes" name="Cut"/>
<menu_item_call label="Kopyala" name="Copy"/>
<menu_item_call label="Yap覺t覺r" name="Paste"/>
<menu_item_call label="Balant覺 Olarak Yap覺t覺r" name="Paste As Link"/>
@@ -84,6 +85,6 @@
<menu_item_call label="Ekle" name="Wearable Add"/>
<menu_item_call label="覺kar" name="Take Off"/>
<menu_item_call label="Sat覺c覺 Giden Kutusuna Kopyala" name="Merchant Copy"/>
- <menu_item_call label="Sat覺c覺 Giden Kutusuna Ta覺" name="Merchant Move"/>
+ <menu_item_call label="Pazaryerine G繹nder" name="Marketplace Send"/>
<menu_item_call label="--se癟enek yok--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_login.xml b/indra/newview/skins/default/xui/tr/menu_login.xml
index 4c3539b38b..f27908bf7a 100644
--- a/indra/newview/skins/default/xui/tr/menu_login.xml
+++ b/indra/newview/skins/default/xui/tr/menu_login.xml
@@ -17,8 +17,8 @@
<menu_item_call label="Pencere B羹y羹kl羹羹n羹 Ayarla..." name="Set Window Size..."/>
<menu_item_call label="Hizmet artlar覺n覺 G繹ster" name="TOS"/>
<menu_item_call label="Kritik 襤letiyi G繹ster" name="Critical"/>
- <menu_item_call label="Ortam Taray覺c覺 Testi" name="Web Browser Test"/>
<menu_item_call label="Web 襤癟erii Gezdiricisi Hata Ay覺klama Testi" name="Web Content Floater Debug Test"/>
+ <menu label="G羹nl羹k Tutma Seviyesini Se癟" name="Set Logging Level"/>
<menu_item_check label="Izgara Se癟iciyi G繹ster" name="Show Grid Picker"/>
<menu_item_call label="Bildirimler Konsolunu G繹ster" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index ef10d639d7..d7b20bac4b 100644
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -14,14 +14,14 @@
<menu_item_check label="U癟" name="Fly"/>
<menu_item_check label="Daima Ko" name="Always Run"/>
<menu_item_call label="Beni Anime Etmeyi Durdur" name="Stop Animating My Avatar"/>
+ <menu_item_call label="Y羹r羹 / ko / u癟..." name="Walk / run / fly"/>
</menu>
<menu label="Durum" name="Status">
<menu_item_call label="Uzakta" name="Set Away"/>
<menu_item_call label="Megul" name="Set Busy"/>
</menu>
- <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="L$ Sat覺n Al..." name="Buy and Sell L$"/>
+ <menu_item_call label="Sat覺c覺 Giden Kutusu..." name="MerchantOutbox"/>
<menu_item_call label="Hesap kontrol paneli..." name="Manage My Account"/>
<menu_item_call label="Tercihler..." name="Preferences"/>
<menu_item_call label="Ara癟 癟ubuu d羹meleri..." name="Toolbars"/>
@@ -61,12 +61,12 @@
<menu_item_check label="Parsel zellikleri" name="Parcel Properties"/>
<menu_item_check label="Gelimi Men羹" name="Show Advanced Menu"/>
</menu>
- <menu label="G羹ne" name="Environment Settings">
+ <menu label="G羹ne" name="Sun">
<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_item_call label="B繹lge Ayarlar覺n覺 Kullan" name="Use Region Settings"/>
</menu>
<menu label="Ortam D羹zenleyici" name="Environment Editor">
<menu_item_call label="Ortam Ayarlar覺..." name="Environment Settings"/>
@@ -176,22 +176,22 @@
<menu_item_check label="Fare zerinden G繹r羹n羹m Art覺 襤aretini G繹ster" name="ShowCrosshairs"/>
</menu>
<menu label="襤leme T羹rleri" name="Rendering Types">
- <menu_item_check label="Basit" name="Simple"/>
- <menu_item_check label="Alfa" name="Alpha"/>
- <menu_item_check label="Aa癟" name="Tree"/>
- <menu_item_check label="Avatarlar" name="Character"/>
- <menu_item_check label="Y羹zey Yamas覺" name="Surface Patch"/>
- <menu_item_check label="G繹ky羹z羹" name="Sky"/>
- <menu_item_check label="Su" name="Water"/>
- <menu_item_check label="Toprak" name="Ground"/>
- <menu_item_check label="Hacim" name="Volume"/>
- <menu_item_check label="imen" name="Grass"/>
- <menu_item_check label="Bulutlar" name="Clouds"/>
- <menu_item_check label="Par癟ac覺klar" name="Particles"/>
- <menu_item_check label="T羹msek" name="Bump"/>
+ <menu_item_check label="Basit" name="Rendering Type Simple"/>
+ <menu_item_check label="Alfa" name="Rendering Type Alpha"/>
+ <menu_item_check label="Aa癟" name="Rendering Type Tree"/>
+ <menu_item_check label="Avatarlar" name="Rendering Type Character"/>
+ <menu_item_check label="Y羹zey Yamas覺" name="Rendering Type Surface Patch"/>
+ <menu_item_check label="G繹ky羹z羹" name="Rendering Type Sky"/>
+ <menu_item_check label="Su" name="Rendering Type Water"/>
+ <menu_item_check label="Toprak" name="Rendering Type Ground"/>
+ <menu_item_check label="Hacim" name="Rendering Type Volume"/>
+ <menu_item_check label="imen" name="Rendering Type Grass"/>
+ <menu_item_check label="Bulutlar" name="Rendering Type Clouds"/>
+ <menu_item_check label="Par癟ac覺klar" name="Rendering Type Particles"/>
+ <menu_item_check label="T羹msek" name="Rendering Type Bump"/>
</menu>
<menu label="襤leme zellikleri" name="Rendering Features">
- <menu_item_check label="KA" name="UI"/>
+ <menu_item_check label="KA" name="ToggleUI"/>
<menu_item_check label="Se癟ili" name="Selected"/>
<menu_item_check label="Vurgulanm覺" name="Highlighted"/>
<menu_item_check label="Dinamik Dokular" name="Dynamic Textures"/>
@@ -205,8 +205,6 @@
<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_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"/>
@@ -215,13 +213,6 @@
<menu_item_check label="Oyun ubuu Flycam" name="Joystick Flycam"/>
<menu_item_call label="G繹r羹n羹m羹 S覺f覺rla" name="Reset View"/>
<menu_item_call label="Son Sohbet Edene Bak" name="Look at Last Chatter"/>
- <menu label="襤na Et Arac覺n覺 Se癟" name="Select Tool">
- <menu_item_call label="Odaklanma Arac覺" name="Focus"/>
- <menu_item_call label="Hareket Ettirme Arac覺" name="Move"/>
- <menu_item_call label="D羹zenleme Arac覺" name="Edit"/>
- <menu_item_call label="Oluturma Arac覺" name="Create"/>
- <menu_item_call label="Arazi Arac覺" name="Land"/>
- </menu>
<menu_item_call label="Yak覺nlat覺r" name="Zoom In"/>
<menu_item_call label="Varsay覺lan Yak覺nlat覺rma" name="Zoom Default"/>
<menu_item_call label="Uzaklat覺rma" name="Zoom Out"/>
@@ -294,6 +285,7 @@
<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="Aksesuar Bayt B羹y羹kl羹羹" name="attachment bytes"/>
<menu_item_check label="ekillendir" name="Sculpt"/>
</menu>
<menu label="襤leme" name="Rendering">
@@ -335,9 +327,8 @@
<menu_item_call label="Kayd覺 Balat" name="Start Record"/>
<menu_item_call label="Kayd覺 Durdur" name="Stop Record"/>
</menu>
- <menu label="D羹nya" name="World">
+ <menu label="D羹nya" name="DevelopWorld">
<menu_item_check label="Sim G羹nei Ge癟ersiz K覺l" name="Sim Sun Override"/>
- <menu_item_check label="Yan覺p S繹nen 襤aret" name="Cheesy Beacon"/>
<menu_item_check label="Sabit Hava Durumu" name="Fixed Weather"/>
<menu_item_call label="B繹lge Nesne nbelleinin D繹k羹m羹n羹 Al" name="Dump Region Object Cache"/>
</menu>
@@ -369,11 +360,11 @@
</menu>
<menu label="Avatar" name="Character">
<menu label="Kaydedilmi Dokuyu Al" name="Grab Baked Texture">
- <menu_item_call label="襤ris" name="Iris"/>
- <menu_item_call label="Ba" name="Head"/>
- <menu_item_call label="st G繹vde" name="Upper Body"/>
- <menu_item_call label="Alt G繹vde" name="Lower Body"/>
- <menu_item_call label="Etek" name="Skirt"/>
+ <menu_item_call label="襤ris" name="Grab Iris"/>
+ <menu_item_call label="Ba" name="Grab Head"/>
+ <menu_item_call label="st G繹vde" name="Grab Upper Body"/>
+ <menu_item_call label="Alt G繹vde" name="Grab Lower Body"/>
+ <menu_item_call label="Etek" name="Grab Skirt"/>
</menu>
<menu label="Karakter Testleri" name="Character Tests">
<menu_item_call label="XML&apos;de G繹r羹n羹m" name="Appearance To XML"/>
@@ -401,17 +392,25 @@
<menu_item_check label="HTTP Dokular覺" name="HTTP Textures"/>
<menu_item_check label="HTTP Envanteri" name="HTTP Inventory"/>
<menu_item_call label="G繹r羹nt羹leri S覺k覺t覺r" name="Compress Images"/>
+ <menu_item_call label="Visual Leak Detector&apos;覺 Etkinletir" name="Enable Visual Leak Detector"/>
<menu_item_check label="Mini D繹k羹m Dosyas覺 Hata Ay覺klama 覺kt覺s覺" name="Output Debug Minidump"/>
<menu_item_check label="Sonraki al覺mada Konsol Penceresi" name="Console Window"/>
+ <menu label="G羹nl羹k Tutma Seviyesini Se癟" name="Set Logging Level">
+ <menu_item_check label="Hata ay覺kla" name="Debug"/>
+ <menu_item_check label="Bilgi" name="Info"/>
+ <menu_item_check label="Uyar覺" name="Warning"/>
+ <menu_item_check label="Hata" name="Error"/>
+ <menu_item_check label="Hi癟biri" name="None"/>
+ </menu>
<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_check label="Y繹netici Men羹s羹n羹 G繹ster" name="View Admin Options"/>
</menu>
<menu label="Y繹netici" name="Admin">
- <menu label="Object">
- <menu_item_call label="Kopya Al" name="Take Copy"/>
- <menu_item_call label="M羹lkiyetime Ge癟ir" name="Force Owner To Me"/>
- <menu_item_call label="襤zinlerle Birlikte M羹lkiyetime Ge癟ir" name="Force Owner Permissive"/>
+ <menu label="Nesne" name="AdminObject">
+ <menu_item_call label="Kopya Al" name="Admin Take Copy"/>
+ <menu_item_call label="Zorunlu Olarak M羹lkiyetime Ge癟ir" name="Force Owner To Me"/>
+ <menu_item_call label="Sahibin 襤zinlerini Zorunlu K覺l" name="Force Owner Permissive"/>
<menu_item_call label="Sil" name="Delete"/>
<menu_item_call label="Kilitle" name="Lock"/>
<menu_item_call label="Varl覺k Kimliklerini Al" name="Get Assets IDs"/>
@@ -445,7 +444,7 @@
<menu_item_call label="Fizik" name="Physics"/>
<menu_item_call label="T羹m Giysiler" name="All Clothes"/>
</menu>
- <menu label="Yard覺m" name="Help">
+ <menu label="Yard覺m" name="DeprecatedHelp">
<menu_item_call label="Resmi Linden Blog&apos;u" name="Official Linden Blog"/>
<menu_item_call label="Komut Dosyas覺 Portal覺" name="Scripting Portal"/>
<menu label="Hata Raporlama" name="Bug Reporting">
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index 631634aa7d..6681cdac7a 100644
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -86,17 +86,38 @@ Hata ayr覺nt覺lar覺: &apos;[_NAME]&apos; adl覺 bildirim notifications.xml i癟ind
<usetemplate canceltext="襤ptal" name="yesnocancelbuttons" notext="Kaydetme" yestext="Kaydet"/>
</notification>
<notification name="ConfirmNoCopyToOutbox">
- Bu 繹eyi Pazaryeri Giden Kutunuza kopyalama izniniz yok. Aa覺daki 繹eyi ta覺mak istediinize emin misiniz?
- [ITEM_NAME]
- <usetemplate name="okcancelbuttons" notext="Hay覺r" yestext="Evet"/>
+ Bu 繹elerden bir veya daha fazlas覺n覺 Sat覺c覺 Giden Kutusuna kopyalama izniniz yok. Bunlar覺 ta覺yabilir veya b覺rakabilirsiniz.
+ <usetemplate name="okcancelbuttons" notext="eleri ta覺ma" yestext="eleri ta覺"/>
+ </notification>
+ <notification name="OutboxFolderCreated">
+ Sat覺c覺 Giden Kutunuzun 羹st seviyesine aktard覺覺n覺z her bir 繹e i癟in yeni bir klas繹r oluturuldu.
+ <usetemplate ignoretext="Sat覺c覺 Giden Kutusunda yeni bir klas繹r oluturuldu" name="okignore" yestext="Tamam"/>
</notification>
- <notification name="OutboxUploadComplete">
- Pazaryerinin kar覺ya y羹klenmesi tamamland覺.
- <usetemplate name="okbutton" yestext="Yaas覺n!"/>
+ <notification name="OutboxImportComplete">
+ Baar覺l覺 oldu
+
+T羹m klas繹rler baar覺yla Pazaryerine g繹nderildi.
+ <usetemplate ignoretext="T羹m klas繹rler Pazaryerine g繹nderildi" name="okignore" yestext="Tamam"/>
</notification>
- <notification name="OutboxUploadHadErrors">
- Pazaryerinin kar覺ya y羹klenmesi hatalarla tamamland覺! L羹tfen giden kutunuzdaki sorunlar覺 d羹zeltin ve tekrar deneyin. Teekk羹rler.
- <usetemplate name="okbutton" yestext="Yuh!"/>
+ <notification name="OutboxImportHadErrors">
+ Baz覺 klas繹rler aktar覺lmad覺
+
+Baz覺 klas繹rler Pazaryerine g繹nderildiinde hatalar meydana geldi. Bu klas繹rler hala Sat覺c覺 Giden Kutunuzda.
+
+Daha fazla bilgi i癟in bkz. [[MARKETPLACE_IMPORTS_URL] hata g羹nl羹羹].
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
+ <notification name="OutboxImportFailed">
+ Aktar覺m baar覺lamad覺
+
+Bir sistem veya a hatas覺 nedeniyle Pazaryerine hi癟bir klas繹r g繹nderilemedi. Daha sonra tekrar deneyin.
+ <usetemplate name="okbutton" yestext="Tamam"/>
+ </notification>
+ <notification name="OutboxInitFailed">
+ Pazaryeri balat覺lamad覺.
+
+Bir sistem veya a hatas覺 nedeniyle Pazaryeri balat覺lamad覺. Daha sonra tekrar deneyin.
+ <usetemplate name="okbutton" yestext="Tamam"/>
</notification>
<notification name="CompileQueueSaveText">
Aa覺daki nedenden dolay覺, bir komut dosyas覺 i癟in metin kar覺ya y羹klenirken bir sorun olutu: [REASON]. L羹tfen daha sonra tekrar deneyin.
@@ -649,7 +670,7 @@ Beklenen [VALIDS]
覺k覺 dosyas覺 oluturulam覺yor: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- [APP_NAME] u an i癟in animasyon dosyalar覺n覺n toplu olarak kar覺ya y羹klenmesini desteklemiyor.
+ [APP_NAME] u an i癟in BVH format覺nda animasyon dosyalar覺n覺n toplu olarak y羹klenmesini desteklemiyor.
</notification>
<notification name="CannotUploadReason">
Aa覺daki nedenden dolay覺 [FILE] dosyas覺 kar覺ya y羹klenemedi: [REASON]
@@ -2609,16 +2630,16 @@ Talep kabul edilsin mi?
[NAME] adl覺 kiiye ait &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
[MESSAGE]
<form name="form">
- <button name="Mute" text="Engelle"/>
- <button name="Ignore" text="Yok say"/>
+ <button name="Client_Side_Mute" text="Engelle"/>
+ <button name="Client_Side_Ignore" text="Yok say"/>
</form>
</notification>
<notification name="ScriptDialogGroup">
[GROUPNAME] grubuna ait &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
[MESSAGE]
<form name="form">
- <button name="Mute" text="Engelle"/>
- <button name="Ignore" text="Yok say"/>
+ <button name="Client_Side_Mute" text="Engelle"/>
+ <button name="Client_Side_Ignore" text="Yok say"/>
</form>
</notification>
<notification name="BuyLindenDollarSuccess">
@@ -2816,6 +2837,18 @@ Paylaman覺n yap覺laca覺 Sakinler:
[RESIDENTS]
<usetemplate name="okcancelbuttons" notext="襤ptal" yestext="Tamam"/>
</notification>
+ <notification name="ShareFolderConfirmation">
+ Bir defada sadece bir klas繹r payla覺labilir.
+
+Aa覺daki 繹eleri paylamak istediinize emin misiniz?
+
+&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
+
+Paylaman覺n yap覺laca覺 Second Life Sakinleri:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="襤ptal" yestext="Tamam"/>
+ </notification>
<notification name="ItemsShared">
eler baar覺l覺 bir ekilde payla覺ld覺.
</notification>
diff --git a/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml
index c405105e00..d238388b0e 100644
--- a/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml
@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_chat">
- <check_box label="Sohbeti 癟evir" name="translate_chat_checkbox"/>
+ <layout_stack name="stack">
+ <layout_panel name="translate_chat_checkbox_lp">
+ <check_box label="Sohbeti 癟evir" name="translate_chat_checkbox"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_region_estate.xml b/indra/newview/skins/default/xui/tr/panel_region_estate.xml
index 4ba55cafb6..f1df13df61 100644
--- a/indra/newview/skins/default/xui/tr/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_estate.xml
@@ -20,10 +20,10 @@
<slider label="Faz" name="sun_hour_slider"/>
<check_box label="Kamusal Eriime 襤zin Ver" name="externally_visible_check"/>
<text name="Only Allow">
- Eriimi ununla dorulanan hesaplarla s覺n覺rla:
+ Sadece u Sakinlere eriim izni verin:
</text>
- <check_box label="Dosyadaki deme Bilgileri" name="limit_payment" tool_tip="Tan覺nmayan Sakinleri Yasakla"/>
- <check_box label="Ya Dorulama" name="limit_age_verified" tool_tip="Ya覺n覺 dorulamayan Sakinleri yasakla Daha fazla bilgi i癟in [SUPPORT_SITE] adresini ziyaret edin."/>
+ <check_box label="deme bilgileri kay覺tl覺" name="limit_payment" tool_tip="Sakinlerin bu gayrimenkule eriebilmesi i癟in 繹deme bilgilerinin kay覺tl覺 olmas覺 gerekir. Daha fazla bilgi i癟in [SUPPORT_SITE] adresini ziyaret edin."/>
+ <check_box label="Ya dorulamas覺 yap覺lm覺" name="limit_age_verified" tool_tip="Sakinlerin bu gayrimenkule eriebilmesi i癟in ya dorulamalar覺n覺n yap覺lm覺 olmas覺 gerekir. Daha fazla bilgi i癟in [SUPPORT_SITE] adresini ziyaret edin."/>
<check_box label="Sesli Sohbete 襤zin Ver" name="voice_chat_check"/>
<check_box label="Dorudan I覺nlamaya 襤zin Ver" name="allow_direct_teleport"/>
<button label="Uygula" name="apply_btn"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_script_ed.xml b/indra/newview/skins/default/xui/tr/panel_script_ed.xml
index bc30320fa5..7aa1da6fb2 100644
--- a/indra/newview/skins/default/xui/tr/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/tr/panel_script_ed.xml
@@ -22,6 +22,8 @@
<menu label="Dosya" name="File">
<menu_item_call label="Kaydet" name="Save"/>
<menu_item_call label="T羹m Deiiklikleri Geri evir" name="Revert All Changes"/>
+ <menu_item_call label="Dosyadan y羹kle..." name="LoadFromFile"/>
+ <menu_item_call label="Dosyaya kaydet..." name="SaveToFile"/>
</menu>
<menu label="D羹zenle" name="Edit">
<menu_item_call label="Geri Al" name="Undo"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_status_bar.xml b/indra/newview/skins/default/xui/tr/panel_status_bar.xml
index 81c304a5d8..178cbda4a2 100644
--- a/indra/newview/skins/default/xui/tr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/tr/panel_status_bar.xml
@@ -15,7 +15,7 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <panel name="balance_bg">
+ <panel left="-425" name="balance_bg" width="215">
<text name="balance" tool_tip="L$ bakiyenizi yenilemek i癟in buraya t覺klay覺n" value="L$20"/>
<button label="L$ Sat覺n Al" name="buyL" tool_tip="Daha fazla L$ sat覺n almak i癟in t覺klay覺n"/>
<button label="Al覺veri yap" name="goShop" tool_tip="Second Life Pazaryeri A癟" width="95"/>
diff --git a/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml
index 70c449b402..938b5a76d8 100644
--- a/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml
@@ -2,47 +2,24 @@
<panel label="Eyalar" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<layout_stack name="inventory_layout_stack">
- <layout_panel name="inbox_outbox_layout_panel">
- <layout_stack name="inbox_outbox_layout_stack">
- <layout_panel name="inbox_layout_panel">
- <panel label="" name="marketplace_inbox">
- <string name="InboxLabelWithArg">
- Al覺nan 繹eler ([NUM])
- </string>
- <string name="InboxLabelNoArg">
- Al覺nan 繹eler
- </string>
- <button label="Al覺nan 繹eler" name="inbox_btn"/>
- <text name="inbox_fresh_new_count">
- [NUM] yeni
- </text>
- <panel tool_tip="Drag and drop items to your inventory to manage and use them">
- <text name="inbox_inventory_placeholder">
- Pazaryerinden sat覺n al覺nan 繹eler buraya teslim edilir.
- </text>
- </panel>
- </panel>
- </layout_panel>
- <layout_panel name="outbox_layout_panel">
- <panel label="" name="marketplace_outbox">
- <string name="OutboxLabelWithArg">
- Sat覺c覺 giden kutusu ([NUM])
- </string>
- <string name="OutboxLabelNoArg">
- Sat覺c覺 giden kutusu
- </string>
- <button label="Sat覺c覺 giden kutusu" name="outbox_btn"/>
- <button label="" name="outbox_sync_btn" tool_tip="Pazaryeri Vitrinime G繹nder"/>
- <panel>
- <panel name="outbox_inventory_placeholder_panel">
- <text name="outbox_inventory_placeholder_title">
- Y羹kleniyor...
- </text>
- </panel>
- </panel>
- </panel>
- </layout_panel>
- </layout_stack>
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Al覺nan 繹eler ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Al覺nan 繹eler
+ </string>
+ <button label="Al覺nan 繹eler" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] yeni
+ </text>
+ <panel name="inbox_inventory_placeholder_panel" tool_tip="eleri kullanmak i癟in bunlar覺 s羹r羹kleyin ve envanterinize b覺rak覺n">
+ <text name="inbox_inventory_placeholder">
+ Pazaryerinden sat覺n al覺nan 繹eler buraya teslim edilir.
+ </text>
+ </panel>
+ </panel>
</layout_panel>
</layout_stack>
<panel name="button_panel">
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index 0dbc9b0a0e..2a4e2c20a7 100644
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -181,7 +181,7 @@ G羹ncelletirmeler i癟in www.secondlife.com/status adresini kontrol edin.
</string>
<string name="LoginFailedPremiumOnly">
Second Life 羹zerindeki aktif kullan覺c覺lar覺n olas覺 en iyi deneyimi yaamas覺n覺 salamak i癟in, oturum a癟覺lmas覺 ge癟ici olarak k覺s覺tlanm覺t覺r.
-
+
Second Life i癟in 繹deme yapm覺 olan kiilere 繹ncelik tan覺mak amac覺yla, 羹cretsiz hesaplara sahip kiiler bu s羹re i癟erisinde Second Life&apos;a eriemeyecekler.
</string>
<string name="LoginFailedComputerProhibited">
@@ -339,17 +339,35 @@ L羹tfen bir dakika i癟erisinde tekrar oturum a癟may覺 deneyin.
Buraya sadece bir 繹e s羹r羹klenebilir.
</string>
<string name="TooltipPrice" value="L$[AMOUNT]:"/>
+ <string name="TooltipOutboxDragToWorld">
+ Sat覺c覺 giden kutunuzda 繹eler oluturamazs覺n覺z
+ </string>
<string name="TooltipOutboxNoTransfer">
- Bu nesnelerden bir veya daha fazlas覺 baka bir kullan覺c覺ya sat覺lamaz veya aktar覺lamaz.
+ Bu nesnelerden bir veya daha fazlas覺 sat覺lamaz veya aktar覺lamaz.
+ </string>
+ <string name="TooltipOutboxNotInInventory">
+ Sat覺c覺 giden kutunuza sadece dorudan kendi envanterinizden 繹eler koyabilirsiniz
</string>
<string name="TooltipOutboxWorn">
- Bu nesnelerden bir veya daha fazlas覺n覺 giyiyorsunuz. Bunlar覺 avatar覺n覺zdan kald覺r覺n ve tekrar ta覺may覺 deneyin.
+ Giymekte olduunuz 繹eleri Sat覺c覺 giden kutunuza koyamazs覺n覺z.
+ </string>
+ <string name="TooltipOutboxCallingCard">
+ Sat覺c覺 giden kutunuza arama kartlar覺 koyamazs覺n覺z
</string>
<string name="TooltipOutboxFolderLevels">
- Bu klas繹rde 癟ok fazla alt klas繹r seviyesi var. Dahili klas繹rleri tekrar d羹zenleyerek maksimum 4 seviye derinlie azalt覺n (K繹k Klas繹r i癟inde A i癟inde B i癟inde C eklinde).
+ 襤癟 i癟e ge癟mi klas繹rlerin derinlii 羹癟羹 ge癟iyor
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ st seviyedeki klas繹rdeki alt klas繹r say覺s覺 20&apos;yi ge癟iyor
</string>
<string name="TooltipOutboxTooManyObjects">
- Bu klas繹rde 200&apos;den fazla nesne var. Nesne say覺s覺n覺 azaltmak i癟in 繹elerden baz覺lar覺n覺 kutuya koyun.
+ st seviyedeki klas繹rdeki 繹e say覺s覺 200&apos;羹 ge癟iyor
+ </string>
+ <string name="TooltipDragOntoOwnChild">
+ Bir klas繹r羹 alt klas繹r羹ne ta覺yamazs覺n覺z
+ </string>
+ <string name="TooltipDragOntoSelf">
+ Bir klas繹r羹 kendi i癟ine ta覺yamazs覺n覺z
</string>
<string name="TooltipHttpUrl">
Bu web sayfas覺n覺 g繹rmek i癟in t覺klay覺n
@@ -814,6 +832,9 @@ L羹tfen bir dakika i癟erisinde tekrar oturum a癟may覺 deneyin.
<string name="anim_yes_head">
Evet
</string>
+ <string name="multiple_textures">
+ Birden ok
+ </string>
<string name="texture_loading">
Y羹kleniyor...
</string>
@@ -973,6 +994,9 @@ L羹tfen bir dakika i癟erisinde tekrar oturum a癟may覺 deneyin.
<string name="choose_the_directory">
Dizin Se癟
</string>
+ <string name="script_files">
+ Komut Dosyalar覺
+ </string>
<string name="AvatarSetNotAway">
Uzakta Deil
</string>
@@ -1211,43 +1235,36 @@ L羹tfen bir dakika i癟erisinde tekrar oturum a癟may覺 deneyin.
Envanterinizde bu dokunun kopyas覺 yok
</string>
<string name="InventoryInboxNoItems">
- 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.
+ Pazaryerinda sat覺n ald覺klar覺n覺z burada g繹r羹necektir. Bunlar覺 kullanmak i癟in envanterinize s羹r羹kleyebilirsiniz.
</string>
<string name="MarketplaceURL">
- http://marketplace.[DOMAIN_NAME]
+ https://marketplace.[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
+ http://community.secondlife.com/t5/English-Knowledge-Base/Selling-in-the-Marketplace/ta-p/700193#Section_.4
</string>
- <string name="InventoryOutboxCreationErrorTitle">
- Sat覺c覺 Giden Kutunuz d羹zg羹n yap覺land覺r覺lmam覺t覺r
+ <string name="MarketplaceURL_Dashboard">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/dashboard
</string>
- <string name="InventoryOutboxCreationErrorTooltip">
- Sat覺c覺 Giden Kutusu yap覺land覺rma hatas覺
+ <string name="MarketplaceURL_Imports">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/merchants/store/imports
</string>
- <string name="InventoryOutboxCreationError">
- Sorunu d羹zeltmek i癟in l羹tfen M羹teri Hizmetlerine bavurun.
+ <string name="MarketplaceURL_LearnMore">
+ https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryOutboxNotMerchantTitle">
- Pazaryerinde herkes 繹e satabilir
- </string>
- <string name="InventoryOutboxNotMerchantTooltip">
- Bir sat覺c覺 olun!
+ Pazaryerinde herkes 繹e satabilir.
</string>
+ <string name="InventoryOutboxNotMerchantTooltip"/>
<string name="InventoryOutboxNotMerchant">
- [[MARKETPLACE_URL] Second Life Pazaryeri] i癟erisinde bir milyondan fazla sanal 羹r羹n sat覺a sunulmutur, bunlar覺n t羹m羹 Sakinler taraf覺ndan oluturulmutur. Siz de oluturduunuz 繹eleri ve sat覺n ald覺覺n覺z 繹elerin baz覺lar覺n覺 satabilirsiniz. Bunu yapmak kolayd覺r, kurulum da 羹cretsizdir. [[LEARN_MORE_URL] Daha fazla bilgi edinin] veya balamak i癟in Pazaryerinde [[CREATE_STORE_URL] bir maaza a癟覺n].
+ Eer bir sat覺c覺 olmak istiyorsan覺z, [Pazaryerinde [MARKETPLACE_CREATE_STORE_URL] bir maaza a癟man覺z gerekir].
</string>
<string name="InventoryOutboxNoItemsTitle">
- Pazaryerine 繹e g繹ndermek i癟in yeni bir yol
- </string>
- <string name="InventoryOutboxNoItemsTooltip">
- eleri Pazaryerinde sat覺a haz覺rlamak i癟in s羹r羹kleyip buraya b覺rak覺n
+ Giden kutunuz bo.
</string>
+ <string name="InventoryOutboxNoItemsTooltip"/>
<string name="InventoryOutboxNoItems">
- Satmak istediiniz 繹eleri veya klas繹rleri bu alana s羹r羹kleyin. enin bir kopyas覺 burada g繹r羹n羹r ve kopyalanamaz bir 繹eyi s羹r羹klemediyseniz, envanteriniz ayn覺 kal覺r. eleri Pazaryerine g繹ndermeye haz覺r olduunuzda Kar覺ya Y羹kle d羹mesine t覺klay覺n. eleriniz Pazaryeri Envanterinize ta覺nd覺覺nda bu klas繹rden kaybolurlar.
+ Bu alana klas繹rleri s羹r羹kleyin ve bunlar覺 [[MARKETPLACE_DASHBOARD_URL] Pazaryerinde] sat覺l覺k olarak duyurmak i癟in &quot;Pazaryerine G繹nder&quot; 羹zerine t覺klay覺n.
</string>
<string name="Marketplace Error None">
Hata yok
@@ -3904,6 +3921,9 @@ Bu iletiyi almaya devam ederseniz, l羹tfen [SUPPORT_SITE] b繹l羹m羹ne bavurun.
<string name="Saved_message">
(Kaydedildi [LONG_TIMESTAMP])
</string>
+ <string name="IM_unblock_only_groups_friends">
+ Bu mesaj覺 g繹rmek i癟in Tercihler/Gizlilik&apos;de &apos;Sadece arkadalar ve gruplar beni aras覺n veya A襤 g繹ndersin&apos; se癟eneinin iaretini kald覺rmal覺s覺n覺z.
+ </string>
<string name="answered_call">
Araman覺z yan覺tland覺
</string>
@@ -4100,9 +4120,7 @@ Bu iletiyi almaya devam ederseniz, l羹tfen [SUPPORT_SITE] b繹l羹m羹ne bavurun.
evrimi癟i
</string>
<string name="uploading_abuse_report">
- Kar覺ya Y羹kleniyor...
-
-K繹t羹ye Kullan覺m覺 Bildirme
+ K繹t羹ye Kullan覺m Bildirimi Kar覺ya Y羹kleniyor...
</string>
<string name="New Shape">
Yeni ekil
@@ -4369,7 +4387,7 @@ K繹t羹ye Kullan覺m覺 Bildirme
<string name="server_is_down">
T羹m 癟abalar覺m覺za ramen beklenmeyen bir hata meydana geldi.
- Hizmetle ilikili bilinen bir sorun olup olmad覺覺n覺 g繹rmek i癟in l羹tfen status.secondlifegrid.net adresine bak覺n.
+ Hizmetle ilikili bilinen bir sorun olup olmad覺覺n覺 g繹rmek i癟in l羹tfen status.secondlifegrid.net adresine bak覺n.
Sorun yaamaya devam ederseniz l羹tfen a覺n覺z覺n ve g羹venlik duvar覺n覺z覺n ayarlar覺na bak覺n.
</string>
<string name="dateTimeWeekdaysNames">
@@ -4848,6 +4866,9 @@ D羹zenleyici yolunu 癟ift t覺rnakla 癟evrelemeyi deneyin.
<string name="Command_Move_Label">
Y羹r羹 / ko / u癟
</string>
+ <string name="Command_Outbox_Label">
+ Sat覺c覺 giden kutusu
+ </string>
<string name="Command_People_Label">
Kiiler
</string>
@@ -4920,6 +4941,9 @@ D羹zenleyici yolunu 癟ift t覺rnakla 癟evrelemeyi deneyin.
<string name="Command_Move_Tooltip">
Avatar覺n覺z覺 hareket ettirmek
</string>
+ <string name="Command_Outbox_Tooltip">
+ Satmak amac覺yla Pazaryerinize 繹eler ta覺y覺n
+ </string>
<string name="Command_People_Tooltip">
Arkadalar, gruplar ve yak覺ndaki kiiler
</string>