summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/contributions.txt7
-rw-r--r--indra/cmake/PulseAudio.cmake28
-rw-r--r--indra/llaudio/llaudioengine.cpp2
-rw-r--r--indra/llcommon/llapp.h2
-rw-r--r--indra/llcommon/llassettype.cpp86
-rw-r--r--indra/llcommon/llassettype.h3
-rw-r--r--indra/llcommon/llchat.h3
-rw-r--r--indra/llcommon/llcursortypes.cpp3
-rw-r--r--indra/llcommon/llcursortypes.h3
-rw-r--r--indra/llcommon/llqueuedthread.cpp5
-rw-r--r--indra/llcommon/llstring.cpp14
-rw-r--r--indra/llcommon/llstring.h4
-rw-r--r--indra/llcommon/lluuid.h1
-rw-r--r--indra/llcommon/llversionserver.h2
-rw-r--r--indra/llcommon/llversionviewer.h2
-rw-r--r--indra/llcommon/llworkerthread.cpp36
-rw-r--r--indra/llcommon/llworkerthread.h3
-rw-r--r--indra/llimage/llimage.cpp31
-rw-r--r--indra/llimage/llimage.h14
-rw-r--r--indra/llinventory/CMakeLists.txt2
-rw-r--r--indra/llinventory/llinventory.cpp81
-rw-r--r--indra/llinventory/llinventory.h297
-rw-r--r--indra/llinventory/llinventorydefines.cpp37
-rw-r--r--indra/llinventory/llinventorydefines.h106
-rw-r--r--indra/llinventory/llinventorytype.h1
-rw-r--r--indra/llinventory/llparcel.cpp2
-rw-r--r--indra/llinventory/llparcel.h4
-rw-r--r--indra/llinventory/llpermissions.cpp2
-rw-r--r--indra/llinventory/llpermissions.h32
-rw-r--r--indra/llmath/llvolume.cpp201
-rw-r--r--indra/llmath/llvolume.h4
-rw-r--r--indra/llmessage/llassetstorage.cpp6
-rw-r--r--indra/llmessage/llinstantmessage.cpp1
-rw-r--r--indra/llmessage/llinstantmessage.h1
-rw-r--r--indra/llmessage/lltemplatemessagebuilder.cpp2
-rw-r--r--indra/llmessage/lltemplatemessagereader.cpp5
-rw-r--r--indra/llmessage/lltransfersourceasset.cpp51
-rw-r--r--indra/llmessage/lltransfersourceasset.h20
-rw-r--r--indra/llmessage/message_prehash.cpp2
-rw-r--r--indra/llplugin/CMakeLists.txt19
-rw-r--r--indra/llplugin/llpluginclassmedia.cpp53
-rw-r--r--indra/llplugin/llpluginclassmedia.h11
-rw-r--r--indra/llplugin/llpluginclassmediaowner.h2
-rw-r--r--indra/llplugin/llplugincookiestore.cpp659
-rw-r--r--indra/llplugin/llplugincookiestore.h125
-rw-r--r--indra/llplugin/llpluginprocesschild.cpp2
-rw-r--r--indra/llplugin/llpluginprocesschild.h2
-rw-r--r--indra/llplugin/llpluginprocessparent.cpp7
-rw-r--r--indra/llplugin/llpluginprocessparent.h7
-rw-r--r--indra/llplugin/tests/llplugincookiestore_test.cpp211
-rw-r--r--indra/llrender/llfontgl.cpp32
-rw-r--r--indra/llrender/llfontregistry.cpp2
-rw-r--r--indra/llrender/llimagegl.cpp14
-rw-r--r--indra/llrender/llrender.cpp179
-rw-r--r--indra/llrender/llrender.h23
-rw-r--r--indra/llui/CMakeLists.txt10
-rw-r--r--indra/llui/llaccordionctrl.cpp32
-rw-r--r--indra/llui/llaccordionctrltab.cpp302
-rw-r--r--indra/llui/llaccordionctrltab.h34
-rw-r--r--indra/llui/llbutton.cpp2
-rw-r--r--indra/llui/llbutton.h3
-rw-r--r--indra/llui/llcombobox.cpp69
-rw-r--r--indra/llui/llcombobox.h36
-rw-r--r--indra/llui/lldockablefloater.cpp8
-rw-r--r--indra/llui/lldockablefloater.h2
-rw-r--r--indra/llui/lldraghandle.cpp7
-rw-r--r--indra/llui/lldraghandle.h3
-rw-r--r--indra/llui/lleditmenuhandler.cpp7
-rw-r--r--indra/llui/lleditmenuhandler.h2
-rw-r--r--indra/llui/llflatlistview.cpp36
-rw-r--r--indra/llui/llflatlistview.h14
-rw-r--r--indra/llui/llfloater.cpp87
-rw-r--r--indra/llui/llfloater.h17
-rw-r--r--indra/llui/llfloaterreg.cpp13
-rw-r--r--indra/llui/llfloaterreg.h1
-rw-r--r--indra/llui/llfocusmgr.cpp51
-rw-r--r--indra/llui/llfocusmgr.h10
-rw-r--r--indra/llui/llhandle.h7
-rw-r--r--indra/llui/lllayoutstack.cpp38
-rw-r--r--indra/llui/lllayoutstack.h10
-rw-r--r--indra/llui/lllineeditor.cpp118
-rw-r--r--indra/llui/lllineeditor.h4
-rw-r--r--indra/llui/llmenugl.cpp7
-rw-r--r--indra/llui/llmenugl.h2
-rw-r--r--indra/llui/llmodaldialog.cpp6
-rw-r--r--indra/llui/llmultifloater.cpp9
-rw-r--r--indra/llui/llnotifications.cpp46
-rw-r--r--indra/llui/llnotifications.h75
-rw-r--r--indra/llui/llradiogroup.cpp8
-rw-r--r--indra/llui/llscrollingpanellist.cpp28
-rw-r--r--indra/llui/llscrollingpanellist.h6
-rw-r--r--indra/llui/llscrolllistcell.cpp4
-rw-r--r--indra/llui/llscrolllistcell.h5
-rw-r--r--indra/llui/llscrolllistctrl.cpp35
-rw-r--r--indra/llui/llscrolllistctrl.h40
-rw-r--r--indra/llui/llsearcheditor.cpp15
-rw-r--r--indra/llui/llsearcheditor.h2
-rw-r--r--indra/llui/lltabcontainer.cpp35
-rw-r--r--indra/llui/lltextbase.cpp51
-rw-r--r--indra/llui/lltextbase.h1
-rw-r--r--indra/llui/lltexteditor.cpp245
-rw-r--r--indra/llui/lltexteditor.h12
-rw-r--r--indra/llui/llui.cpp158
-rw-r--r--indra/llui/llui.h14
-rw-r--r--indra/llui/llurlentry.cpp106
-rw-r--r--indra/llui/llurlentry.h16
-rw-r--r--indra/llui/llurlregistry.cpp4
-rw-r--r--indra/llui/llview.cpp16
-rw-r--r--indra/llui/llview.h4
-rw-r--r--indra/llui/llviewborder.cpp58
-rw-r--r--indra/llui/llviewborder.h3
-rw-r--r--indra/llwindow/llwindow.h2
-rw-r--r--indra/llwindow/llwindowmacosx.cpp11
-rw-r--r--indra/llwindow/llwindowmacosx.h2
-rw-r--r--indra/llwindow/llwindowsdl.cpp17
-rw-r--r--indra/llwindow/llwindowsdl.h2
-rw-r--r--indra/llwindow/llwindowwin32.cpp88
-rw-r--r--indra/llwindow/llwindowwin32.h2
-rw-r--r--indra/lscript/lscript_execute/lscript_execute.cpp2
-rw-r--r--indra/media_plugins/example/media_plugin_example.cpp26
-rw-r--r--indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp98
-rw-r--r--indra/media_plugins/quicktime/media_plugin_quicktime.cpp66
-rw-r--r--indra/media_plugins/webkit/CMakeLists.txt14
-rw-r--r--indra/media_plugins/webkit/linux_volume_catcher.cpp488
-rw-r--r--indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc21
-rw-r--r--indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc6
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp362
-rw-r--r--indra/newview/CMakeLists.txt12
-rw-r--r--indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--indra/newview/Info-SecondLife.plist2
-rw-r--r--indra/newview/app_settings/settings.xml73
-rw-r--r--indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tifbin0 -> 59044 bytes
-rw-r--r--indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tifbin0 -> 58560 bytes
-rw-r--r--indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tifbin0 -> 58464 bytes
-rw-r--r--indra/newview/gpu_table.txt18
-rw-r--r--indra/newview/installers/darwin/release-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/installers/windows/install_icon.icobin25214 -> 367958 bytes
-rw-r--r--indra/newview/installers/windows/uninstall_icon.icobin25214 -> 367958 bytes
-rw-r--r--indra/newview/linux_tools/client-readme.txt9
-rwxr-xr-xindra/newview/linux_tools/wrapper.sh10
-rw-r--r--indra/newview/llagent.cpp3123
-rw-r--r--indra/newview/llagent.h351
-rw-r--r--indra/newview/llagentaccess.cpp11
-rw-r--r--indra/newview/llagentaccess.h1
-rw-r--r--indra/newview/llagentcamera.cpp2869
-rw-r--r--indra/newview/llagentcamera.h400
-rw-r--r--indra/newview/llagentui.cpp11
-rw-r--r--indra/newview/llagentwearables.cpp945
-rw-r--r--indra/newview/llagentwearables.h9
-rw-r--r--indra/newview/llagentwearablesfetch.cpp516
-rw-r--r--indra/newview/llagentwearablesfetch.h118
-rw-r--r--indra/newview/llappearancemgr.cpp948
-rw-r--r--indra/newview/llappearancemgr.h56
-rw-r--r--indra/newview/llappviewer.cpp111
-rw-r--r--indra/newview/llappviewermacosx.cpp7
-rw-r--r--indra/newview/llappviewerwin32.cpp10
-rw-r--r--indra/newview/llassetuploadresponders.cpp39
-rw-r--r--indra/newview/llassetuploadresponders.h12
-rw-r--r--indra/newview/llaudiosourcevo.cpp4
-rw-r--r--indra/newview/llavataractions.cpp55
-rw-r--r--indra/newview/llavataractions.h19
-rw-r--r--indra/newview/llavatarlist.cpp51
-rw-r--r--indra/newview/llavatarlist.h19
-rw-r--r--indra/newview/llavatarlistitem.cpp10
-rw-r--r--indra/newview/llavatarlistitem.h4
-rw-r--r--indra/newview/llbottomtray.cpp87
-rw-r--r--indra/newview/llbottomtray.h13
-rw-r--r--indra/newview/llcallfloater.cpp31
-rw-r--r--indra/newview/llchatbar.cpp14
-rw-r--r--indra/newview/llchathistory.cpp113
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp1
-rw-r--r--indra/newview/llchatitemscontainerctrl.h3
-rw-r--r--indra/newview/llchiclet.cpp7
-rw-r--r--indra/newview/llclassifiedstatsresponder.cpp24
-rw-r--r--indra/newview/llclassifiedstatsresponder.h3
-rw-r--r--indra/newview/llcompilequeue.cpp26
-rw-r--r--indra/newview/llcompilequeue.h12
-rw-r--r--indra/newview/lldebugview.cpp2
-rw-r--r--indra/newview/lldrawable.cpp3
-rw-r--r--indra/newview/lldrawpool.cpp4
-rw-r--r--indra/newview/lldrawpoolalpha.cpp8
-rw-r--r--indra/newview/lldrawpoolbump.cpp8
-rw-r--r--indra/newview/lldrawpooltree.cpp4
-rw-r--r--indra/newview/lldriverparam.cpp13
-rw-r--r--indra/newview/llexpandabletextbox.cpp11
-rw-r--r--indra/newview/llexpandabletextbox.h2
-rw-r--r--indra/newview/llface.cpp25
-rw-r--r--indra/newview/llfasttimerview.cpp29
-rw-r--r--indra/newview/llfasttimerview.h4
-rw-r--r--indra/newview/llfavoritesbar.cpp2
-rw-r--r--indra/newview/llflexibleobject.cpp15
-rw-r--r--indra/newview/llfloateranimpreview.cpp13
-rw-r--r--indra/newview/llfloateravatarpicker.cpp8
-rw-r--r--indra/newview/llfloateravatarpicker.h4
-rw-r--r--indra/newview/llfloateravatartextures.cpp92
-rw-r--r--indra/newview/llfloaterbeacons.cpp10
-rw-r--r--indra/newview/llfloaterbulkpermission.cpp9
-rw-r--r--indra/newview/llfloaterbulkpermission.h4
-rw-r--r--indra/newview/llfloaterbuy.cpp10
-rw-r--r--indra/newview/llfloaterbuy.h2
-rw-r--r--indra/newview/llfloaterbuycontents.cpp9
-rw-r--r--indra/newview/llfloaterbuycontents.h2
-rw-r--r--indra/newview/llfloaterbuycurrency.cpp3
-rw-r--r--indra/newview/llfloatercamera.cpp61
-rw-r--r--indra/newview/llfloatercamera.h6
-rw-r--r--indra/newview/llfloaterevent.cpp53
-rw-r--r--indra/newview/llfloaterevent.h3
-rw-r--r--indra/newview/llfloatergesture.cpp71
-rw-r--r--indra/newview/llfloatergesture.h2
-rw-r--r--indra/newview/llfloatergodtools.cpp44
-rw-r--r--indra/newview/llfloatergodtools.h5
-rw-r--r--indra/newview/llfloatergroupinvite.cpp2
-rw-r--r--indra/newview/llfloatergroupinvite.h2
-rw-r--r--indra/newview/llfloaterimagepreview.cpp6
-rw-r--r--indra/newview/llfloaterinventory.cpp40
-rw-r--r--indra/newview/llfloaterinventory.h4
-rw-r--r--indra/newview/llfloaterlagmeter.cpp2
-rw-r--r--indra/newview/llfloaterland.cpp130
-rw-r--r--indra/newview/llfloaterland.h11
-rw-r--r--indra/newview/llfloatermap.cpp18
-rw-r--r--indra/newview/llfloatermap.h2
-rw-r--r--indra/newview/llfloatermediasettings.cpp6
-rw-r--r--indra/newview/llfloaternamedesc.cpp6
-rw-r--r--indra/newview/llfloaternotificationsconsole.cpp2
-rw-r--r--indra/newview/llfloateropenobject.cpp4
-rw-r--r--indra/newview/llfloaterpreference.cpp119
-rw-r--r--indra/newview/llfloaterpreference.h3
-rw-r--r--indra/newview/llfloaterproperties.cpp16
-rw-r--r--indra/newview/llfloaterregioninfo.cpp13
-rw-r--r--indra/newview/llfloaterregioninfo.h8
-rw-r--r--indra/newview/llfloaterreporter.cpp7
-rw-r--r--indra/newview/llfloaterreporter.h2
-rw-r--r--indra/newview/llfloaterscriptlimits.cpp114
-rw-r--r--indra/newview/llfloaterscriptlimits.h5
-rw-r--r--indra/newview/llfloatersellland.cpp4
-rw-r--r--indra/newview/llfloatersnapshot.cpp644
-rw-r--r--indra/newview/llfloatersnapshot.h16
-rw-r--r--indra/newview/llfloatertools.cpp8
-rw-r--r--indra/newview/llfloatertopobjects.cpp2
-rw-r--r--indra/newview/llfloatertopobjects.h2
-rw-r--r--indra/newview/llfloatertos.cpp44
-rw-r--r--indra/newview/llfloatertos.h7
-rw-r--r--indra/newview/llfloaterworldmap.cpp15
-rw-r--r--indra/newview/llfolderview.cpp66
-rw-r--r--indra/newview/llfolderview.h7
-rw-r--r--indra/newview/llfoldervieweventlistener.h2
-rw-r--r--indra/newview/llfolderviewitem.cpp431
-rw-r--r--indra/newview/llfolderviewitem.h10
-rw-r--r--indra/newview/llfriendcard.cpp33
-rw-r--r--indra/newview/llfriendcard.h4
-rw-r--r--indra/newview/llgesturemgr.cpp95
-rw-r--r--indra/newview/llgesturemgr.h8
-rw-r--r--indra/newview/llglsandbox.cpp117
-rw-r--r--indra/newview/llgroupactions.cpp8
-rw-r--r--indra/newview/llgroupactions.h5
-rw-r--r--indra/newview/llgrouplist.cpp2
-rw-r--r--indra/newview/llgrouplist.h5
-rw-r--r--indra/newview/llgroupmgr.cpp50
-rw-r--r--indra/newview/llgroupmgr.h12
-rw-r--r--indra/newview/llhudeffectlookat.cpp5
-rw-r--r--indra/newview/llhudeffectpointat.cpp3
-rw-r--r--indra/newview/llhudobject.cpp1
-rw-r--r--indra/newview/llhudrender.cpp12
-rw-r--r--indra/newview/llhudtext.cpp2
-rw-r--r--indra/newview/llimfloater.cpp75
-rw-r--r--indra/newview/llimfloater.h2
-rw-r--r--indra/newview/llimfloatercontainer.cpp2
-rw-r--r--indra/newview/llimview.cpp118
-rw-r--r--indra/newview/llimview.h41
-rw-r--r--indra/newview/llinspectavatar.cpp15
-rw-r--r--indra/newview/llinventorybridge.cpp1376
-rw-r--r--indra/newview/llinventorybridge.h448
-rw-r--r--indra/newview/llinventoryfilter.cpp5
-rw-r--r--indra/newview/llinventoryfunctions.cpp219
-rw-r--r--indra/newview/llinventoryfunctions.h208
-rw-r--r--indra/newview/llinventorymodel.cpp771
-rw-r--r--indra/newview/llinventorymodel.h273
-rw-r--r--indra/newview/llinventorymodelbackgroundfetch.cpp603
-rw-r--r--indra/newview/llinventorymodelbackgroundfetch.h119
-rw-r--r--indra/newview/llinventoryobserver.cpp59
-rw-r--r--indra/newview/llinventoryobserver.h82
-rw-r--r--indra/newview/llinventorypanel.cpp135
-rw-r--r--indra/newview/llinventorypanel.h39
-rw-r--r--indra/newview/lljoystickbutton.cpp49
-rw-r--r--indra/newview/lllandmarkactions.cpp1
-rw-r--r--indra/newview/lllocationhistory.cpp8
-rw-r--r--indra/newview/lllocationhistory.h17
-rw-r--r--indra/newview/lllocationinputctrl.cpp113
-rw-r--r--indra/newview/lllocationinputctrl.h6
-rw-r--r--indra/newview/lllogchat.cpp10
-rw-r--r--indra/newview/llloginhandler.cpp8
-rw-r--r--indra/newview/llmanip.cpp19
-rw-r--r--indra/newview/llmaniprotate.cpp40
-rw-r--r--indra/newview/llmanipscale.cpp17
-rw-r--r--indra/newview/llmaniptranslate.cpp23
-rw-r--r--indra/newview/llmediactrl.cpp25
-rw-r--r--indra/newview/llmediactrl.h1
-rw-r--r--indra/newview/llmenucommands.cpp4
-rw-r--r--indra/newview/llmorphview.cpp33
-rw-r--r--indra/newview/llmoveview.cpp56
-rw-r--r--indra/newview/llmoveview.h4
-rw-r--r--indra/newview/llmutelist.cpp52
-rw-r--r--indra/newview/llmutelist.h10
-rw-r--r--indra/newview/llnamelistctrl.cpp42
-rw-r--r--indra/newview/llnamelistctrl.h2
-rw-r--r--indra/newview/llnavigationbar.cpp6
-rw-r--r--indra/newview/llnearbychat.cpp19
-rw-r--r--indra/newview/llnearbychatbar.cpp70
-rw-r--r--indra/newview/llnearbychatbar.h5
-rw-r--r--indra/newview/llnearbychathandler.cpp41
-rw-r--r--indra/newview/llnetmap.cpp28
-rw-r--r--indra/newview/llnotificationhandler.h54
-rw-r--r--indra/newview/llnotificationhandlerutil.cpp272
-rw-r--r--indra/newview/llnotificationofferhandler.cpp55
-rw-r--r--indra/newview/llnotificationtiphandler.cpp27
-rw-r--r--indra/newview/lloutputmonitorctrl.cpp8
-rw-r--r--indra/newview/lloutputmonitorctrl.h10
-rw-r--r--indra/newview/llpanelavatar.cpp33
-rw-r--r--indra/newview/llpanelavatar.h3
-rw-r--r--indra/newview/llpanelblockedlist.cpp15
-rw-r--r--indra/newview/llpanelblockedlist.h2
-rw-r--r--indra/newview/llpanelclassified.cpp554
-rw-r--r--indra/newview/llpanelclassified.h109
-rw-r--r--indra/newview/llpanelcontents.cpp3
-rw-r--r--indra/newview/llpaneleditwearable.cpp29
-rw-r--r--indra/newview/llpaneleditwearable.h4
-rw-r--r--indra/newview/llpanelgroup.cpp12
-rw-r--r--indra/newview/llpanelgroupgeneral.cpp24
-rw-r--r--indra/newview/llpanelgroupgeneral.h2
-rw-r--r--indra/newview/llpanelgroupinvite.cpp12
-rw-r--r--indra/newview/llpanelgroupinvite.h2
-rw-r--r--indra/newview/llpanelgrouplandmoney.cpp2
-rw-r--r--indra/newview/llpanelgroupnotices.cpp3
-rw-r--r--indra/newview/llpanelgrouproles.cpp22
-rw-r--r--indra/newview/llpanelgrouproles.h2
-rw-r--r--indra/newview/llpanellandmarkinfo.cpp41
-rw-r--r--indra/newview/llpanellandmarks.cpp289
-rw-r--r--indra/newview/llpanellandmarks.h15
-rw-r--r--indra/newview/llpanellogin.cpp3
-rw-r--r--indra/newview/llpanelmaininventory.cpp60
-rw-r--r--indra/newview/llpanelmaininventory.h3
-rw-r--r--indra/newview/llpanelme.cpp3
-rw-r--r--indra/newview/llpanelnearbymedia.cpp141
-rw-r--r--indra/newview/llpanelnearbymedia.h4
-rw-r--r--indra/newview/llpanelobjectinventory.cpp58
-rw-r--r--indra/newview/llpanelobjectinventory.h6
-rw-r--r--indra/newview/llpaneloutfitedit.cpp528
-rw-r--r--indra/newview/llpaneloutfitedit.h126
-rw-r--r--indra/newview/llpaneloutfitsinventory.cpp165
-rw-r--r--indra/newview/llpaneloutfitsinventory.h4
-rw-r--r--indra/newview/llpanelpeople.cpp60
-rw-r--r--indra/newview/llpanelpeople.h6
-rw-r--r--indra/newview/llpanelpeoplemenus.cpp21
-rw-r--r--indra/newview/llpanelpeoplemenus.h4
-rw-r--r--indra/newview/llpanelpermissions.cpp4
-rw-r--r--indra/newview/llpanelpick.cpp18
-rw-r--r--indra/newview/llpanelpick.h2
-rw-r--r--indra/newview/llpanelpicks.cpp187
-rw-r--r--indra/newview/llpanelpicks.h50
-rw-r--r--indra/newview/llpanelplaceinfo.cpp2
-rw-r--r--indra/newview/llpanelplaceprofile.cpp8
-rw-r--r--indra/newview/llpanelplaces.cpp13
-rw-r--r--indra/newview/llpanelplaces.h2
-rw-r--r--indra/newview/llpanelprimmediacontrols.cpp5
-rw-r--r--indra/newview/llpanelprofile.cpp10
-rw-r--r--indra/newview/llpanelteleporthistory.cpp28
-rw-r--r--indra/newview/llpanelteleporthistory.h3
-rw-r--r--indra/newview/llpanelvolumepulldown.cpp14
-rw-r--r--indra/newview/llpanelvolumepulldown.h2
-rw-r--r--indra/newview/llparticipantlist.cpp12
-rw-r--r--indra/newview/llparticipantlist.h2
-rw-r--r--indra/newview/llplacesinventorybridge.cpp13
-rw-r--r--indra/newview/llplacesinventorybridge.h38
-rw-r--r--indra/newview/llplacesinventorypanel.cpp35
-rw-r--r--indra/newview/llpopupview.cpp238
-rw-r--r--indra/newview/llpopupview.h67
-rw-r--r--indra/newview/llpreview.cpp7
-rw-r--r--indra/newview/llpreviewanim.cpp23
-rw-r--r--indra/newview/llpreviewgesture.cpp33
-rw-r--r--indra/newview/llpreviewnotecard.cpp16
-rw-r--r--indra/newview/llpreviewnotecard.h1
-rw-r--r--indra/newview/llpreviewscript.cpp6
-rw-r--r--indra/newview/llprogressview.cpp24
-rw-r--r--indra/newview/llprogressview.h2
-rw-r--r--indra/newview/llrecentpeople.cpp2
-rw-r--r--indra/newview/llrecentpeople.h2
-rw-r--r--indra/newview/llscreenchannel.cpp13
-rw-r--r--indra/newview/llscriptfloater.cpp13
-rw-r--r--indra/newview/llscrollingpanelparam.cpp19
-rw-r--r--indra/newview/llselectmgr.cpp113
-rw-r--r--indra/newview/llselectmgr.h4
-rw-r--r--indra/newview/llsidepanelappearance.cpp77
-rw-r--r--indra/newview/llsidepanelappearance.h6
-rw-r--r--indra/newview/llsidepanelinventory.cpp2
-rw-r--r--indra/newview/llsidepaneliteminfo.cpp15
-rw-r--r--indra/newview/llsidepaneltaskinfo.cpp16
-rw-r--r--indra/newview/llsidepaneltaskinfo.h2
-rw-r--r--indra/newview/llsidetray.cpp4
-rw-r--r--indra/newview/llslurl.cpp16
-rw-r--r--indra/newview/llslurl.h5
-rw-r--r--indra/newview/llspatialpartition.cpp3
-rw-r--r--indra/newview/llspatialpartition.h1
-rw-r--r--indra/newview/llspeakers.cpp3
-rw-r--r--indra/newview/llspeakingindicatormanager.cpp47
-rw-r--r--indra/newview/llspeakingindicatormanager.h24
-rw-r--r--indra/newview/llsplitbutton.cpp7
-rw-r--r--indra/newview/llstartup.cpp61
-rw-r--r--indra/newview/llstatusbar.cpp76
-rw-r--r--indra/newview/llsurface.cpp3
-rw-r--r--indra/newview/llsyswellwindow.cpp37
-rw-r--r--indra/newview/llsyswellwindow.h3
-rw-r--r--indra/newview/lltexlayer.cpp37
-rw-r--r--indra/newview/lltexlayerparams.cpp4
-rw-r--r--indra/newview/lltexturecache.cpp368
-rw-r--r--indra/newview/lltexturecache.h16
-rw-r--r--indra/newview/lltexturectrl.cpp7
-rw-r--r--indra/newview/lltexturectrl.h2
-rw-r--r--indra/newview/lltexturefetch.cpp53
-rw-r--r--indra/newview/lltexturefetch.h2
-rw-r--r--indra/newview/lltextureview.cpp27
-rw-r--r--indra/newview/lltoast.cpp59
-rw-r--r--indra/newview/lltoast.h37
-rw-r--r--indra/newview/lltoastalertpanel.cpp3
-rw-r--r--indra/newview/lltoastnotifypanel.cpp231
-rw-r--r--indra/newview/lltoastnotifypanel.h51
-rw-r--r--indra/newview/lltoolcomp.cpp3
-rw-r--r--indra/newview/lltooldraganddrop.cpp516
-rw-r--r--indra/newview/lltooldraganddrop.h8
-rw-r--r--indra/newview/lltoolfocus.cpp55
-rw-r--r--indra/newview/lltoolgrab.cpp51
-rw-r--r--indra/newview/lltoolgun.cpp3
-rw-r--r--indra/newview/lltoolmgr.cpp19
-rw-r--r--indra/newview/lltoolmorph.cpp52
-rw-r--r--indra/newview/lltoolpie.cpp65
-rw-r--r--indra/newview/lltoolplacer.cpp6
-rw-r--r--indra/newview/lltoolselect.cpp7
-rw-r--r--indra/newview/lltracker.cpp12
-rw-r--r--indra/newview/lluploaddialog.cpp2
-rw-r--r--indra/newview/llurldispatcher.cpp60
-rw-r--r--indra/newview/llurllineeditorctrl.cpp7
-rw-r--r--indra/newview/llurllineeditorctrl.h2
-rw-r--r--indra/newview/llvieweraudio.cpp7
-rw-r--r--indra/newview/llviewercamera.cpp13
-rw-r--r--indra/newview/llviewerchat.cpp3
-rw-r--r--indra/newview/llviewercontrol.cpp18
-rw-r--r--indra/newview/llviewerdisplay.cpp26
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/llviewerinventory.cpp63
-rw-r--r--indra/newview/llviewerinventory.h6
-rw-r--r--indra/newview/llviewerjointmesh.cpp2
-rw-r--r--indra/newview/llviewerjoystick.cpp7
-rw-r--r--indra/newview/llviewerkeyboard.cpp97
-rw-r--r--indra/newview/llviewermedia.cpp468
-rw-r--r--indra/newview/llviewermedia.h35
-rw-r--r--indra/newview/llviewermediafocus.cpp13
-rw-r--r--indra/newview/llviewermenu.cpp452
-rw-r--r--indra/newview/llviewermenu.h1
-rw-r--r--indra/newview/llviewermenufile.cpp143
-rw-r--r--indra/newview/llviewermenufile.h14
-rw-r--r--indra/newview/llviewermessage.cpp265
-rw-r--r--indra/newview/llviewermessage.h8
-rw-r--r--indra/newview/llviewerobject.cpp56
-rw-r--r--indra/newview/llviewerobject.h6
-rw-r--r--indra/newview/llviewerobjectlist.cpp196
-rw-r--r--indra/newview/llviewerobjectlist.h31
-rw-r--r--indra/newview/llviewerparcelmedia.cpp49
-rw-r--r--indra/newview/llviewerparcelmediaautoplay.cpp18
-rw-r--r--indra/newview/llviewerparceloverlay.cpp6
-rw-r--r--indra/newview/llviewerregion.cpp44
-rw-r--r--indra/newview/llviewerstats.cpp11
-rw-r--r--indra/newview/llviewertexteditor.cpp7
-rw-r--r--indra/newview/llviewertexture.cpp309
-rw-r--r--indra/newview/llviewertexture.h8
-rw-r--r--indra/newview/llviewertexturelist.cpp14
-rw-r--r--indra/newview/llviewerwindow.cpp323
-rw-r--r--indra/newview/llviewerwindow.h9
-rw-r--r--indra/newview/llvoavatar.cpp83
-rw-r--r--indra/newview/llvoavatar.h4
-rw-r--r--indra/newview/llvoavatarself.cpp172
-rw-r--r--indra/newview/llvoavatarself.h15
-rw-r--r--indra/newview/llvoclouds.cpp4
-rw-r--r--indra/newview/llvograss.cpp4
-rw-r--r--indra/newview/llvoiceclient.cpp298
-rw-r--r--indra/newview/llvoiceclient.h15
-rw-r--r--indra/newview/llvoinventorylistener.h2
-rw-r--r--indra/newview/llvopartgroup.cpp4
-rw-r--r--indra/newview/llvosky.cpp5
-rw-r--r--indra/newview/llvotextbubble.cpp3
-rw-r--r--indra/newview/llvotree.cpp10
-rw-r--r--indra/newview/llvovolume.cpp44
-rw-r--r--indra/newview/llvowlsky.cpp2
-rw-r--r--indra/newview/llwaterparammanager.cpp3
-rw-r--r--indra/newview/llwearable.cpp131
-rw-r--r--indra/newview/llwearablelist.cpp5
-rw-r--r--indra/newview/llwearablelist.h6
-rw-r--r--indra/newview/llweb.cpp12
-rw-r--r--indra/newview/llweb.h4
-rw-r--r--indra/newview/llworld.cpp8
-rw-r--r--indra/newview/llworld.h2
-rw-r--r--indra/newview/llworldmap.h1
-rw-r--r--indra/newview/llworldmapview.cpp35
-rw-r--r--indra/newview/llxmlrpctransaction.cpp4
-rw-r--r--indra/newview/pipeline.cpp119
-rw-r--r--indra/newview/pipeline.h9
-rw-r--r--indra/newview/res-sdl/ll_icon.BMPbin5174 -> 262198 bytes
-rw-r--r--indra/newview/res-sdl/toolbuy.BMPbin0 -> 3126 bytes
-rw-r--r--indra/newview/res-sdl/toolopen.BMPbin0 -> 3126 bytes
-rw-r--r--indra/newview/res-sdl/toolsit.BMPbin0 -> 3126 bytes
-rw-r--r--indra/newview/res/ll_icon.icobin364590 -> 367958 bytes
-rw-r--r--indra/newview/res/ll_icon.pngbin73845 -> 29561 bytes
-rw-r--r--indra/newview/res/toolbuy.curbin0 -> 4286 bytes
-rw-r--r--indra/newview/res/toolopen.curbin0 -> 4286 bytes
-rw-r--r--indra/newview/res/toolsit.curbin0 -> 4286 bytes
-rw-r--r--indra/newview/res/viewerRes.rc35
-rw-r--r--indra/newview/secondlife.icnsbin135209 -> 180809 bytes
-rw-r--r--indra/newview/skins/default/colors.xml22
-rw-r--r--indra/newview/skins/default/textures/arrow_down.tgabin1068 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Generic_Group_Large.pngbin2282 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Inv_Object_Multi.pngbin0 -> 774 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_1.pngbin464 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_10.pngbin461 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_11.pngbin471 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_12.pngbin457 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_2.pngbin461 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_3.pngbin487 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_4.pngbin466 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_5.pngbin477 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_6.pngbin460 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_7.pngbin483 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_8.pngbin467 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Progress_9.pngbin483 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/SL_Logo.pngbin973 -> 3999 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/unknown_icon.pngbin0 -> 884 bytes
-rw-r--r--indra/newview/skins/default/textures/locked_image.j2cbin6140 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/map_infohub.tgabin1068 -> 0 bytes
-rw-r--r--indra/newview/skins/default/textures/navbar/BuyArrow_Over.pngbin2956 -> 294 bytes
-rw-r--r--indra/newview/skins/default/textures/navbar/BuyArrow_Press.pngbin2949 -> 294 bytes
-rw-r--r--indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.pngbin228 -> 749 bytes
-rw-r--r--indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.pngbin291 -> 790 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml190
-rw-r--r--indra/newview/skins/default/textures/windows/Icon_Gear_Background.pngbin373 -> 370 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.pngbin373 -> 371 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/Icon_Gear_Over.pngbin279 -> 293 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/Icon_Gear_Press.pngbin396 -> 365 bytes
-rw-r--r--indra/newview/skins/default/xui/da/floater_about.xml10
-rw-r--r--indra/newview/skins/default/xui/da/floater_about_land.xml61
-rw-r--r--indra/newview/skins/default/xui/da/floater_animation_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/da/floater_avatar_textures.xml55
-rw-r--r--indra/newview/skins/default/xui/da/floater_beacons.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_build_options.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_bulk_perms.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_buy_currency.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_buy_land.xml258
-rw-r--r--indra/newview/skins/default/xui/da/floater_camera.xml14
-rw-r--r--indra/newview/skins/default/xui/da/floater_color_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_customize.xml115
-rw-r--r--indra/newview/skins/default/xui/da/floater_event.xml72
-rw-r--r--indra/newview/skins/default/xui/da/floater_god_tools.xml11
-rw-r--r--indra/newview/skins/default/xui/da/floater_help_browser.xml7
-rw-r--r--indra/newview/skins/default/xui/da/floater_im.xml6
-rw-r--r--indra/newview/skins/default/xui/da/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_incoming_call.xml6
-rw-r--r--indra/newview/skins/default/xui/da/floater_inventory.xml8
-rw-r--r--indra/newview/skins/default/xui/da/floater_live_lsleditor.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_lsl_guide.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_media_browser.xml18
-rw-r--r--indra/newview/skins/default/xui/da/floater_moveview.xml17
-rw-r--r--indra/newview/skins/default/xui/da/floater_outfit_save_as.xml11
-rw-r--r--indra/newview/skins/default/xui/da/floater_outgoing_call.xml12
-rw-r--r--indra/newview/skins/default/xui/da/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_preferences.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_preview_gesture.xml3
-rw-r--r--indra/newview/skins/default/xui/da/floater_preview_notecard.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_preview_texture.xml7
-rw-r--r--indra/newview/skins/default/xui/da/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/da/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_script_limits.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_settings_debug.xml8
-rw-r--r--indra/newview/skins/default/xui/da/floater_snapshot.xml20
-rw-r--r--indra/newview/skins/default/xui/da/floater_sys_well.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_texture_ctrl.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_tools.xml56
-rw-r--r--indra/newview/skins/default/xui/da/floater_top_objects.xml63
-rw-r--r--indra/newview/skins/default/xui/da/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_voice_controls.xml17
-rw-r--r--indra/newview/skins/default/xui/da/floater_water.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_wearable_save_as.xml8
-rw-r--r--indra/newview/skins/default/xui/da/floater_whitelist_entry.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_windlight_options.xml148
-rw-r--r--indra/newview/skins/default/xui/da/floater_window_size.xml17
-rw-r--r--indra/newview/skins/default/xui/da/floater_world_map.xml59
-rw-r--r--indra/newview/skins/default/xui/da/inspect_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/da/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/da/menu_avatar_self.xml8
-rw-r--r--indra/newview/skins/default/xui/da/menu_im_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/da/menu_inventory.xml9
-rw-r--r--indra/newview/skins/default/xui/da/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/da/menu_mini_map.xml4
-rw-r--r--indra/newview/skins/default/xui/da/menu_notification_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/da/menu_object.xml13
-rw-r--r--indra/newview/skins/default/xui/da/menu_participant_list.xml18
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_nearby.xml3
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml1
-rw-r--r--indra/newview/skins/default/xui/da/menu_profile_overflow.xml7
-rw-r--r--indra/newview/skins/default/xui/da/menu_viewer.xml92
-rw-r--r--indra/newview/skins/default/xui/da/notifications.xml222
-rw-r--r--indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml16
-rw-r--r--indra/newview/skins/default/xui/da/panel_avatar_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml8
-rw-r--r--indra/newview/skins/default/xui/da/panel_classified_info.xml49
-rw-r--r--indra/newview/skins/default/xui/da/panel_edit_classified.xml19
-rw-r--r--indra/newview/skins/default/xui/da/panel_edit_pick.xml5
-rw-r--r--indra/newview/skins/default/xui/da/panel_edit_profile.xml5
-rw-r--r--indra/newview/skins/default/xui/da/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_control_panel.xml20
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_general.xml20
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml43
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_invite.xml11
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_land_money.xml107
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_notices.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_notify.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_roles.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_im_control_panel.xml36
-rw-r--r--indra/newview/skins/default/xui/da/panel_landmark_info.xml1
-rw-r--r--indra/newview/skins/default/xui/da/panel_landmarks.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_login.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_main_inventory.xml30
-rw-r--r--indra/newview/skins/default/xui/da/panel_me.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_media_settings_general.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_media_settings_security.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_my_profile.xml58
-rw-r--r--indra/newview/skins/default/xui/da/panel_navigation_bar.xml9
-rw-r--r--indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_nearby_media.xml67
-rw-r--r--indra/newview/skins/default/xui/da/panel_notes.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_online_status.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_outfits_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_people.xml20
-rw-r--r--indra/newview/skins/default/xui/da/panel_place_profile.xml28
-rw-r--r--indra/newview/skins/default/xui/da/panel_places.xml11
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_advanced.xml40
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_alerts.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_chat.xml24
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_general.xml21
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_privacy.xml5
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_setup.xml25
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_sound.xml19
-rw-r--r--indra/newview/skins/default/xui/da/panel_prim_media_controls.xml61
-rw-r--r--indra/newview/skins/default/xui/da/panel_profile.xml64
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_covenant.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_estate.xml11
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_general.xml24
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_general_layout.xml43
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_texture.xml12
-rw-r--r--indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml16
-rw-r--r--indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml20
-rw-r--r--indra/newview/skins/default/xui/da/panel_side_tray.xml25
-rw-r--r--indra/newview/skins/default/xui/da/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_teleport_history.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_teleport_history_item.xml4
-rw-r--r--indra/newview/skins/default/xui/da/sidepanel_appearance.xml11
-rw-r--r--indra/newview/skins/default/xui/da/sidepanel_item_info.xml57
-rw-r--r--indra/newview/skins/default/xui/da/sidepanel_task_info.xml92
-rw-r--r--indra/newview/skins/default/xui/da/strings.xml657
-rw-r--r--indra/newview/skins/default/xui/da/teleport_strings.xml3
-rw-r--r--indra/newview/skins/default/xui/de/floater_about_land.xml48
-rw-r--r--indra/newview/skins/default/xui/de/floater_avatar_picker.xml20
-rw-r--r--indra/newview/skins/default/xui/de/floater_avatar_textures.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_beacons.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_build_options.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_bulk_perms.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_buy_currency.xml10
-rw-r--r--indra/newview/skins/default/xui/de/floater_buy_land.xml6
-rw-r--r--indra/newview/skins/default/xui/de/floater_camera.xml14
-rw-r--r--indra/newview/skins/default/xui/de/floater_customize.xml38
-rw-r--r--indra/newview/skins/default/xui/de/floater_day_cycle_options.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_env_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_event.xml21
-rw-r--r--indra/newview/skins/default/xui/de/floater_gesture.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_god_tools.xml10
-rw-r--r--indra/newview/skins/default/xui/de/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_im_session.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_moveview.xml10
-rw-r--r--indra/newview/skins/default/xui/de/floater_pay.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/de/floater_region_info.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_report_abuse.xml10
-rw-r--r--indra/newview/skins/default/xui/de/floater_sell_land.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_sys_well.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_telehub.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_texture_ctrl.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_tools.xml24
-rw-r--r--indra/newview/skins/default/xui/de/floater_tos.xml8
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_controls.xml3
-rw-r--r--indra/newview/skins/default/xui/de/floater_water.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_windlight_options.xml6
-rw-r--r--indra/newview/skins/default/xui/de/floater_world_map.xml16
-rw-r--r--indra/newview/skins/default/xui/de/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/de/menu_inventory_add.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_land.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_mini_map.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_nearby.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_profile_overflow.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml15
-rw-r--r--indra/newview/skins/default/xui/de/mime_types.xml8
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml115
-rw-r--r--indra/newview/skins/default/xui/de/panel_bottomtray.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_classified_info.xml40
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_classified.xml27
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_jacket.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_pick.xml5
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_skin.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_invite.xml10
-rw-r--r--indra/newview/skins/default/xui/de/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_main_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_nearby_media.xml16
-rw-r--r--indra/newview/skins/default/xui/de/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_people.xml10
-rw-r--r--indra/newview/skins/default/xui/de/panel_place_profile.xml14
-rw-r--r--indra/newview/skins/default/xui/de/panel_places.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_advanced.xml5
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_alerts.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_chat.xml14
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_general.xml8
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_setup.xml5
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_sound.xml5
-rw-r--r--indra/newview/skins/default/xui/de/panel_profile.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_covenant.xml8
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_estate.xml18
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_general.xml26
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_general_layout.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_terrain.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_texture.xml24
-rw-r--r--indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/de/role_actions.xml4
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_task_info.xml7
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml253
-rw-r--r--indra/newview/skins/default/xui/de/teleport_strings.xml5
-rw-r--r--indra/newview/skins/default/xui/en/alert_line_editor.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_about.xml13
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml68
-rw-r--r--indra/newview/skins/default/xui/en/floater_animation_preview.xml30
-rw-r--r--indra/newview/skins/default/xui/en/floater_buy_currency.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_buy_land.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_camera.xml23
-rw-r--r--indra/newview/skins/default/xui/en/floater_customize.xml90
-rw-r--r--indra/newview/skins/default/xui/en/floater_env_settings.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_event.xml155
-rw-r--r--indra/newview/skins/default/xui/en/floater_god_tools.xml21
-rw-r--r--indra/newview/skins/default/xui/en/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml10
-rw-r--r--indra/newview/skins/default/xui/en/floater_inspect.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/en/floater_live_lsleditor.xml8
-rw-r--r--indra/newview/skins/default/xui/en/floater_map.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_moveview.xml24
-rw-r--r--indra/newview/skins/default/xui/en/floater_outfit_save_as.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_preferences.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_notecard.xml5
-rw-r--r--indra/newview/skins/default/xui/en/floater_publish_classified.xml82
-rw-r--r--indra/newview/skins/default/xui/en/floater_report_abuse.xml7
-rw-r--r--indra/newview/skins/default/xui/en/floater_script.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_sell_land.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml482
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_text_editor.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml299
-rw-r--r--indra/newview/skins/default/xui/en/floater_tos.xml9
-rw-r--r--indra/newview/skins/default/xui/en/floater_ui_preview.xml5
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_water.xml109
-rw-r--r--indra/newview/skins/default/xui/en/floater_wearable_save_as.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_windlight_options.xml741
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml17
-rw-r--r--indra/newview/skins/default/xui/en/inspect_object.xml1
-rw-r--r--indra/newview/skins/default/xui/en/inspector_info_ctrl.xml9
-rw-r--r--indra/newview/skins/default/xui/en/main_view.xml59
-rw-r--r--indra/newview/skins/default/xui/en/menu_edit.xml89
-rw-r--r--indra/newview/skins/default/xui/en/menu_group_plus.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_login.xml135
-rw-r--r--indra/newview/skins/default/xui/en/menu_object.xml47
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby.xml13
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_picks.xml15
-rw-r--r--indra/newview/skins/default/xui/en/menu_places_gear_folder.xml9
-rw-r--r--indra/newview/skins/default/xui/en/menu_profile_overflow.xml9
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml621
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml93
-rw-r--r--indra/newview/skins/default/xui/en/panel_avatar_list_item.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml49
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_header.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified_info.xml260
-rw-r--r--indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_alpha.xml53
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_classified.xml152
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_eyes.xml55
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_gloves.xml51
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_hair.xml55
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_jacket.xml61
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_pants.xml51
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_pick.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_profile.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_shape.xml90
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_shirt.xml47
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_shoes.xml51
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_skin.xml57
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_skirt.xml51
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_socks.xml51
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_tattoo.xml37
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_underpants.xml51
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_undershirt.xml51
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_wearable.xml68
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_general.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml67
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_invite.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_notices.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_roles.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_im_control_panel.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_landmark_info.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_landmarks.xml100
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_main_inventory.xml604
-rw-r--r--indra/newview/skins/default/xui/en/panel_my_profile.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_nearby_media.xml32
-rw-r--r--indra/newview/skins/default/xui/en/panel_online_status_toast.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfit_edit.xml349
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory.xml78
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml300
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_list_item.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_place_profile.xml30
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_advanced.xml50
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_alerts.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_general.xml50
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml35
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml9
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_setup.xml98
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_sound.xml20
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml41
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_covenant.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_estate.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_general.xml46
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_general_layout.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_texture.xml232
-rw-r--r--indra/newview/skins/default/xui/en/panel_script_ed.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_scrolling_param.xml32
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml42
-rw-r--r--indra/newview/skins/default/xui/en/panel_teleport_history.xml69
-rw-r--r--indra/newview/skins/default/xui/en/panel_volume_pulldown.xml4
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_appearance.xml17
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_item_info.xml2
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_task_info.xml16
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml100
-rw-r--r--indra/newview/skins/default/xui/en/teleport_strings.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/expandable_text.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/line_editor.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/search_editor.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/slider_bar.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/text.xml1
-rw-r--r--indra/newview/skins/default/xui/es/floater_about.xml16
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml92
-rw-r--r--indra/newview/skins/default/xui/es/floater_animation_preview.xml26
-rw-r--r--indra/newview/skins/default/xui/es/floater_avatar_textures.xml55
-rw-r--r--indra/newview/skins/default/xui/es/floater_build_options.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_buy_currency.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_buy_land.xml258
-rw-r--r--indra/newview/skins/default/xui/es/floater_camera.xml12
-rw-r--r--indra/newview/skins/default/xui/es/floater_customize.xml120
-rw-r--r--indra/newview/skins/default/xui/es/floater_event.xml72
-rw-r--r--indra/newview/skins/default/xui/es/floater_gesture.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_god_tools.xml119
-rw-r--r--indra/newview/skins/default/xui/es/floater_help_browser.xml7
-rw-r--r--indra/newview/skins/default/xui/es/floater_im.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_incoming_call.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_inventory.xml8
-rw-r--r--indra/newview/skins/default/xui/es/floater_joystick.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_live_lsleditor.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_lsl_guide.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_media_browser.xml8
-rw-r--r--indra/newview/skins/default/xui/es/floater_moveview.xml14
-rw-r--r--indra/newview/skins/default/xui/es/floater_outfit_save_as.xml12
-rw-r--r--indra/newview/skins/default/xui/es/floater_outgoing_call.xml12
-rw-r--r--indra/newview/skins/default/xui/es/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_preferences.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_preview_gesture.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_preview_notecard.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_preview_sound.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_preview_texture.xml7
-rw-r--r--indra/newview/skins/default/xui/es/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/es/floater_script_limits.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_settings_debug.xml8
-rw-r--r--indra/newview/skins/default/xui/es/floater_snapshot.xml19
-rw-r--r--indra/newview/skins/default/xui/es/floater_sys_well.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_tools.xml48
-rw-r--r--indra/newview/skins/default/xui/es/floater_top_objects.xml69
-rw-r--r--indra/newview/skins/default/xui/es/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_voice_controls.xml17
-rw-r--r--indra/newview/skins/default/xui/es/floater_water.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_wearable_save_as.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_whitelist_entry.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_windlight_options.xml18
-rw-r--r--indra/newview/skins/default/xui/es/floater_window_size.xml17
-rw-r--r--indra/newview/skins/default/xui/es/floater_world_map.xml53
-rw-r--r--indra/newview/skins/default/xui/es/inspect_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/es/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/es/menu_avatar_self.xml8
-rw-r--r--indra/newview/skins/default/xui/es/menu_im_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_inventory.xml9
-rw-r--r--indra/newview/skins/default/xui/es/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_mini_map.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_notification_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/es/menu_object.xml13
-rw-r--r--indra/newview/skins/default/xui/es/menu_participant_list.xml18
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_nearby.xml3
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml1
-rw-r--r--indra/newview/skins/default/xui/es/menu_profile_overflow.xml7
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml90
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml821
-rw-r--r--indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml16
-rw-r--r--indra/newview/skins/default/xui/es/panel_avatar_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml8
-rw-r--r--indra/newview/skins/default/xui/es/panel_classified_info.xml49
-rw-r--r--indra/newview/skins/default/xui/es/panel_edit_classified.xml19
-rw-r--r--indra/newview/skins/default/xui/es/panel_edit_pick.xml5
-rw-r--r--indra/newview/skins/default/xui/es/panel_edit_profile.xml5
-rw-r--r--indra/newview/skins/default/xui/es/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_control_panel.xml20
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_general.xml22
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml43
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_invite.xml11
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_land_money.xml107
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_notices.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_roles.xml16
-rw-r--r--indra/newview/skins/default/xui/es/panel_im_control_panel.xml36
-rw-r--r--indra/newview/skins/default/xui/es/panel_landmark_info.xml1
-rw-r--r--indra/newview/skins/default/xui/es/panel_landmarks.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_login.xml14
-rw-r--r--indra/newview/skins/default/xui/es/panel_main_inventory.xml30
-rw-r--r--indra/newview/skins/default/xui/es/panel_me.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_media_settings_general.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_media_settings_security.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_my_profile.xml58
-rw-r--r--indra/newview/skins/default/xui/es/panel_navigation_bar.xml9
-rw-r--r--indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_nearby_media.xml67
-rw-r--r--indra/newview/skins/default/xui/es/panel_notes.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_online_status.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_outfits_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_people.xml26
-rw-r--r--indra/newview/skins/default/xui/es/panel_place_profile.xml18
-rw-r--r--indra/newview/skins/default/xui/es/panel_places.xml11
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_advanced.xml42
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_alerts.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_chat.xml24
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_general.xml25
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml19
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_privacy.xml7
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_setup.xml25
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_sound.xml19
-rw-r--r--indra/newview/skins/default/xui/es/panel_prim_media_controls.xml61
-rw-r--r--indra/newview/skins/default/xui/es/panel_profile.xml64
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_covenant.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_estate.xml11
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_general.xml33
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_general_layout.xml43
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_texture.xml8
-rw-r--r--indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml16
-rw-r--r--indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml20
-rw-r--r--indra/newview/skins/default/xui/es/panel_side_tray.xml25
-rw-r--r--indra/newview/skins/default/xui/es/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_teleport_history.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_teleport_history_item.xml4
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_appearance.xml11
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_item_info.xml55
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_task_info.xml100
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml642
-rw-r--r--indra/newview/skins/default/xui/es/teleport_strings.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about_land.xml48
-rw-r--r--indra/newview/skins/default/xui/fr/floater_bulk_perms.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/floater_buy_currency.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/floater_camera.xml14
-rw-r--r--indra/newview/skins/default/xui/fr/floater_color_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_customize.xml22
-rw-r--r--indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/floater_event.xml21
-rw-r--r--indra/newview/skins/default/xui/fr/floater_gesture.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/floater_god_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_lagmeter.xml18
-rw-r--r--indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/floater_moveview.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/floater_nearby_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_perm_prefs.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_preferences.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_preview_texture.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/fr/floater_snapshot.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_sys_well.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tools.xml26
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_voice_controls.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/floater_water.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/floater_windlight_options.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/floater_world_map.xml53
-rw-r--r--indra/newview/skins/default/xui/fr/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/menu_attachment_other.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_avatar_other.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_avatar_self.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_inventory_add.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/menu_land.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_mini_map.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_people_nearby.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/menu_profile_overflow.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml45
-rw-r--r--indra/newview/skins/default/xui/fr/mime_types_linux.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/mime_types_mac.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml51
-rw-r--r--indra/newview/skins/default/xui/fr/panel_classified_info.xml36
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_classified.xml29
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_gloves.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_jacket.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_pants.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_pick.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_profile.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_shirt.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_shoes.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_skirt.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_socks.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_underpants.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_wearable.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_group_roles.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_landmark_info.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_login.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_main_inventory.xml30
-rw-r--r--indra/newview/skins/default/xui/fr/panel_media_settings_general.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_my_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_navigation_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_nearby_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_nearby_media.xml24
-rw-r--r--indra/newview/skins/default/xui/fr/panel_notes.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_people.xml12
-rw-r--r--indra/newview/skins/default/xui/fr/panel_place_profile.xml70
-rw-r--r--indra/newview/skins/default/xui/fr/panel_places.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_chat.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_general.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_setup.xml9
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_sound.xml7
-rw-r--r--indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_profile.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_covenant.xml7
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_estate.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_general.xml28
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_general_layout.xml14
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_texture.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/role_actions.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/sidepanel_task_info.xml43
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml225
-rw-r--r--indra/newview/skins/default/xui/fr/teleport_strings.xml5
-rw-r--r--indra/newview/skins/default/xui/it/floater_about.xml28
-rw-r--r--indra/newview/skins/default/xui/it/floater_about_land.xml80
-rw-r--r--indra/newview/skins/default/xui/it/floater_activeim.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_animation_preview.xml71
-rw-r--r--indra/newview/skins/default/xui/it/floater_auction.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_avatar_picker.xml8
-rw-r--r--indra/newview/skins/default/xui/it/floater_avatar_textures.xml57
-rw-r--r--indra/newview/skins/default/xui/it/floater_beacons.xml12
-rw-r--r--indra/newview/skins/default/xui/it/floater_build_options.xml10
-rw-r--r--indra/newview/skins/default/xui/it/floater_bulk_perms.xml26
-rw-r--r--indra/newview/skins/default/xui/it/floater_buy_contents.xml3
-rw-r--r--indra/newview/skins/default/xui/it/floater_buy_currency.xml26
-rw-r--r--indra/newview/skins/default/xui/it/floater_buy_land.xml274
-rw-r--r--indra/newview/skins/default/xui/it/floater_buy_object.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_camera.xml28
-rw-r--r--indra/newview/skins/default/xui/it/floater_color_picker.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_customize.xml112
-rw-r--r--indra/newview/skins/default/xui/it/floater_device_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_event.xml72
-rw-r--r--indra/newview/skins/default/xui/it/floater_gesture.xml20
-rw-r--r--indra/newview/skins/default/xui/it/floater_god_tools.xml11
-rw-r--r--indra/newview/skins/default/xui/it/floater_hardware_settings.xml5
-rw-r--r--indra/newview/skins/default/xui/it/floater_help_browser.xml9
-rw-r--r--indra/newview/skins/default/xui/it/floater_hud.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_im.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_im_session.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_image_preview.xml16
-rw-r--r--indra/newview/skins/default/xui/it/floater_incoming_call.xml14
-rw-r--r--indra/newview/skins/default/xui/it/floater_inventory.xml10
-rw-r--r--indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_lagmeter.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_land_holdings.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_live_lsleditor.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_lsl_guide.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_media_browser.xml8
-rw-r--r--indra/newview/skins/default/xui/it/floater_media_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_mem_leaking.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_moveview.xml40
-rw-r--r--indra/newview/skins/default/xui/it/floater_mute_object.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_nearby_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_outfit_save_as.xml12
-rw-r--r--indra/newview/skins/default/xui/it/floater_outgoing_call.xml30
-rw-r--r--indra/newview/skins/default/xui/it/floater_pay.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_pay_object.xml8
-rw-r--r--indra/newview/skins/default/xui/it/floater_perm_prefs.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_postcard.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_preferences.xml12
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_gesture.xml11
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_notecard.xml8
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_sound.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_texture.xml23
-rw-r--r--indra/newview/skins/default/xui/it/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/it/floater_region_info.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_report_abuse.xml14
-rw-r--r--indra/newview/skins/default/xui/it/floater_script_limits.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_script_queue.xml8
-rw-r--r--indra/newview/skins/default/xui/it/floater_search.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_sell_land.xml28
-rw-r--r--indra/newview/skins/default/xui/it/floater_settings_debug.xml10
-rw-r--r--indra/newview/skins/default/xui/it/floater_snapshot.xml23
-rw-r--r--indra/newview/skins/default/xui/it/floater_stats.xml78
-rw-r--r--indra/newview/skins/default/xui/it/floater_sys_well.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_telehub.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_texture_ctrl.xml12
-rw-r--r--indra/newview/skins/default/xui/it/floater_tools.xml130
-rw-r--r--indra/newview/skins/default/xui/it/floater_top_objects.xml69
-rw-r--r--indra/newview/skins/default/xui/it/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_voice_controls.xml27
-rw-r--r--indra/newview/skins/default/xui/it/floater_water.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_wearable_save_as.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_whitelist_entry.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_windlight_options.xml34
-rw-r--r--indra/newview/skins/default/xui/it/floater_window_size.xml17
-rw-r--r--indra/newview/skins/default/xui/it/floater_world_map.xml72
-rw-r--r--indra/newview/skins/default/xui/it/inspect_avatar.xml14
-rw-r--r--indra/newview/skins/default/xui/it/inspect_group.xml12
-rw-r--r--indra/newview/skins/default/xui/it/inspect_object.xml16
-rw-r--r--indra/newview/skins/default/xui/it/inspect_remote_object.xml2
-rw-r--r--indra/newview/skins/default/xui/it/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_attachment_other.xml10
-rw-r--r--indra/newview/skins/default/xui/it/menu_attachment_self.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_avatar_icon.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_avatar_other.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_avatar_self.xml16
-rw-r--r--indra/newview/skins/default/xui/it/menu_bottomtray.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_favorites.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_gesture_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_group_plus.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_hide_navbar.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_im_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_imchiclet_group.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml10
-rw-r--r--indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml12
-rw-r--r--indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_inventory.xml27
-rw-r--r--indra/newview/skins/default/xui/it/menu_inventory_add.xml44
-rw-r--r--indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml14
-rw-r--r--indra/newview/skins/default/xui/it/menu_land.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_landmark.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_login.xml20
-rw-r--r--indra/newview/skins/default/xui/it/menu_mini_map.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_navbar.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_nearby_chat.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_notification_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_object.xml23
-rw-r--r--indra/newview/skins/default/xui/it/menu_participant_list.xml20
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_nearby.xml5
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml3
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml10
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_picks.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_picks_plus.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_place.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_place_add_button.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_places_gear_folder.xml12
-rw-r--r--indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml18
-rw-r--r--indra/newview/skins/default/xui/it/menu_profile_overflow.xml7
-rw-r--r--indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_teleport_history_item.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_text_editor.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_agent.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_group.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_http.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_inventory.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_map.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_objectim.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_parcel.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_slapp.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_slurl.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_url_teleport.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml410
-rw-r--r--indra/newview/skins/default/xui/it/mime_types_linux.xml42
-rw-r--r--indra/newview/skins/default/xui/it/mime_types_mac.xml16
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml663
-rw-r--r--indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml16
-rw-r--r--indra/newview/skins/default/xui/it/panel_avatar_list_item.xml15
-rw-r--r--indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_bottomtray.xml25
-rw-r--r--indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_classified_info.xml51
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_alpha.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_classified.xml35
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_hair.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_pick.xml13
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_profile.xml25
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_shape.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_shirt.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_skin.xml12
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_socks.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_tattoo.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_wearable.xml38
-rw-r--r--indra/newview/skins/default/xui/it/panel_friends.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_control_panel.xml20
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_general.xml40
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml47
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_invite.xml14
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_land_money.xml124
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_notices.xml20
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_notify.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_roles.xml33
-rw-r--r--indra/newview/skins/default/xui/it/panel_im_control_panel.xml36
-rw-r--r--indra/newview/skins/default/xui/it/panel_landmark_info.xml23
-rw-r--r--indra/newview/skins/default/xui/it/panel_landmarks.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_login.xml21
-rw-r--r--indra/newview/skins/default/xui/it/panel_main_inventory.xml90
-rw-r--r--indra/newview/skins/default/xui/it/panel_me.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_media_settings_general.xml22
-rw-r--r--indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_media_settings_security.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_my_profile.xml58
-rw-r--r--indra/newview/skins/default/xui/it/panel_navigation_bar.xml15
-rw-r--r--indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_nearby_media.xml67
-rw-r--r--indra/newview/skins/default/xui/it/panel_notes.xml14
-rw-r--r--indra/newview/skins/default/xui/it/panel_online_status.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_outfits_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml12
-rw-r--r--indra/newview/skins/default/xui/it/panel_people.xml34
-rw-r--r--indra/newview/skins/default/xui/it/panel_pick_info.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_picks.xml18
-rw-r--r--indra/newview/skins/default/xui/it/panel_place_profile.xml90
-rw-r--r--indra/newview/skins/default/xui/it/panel_places.xml15
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_advanced.xml58
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_alerts.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_chat.xml26
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_general.xml35
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml10
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_privacy.xml26
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_setup.xml39
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_sound.xml29
-rw-r--r--indra/newview/skins/default/xui/it/panel_prim_media_controls.xml73
-rw-r--r--indra/newview/skins/default/xui/it/panel_profile.xml64
-rw-r--r--indra/newview/skins/default/xui/it/panel_profile_view.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_covenant.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_debug.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_estate.xml11
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_general.xml34
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_general_layout.xml43
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_texture.xml12
-rw-r--r--indra/newview/skins/default/xui/it/panel_script_ed.xml22
-rw-r--r--indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml16
-rw-r--r--indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml20
-rw-r--r--indra/newview/skins/default/xui/it/panel_side_tray.xml27
-rw-r--r--indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_status_bar.xml10
-rw-r--r--indra/newview/skins/default/xui/it/panel_teleport_history.xml18
-rw-r--r--indra/newview/skins/default/xui/it/panel_teleport_history_item.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_world_map.xml2
-rw-r--r--indra/newview/skins/default/xui/it/role_actions.xml112
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_appearance.xml11
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_item_info.xml63
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_task_info.xml126
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml1158
-rw-r--r--indra/newview/skins/default/xui/it/teleport_strings.xml11
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml93
-rw-r--r--indra/newview/skins/default/xui/ja/floater_buy_contents.xml12
-rw-r--r--indra/newview/skins/default/xui/ja/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_buy_land.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_buy_object.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/floater_camera.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/floater_customize.xml16
-rw-r--r--indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml16
-rw-r--r--indra/newview/skins/default/xui/ja/floater_event.xml21
-rw-r--r--indra/newview/skins/default/xui/ja/floater_gesture.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_god_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_moveview.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/floater_pay.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_gesture.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_sound.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/ja/floater_report_abuse.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/floater_snapshot.xml32
-rw-r--r--indra/newview/skins/default/xui/ja/floater_sys_well.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tools.xml28
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_controls.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/floater_water.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_world_map.xml30
-rw-r--r--indra/newview/skins/default/xui/ja/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/menu_inventory.xml28
-rw-r--r--indra/newview/skins/default/xui/ja/menu_mini_map.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_object.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/menu_people_nearby.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_profile_overflow.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml174
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml83
-rw-r--r--indra/newview/skins/default/xui/ja/panel_classified_info.xml40
-rw-r--r--indra/newview/skins/default/xui/ja/panel_edit_classified.xml27
-rw-r--r--indra/newview/skins/default/xui/ja/panel_edit_pick.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_general.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_land_money.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_roles.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_main_inventory.xml30
-rw-r--r--indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_nearby_media.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_people.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/panel_place_profile.xml20
-rw-r--r--indra/newview/skins/default/xui/ja/panel_places.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_chat.xml12
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_general.xml18
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_setup.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_sound.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_covenant.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_estate.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_general.xml26
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_general_layout.xml22
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_texture.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/panel_side_tray.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_teleport_history.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_appearance.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_task_info.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml255
-rw-r--r--indra/newview/skins/default/xui/ja/teleport_strings.xml27
-rw-r--r--indra/newview/skins/default/xui/nl/floater_about_land.xml26
-rw-r--r--indra/newview/skins/default/xui/nl/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/nl/menu_mini_map.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_about.xml26
-rw-r--r--indra/newview/skins/default/xui/pl/floater_about_land.xml476
-rw-r--r--indra/newview/skins/default/xui/pl/floater_activeim.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_animation_preview.xml309
-rw-r--r--indra/newview/skins/default/xui/pl/floater_auction.xml18
-rw-r--r--indra/newview/skins/default/xui/pl/floater_avatar_picker.xml48
-rw-r--r--indra/newview/skins/default/xui/pl/floater_avatar_textures.xml65
-rw-r--r--indra/newview/skins/default/xui/pl/floater_beacons.xml24
-rw-r--r--indra/newview/skins/default/xui/pl/floater_build_options.xml15
-rw-r--r--indra/newview/skins/default/xui/pl/floater_bulk_perms.xml62
-rw-r--r--indra/newview/skins/default/xui/pl/floater_bumps.xml29
-rw-r--r--indra/newview/skins/default/xui/pl/floater_buy_contents.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/floater_buy_currency.xml81
-rw-r--r--indra/newview/skins/default/xui/pl/floater_buy_land.xml268
-rw-r--r--indra/newview/skins/default/xui/pl/floater_buy_object.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/floater_camera.xml33
-rw-r--r--indra/newview/skins/default/xui/pl/floater_choose_group.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/floater_color_picker.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/floater_customize.xml223
-rw-r--r--indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/floater_device_settings.xml5
-rw-r--r--indra/newview/skins/default/xui/pl/floater_env_settings.xml22
-rw-r--r--indra/newview/skins/default/xui/pl/floater_event.xml72
-rw-r--r--indra/newview/skins/default/xui/pl/floater_gesture.xml37
-rw-r--r--indra/newview/skins/default/xui/pl/floater_god_tools.xml81
-rw-r--r--indra/newview/skins/default/xui/pl/floater_hardware_settings.xml28
-rw-r--r--indra/newview/skins/default/xui/pl/floater_help_browser.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/floater_hud.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/floater_im.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_im_session.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/floater_image_preview.xml28
-rw-r--r--indra/newview/skins/default/xui/pl/floater_incoming_call.xml27
-rw-r--r--indra/newview/skins/default/xui/pl/floater_inspect.xml19
-rw-r--r--indra/newview/skins/default/xui/pl/floater_inventory.xml57
-rw-r--r--indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml90
-rw-r--r--indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_joystick.xml188
-rw-r--r--indra/newview/skins/default/xui/pl/floater_lagmeter.xml239
-rw-r--r--indra/newview/skins/default/xui/pl/floater_land_holdings.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml21
-rw-r--r--indra/newview/skins/default/xui/pl/floater_lsl_guide.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_media_browser.xml18
-rw-r--r--indra/newview/skins/default/xui/pl/floater_media_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/floater_mem_leaking.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/floater_moveview.xml54
-rw-r--r--indra/newview/skins/default/xui/pl/floater_mute_object.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_my_friends.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/floater_nearby_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_openobject.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/floater_outgoing_call.xml40
-rw-r--r--indra/newview/skins/default/xui/pl/floater_pay.xml30
-rw-r--r--indra/newview/skins/default/xui/pl/floater_pay_object.xml45
-rw-r--r--indra/newview/skins/default/xui/pl/floater_perm_prefs.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/floater_post_process.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/floater_postcard.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preferences.xml19
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_animation.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_classified.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_event.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_gesture.xml54
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml15
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_notecard.xml22
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_sound.xml13
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_texture.xml42
-rw-r--r--indra/newview/skins/default/xui/pl/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/pl/floater_region_info.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/floater_report_abuse.xml60
-rw-r--r--indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_script_limits.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_script_preview.xml5
-rw-r--r--indra/newview/skins/default/xui/pl/floater_script_queue.xml19
-rw-r--r--indra/newview/skins/default/xui/pl/floater_script_search.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/floater_search.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/floater_select_key.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/floater_sell_land.xml125
-rw-r--r--indra/newview/skins/default/xui/pl/floater_settings_debug.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/floater_snapshot.xml70
-rw-r--r--indra/newview/skins/default/xui/pl/floater_sound_preview.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/floater_stats.xml54
-rw-r--r--indra/newview/skins/default/xui/pl/floater_sys_well.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/floater_telehub.xml25
-rw-r--r--indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/floater_tools.xml587
-rw-r--r--indra/newview/skins/default/xui/pl/floater_top_objects.xml79
-rw-r--r--indra/newview/skins/default/xui/pl/floater_tos.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/floater_voice_controls.xml26
-rw-r--r--indra/newview/skins/default/xui/pl/floater_water.xml90
-rw-r--r--indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/floater_windlight_options.xml189
-rw-r--r--indra/newview/skins/default/xui/pl/floater_window_size.xml17
-rw-r--r--indra/newview/skins/default/xui/pl/floater_world_map.xml123
-rw-r--r--indra/newview/skins/default/xui/pl/inspect_avatar.xml21
-rw-r--r--indra/newview/skins/default/xui/pl/inspect_group.xml22
-rw-r--r--indra/newview/skins/default/xui/pl/inspect_object.xml34
-rw-r--r--indra/newview/skins/default/xui/pl/inspect_remote_object.xml13
-rw-r--r--indra/newview/skins/default/xui/pl/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/menu_attachment_self.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/menu_avatar_self.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/menu_bottomtray.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_favorites.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/menu_hide_navbar.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_im_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_inventory.xml69
-rw-r--r--indra/newview/skins/default/xui/pl/menu_inventory_add.xml46
-rw-r--r--indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml18
-rw-r--r--indra/newview/skins/default/xui/pl/menu_land.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/menu_landmark.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/menu_login.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/menu_mini_map.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/menu_navbar.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/menu_nearby_chat.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/menu_notification_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_object.xml17
-rw-r--r--indra/newview/skins/default/xui/pl/menu_participant_list.xml18
-rw-r--r--indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/menu_people_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_people_nearby.xml3
-rw-r--r--indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml1
-rw-r--r--indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/menu_picks_plus.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/menu_place.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_place_add_button.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/menu_profile_overflow.xml7
-rw-r--r--indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/menu_url_agent.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/menu_url_group.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_url_http.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/menu_url_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_url_map.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_url_objectim.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/menu_url_parcel.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_url_slurl.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/menu_viewer.xml82
-rw-r--r--indra/newview/skins/default/xui/pl/mime_types.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/mime_types_linux.xml217
-rw-r--r--indra/newview/skins/default/xui/pl/mime_types_mac.xml217
-rw-r--r--indra/newview/skins/default/xui/pl/notifications.xml1370
-rw-r--r--indra/newview/skins/default/xui/pl/panel_active_object_row.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/panel_audio_device.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml26
-rw-r--r--indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/panel_bottomtray.xml38
-rw-r--r--indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/panel_classified_info.xml53
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_alpha.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_classified.xml48
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_eyes.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_gloves.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_hair.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_jacket.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_pants.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_pick.xml31
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_profile.xml94
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_shape.xml23
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_shirt.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_shoes.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_skin.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_skirt.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_socks.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_underpants.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_wearable.xml101
-rw-r--r--indra/newview/skins/default/xui/pl/panel_friends.xml37
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_general.xml95
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml35
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_invite.xml32
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_land_money.xml129
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_list_item.xml5
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_notices.xml53
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_notify.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_roles.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/panel_im_control_panel.xml29
-rw-r--r--indra/newview/skins/default/xui/pl/panel_landmark_info.xml38
-rw-r--r--indra/newview/skins/default/xui/pl/panel_landmarks.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/panel_login.xml54
-rw-r--r--indra/newview/skins/default/xui/pl/panel_main_inventory.xml82
-rw-r--r--indra/newview/skins/default/xui/pl/panel_me.xml7
-rw-r--r--indra/newview/skins/default/xui/pl/panel_media_settings_general.xml32
-rw-r--r--indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml20
-rw-r--r--indra/newview/skins/default/xui/pl/panel_media_settings_security.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/panel_my_profile.xml35
-rw-r--r--indra/newview/skins/default/xui/pl/panel_navigation_bar.xml18
-rw-r--r--indra/newview/skins/default/xui/pl/panel_nearby_chat.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/panel_nearby_media.xml67
-rw-r--r--indra/newview/skins/default/xui/pl/panel_notes.xml23
-rw-r--r--indra/newview/skins/default/xui/pl/panel_online_status.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/panel_people.xml59
-rw-r--r--indra/newview/skins/default/xui/pl/panel_pick_info.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/panel_picks.xml20
-rw-r--r--indra/newview/skins/default/xui/pl/panel_place_profile.xml111
-rw-r--r--indra/newview/skins/default/xui/pl/panel_places.xml15
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml44
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_chat.xml22
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_general.xml120
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml213
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml48
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_setup.xml63
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_sound.xml17
-rw-r--r--indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml79
-rw-r--r--indra/newview/skins/default/xui/pl/panel_profile.xml41
-rw-r--r--indra/newview/skins/default/xui/pl/panel_profile_view.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/panel_region_covenant.xml22
-rw-r--r--indra/newview/skins/default/xui/pl/panel_region_debug.xml20
-rw-r--r--indra/newview/skins/default/xui/pl/panel_region_estate.xml21
-rw-r--r--indra/newview/skins/default/xui/pl/panel_region_general.xml46
-rw-r--r--indra/newview/skins/default/xui/pl/panel_region_general_layout.xml43
-rw-r--r--indra/newview/skins/default/xui/pl/panel_region_terrain.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/panel_region_texture.xml32
-rw-r--r--indra/newview/skins/default/xui/pl/panel_script_ed.xml43
-rw-r--r--indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml20
-rw-r--r--indra/newview/skins/default/xui/pl/panel_side_tray.xml29
-rw-r--r--indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml5
-rw-r--r--indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/panel_status_bar.xml60
-rw-r--r--indra/newview/skins/default/xui/pl/panel_teleport_history.xml18
-rw-r--r--indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/panel_world_map.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/role_actions.xml239
-rw-r--r--indra/newview/skins/default/xui/pl/sidepanel_appearance.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/sidepanel_inventory.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/sidepanel_item_info.xml73
-rw-r--r--indra/newview/skins/default/xui/pl/sidepanel_task_info.xml129
-rw-r--r--indra/newview/skins/default/xui/pl/strings.xml1126
-rw-r--r--indra/newview/skins/default/xui/pl/teleport_strings.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about.xml19
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml137
-rw-r--r--indra/newview/skins/default/xui/pt/floater_animation_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_avatar_textures.xml55
-rw-r--r--indra/newview/skins/default/xui/pt/floater_bulk_perms.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/floater_buy_currency.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_buy_land.xml253
-rw-r--r--indra/newview/skins/default/xui/pt/floater_camera.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/floater_color_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_customize.xml135
-rw-r--r--indra/newview/skins/default/xui/pt/floater_event.xml72
-rw-r--r--indra/newview/skins/default/xui/pt/floater_god_tools.xml16
-rw-r--r--indra/newview/skins/default/xui/pt/floater_help_browser.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_incoming_call.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/floater_inventory.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_lsl_guide.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_media_browser.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_moveview.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/floater_outgoing_call.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preferences.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_gesture.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_notecard.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_sound.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_texture.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/floater_report_abuse.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_script_limits.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_settings_debug.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/floater_snapshot.xml34
-rw-r--r--indra/newview/skins/default/xui/pt/floater_sys_well.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tools.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_top_objects.xml67
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_controls.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/floater_water.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_windlight_options.xml24
-rw-r--r--indra/newview/skins/default/xui/pt/floater_window_size.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/floater_world_map.xml43
-rw-r--r--indra/newview/skins/default/xui/pt/inspect_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/language_settings.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/menu_avatar_self.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/menu_im_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inventory.xml55
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inventory_add.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_mini_map.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_notification_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_object.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_participant_list.xml18
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_nearby.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_profile_overflow.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml116
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml216
-rw-r--r--indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml16
-rw-r--r--indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/panel_classified_info.xml49
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_classified.xml19
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_pick.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_profile.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_control_panel.xml20
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_general.xml24
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml43
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_invite.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_land_money.xml106
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_notices.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_roles.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/panel_im_control_panel.xml36
-rw-r--r--indra/newview/skins/default/xui/pt/panel_landmark_info.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_landmarks.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_login.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/panel_main_inventory.xml34
-rw-r--r--indra/newview/skins/default/xui/pt/panel_me.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_media_settings_general.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_media_settings_security.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_my_profile.xml58
-rw-r--r--indra/newview/skins/default/xui/pt/panel_navigation_bar.xml9
-rw-r--r--indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_nearby_media.xml67
-rw-r--r--indra/newview/skins/default/xui/pt/panel_notes.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_online_status.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_people.xml20
-rw-r--r--indra/newview/skins/default/xui/pt/panel_place_profile.xml24
-rw-r--r--indra/newview/skins/default/xui/pt/panel_places.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml44
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_chat.xml26
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_general.xml37
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_setup.xml25
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_sound.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml61
-rw-r--r--indra/newview/skins/default/xui/pt/panel_profile.xml64
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_covenant.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_estate.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_general.xml24
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_general_layout.xml43
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_texture.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml16
-rw-r--r--indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml20
-rw-r--r--indra/newview/skins/default/xui/pt/panel_side_tray.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_teleport_history.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_appearance.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_item_info.xml55
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_task_info.xml84
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml967
-rw-r--r--indra/newview/skins/default/xui/pt/teleport_strings.xml3
-rw-r--r--indra/newview/tests/llviewerhelputil_test.cpp2
-rwxr-xr-xindra/newview/viewer_manifest.py6
-rw-r--r--indra/test/llpermissions_tut.cpp108
-rw-r--r--indra/test_apps/llplugintest/bookmarks.txt24
-rw-r--r--indra/test_apps/llplugintest/llmediaplugintest.cpp280
-rw-r--r--indra/test_apps/llplugintest/llmediaplugintest.h9
-rw-r--r--install.xml51
1797 files changed, 44501 insertions, 29883 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 2e4d803252..ef9f09bd23 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -17,11 +17,11 @@ Agathos Frascati
CT-317
CT-352
Aimee Trescothick
- VWR-1813
VWR-3321
VWR-3336
VWR-3903
VWR-4083
+ VWR-4106
VWR-6348
VWR-6358
VWR-6360
@@ -42,9 +42,12 @@ Aimee Trescothick
VWR-11100
VWR-11111
VWR-11844
+ VWR-12631
+ VWR-12696
+ VWR-12748
+ VWR-14087
VWR-14267
VWR-14278
- VWR-14087
Alejandro Rosenthal
VWR-1184
Aleric Inglewood
diff --git a/indra/cmake/PulseAudio.cmake b/indra/cmake/PulseAudio.cmake
new file mode 100644
index 0000000000..f8087a8083
--- /dev/null
+++ b/indra/cmake/PulseAudio.cmake
@@ -0,0 +1,28 @@
+# -*- cmake -*-
+include(Prebuilt)
+
+if (STANDALONE)
+ include(FindPkgConfig)
+
+ pkg_check_modules(PULSEAUDIO REQUIRED libpulse-mainloop-glib)
+
+elseif (LINUX)
+ use_prebuilt_binary(pulseaudio)
+ set(PULSEAUDIO_FOUND ON FORCE BOOL)
+ set(PULSEAUDIO_INCLUDE_DIRS
+ ${LIBS_PREBUILT_DIR}/include
+ )
+ # We don't need to explicitly link against pulseaudio itself, because
+ # the viewer probes for the system's copy at runtime.
+ set(PULSEAUDIO_LIBRARIES
+ # none needed!
+ )
+endif (STANDALONE)
+
+if (PULSEAUDIO_FOUND)
+ set(PULSEAUDIO ON CACHE BOOL "Build with PulseAudio support, if available.")
+endif (PULSEAUDIO_FOUND)
+
+if (PULSEAUDIO)
+ add_definitions(-DLL_PULSEAUDIO_ENABLED=1)
+endif (PULSEAUDIO)
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index ed06c85e1a..b92ccd1d77 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -592,7 +592,7 @@ LLAudioBuffer * LLAudioEngine::getFreeBuffer()
if (buffer_id >= 0)
{
- llinfos << "Taking over unused buffer " << buffer_id << llendl;
+ lldebugs << "Taking over unused buffer " << buffer_id << llendl;
//llinfos << "Flushing unused buffer!" << llendl;
mBuffers[buffer_id]->mAudioDatap->mBufferp = NULL;
delete mBuffers[buffer_id];
diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h
index 27a52cdd99..e5b8edf9c3 100644
--- a/indra/llcommon/llapp.h
+++ b/indra/llcommon/llapp.h
@@ -235,7 +235,7 @@ public:
// Child process handling (Unix only for now)
//
// Set a callback to be run on exit of a child process
- // WARNING! This callback is run from the signal handler due to the extreme crappiness of
+ // WARNING! This callback is run from the signal handler due to
// Linux threading requiring waitpid() to be called from the thread that spawned the process.
// At some point I will make this more behaved, but I'm not going to fix this right now - djs
void setChildCallback(pid_t pid, LLAppChildCallback callback);
diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp
index 6d5b12d840..1c664e093b 100644
--- a/indra/llcommon/llassettype.cpp
+++ b/indra/llcommon/llassettype.cpp
@@ -45,12 +45,16 @@ struct AssetEntry : public LLDictionaryEntry
AssetEntry(const char *desc_name,
const char *type_name, // 8 character limit!
const char *human_name, // for decoding to human readable form; put any and as many printable characters you want in each one
- bool can_link) // can you create a link to this type?
+ bool can_link, // can you create a link to this type?
+ bool can_fetch, // can you fetch this asset by ID?
+ bool can_know) // can you see this asset's ID?
:
LLDictionaryEntry(desc_name),
mTypeName(type_name),
mHumanName(human_name),
- mCanLink(can_link)
+ mCanLink(can_link),
+ mCanFetch(can_fetch),
+ mCanKnow(can_know)
{
llassert(strlen(mTypeName) <= 8);
}
@@ -58,6 +62,8 @@ struct AssetEntry : public LLDictionaryEntry
const char *mTypeName;
const char *mHumanName;
bool mCanLink;
+ bool mCanFetch;
+ bool mCanKnow;
};
class LLAssetDictionary : public LLSingleton<LLAssetDictionary>,
@@ -69,32 +75,32 @@ public:
LLAssetDictionary::LLAssetDictionary()
{
- // DESCRIPTION TYPE NAME HUMAN NAME CAN LINK?
- // |--------------------|-----------|-------------------|-----------|
- addEntry(LLAssetType::AT_TEXTURE, new AssetEntry("TEXTURE", "texture", "texture", FALSE));
- addEntry(LLAssetType::AT_SOUND, new AssetEntry("SOUND", "sound", "sound", FALSE));
- addEntry(LLAssetType::AT_CALLINGCARD, new AssetEntry("CALLINGCARD", "callcard", "calling card", FALSE));
- addEntry(LLAssetType::AT_LANDMARK, new AssetEntry("LANDMARK", "landmark", "landmark", FALSE));
- addEntry(LLAssetType::AT_SCRIPT, new AssetEntry("SCRIPT", "script", "legacy script", FALSE));
- addEntry(LLAssetType::AT_CLOTHING, new AssetEntry("CLOTHING", "clothing", "clothing", TRUE));
- addEntry(LLAssetType::AT_OBJECT, new AssetEntry("OBJECT", "object", "object", TRUE));
- addEntry(LLAssetType::AT_NOTECARD, new AssetEntry("NOTECARD", "notecard", "note card", FALSE));
- addEntry(LLAssetType::AT_CATEGORY, new AssetEntry("CATEGORY", "category", "folder", TRUE));
- addEntry(LLAssetType::AT_LSL_TEXT, new AssetEntry("LSL_TEXT", "lsltext", "lsl2 script", FALSE));
- addEntry(LLAssetType::AT_LSL_BYTECODE, new AssetEntry("LSL_BYTECODE", "lslbyte", "lsl bytecode", FALSE));
- addEntry(LLAssetType::AT_TEXTURE_TGA, new AssetEntry("TEXTURE_TGA", "txtr_tga", "tga texture", FALSE));
- addEntry(LLAssetType::AT_BODYPART, new AssetEntry("BODYPART", "bodypart", "body part", TRUE));
- addEntry(LLAssetType::AT_SOUND_WAV, new AssetEntry("SOUND_WAV", "snd_wav", "sound", FALSE));
- addEntry(LLAssetType::AT_IMAGE_TGA, new AssetEntry("IMAGE_TGA", "img_tga", "targa image", FALSE));
- addEntry(LLAssetType::AT_IMAGE_JPEG, new AssetEntry("IMAGE_JPEG", "jpeg", "jpeg image", FALSE));
- addEntry(LLAssetType::AT_ANIMATION, new AssetEntry("ANIMATION", "animatn", "animation", FALSE));
- addEntry(LLAssetType::AT_GESTURE, new AssetEntry("GESTURE", "gesture", "gesture", TRUE));
- addEntry(LLAssetType::AT_SIMSTATE, new AssetEntry("SIMSTATE", "simstate", "simstate", FALSE));
-
- addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "symbolic link", FALSE));
- addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "symbolic folder link", FALSE));
-
- addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, FALSE));
+ // DESCRIPTION TYPE NAME HUMAN NAME CAN LINK? CAN FETCH? CAN KNOW?
+ // |--------------------|-----------|-------------------|-----------|-----------|---------|
+ addEntry(LLAssetType::AT_TEXTURE, new AssetEntry("TEXTURE", "texture", "texture", false, false, true));
+ addEntry(LLAssetType::AT_SOUND, new AssetEntry("SOUND", "sound", "sound", false, true, true));
+ addEntry(LLAssetType::AT_CALLINGCARD, new AssetEntry("CALLINGCARD", "callcard", "calling card", false, false, false));
+ addEntry(LLAssetType::AT_LANDMARK, new AssetEntry("LANDMARK", "landmark", "landmark", false, true, true));
+ addEntry(LLAssetType::AT_SCRIPT, new AssetEntry("SCRIPT", "script", "legacy script", false, false, false));
+ addEntry(LLAssetType::AT_CLOTHING, new AssetEntry("CLOTHING", "clothing", "clothing", true, true, true));
+ addEntry(LLAssetType::AT_OBJECT, new AssetEntry("OBJECT", "object", "object", true, false, false));
+ addEntry(LLAssetType::AT_NOTECARD, new AssetEntry("NOTECARD", "notecard", "note card", false, false, true));
+ addEntry(LLAssetType::AT_CATEGORY, new AssetEntry("CATEGORY", "category", "folder", true, false, false));
+ addEntry(LLAssetType::AT_LSL_TEXT, new AssetEntry("LSL_TEXT", "lsltext", "lsl2 script", false, false, false));
+ addEntry(LLAssetType::AT_LSL_BYTECODE, new AssetEntry("LSL_BYTECODE", "lslbyte", "lsl bytecode", false, false, false));
+ addEntry(LLAssetType::AT_TEXTURE_TGA, new AssetEntry("TEXTURE_TGA", "txtr_tga", "tga texture", false, false, false));
+ addEntry(LLAssetType::AT_BODYPART, new AssetEntry("BODYPART", "bodypart", "body part", true, true, true));
+ addEntry(LLAssetType::AT_SOUND_WAV, new AssetEntry("SOUND_WAV", "snd_wav", "sound", false, false, false));
+ addEntry(LLAssetType::AT_IMAGE_TGA, new AssetEntry("IMAGE_TGA", "img_tga", "targa image", false, false, false));
+ addEntry(LLAssetType::AT_IMAGE_JPEG, new AssetEntry("IMAGE_JPEG", "jpeg", "jpeg image", false, false, false));
+ addEntry(LLAssetType::AT_ANIMATION, new AssetEntry("ANIMATION", "animatn", "animation", false, true, true));
+ addEntry(LLAssetType::AT_GESTURE, new AssetEntry("GESTURE", "gesture", "gesture", true, true, true));
+ addEntry(LLAssetType::AT_SIMSTATE, new AssetEntry("SIMSTATE", "simstate", "simstate", false, false, false));
+
+ addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "sym link", false, false, true));
+ addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "sym folder link", false, false, true));
+
+ addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, false, false, false));
};
// static
@@ -225,3 +231,27 @@ const std::string &LLAssetType::badLookup()
return sBadLookup;
}
+
+// static
+bool LLAssetType::lookupIsAssetFetchByIDAllowed(EType asset_type)
+{
+ const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
+ const AssetEntry *entry = dict->lookup(asset_type);
+ if (entry)
+ {
+ return entry->mCanFetch;
+ }
+ return false;
+}
+
+// static
+bool LLAssetType::lookupIsAssetIDKnowable(EType asset_type)
+{
+ const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
+ const AssetEntry *entry = dict->lookup(asset_type);
+ if (entry)
+ {
+ return entry->mCanKnow;
+ }
+ return false;
+}
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index c7bbc2e74a..2c2dc27aaa 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -146,6 +146,9 @@ public:
static bool lookupCanLink(EType asset_type);
static bool lookupIsLinkType(EType asset_type);
+ static bool lookupIsAssetFetchByIDAllowed(EType asset_type); // the asset allows direct download
+ static bool lookupIsAssetIDKnowable(EType asset_type); // asset data can be known by the viewer
+
static const std::string& badLookup(); // error string when a lookup fails
protected:
diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h
index 52238d4533..f1b9091298 100644
--- a/indra/llcommon/llchat.h
+++ b/indra/llcommon/llchat.h
@@ -43,7 +43,8 @@ typedef enum e_chat_source_type
{
CHAT_SOURCE_SYSTEM = 0,
CHAT_SOURCE_AGENT = 1,
- CHAT_SOURCE_OBJECT = 2
+ CHAT_SOURCE_OBJECT = 2,
+ CHAT_SOURCE_UNKNOWN = 3
} EChatSourceType;
typedef enum e_chat_type
diff --git a/indra/llcommon/llcursortypes.cpp b/indra/llcommon/llcursortypes.cpp
index 23ede97af3..6751c235f6 100644
--- a/indra/llcommon/llcursortypes.cpp
+++ b/indra/llcommon/llcursortypes.cpp
@@ -72,6 +72,9 @@ ECursorType getCursorFromString(const std::string& cursor_string)
cursor_string_table["UI_CURSOR_TOOLPAUSE"] = UI_CURSOR_TOOLPAUSE;
cursor_string_table["UI_CURSOR_TOOLMEDIAOPEN"] = UI_CURSOR_TOOLMEDIAOPEN;
cursor_string_table["UI_CURSOR_PIPETTE"] = UI_CURSOR_PIPETTE;
+ cursor_string_table["UI_CURSOR_TOOLSIT"] = UI_CURSOR_TOOLSIT;
+ cursor_string_table["UI_CURSOR_TOOLBUY"] = UI_CURSOR_TOOLBUY;
+ cursor_string_table["UI_CURSOR_TOOLOPEN"] = UI_CURSOR_TOOLOPEN;
}
std::map<std::string,U32>::const_iterator iter = cursor_string_table.find(cursor_string);
diff --git a/indra/llcommon/llcursortypes.h b/indra/llcommon/llcursortypes.h
index a1b8178bfe..143c2c64cf 100644
--- a/indra/llcommon/llcursortypes.h
+++ b/indra/llcommon/llcursortypes.h
@@ -68,6 +68,9 @@ enum ECursorType {
UI_CURSOR_TOOLPAUSE,
UI_CURSOR_TOOLMEDIAOPEN,
UI_CURSOR_PIPETTE,
+ UI_CURSOR_TOOLSIT,
+ UI_CURSOR_TOOLBUY,
+ UI_CURSOR_TOOLOPEN,
UI_CURSOR_COUNT // Number of elements in this enum (NOT a cursor)
};
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 06ceeb2bc3..809a626c93 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -133,8 +133,11 @@ S32 LLQueuedThread::updateQueue(U32 max_time_ms)
if (mThreaded)
{
pending = getPending();
+ if(pending > 0)
+ {
unpause();
}
+ }
else
{
while (pending > 0)
@@ -459,7 +462,7 @@ S32 LLQueuedThread::processNextRequest()
req->setStatus(STATUS_QUEUED);
mRequestQueue.insert(req);
unlockData();
- if (mThreaded && start_priority <= PRIORITY_LOW)
+ if (mThreaded && start_priority < PRIORITY_NORMAL)
{
ms_sleep(1); // sleep the thread a little
}
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index 5f3d9d6582..b5a73ec1d1 100644
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -911,6 +911,20 @@ bool LLStringUtil::simpleReplacement(std::string &replacement, std::string token
return false;
}
+//static
+template<>
+void LLStringUtil::setLocale(std::string inLocale)
+{
+ sLocale = inLocale;
+};
+
+//static
+template<>
+std::string LLStringUtil::getLocale(void)
+{
+ return sLocale;
+};
+
// static
template<>
void LLStringUtil::formatNumber(std::string& numStr, std::string decimals)
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index 62cedcde4e..96588b29b9 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -241,8 +241,8 @@ public:
LL_COMMON_API static S32 format(std::basic_string<T>& s, const LLSD& substitutions);
LL_COMMON_API static bool simpleReplacement(std::basic_string<T>& replacement, std::basic_string<T> token, const format_map_t& substitutions);
LL_COMMON_API static bool simpleReplacement(std::basic_string<T>& replacement, std::basic_string<T> token, const LLSD& substitutions);
- static void setLocale (std::string inLocale) {sLocale = inLocale;};
- static std::string getLocale (void) {return sLocale;};
+ LL_COMMON_API static void setLocale (std::string inLocale);
+ LL_COMMON_API static std::string getLocale (void);
static bool isValidIndex(const std::basic_string<T>& string, size_type i)
{
diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h
index c78fb12018..3a0d66e4a5 100644
--- a/indra/llcommon/lluuid.h
+++ b/indra/llcommon/lluuid.h
@@ -133,6 +133,7 @@ public:
U8 mData[UUID_BYTES];
};
+typedef std::vector<LLUUID> uuid_vec_t;
// Construct
inline LLUUID::LLUUID()
diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h
index 0f1e59a18c..e3663544db 100644
--- a/indra/llcommon/llversionserver.h
+++ b/indra/llcommon/llversionserver.h
@@ -36,7 +36,7 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 31;
const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 200030;
+const S32 LL_VERSION_BUILD = 203110;
const char * const LL_CHANNEL = "Second Life Server";
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 540aea4252..3ab4257fab 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -36,7 +36,7 @@
const S32 LL_VERSION_MAJOR = 2;
const S32 LL_VERSION_MINOR = 0;
const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 200030;
+const S32 LL_VERSION_BUILD = 203110;
const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 1b0e03cb2a..2629237f7e 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -65,6 +65,27 @@ LLWorkerThread::~LLWorkerThread()
// ~LLQueuedThread() will be called here
}
+//called only in destructor.
+void LLWorkerThread::clearDeleteList()
+{
+ // Delete any workers in the delete queue (should be safe - had better be!)
+ if (!mDeleteList.empty())
+ {
+ llwarns << "Worker Thread: " << mName << " destroyed with " << mDeleteList.size()
+ << " entries in delete list." << llendl;
+
+ mDeleteMutex->lock();
+ for (delete_list_t::iterator iter = mDeleteList.begin(); iter != mDeleteList.end(); ++iter)
+ {
+ (*iter)->mRequestHandle = LLWorkerThread::nullHandle();
+ (*iter)->clearFlags(LLWorkerClass::WCF_HAVE_WORK);
+ delete *iter ;
+ }
+ mDeleteList.clear() ;
+ mDeleteMutex->unlock() ;
+ }
+}
+
// virtual
S32 LLWorkerThread::update(U32 max_time_ms)
{
@@ -320,7 +341,20 @@ bool LLWorkerClass::checkWork(bool aborting)
if (mRequestHandle != LLWorkerThread::nullHandle())
{
LLWorkerThread::WorkRequest* workreq = (LLWorkerThread::WorkRequest*)mWorkerThread->getRequest(mRequestHandle);
- llassert_always(workreq);
+ if(!workreq)
+ {
+ if(mWorkerThread->isQuitting() || mWorkerThread->isStopped()) //the mWorkerThread is not running
+ {
+ mRequestHandle = LLWorkerThread::nullHandle();
+ clearFlags(WCF_HAVE_WORK);
+ }
+ else
+ {
+ llassert_always(workreq);
+ }
+ return true ;
+ }
+
LLQueuedThread::status_t status = workreq->getStatus();
if (status == LLWorkerThread::STATUS_ABORTED)
{
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index a1e85d2ecc..1756ebab6b 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -80,6 +80,9 @@ public:
S32 mParam;
};
+protected:
+ void clearDeleteList() ;
+
private:
typedef std::list<LLWorkerClass*> delete_list_t;
delete_list_t mDeleteList;
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 5649b4cab7..0874f574c5 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -93,9 +93,10 @@ LLImageBase::LLImageBase()
mWidth(0),
mHeight(0),
mComponents(0),
+ mBadBufferAllocation(false),
+ mAllowOverSize(false),
mMemType(LLMemType::MTYPE_IMAGEBASE)
{
- mBadBufferAllocation = FALSE ;
}
// virtual
@@ -134,8 +135,6 @@ void LLImageBase::sanityCheck()
}
}
-BOOL LLImageBase::sSizeOverride = FALSE;
-
// virtual
void LLImageBase::deleteData()
{
@@ -157,22 +156,32 @@ U8* LLImageBase::allocateData(S32 size)
llerrs << llformat("LLImageBase::allocateData called with bad dimensions: %dx%dx%d",mWidth,mHeight,mComponents) << llendl;
}
}
- else if (size <= 0 || (size > 4096*4096*16 && sSizeOverride == FALSE))
+
+ //make this function thread-safe.
+ static const U32 MAX_BUFFER_SIZE = 4096 * 4096 * 16 ; //256 MB
+ if (size < 1 || size > MAX_BUFFER_SIZE)
{
+ llinfos << "width: " << mWidth << " height: " << mHeight << " components: " << mComponents << llendl ;
+ if(mAllowOverSize)
+ {
+ llinfos << "Oversize: " << size << llendl ;
+ }
+ else
+ {
llerrs << "LLImageBase::allocateData: bad size: " << size << llendl;
}
-
+ }
if (!mData || size != mDataSize)
{
deleteData(); // virtual
- mBadBufferAllocation = FALSE ;
+ mBadBufferAllocation = false ;
mData = new U8[size];
if (!mData)
{
llwarns << "allocate image data: " << size << llendl;
size = 0 ;
mWidth = mHeight = 0 ;
- mBadBufferAllocation = TRUE ;
+ mBadBufferAllocation = true ;
}
mDataSize = size;
}
@@ -221,7 +230,7 @@ U8* LLImageBase::getData()
return mData;
}
-BOOL LLImageBase::isBufferInvalid()
+bool LLImageBase::isBufferInvalid()
{
return mBadBufferAllocation || mData == NULL ;
}
@@ -257,7 +266,11 @@ LLImageRaw::LLImageRaw(U16 width, U16 height, S8 components)
: LLImageBase()
{
mMemType = LLMemType::MTYPE_IMAGERAW;
- llassert( S32(width) * S32(height) * S32(components) <= MAX_IMAGE_DATA_SIZE );
+ //llassert( S32(width) * S32(height) * S32(components) <= MAX_IMAGE_DATA_SIZE );
+ if(S32(width) * S32(height) * S32(components) > MAX_IMAGE_DATA_SIZE)
+ {
+ llwarns << "over size: width: " << (S32)width << " height: " << (S32)height << " components: " << (S32)components << llendl ;
+ }
allocateDataSize(width, height, components);
++sRawImageCount;
}
diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h
index 686f583886..10444e7f89 100644
--- a/indra/llimage/llimage.h
+++ b/indra/llimage/llimage.h
@@ -48,7 +48,7 @@ const S32 MAX_IMAGE_SIZE = (1<<MAX_IMAGE_MIP); // 2048
const S32 MIN_IMAGE_AREA = MIN_IMAGE_SIZE * MIN_IMAGE_SIZE;
const S32 MAX_IMAGE_AREA = MAX_IMAGE_SIZE * MAX_IMAGE_SIZE;
const S32 MAX_IMAGE_COMPONENTS = 8;
-const S32 MAX_IMAGE_DATA_SIZE = MAX_IMAGE_AREA * MAX_IMAGE_COMPONENTS;
+const S32 MAX_IMAGE_DATA_SIZE = MAX_IMAGE_AREA * MAX_IMAGE_COMPONENTS; //2048 * 2048 * 8 = 16 MB
// Note! These CANNOT be changed without modifying simulator code
// *TODO: change both to 1024 when SIM texture fetching is deprecated
@@ -124,10 +124,12 @@ public:
const U8 *getData() const ;
U8 *getData() ;
- BOOL isBufferInvalid() ;
+ bool isBufferInvalid() ;
void setSize(S32 width, S32 height, S32 ncomponents);
U8* allocateDataSize(S32 width, S32 height, S32 ncomponents, S32 size = -1); // setSize() + allocateData()
+ void enableOverSize() {mAllowOverSize = true ;}
+ void disableOverSize() {mAllowOverSize = false; }
protected:
// special accessor to allow direct setting of mData and mDataSize by LLImageFormatted
@@ -140,8 +142,6 @@ public:
// <= 0 priority means that there's no need for more data.
static F32 calc_download_priority(F32 virtual_size, F32 visible_area, S32 bytes_sent);
- static void setSizeOverride(BOOL enabled) { sSizeOverride = enabled; }
-
static EImageCodec getCodecFromExtension(const std::string& exten);
private:
@@ -153,12 +153,10 @@ private:
S8 mComponents;
- BOOL mBadBufferAllocation ;
-
+ bool mBadBufferAllocation ;
+ bool mAllowOverSize ;
public:
LLMemType::DeclareMemType& mMemType; // debug
-
- static BOOL sSizeOverride;
};
// Raw representation of an image (used for textures, and other uncompressed formats
diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt
index b358f0a013..a563db901a 100644
--- a/indra/llinventory/CMakeLists.txt
+++ b/indra/llinventory/CMakeLists.txt
@@ -20,6 +20,7 @@ set(llinventory_SOURCE_FILES
llcategory.cpp
lleconomy.cpp
llinventory.cpp
+ llinventorydefines.cpp
llinventorytype.cpp
lllandmark.cpp
llnotecard.cpp
@@ -36,6 +37,7 @@ set(llinventory_HEADER_FILES
llcategory.h
lleconomy.h
llinventory.h
+ llinventorydefines.h
llinventorytype.h
lllandmark.h
llnotecard.h
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index d665deb605..2c767a4857 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -31,10 +31,10 @@
*/
#include "linden_common.h"
-
#include "llinventory.h"
#include "lldbstrings.h"
+#include "llinventorydefines.h"
#include "llxorcipher.h"
#include "llsd.h"
#include "message.h"
@@ -43,9 +43,8 @@
#include "llsdutil.h"
///----------------------------------------------------------------------------
-/// exported functions
+/// Exported functions
///----------------------------------------------------------------------------
-
static const std::string INV_ITEM_ID_LABEL("item_id");
static const std::string INV_FOLDER_ID_LABEL("folder_id");
static const std::string INV_PARENT_ID_LABEL("parent_id");
@@ -64,25 +63,23 @@ static const std::string INV_CREATION_DATE_LABEL("created_at");
// key used by agent-inventory-service
static const std::string INV_ASSET_TYPE_LABEL_WS("type_default");
static const std::string INV_FOLDER_ID_LABEL_WS("category_id");
+
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
-
const U8 TASK_INVENTORY_ITEM_KEY = 0;
const U8 TASK_INVENTORY_ASSET_KEY = 1;
const LLUUID MAGIC_ID("3c115e51-04f4-523c-9fa6-98aff1034730");
-
///----------------------------------------------------------------------------
/// Class LLInventoryObject
///----------------------------------------------------------------------------
-LLInventoryObject::LLInventoryObject(
- const LLUUID& uuid,
- const LLUUID& parent_uuid,
- LLAssetType::EType type,
- const std::string& name) :
+LLInventoryObject::LLInventoryObject(const LLUUID& uuid,
+ const LLUUID& parent_uuid,
+ LLAssetType::EType type,
+ const std::string& name) :
mUUID(uuid),
mParentUUID(parent_uuid),
mType(type),
@@ -99,7 +96,7 @@ LLInventoryObject::LLInventoryObject() :
{
}
-LLInventoryObject::~LLInventoryObject( void )
+LLInventoryObject::~LLInventoryObject()
{
}
@@ -292,18 +289,17 @@ void LLInventoryObject::updateServer(BOOL) const
/// Class LLInventoryItem
///----------------------------------------------------------------------------
-LLInventoryItem::LLInventoryItem(
- const LLUUID& uuid,
- const LLUUID& parent_uuid,
- const LLPermissions& permissions,
- const LLUUID& asset_uuid,
- LLAssetType::EType type,
- LLInventoryType::EType inv_type,
- const std::string& name,
- const std::string& desc,
- const LLSaleInfo& sale_info,
- U32 flags,
- S32 creation_date_utc) :
+LLInventoryItem::LLInventoryItem(const LLUUID& uuid,
+ const LLUUID& parent_uuid,
+ const LLPermissions& permissions,
+ const LLUUID& asset_uuid,
+ LLAssetType::EType type,
+ LLInventoryType::EType inv_type,
+ const std::string& name,
+ const std::string& desc,
+ const LLSaleInfo& sale_info,
+ U32 flags,
+ S32 creation_date_utc) :
LLInventoryObject(uuid, parent_uuid, type, name),
mPermissions(permissions),
mAssetUUID(asset_uuid),
@@ -458,11 +454,18 @@ void LLInventoryItem::setCreationDate(time_t creation_date_utc)
mCreationDate = creation_date_utc;
}
+// Currently only used in the Viewer to handle calling cards
+// where the creator is actually used to store the target.
+void LLInventoryItem::setCreator(const LLUUID& creator)
+{
+ mPermissions.setCreator(creator);
+}
+
void LLInventoryItem::accumulatePermissionSlamBits(const LLInventoryItem& old_item)
{
// Remove any pre-existing II_FLAGS_PERM_OVERWRITE_MASK flags
// because we now detect when they should be set.
- setFlags( old_item.getFlags() | (getFlags() & ~(LLInventoryItem::II_FLAGS_PERM_OVERWRITE_MASK)) );
+ setFlags( old_item.getFlags() | (getFlags() & ~(LLInventoryItemFlags::II_FLAGS_PERM_OVERWRITE_MASK)) );
// Enforce the PERM_OVERWRITE flags for any masks that are different
// but only for AT_OBJECT's since that is the only asset type that can
@@ -473,20 +476,20 @@ void LLInventoryItem::accumulatePermissionSlamBits(const LLInventoryItem& old_it
U32 flags_to_be_set = 0;
if(old_permissions.getMaskNextOwner() != getPermissions().getMaskNextOwner())
{
- flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
+ flags_to_be_set |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM;
}
if(old_permissions.getMaskEveryone() != getPermissions().getMaskEveryone())
{
- flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+ flags_to_be_set |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
}
if(old_permissions.getMaskGroup() != getPermissions().getMaskGroup())
{
- flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+ flags_to_be_set |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
}
LLSaleInfo old_sale_info = old_item.getSaleInfo();
if(old_sale_info != getSaleInfo())
{
- flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE;
+ flags_to_be_set |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_SALE;
}
setFlags(getFlags() | flags_to_be_set);
}
@@ -1304,28 +1307,14 @@ void LLInventoryItem::unpackBinaryBucket(U8* bin_bucket, S32 bin_bucket_size)
setCreationDate(now);
}
-// returns TRUE if a should appear before b
-BOOL item_dictionary_sort( LLInventoryItem* a, LLInventoryItem* b )
-{
- return (LLStringUtil::compareDict( a->getName().c_str(), b->getName().c_str() ) < 0);
-}
-
-// returns TRUE if a should appear before b
-BOOL item_date_sort( LLInventoryItem* a, LLInventoryItem* b )
-{
- return a->getCreationDate() < b->getCreationDate();
-}
-
-
///----------------------------------------------------------------------------
/// Class LLInventoryCategory
///----------------------------------------------------------------------------
-LLInventoryCategory::LLInventoryCategory(
- const LLUUID& uuid,
- const LLUUID& parent_uuid,
- LLFolderType::EType preferred_type,
- const std::string& name) :
+LLInventoryCategory::LLInventoryCategory(const LLUUID& uuid,
+ const LLUUID& parent_uuid,
+ LLFolderType::EType preferred_type,
+ const std::string& name) :
LLInventoryObject(uuid, parent_uuid, LLAssetType::AT_CATEGORY, name),
mPreferredType(preferred_type)
{
diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h
index 9faecbea85..b083e305b1 100644
--- a/indra/llinventory/llinventory.h
+++ b/indra/llinventory/llinventory.h
@@ -33,8 +33,6 @@
#ifndef LL_LLINVENTORY_H
#define LL_LLINVENTORY_H
-#include <functional>
-
#include "lldarray.h"
#include "llfoldertype.h"
#include "llinventorytype.h"
@@ -45,180 +43,94 @@
#include "llsd.h"
#include "lluuid.h"
-// consts for Key field in the task inventory update message
-extern const U8 TASK_INVENTORY_ITEM_KEY;
-extern const U8 TASK_INVENTORY_ASSET_KEY;
-
-// anonymous enumeration to specify a max inventory buffer size for
-// use in packBinaryBucket()
-enum
-{
- MAX_INVENTORY_BUFFER_SIZE = 1024
-};
-
-
+class LLMessageSystem;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryObject
//
-// This is the base class for inventory objects that handles the
-// common code between items and categories. The 'mParentUUID' member
-// means the parent category since all inventory objects except each
-// user's root category are in some category. Each user's root
-// category will have mParentUUID==LLUUID::null.
+// Base class for anything in the user's inventory. Handles the common code
+// between items and categories.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-class LLMessageSystem;
-
class LLInventoryObject : public LLRefCount
{
-protected:
- LLUUID mUUID;
- LLUUID mParentUUID;
- LLAssetType::EType mType;
- std::string mName;
+public:
+ typedef std::list<LLPointer<LLInventoryObject> > object_list_t;
-protected:
- virtual ~LLInventoryObject( void );
-
+ //--------------------------------------------------------------------
+ // Initialization
+ //--------------------------------------------------------------------
public:
MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY);
- LLInventoryObject(const LLUUID& uuid, const LLUUID& parent_uuid,
- LLAssetType::EType type, const std::string& name);
LLInventoryObject();
+ LLInventoryObject(const LLUUID& uuid,
+ const LLUUID& parent_uuid,
+ LLAssetType::EType type,
+ const std::string& name);
void copyObject(const LLInventoryObject* other); // LLRefCount requires custom copy
+protected:
+ virtual ~LLInventoryObject();
- // accessors
- virtual const LLUUID& getUUID() const;
+ //--------------------------------------------------------------------
+ // Accessors
+ //--------------------------------------------------------------------
+public:
+ virtual const LLUUID& getUUID() const; // inventoryID that this item points to
+ virtual const LLUUID& getLinkedUUID() const; // inventoryID that this item points to, else this item's inventoryID
const LLUUID& getParentUUID() const;
- virtual const LLUUID& getLinkedUUID() const; // get the inventoryID that this item points to, else this item's inventoryID
virtual const std::string& getName() const;
virtual LLAssetType::EType getType() const;
LLAssetType::EType getActualType() const; // bypasses indirection for linked items
BOOL getIsLinkType() const;
- // mutators - will not call updateServer();
+
+ //--------------------------------------------------------------------
+ // Mutators
+ // Will not call updateServer
+ //--------------------------------------------------------------------
+public:
void setUUID(const LLUUID& new_uuid);
virtual void rename(const std::string& new_name);
void setParent(const LLUUID& new_parent);
void setType(LLAssetType::EType type);
- // file support - implemented here so that a minimal information
- // set can be transmitted between simulator and viewer.
-// virtual BOOL importFile(LLFILE* fp);
+ //--------------------------------------------------------------------
+ // File Support
+ // Implemented here so that a minimal information set can be transmitted
+ // between simulator and viewer.
+ //--------------------------------------------------------------------
+public:
+ // virtual BOOL importFile(LLFILE* fp);
virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
-
virtual BOOL importLegacyStream(std::istream& input_stream);
virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
- // virtual methods
virtual void removeFromServer();
virtual void updateParentOnServer(BOOL) const;
virtual void updateServer(BOOL) const;
+
+ //--------------------------------------------------------------------
+ // Member Variables
+ //--------------------------------------------------------------------
+protected:
+ LLUUID mUUID;
+ LLUUID mParentUUID; // Parent category. Root categories have LLUUID::NULL.
+ LLAssetType::EType mType;
+ std::string mName;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryItem
//
-// An inventory item represents something that the current user has in
-// their inventory.
+// An item in the current user's inventory.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
class LLInventoryItem : public LLInventoryObject
{
public:
typedef LLDynamicArray<LLPointer<LLInventoryItem> > item_array_t;
-
-protected:
- LLPermissions mPermissions;
- LLUUID mAssetUUID;
- std::string mDescription;
- LLSaleInfo mSaleInfo;
- LLInventoryType::EType mInventoryType;
- U32 mFlags;
- time_t mCreationDate; // seconds from 1/1/1970, UTC
+ //--------------------------------------------------------------------
+ // Initialization
+ //--------------------------------------------------------------------
public:
-
- /**
- * Anonymous enumeration for specifying the inventory item flags.
- */
- enum
- {
- // The shared flags at the top are shared among all inventory
- // types. After that section, all values of flags are type
- // dependent. The shared flags will start at 2^30 and work
- // down while item type specific flags will start at 2^0 and
- // work up.
- II_FLAGS_NONE = 0,
-
-
- //
- // Shared flags
- //
- //
-
- // This value means that the asset has only one reference in
- // the system. If the inventory item is deleted, or the asset
- // id updated, then we can remove the old reference.
- II_FLAGS_SHARED_SINGLE_REFERENCE = 0x40000000,
-
-
- //
- // Landmark flags
- //
- II_FLAGS_LANDMARK_VISITED = 1,
-
- //
- // Object flags
- //
-
- // flag to indicate that object permissions should have next
- // owner perm be more restrictive on rez. We bump this into
- // the second byte of the flags since the low byte is used to
- // track attachment points.
- II_FLAGS_OBJECT_SLAM_PERM = 0x100,
-
- // flag to indicate that the object sale information has been changed.
- II_FLAGS_OBJECT_SLAM_SALE = 0x1000,
-
- // These flags specify which permissions masks to overwrite
- // upon rez. Normally, if no permissions slam (above) or
- // overwrite flags are set, the asset's permissions are
- // used and the inventory's permissions are ignored. If
- // any of these flags are set, the inventory's permissions
- // take precedence.
- II_FLAGS_OBJECT_PERM_OVERWRITE_BASE = 0x010000,
- II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER = 0x020000,
- II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP = 0x040000,
- II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE = 0x080000,
- II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER = 0x100000,
-
- // flag to indicate whether an object that is returned is composed
- // of muiltiple items or not.
- II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS = 0x200000,
-
- //
- // wearables use the low order byte of flags to store the
- // EWearableType enumeration found in newview/llwearable.h
- //
- II_FLAGS_WEARABLES_MASK = 0xff,
-
- // these bits need to be cleared whenever the asset_id is updated
- // on a pre-existing inventory item (DEV-28098 and DEV-30997)
- II_FLAGS_PERM_OVERWRITE_MASK = II_FLAGS_OBJECT_SLAM_PERM
- | II_FLAGS_OBJECT_SLAM_SALE
- | II_FLAGS_OBJECT_PERM_OVERWRITE_BASE
- | II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER
- | II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP
- | II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE
- | II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER,
- };
-
-protected:
- ~LLInventoryItem(); // ref counted
-
-public:
-
MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY);
LLInventoryItem(const LLUUID& uuid,
const LLUUID& parent_uuid,
@@ -237,10 +149,14 @@ public:
// is prohibited
LLInventoryItem(const LLInventoryItem* other);
virtual void copyItem(const LLInventoryItem* other); // LLRefCount requires custom copy
-
void generateUUID() { mUUID.generate(); }
+protected:
+ ~LLInventoryItem(); // ref counted
- // accessors
+ //--------------------------------------------------------------------
+ // Accessors
+ //--------------------------------------------------------------------
+public:
virtual const LLUUID& getLinkedUUID() const;
virtual const LLPermissions& getPermissions() const;
virtual const LLUUID& getCreatorUUID() const;
@@ -252,8 +168,12 @@ public:
virtual time_t getCreationDate() const;
virtual U32 getCRC32() const; // really more of a checksum.
- // mutators - will not call updateServer(), and will never fail
- // (though it may correct to sane values)
+ //--------------------------------------------------------------------
+ // Mutators
+ // Will not call updateServer and will never fail
+ // (though it may correct to sane values)
+ //--------------------------------------------------------------------
+public:
void setAssetUUID(const LLUUID& asset_id);
void setDescription(const std::string& new_desc);
void setSaleInfo(const LLSaleInfo& sale_info);
@@ -261,62 +181,68 @@ public:
void setInventoryType(LLInventoryType::EType inv_type);
void setFlags(U32 flags);
void setCreationDate(time_t creation_date_utc);
+ void setCreator(const LLUUID& creator); // only used for calling cards
// Check for changes in permissions masks and sale info
- // and set the corresponding bits in mFlags
+ // and set the corresponding bits in mFlags.
void accumulatePermissionSlamBits(const LLInventoryItem& old_item);
-
- // This is currently only used in the Viewer to handle calling cards
- // where the creator is actually used to store the target.
- void setCreator(const LLUUID& creator) { mPermissions.setCreator(creator); }
- // Put this inventory item onto the current outgoing mesage. It
- // assumes you have already called nextBlock().
+ // Put this inventory item onto the current outgoing mesage.
+ // Assumes you have already called nextBlock().
virtual void packMessage(LLMessageSystem* msg) const;
- // unpack returns TRUE if the inventory item came through the
- // network ok. It uses a simple crc check which is defeatable, but
- // we want to detect network mangling somehow.
+ // Returns TRUE if the inventory item came through the network correctly.
+ // Uses a simple crc check which is defeatable, but we want to detect
+ // network mangling somehow.
virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
- // file support
+
+ //--------------------------------------------------------------------
+ // File Support
+ //--------------------------------------------------------------------
+public:
virtual BOOL importFile(LLFILE* fp);
virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
-
virtual BOOL importLegacyStream(std::istream& input_stream);
virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
- // helper functions
-
- // pack all information needed to reconstruct this item into the given binary bucket.
- // perm_override is optional
+ //--------------------------------------------------------------------
+ // Helper Functions
+ //--------------------------------------------------------------------
+public:
+ // Pack all information needed to reconstruct this item into the given binary bucket.
S32 packBinaryBucket(U8* bin_bucket, LLPermissions* perm_override = NULL) const;
void unpackBinaryBucket(U8* bin_bucket, S32 bin_bucket_size);
LLSD asLLSD() const;
void asLLSD( LLSD& sd ) const;
bool fromLLSD(const LLSD& sd);
+ //--------------------------------------------------------------------
+ // Member Variables
+ //--------------------------------------------------------------------
+protected:
+ LLPermissions mPermissions;
+ LLUUID mAssetUUID;
+ std::string mDescription;
+ LLSaleInfo mSaleInfo;
+ LLInventoryType::EType mInventoryType;
+ U32 mFlags;
+ time_t mCreationDate; // seconds from 1/1/1970, UTC
};
-BOOL item_dictionary_sort(LLInventoryItem* a,LLInventoryItem* b);
-BOOL item_date_sort(LLInventoryItem* a, LLInventoryItem* b);
-
-
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryCategory
//
-// An instance of this class represents a category of inventory
-// items. Users come with a set of default categories, and can create
-// new ones as needed.
+// A category/folder of inventory items. Users come with a set of default
+// categories, and can create new ones as needed.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
class LLInventoryCategory : public LLInventoryObject
{
public:
typedef LLDynamicArray<LLPointer<LLInventoryCategory> > cat_array_t;
-protected:
- ~LLInventoryCategory();
-
+ //--------------------------------------------------------------------
+ // Initialization
+ //--------------------------------------------------------------------
public:
MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY);
LLInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid,
@@ -325,40 +251,49 @@ public:
LLInventoryCategory();
LLInventoryCategory(const LLInventoryCategory* other);
void copyCategory(const LLInventoryCategory* other); // LLRefCount requires custom copy
+protected:
+ ~LLInventoryCategory();
- // accessors and mutators
+ //--------------------------------------------------------------------
+ // Accessors And Mutators
+ //--------------------------------------------------------------------
+public:
LLFolderType::EType getPreferredType() const;
void setPreferredType(LLFolderType::EType type);
- // For messaging system support
- virtual void packMessage(LLMessageSystem* msg) const;
- virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
-
LLSD asLLSD() const;
bool fromLLSD(const LLSD& sd);
- // file support
+ //--------------------------------------------------------------------
+ // Messaging
+ //--------------------------------------------------------------------
+public:
+ virtual void packMessage(LLMessageSystem* msg) const;
+ virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
+
+ //--------------------------------------------------------------------
+ // File Support
+ //--------------------------------------------------------------------
+public:
virtual BOOL importFile(LLFILE* fp);
virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
-
virtual BOOL importLegacyStream(std::istream& input_stream);
virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
+ //--------------------------------------------------------------------
+ // Member Variables
+ //--------------------------------------------------------------------
protected:
- // May be the type that this category was "meant" to hold (although it may hold any type).
- LLFolderType::EType mPreferredType;
+ LLFolderType::EType mPreferredType; // Type that this category was "meant" to hold (although it may hold any type).
};
//-----------------------------------------------------------------------------
-// Useful bits
+// Convertors
+//
+// These functions convert between structured data and an inventory
+// item, appropriate for serialization.
//-----------------------------------------------------------------------------
-
-typedef std::list<LLPointer<LLInventoryObject> > InventoryObjectList;
-
-// These functions convert between structured data and an inventory
-// item, appropriate for serialization.
LLSD ll_create_sd_from_inventory_item(LLPointer<LLInventoryItem> item);
-//LLPointer<LLInventoryItem> ll_create_item_from_sd(const LLSD& sd_item);
LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat);
LLPointer<LLInventoryCategory> ll_create_category_from_sd(const LLSD& sd_cat);
diff --git a/indra/llinventory/llinventorydefines.cpp b/indra/llinventory/llinventorydefines.cpp
new file mode 100644
index 0000000000..a9610d4d4b
--- /dev/null
+++ b/indra/llinventory/llinventorydefines.cpp
@@ -0,0 +1,37 @@
+/**
+ * @file llinventorydefines.cpp
+ * @brief Implementation of the inventory defines.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+#include "llinventorydefines.h"
+
+const U8 TASK_INVENTORY_ITEM_KEY = 0;
+const U8 TASK_INVENTORY_ASSET_KEY = 1;
diff --git a/indra/llinventory/llinventorydefines.h b/indra/llinventory/llinventorydefines.h
new file mode 100644
index 0000000000..ccf1a356de
--- /dev/null
+++ b/indra/llinventory/llinventorydefines.h
@@ -0,0 +1,106 @@
+/**
+ * @file llinventorydefines.h
+ * @brief LLInventoryDefines
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLINVENTORYDEFINES_H
+#define LL_LLINVENTORYDEFINES_H
+
+// Consts for "key" field in the task inventory update message
+extern const U8 TASK_INVENTORY_ITEM_KEY;
+extern const U8 TASK_INVENTORY_ASSET_KEY;
+
+// Max inventory buffer size (for use in packBinaryBucket)
+enum
+{
+ MAX_INVENTORY_BUFFER_SIZE = 1024
+};
+
+//--------------------------------------------------------------------
+// Inventory item flags enums
+// The shared flags at the top are shared among all inventory
+// types. After that section, all values of flags are type
+// dependent. The shared flags will start at 2^30 and work
+// down while item type specific flags will start at 2^0 and work up.
+//--------------------------------------------------------------------
+class LLInventoryItemFlags
+{
+public:
+ enum EType
+ {
+ II_FLAGS_NONE = 0,
+
+ II_FLAGS_SHARED_SINGLE_REFERENCE = 0x40000000,
+ // The asset has only one reference in the system. If the
+ // inventory item is deleted, or the assetid updated, then we
+ // can remove the old reference.
+
+ II_FLAGS_LANDMARK_VISITED = 1,
+
+ II_FLAGS_OBJECT_SLAM_PERM = 0x100,
+ // Object permissions should have next owner perm be more
+ // restrictive on rez. We bump this into the second byte of the
+ // flags since the low byte is used to track attachment points.
+
+ II_FLAGS_OBJECT_SLAM_SALE = 0x1000,
+ // The object sale information has been changed.
+
+ II_FLAGS_OBJECT_PERM_OVERWRITE_BASE = 0x010000,
+ II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER = 0x020000,
+ II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP = 0x040000,
+ II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE = 0x080000,
+ II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER = 0x100000,
+ // Specify which permissions masks to overwrite
+ // upon rez. Normally, if no permissions slam (above) or
+ // overwrite flags are set, the asset's permissions are
+ // used and the inventory's permissions are ignored. If
+ // any of these flags are set, the inventory's permissions
+ // take precedence.
+
+ II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS = 0x200000,
+ // Whether a returned object is composed of multiple items.
+
+ II_FLAGS_WEARABLES_MASK = 0xff,
+ // Wearables use the low order byte of flags to store the
+ // EWearableType enumeration found in newview/llwearable.h
+
+ II_FLAGS_PERM_OVERWRITE_MASK = (II_FLAGS_OBJECT_SLAM_PERM |
+ II_FLAGS_OBJECT_SLAM_SALE |
+ II_FLAGS_OBJECT_PERM_OVERWRITE_BASE |
+ II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER |
+ II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP |
+ II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE |
+ II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER),
+ // These bits need to be cleared whenever the asset_id is updated
+ // on a pre-existing inventory item (DEV-28098 and DEV-30997)
+ };
+};
+
+#endif // LL_LLINVENTORYDEFINES_H
diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h
index e515b8a304..20da954002 100644
--- a/indra/llinventory/llinventorytype.h
+++ b/indra/llinventory/llinventorytype.h
@@ -75,7 +75,6 @@ public:
// machine transation between type and strings
static EType lookup(const std::string& name);
static const std::string &lookup(EType type);
-
// translation from a type to a human readable form.
static const std::string &lookupHumanReadable(EType type);
diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
index ec21ae40e7..b08cb28218 100644
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -452,7 +452,7 @@ BOOL LLParcel::allowTerraformBy(const LLUUID &agent_id) const
bool LLParcel::isAgentBlockedFromParcel(LLParcel* parcelp,
const LLUUID& agent_id,
- const std::vector<LLUUID>& group_ids,
+ const uuid_vec_t& group_ids,
const BOOL is_agent_identified,
const BOOL is_agent_transacted,
const BOOL is_agent_ageverified)
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
index 2a9a596912..4ee9d9b40f 100644
--- a/indra/llinventory/llparcel.h
+++ b/indra/llinventory/llparcel.h
@@ -258,7 +258,7 @@ public:
void setMediaURLResetTimer(F32 time);
virtual void setLocalID(S32 local_id);
- // blow away all the extra crap lurking in parcels, including urls, access lists, etc
+ // blow away all the extra stuff lurking in parcels, including urls, access lists, etc
void clearParcel();
// This value is not persisted out to the parcel file, it is only
@@ -538,7 +538,7 @@ public:
static bool isAgentBlockedFromParcel(LLParcel* parcelp,
const LLUUID& agent_id,
- const std::vector<LLUUID>& group_ids,
+ const uuid_vec_t& group_ids,
const BOOL is_agent_identified,
const BOOL is_agent_transacted,
const BOOL is_agent_ageverified);
diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp
index d2e5034734..9683252dc4 100644
--- a/indra/llinventory/llpermissions.cpp
+++ b/indra/llinventory/llpermissions.cpp
@@ -479,7 +479,7 @@ BOOL LLPermissions::setNextOwnerBits(const LLUUID& agent, const LLUUID& group, B
return ownership;
}
-BOOL LLPermissions::allowOperationBy(PermissionBit op, const LLUUID& requester, const LLUUID& group) const
+bool LLPermissions::allowOperationBy(PermissionBit op, const LLUUID& requester, const LLUUID& group) const
{
if(requester.isNull())
{
diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h
index d5a0881c8f..fa20d5c214 100644
--- a/indra/llinventory/llpermissions.h
+++ b/indra/llinventory/llpermissions.h
@@ -149,7 +149,7 @@ public:
const LLUUID& getGroup() const { return mGroup; }
// return the agent_id of the last agent owner. Only returns
- // LLUUID::null if there has never been a previous owner.
+ // LLUUID::null if there has never been a previous owner (*note: this is apparently not true, say for textures in inventory, it may return LLUUID::null even if there was a previous owner).
const LLUUID& getLastOwner() const { return mLastOwner; }
U32 getMaskBase() const { return mMaskBase; }
@@ -272,18 +272,18 @@ public:
// They also return true if the object isn't owned, or the
// requesting agent is a system agent. See llpermissionsflags.h
// for bits.
- BOOL allowOperationBy(PermissionBit op, const LLUUID& agent, const LLUUID& group = LLUUID::null) const;
+ bool allowOperationBy(PermissionBit op, const LLUUID& agent, const LLUUID& group = LLUUID::null) const;
- inline BOOL allowModifyBy(const LLUUID &agent_id) const;
- inline BOOL allowCopyBy(const LLUUID& agent_id) const;
- inline BOOL allowMoveBy(const LLUUID& agent_id) const;
- inline BOOL allowModifyBy(const LLUUID &agent_id, const LLUUID& group) const;
- inline BOOL allowCopyBy(const LLUUID& agent_id, const LLUUID& group) const;
- inline BOOL allowMoveBy(const LLUUID &agent_id, const LLUUID &group) const;
+ inline bool allowModifyBy(const LLUUID &agent_id) const;
+ inline bool allowCopyBy(const LLUUID& agent_id) const;
+ inline bool allowMoveBy(const LLUUID& agent_id) const;
+ inline bool allowModifyBy(const LLUUID &agent_id, const LLUUID& group) const;
+ inline bool allowCopyBy(const LLUUID& agent_id, const LLUUID& group) const;
+ inline bool allowMoveBy(const LLUUID &agent_id, const LLUUID &group) const;
// This somewhat specialized function is meant for testing if the
// current owner is allowed to transfer to the specified agent id.
- inline BOOL allowTransferTo(const LLUUID &agent_id) const;
+ inline bool allowTransferTo(const LLUUID &agent_id) const;
//
// DEPRECATED.
@@ -336,38 +336,38 @@ public:
};
// Inlines
-BOOL LLPermissions::allowModifyBy(const LLUUID& agent, const LLUUID& group) const
+bool LLPermissions::allowModifyBy(const LLUUID& agent, const LLUUID& group) const
{
return allowOperationBy(PERM_MODIFY, agent, group);
}
-BOOL LLPermissions::allowCopyBy(const LLUUID& agent, const LLUUID& group) const
+bool LLPermissions::allowCopyBy(const LLUUID& agent, const LLUUID& group) const
{
return allowOperationBy(PERM_COPY, agent, group);
}
-BOOL LLPermissions::allowMoveBy(const LLUUID& agent, const LLUUID& group) const
+bool LLPermissions::allowMoveBy(const LLUUID& agent, const LLUUID& group) const
{
return allowOperationBy(PERM_MOVE, agent, group);
}
-BOOL LLPermissions::allowModifyBy(const LLUUID& agent) const
+bool LLPermissions::allowModifyBy(const LLUUID& agent) const
{
return allowOperationBy(PERM_MODIFY, agent, LLUUID::null);
}
-BOOL LLPermissions::allowCopyBy(const LLUUID& agent) const
+bool LLPermissions::allowCopyBy(const LLUUID& agent) const
{
return allowOperationBy(PERM_COPY, agent, LLUUID::null);
}
-BOOL LLPermissions::allowMoveBy(const LLUUID& agent) const
+bool LLPermissions::allowMoveBy(const LLUUID& agent) const
{
return allowOperationBy(PERM_MOVE, agent, LLUUID::null);
}
-BOOL LLPermissions::allowTransferTo(const LLUUID &agent_id) const
+bool LLPermissions::allowTransferTo(const LLUUID &agent_id) const
{
if (mIsGroupOwned)
{
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 192c6157a8..34348230b6 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -4521,15 +4521,65 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
if (!partial_build)
{
- int idxs[] = {0,1,(grid_size+1)+1,(grid_size+1)+1,(grid_size+1),0};
- for(int gx = 0;gx<grid_size;gx++){
- for(int gy = 0;gy<grid_size;gy++){
- if (mTypeMask & TOP_MASK){
- for(int i=5;i>=0;i--)mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]);
- }else{
- for(int i=0;i<6;i++)mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]);
+ mTriStrip.clear();
+ S32 idxs[] = {0,1,(grid_size+1)+1,(grid_size+1)+1,(grid_size+1),0};
+ for(S32 gx = 0;gx<grid_size;gx++)
+ {
+
+ for(S32 gy = 0;gy<grid_size;gy++)
+ {
+ if (mTypeMask & TOP_MASK)
+ {
+ for(S32 i=5;i>=0;i--)
+ {
+ mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]);
+ }
+
+ if (gy == 0)
+ {
+ mTriStrip.push_back((gx+1)*(grid_size+1));
+ mTriStrip.push_back((gx+1)*(grid_size+1));
+ mTriStrip.push_back(gx*(grid_size+1));
+ }
+
+ mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1));
+ mTriStrip.push_back(gy+1+gx*(grid_size+1));
+
+
+ if (gy == grid_size-1)
+ {
+ mTriStrip.push_back(gy+1+gx*(grid_size+1));
+ }
+ }
+ else
+ {
+ for(S32 i=0;i<6;i++)
+ {
+ mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]);
+ }
+
+ if (gy == 0)
+ {
+ mTriStrip.push_back(gx*(grid_size+1));
+ mTriStrip.push_back(gx*(grid_size+1));
+ mTriStrip.push_back((gx+1)*(grid_size+1));
+ }
+
+ mTriStrip.push_back(gy+1+gx*(grid_size+1));
+ mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1));
+
+ if (gy == grid_size-1)
+ {
+ mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1));
+ }
}
}
+
+ }
+
+ if (mTriStrip.size()%2 == 1)
+ {
+ mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
}
}
@@ -4771,6 +4821,8 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
pt2--;
}
}
+
+ makeTriStrip();
}
else
{
@@ -4875,67 +4927,108 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
pt2--;
}
}
+
+ makeTriStrip();
}
}
else
{
// Not hollow, generate the triangle fan.
+ U16 v1 = 2;
+ U16 v2 = 1;
+
if (mTypeMask & TOP_MASK)
{
- if (mTypeMask & OPEN_MASK)
- {
- // SOLID OPEN TOP
- // Generate indices
- // This is a tri-fan, so we reuse the same first point for all triangles.
- for (S32 i = 0; i < (num_vertices - 2); i++)
- {
- mIndices[3*i] = num_vertices - 1;
- mIndices[3*i+1] = i;
- mIndices[3*i+2] = i + 1;
- }
- }
- else
- {
- // SOLID CLOSED TOP
- for (S32 i = 0; i < (num_vertices - 2); i++)
- {
- //MSMSM fix these caps but only for the un-cut case
- mIndices[3*i] = num_vertices - 1;
- mIndices[3*i+1] = i;
- mIndices[3*i+2] = i + 1;
- }
- }
+ v1 = 1;
+ v2 = 2;
+ }
+
+ for (S32 i = 0; i < (num_vertices - 2); i++)
+ {
+ mIndices[3*i] = num_vertices - 1;
+ mIndices[3*i+v1] = i;
+ mIndices[3*i+v2] = i + 1;
+ }
+
+ //make tri strip
+ if (mTypeMask & OPEN_MASK)
+ {
+ makeTriStrip();
}
else
{
- if (mTypeMask & OPEN_MASK)
+ S32 j = num_vertices-2;
+ if (mTypeMask & TOP_MASK)
{
- // SOLID OPEN BOTTOM
- // Generate indices
- // This is a tri-fan, so we reuse the same first point for all triangles.
- for (S32 i = 0; i < (num_vertices - 2); i++)
+ mTriStrip.push_back(0);
+ for (S32 i = 0; i <= j; ++i)
{
- mIndices[3*i] = num_vertices - 1;
- mIndices[3*i+1] = i + 1;
- mIndices[3*i+2] = i;
+ mTriStrip.push_back(i);
+ if (i != j)
+ {
+ mTriStrip.push_back(j);
+ }
+ --j;
}
}
else
{
- // SOLID CLOSED BOTTOM
- for (S32 i = 0; i < (num_vertices - 2); i++)
+ mTriStrip.push_back(j);
+ for (S32 i = 0; i <= j; ++i)
{
- //MSMSM fix these caps but only for the un-cut case
- mIndices[3*i] = num_vertices - 1;
- mIndices[3*i+1] = i + 1;
- mIndices[3*i+2] = i;
+ if (i != j)
+ {
+ mTriStrip.push_back(j);
+ }
+ mTriStrip.push_back(i);
+ --j;
}
}
+
+ mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
+
+ if (mTriStrip.size()%2 == 1)
+ {
+ mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
+ }
}
}
+
return TRUE;
}
+void LLVolumeFace::makeTriStrip()
+{
+ for (U32 i = 0; i < mIndices.size(); i+=3)
+ {
+ U16 i0 = mIndices[i];
+ U16 i1 = mIndices[i+1];
+ U16 i2 = mIndices[i+2];
+
+ if ((i/3)%2 == 1)
+ {
+ mTriStrip.push_back(i0);
+ mTriStrip.push_back(i0);
+ mTriStrip.push_back(i1);
+ mTriStrip.push_back(i2);
+ mTriStrip.push_back(i2);
+ }
+ else
+ {
+ mTriStrip.push_back(i2);
+ mTriStrip.push_back(i2);
+ mTriStrip.push_back(i1);
+ mTriStrip.push_back(i0);
+ mTriStrip.push_back(i0);
+ }
+ }
+
+ if (mTriStrip.size()%2 == 1)
+ {
+ mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
+ }
+}
+
void LLVolumeFace::createBinormals()
{
LLMemType m1(LLMemType::MTYPE_VOLUME);
@@ -5136,9 +5229,14 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
if (!partial_build)
{
+ mTriStrip.clear();
+
// Now we generate the indices.
for (t = 0; t < (mNumT-1); t++)
{
+ //prepend terminating index to strip
+ mTriStrip.push_back(mNumS*t);
+
for (s = 0; s < (mNumS-1); s++)
{
mIndices[cur_index++] = s + mNumS*t; //bottom left
@@ -5148,6 +5246,14 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
mIndices[cur_index++] = s+1 + mNumS*t; //bottom right
mIndices[cur_index++] = s+1 + mNumS*(t+1); //top right
+ if (s == 0)
+ {
+ mTriStrip.push_back(s+mNumS*t);
+ mTriStrip.push_back(s+mNumS*(t+1));
+ }
+ mTriStrip.push_back(s+1+mNumS*t);
+ mTriStrip.push_back(s+1+mNumS*(t+1));
+
mEdge[cur_edge++] = (mNumS-1)*2*t+s*2+1; //bottom left/top right neighbor face
if (t < mNumT-2) { //top right/top left neighbor face
mEdge[cur_edge++] = (mNumS-1)*2*(t+1)+s*2+1;
@@ -5188,6 +5294,13 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
}
mEdge[cur_edge++] = (mNumS-1)*2*t+s*2; //top right/bottom left neighbor face
}
+ //append terminating vertex to strip
+ mTriStrip.push_back(mNumS-1+mNumS*(t+1));
+ }
+
+ if (mTriStrip.size()%2 == 1)
+ {
+ mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
}
}
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index 871b334452..d9f80f0e30 100644
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -798,7 +798,8 @@ public:
BOOL create(LLVolume* volume, BOOL partial_build = FALSE);
void createBinormals();
-
+ void makeTriStrip();
+
class VertexData
{
public:
@@ -839,6 +840,7 @@ public:
std::vector<VertexData> mVertices;
std::vector<U16> mIndices;
+ std::vector<U16> mTriStrip;
std::vector<S32> mEdge;
private:
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
index 0ab1081200..02523467e8 100644
--- a/indra/llmessage/llassetstorage.cpp
+++ b/indra/llmessage/llassetstorage.cpp
@@ -408,6 +408,8 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo
{
lldebugs << "LLAssetStorage::getAssetData() - " << uuid << "," << LLAssetType::lookup(type) << llendl;
+ llinfos << "ASSET_TRACE requesting " << uuid << " type " << LLAssetType::lookup(type) << llendl;
+
if (mShutDown)
{
return; // don't get the asset or do any callbacks, we are shutting down
@@ -471,6 +473,8 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo
// we've already got the file
// theoretically, partial files w/o a pending request shouldn't happen
// unless there's a weird error
+ llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl;
+
if (callback)
{
callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
@@ -528,6 +532,8 @@ void LLAssetStorage::downloadCompleteCallback(
LLAssetType::EType file_type,
void* user_data, LLExtStat ext_status)
{
+ llinfos << "ASSET_TRACE asset " << file_id << " downloadCompleteCallback" << llendl;
+
lldebugs << "LLAssetStorage::downloadCompleteCallback() for " << file_id
<< "," << LLAssetType::lookup(file_type) << llendl;
LLAssetRequest* req = (LLAssetRequest*)user_data;
diff --git a/indra/llmessage/llinstantmessage.cpp b/indra/llmessage/llinstantmessage.cpp
index a9e1ee77ef..57e8a22546 100644
--- a/indra/llmessage/llinstantmessage.cpp
+++ b/indra/llmessage/llinstantmessage.cpp
@@ -61,6 +61,7 @@ const char EMPTY_BINARY_BUCKET[] = "";
const S32 EMPTY_BINARY_BUCKET_SIZE = 1;
const U32 NO_TIMESTAMP = 0;
const std::string SYSTEM_FROM("Second Life");
+const std::string INTERACTIVE_SYSTEM_FROM("F387446C-37C4-45f2-A438-D99CBDBB563B");
const S32 IM_TTL = 1;
diff --git a/indra/llmessage/llinstantmessage.h b/indra/llmessage/llinstantmessage.h
index 272e753f3c..f11b649f78 100644
--- a/indra/llmessage/llinstantmessage.h
+++ b/indra/llmessage/llinstantmessage.h
@@ -226,6 +226,7 @@ extern const S32 EMPTY_BINARY_BUCKET_SIZE;
extern const U32 NO_TIMESTAMP;
extern const std::string SYSTEM_FROM;
+extern const std::string INTERACTIVE_SYSTEM_FROM;
// Number of retry attempts on sending the im.
extern const S32 IM_TTL;
diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp
index 55379fc6fd..fa02456d90 100644
--- a/indra/llmessage/lltemplatemessagebuilder.cpp
+++ b/indra/llmessage/lltemplatemessagebuilder.cpp
@@ -326,7 +326,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM
<< "(" << size << "). Clamping size and truncating data." << llendl;
size = 255;
char *truncate = (char *)data;
- truncate[255] = 0;
+ truncate[254] = 0; // array size is 255 but the last element index is 254
}
// no correct size for MVT_VARIABLE, instead we need to tell how many bytes the size will be encoded as
diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
index 6682575ca5..8f56cf2521 100644
--- a/indra/llmessage/lltemplatemessagereader.cpp
+++ b/indra/llmessage/lltemplatemessagereader.cpp
@@ -433,10 +433,9 @@ inline void LLTemplateMessageReader::getString(const char *block, const char *va
inline void LLTemplateMessageReader::getString(const char *block, const char *var, std::string& outstr, S32 blocknum )
{
- char s[MTUBYTES];
- s[0] = '\0';
+ char s[MTUBYTES + 1]= {0}; // every element is initialized with 0
getData(block, var, s, 0, blocknum, MTUBYTES);
- s[MTUBYTES - 1] = '\0';
+ s[MTUBYTES] = '\0';
outstr = s;
}
diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp
index 8f36d516d7..43f7c07e94 100644
--- a/indra/llmessage/lltransfersourceasset.cpp
+++ b/indra/llmessage/lltransfersourceasset.cpp
@@ -60,7 +60,7 @@ void LLTransferSourceAsset::initTransfer()
// to the simulator. This is subset of assets we allow to be
// simply pulled straight from the asset system.
LLUUID* tidp;
- if(is_asset_fetch_by_id_allowed(mParams.getAssetType()))
+ if(LLAssetType::lookupIsAssetFetchByIDAllowed(mParams.getAssetType()))
{
tidp = new LLUUID(getID());
gAssetStorage->getAssetData(
@@ -131,7 +131,7 @@ LLTSCode LLTransferSourceAsset::dataCallback(const S32 packet_id,
*data_handle = tmpp;
if (!vf.read(tmpp, max_bytes)) /* Flawfinder: Ignore */
{
- // Crap, read failure, need to deal with it.
+ // Read failure, need to deal with it.
delete[] tmpp;
*data_handle = NULL;
returned_bytes = 0;
@@ -257,50 +257,3 @@ BOOL LLTransferSourceParamsAsset::unpackParams(LLDataPacker &dp)
return TRUE;
}
-
-/**
- * Helper functions
- */
-bool is_asset_fetch_by_id_allowed(LLAssetType::EType type)
-{
- // *FIX: Make this list smaller.
- bool rv = false;
- switch(type)
- {
- case LLAssetType::AT_SOUND:
- case LLAssetType::AT_LANDMARK:
- case LLAssetType::AT_CLOTHING:
- case LLAssetType::AT_BODYPART:
- case LLAssetType::AT_ANIMATION:
- case LLAssetType::AT_GESTURE:
- rv = true;
- break;
- default:
- break;
- }
- return rv;
-}
-
-bool is_asset_id_knowable(LLAssetType::EType type)
-{
- // *FIX: Make this list smaller.
- bool rv = false;
- switch(type)
- {
- case LLAssetType::AT_TEXTURE:
- case LLAssetType::AT_SOUND:
- case LLAssetType::AT_LANDMARK:
- case LLAssetType::AT_CLOTHING:
- case LLAssetType::AT_NOTECARD:
- case LLAssetType::AT_BODYPART:
- case LLAssetType::AT_ANIMATION:
- case LLAssetType::AT_GESTURE:
- case LLAssetType::AT_LINK:
- case LLAssetType::AT_LINK_FOLDER:
- rv = true;
- break;
- default:
- break;
- }
- return rv;
-}
diff --git a/indra/llmessage/lltransfersourceasset.h b/indra/llmessage/lltransfersourceasset.h
index 70b09b6aaf..8616595654 100644
--- a/indra/llmessage/lltransfersourceasset.h
+++ b/indra/llmessage/lltransfersourceasset.h
@@ -84,24 +84,4 @@ protected:
S32 mCurPos;
};
-/**
- * @brief Quick check to see if the asset allows direct download.
- *
- * This might not be the right place for this function call, but it
- * originally started life inside the LLTransferSourceAsset code.
- * @param type The type of asset.
- * @return Returns true if the asset can be fetched by id.
- */
-bool is_asset_fetch_by_id_allowed(LLAssetType::EType type);
-
-/**
- * @brief Quick check to see if all asset data can be known by the viewer.
- *
- * This might not be the right place for this function call, but it
- * originally started life inside the LLTransferSourceAsset code.
- * @param type The type of asset.
- * @return Returns true if the asset id can be transmitted to the viewer.
- */
-bool is_asset_id_knowable(LLAssetType::EType type);
-
#endif // LL_LLTRANSFERSOURCEASSET_H
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index 9e3986f257..a118e21ffb 100644
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -1147,7 +1147,7 @@ char* _PREHASH_ForceObjectSelect = LLMessageStringTable::getInstance()->getStrin
char* _PREHASH_Price = LLMessageStringTable::getInstance()->getString("Price");
char* _PREHASH_SunDirection = LLMessageStringTable::getInstance()->getString("SunDirection");
char* _PREHASH_FromName = LLMessageStringTable::getInstance()->getString("FromName");
-char* _PREHASH_ChangeInventoryItemFlags = LLMessageStringTable::getInstance()->getString("ChangeInventoryItemFlags");
+char* _PREHASH_ChangeInventoryItemFlags = LLMessageStringTable::getInstance()->getString("ChangLLInventoryItemFlags");
char* _PREHASH_Force = LLMessageStringTable::getInstance()->getString("Force");
char* _PREHASH_TransactionBlock = LLMessageStringTable::getInstance()->getString("TransactionBlock");
char* _PREHASH_PowersMask = LLMessageStringTable::getInstance()->getString("PowersMask");
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index 6706775d4f..441becbae0 100644
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -3,6 +3,7 @@
project(llplugin)
include(00-Common)
+include(CURL)
include(LLCommon)
include(LLImage)
include(LLMath)
@@ -23,6 +24,7 @@ include_directories(
set(llplugin_SOURCE_FILES
llpluginclassmedia.cpp
+ llplugincookiestore.cpp
llplugininstance.cpp
llpluginmessage.cpp
llpluginmessagepipe.cpp
@@ -36,6 +38,7 @@ set(llplugin_HEADER_FILES
llpluginclassmedia.h
llpluginclassmediaowner.h
+ llplugincookiestore.h
llplugininstance.h
llpluginmessage.h
llpluginmessageclasses.h
@@ -53,3 +56,19 @@ list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES})
add_library (llplugin ${llplugin_SOURCE_FILES})
add_subdirectory(slplugin)
+
+# Add tests
+include(LLAddBuildTest)
+# UNIT TESTS
+SET(llplugin_TEST_SOURCE_FILES
+ llplugincookiestore.cpp
+ )
+
+# llplugincookiestore has a dependency on curl, so we need to link the curl library into the test.
+set_source_files_properties(
+ llplugincookiestore.cpp
+ PROPERTIES
+ LL_TEST_ADDITIONAL_LIBRARIES "${CURL_LIBRARIES}"
+ )
+
+LL_ADD_PROJECT_UNIT_TESTS(llplugin "${llplugin_TEST_SOURCE_FILES}")
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 6a2449cf4b..e09b511a6e 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -65,15 +65,19 @@ LLPluginClassMedia::~LLPluginClassMedia()
reset();
}
-bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug, const std::string &user_data_path)
+bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug)
{
LL_DEBUGS("Plugin") << "launcher: " << launcher_filename << LL_ENDL;
LL_DEBUGS("Plugin") << "plugin: " << plugin_filename << LL_ENDL;
- LL_DEBUGS("Plugin") << "user_data_path: " << user_data_path << LL_ENDL;
mPlugin = new LLPluginProcessParent(this);
mPlugin->setSleepTime(mSleepTime);
- mPlugin->init(launcher_filename, plugin_filename, debug, user_data_path);
+
+ // Queue up the media init message -- it will be sent after all the currently queued messages.
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init");
+ sendMessage(message);
+
+ mPlugin->init(launcher_filename, plugin_filename, debug);
return true;
}
@@ -678,6 +682,34 @@ void LLPluginClassMedia::paste()
sendMessage(message);
}
+void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_user_data_path");
+ message.setValue("path", user_data_path);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setLanguageCode(const std::string &language_code)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_language_code");
+ message.setValue("language", language_code);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setPluginsEnabled(const bool enabled)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "plugins_enabled");
+ message.setValueBoolean("enable", enabled);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setJavascriptEnabled(const bool enabled)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "javascript_enabled");
+ message.setValueBoolean("enable", enabled);
+ sendMessage(message);
+}
+
LLPluginClassMedia::ETargetType getTargetTypeFromLLQtWebkit(int target_type)
{
// convert a LinkTargetType value from llqtwebkit to an ETargetType
@@ -961,6 +993,13 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
mClickTargetType = TARGET_NONE;
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW);
}
+ else if(message_name == "cookie_set")
+ {
+ if(mOwner)
+ {
+ mOwner->handleCookieSet(this, message.getValue("cookie"));
+ }
+ }
else
{
LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
@@ -1044,9 +1083,17 @@ void LLPluginClassMedia::clear_cookies()
sendMessage(message);
}
+void LLPluginClassMedia::set_cookies(const std::string &cookies)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_cookies");
+ message.setValue("cookies", cookies);
+ sendMessage(message);
+}
+
void LLPluginClassMedia::enable_cookies(bool enable)
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "enable_cookies");
+ message.setValueBoolean("enable", enable);
sendMessage(message);
}
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
index 58e91fa0b4..8c7b00f45b 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -49,7 +49,9 @@ public:
virtual ~LLPluginClassMedia();
// local initialization, called by the media manager when creating a source
- virtual bool init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug, const std::string &user_data_path);
+ virtual bool init(const std::string &launcher_filename,
+ const std::string &plugin_filename,
+ bool debug);
// undoes everything init() didm called by the media manager when destroying a source
virtual void reset();
@@ -173,6 +175,12 @@ public:
void paste();
bool canPaste() const { return mCanPaste; };
+
+ // These can be called before init(), and they will be queued and sent before the media init message.
+ void setUserDataPath(const std::string &user_data_path);
+ void setLanguageCode(const std::string &language_code);
+ void setPluginsEnabled(const bool enabled);
+ void setJavascriptEnabled(const bool enabled);
///////////////////////////////////
// media browser class functions
@@ -181,6 +189,7 @@ public:
void focus(bool focused);
void clear_cache();
void clear_cookies();
+ void set_cookies(const std::string &cookies);
void enable_cookies(bool enable);
void proxy_setup(bool enable, const std::string &host = LLStringUtil::null, int port = 0);
void browse_stop();
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index 6d369cd51a..5669b81fd1 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -39,6 +39,7 @@
#include <queue>
class LLPluginClassMedia;
+class LLPluginCookieStore;
class LLPluginClassMediaOwner
{
@@ -78,6 +79,7 @@ public:
virtual ~LLPluginClassMediaOwner() {};
virtual void handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent /*event*/) {};
+ virtual void handleCookieSet(LLPluginClassMedia* /*self*/, const std::string &/*cookie*/) {};
};
#endif // LL_LLPLUGINCLASSMEDIAOWNER_H
diff --git a/indra/llplugin/llplugincookiestore.cpp b/indra/llplugin/llplugincookiestore.cpp
new file mode 100644
index 0000000000..85b1e70d78
--- /dev/null
+++ b/indra/llplugin/llplugincookiestore.cpp
@@ -0,0 +1,659 @@
+/**
+ * @file llplugincookiestore.cpp
+ * @brief LLPluginCookieStore provides central storage for http cookies used by plugins
+ *
+ * @cond
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ * @endcond
+ */
+
+#include "linden_common.h"
+#include "indra_constants.h"
+
+#include "llplugincookiestore.h"
+#include <iostream>
+
+// for curl_getdate() (apparently parsing RFC 1123 dates is hard)
+#include <curl/curl.h>
+
+LLPluginCookieStore::LLPluginCookieStore():
+ mHasChangedCookies(false)
+{
+}
+
+
+LLPluginCookieStore::~LLPluginCookieStore()
+{
+ clearCookies();
+}
+
+
+LLPluginCookieStore::Cookie::Cookie(const std::string &s, std::string::size_type cookie_start, std::string::size_type cookie_end):
+ mCookie(s, cookie_start, cookie_end - cookie_start),
+ mNameStart(0), mNameEnd(0),
+ mValueStart(0), mValueEnd(0),
+ mDomainStart(0), mDomainEnd(0),
+ mPathStart(0), mPathEnd(0),
+ mDead(false), mChanged(true)
+{
+}
+
+LLPluginCookieStore::Cookie *LLPluginCookieStore::Cookie::createFromString(const std::string &s, std::string::size_type cookie_start, std::string::size_type cookie_end, const std::string &host)
+{
+ Cookie *result = new Cookie(s, cookie_start, cookie_end);
+
+ if(!result->parse(host))
+ {
+ delete result;
+ result = NULL;
+ }
+
+ return result;
+}
+
+std::string LLPluginCookieStore::Cookie::getKey() const
+{
+ std::string result;
+ if(mDomainEnd > mDomainStart)
+ {
+ result += mCookie.substr(mDomainStart, mDomainEnd - mDomainStart);
+ }
+ result += ';';
+ if(mPathEnd > mPathStart)
+ {
+ result += mCookie.substr(mPathStart, mPathEnd - mPathStart);
+ }
+ result += ';';
+ result += mCookie.substr(mNameStart, mNameEnd - mNameStart);
+ return result;
+}
+
+bool LLPluginCookieStore::Cookie::parse(const std::string &host)
+{
+ bool first_field = true;
+
+ std::string::size_type cookie_end = mCookie.size();
+ std::string::size_type field_start = 0;
+
+ lldebugs << "parsing cookie: " << mCookie << llendl;
+ while(field_start < cookie_end)
+ {
+ // Finding the start of the next field requires honoring special quoting rules
+ // see the definition of 'quoted-string' in rfc2616 for details
+ std::string::size_type next_field_start = findFieldEnd(field_start);
+
+ // The end of this field should not include the terminating ';' or any trailing whitespace
+ std::string::size_type field_end = mCookie.find_last_not_of("; ", next_field_start);
+ if(field_end == std::string::npos || field_end < field_start)
+ {
+ // This field was empty or all whitespace. Set end = start so it shows as empty.
+ field_end = field_start;
+ }
+ else if (field_end < next_field_start)
+ {
+ // we actually want the index of the char _after_ what 'last not of' found
+ ++field_end;
+ }
+
+ // find the start of the actual name (skip separator and possible whitespace)
+ std::string::size_type name_start = mCookie.find_first_not_of("; ", field_start);
+ if(name_start == std::string::npos || name_start > next_field_start)
+ {
+ // Again, nothing but whitespace.
+ name_start = field_start;
+ }
+
+ // the name and value are separated by the first equals sign
+ std::string::size_type name_value_sep = mCookie.find_first_of("=", name_start);
+ if(name_value_sep == std::string::npos || name_value_sep > field_end)
+ {
+ // No separator found, so this is a field without an =
+ name_value_sep = field_end;
+ }
+
+ // the name end is before the name-value separator
+ std::string::size_type name_end = mCookie.find_last_not_of("= ", name_value_sep);
+ if(name_end == std::string::npos || name_end < name_start)
+ {
+ // I'm not sure how we'd hit this case... it seems like it would have to be an empty name.
+ name_end = name_start;
+ }
+ else if (name_end < name_value_sep)
+ {
+ // we actually want the index of the char _after_ what 'last not of' found
+ ++name_end;
+ }
+
+ // Value is between the name-value sep and the end of the field.
+ std::string::size_type value_start = mCookie.find_first_not_of("= ", name_value_sep);
+ if(value_start == std::string::npos || value_start > field_end)
+ {
+ // All whitespace or empty value
+ value_start = field_end;
+ }
+ std::string::size_type value_end = mCookie.find_last_not_of("; ", field_end);
+ if(value_end == std::string::npos || value_end < value_start)
+ {
+ // All whitespace or empty value
+ value_end = value_start;
+ }
+ else if (value_end < field_end)
+ {
+ // we actually want the index of the char _after_ what 'last not of' found
+ ++value_end;
+ }
+
+ lldebugs
+ << " field name: \"" << mCookie.substr(name_start, name_end - name_start)
+ << "\", value: \"" << mCookie.substr(value_start, value_end - value_start) << "\""
+ << llendl;
+
+ // See whether this field is one we know
+ if(first_field)
+ {
+ // The first field is the name=value pair
+ mNameStart = name_start;
+ mNameEnd = name_end;
+ mValueStart = value_start;
+ mValueEnd = value_end;
+ first_field = false;
+ }
+ else
+ {
+ // Subsequent fields must come from the set in rfc2109
+ if(matchName(name_start, name_end, "expires"))
+ {
+ std::string date_string(mCookie, value_start, value_end - value_start);
+ // If the cookie contains an "expires" field, it MUST contain a parsable date.
+
+ // HACK: LLDate apparently can't PARSE an rfc1123-format date, even though it can GENERATE one.
+ // The curl function curl_getdate can do this, but I'm hesitant to unilaterally introduce a curl dependency in LLDate.
+#if 1
+ time_t date = curl_getdate(date_string.c_str(), NULL );
+ mDate.secondsSinceEpoch((F64)date);
+ lldebugs << " expire date parsed to: " << mDate.asRFC1123() << llendl;
+#else
+ // This doesn't work (rfc1123-format dates cause it to fail)
+ if(!mDate.fromString(date_string))
+ {
+ // Date failed to parse.
+ llwarns << "failed to parse cookie's expire date: " << date << llendl;
+ return false;
+ }
+#endif
+ }
+ else if(matchName(name_start, name_end, "domain"))
+ {
+ mDomainStart = value_start;
+ mDomainEnd = value_end;
+ }
+ else if(matchName(name_start, name_end, "path"))
+ {
+ mPathStart = value_start;
+ mPathEnd = value_end;
+ }
+ else if(matchName(name_start, name_end, "max-age"))
+ {
+ // TODO: how should we handle this?
+ }
+ else if(matchName(name_start, name_end, "secure"))
+ {
+ // We don't care about the value of this field (yet)
+ }
+ else if(matchName(name_start, name_end, "version"))
+ {
+ // We don't care about the value of this field (yet)
+ }
+ else if(matchName(name_start, name_end, "comment"))
+ {
+ // We don't care about the value of this field (yet)
+ }
+ else
+ {
+ // An unknown field is a parse failure
+ return false;
+ }
+
+ }
+
+
+ // move on to the next field, skipping this field's separator and any leading whitespace
+ field_start = mCookie.find_first_not_of("; ", next_field_start);
+ }
+
+ // The cookie MUST have a name
+ if(mNameEnd <= mNameStart)
+ return false;
+
+ // If the cookie doesn't have a domain, add the current host as the domain.
+ if(mDomainEnd <= mDomainStart)
+ {
+ if(host.empty())
+ {
+ // no domain and no current host -- this is a parse failure.
+ return false;
+ }
+
+ // Figure out whether this cookie ended with a ";" or not...
+ std::string::size_type last_char = mCookie.find_last_not_of(" ");
+ if((last_char != std::string::npos) && (mCookie[last_char] != ';'))
+ {
+ mCookie += ";";
+ }
+
+ mCookie += " domain=";
+ mDomainStart = mCookie.size();
+ mCookie += host;
+ mDomainEnd = mCookie.size();
+
+ lldebugs << "added domain (" << mDomainStart << " to " << mDomainEnd << "), new cookie is: " << mCookie << llendl;
+ }
+
+ // If the cookie doesn't have a path, add "/".
+ if(mPathEnd <= mPathStart)
+ {
+ // Figure out whether this cookie ended with a ";" or not...
+ std::string::size_type last_char = mCookie.find_last_not_of(" ");
+ if((last_char != std::string::npos) && (mCookie[last_char] != ';'))
+ {
+ mCookie += ";";
+ }
+
+ mCookie += " path=";
+ mPathStart = mCookie.size();
+ mCookie += "/";
+ mPathEnd = mCookie.size();
+
+ lldebugs << "added path (" << mPathStart << " to " << mPathEnd << "), new cookie is: " << mCookie << llendl;
+ }
+
+
+ return true;
+}
+
+std::string::size_type LLPluginCookieStore::Cookie::findFieldEnd(std::string::size_type start, std::string::size_type end)
+{
+ std::string::size_type result = start;
+
+ if(end == std::string::npos)
+ end = mCookie.size();
+
+ bool in_quotes = false;
+ for(; (result < end); result++)
+ {
+ switch(mCookie[result])
+ {
+ case '\\':
+ if(in_quotes)
+ result++; // The next character is backslash-quoted. Skip over it.
+ break;
+ case '"':
+ in_quotes = !in_quotes;
+ break;
+ case ';':
+ if(!in_quotes)
+ return result;
+ break;
+ }
+ }
+
+ // If we got here, no ';' was found.
+ return end;
+}
+
+bool LLPluginCookieStore::Cookie::matchName(std::string::size_type start, std::string::size_type end, const char *name)
+{
+ // NOTE: this assumes 'name' is already in lowercase. The code which uses it should be able to arrange this...
+
+ while((start < end) && (*name != '\0'))
+ {
+ if(tolower(mCookie[start]) != *name)
+ return false;
+
+ start++;
+ name++;
+ }
+
+ // iff both strings hit the end at the same time, they're equal.
+ return ((start == end) && (*name == '\0'));
+}
+
+std::string LLPluginCookieStore::getAllCookies()
+{
+ std::stringstream result;
+ writeAllCookies(result);
+ return result.str();
+}
+
+void LLPluginCookieStore::writeAllCookies(std::ostream& s)
+{
+ cookie_map_t::iterator iter;
+ for(iter = mCookies.begin(); iter != mCookies.end(); iter++)
+ {
+ // Don't return expired cookies
+ if(!iter->second->isDead())
+ {
+ s << (iter->second->getCookie()) << "\n";
+ }
+ }
+
+}
+
+std::string LLPluginCookieStore::getPersistentCookies()
+{
+ std::stringstream result;
+ writePersistentCookies(result);
+ return result.str();
+}
+
+void LLPluginCookieStore::writePersistentCookies(std::ostream& s)
+{
+ cookie_map_t::iterator iter;
+ for(iter = mCookies.begin(); iter != mCookies.end(); iter++)
+ {
+ // Don't return expired cookies or session cookies
+ if(!iter->second->isDead() && !iter->second->isSessionCookie())
+ {
+ s << iter->second->getCookie() << "\n";
+ }
+ }
+}
+
+std::string LLPluginCookieStore::getChangedCookies(bool clear_changed)
+{
+ std::stringstream result;
+ writeChangedCookies(result, clear_changed);
+
+ return result.str();
+}
+
+void LLPluginCookieStore::writeChangedCookies(std::ostream& s, bool clear_changed)
+{
+ if(mHasChangedCookies)
+ {
+ lldebugs << "returning changed cookies: " << llendl;
+ cookie_map_t::iterator iter;
+ for(iter = mCookies.begin(); iter != mCookies.end(); )
+ {
+ cookie_map_t::iterator next = iter;
+ next++;
+
+ // Only return cookies marked as "changed"
+ if(iter->second->isChanged())
+ {
+ s << iter->second->getCookie() << "\n";
+
+ lldebugs << " " << iter->second->getCookie() << llendl;
+
+ // If requested, clear the changed mark
+ if(clear_changed)
+ {
+ if(iter->second->isDead())
+ {
+ // If this cookie was previously marked dead, it needs to be removed entirely.
+ delete iter->second;
+ mCookies.erase(iter);
+ }
+ else
+ {
+ // Not dead, just mark as not changed.
+ iter->second->setChanged(false);
+ }
+ }
+ }
+
+ iter = next;
+ }
+ }
+
+ if(clear_changed)
+ mHasChangedCookies = false;
+}
+
+void LLPluginCookieStore::setAllCookies(const std::string &cookies, bool mark_changed)
+{
+ clearCookies();
+ setCookies(cookies, mark_changed);
+}
+
+void LLPluginCookieStore::readAllCookies(std::istream& s, bool mark_changed)
+{
+ clearCookies();
+ readCookies(s, mark_changed);
+}
+
+void LLPluginCookieStore::setCookies(const std::string &cookies, bool mark_changed)
+{
+ std::string::size_type start = 0;
+
+ while(start != std::string::npos)
+ {
+ std::string::size_type end = cookies.find_first_of("\r\n", start);
+ if(end > start)
+ {
+ // The line is non-empty. Try to create a cookie from it.
+ setOneCookie(cookies, start, end, mark_changed);
+ }
+ start = cookies.find_first_not_of("\r\n ", end);
+ }
+}
+
+void LLPluginCookieStore::setCookiesFromHost(const std::string &cookies, const std::string &host, bool mark_changed)
+{
+ std::string::size_type start = 0;
+
+ while(start != std::string::npos)
+ {
+ std::string::size_type end = cookies.find_first_of("\r\n", start);
+ if(end > start)
+ {
+ // The line is non-empty. Try to create a cookie from it.
+ setOneCookie(cookies, start, end, mark_changed, host);
+ }
+ start = cookies.find_first_not_of("\r\n ", end);
+ }
+}
+
+void LLPluginCookieStore::readCookies(std::istream& s, bool mark_changed)
+{
+ std::string line;
+ while(s.good() && !s.eof())
+ {
+ std::getline(s, line);
+ if(!line.empty())
+ {
+ // Try to create a cookie from this line.
+ setOneCookie(line, 0, std::string::npos, mark_changed);
+ }
+ }
+}
+
+std::string LLPluginCookieStore::quoteString(const std::string &s)
+{
+ std::stringstream result;
+
+ result << '"';
+
+ for(std::string::size_type i = 0; i < s.size(); ++i)
+ {
+ char c = s[i];
+ switch(c)
+ {
+ // All these separators need to be quoted in HTTP headers, according to section 2.2 of rfc 2616:
+ case '(': case ')': case '<': case '>': case '@':
+ case ',': case ';': case ':': case '\\': case '"':
+ case '/': case '[': case ']': case '?': case '=':
+ case '{': case '}': case ' ': case '\t':
+ result << '\\';
+ break;
+ }
+
+ result << c;
+ }
+
+ result << '"';
+
+ return result.str();
+}
+
+std::string LLPluginCookieStore::unquoteString(const std::string &s)
+{
+ std::stringstream result;
+
+ bool in_quotes = false;
+
+ for(std::string::size_type i = 0; i < s.size(); ++i)
+ {
+ char c = s[i];
+ switch(c)
+ {
+ case '\\':
+ if(in_quotes)
+ {
+ // The next character is backslash-quoted. Pass it through untouched.
+ ++i;
+ if(i < s.size())
+ {
+ result << s[i];
+ }
+ continue;
+ }
+ break;
+ case '"':
+ in_quotes = !in_quotes;
+ continue;
+ break;
+ }
+
+ result << c;
+ }
+
+ return result.str();
+}
+
+// The flow for deleting a cookie is non-obvious enough that I should call it out here...
+// Deleting a cookie is done by setting a cookie with the same name, path, and domain, but with an expire timestamp in the past.
+// (This is exactly how a web server tells a browser to delete a cookie.)
+// When deleting with mark_changed set to true, this replaces the existing cookie in the list with an entry that's marked both dead and changed.
+// Some time later when writeChangedCookies() is called with clear_changed set to true, the dead cookie is deleted from the list after being returned, so that the
+// delete operation (in the form of the expired cookie) is passed along.
+void LLPluginCookieStore::setOneCookie(const std::string &s, std::string::size_type cookie_start, std::string::size_type cookie_end, bool mark_changed, const std::string &host)
+{
+ Cookie *cookie = Cookie::createFromString(s, cookie_start, cookie_end, host);
+ if(cookie)
+ {
+ lldebugs << "setting cookie: " << cookie->getCookie() << llendl;
+
+ // Create a key for this cookie
+ std::string key = cookie->getKey();
+
+ // Check to see whether this cookie should have expired
+ if(!cookie->isSessionCookie() && (cookie->getDate() < LLDate::now()))
+ {
+ // This cookie has expired.
+ if(mark_changed)
+ {
+ // If we're marking cookies as changed, we should keep it anyway since we'll need to send it out with deltas.
+ cookie->setDead(true);
+ lldebugs << " marking dead" << llendl;
+ }
+ else
+ {
+ // If we're not marking cookies as changed, we don't need to keep this cookie at all.
+ // If the cookie was already in the list, delete it.
+ removeCookie(key);
+
+ delete cookie;
+ cookie = NULL;
+
+ lldebugs << " removing" << llendl;
+ }
+ }
+
+ if(cookie)
+ {
+ // If it already exists in the map, replace it.
+ cookie_map_t::iterator iter = mCookies.find(key);
+ if(iter != mCookies.end())
+ {
+ if(iter->second->getCookie() == cookie->getCookie())
+ {
+ // The new cookie is identical to the old -- don't mark as changed.
+ // Just leave the old one in the map.
+ delete cookie;
+ cookie = NULL;
+
+ lldebugs << " unchanged" << llendl;
+ }
+ else
+ {
+ // A matching cookie was already in the map. Replace it.
+ delete iter->second;
+ iter->second = cookie;
+
+ cookie->setChanged(mark_changed);
+ if(mark_changed)
+ mHasChangedCookies = true;
+
+ lldebugs << " replacing" << llendl;
+ }
+ }
+ else
+ {
+ // The cookie wasn't in the map. Insert it.
+ mCookies.insert(std::make_pair(key, cookie));
+
+ cookie->setChanged(mark_changed);
+ if(mark_changed)
+ mHasChangedCookies = true;
+
+ lldebugs << " adding" << llendl;
+ }
+ }
+ }
+}
+
+void LLPluginCookieStore::clearCookies()
+{
+ while(!mCookies.empty())
+ {
+ cookie_map_t::iterator iter = mCookies.begin();
+ delete iter->second;
+ mCookies.erase(iter);
+ }
+}
+
+void LLPluginCookieStore::removeCookie(const std::string &key)
+{
+ cookie_map_t::iterator iter = mCookies.find(key);
+ if(iter != mCookies.end())
+ {
+ delete iter->second;
+ mCookies.erase(iter);
+ }
+}
+
diff --git a/indra/llplugin/llplugincookiestore.h b/indra/llplugin/llplugincookiestore.h
new file mode 100644
index 0000000000..a93f0c14f0
--- /dev/null
+++ b/indra/llplugin/llplugincookiestore.h
@@ -0,0 +1,125 @@
+/**
+ * @file llplugincookiestore.h
+ * @brief LLPluginCookieStore provides central storage for http cookies used by plugins
+ *
+ * @cond
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ * @endcond
+ */
+
+#ifndef LL_LLPLUGINCOOKIESTORE_H
+#define LL_LLPLUGINCOOKIESTORE_H
+
+#include "lldate.h"
+#include <map>
+#include <string>
+#include <iostream>
+
+class LLPluginCookieStore
+{
+ LOG_CLASS(LLPluginCookieStore);
+public:
+ LLPluginCookieStore();
+ ~LLPluginCookieStore();
+
+ // gets all cookies currently in storage -- use when initializing a plugin
+ std::string getAllCookies();
+ void writeAllCookies(std::ostream& s);
+
+ // gets only persistent cookies (i.e. not session cookies) -- use when writing cookies to a file
+ std::string getPersistentCookies();
+ void writePersistentCookies(std::ostream& s);
+
+ // gets cookies which are marked as "changed" -- use when sending periodic updates to plugins
+ std::string getChangedCookies(bool clear_changed = true);
+ void writeChangedCookies(std::ostream& s, bool clear_changed = true);
+
+ // (re)initializes internal data structures and bulk-sets cookies -- use when reading cookies from a file
+ void setAllCookies(const std::string &cookies, bool mark_changed = false);
+ void readAllCookies(std::istream& s, bool mark_changed = false);
+
+ // sets one or more cookies (without reinitializing anything) -- use when receiving cookies from a plugin
+ void setCookies(const std::string &cookies, bool mark_changed = true);
+ void readCookies(std::istream& s, bool mark_changed = true);
+
+ // sets one or more cookies (without reinitializing anything), supplying a hostname the cookies came from -- use when setting a cookie manually
+ void setCookiesFromHost(const std::string &cookies, const std::string &host, bool mark_changed = true);
+
+ // quote or unquote a string as per the definition of 'quoted-string' in rfc2616
+ static std::string quoteString(const std::string &s);
+ static std::string unquoteString(const std::string &s);
+
+private:
+
+ void setOneCookie(const std::string &s, std::string::size_type cookie_start, std::string::size_type cookie_end, bool mark_changed, const std::string &host = LLStringUtil::null);
+
+ class Cookie
+ {
+ public:
+ static Cookie *createFromString(const std::string &s, std::string::size_type cookie_start = 0, std::string::size_type cookie_end = std::string::npos, const std::string &host = LLStringUtil::null);
+
+ // Construct a string from the cookie that uniquely represents it, to be used as a key in a std::map.
+ std::string getKey() const;
+
+ const std::string &getCookie() const { return mCookie; };
+ bool isSessionCookie() const { return mDate.isNull(); };
+
+ bool isDead() const { return mDead; };
+ void setDead(bool dead) { mDead = dead; };
+
+ bool isChanged() const { return mChanged; };
+ void setChanged(bool changed) { mChanged = changed; };
+
+ const LLDate &getDate() const { return mDate; };
+
+ private:
+ Cookie(const std::string &s, std::string::size_type cookie_start = 0, std::string::size_type cookie_end = std::string::npos);
+ bool parse(const std::string &host);
+ std::string::size_type findFieldEnd(std::string::size_type start = 0, std::string::size_type end = std::string::npos);
+ bool matchName(std::string::size_type start, std::string::size_type end, const char *name);
+
+ std::string mCookie; // The full cookie, in RFC 2109 string format
+ LLDate mDate; // The expiration date of the cookie. For session cookies, this will be a null date (mDate.isNull() is true).
+ // Start/end indices of various parts of the cookie string. Stored as indices into the string to save space and time.
+ std::string::size_type mNameStart, mNameEnd;
+ std::string::size_type mValueStart, mValueEnd;
+ std::string::size_type mDomainStart, mDomainEnd;
+ std::string::size_type mPathStart, mPathEnd;
+ bool mDead;
+ bool mChanged;
+ };
+
+ typedef std::map<std::string, Cookie*> cookie_map_t;
+
+ cookie_map_t mCookies;
+ bool mHasChangedCookies;
+
+ void clearCookies();
+ void removeCookie(const std::string &key);
+};
+
+#endif // LL_LLPLUGINCOOKIESTORE_H
diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp
index 52b5a319ec..ccaf95b36d 100644
--- a/indra/llplugin/llpluginprocesschild.cpp
+++ b/indra/llplugin/llpluginprocesschild.cpp
@@ -155,7 +155,6 @@ void LLPluginProcessChild::idle(void)
{
setState(STATE_PLUGIN_INITIALIZING);
LLPluginMessage message("base", "init");
- message.setValue("user_data_path", mUserDataPath);
sendMessageToPlugin(message);
}
break;
@@ -328,7 +327,6 @@ void LLPluginProcessChild::receiveMessageRaw(const std::string &message)
if(message_name == "load_plugin")
{
mPluginFile = parsed.getValue("file");
- mUserDataPath = parsed.getValue("user_data_path");
}
else if(message_name == "shm_add")
{
diff --git a/indra/llplugin/llpluginprocesschild.h b/indra/llplugin/llpluginprocesschild.h
index 58f8935ed1..0e5e85406a 100644
--- a/indra/llplugin/llpluginprocesschild.h
+++ b/indra/llplugin/llpluginprocesschild.h
@@ -98,8 +98,6 @@ private:
std::string mPluginFile;
- std::string mUserDataPath;
-
LLPluginInstance *mInstance;
typedef std::map<std::string, LLPluginSharedMemory*> sharedMemoryRegionsType;
diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
index efd5df687e..895c858979 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -98,14 +98,12 @@ void LLPluginProcessParent::errorState(void)
setState(STATE_ERROR);
}
-void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug, const std::string &user_data_path)
+void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug)
{
mProcess.setExecutable(launcher_filename);
mPluginFile = plugin_filename;
mCPUUsage = 0.0f;
- mDebug = debug;
- mUserDataPath = user_data_path;
-
+ mDebug = debug;
setState(STATE_INITIALIZED);
}
@@ -362,7 +360,6 @@ void LLPluginProcessParent::idle(void)
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "load_plugin");
message.setValue("file", mPluginFile);
- message.setValue("user_data_path", mUserDataPath);
sendMessage(message);
}
diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h
index 524cd9923f..cc6c513615 100644
--- a/indra/llplugin/llpluginprocessparent.h
+++ b/indra/llplugin/llpluginprocessparent.h
@@ -59,7 +59,10 @@ public:
LLPluginProcessParent(LLPluginProcessParentOwner *owner);
~LLPluginProcessParent();
- void init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug, const std::string &user_data_path);
+ void init(const std::string &launcher_filename,
+ const std::string &plugin_filename,
+ bool debug);
+
void idle(void);
// returns true if the plugin is on its way to steady state
@@ -143,8 +146,6 @@ private:
std::string mPluginFile;
- std::string mUserDataPath;
-
LLPluginProcessParentOwner *mOwner;
typedef std::map<std::string, LLPluginSharedMemory*> sharedMemoryRegionsType;
diff --git a/indra/llplugin/tests/llplugincookiestore_test.cpp b/indra/llplugin/tests/llplugincookiestore_test.cpp
new file mode 100644
index 0000000000..020d9c1977
--- /dev/null
+++ b/indra/llplugin/tests/llplugincookiestore_test.cpp
@@ -0,0 +1,211 @@
+/**
+ * @file llplugincookiestore_test.cpp
+ * @brief Unit tests for LLPluginCookieStore.
+ *
+ * @cond
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ * @endcond
+ */
+
+#include "linden_common.h"
+#include "../test/lltut.h"
+
+#include "../llplugincookiestore.h"
+
+
+namespace tut
+{
+ // Main Setup
+ struct LLPluginCookieStoreFixture
+ {
+ LLPluginCookieStoreFixture()
+ {
+ // We need dates definitively in the past and the future to properly test cookie expiration.
+ LLDate now = LLDate::now();
+ LLDate past(now.secondsSinceEpoch() - (60.0 * 60.0 * 24.0)); // 1 day in the past
+ LLDate future(now.secondsSinceEpoch() + (60.0 * 60.0 * 24.0)); // 1 day in the future
+
+ mPastString = past.asRFC1123();
+ mFutureString = future.asRFC1123();
+ }
+
+ std::string mPastString;
+ std::string mFutureString;
+ LLPluginCookieStore mCookieStore;
+
+ // List of cookies used for validation
+ std::list<std::string> mCookies;
+
+ // This sets up mCookies from a string returned by one of the functions in LLPluginCookieStore
+ void setCookies(const std::string &cookies)
+ {
+ mCookies.clear();
+ std::string::size_type start = 0;
+
+ while(start != std::string::npos)
+ {
+ std::string::size_type end = cookies.find_first_of("\r\n", start);
+ if(end > start)
+ {
+ std::string line(cookies, start, end - start);
+ if(line.find_first_not_of("\r\n\t ") != std::string::npos)
+ {
+ // The line has some non-whitespace characters. Save it to the list.
+ mCookies.push_back(std::string(cookies, start, end - start));
+ }
+ }
+ start = cookies.find_first_not_of("\r\n ", end);
+ }
+ }
+
+ // This ensures that a cookie matching the one passed is in the list.
+ void ensureCookie(const std::string &cookie)
+ {
+ std::list<std::string>::iterator iter;
+ for(iter = mCookies.begin(); iter != mCookies.end(); iter++)
+ {
+ if(*iter == cookie)
+ {
+ // Found the cookie
+ // TODO: this should do a smarter equality comparison on the two cookies, instead of just a string compare.
+ return;
+ }
+ }
+
+ // Didn't find this cookie
+ std::string message = "cookie not found: ";
+ message += cookie;
+ ensure(message, false);
+ }
+
+ // This ensures that the number of cookies in the list matches what's expected.
+ void ensureSize(const std::string &message, size_t size)
+ {
+ if(mCookies.size() != size)
+ {
+ std::stringstream full_message;
+
+ full_message << message << " (expected " << size << ", actual " << mCookies.size() << ")";
+ ensure(full_message.str(), false);
+ }
+ }
+ };
+
+ typedef test_group<LLPluginCookieStoreFixture> factory;
+ typedef factory::object object;
+ factory tf("LLPluginCookieStore test");
+
+ // Tests
+ template<> template<>
+ void object::test<1>()
+ {
+ // Test 1: cookie uniqueness and update lists.
+ // Valid, distinct cookies:
+
+ std::string cookie01 = "cookieA=value; domain=example.com; path=/";
+ std::string cookie02 = "cookieB=value; domain=example.com; path=/"; // different name
+ std::string cookie03 = "cookieA=value; domain=foo.example.com; path=/"; // different domain
+ std::string cookie04 = "cookieA=value; domain=example.com; path=/bar/"; // different path
+ std::string cookie05 = "cookieC; domain=example.com; path=/"; // empty value
+ std::string cookie06 = "cookieD=value; domain=example.com; path=/; expires="; // different name, persistent cookie
+ cookie06 += mFutureString;
+
+ mCookieStore.setCookies(cookie01);
+ mCookieStore.setCookies(cookie02);
+ mCookieStore.setCookies(cookie03);
+ mCookieStore.setCookies(cookie04);
+ mCookieStore.setCookies(cookie05);
+ mCookieStore.setCookies(cookie06);
+
+ // Invalid cookies (these will get parse errors and not be added to the store)
+
+ std::string badcookie01 = "cookieD=value; domain=example.com; path=/; foo=bar"; // invalid field name
+ std::string badcookie02 = "cookieE=value; path=/"; // no domain
+
+ mCookieStore.setCookies(badcookie01);
+ mCookieStore.setCookies(badcookie02);
+
+ // All cookies added so far should have been marked as "changed"
+ setCookies(mCookieStore.getChangedCookies());
+ ensureSize("count of changed cookies", 6);
+ ensureCookie(cookie01);
+ ensureCookie(cookie02);
+ ensureCookie(cookie03);
+ ensureCookie(cookie04);
+ ensureCookie(cookie05);
+ ensureCookie(cookie06);
+
+ // Save off the current state of the cookie store (we'll restore it later)
+ std::string savedCookies = mCookieStore.getAllCookies();
+
+ // Test replacing cookies
+ std::string cookie01a = "cookieA=newvalue; domain=example.com; path=/"; // updated value
+ std::string cookie02a = "cookieB=newvalue; domain=example.com; path=/; expires="; // remove cookie (by setting an expire date in the past)
+ cookie02a += mPastString;
+
+ mCookieStore.setCookies(cookie01a);
+ mCookieStore.setCookies(cookie02a);
+
+ // test for getting changed cookies
+ setCookies(mCookieStore.getChangedCookies());
+ ensureSize("count of updated cookies", 2);
+ ensureCookie(cookie01a);
+ ensureCookie(cookie02a);
+
+ // and for the state of the store after getting changed cookies
+ setCookies(mCookieStore.getAllCookies());
+ ensureSize("count of valid cookies", 5);
+ ensureCookie(cookie01a);
+ ensureCookie(cookie03);
+ ensureCookie(cookie04);
+ ensureCookie(cookie05);
+ ensureCookie(cookie06);
+
+ // Check that only the persistent cookie is returned here
+ setCookies(mCookieStore.getPersistentCookies());
+ ensureSize("count of persistent cookies", 1);
+ ensureCookie(cookie06);
+
+ // Restore the cookie store to a previous state and verify
+ mCookieStore.setAllCookies(savedCookies);
+
+ // Since setAllCookies defaults to not marking cookies as changed, this list should be empty.
+ setCookies(mCookieStore.getChangedCookies());
+ ensureSize("count of changed cookies after restore", 0);
+
+ // Verify that the restore worked as it should have.
+ setCookies(mCookieStore.getAllCookies());
+ ensureSize("count of restored cookies", 6);
+ ensureCookie(cookie01);
+ ensureCookie(cookie02);
+ ensureCookie(cookie03);
+ ensureCookie(cookie04);
+ ensureCookie(cookie05);
+ ensureCookie(cookie06);
+ }
+
+}
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index f1f86fd638..d9e1976341 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -151,14 +151,16 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
}
}
- gGL.pushMatrix();
- glLoadIdentity();
- gGL.translatef(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY), sCurOrigin.mZ);
+ gGL.pushUIMatrix();
+
+ gGL.loadUIIdentity();
+
+ gGL.translateUI(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY), sCurOrigin.mZ);
// this code snaps the text origin to a pixel grid to start with
F32 pixel_offset_x = llround((F32)sCurOrigin.mX) - (sCurOrigin.mX);
F32 pixel_offset_y = llround((F32)sCurOrigin.mY) - (sCurOrigin.mY);
- gGL.translatef(-pixel_offset_x, -pixel_offset_y, 0.f);
+ gGL.translateUI(-pixel_offset_x, -pixel_offset_y, 0.f);
LLFastTimer t(FTM_RENDER_FONTS);
@@ -246,9 +248,6 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
}
- // Remember last-used texture to avoid unnecesssary bind calls.
- LLImageGL *last_bound_texture = NULL;
-
const LLFontGlyphInfo* next_glyph = NULL;
for (i = begin_offset; i < begin_offset + length; i++)
@@ -268,12 +267,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
}
// Per-glyph bitmap texture.
LLImageGL *image_gl = mFontFreetype->getFontBitmapCache()->getImageGL(fgi->mBitmapNum);
- if (last_bound_texture != image_gl)
- {
- gGL.getTexUnit(0)->bind(image_gl);
- last_bound_texture = image_gl;
- }
-
+ gGL.getTexUnit(0)->bind(image_gl);
+
if ((start_x + scaled_max_pixels) < (cur_x + fgi->mXBearing + fgi->mWidth))
{
// Not enough room for this character.
@@ -338,10 +333,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
// recursively render ellipses at end of string
// we've already reserved enough room
- gGL.pushMatrix();
- //glLoadIdentity();
- //gGL.translatef(sCurOrigin.mX, sCurOrigin.mY, 0.0f);
- //glScalef(sScaleX, sScaleY, 1.f);
+ gGL.pushUIMatrix();
renderUTF8(std::string("..."),
0,
cur_x / sScaleX, (F32)y,
@@ -352,10 +344,10 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
S32_MAX, max_pixels,
right_x,
FALSE);
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
- gGL.popMatrix();
+ gGL.popUIMatrix();
return chars_drawn;
}
@@ -681,7 +673,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t
target_x *= sScaleX;
// max_chars is S32_MAX by default, so make sure we don't get overflow
- const S32 max_index = begin_offset + llmin(S32_MAX - begin_offset, max_chars);
+ const S32 max_index = begin_offset + llmin(S32_MAX - begin_offset, max_chars - 1);
F32 scaled_max_pixels = max_pixels * sScaleX;
diff --git a/indra/llrender/llfontregistry.cpp b/indra/llrender/llfontregistry.cpp
index 7a3d6ec4f2..e619f89e1d 100644
--- a/indra/llrender/llfontregistry.cpp
+++ b/indra/llrender/llfontregistry.cpp
@@ -469,6 +469,8 @@ LLFontGL *LLFontRegistry::createFont(const LLFontDescriptor& desc)
else
{
fontlist.push_back(fontp->mFontFreetype);
+ delete fontp;
+ fontp = NULL;
}
}
}
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 36ac3ff119..3d8bd21609 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1699,8 +1699,8 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)
U32 size = pick_width * pick_height;
size = (size + 7) / 8; // pixelcount-to-bits
mPickMask = new U8[size];
- mPickMaskWidth = pick_width;
- mPickMaskHeight = pick_height;
+ mPickMaskWidth = pick_width - 1;
+ mPickMaskHeight = pick_height - 1;
memset(mPickMask, 0, sizeof(U8) * size);
@@ -1743,20 +1743,18 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
llassert(false);
}
- llassert(mPickMaskWidth > 0 && mPickMaskHeight > 0);
-
S32 x = llfloor(u * mPickMaskWidth);
S32 y = llfloor(v * mPickMaskHeight);
- if (LL_UNLIKELY(x >= mPickMaskWidth))
+ if (LL_UNLIKELY(x > mPickMaskWidth))
{
LL_WARNS_ONCE("render") << "Ooh, width overrun on pick mask read, that coulda been bad." << LL_ENDL;
- x = llmax(0, mPickMaskWidth-1);
+ x = llmax((U16)0, mPickMaskWidth);
}
- if (LL_UNLIKELY(y >= mPickMaskHeight))
+ if (LL_UNLIKELY(y > mPickMaskHeight))
{
LL_WARNS_ONCE("render") << "Ooh, height overrun on pick mask read, that woulda been bad." << LL_ENDL;
- y = llmax(0, mPickMaskHeight-1);
+ y = llmax((U16)0, mPickMaskHeight);
}
S32 idx = y*mPickMaskWidth+x;
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 595b8577ff..c3540a717c 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -49,6 +49,9 @@ F64 gGLLastProjection[16];
F64 gGLProjection[16];
S32 gGLViewport[4];
+U32 LLRender::sUICalls = 0;
+U32 LLRender::sUIVerts = 0;
+
static const U32 LL_NUM_TEXTURE_LAYERS = 16;
static GLenum sGLTextureType[] =
@@ -90,7 +93,9 @@ static GLenum sGLBlendFactor[] =
GL_DST_ALPHA,
GL_SRC_ALPHA,
GL_ONE_MINUS_DST_ALPHA,
- GL_ONE_MINUS_SRC_ALPHA
+ GL_ONE_MINUS_SRC_ALPHA,
+
+ GL_ZERO // 'BF_UNDEF'
};
LLTexUnit::LLTexUnit(S32 index)
@@ -116,6 +121,8 @@ void LLTexUnit::refreshState(void)
// We set dirty to true so that the tex unit knows to ignore caching
// and we reset the cached tex unit state
+ gGL.flush();
+
glActiveTextureARB(GL_TEXTURE0_ARB + mIndex);
if (mCurrTexType != TT_NONE)
{
@@ -145,6 +152,7 @@ void LLTexUnit::activate(void)
if ((S32)gGL.mCurrTextureUnitIndex != mIndex || gGL.mDirty)
{
+ gGL.flush();
glActiveTextureARB(GL_TEXTURE0_ARB + mIndex);
gGL.mCurrTextureUnitIndex = mIndex;
}
@@ -176,6 +184,7 @@ void LLTexUnit::disable(void)
{
activate();
unbind(mCurrTexType);
+ gGL.flush();
glDisable(sGLTextureType[mCurrTexType]);
mCurrTexType = TT_NONE;
}
@@ -255,10 +264,9 @@ bool LLTexUnit::bind(LLImageGL* texture, bool for_rendering, bool forceBind)
return false ;
}
- gGL.flush();
-
if ((mCurrTexture != texture->getTexName()) || forceBind)
{
+ gGL.flush();
activate();
enable(texture->getTarget());
mCurrTexture = texture->getTexName();
@@ -382,6 +390,8 @@ void LLTexUnit::setTextureAddressMode(eTextureAddressMode mode)
{
if (mIndex < 0 || mCurrTexture == 0) return;
+ gGL.flush();
+
activate();
glTexParameteri (sGLTextureType[mCurrTexType], GL_TEXTURE_WRAP_S, sGLAddressMode[mode]);
@@ -396,6 +406,8 @@ void LLTexUnit::setTextureFilteringOption(LLTexUnit::eTextureFilterOptions optio
{
if (mIndex < 0 || mCurrTexture == 0) return;
+ gGL.flush();
+
if (option == TFO_POINT)
{
glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -445,6 +457,8 @@ void LLTexUnit::setTextureBlendType(eTextureBlendType type)
return;
}
+ gGL.flush();
+
activate();
mCurrBlendType = type;
S32 scale_amount = 1;
@@ -561,6 +575,7 @@ void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eT
if (mCurrBlendType != TB_COMBINE || gGL.mDirty)
{
mCurrBlendType = TB_COMBINE;
+ gGL.flush();
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
}
@@ -571,6 +586,8 @@ void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eT
return;
}
+ gGL.flush();
+
// Get the gl source enums according to the eTextureBlendSrc sources passed in
GLint source1 = getTextureSource(src1);
GLint source2 = getTextureSource(src2);
@@ -703,6 +720,7 @@ void LLTexUnit::setColorScale(S32 scale)
if (mCurrColorScale != scale || gGL.mDirty)
{
mCurrColorScale = scale;
+ gGL.flush();
glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, scale );
}
}
@@ -712,6 +730,7 @@ void LLTexUnit::setAlphaScale(S32 scale)
if (mCurrAlphaScale != scale || gGL.mDirty)
{
mCurrAlphaScale = scale;
+ gGL.flush();
glTexEnvi( GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale );
}
}
@@ -759,6 +778,8 @@ LLRender::LLRender()
mCurrAlphaFunc = CF_DEFAULT;
mCurrAlphaFuncVal = 0.01f;
+ mCurrBlendSFactor = BF_UNDEF;
+ mCurrBlendDFactor = BF_UNDEF;
}
LLRender::~LLRender()
@@ -821,6 +842,88 @@ void LLRender::popMatrix()
glPopMatrix();
}
+void LLRender::translateUI(F32 x, F32 y, F32 z)
+{
+ if (mUIOffset.empty())
+ {
+ llerrs << "Need to push a UI translation frame before offsetting" << llendl;
+ }
+
+ mUIOffset.front().mV[0] += x;
+ mUIOffset.front().mV[1] += y;
+ mUIOffset.front().mV[2] += z;
+}
+
+void LLRender::scaleUI(F32 x, F32 y, F32 z)
+{
+ if (mUIScale.empty())
+ {
+ llerrs << "Need to push a UI transformation frame before scaling." << llendl;
+ }
+
+ mUIScale.front().scaleVec(LLVector3(x,y,z));
+}
+
+void LLRender::pushUIMatrix()
+{
+ if (mUIOffset.empty())
+ {
+ mUIOffset.push_front(LLVector3(0,0,0));
+ }
+ else
+ {
+ mUIOffset.push_front(mUIOffset.front());
+ }
+
+ if (mUIScale.empty())
+ {
+ mUIScale.push_front(LLVector3(1,1,1));
+ }
+ else
+ {
+ mUIScale.push_front(mUIScale.front());
+ }
+}
+
+void LLRender::popUIMatrix()
+{
+ if (mUIOffset.empty())
+ {
+ llerrs << "UI offset stack blown." << llendl;
+ }
+ mUIOffset.pop_front();
+ mUIScale.pop_front();
+}
+
+LLVector3 LLRender::getUITranslation()
+{
+ if (mUIOffset.empty())
+ {
+ llerrs << "UI offset stack empty." << llendl;
+ }
+ return mUIOffset.front();
+}
+
+LLVector3 LLRender::getUIScale()
+{
+ if (mUIScale.empty())
+ {
+ llerrs << "UI scale stack empty." << llendl;
+ }
+ return mUIScale.front();
+}
+
+
+void LLRender::loadUIIdentity()
+{
+ if (mUIOffset.empty())
+ {
+ llerrs << "Need to push UI translation frame before clearing offset." << llendl;
+ }
+ mUIOffset.front().setVec(0,0,0);
+ mUIScale.front().setVec(1,1,1);
+}
+
void LLRender::setColorMask(bool writeColor, bool writeAlpha)
{
setColorMask(writeColor, writeColor, writeColor, writeAlpha);
@@ -843,29 +946,28 @@ void LLRender::setColorMask(bool writeColorR, bool writeColorG, bool writeColorB
void LLRender::setSceneBlendType(eBlendType type)
{
- flush();
switch (type)
{
case BT_ALPHA:
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ blendFunc(BF_SOURCE_ALPHA, BF_ONE_MINUS_SOURCE_ALPHA);
break;
case BT_ADD:
- glBlendFunc(GL_ONE, GL_ONE);
+ blendFunc(BF_ONE, BF_ONE);
break;
case BT_ADD_WITH_ALPHA:
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ blendFunc(BF_SOURCE_ALPHA, BF_ONE);
break;
case BT_MULT:
- glBlendFunc(GL_DST_COLOR, GL_ZERO);
+ blendFunc(BF_DEST_COLOR, BF_ZERO);
break;
case BT_MULT_ALPHA:
- glBlendFunc(GL_DST_ALPHA, GL_ZERO);
+ blendFunc(BF_DEST_ALPHA, BF_ZERO);
break;
case BT_MULT_X2:
- glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR);
+ blendFunc(BF_DEST_COLOR, BF_SOURCE_COLOR);
break;
case BT_REPLACE:
- glBlendFunc(GL_ONE, GL_ZERO);
+ blendFunc(BF_ONE, BF_ZERO);
break;
default:
llerrs << "Unknown Scene Blend Type: " << type << llendl;
@@ -891,8 +993,15 @@ void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor)
{
- flush();
- glBlendFunc(sGLBlendFactor[sfactor], sGLBlendFactor[dfactor]);
+ llassert(sfactor < BF_UNDEF);
+ llassert(dfactor < BF_UNDEF);
+ if (mCurrBlendSFactor != sfactor || mCurrBlendDFactor != dfactor)
+ {
+ mCurrBlendSFactor = sfactor;
+ mCurrBlendDFactor = dfactor;
+ flush();
+ glBlendFunc(sGLBlendFactor[sfactor], sGLBlendFactor[dfactor]);
+ }
}
LLTexUnit* LLRender::getTexUnit(U32 index)
@@ -1012,6 +1121,39 @@ void LLRender::flush()
}
#endif
+ if (!mUIOffset.empty())
+ {
+ sUICalls++;
+ sUIVerts += mCount;
+ }
+
+ if (gDebugGL)
+ {
+ if (mMode == LLRender::QUADS)
+ {
+ if (mCount%4 != 0)
+ {
+ llerrs << "Incomplete quad rendered." << llendl;
+ }
+ }
+
+ if (mMode == LLRender::TRIANGLES)
+ {
+ if (mCount%3 != 0)
+ {
+ llerrs << "Incomplete triangle rendered." << llendl;
+ }
+ }
+
+ if (mMode == LLRender::LINES)
+ {
+ if (mCount%2 != 0)
+ {
+ llerrs << "Incomplete line rendered." << llendl;
+ }
+ }
+ }
+
mBuffer->setBuffer(immediate_mask);
mBuffer->drawArrays(mMode, 0, mCount);
@@ -1031,7 +1173,16 @@ void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
return;
}
- mVerticesp[mCount] = LLVector3(x,y,z);
+ if (mUIOffset.empty())
+ {
+ mVerticesp[mCount] = LLVector3(x,y,z);
+ }
+ else
+ {
+ LLVector3 vert = (LLVector3(x,y,z)+mUIOffset.front()).scaledVec(mUIScale.front());
+ mVerticesp[mCount] = vert;
+ }
+
mCount++;
if (mCount < 4096)
{
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index 0121a190ee..a90fbd4a5c 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -270,7 +270,9 @@ public:
BF_DEST_ALPHA,
BF_SOURCE_ALPHA,
BF_ONE_MINUS_DEST_ALPHA,
- BF_ONE_MINUS_SOURCE_ALPHA
+ BF_ONE_MINUS_SOURCE_ALPHA,
+
+ BF_UNDEF
} eBlendFactor;
LLRender();
@@ -286,6 +288,14 @@ public:
void pushMatrix();
void popMatrix();
+ void translateUI(F32 x, F32 y, F32 z);
+ void scaleUI(F32 x, F32 y, F32 z);
+ void pushUIMatrix();
+ void popUIMatrix();
+ void loadUIIdentity();
+ LLVector3 getUITranslation();
+ LLVector3 getUIScale();
+
void flush();
void begin(const GLuint& mode);
@@ -333,7 +343,9 @@ public:
};
public:
-
+ static U32 sUICalls;
+ static U32 sUIVerts;
+
private:
bool mDirty;
U32 mCount;
@@ -350,7 +362,14 @@ private:
std::vector<LLTexUnit*> mTexUnits;
LLTexUnit* mDummyTexUnit;
+ eBlendFactor mCurrBlendSFactor;
+ eBlendFactor mCurrBlendDFactor;
+
F32 mMaxAnisotropy;
+
+ std::list<LLVector3> mUIOffset;
+ std::list<LLVector3> mUIScale;
+
};
extern F64 gGLModelView[16];
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 853f6f173d..532b6b6524 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -209,6 +209,16 @@ set(llui_HEADER_FILES
set_source_files_properties(${llui_HEADER_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE)
+SET(llurlentry_TEST_DEPENDENCIES
+ llurlmatch.cpp
+ llurlregistry.cpp
+ )
+
+set_source_files_properties(llurlentry.cpp
+ PROPERTIES LL_TEST_ADDITIONAL_SOURCE_FILES
+ "${llurlentry_TEST_DEPENDENCIES}"
+ )
+
list(APPEND llui_SOURCE_FILES ${llui_HEADER_FILES})
add_library (llui ${llui_SOURCE_FILES})
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index aa69dfe0cc..cdcf780d2e 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -103,13 +103,6 @@ void LLAccordionCtrl::draw()
LLLocalClipRect clip(local_rect);
LLPanel::draw();
- /*
- S32 width = getRect().getWidth();
- S32 height = getRect().getHeight();
-
- gl_rect_2d(0, 0 , width - 1 ,height - 1,LLColor4::green,true);
- gl_line_2d(0, 0 , width - 1 ,height - 1,LLColor4::black);
- */
}
@@ -125,7 +118,6 @@ BOOL LLAccordionCtrl::postBuild()
scrollbar_size,
getRect().getHeight() - 1);
-
LLScrollbar::Params sbparams;
sbparams.name("scrollable vertical");
sbparams.rect(scroll_rect);
@@ -380,11 +372,33 @@ void LLAccordionCtrl::arrangeSinge()
}
else
{
- panel_height = expanded_height;
+ if(mFitParent)
+ {
+ panel_height = expanded_height;
+ }
+ else
+ {
+ if(accordion_tab->getAccordionView())
+ {
+ panel_height = accordion_tab->getAccordionView()->getRect().getHeight() +
+ accordion_tab->getHeaderHeight() + 2*BORDER_MARGIN;
+ }
+ else
+ {
+ panel_height = accordion_tab->getRect().getHeight();
+ }
+ }
}
+
+ // make sure at least header is shown
+ panel_height = llmax(panel_height, accordion_tab->getHeaderHeight());
+
ctrlSetLeftTopAndSize(mAccordionTabs[i], panel_left, panel_top, panel_width, panel_height);
panel_top-=mAccordionTabs[i]->getRect().getHeight();
}
+
+ show_hide_scrollbar(getRect().getWidth(), getRect().getHeight());
+ updateLayout(getRect().getWidth(), getRect().getHeight());
}
void LLAccordionCtrl::arrangeMultiple()
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index daa9e08f14..0959722aa6 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -33,8 +33,9 @@
#include "linden_common.h"
#include "lluictrl.h"
-
+#include "llscrollbar.h"
#include "llaccordionctrltab.h"
+#include "lllocalcliprect.h"
#include "lltextbox.h"
@@ -46,6 +47,8 @@ static const S32 HEADER_HEIGHT = 20;
static const S32 HEADER_IMAGE_LEFT_OFFSET = 5;
static const S32 HEADER_TEXT_LEFT_OFFSET = 30;
static const F32 AUTO_OPEN_TIME = 1.f;
+static const S32 VERTICAL_MULTIPLE = 16;
+static const S32 PARENT_BORDER_MARGIN = 5;
static LLDefaultChildRegistry::Register<LLAccordionCtrlTab> t1("accordion_tab");
@@ -277,6 +280,7 @@ LLAccordionCtrlTab::Params::Params()
,header_image_pressed("header_image_pressed")
,header_image_focused("header_image_focused")
,header_text_color("header_text_color")
+ ,fit_panel("fit_panel",true)
{
mouse_opaque(false);
}
@@ -293,6 +297,9 @@ LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p)
,mPaddingTop(p.padding_top)
,mPaddingBottom(p.padding_bottom)
,mCanOpenClose(true)
+ ,mFitPanel(p.fit_panel)
+ ,mContainerPanel(NULL)
+ ,mScrollbar(NULL)
{
mStoredOpenCloseState = false;
mWasStateStored = false;
@@ -321,54 +328,42 @@ void LLAccordionCtrlTab::setDisplayChildren(bool display)
mExpandedHeight : HEADER_HEIGHT);
setRect(rect);
- for(child_list_const_iter_t it = getChildList()->begin();
- getChildList()->end() != it; ++it)
- {
- LLView* child = *it;
- if(DD_HEADER_NAME == child->getName())
- continue;
+ if(mContainerPanel)
+ mContainerPanel->setVisible(getDisplayChildren());
- child->setVisible(getDisplayChildren());
+ if(mDisplayChildren)
+ {
+ adjustContainerPanel();
}
+ else
+ {
+ if(mScrollbar)
+ mScrollbar->setVisible(false);
+ }
+
}
void LLAccordionCtrlTab::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */)
{
LLRect headerRect;
- LLUICtrl::reshape(width, height, TRUE);
-
headerRect.setLeftTopAndSize(
0,height,width,HEADER_HEIGHT);
mHeader->setRect(headerRect);
mHeader->reshape(headerRect.getWidth(), headerRect.getHeight());
- for(child_list_const_iter_t it = getChildList()->begin();
- getChildList()->end() != it; ++it)
- {
- LLView* child = *it;
- if(DD_HEADER_NAME == child->getName())
- continue;
- if(!child->getVisible())
- continue;
-
- LLRect childRect = child->getRect();
- S32 childWidth = width - getPaddingLeft() - getPaddingRight();
- S32 childHeight = height - getHeaderHeight() - getPaddingTop() - getPaddingBottom();
+ if(!mDisplayChildren)
+ return;
- child->reshape(childWidth,childHeight);
-
- childRect.setLeftTopAndSize(
- getPaddingLeft(),
- childHeight + getPaddingBottom(),
- childWidth,
- childHeight);
+ LLRect childRect;
- child->setRect(childRect);
-
- break;//suppose that there is only one panel
- }
+ childRect.setLeftTopAndSize(
+ getPaddingLeft(),
+ height - getHeaderHeight() - getPaddingTop(),
+ width - getPaddingLeft() - getPaddingRight(),
+ height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() );
+ adjustContainerPanel(childRect);
}
void LLAccordionCtrlTab::changeOpenClose(bool is_open)
@@ -439,7 +434,7 @@ void LLAccordionCtrlTab::setAccordionView(LLView* panel)
}
-LLView* LLAccordionCtrlTab::getAccordionView()
+LLView* LLAccordionCtrlTab::findContainerView()
{
for(child_list_const_iter_t it = getChildList()->begin();
getChildList()->end() != it; ++it)
@@ -470,10 +465,49 @@ void LLAccordionCtrlTab::setHeaderVisible(bool value)
reshape(getRect().getWidth(), getRect().getHeight(), FALSE);
};
-//vurtual
+//virtual
BOOL LLAccordionCtrlTab::postBuild()
{
- mHeader->setVisible(mHeaderVisible);
+ if(mHeader)
+ mHeader->setVisible(mHeaderVisible);
+
+ static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
+
+ LLRect scroll_rect;
+ scroll_rect.setOriginAndSize(
+ getRect().getWidth() - scrollbar_size,
+ 1,
+ scrollbar_size,
+ getRect().getHeight() - 1);
+
+ mContainerPanel = findContainerView();
+
+ if(!mFitPanel)
+ {
+ LLScrollbar::Params sbparams;
+ sbparams.name("scrollable vertical");
+ sbparams.rect(scroll_rect);
+ sbparams.orientation(LLScrollbar::VERTICAL);
+ sbparams.doc_size(getRect().getHeight());
+ sbparams.doc_pos(0);
+ sbparams.page_size(getRect().getHeight());
+ sbparams.step_size(VERTICAL_MULTIPLE);
+ sbparams.follows.flags(FOLLOWS_RIGHT | FOLLOWS_TOP | FOLLOWS_BOTTOM);
+ sbparams.change_callback(boost::bind(&LLAccordionCtrlTab::onScrollPosChangeCallback, this, _1, _2));
+
+
+ mScrollbar = LLUICtrlFactory::create<LLScrollbar> (sbparams);
+ LLView::addChild( mScrollbar );
+ mScrollbar->setFollowsRight();
+ mScrollbar->setFollowsTop();
+ mScrollbar->setFollowsBottom();
+
+ mScrollbar->setVisible(false);
+ }
+
+ if(mContainerPanel)
+ mContainerPanel->setVisible(mDisplayChildren);
+
return LLUICtrl::postBuild();
}
bool LLAccordionCtrlTab::notifyChildren (const LLSD& info)
@@ -562,6 +596,12 @@ BOOL LLAccordionCtrlTab::handleKey(KEY key, MASK mask, BOOL called_from_parent)
if( !header->hasFocus() )
return LLUICtrl::handleKey(key, mask, called_from_parent);
+ if ( (key == KEY_RETURN )&& mask == MASK_NONE)
+ {
+ changeOpenClose(getDisplayChildren());
+ return TRUE;
+ }
+
if ( (key == KEY_ADD || key == KEY_RIGHT)&& mask == MASK_NONE)
{
if(getDisplayChildren() == false)
@@ -622,6 +662,7 @@ void LLAccordionCtrlTab::storeOpenCloseState()
mStoredOpenCloseState = getDisplayChildren();
mWasStateStored = true;
}
+
void LLAccordionCtrlTab::restoreOpenCloseState()
{
if(!mWasStateStored)
@@ -632,3 +673,192 @@ void LLAccordionCtrlTab::restoreOpenCloseState()
}
mWasStateStored = false;
}
+
+void LLAccordionCtrlTab::adjustContainerPanel ()
+{
+ S32 width = getRect().getWidth();
+ S32 height = getRect().getHeight();
+
+ LLRect child_rect;
+ child_rect.setLeftTopAndSize(
+ getPaddingLeft(),
+ height - getHeaderHeight() - getPaddingTop(),
+ width - getPaddingLeft() - getPaddingRight(),
+ height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() );
+
+ adjustContainerPanel(child_rect);
+}
+
+void LLAccordionCtrlTab::adjustContainerPanel(const LLRect& child_rect)
+{
+ if(!mContainerPanel)
+ return;
+
+ if(!mFitPanel)
+ {
+ show_hide_scrollbar(child_rect);
+ updateLayout(child_rect);
+ }
+ else
+ {
+ mContainerPanel->reshape(child_rect.getWidth(),child_rect.getHeight());
+ mContainerPanel->setRect(child_rect);
+ }
+}
+
+S32 LLAccordionCtrlTab::getChildViewHeight()
+{
+ if(!mContainerPanel)
+ return 0;
+ return mContainerPanel->getRect().getHeight();
+}
+
+void LLAccordionCtrlTab::show_hide_scrollbar(const LLRect& child_rect)
+{
+ if(getChildViewHeight() > child_rect.getHeight() )
+ showScrollbar(child_rect);
+ else
+ hideScrollbar(child_rect);
+}
+void LLAccordionCtrlTab::showScrollbar(const LLRect& child_rect)
+{
+ if(!mContainerPanel || !mScrollbar)
+ return;
+ bool was_visible = mScrollbar->getVisible();
+ mScrollbar->setVisible(true);
+
+ static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
+
+ {
+ ctrlSetLeftTopAndSize(mScrollbar,child_rect.getWidth()-scrollbar_size,
+ child_rect.getHeight()-PARENT_BORDER_MARGIN,
+ scrollbar_size,
+ child_rect.getHeight()-2*PARENT_BORDER_MARGIN);
+ }
+
+ LLRect orig_rect = mContainerPanel->getRect();
+
+ mScrollbar->setPageSize(child_rect.getHeight());
+ mScrollbar->setDocParams(orig_rect.getHeight(),mScrollbar->getDocPos());
+
+ if(was_visible)
+ {
+ S32 scroll_pos = llmin(mScrollbar->getDocPos(), orig_rect.getHeight() - child_rect.getHeight() - 1);
+ mScrollbar->setDocPos(scroll_pos);
+ }
+ else//shrink child panel
+ {
+ updateLayout(child_rect);
+ }
+
+}
+
+void LLAccordionCtrlTab::hideScrollbar( const LLRect& child_rect )
+{
+ if(!mContainerPanel || !mScrollbar)
+ return;
+
+ if(mScrollbar->getVisible() == false)
+ return;
+ mScrollbar->setVisible(false);
+ mScrollbar->setDocPos(0);
+
+ //shrink child panel
+ updateLayout(child_rect);
+}
+
+void LLAccordionCtrlTab::onScrollPosChangeCallback(S32, LLScrollbar*)
+{
+ LLRect child_rect;
+
+ S32 width = getRect().getWidth();
+ S32 height = getRect().getHeight();
+
+ child_rect.setLeftTopAndSize(
+ getPaddingLeft(),
+ height - getHeaderHeight() - getPaddingTop(),
+ width - getPaddingLeft() - getPaddingRight(),
+ height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() );
+
+ updateLayout(child_rect);
+}
+
+void LLAccordionCtrlTab::drawChild(const LLRect& root_rect,LLView* child)
+{
+ if (child && child->getVisible() && child->getRect().isValid())
+ {
+ LLRect screen_rect;
+ localRectToScreen(child->getRect(),&screen_rect);
+
+ if ( root_rect.overlaps(screen_rect) && LLUI::sDirtyRect.overlaps(screen_rect))
+ {
+ glMatrixMode(GL_MODELVIEW);
+ LLUI::pushMatrix();
+ {
+ LLUI::translate((F32)child->getRect().mLeft, (F32)child->getRect().mBottom, 0.f);
+ child->draw();
+
+ }
+ LLUI::popMatrix();
+ }
+ }
+}
+
+void LLAccordionCtrlTab::draw()
+{
+ if(mFitPanel)
+ LLUICtrl::draw();
+ else
+ {
+ LLRect root_rect = getRootView()->getRect();
+ drawChild(root_rect,mHeader);
+ drawChild(root_rect,mScrollbar );
+ {
+ LLRect child_rect;
+
+ S32 width = getRect().getWidth();
+ S32 height = getRect().getHeight();
+
+ child_rect.setLeftTopAndSize(
+ getPaddingLeft(),
+ height - getHeaderHeight() - getPaddingTop(),
+ width - getPaddingLeft() - getPaddingRight(),
+ height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() );
+
+ LLLocalClipRect clip(child_rect);
+ drawChild(root_rect,mContainerPanel);
+ }
+ }
+}
+
+void LLAccordionCtrlTab::updateLayout ( const LLRect& child_rect )
+{
+ LLView* child = getAccordionView();
+ if(!mContainerPanel)
+ return;
+
+ S32 panel_top = child_rect.getHeight();
+ S32 panel_width = child_rect.getWidth();
+
+ static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
+ if(mScrollbar->getVisible() != false)
+ {
+ panel_top+=mScrollbar->getDocPos();
+ panel_width-=scrollbar_size;
+ }
+
+ //set sizes for first panels and dragbars
+ LLRect panel_rect = child->getRect();
+ ctrlSetLeftTopAndSize(mContainerPanel,child_rect.mLeft,panel_top,panel_width,panel_rect.getHeight());
+}
+void LLAccordionCtrlTab::ctrlSetLeftTopAndSize(LLView* panel, S32 left, S32 top, S32 width, S32 height)
+{
+ if(!panel)
+ return;
+ LLRect panel_rect = panel->getRect();
+ panel_rect.setLeftTopAndSize( left, top, width, height);
+ panel->reshape( width, height, 1);
+ panel->setRect(panel_rect);
+}
+
+
diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
index 2e0260ab16..4b8b22405e 100644
--- a/indra/llui/llaccordionctrltab.h
+++ b/indra/llui/llaccordionctrltab.h
@@ -35,12 +35,14 @@
#include <string>
#include "llrect.h"
+#include "lluictrl.h"
+#include "lluicolor.h"
-class LLUICtrl;
class LLUICtrlFactory;
class LLUIImage;
class LLButton;
class LLTextBox;
+class LLScrollbar;
@@ -84,6 +86,8 @@ public:
Optional<bool> header_visible;
+ Optional<bool> fit_panel;
+
Optional<S32> padding_left;
Optional<S32> padding_right;
Optional<S32> padding_top;
@@ -107,7 +111,7 @@ public:
//set LLAccordionCtrlTab panel
void setAccordionView(LLView* panel);
- LLView* getAccordionView();
+ LLView* getAccordionView() { return mContainerPanel; };
bool getCollapsible() {return mCollapsible;};
@@ -123,6 +127,8 @@ public:
S32 notify(const LLSD& info);
bool notifyChildren(const LLSD& info);
+ void draw();
+
void storeOpenCloseState ();
void restoreOpenCloseState ();
@@ -164,9 +170,26 @@ public:
void showAndFocusHeader();
-private:
+ void setFitPanel( bool fit ) { mFitPanel = true; }
-
+protected:
+ void adjustContainerPanel (const LLRect& child_rect);
+ void adjustContainerPanel ();
+ S32 getChildViewHeight ();
+
+ void onScrollPosChangeCallback(S32, LLScrollbar*);
+
+ void show_hide_scrollbar (const LLRect& child_rect);
+ void showScrollbar (const LLRect& child_rect);
+ void hideScrollbar (const LLRect& child_rect);
+
+ void updateLayout ( const LLRect& child_rect );
+ void ctrlSetLeftTopAndSize (LLView* panel, S32 left, S32 top, S32 width, S32 height);
+
+ void drawChild(const LLRect& root_rect,LLView* child);
+
+ LLView* findContainerView ();
+private:
class LLAccordionCtrlTabHeader;
LLAccordionCtrlTabHeader* mHeader; //Header
@@ -176,6 +199,7 @@ private:
bool mHeaderVisible;
bool mCanOpenClose;
+ bool mFitPanel;
S32 mPaddingLeft;
S32 mPaddingRight;
@@ -185,6 +209,8 @@ private:
bool mStoredOpenCloseState;
bool mWasStateStored;
+ LLScrollbar* mScrollbar;
+ LLView* mContainerPanel;
LLUIColor mDropdownBGColor;
};
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 1d4dc35cee..33c6a8b6ac 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -824,7 +824,7 @@ void LLButton::draw()
x = text_right;
break;
case LLFontGL::HCENTER:
- x = getRect().getWidth() / 2;
+ x = text_left + (text_width / 2);
break;
case LLFontGL::LEFT:
default:
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 6a0d8ef3d6..6a1e3a9425 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -216,7 +216,8 @@ public:
void setImageOverlay(const std::string& image_name, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white);
void setImageOverlay(const LLUUID& image_id, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white);
LLPointer<LLUIImage> getImageOverlay() { return mImageOverlay; }
-
+ LLFontGL::HAlign getImageOverlayHAlign() const { return mImageOverlayAlignment; }
+
void autoResize(); // resize with label of current btn state
void resize(LLUIString label); // resize with label input
void setLabel( const LLStringExplicit& label);
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index 9d23daf56d..cc107c972d 100644
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -160,7 +160,7 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p)
createLineEditor(p);
- setTopLostCallback(boost::bind(&LLComboBox::hideList, this));
+ mTopLostSignalConnection = setTopLostCallback(boost::bind(&LLComboBox::hideList, this));
}
void LLComboBox::initFromParams(const LLComboBox::Params& p)
@@ -187,6 +187,9 @@ BOOL LLComboBox::postBuild()
LLComboBox::~LLComboBox()
{
// children automatically deleted, including mMenu, mButton
+
+ // explicitly disconect this signal, since base class destructor might fire top lost
+ mTopLostSignalConnection.disconnect();
}
@@ -320,15 +323,19 @@ void LLComboBox::setValue(const LLSD& value)
LLScrollListItem* item = mList->getFirstSelected();
if (item)
{
- setLabel( mList->getSelectedItemLabel() );
+ setLabel(getSelectedItemLabel());
}
mLastSelectedIndex = mList->getFirstSelectedIndex();
}
+ else
+ {
+ mLastSelectedIndex = -1;
+ }
}
const std::string LLComboBox::getSimple() const
{
- const std::string res = mList->getSelectedItemLabel();
+ const std::string res = getSelectedItemLabel();
if (res.empty() && mAllowTextEntry)
{
return mTextEntry->getText();
@@ -407,7 +414,7 @@ BOOL LLComboBox::remove(S32 index)
if (index < mList->getItemCount())
{
mList->deleteSingleItem(index);
- setLabel(mList->getSelectedItemLabel());
+ setLabel(getSelectedItemLabel());
return TRUE;
}
return FALSE;
@@ -448,7 +455,7 @@ BOOL LLComboBox::setCurrentByIndex( S32 index )
BOOL found = mList->selectNthItem( index );
if (found)
{
- setLabel(mList->getSelectedItemLabel());
+ setLabel(getSelectedItemLabel());
mLastSelectedIndex = index;
}
return found;
@@ -488,7 +495,6 @@ void LLComboBox::createLineEditor(const LLComboBox::Params& p)
params.max_length_bytes(mMaxChars);
params.commit_callback.function(boost::bind(&LLComboBox::onTextCommit, this, _2));
params.keystroke_callback(boost::bind(&LLComboBox::onTextEntry, this, _1));
- params.handle_edit_keys_directly(true);
params.commit_on_focus_lost(false);
params.follows.flags(FOLLOWS_ALL);
params.label(mLabel);
@@ -612,16 +618,14 @@ void LLComboBox::showList()
mList->setFocus(TRUE);
- // register ourselves as a "top" control
- // effectively putting us into a special draw layer
- // and not affecting the bounding rectangle calculation
- gFocusMgr.setTopCtrl(this);
-
// Show the list and push the button down
mButton->setToggleState(TRUE);
mList->setVisible(TRUE);
+ LLUI::addPopup(this);
+
setUseBoundingRect(TRUE);
+// updateBoundingRect();
}
void LLComboBox::hideList()
@@ -644,10 +648,8 @@ void LLComboBox::hideList()
mList->mouseOverHighlightNthItem(-1);
setUseBoundingRect(FALSE);
- if( gFocusMgr.getTopCtrl() == this )
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ LLUI::removePopup(this);
+// updateBoundingRect();
}
}
@@ -703,13 +705,10 @@ void LLComboBox::onListMouseUp()
void LLComboBox::onItemSelected(const LLSD& data)
{
- const std::string name = mList->getSelectedItemLabel();
-
- S32 cur_id = getCurrentIndex();
- mLastSelectedIndex = cur_id;
- if (cur_id != -1)
+ mLastSelectedIndex = getCurrentIndex();
+ if (mLastSelectedIndex != -1)
{
- setLabel(name);
+ setLabel(getSelectedItemLabel());
if (mAllowTextEntry)
{
@@ -717,7 +716,6 @@ void LLComboBox::onItemSelected(const LLSD& data)
mTextEntry->selectAll();
}
}
-
// hiding the list reasserts the old value stored in the text editor/dropdown button
hideList();
@@ -912,7 +910,7 @@ void LLComboBox::updateSelection()
}
else if (mList->selectItemByPrefix(left_wstring, FALSE))
{
- LLWString selected_item = utf8str_to_wstring(mList->getSelectedItemLabel());
+ LLWString selected_item = utf8str_to_wstring(getSelectedItemLabel());
LLWString wtext = left_wstring + selected_item.substr(left_wstring.size(), selected_item.size());
mTextEntry->setText(wstring_to_utf8str(wtext));
mTextEntry->setSelection(left_wstring.size(), mTextEntry->getWText().size());
@@ -1014,7 +1012,7 @@ BOOL LLComboBox::setCurrentByID(const LLUUID& id)
if (found)
{
- setLabel(mList->getSelectedItemLabel());
+ setLabel(getSelectedItemLabel());
mLastSelectedIndex = mList->getFirstSelectedIndex();
}
@@ -1030,7 +1028,7 @@ BOOL LLComboBox::setSelectedByValue(const LLSD& value, BOOL selected)
BOOL found = mList->setSelectedByValue(value, selected);
if (found)
{
- setLabel(mList->getSelectedItemLabel());
+ setLabel(getSelectedItemLabel());
}
return found;
}
@@ -1069,3 +1067,24 @@ BOOL LLComboBox::selectItemRange( S32 first, S32 last )
{
return mList->selectItemRange(first, last);
}
+
+
+static LLDefaultChildRegistry::Register<LLIconsComboBox> register_icons_combo_box("icons_combo_box");
+
+LLIconsComboBox::Params::Params()
+: icon_column("icon_column", ICON_COLUMN),
+ label_column("label_column", LABEL_COLUMN)
+{}
+
+LLIconsComboBox::LLIconsComboBox(const LLIconsComboBox::Params& p)
+: LLComboBox(p),
+ mIconColumnIndex(p.icon_column),
+ mLabelColumnIndex(p.label_column)
+{}
+
+const std::string LLIconsComboBox::getSelectedItemLabel(S32 column) const
+{
+ mButton->setImageOverlay(LLComboBox::getSelectedItemLabel(mIconColumnIndex), mButton->getImageOverlayHAlign());
+
+ return LLComboBox::getSelectedItemLabel(mLabelColumnIndex);
+}
diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h
index 4f27588467..f0bd432f3a 100644
--- a/indra/llui/llcombobox.h
+++ b/indra/llui/llcombobox.h
@@ -150,7 +150,7 @@ public:
// Get name of current item. Returns an empty string if not found.
const std::string getSimple() const;
// Get contents of column x of selected row
- const std::string getSelectedItemLabel(S32 column = 0) const;
+ virtual const std::string getSelectedItemLabel(S32 column = 0) const;
// Sets the label, which doesn't have to exist in the label.
// This is probably a UI abuse.
@@ -230,6 +230,38 @@ private:
commit_callback_t mPrearrangeCallback;
commit_callback_t mTextEntryCallback;
commit_callback_t mSelectionCallback;
- S32 mLastSelectedIndex;
+ boost::signals2::connection mTopLostSignalConnection;
+ S32 mLastSelectedIndex;
};
+
+// A combo box with icons for the list of items.
+class LLIconsComboBox
+: public LLComboBox
+{
+public:
+ struct Params
+ : public LLInitParam::Block<Params, LLComboBox::Params>
+ {
+ Optional<S32> icon_column,
+ label_column;
+ Params();
+ };
+
+ /*virtual*/ const std::string getSelectedItemLabel(S32 column = 0) const;
+
+private:
+ enum EColumnIndex
+ {
+ ICON_COLUMN = 0,
+ LABEL_COLUMN
+ };
+
+ friend class LLUICtrlFactory;
+ LLIconsComboBox(const Params&);
+ virtual ~LLIconsComboBox() {};
+
+ S32 mIconColumnIndex;
+ S32 mLabelColumnIndex;
+};
+
#endif
diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp
index 0492ab0f25..3d8670fef2 100644
--- a/indra/llui/lldockablefloater.cpp
+++ b/indra/llui/lldockablefloater.cpp
@@ -202,10 +202,6 @@ void LLDockableFloater::setDocked(bool docked, bool pop_on_undock)
translate(0, UNDOCK_LEAP_HEIGHT);
}
}
- else
- {
- docked = false;
- }
LLFloater::setDocked(docked, pop_on_undock);
}
@@ -223,10 +219,10 @@ void LLDockableFloater::draw()
LLFloater::draw();
}
-void LLDockableFloater::setDockControl(LLDockControl* dockControl, bool docked /* = true */)
+void LLDockableFloater::setDockControl(LLDockControl* dockControl)
{
mDockControl.reset(dockControl);
- setDocked(docked && mDockControl.get() != NULL && mDockControl.get()->isDockVisible());
+ setDocked(isDocked());
}
const LLUIImagePtr& LLDockableFloater::getDockTongue()
diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h
index 4d747390af..2b1ce99ae2 100644
--- a/indra/llui/lldockablefloater.h
+++ b/indra/llui/lldockablefloater.h
@@ -127,7 +127,7 @@ private:
void resetInstance();
protected:
- void setDockControl(LLDockControl* dockControl, bool docked = true);
+ void setDockControl(LLDockControl* dockControl);
const LLUIImagePtr& getDockTongue();
private:
diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp
index 832f148902..9d4e2fa495 100644
--- a/indra/llui/lldraghandle.cpp
+++ b/indra/llui/lldraghandle.cpp
@@ -248,15 +248,14 @@ void LLDragHandleTop::reshapeTitleBox()
return;
}
const LLFontGL* font = LLFontGL::getFontSansSerif();
- S32 title_width = font->getWidth( mTitleBox->getText() ) + TITLE_HPAD;
- if (getMaxTitleWidth() > 0)
- title_width = llmin(title_width, getMaxTitleWidth());
+ S32 title_width = getRect().getWidth();
+ title_width -= 2 * LEFT_PAD + 2 * BORDER_PAD + getButtonsRect().getWidth();
S32 title_height = llround(font->getLineHeight());
LLRect title_rect;
title_rect.setLeftTopAndSize(
LEFT_PAD,
getRect().getHeight() - title_vpad,
- getRect().getWidth() - LEFT_PAD - RIGHT_PAD,
+ title_width,
title_height);
// calls reshape on mTitleBox
diff --git a/indra/llui/lldraghandle.h b/indra/llui/lldraghandle.h
index dc5410787b..825bc9303e 100644
--- a/indra/llui/lldraghandle.h
+++ b/indra/llui/lldraghandle.h
@@ -71,6 +71,8 @@ public:
BOOL getForeground() const { return mForeground; }
void setMaxTitleWidth(S32 max_width) {mMaxTitleWidth = llmin(max_width, mMaxTitleWidth); }
S32 getMaxTitleWidth() const { return mMaxTitleWidth; }
+ void setButtonsRect(const LLRect& rect){ mButtonsRect = rect; }
+ LLRect getButtonsRect() { return mButtonsRect; }
void setTitleVisible(BOOL visible);
virtual void setTitle( const std::string& title ) = 0;
@@ -88,6 +90,7 @@ protected:
LLTextBox* mTitleBox;
private:
+ LLRect mButtonsRect;
S32 mDragLastScreenX;
S32 mDragLastScreenY;
S32 mLastMouseScreenX;
diff --git a/indra/llui/lleditmenuhandler.cpp b/indra/llui/lleditmenuhandler.cpp
index 821afae8fd..245bce76f5 100644
--- a/indra/llui/lleditmenuhandler.cpp
+++ b/indra/llui/lleditmenuhandler.cpp
@@ -37,3 +37,10 @@
/* static */
LLEditMenuHandler* LLEditMenuHandler::gEditMenuHandler = NULL;
+LLEditMenuHandler::~LLEditMenuHandler()
+{
+ if (gEditMenuHandler == this)
+ {
+ gEditMenuHandler = NULL;
+ }
+}
diff --git a/indra/llui/lleditmenuhandler.h b/indra/llui/lleditmenuhandler.h
index 1de9c56afb..d72283cd99 100644
--- a/indra/llui/lleditmenuhandler.h
+++ b/indra/llui/lleditmenuhandler.h
@@ -38,7 +38,7 @@ class LLEditMenuHandler
{
public:
// this is needed even though this is just an interface class.
- virtual ~LLEditMenuHandler() {};
+ virtual ~LLEditMenuHandler();
virtual void undo() {};
virtual BOOL canUndo() const { return FALSE; }
diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 2481249f91..35f5a6bbb9 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -243,7 +243,7 @@ LLUUID LLFlatListView::getSelectedUUID() const
}
}
-void LLFlatListView::getSelectedUUIDs(std::vector<LLUUID>& selected_uuids) const
+void LLFlatListView::getSelectedUUIDs(uuid_vec_t& selected_uuids) const
{
if (mSelectedItemPairs.empty()) return;
@@ -492,6 +492,12 @@ void LLFlatListView::onItemMouseClick(item_pair_t* item_pair, MASK mask)
{
if (!item_pair) return;
+ if (!item_pair->first)
+ {
+ llwarning("Attempt to selet an item pair containing null panel item", 0);
+ return;
+ }
+
setFocus(TRUE);
bool select_item = !isSelected(item_pair);
@@ -552,15 +558,6 @@ BOOL LLFlatListView::handleKeyHere(KEY key, MASK mask)
}
break;
}
- case 'A':
- {
- if(MASK_CONTROL & mask)
- {
- selectAll();
- handled = TRUE;
- }
- break;
- }
default:
break;
}
@@ -785,10 +782,15 @@ bool LLFlatListView::selectNextItemPair(bool is_up_direction, bool reset_selecti
return false;
}
-bool LLFlatListView::selectAll()
+BOOL LLFlatListView::canSelectAll() const
{
- if (!mAllowSelection)
- return false;
+ return !mItemPairs.empty() && mAllowSelection && mMultipleSelection;
+}
+
+void LLFlatListView::selectAll()
+{
+ if (!mAllowSelection || !mMultipleSelection)
+ return;
mSelectedItemPairs.clear();
@@ -808,8 +810,6 @@ bool LLFlatListView::selectAll()
// Stretch selected item rect to ensure it won't be clipped
mSelectedItemsBorder->setRect(getLastSelectedItemRect().stretch(-1));
-
- return true;
}
bool LLFlatListView::isSelected(item_pair_t* item_pair) const
@@ -947,11 +947,17 @@ void LLFlatListView::getValues(std::vector<LLSD>& values) const
void LLFlatListView::onFocusReceived()
{
mSelectedItemsBorder->setVisible(TRUE);
+ gEditMenuHandler = this;
}
// virtual
void LLFlatListView::onFocusLost()
{
mSelectedItemsBorder->setVisible(FALSE);
+ // Route menu back to the default
+ if( gEditMenuHandler == this )
+ {
+ gEditMenuHandler = NULL;
+ }
}
//virtual
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
index 92cb40332e..e3c07e811f 100644
--- a/indra/llui/llflatlistview.h
+++ b/indra/llui/llflatlistview.h
@@ -58,7 +58,7 @@
* - Order of returned selected items are not guaranteed
* - The control assumes that all items being added are unique.
*/
-class LLFlatListView : public LLScrollContainer
+class LLFlatListView : public LLScrollContainer, public LLEditMenuHandler
{
public:
@@ -114,8 +114,6 @@ public:
Params();
};
- virtual ~LLFlatListView() { clear(); };
-
/**
* Connects callback to signal called when Return key is pressed.
*/
@@ -224,7 +222,7 @@ public:
* Get LLUUIDs associated with selected items
* @param selected_uuids An std::vector being populated with LLUUIDs associated with selected items
*/
- virtual void getSelectedUUIDs(std::vector<LLUUID>& selected_uuids) const;
+ virtual void getSelectedUUIDs(uuid_vec_t& selected_uuids) const;
/** Get the top selected item */
virtual LLPanel* getSelectedItem() const;
@@ -344,7 +342,8 @@ protected:
virtual bool selectNextItemPair(bool is_up_direction, bool reset_selection);
- virtual bool selectAll();
+ virtual BOOL canSelectAll() const;
+ virtual void selectAll();
virtual bool isSelected(item_pair_t* item_pair) const;
@@ -379,11 +378,14 @@ private:
void setNoItemsCommentVisible(bool visible) const;
-private:
+protected:
/** Comparator to use when sorting the list. */
const ItemComparator* mItemComparator;
+
+private:
+
LLPanel* mItemsPanel;
S32 mItemsNoScrollWidth;
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index b6d73cda3c..e672252a50 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -346,7 +346,7 @@ void LLFloater::layoutDragHandle()
rect = getLocalRect();
}
mDragHandle->setRect(rect);
- updateButtons();
+ updateTitleButtons();
applyTitle();
}
@@ -527,10 +527,7 @@ void LLFloater::setVisible( BOOL visible )
if( !visible )
{
- if( gFocusMgr.childIsTopCtrl( this ) )
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ LLUI::removePopup(this);
if( gFocusMgr.childHasMouseCapture( this ) )
{
@@ -704,10 +701,7 @@ void LLFloater::reshape(S32 width, S32 height, BOOL called_from_parent)
void LLFloater::releaseFocus()
{
- if( gFocusMgr.childIsTopCtrl( this ) )
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ LLUI::removePopup(this);
setFocus(FALSE);
@@ -1067,11 +1061,10 @@ void LLFloater::setMinimized(BOOL minimize)
// Reshape *after* setting mMinimized
reshape( mExpandedRect.getWidth(), mExpandedRect.getHeight(), TRUE );
}
-
- applyTitle ();
make_ui_sound("UISndWindowClose");
- updateButtons();
+ updateTitleButtons();
+ applyTitle ();
}
void LLFloater::setFocus( BOOL b )
@@ -1127,6 +1120,7 @@ void LLFloater::setIsChrome(BOOL is_chrome)
setFocus(FALSE);
// can't Ctrl-Tab to "chrome" floaters
setFocusRoot(FALSE);
+ mButtons[BUTTON_CLOSE]->setToolTip(LLStringExplicit(getButtonTooltip(Params(), BUTTON_CLOSE, is_chrome)));
}
// no titles displayed on "chrome" floaters
@@ -1196,7 +1190,7 @@ void LLFloater::setHost(LLMultiFloater* host)
mButtonScale = 1.f;
//mButtonsEnabled[BUTTON_TEAR_OFF] = FALSE;
}
- updateButtons();
+ updateTitleButtons();
if (host)
{
mHostHandle = host->getHandle();
@@ -1360,7 +1354,6 @@ void LLFloater::bringToFront( S32 x, S32 y )
// virtual
void LLFloater::setVisibleAndFrontmost(BOOL take_focus)
{
- gFocusMgr.setTopCtrl(NULL);
setVisible(TRUE);
setFrontmost(take_focus);
}
@@ -1396,7 +1389,7 @@ void LLFloater::setCanDock(bool b)
mButtonsEnabled[BUTTON_DOCK] = FALSE;
}
}
- updateButtons();
+ updateTitleButtons();
}
void LLFloater::setDocked(bool docked, bool pop_on_undock)
@@ -1405,7 +1398,7 @@ void LLFloater::setDocked(bool docked, bool pop_on_undock)
{
mDocked = docked;
mButtonsEnabled[BUTTON_DOCK] = !mDocked;
- updateButtons();
+ updateTitleButtons();
storeDockStateControl();
}
@@ -1458,7 +1451,7 @@ void LLFloater::onClickTearOff(LLFloater* self)
}
self->setTornOff(false);
}
- self->updateButtons();
+ self->updateTitleButtons();
}
// static
@@ -1554,7 +1547,12 @@ void LLFloater::onClickClose( LLFloater* self )
{
if (!self)
return;
- self->closeFloater(false);
+ self->onClickCloseBtn();
+}
+
+void LLFloater::onClickCloseBtn()
+{
+ closeFloater(false);
}
@@ -1693,7 +1691,7 @@ void LLFloater::setCanMinimize(BOOL can_minimize)
mButtonsEnabled[BUTTON_MINIMIZE] = can_minimize && !isMinimized();
mButtonsEnabled[BUTTON_RESTORE] = can_minimize && isMinimized();
- updateButtons();
+ updateTitleButtons();
}
void LLFloater::setCanClose(BOOL can_close)
@@ -1701,7 +1699,7 @@ void LLFloater::setCanClose(BOOL can_close)
mCanClose = can_close;
mButtonsEnabled[BUTTON_CLOSE] = can_close;
- updateButtons();
+ updateTitleButtons();
}
void LLFloater::setCanTearOff(BOOL can_tear_off)
@@ -1709,7 +1707,7 @@ void LLFloater::setCanTearOff(BOOL can_tear_off)
mCanTearOff = can_tear_off;
mButtonsEnabled[BUTTON_TEAR_OFF] = mCanTearOff && !mHostHandle.isDead();
- updateButtons();
+ updateTitleButtons();
}
@@ -1733,10 +1731,11 @@ void LLFloater::setCanDrag(BOOL can_drag)
}
}
-void LLFloater::updateButtons()
+void LLFloater::updateTitleButtons()
{
static LLUICachedControl<S32> floater_close_box_size ("UIFloaterCloseBoxSize", 0);
static LLUICachedControl<S32> close_box_from_top ("UICloseBoxFromTop", 0);
+ LLRect buttons_rect;
S32 button_count = 0;
for (S32 i = 0; i < BUTTON_COUNT; i++)
{
@@ -1787,6 +1786,15 @@ void LLFloater::updateButtons()
llround((F32)floater_close_box_size * mButtonScale));
}
+ if(!buttons_rect.isValid())
+ {
+ buttons_rect = btn_rect;
+ }
+ else
+ {
+ mDragOnLeft ? buttons_rect.mRight + btn_rect.mRight :
+ buttons_rect.mLeft = btn_rect.mLeft;
+ }
mButtons[i]->setRect(btn_rect);
mButtons[i]->setVisible(TRUE);
// the restore button should have a tab stop so that it takes action when you Ctrl-Tab to a minimized floater
@@ -1798,7 +1806,10 @@ void LLFloater::updateButtons()
}
}
if (mDragHandle)
- mDragHandle->setMaxTitleWidth(getRect().getWidth() - (button_count * (floater_close_box_size + 1)));
+ {
+ localRectToOtherView(buttons_rect, &buttons_rect, mDragHandle);
+ mDragHandle->setButtonsRect(buttons_rect);
+ }
}
void LLFloater::buildButtons(const Params& floater_params)
@@ -1846,7 +1857,7 @@ void LLFloater::buildButtons(const Params& floater_params)
p.click_callback.function(boost::bind(sButtonCallbacks[i], this));
p.tab_stop(false);
p.follows.flags(FOLLOWS_TOP|FOLLOWS_RIGHT);
- p.tool_tip = getButtonTooltip(floater_params, (EFloaterButton)i);
+ p.tool_tip = getButtonTooltip(floater_params, (EFloaterButton)i, getIsChrome());
p.scale_image(true);
p.chrome(true);
@@ -1855,7 +1866,7 @@ void LLFloater::buildButtons(const Params& floater_params)
mButtons[i] = buttonp;
}
- updateButtons();
+ updateTitleButtons();
}
// static
@@ -1901,8 +1912,15 @@ LLUIImage* LLFloater::getButtonPressedImage(const Params& p, EFloaterButton e)
}
// static
-std::string LLFloater::getButtonTooltip(const Params& p, EFloaterButton e)
+std::string LLFloater::getButtonTooltip(const Params& p, EFloaterButton e, bool is_chrome)
{
+ // EXT-4081 (Lag Meter: Ctrl+W does not close floater)
+ // If floater is chrome set 'Close' text for close button's tooltip
+ if(is_chrome && BUTTON_CLOSE == e)
+ {
+ static std::string close_tooltip_chrome = LLTrans::getString("BUTTON_CLOSE_CHROME");
+ return close_tooltip_chrome;
+ }
// TODO: per-floater localizable tooltips set in XML
return sButtonToolTips[e];
}
@@ -2503,10 +2521,7 @@ void LLFloaterView::syncFloaterTabOrder()
if (modal_dialog)
{
// If we have a visible modal dialog, make sure that it has focus
- if( gFocusMgr.getTopCtrl() != modal_dialog )
- {
- gFocusMgr.setTopCtrl( modal_dialog );
- }
+ LLUI::addPopup(modal_dialog);
if( !gFocusMgr.childHasKeyboardFocus( modal_dialog ) )
{
@@ -2815,3 +2830,15 @@ bool LLFloater::isShown(const LLFloater* floater)
{
return floater && floater->isShown();
}
+
+/* static */
+bool LLFloater::isMinimized(const LLFloater* floater)
+{
+ return floater && floater->isMinimized();
+}
+
+/* static */
+bool LLFloater::isVisible(const LLFloater* floater)
+{
+ return floater && floater->getVisible();
+}
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 19e8288807..403723d9d8 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -194,6 +194,8 @@ public:
/// The static isShown() can accept a NULL pointer (which of course
/// returns false). When non-NULL, it calls the non-static isShown().
static bool isShown(const LLFloater* floater);
+ static bool isVisible(const LLFloater* floater);
+ static bool isMinimized(const LLFloater* floater);
BOOL isFirstLook() { return mFirstLook; } // EXT-2653: This function is necessary to prevent overlapping for secondary showed toasts
BOOL isFrontmost();
BOOL isDependent() { return !mDependeeHandle.isDead(); }
@@ -307,19 +309,28 @@ protected:
void destroy() { die(); } // Don't call this directly. You probably want to call closeFloater()
+ virtual void onClickCloseBtn();
+
+ virtual void updateTitleButtons();
+
private:
void setForeground(BOOL b); // called only by floaterview
void cleanupHandles(); // remove handles to dead floaters
void createMinimizeButton();
- void updateButtons();
void buildButtons(const Params& p);
// Images and tooltips are named in the XML, but we want to look them
// up by index.
static LLUIImage* getButtonImage(const Params& p, EFloaterButton e);
static LLUIImage* getButtonPressedImage(const Params& p, EFloaterButton e);
- static std::string getButtonTooltip(const Params& p, EFloaterButton e);
+ /**
+ * @params is_chrome - if floater is Chrome it means that floater will never get focus.
+ * Therefore it can't be closed with 'Ctrl+W'. So the tooltip text of close button( X )
+ * should be 'Close' not 'Close(Ctrl+W)' as for usual floaters.
+ */
+ static std::string getButtonTooltip(const Params& p, EFloaterButton e, bool is_chrome);
+
BOOL offerClickToButton(S32 x, S32 y, MASK mask, EFloaterButton index);
void addResizeCtrls();
void layoutResizeCtrls();
@@ -346,6 +357,7 @@ protected:
LLResizeBar* mResizeBar[4];
LLResizeHandle* mResizeHandle[4];
+ LLButton* mButtons[BUTTON_COUNT];
private:
LLRect mExpandedRect;
@@ -379,7 +391,6 @@ private:
handle_set_t mDependents;
bool mButtonsEnabled[BUTTON_COUNT];
- LLButton* mButtons[BUTTON_COUNT];
F32 mButtonScale;
BOOL mAutoFocus;
LLHandle<LLFloater> mSnappedTo;
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 5de3934c8a..7588d8ab7a 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -272,11 +272,11 @@ bool LLFloaterReg::toggleInstance(const std::string& name, const LLSD& key)
}
//static
-// returns true if the instance exists and is visible
+// returns true if the instance exists and is visible (doesnt matter minimized or not)
bool LLFloaterReg::instanceVisible(const std::string& name, const LLSD& key)
{
LLFloater* instance = findInstance(name, key);
- return LLFloater::isShown(instance);
+ return LLFloater::isVisible(instance);
}
//static
@@ -463,3 +463,12 @@ bool LLFloaterReg::floaterInstanceVisible(const LLSD& sdname)
return instanceVisible(name, key);
}
+//static
+bool LLFloaterReg::floaterInstanceMinimized(const LLSD& sdname)
+{
+ LLSD key;
+ std::string name = sdname.asString();
+ parse_name_key(name, key);
+ LLFloater* instance = findInstance(name, key);
+ return LLFloater::isShown(instance);
+}
diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h
index 8a11d5c3f2..5cacf76771 100644
--- a/indra/llui/llfloaterreg.h
+++ b/indra/llui/llfloaterreg.h
@@ -134,6 +134,7 @@ public:
static void hideFloaterInstance(const LLSD& sdname);
static void toggleFloaterInstance(const LLSD& sdname);
static bool floaterInstanceVisible(const LLSD& sdname);
+ static bool floaterInstanceMinimized(const LLSD& sdname);
// Typed find / get / show
template <class T>
diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp
index 35fbc7b0a8..b3af258456 100644
--- a/indra/llui/llfocusmgr.cpp
+++ b/indra/llui/llfocusmgr.cpp
@@ -38,8 +38,6 @@
const F32 FOCUS_FADE_TIME = 0.3f;
-// NOTE: the LLFocusableElement implementation has been moved here from lluictrl.cpp.
-
LLFocusableElement::LLFocusableElement()
: mFocusLostCallback(NULL),
mFocusReceivedCallback(NULL),
@@ -124,8 +122,7 @@ boost::signals2::connection LLFocusableElement::setTopLostCallback(const focus_s
LLFocusMgr gFocusMgr;
LLFocusMgr::LLFocusMgr()
- :
- mLockedView( NULL ),
+: mLockedView( NULL ),
mMouseCaptor( NULL ),
mKeyboardFocus( NULL ),
mLastKeyboardFocus( NULL ),
@@ -133,16 +130,11 @@ LLFocusMgr::LLFocusMgr()
mKeystrokesOnly(FALSE),
mTopCtrl( NULL ),
mAppHasFocus(TRUE) // Macs don't seem to notify us that we've gotten focus, so default to true
- #ifdef _DEBUG
- , mMouseCaptorName("none")
- , mKeyboardFocusName("none")
- , mTopCtrlName("none")
- #endif
{
}
-void LLFocusMgr::releaseFocusIfNeeded( const LLView* view )
+void LLFocusMgr::releaseFocusIfNeeded( LLView* view )
{
if( childHasMouseCapture( view ) )
{
@@ -162,10 +154,7 @@ void LLFocusMgr::releaseFocusIfNeeded( const LLView* view )
}
}
- if( childIsTopCtrl( view ) )
- {
- setTopCtrl( NULL );
- }
+ LLUI::removePopup(view);
}
@@ -248,11 +237,6 @@ void LLFocusMgr::setKeyboardFocus(LLFocusableElement* new_focus, BOOL lock, BOOL
return;
}
- #ifdef _DEBUG
- LLUICtrl* focus_ctrl = dynamic_cast<LLUICtrl*>(new_focus);
- mKeyboardFocusName = focus_ctrl ? focus_ctrl->getName() : std::string("none");
- #endif
-
// If we've got a default keyboard focus, and the caller is
// releasing keyboard focus, move to the default.
if (mDefaultKeyboardFocus != NULL && mKeyboardFocus == NULL)
@@ -334,20 +318,12 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( const LLFocusableElement* f
if( mKeyboardFocus == focus )
{
mKeyboardFocus = NULL;
- #ifdef _DEBUG
- mKeyboardFocusName = std::string("none");
- #endif
}
}
void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor )
{
- //if (mFocusLocked)
- //{
- // return;
- //}
-
if( new_captor != mMouseCaptor )
{
LLMouseHandler* old_captor = mMouseCaptor;
@@ -370,24 +346,14 @@ void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor )
old_captor->onMouseCaptureLost();
}
- #ifdef _DEBUG
- mMouseCaptorName = new_captor ? new_captor->getName() : std::string("none");
- #endif
}
}
void LLFocusMgr::removeMouseCaptureWithoutCallback( const LLMouseHandler* captor )
{
- //if (mFocusLocked)
- //{
- // return;
- //}
if( mMouseCaptor == captor )
{
mMouseCaptor = NULL;
- #ifdef _DEBUG
- mMouseCaptorName = std::string("none");
- #endif
}
}
@@ -416,10 +382,6 @@ void LLFocusMgr::setTopCtrl( LLUICtrl* new_top )
{
mTopCtrl = new_top;
- #ifdef _DEBUG
- mTopCtrlName = new_top ? new_top->getName() : std::string("none");
- #endif
-
if (old_top)
{
old_top->onTopLost();
@@ -432,9 +394,6 @@ void LLFocusMgr::removeTopCtrlWithoutCallback( const LLUICtrl* top_view )
if( mTopCtrl == top_view )
{
mTopCtrl = NULL;
- #ifdef _DEBUG
- mTopCtrlName = std::string("none");
- #endif
}
}
@@ -478,9 +437,9 @@ void LLFocusMgr::setAppHasFocus(BOOL focus)
}
// release focus from "top ctrl"s, which generally hides them
- if (!focus && mTopCtrl)
+ if (!focus)
{
- setTopCtrl(NULL);
+ LLUI::clearPopups();
}
mAppHasFocus = focus;
}
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
index 83ecd1d301..86d3ccf111 100644
--- a/indra/llui/llfocusmgr.h
+++ b/indra/llui/llfocusmgr.h
@@ -65,10 +65,10 @@ public:
virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
+ virtual void onTopLost(); // called when registered as top ctrl and user clicks elsewhere
protected:
virtual void onFocusReceived();
virtual void onFocusLost();
- virtual void onTopLost(); // called when registered as top ctrl and user clicks elsewhere
focus_signal_t* mFocusLostCallback;
focus_signal_t* mFocusReceivedCallback;
focus_signal_t* mFocusChangedCallback;
@@ -119,7 +119,7 @@ public:
BOOL childIsTopCtrl( const LLView* parent ) const;
// All Three
- void releaseFocusIfNeeded( const LLView* top_view );
+ void releaseFocusIfNeeded( LLView* top_view );
void lockFocus();
void unlockFocus();
BOOL focusLocked() const { return mLockedView != NULL; }
@@ -149,12 +149,6 @@ private:
typedef std::map<LLHandle<LLView>, LLHandle<LLView> > focus_history_map_t;
focus_history_map_t mFocusHistory;
-
- #ifdef _DEBUG
- std::string mMouseCaptorName;
- std::string mKeyboardFocusName;
- std::string mTopCtrlName;
- #endif
};
extern LLFocusMgr gFocusMgr;
diff --git a/indra/llui/llhandle.h b/indra/llui/llhandle.h
index 899f6b9326..8ade327044 100644
--- a/indra/llui/llhandle.h
+++ b/indra/llui/llhandle.h
@@ -67,6 +67,13 @@ public:
return *this;
}
+ template<typename Subclass>
+ LLHandle<T>& operator =(const LLHandle<Subclass>& other)
+ {
+ mTombStone = other.mTombStone;
+ return *this;
+ }
+
bool isDead() const
{
return mTombStone->getTarget() == NULL;
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index dc79550eb4..4512091371 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -49,9 +49,11 @@ static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("la
//
struct LLLayoutStack::LayoutPanel
{
- LayoutPanel(LLPanel* panelp, ELayoutOrientation orientation, S32 min_width, S32 min_height, BOOL auto_resize, BOOL user_resize) : mPanel(panelp),
+ LayoutPanel(LLPanel* panelp, ELayoutOrientation orientation, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize) : mPanel(panelp),
mMinWidth(min_width),
mMinHeight(min_height),
+ mMaxWidth(max_width),
+ mMaxHeight(max_height),
mAutoResize(auto_resize),
mUserResize(user_resize),
mOrientation(orientation),
@@ -112,6 +114,11 @@ struct LLLayoutStack::LayoutPanel
LLPanel* mPanel;
S32 mMinWidth;
S32 mMinHeight;
+
+ // mMaxWidth & mMaxHeight are added to make configurable max width of the nearby chat bar. EXT-5589
+ // they are not processed by LLLayoutStack but they can be if necessary
+ S32 mMaxWidth;
+ S32 mMaxHeight;
BOOL mAutoResize;
BOOL mUserResize;
BOOL mCollapsed;
@@ -261,10 +268,14 @@ LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o
{
const S32 DEFAULT_MIN_WIDTH = 0;
const S32 DEFAULT_MIN_HEIGHT = 0;
+ const S32 DEFAULT_MAX_WIDTH = S32_MAX;
+ const S32 DEFAULT_MAX_HEIGHT = S32_MAX;
const BOOL DEFAULT_AUTO_RESIZE = TRUE;
S32 min_width = DEFAULT_MIN_WIDTH;
S32 min_height = DEFAULT_MIN_HEIGHT;
+ S32 max_width = DEFAULT_MAX_WIDTH;
+ S32 max_height = DEFAULT_MAX_HEIGHT;
BOOL auto_resize = DEFAULT_AUTO_RESIZE;
LLXMLNodePtr output_child;
@@ -281,6 +292,10 @@ LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o
DEFAULT_MIN_WIDTH, output_child);
get_attribute_s32_and_write(child_node, "min_height", &min_height,
DEFAULT_MIN_HEIGHT, output_child);
+ get_attribute_s32_and_write(child_node, "max_width", &max_width,
+ DEFAULT_MAX_WIDTH, output_child);
+ get_attribute_s32_and_write(child_node, "max_height", &max_height,
+ DEFAULT_MAX_HEIGHT, output_child);
get_attribute_bool_and_write(child_node, "auto_resize", &auto_resize,
DEFAULT_AUTO_RESIZE, output_child);
@@ -293,7 +308,7 @@ LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o
if (panelp)
{
panelp->setFollowsNone();
- layout_stackp->addPanel(panelp, min_width, min_height, auto_resize, user_resize);
+ layout_stackp->addPanel(panelp, min_width, min_height, max_width, max_height, auto_resize, user_resize);
}
}
else
@@ -309,7 +324,7 @@ LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o
if (new_child)
{
// put child in new embedded panel
- layout_stackp->addPanel(panelp, min_width, min_height, auto_resize, user_resize);
+ layout_stackp->addPanel(panelp, min_width, min_height, max_width, max_height, auto_resize, user_resize);
// resize panel to contain widget and move widget to be contained in panel
panelp->setRect(new_child->getRect());
new_child->setOrigin(0, 0);
@@ -359,14 +374,14 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width)
return cur_width;
}
-void LLLayoutStack::addPanel(LLPanel* panel, S32 min_width, S32 min_height, BOOL auto_resize, BOOL user_resize, EAnimate animate, S32 index)
+void LLLayoutStack::addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate, S32 index)
{
// panel starts off invisible (collapsed)
if (animate == ANIMATE)
{
panel->setVisible(FALSE);
}
- LayoutPanel* embedded_panel = new LayoutPanel(panel, mOrientation, min_width, min_height, auto_resize, user_resize);
+ LayoutPanel* embedded_panel = new LayoutPanel(panel, mOrientation, min_width, min_height, max_width, max_height, auto_resize, user_resize);
mPanels.insert(mPanels.begin() + llclamp(index, 0, (S32)mPanels.size()), embedded_panel);
@@ -437,6 +452,19 @@ bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_widt
return NULL != panel;
}
+bool LLLayoutStack::getPanelMaxSize(const std::string& panel_name, S32* max_widthp, S32* max_heightp)
+{
+ LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+
+ if (panel)
+ {
+ if (max_widthp) *max_widthp = panel->mMaxWidth;
+ if (max_heightp) *max_heightp = panel->mMaxHeight;
+ }
+
+ return NULL != panel;
+}
+
static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks");
void LLLayoutStack::updateLayout(BOOL force_resize)
{
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index c4f10038f8..e454454fe2 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -74,7 +74,7 @@ public:
ANIMATE
} EAnimate;
- void addPanel(LLPanel* panel, S32 min_width, S32 min_height, BOOL auto_resize, BOOL user_resize, EAnimate animate = NO_ANIMATE, S32 index = S32_MAX);
+ void addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate = NO_ANIMATE, S32 index = S32_MAX);
void removePanel(LLPanel* panel);
void collapsePanel(LLPanel* panel, BOOL collapsed = TRUE);
S32 getNumPanels() { return mPanels.size(); }
@@ -89,6 +89,14 @@ public:
* @returns true if specified by panel_name internal panel exists, false otherwise.
*/
bool getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp);
+
+ /**
+ * Gets maximal width and/or height of the specified by name panel.
+ *
+ * If it is necessary to get only the one dimension pass NULL for another one.
+ * @returns true if specified by panel_name internal panel exists, false otherwise.
+ */
+ bool getPanelMaxSize(const std::string& panel_name, S32* max_width, S32* max_height);
void updateLayout(BOOL force_resize = FALSE);
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 483a394bbd..843f72d8e4 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -91,7 +91,6 @@ LLLineEditor::Params::Params()
background_image_disabled("background_image_disabled"),
background_image_focused("background_image_focused"),
select_on_focus("select_on_focus", false),
- handle_edit_keys_directly("handle_edit_keys_directly", false),
revert_on_esc("revert_on_esc", true),
commit_on_focus_lost("commit_on_focus_lost", true),
ignore_tab("ignore_tab", true),
@@ -136,7 +135,6 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
mIgnoreArrowKeys( FALSE ),
mIgnoreTab( p.ignore_tab ),
mDrawAsterixes( FALSE ),
- mHandleEditKeysDirectly(p.handle_edit_keys_directly),
mSelectAllonFocusReceived( p.select_on_focus ),
mPassDelete(FALSE),
mReadOnly(FALSE),
@@ -192,12 +190,8 @@ LLLineEditor::~LLLineEditor()
{
mCommitOnFocusLost = FALSE;
+ // calls onCommit() while LLLineEditor still valid
gFocusMgr.releaseFocusIfNeeded( this );
-
- if( gEditMenuHandler == this )
- {
- gEditMenuHandler = NULL;
- }
}
@@ -497,6 +491,7 @@ void LLLineEditor::selectAll()
setCursor(mSelectionEnd);
//mScrollHPos = 0;
mIsSelecting = TRUE;
+ updatePrimary();
}
@@ -788,7 +783,7 @@ void LLLineEditor::removeChar()
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
}
@@ -827,7 +822,7 @@ void LLLineEditor::addChar(const llwchar uni_char)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
getWindow()->hideCursorUntilMouseMove();
@@ -916,7 +911,7 @@ BOOL LLLineEditor::handleSelectionKey(KEY key, MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
break;
@@ -932,7 +927,7 @@ BOOL LLLineEditor::handleSelectionKey(KEY key, MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
break;
@@ -958,22 +953,6 @@ BOOL LLLineEditor::handleSelectionKey(KEY key, MASK mask)
}
}
- if (!handled && mHandleEditKeysDirectly)
- {
- if( (MASK_CONTROL & mask) && ('A' == key) )
- {
- if( canSelectAll() )
- {
- selectAll();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- }
-
if(handled)
{
// take selection to 'primary' clipboard
@@ -1020,7 +999,7 @@ void LLLineEditor::cut()
if( need_to_rollback )
{
rollback.doRollback( this );
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
else
if( mKeystrokeCallback )
@@ -1129,7 +1108,7 @@ void LLLineEditor::pasteHelper(bool is_primary)
}
// Truncate the clean string at the limit of what will fit
clean_string = clean_string.substr(0, wchars_that_fit);
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
mText.insert(getCursor(), clean_string);
@@ -1141,7 +1120,7 @@ void LLLineEditor::pasteHelper(bool is_primary)
if( need_to_rollback )
{
rollback.doRollback( this );
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
else
if( mKeystrokeCallback )
@@ -1206,7 +1185,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
}
handled = TRUE;
@@ -1255,7 +1234,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
handled = TRUE;
}
@@ -1282,7 +1261,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
handled = TRUE;
}
@@ -1299,7 +1278,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
handled = TRUE;
}
@@ -1316,7 +1295,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
handled = TRUE;
}
@@ -1339,64 +1318,6 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
break;
}
- if( !handled && mHandleEditKeysDirectly )
- {
- // Standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system.
- if( KEY_DELETE == key )
- {
- if( canDoDelete() )
- {
- doDelete();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- else
- if( MASK_CONTROL & mask )
- {
- if( 'C' == key )
- {
- if( canCopy() )
- {
- copy();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- else
- if( 'V' == key )
- {
- if( canPaste() )
- {
- paste();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- else
- if( 'X' == key )
- {
- if( canCut() )
- {
- cut();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- }
- }
return handled;
}
@@ -1451,7 +1372,7 @@ BOOL LLLineEditor::handleKeyHere(KEY key, MASK mask )
{
rollback.doRollback(this);
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
// Notify owner if requested
@@ -1499,7 +1420,7 @@ BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char)
{
rollback.doRollback( this );
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
// Notify owner if requested
@@ -1544,7 +1465,7 @@ void LLLineEditor::doDelete()
if( need_to_rollback )
{
rollback.doRollback( this );
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
else
{
@@ -1879,11 +1800,6 @@ S32 LLLineEditor::findPixelNearestPos(const S32 cursor_offset) const
return result;
}
-void LLLineEditor::reportBadKeystroke()
-{
- make_ui_sound("UISndBadKeystroke");
-}
-
//virtual
void LLLineEditor::clear()
{
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index b62138426b..9489e723e3 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -81,7 +81,6 @@ public:
background_image_focused;
Optional<bool> select_on_focus,
- handle_edit_keys_directly,
revert_on_esc,
commit_on_focus_lost,
ignore_tab;
@@ -215,7 +214,6 @@ public:
void extendSelection(S32 new_cursor_pos);
void deleteSelection();
- void setHandleEditKeysDirectly( BOOL b ) { mHandleEditKeysDirectly = b; }
void setSelectAllonFocusReceived(BOOL b);
typedef boost::function<void (LLLineEditor* caller, void* user_data)> callback_t;
@@ -247,7 +245,6 @@ private:
void addChar(const llwchar c);
void setCursorAtLocalPos(S32 local_mouse_x);
S32 findPixelNearestPos(S32 cursor_offset = 0) const;
- void reportBadKeystroke();
BOOL handleSpecialKey(KEY key, MASK mask);
BOOL handleSelectionKey(KEY key, MASK mask);
BOOL handleControlKey(KEY key, MASK mask);
@@ -325,7 +322,6 @@ protected:
BOOL mIgnoreTab;
BOOL mDrawAsterixes;
- BOOL mHandleEditKeysDirectly; // If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system
BOOL mSelectAllonFocusReceived;
BOOL mPassDelete;
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 0d56c5ed31..e0e86ae228 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -3345,7 +3345,7 @@ void LLMenuHolderGL::draw()
LLView::draw();
// now draw last selected item as overlay
LLMenuItemGL* selecteditem = (LLMenuItemGL*)sItemLastSelectedHandle.get();
- if (selecteditem && sItemActivationTimer.getStarted() && sItemActivationTimer.getElapsedTimeF32() < ACTIVATE_HIGHLIGHT_TIME)
+ if (selecteditem && selecteditem->getVisible() && sItemActivationTimer.getStarted() && sItemActivationTimer.getElapsedTimeF32() < ACTIVATE_HIGHLIGHT_TIME)
{
// make sure toggle items, for example, show the proper state when fading out
selecteditem->buildDrawLabel();
@@ -3455,7 +3455,7 @@ LLView* const LLMenuHolderGL::getVisibleMenu() const
for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
{
LLView* viewp = *child_it;
- if (viewp->getVisible() && dynamic_cast<LLMenuBarGL*>(viewp) == NULL)
+ if (viewp->getVisible() && dynamic_cast<LLMenuGL*>(viewp) != NULL)
{
return viewp;
}
@@ -3478,8 +3478,7 @@ BOOL LLMenuHolderGL::hideMenus()
for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
{
LLView* viewp = *child_it;
- // clicks off of menu do not hide menu bar
- if (dynamic_cast<LLMenuBarGL*>(viewp) == NULL && viewp->getVisible())
+ if (dynamic_cast<LLMenuGL*>(viewp) != NULL && viewp->getVisible())
{
viewp->setVisible(FALSE);
}
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index 39d1986461..6f0f83d4b9 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -295,7 +295,7 @@ private:
// class, by allowing another method to be specified which determines
// if the menu item should consider itself checked as true or not. Be
// careful that the provided callback is fast - it needs to be VERY
-// FUCKING EFFICIENT, because it may need to be checked a lot.
+// EFFICIENT because it may need to be checked a lot.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLMenuItemCheckGL
diff --git a/indra/llui/llmodaldialog.cpp b/indra/llui/llmodaldialog.cpp
index 387af05935..6cff68c20b 100644
--- a/indra/llui/llmodaldialog.cpp
+++ b/indra/llui/llmodaldialog.cpp
@@ -111,7 +111,7 @@ void LLModalDialog::onOpen(const LLSD& key)
// This is a modal dialog. It sucks up all mouse and keyboard operations.
gFocusMgr.setMouseCapture( this );
- gFocusMgr.setTopCtrl( this );
+ LLUI::addPopup(this);
setFocus(TRUE);
sModalStack.push_front( this );
@@ -153,7 +153,7 @@ void LLModalDialog::setVisible( BOOL visible )
gFocusMgr.setMouseCapture( this );
// The dialog view is a root view
- gFocusMgr.setTopCtrl( this );
+ LLUI::addPopup(this);
setFocus( TRUE );
}
else
@@ -291,7 +291,7 @@ void LLModalDialog::onAppFocusGained()
// This is a modal dialog. It sucks up all mouse and keyboard operations.
gFocusMgr.setMouseCapture( instance );
instance->setFocus(TRUE);
- gFocusMgr.setTopCtrl( instance );
+ LLUI::addPopup(instance);
instance->centerOnScreen();
}
diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp
index 33d47a3f0e..3aea648562 100644
--- a/indra/llui/llmultifloater.cpp
+++ b/indra/llui/llmultifloater.cpp
@@ -345,13 +345,20 @@ void LLMultiFloater::setVisible(BOOL visible)
BOOL LLMultiFloater::handleKeyHere(KEY key, MASK mask)
{
- if (key == 'W' && mask == MASK_CONTROL)
+ if (key == 'W' && mask == (MASK_CONTROL|MASK_SHIFT))
{
LLFloater* floater = getActiveFloater();
// is user closeable and is system closeable
if (floater && floater->canClose() && floater->isCloseable())
{
floater->closeFloater();
+
+ // EXT-5695 (Tabbed IM window loses focus if close any tabs by Ctrl+W)
+ // bring back focus on tab container if there are any tab left
+ if(mTabContainer->getTabCount() > 0)
+ {
+ mTabContainer->setFocus(TRUE);
+ }
}
return TRUE;
}
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 5816cef6af..65ef53443b 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -402,7 +402,9 @@ LLNotification::LLNotification(const LLNotification::Params& p) :
mRespondedTo(false),
mPriority(p.priority),
mCancelled(false),
- mIgnored(false)
+ mIgnored(false),
+ mResponderObj(NULL),
+ mIsReusable(false)
{
if (p.functor.name.isChosen())
{
@@ -416,6 +418,11 @@ LLNotification::LLNotification(const LLNotification::Params& p) :
mTemporaryResponder = true;
}
+ if(p.responder.isProvided())
+ {
+ mResponderObj = p.responder;
+ }
+
mId.generate();
init(p.name, p.form_elements);
}
@@ -425,7 +432,9 @@ LLNotification::LLNotification(const LLSD& sd) :
mTemporaryResponder(false),
mRespondedTo(false),
mCancelled(false),
- mIgnored(false)
+ mIgnored(false),
+ mResponderObj(NULL),
+ mIsReusable(false)
{
mId.generate();
mSubstitutions = sd["substitutions"];
@@ -452,6 +461,7 @@ LLSD LLNotification::asLLSD()
output["expiry"] = mExpiresAt;
output["priority"] = (S32)mPriority;
output["responseFunctor"] = mResponseFunctorName;
+ output["reusable"] = mIsReusable;
return output;
}
@@ -479,7 +489,9 @@ void LLNotification::updateFrom(LLNotificationPtr other)
mForm = other->mForm;
mResponseFunctorName = other->mResponseFunctorName;
mRespondedTo = other->mRespondedTo;
+ mResponse = other->mResponse;
mTemporaryResponder = other->mTemporaryResponder;
+ mIsReusable = other->isReusable();
update();
}
@@ -556,14 +568,16 @@ std::string LLNotification::getSelectedOptionName(const LLSD& response)
void LLNotification::respond(const LLSD& response)
{
+ // *TODO may remove mRespondedTo and use mResponce.isDefined() in isRespondedTo()
mRespondedTo = true;
+ mResponse = response;
// look up the functor
LLNotificationFunctorRegistry::ResponseFunctor functor =
LLNotificationFunctorRegistry::instance().getFunctor(mResponseFunctorName);
// and then call it
functor(asLLSD(), response);
- if (mTemporaryResponder)
+ if (mTemporaryResponder && !isReusable())
{
LLNotificationFunctorRegistry::instance().unregisterFunctor(mResponseFunctorName);
mResponseFunctorName = "";
@@ -597,6 +611,16 @@ void LLNotification::setResponseFunctor(std::string const &responseFunctorName)
mTemporaryResponder = false;
}
+void LLNotification::setResponseFunctor(const LLNotificationFunctorRegistry::ResponseFunctor& cb)
+{
+ if(mTemporaryResponder)
+ {
+ LLNotificationFunctorRegistry::instance().unregisterFunctor(mResponseFunctorName);
+ }
+
+ LLNotificationFunctorRegistry::instance().registerFunctor(mResponseFunctorName, cb);
+}
+
bool LLNotification::payloadContainsAll(const std::vector<std::string>& required_fields) const
{
for(std::vector<std::string>::const_iterator required_fields_it = required_fields.begin();
@@ -856,8 +880,12 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
if (wasFound)
{
abortProcessing = mChanged(payload);
- mItems.erase(pNotification);
- onDelete(pNotification);
+ // do not delete the notification to make LLChatHistory::appendMessage add notification panel to IM window
+ if( ! pNotification->isReusable() )
+ {
+ mItems.erase(pNotification);
+ onDelete(pNotification);
+ }
}
}
return abortProcessing;
@@ -1524,3 +1552,11 @@ std::ostream& operator<<(std::ostream& s, const LLNotification& notification)
return s;
}
+void LLPostponedNotification::onCachedNameReceived(const LLUUID& id, const std::string& first,
+ const std::string& last, bool is_group)
+{
+ gCacheName->getFullName(id, mName);
+ modifyNotificationParams();
+ LLNotifications::instance().add(mParams);
+ cleanup();
+}
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 8d993b71d7..1799ca65b7 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -104,6 +104,7 @@
#include "llinitparam.h"
#include "llnotificationslistener.h"
#include "llnotificationptr.h"
+#include "llcachename.h"
typedef enum e_notification_priority
@@ -296,6 +297,7 @@ public:
Optional<LLSD> form_elements;
Optional<LLDate> time_stamp;
Optional<LLNotificationContext*> context;
+ Optional<void*> responder;
struct Functor : public LLInitParam::Choice<Functor>
{
@@ -317,6 +319,7 @@ public:
form_elements("form_elements")
{
time_stamp = LLDate::now();
+ responder = NULL;
}
Params(const std::string& _name)
@@ -329,6 +332,7 @@ public:
functor.name = _name;
name = _name;
time_stamp = LLDate::now();
+ responder = NULL;
}
};
@@ -341,9 +345,12 @@ private:
LLDate mExpiresAt;
bool mCancelled;
bool mRespondedTo; // once the notification has been responded to, this becomes true
+ LLSD mResponse;
bool mIgnored;
ENotificationPriority mPriority;
LLNotificationFormPtr mForm;
+ void* mResponderObj;
+ bool mIsReusable;
// a reference to the template
LLNotificationTemplatePtr mTemplatep;
@@ -384,6 +391,8 @@ public:
void setResponseFunctor(std::string const &responseFunctorName);
+ void setResponseFunctor(const LLNotificationFunctorRegistry::ResponseFunctor& cb);
+
typedef enum e_response_template_type
{
WITHOUT_DEFAULT_BUTTON,
@@ -423,6 +432,10 @@ public:
void respond(const LLSD& sd);
+ void* getResponder() { return mResponderObj; }
+
+ void setResponder(void* responder) { mResponderObj = responder; }
+
void setIgnored(bool ignore);
bool isCancelled() const
@@ -435,6 +448,8 @@ public:
return mRespondedTo;
}
+ const LLSD& getResponse() { return mResponse; }
+
bool isIgnored() const
{
return mIgnored;
@@ -504,6 +519,10 @@ public:
{
return mId;
}
+
+ bool isReusable() { return mIsReusable; }
+
+ void setReusable(bool reusable) { mIsReusable = reusable; }
// comparing two notifications normally means comparing them by UUID (so we can look them
// up quickly this way)
@@ -931,6 +950,62 @@ private:
boost::scoped_ptr<LLNotificationsListener> mListener;
};
+/**
+ * Abstract class for postponed notifications.
+ * Provides possibility to add notification after specified by id avatar or group will be
+ * received from cache name. The object of this type automatically well be deleted
+ * by cleanup method after respond will be received from cache name.
+ *
+ * To add custom postponed notification to the notification system client should:
+ * 1 create class derived from LLPostponedNotification;
+ * 2 call LLPostponedNotification::add method;
+ */
+class LLPostponedNotification
+{
+public:
+ /**
+ * Performs hooking cache name callback which will add notification to notifications system.
+ * Type of added notification should be specified by template parameter T
+ * and non-private derived from LLPostponedNotification class,
+ * otherwise compilation error will occur.
+ */
+ template<class T>
+ static void add(const LLNotification::Params& params,
+ const LLUUID& id, bool is_group)
+ {
+ // upcast T to the base type to restrict T derivation from LLPostponedNotification
+ LLPostponedNotification* thiz = new T();
+
+ thiz->mParams = params;
+
+ gCacheName->get(id, is_group, boost::bind(
+ &LLPostponedNotification::onCachedNameReceived, thiz, _1, _2,
+ _3, _4));
+ }
+
+private:
+ void onCachedNameReceived(const LLUUID& id, const std::string& first,
+ const std::string& last, bool is_group);
+
+ void cleanup()
+ {
+ delete this;
+ }
+
+protected:
+ LLPostponedNotification() {}
+ virtual ~LLPostponedNotification() {}
+
+ /**
+ * Abstract method provides possibility to modify notification parameters and
+ * will be called after cache name retrieve information about avatar or group
+ * and before notification will be added to the notification system.
+ */
+ virtual void modifyNotificationParams() = 0;
+
+ LLNotification::Params mParams;
+ std::string mName;
+};
#endif//LL_LLNOTIFICATIONS_H
diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp
index 4087b484aa..e27792dc1d 100644
--- a/indra/llui/llradiogroup.cpp
+++ b/indra/llui/llradiogroup.cpp
@@ -106,7 +106,6 @@ LLRadioGroup::LLRadioGroup(const LLRadioGroup::Params& p)
void LLRadioGroup::initFromParams(const Params& p)
{
- LLUICtrl::initFromParams(p);
for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin();
it != p.items().end();
++it)
@@ -124,6 +123,9 @@ void LLRadioGroup::initFromParams(const Params& p)
LLRadioCtrl* item = LLUICtrlFactory::create<LLRadioCtrl>(item_params, this);
mRadioButtons.push_back(item);
}
+
+ // call this *after* setting up mRadioButtons so we can handle setValue() calls
+ LLUICtrl::initFromParams(p);
}
@@ -138,10 +140,6 @@ BOOL LLRadioGroup::postBuild()
{
mRadioButtons[0]->setTabStop(true);
}
- if (mControlVariable)
- {
- setSelectedIndex(mControlVariable->getValue().asInteger());
- }
return TRUE;
}
diff --git a/indra/llui/llscrollingpanellist.cpp b/indra/llui/llscrollingpanellist.cpp
index 4f55c0507c..b7840d1b59 100644
--- a/indra/llui/llscrollingpanellist.cpp
+++ b/indra/llui/llscrollingpanellist.cpp
@@ -47,7 +47,12 @@ void LLScrollingPanelList::clearPanels()
{
deleteAllChildren();
mPanelList.clear();
- reshape( 1, 1, FALSE );
+
+ LLRect rc = getRect();
+ rc.setLeftTopAndSize(rc.mLeft, rc.mTop, 1, 1);
+ setRect(rc);
+
+ notifySizeChanged(rc.getHeight());
}
S32 LLScrollingPanelList::addPanel( LLScrollingPanel* panel )
@@ -67,7 +72,11 @@ S32 LLScrollingPanelList::addPanel( LLScrollingPanel* panel )
max_width = llmax( max_width, childp->getRect().getWidth() );
cur_gap = GAP_BETWEEN_PANELS;
}
- reshape( max_width, total_height, FALSE );
+ LLRect rc = getRect();
+ rc.setLeftTopAndSize(rc.mLeft, rc.mTop, max_width, total_height);
+ setRect(rc);
+
+ notifySizeChanged(rc.getHeight());
// Reposition each of the child views
S32 cur_y = total_height;
@@ -131,7 +140,11 @@ void LLScrollingPanelList::removePanel( U32 panel_index )
max_width = llmax( max_width, childp->getRect().getWidth() );
cur_gap = GAP_BETWEEN_PANELS;
}
- reshape( max_width, total_height, FALSE );
+ LLRect rc = getRect();
+ rc.setLeftTopAndSize(rc.mLeft, rc.mTop, max_width, total_height);
+ setRect(rc);
+
+ notifySizeChanged(rc.getHeight());
// Reposition each of the child views
S32 cur_y = total_height;
@@ -200,3 +213,12 @@ void LLScrollingPanelList::draw()
LLUICtrl::draw();
}
+void LLScrollingPanelList::notifySizeChanged(S32 height)
+{
+ LLSD info;
+ info["action"] = "size_changes";
+ info["height"] = height;
+ notifyParent(info);
+}
+
+// EOF
diff --git a/indra/llui/llscrollingpanellist.h b/indra/llui/llscrollingpanellist.h
index 3abfbcbbe7..5f1996159b 100644
--- a/indra/llui/llscrollingpanellist.h
+++ b/indra/llui/llscrollingpanellist.h
@@ -61,7 +61,6 @@ public:
Params()
{
name = "scrolling_panel_list";
- follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM;
}
};
LLScrollingPanelList(const Params& p)
@@ -86,6 +85,11 @@ public:
private:
void updatePanelVisiblilty();
+ /**
+ * Notify parent about size change, makes sense when used inside accordion
+ */
+ void notifySizeChanged(S32 height);
+
panel_list_t mPanelList;
};
diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp
index 3cc92baa8d..d17be8b94a 100644
--- a/indra/llui/llscrolllistcell.cpp
+++ b/indra/llui/llscrolllistcell.cpp
@@ -185,6 +185,8 @@ LLScrollListText::LLScrollListText(const LLScrollListCell::Params& p)
{
sCount++;
+ mTextWidth = getWidth();
+
// initialize rounded rect image
if (!mRoundedRectImage)
{
@@ -340,7 +342,7 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col
0,
LLFontGL::NO_SHADOW,
string_chars,
- getWidth(),
+ getTextWidth(),
&right_x,
TRUE);
}
diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h
index 5fecf5aade..b1c8901fc4 100644
--- a/indra/llui/llscrolllistcell.h
+++ b/indra/llui/llscrolllistcell.h
@@ -151,11 +151,16 @@ public:
/*virtual*/ const std::string & getToolTip() const;
/*virtual*/ BOOL needsToolTip() const;
+ S32 getTextWidth() const { return mTextWidth;}
+ void setTextWidth(S32 value) { mTextWidth = value;}
+ virtual void setWidth(S32 width) { LLScrollListCell::setWidth(width); mTextWidth = width; }
+
void setText(const LLStringExplicit& text);
void setFontStyle(const U8 font_style);
private:
LLUIString mText;
+ S32 mTextWidth;
const LLFontGL* mFont;
LLColor4 mColor;
U8 mUseColor;
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index ac4811210b..db0f2bd6e2 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -71,8 +71,9 @@ static LLDefaultChildRegistry::Register<LLScrollListCtrl> r("scroll_list");
// local structures & classes.
struct SortScrollListItem
{
- SortScrollListItem(const std::vector<std::pair<S32, BOOL> >& sort_orders)
+ SortScrollListItem(const std::vector<std::pair<S32, BOOL> >& sort_orders,const LLScrollListCtrl::sort_signal_t* sort_signal)
: mSortOrders(sort_orders)
+ , mSortSignal(sort_signal)
{}
bool operator()(const LLScrollListItem* i1, const LLScrollListItem* i2)
@@ -85,12 +86,20 @@ struct SortScrollListItem
S32 col_idx = it->first;
BOOL sort_ascending = it->second;
+ S32 order = sort_ascending ? 1 : -1; // ascending or descending sort for this column?
+
const LLScrollListCell *cell1 = i1->getColumn(col_idx);
const LLScrollListCell *cell2 = i2->getColumn(col_idx);
- S32 order = sort_ascending ? 1 : -1; // ascending or descending sort for this column?
if (cell1 && cell2)
{
- sort_result = order * LLStringUtil::compareDict(cell1->getValue().asString(), cell2->getValue().asString());
+ if(mSortSignal)
+ {
+ sort_result = order * (*mSortSignal)(col_idx,i1, i2);
+ }
+ else
+ {
+ sort_result = order * LLStringUtil::compareDict(cell1->getValue().asString(), cell2->getValue().asString());
+ }
if (sort_result != 0)
{
break; // we have a sort order!
@@ -100,8 +109,10 @@ struct SortScrollListItem
return sort_result < 0;
}
+
typedef std::vector<std::pair<S32, BOOL> > sort_order_t;
+ const LLScrollListCtrl::sort_signal_t* mSortSignal;
const sort_order_t& mSortOrders;
};
@@ -169,6 +180,7 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p)
mOnSortChangedCallback( NULL ),
mHighlightedItem(-1),
mBorder(NULL),
+ mSortCallback(NULL),
mPopupMenu(NULL),
mNumDynamicWidthColumns(0),
mTotalStaticColumnWidth(0),
@@ -309,12 +321,9 @@ bool LLScrollListCtrl::preProcessChildNode(LLXMLNodePtr child)
LLScrollListCtrl::~LLScrollListCtrl()
{
- std::for_each(mItemList.begin(), mItemList.end(), DeletePointer());
+ delete mSortCallback;
- if( gEditMenuHandler == this )
- {
- gEditMenuHandler = NULL;
- }
+ std::for_each(mItemList.begin(), mItemList.end(), DeletePointer());
}
@@ -540,7 +549,7 @@ BOOL LLScrollListCtrl::addItem( LLScrollListItem* item, EAddPosition pos, BOOL r
std::stable_sort(
mItemList.begin(),
mItemList.end(),
- SortScrollListItem(single_sort_column));
+ SortScrollListItem(single_sort_column,mSortCallback));
// ADD_SORTED just sorts by first column...
// this might not match user sort criteria, so flag list as being in unsorted state
@@ -943,14 +952,14 @@ void LLScrollListCtrl::mouseOverHighlightNthItem(S32 target_index)
}
}
-S32 LLScrollListCtrl::selectMultiple( std::vector<LLUUID> ids )
+S32 LLScrollListCtrl::selectMultiple( uuid_vec_t ids )
{
item_list::iterator iter;
S32 count = 0;
for (iter = mItemList.begin(); iter != mItemList.end(); iter++)
{
LLScrollListItem* item = *iter;
- std::vector<LLUUID>::iterator iditr;
+ uuid_vec_t::iterator iditr;
for(iditr = ids.begin(); iditr != ids.end(); ++iditr)
{
if (item->getEnabled() && (item->getUUID() == (*iditr)))
@@ -2395,7 +2404,7 @@ void LLScrollListCtrl::updateSort() const
std::stable_sort(
mItemList.begin(),
mItemList.end(),
- SortScrollListItem(mSortColumns));
+ SortScrollListItem(mSortColumns,mSortCallback));
mSorted = true;
}
@@ -2411,7 +2420,7 @@ void LLScrollListCtrl::sortOnce(S32 column, BOOL ascending)
std::stable_sort(
mItemList.begin(),
mItemList.end(),
- SortScrollListItem(sort_column));
+ SortScrollListItem(sort_column,mSortCallback));
}
void LLScrollListCtrl::dirtyColumns()
diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h
index d2d2379328..1f0ef585db 100644
--- a/indra/llui/llscrolllistctrl.h
+++ b/indra/llui/llscrolllistctrl.h
@@ -73,6 +73,30 @@ public:
// *TODO: Add callbacks to Params
typedef boost::function<void (void)> callback_t;
+
+ template<typename T> struct maximum
+ {
+ typedef T result_type;
+
+ template<typename InputIterator>
+ T operator()(InputIterator first, InputIterator last) const
+ {
+ // If there are no slots to call, just return the
+ // default-constructed value
+ if(first == last ) return T();
+ T max_value = *first++;
+ while (first != last) {
+ if (max_value < *first)
+ max_value = *first;
+ ++first;
+ }
+
+ return max_value;
+ }
+ };
+
+
+ typedef boost::signals2::signal<S32 (S32,const LLScrollListItem*,const LLScrollListItem*),maximum<S32> > sort_signal_t;
struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
{
@@ -195,7 +219,10 @@ public:
void deselectAllItems(BOOL no_commit_on_change = FALSE); // by default, go ahead and commit on selection change
void clearHighlightedItems();
- void mouseOverHighlightNthItem( S32 index );
+
+ virtual void mouseOverHighlightNthItem( S32 index );
+
+ S32 getHighlightedItemInx() const { return mHighlightedItem; }
void setDoubleClickCallback( callback_t cb ) { mOnDoubleClickCallback = cb; }
void setMaximumSelectCallback( callback_t cb) { mOnMaximumSelectCallback = cb; }
@@ -352,7 +379,7 @@ public:
BOOL getSortAscending() { return mSortColumns.empty() ? TRUE : mSortColumns.back().second; }
BOOL hasSortOrder() const;
- S32 selectMultiple( std::vector<LLUUID> ids );
+ S32 selectMultiple( uuid_vec_t ids );
// conceptually const, but mutates mItemList
void updateSort() const;
// sorts a list without affecting the permanent sort order (so further list insertions can be unsorted, for example)
@@ -362,6 +389,13 @@ public:
void setNeedsSort(bool val = true) { mSorted = !val; }
void dirtyColumns(); // some operation has potentially affected column layout or ordering
+ boost::signals2::connection setSortCallback(sort_signal_t::slot_type cb )
+ {
+ if (!mSortCallback) mSortCallback = new sort_signal_t();
+ return mSortCallback->connect(cb);
+ }
+
+
protected:
// "Full" interface: use this when you're creating a list that has one or more of the following:
// * contains icons
@@ -474,6 +508,8 @@ private:
typedef std::pair<S32, BOOL> sort_column_t;
std::vector<sort_column_t> mSortColumns;
+
+ sort_signal_t* mSortCallback;
}; // end class LLScrollListCtrl
#endif // LL_SCROLLLISTCTRL_H
diff --git a/indra/llui/llsearcheditor.cpp b/indra/llui/llsearcheditor.cpp
index 8075575bab..ec2ad5e5fa 100644
--- a/indra/llui/llsearcheditor.cpp
+++ b/indra/llui/llsearcheditor.cpp
@@ -44,17 +44,28 @@ LLSearchEditor::LLSearchEditor(const LLSearchEditor::Params& p)
S32 srch_btn_top = p.search_button.top_pad + p.search_button.rect.height;
S32 srch_btn_right = p.search_button.rect.width + p.search_button.left_pad;
LLRect srch_btn_rect(p.search_button.left_pad, srch_btn_top, srch_btn_right, p.search_button.top_pad);
+
+ S32 clr_btn_top = p.clear_button.rect.bottom + p.clear_button.rect.height;
+ S32 clr_btn_right = getRect().getWidth() - p.clear_button.pad_right;
+ S32 clr_btn_left = clr_btn_right - p.clear_button.rect.width;
+ LLRect clear_btn_rect(clr_btn_left, clr_btn_top, clr_btn_right, p.clear_button.rect.bottom);
+
S32 text_pad_left = p.text_pad_left;
+ S32 text_pad_right = p.text_pad_right;
if (p.search_button_visible)
text_pad_left += srch_btn_rect.getWidth();
+ if (p.clear_button_visible)
+ text_pad_right = getRect().getWidth() - clr_btn_left + p.clear_button.pad_left;
+
// Set up line editor.
LLLineEditor::Params line_editor_params(p);
line_editor_params.name("filter edit box");
line_editor_params.rect(getLocalRect());
line_editor_params.follows.flags(FOLLOWS_ALL);
line_editor_params.text_pad_left(text_pad_left);
+ line_editor_params.text_pad_right(text_pad_right);
line_editor_params.revert_on_esc(false);
line_editor_params.commit_callback.function(boost::bind(&LLUICtrl::onCommit, this));
line_editor_params.keystroke_callback(boost::bind(&LLSearchEditor::handleKeystroke, this));
@@ -82,10 +93,6 @@ LLSearchEditor::LLSearchEditor(const LLSearchEditor::Params& p)
// Set up clear button.
LLButton::Params clr_btn_params(p.clear_button);
clr_btn_params.name(std::string("clear button"));
- S32 clr_btn_top = clr_btn_params.rect.bottom + clr_btn_params.rect.height;
- S32 clr_btn_right = getRect().getWidth() - clr_btn_params.pad_right;
- S32 clr_btn_left = clr_btn_right - clr_btn_params.rect.width;
- LLRect clear_btn_rect(clr_btn_left, clr_btn_top, clr_btn_right, p.clear_button.rect.bottom);
clr_btn_params.rect(clear_btn_rect) ;
clr_btn_params.follows.flags(FOLLOWS_RIGHT|FOLLOWS_TOP);
clr_btn_params.tab_stop(false);
diff --git a/indra/llui/llsearcheditor.h b/indra/llui/llsearcheditor.h
index 714aca9337..785d0633dc 100644
--- a/indra/llui/llsearcheditor.h
+++ b/indra/llui/llsearcheditor.h
@@ -66,6 +66,8 @@ public:
}
};
+ void setCommitOnFocusLost(BOOL b) { if (mSearchEditor) mSearchEditor->setCommitOnFocusLost(b); }
+
protected:
LLSearchEditor(const Params&);
friend class LLUICtrlFactory;
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index 07e4cc22e0..30fc7babae 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -172,6 +172,10 @@ public:
}
}
+ LLIconCtrl* getIconCtrl() const
+ {
+ return mIcon;
+ }
private:
LLIconCtrl* mIcon;
@@ -493,15 +497,15 @@ void LLTabContainer::draw()
if( mIsVertical && has_scroll_arrows )
{
// Redraw the arrows so that they appears on top.
- gGL.pushMatrix();
- gGL.translatef((F32)mPrevArrowBtn->getRect().mLeft, (F32)mPrevArrowBtn->getRect().mBottom, 0.f);
+ gGL.pushUIMatrix();
+ gGL.translateUI((F32)mPrevArrowBtn->getRect().mLeft, (F32)mPrevArrowBtn->getRect().mBottom, 0.f);
mPrevArrowBtn->draw();
- gGL.popMatrix();
+ gGL.popUIMatrix();
- gGL.pushMatrix();
- gGL.translatef((F32)mNextArrowBtn->getRect().mLeft, (F32)mNextArrowBtn->getRect().mBottom, 0.f);
+ gGL.pushUIMatrix();
+ gGL.translateUI((F32)mNextArrowBtn->getRect().mLeft, (F32)mNextArrowBtn->getRect().mBottom, 0.f);
mNextArrowBtn->draw();
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
}
@@ -951,7 +955,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
LLRect tab_panel_rect;
if (!getTabsHidden() && mIsVertical)
{
- tab_panel_rect = LLRect(mMinTabWidth + (LLPANEL_BORDER_WIDTH * 2) + tabcntrv_pad,
+ tab_panel_rect = LLRect(mMinTabWidth + mRightTabBtnOffset + (LLPANEL_BORDER_WIDTH * 2) + tabcntrv_pad,
getRect().getHeight() - LLPANEL_BORDER_WIDTH,
getRect().getWidth() - LLPANEL_BORDER_WIDTH,
LLPANEL_BORDER_WIDTH);
@@ -1629,6 +1633,7 @@ void LLTabContainer::setTabImage(LLPanel* child, LLIconCtrl* icon)
if(button)
{
button->setIcon(icon);
+ reshapeTuple(tuple);
}
}
}
@@ -1639,12 +1644,22 @@ void LLTabContainer::reshapeTuple(LLTabTuple* tuple)
if (!mIsVertical)
{
+ S32 image_overlay_width = 0;
+
+ if(mCustomIconCtrlUsed)
+ {
+ LLCustomButtonIconCtrl* button = dynamic_cast<LLCustomButtonIconCtrl*>(tuple->mButton);
+ LLIconCtrl* icon_ctrl = button ? button->getIconCtrl() : NULL;
+ image_overlay_width = icon_ctrl ? icon_ctrl->getRect().getWidth() : 0;
+ }
+ else
+ {
+ image_overlay_width = tuple->mButton->getImageOverlay().notNull() ?
+ tuple->mButton->getImageOverlay()->getImage()->getWidth(0) : 0;
+ }
// remove current width from total tab strip width
mTotalTabWidth -= tuple->mButton->getRect().getWidth();
- S32 image_overlay_width = tuple->mButton->getImageOverlay().notNull() ?
- tuple->mButton->getImageOverlay()->getImage()->getWidth(0) : 0;
-
tuple->mPadding = image_overlay_width;
tuple->mButton->reshape(llclamp(mFont->getWidth(tuple->mButton->getLabelSelected()) + tab_padding + tuple->mPadding, mMinTabWidth, mMaxTabWidth),
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 851fb966ec..e08026eaf4 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -246,7 +246,7 @@ LLTextBase::~LLTextBase()
{
// Menu, like any other LLUICtrl, is deleted by its parent - gMenuHolder
- clearSegments();
+ mSegments.clear();
}
void LLTextBase::initFromParams(const LLTextBase::Params& p)
@@ -350,6 +350,8 @@ void LLTextBase::drawSelectionBackground()
S32 segment_line_start = segmentp->getStart() + segment_offset;
S32 segment_line_end = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd);
+ if (segment_line_start > segment_line_end) break;
+
S32 segment_width = 0;
S32 segment_height = 0;
@@ -361,8 +363,11 @@ void LLTextBase::drawSelectionBackground()
selection_rect.mLeft += segment_width;
}
- // if selection spans end of current segment...
- if (selection_right > segment_line_end)
+ // if selection_right == segment_line_end then that means we are the first character of the next segment
+ // or first character of the next line, in either case we want to add the length of the current segment
+ // to the selection rectangle and continue.
+ // if selection right > segment_line_end then selection spans end of current segment...
+ if (selection_right >= segment_line_end)
{
// extend selection slightly beyond end of line
// to indicate selection of newline character (use "n" character to determine width)
@@ -957,7 +962,18 @@ void LLTextBase::reshape(S32 width, S32 height, BOOL called_from_parent)
{
if (width != getRect().getWidth() || height != getRect().getHeight())
{
+ //EXT-4288
+ //to keep consistance scrolling behaviour
+ //when scrolling from top and from bottom...
+ bool is_scrolled_to_end = (mScroller!=NULL) && scrolledToEnd();
+
LLUICtrl::reshape( width, height, called_from_parent );
+
+ if (is_scrolled_to_end)
+ {
+ deselect();
+ endOfDoc();
+ }
// do this first after reshape, because other things depend on
// up-to-date mVisibleTextRect
@@ -1043,6 +1059,13 @@ void LLTextBase::setValue(const LLSD& value )
}
//virtual
+BOOL LLTextBase::canDeselect() const
+{
+ return hasSelection();
+}
+
+
+//virtual
void LLTextBase::deselect()
{
mSelectionStart = 0;
@@ -1813,11 +1836,18 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round,
const LLTextSegmentPtr segmentp = *line_seg_iter;
S32 segment_line_start = segmentp->getStart() + line_seg_offset;
- S32 segment_line_length = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd - 1) - segment_line_start;
+ S32 segment_line_length = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd) - segment_line_start;
S32 text_width, text_height;
- segmentp->getDimensions(line_seg_offset, segment_line_length, text_width, text_height);
- if (local_x < start_x + text_width // cursor to left of right edge of text
- || (hit_past_end_of_line && (segmentp->getEnd() >= line_iter->mDocIndexEnd - 1))) // or this segment wraps to next line
+ bool newline = segmentp->getDimensions(line_seg_offset, segment_line_length, text_width, text_height);
+
+ // if we've reached a line of text *below* the mouse cursor, doc index is first character on that line
+ if (hit_past_end_of_line && local_y - mVisibleTextRect.mBottom + visible_region.mBottom > line_iter->mRect.mTop)
+ {
+ pos = segment_line_start;
+ break;
+ }
+ if (local_x < start_x + text_width // cursor to left of right edge of text
+ || newline) // or this line ends with a newline, set doc pos to newline char
{
// Figure out which character we're nearest to.
S32 offset;
@@ -1841,6 +1871,13 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round,
pos = segment_line_start + offset;
break;
}
+ else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd - 1)
+ {
+ // segment wraps to next line, so just set doc pos to start of next line (represented by mDocIndexEnd)
+ pos = llmin(getLength(), line_iter->mDocIndexEnd);
+ break;
+ }
+
start_x += text_width;
}
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 5b24c63557..8ed0680df9 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -132,6 +132,7 @@ public:
/*virtual*/ LLTextViewModel* getViewModel() const;
// LLEditMenuHandler interface
+ /*virtual*/ BOOL canDeselect() const;
/*virtual*/ void deselect();
// used by LLTextSegment layout code
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 7d230f7d42..a1cae4bb98 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -240,7 +240,6 @@ LLTextEditor::Params::Params()
prevalidate_callback("prevalidate_callback"),
embedded_items("embedded_items", false),
ignore_tab("ignore_tab", true),
- handle_edit_keys_directly("handle_edit_keys_directly", false),
show_line_numbers("show_line_numbers", false),
default_color("default_color"),
commit_on_focus_lost("commit_on_focus_lost", false),
@@ -258,7 +257,6 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
mShowLineNumbers ( p.show_line_numbers ),
mCommitOnFocusLost( p.commit_on_focus_lost),
mAllowEmbeddedItems( p.embedded_items ),
- mHandleEditKeysDirectly( p.handle_edit_keys_directly ),
mMouseDownX(0),
mMouseDownY(0),
mTabsToNextField(p.ignore_tab),
@@ -305,12 +303,6 @@ LLTextEditor::~LLTextEditor()
{
gFocusMgr.releaseFocusIfNeeded( this ); // calls onCommit() while LLTextEditor still valid
- // Route menu back to the default
- if( gEditMenuHandler == this )
- {
- gEditMenuHandler = NULL;
- }
-
// Scrollbar is deleted by LLView
std::for_each(mUndoStack.begin(), mUndoStack.end(), DeletePointer());
@@ -507,21 +499,6 @@ void LLTextEditor::getSegmentsInRange(LLTextEditor::segment_vec_t& segments_out,
}
}
-// virtual
-BOOL LLTextEditor::canDeselect() const
-{
- return hasSelection();
-}
-
-
-void LLTextEditor::deselect()
-{
- mSelectionStart = 0;
- mSelectionEnd = 0;
- mIsSelecting = FALSE;
-}
-
-
BOOL LLTextEditor::selectionContainsLineBreaks()
{
if (hasSelection())
@@ -668,6 +645,7 @@ void LLTextEditor::selectAll()
mSelectionStart = getLength();
mSelectionEnd = 0;
setCursorPos(mSelectionEnd);
+ updatePrimary();
}
BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
@@ -1025,7 +1003,7 @@ void LLTextEditor::removeCharOrTab()
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
}
@@ -1048,7 +1026,7 @@ void LLTextEditor::removeChar()
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
}
@@ -1198,22 +1176,6 @@ BOOL LLTextEditor::handleSelectionKey(const KEY key, const MASK mask)
}
}
- if( !handled && mHandleEditKeysDirectly )
- {
- if( (MASK_CONTROL & mask) && ('A' == key) )
- {
- if( canSelectAll() )
- {
- selectAll();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- }
-
if( handled )
{
// take selection to 'primary' clipboard
@@ -1247,6 +1209,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
case KEY_DOWN:
changeLine( 1 );
+ deselect();
break;
case KEY_PAGE_DOWN:
@@ -1260,7 +1223,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
case KEY_LEFT:
if( hasSelection() )
{
- setCursorPos(llmin( mCursorPos - 1, mSelectionStart, mSelectionEnd ));
+ setCursorPos(llmin( mSelectionStart, mSelectionEnd ));
}
else
{
@@ -1270,7 +1233,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
}
break;
@@ -1278,7 +1241,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
case KEY_RIGHT:
if( hasSelection() )
{
- setCursorPos(llmax( mCursorPos + 1, mSelectionStart, mSelectionEnd ));
+ setCursorPos(llmax( mSelectionStart, mSelectionEnd ));
}
else
{
@@ -1288,7 +1251,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
}
break;
@@ -1299,6 +1262,11 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
}
}
+ if (handled)
+ {
+ deselect();
+ }
+
return handled;
}
@@ -1551,75 +1519,13 @@ BOOL LLTextEditor::handleControlKey(const KEY key, const MASK mask)
return handled;
}
-BOOL LLTextEditor::handleEditKey(const KEY key, const MASK mask)
-{
- BOOL handled = FALSE;
- // Standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system.
- if( KEY_DELETE == key )
- {
- if( canDoDelete() )
- {
- doDelete();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- else
- if( MASK_CONTROL & mask )
+BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask)
{
- if( 'C' == key )
- {
- if( canCopy() )
- {
- copy();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- else
- if( 'V' == key )
- {
- if( canPaste() )
- {
- paste();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- else
- if( 'X' == key )
- {
- if( canCut() )
- {
- cut();
- }
- else
- {
- reportBadKeystroke();
- }
- handled = TRUE;
- }
- }
-
- return handled;
-}
-
-
-BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask, BOOL* return_key_hit)
-{
- *return_key_hit = FALSE;
BOOL handled = TRUE;
+ if (mReadOnly) return FALSE;
+
switch( key )
{
case KEY_INSERT:
@@ -1641,7 +1547,7 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask, BOOL* return
}
else
{
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
break;
@@ -1694,6 +1600,10 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask, BOOL* return
break;
}
+ if (handled)
+ {
+ onKeyStroke();
+ }
return handled;
}
@@ -1714,9 +1624,6 @@ void LLTextEditor::unindentLineBeforeCloseBrace()
BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask )
{
BOOL handled = FALSE;
- BOOL selection_modified = FALSE;
- BOOL return_key_hit = FALSE;
- BOOL text_may_have_changed = TRUE;
// Special case for TAB. If want to move to next field, report
// not handled and let the parent take care of field movement.
@@ -1724,116 +1631,24 @@ BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask )
{
return FALSE;
}
- /*
- if (KEY_F10 == key)
- {
- LLComboBox::Params cp;
- cp.name = "combo box";
- cp.label = "my combo";
- cp.rect.width = 100;
- cp.rect.height = 20;
- cp.items.add().label = "item 1";
- cp.items.add().label = "item 2";
- cp.items.add().label = "item 3";
- appendWidget(LLUICtrlFactory::create<LLComboBox>(cp), "combo", true, false);
- }
- if (KEY_F11 == key)
- {
- LLButton::Params bp;
- bp.name = "text button";
- bp.label = "Click me";
- bp.rect.width = 100;
- bp.rect.height = 20;
-
- appendWidget(LLUICtrlFactory::create<LLButton>(bp), "button", true, false);
- }
- */
- if (mReadOnly)
+ if (mReadOnly && mScroller)
{
- if(mScroller)
- {
- handled = mScroller->handleKeyHere( key, mask );
+ handled = (mScroller && mScroller->handleKeyHere( key, mask ))
+ || handleSelectionKey(key, mask)
+ || handleControlKey(key, mask);
}
else
{
- handled = handleNavigationKey( key, mask );
- }
-
- }
- else
- {
- // handle navigation keys ourself
- handled = handleNavigationKey( key, mask );
- }
-
-
- if( handled )
- {
- text_may_have_changed = FALSE;
- }
-
- if( !handled )
- {
- handled = handleSelectionKey( key, mask );
- if( handled )
- {
- selection_modified = TRUE;
- }
- }
-
- if( !handled )
- {
- handled = handleControlKey( key, mask );
- if( handled )
- {
- selection_modified = TRUE;
- }
- }
-
- if( !handled && mHandleEditKeysDirectly )
- {
- handled = handleEditKey( key, mask );
- if( handled )
- {
- selection_modified = TRUE;
- text_may_have_changed = TRUE;
- }
- }
-
- // Handle most keys only if the text editor is writeable.
- if( !mReadOnly )
- {
- if( !handled )
- {
- handled = handleSpecialKey( key, mask, &return_key_hit );
- if( handled )
- {
- selection_modified = TRUE;
- text_may_have_changed = TRUE;
- }
- }
-
+ handled = handleNavigationKey( key, mask )
+ || handleSelectionKey(key, mask)
+ || handleControlKey(key, mask)
+ || handleSpecialKey(key, mask);
}
if( handled )
{
resetCursorBlink();
-
- // Most keystrokes will make the selection box go away, but not all will.
- if( !selection_modified &&
- KEY_SHIFT != key &&
- KEY_CONTROL != key &&
- KEY_ALT != key &&
- KEY_CAPSLOCK )
- {
- deselect();
- }
-
- if(text_may_have_changed)
- {
- onKeyStroke();
- }
needsScroll();
}
@@ -2334,7 +2149,7 @@ void LLTextEditor::getCurrentLineAndColumn( S32* line, S32* col, BOOL include_wo
void LLTextEditor::autoIndent()
{
// Count the number of spaces in the current line
- S32 line = getLineNumFromDocIndex(mCursorPos);
+ S32 line = getLineNumFromDocIndex(mCursorPos, false);
S32 line_start = getLineStart(line);
S32 space_count = 0;
S32 i;
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index 71d937b2c4..9b3ab9414c 100644
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -68,7 +68,6 @@ public:
Optional<bool> embedded_items,
ignore_tab,
- handle_edit_keys_directly,
show_line_numbers,
commit_on_focus_lost,
show_context_menu;
@@ -146,8 +145,6 @@ public:
virtual BOOL canDoDelete() const;
virtual void selectAll();
virtual BOOL canSelectAll() const;
- virtual void deselect();
- virtual BOOL canDeselect() const;
void selectNext(const std::string& search_text_in, BOOL case_insensitive, BOOL wrap = TRUE);
BOOL replaceText(const std::string& search_text, const std::string& replace_text, BOOL case_insensitive, BOOL wrap = TRUE);
@@ -218,13 +215,10 @@ protected:
S32 indentLine( S32 pos, S32 spaces );
void unindentLineBeforeCloseBrace();
- void reportBadKeystroke() { make_ui_sound("UISndBadKeystroke"); }
-
BOOL handleNavigationKey(const KEY key, const MASK mask);
- BOOL handleSpecialKey(const KEY key, const MASK mask, BOOL* return_key_hit);
+ BOOL handleSpecialKey(const KEY key, const MASK mask);
BOOL handleSelectionKey(const KEY key, const MASK mask);
BOOL handleControlKey(const KEY key, const MASK mask);
- BOOL handleEditKey(const KEY key, const MASK mask);
BOOL selectionContainsLineBreaks();
void deleteSelection(BOOL transient_operation);
@@ -329,10 +323,6 @@ private:
LLUUID mSourceID;
- // If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here
- //instead of routed by the menu system
- BOOL mHandleEditKeysDirectly;
-
LLCoordGL mLastIMEPosition; // Last position of the IME editor
keystroke_signal_t mKeystrokeSignal;
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index caf04339c2..f9a4ed7285 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -39,6 +39,7 @@
// Linden library includes
#include "v2math.h"
+#include "m3math.h"
#include "v4color.h"
#include "llrender.h"
#include "llrect.h"
@@ -85,6 +86,9 @@ std::list<std::string> gUntranslated;
/*static*/ LLHelp* LLUI::sHelpImpl = NULL;
/*static*/ std::vector<std::string> LLUI::sXUIPaths;
/*static*/ LLFrameTimer LLUI::sMouseIdleTimer;
+/*static*/ LLUI::add_popup_t LLUI::sAddPopupFunc;
+/*static*/ LLUI::remove_popup_t LLUI::sRemovePopupFunc;
+/*static*/ LLUI::clear_popups_t LLUI::sClearPopupsFunc;
// register filtereditor here
static LLDefaultChildRegistry::Register<LLFilterEditor> register_filter_editor("filter_editor");
@@ -180,19 +184,19 @@ void gl_rect_2d_offset_local( S32 left, S32 top, S32 right, S32 bottom, const LL
void gl_rect_2d_offset_local( S32 left, S32 top, S32 right, S32 bottom, S32 pixel_offset, BOOL filled)
{
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
left += LLFontGL::sCurOrigin.mX;
right += LLFontGL::sCurOrigin.mX;
bottom += LLFontGL::sCurOrigin.mY;
top += LLFontGL::sCurOrigin.mY;
- glLoadIdentity();
+ gGL.loadUIIdentity();
gl_rect_2d(llfloor((F32)left * LLUI::sGLScaleFactor.mV[VX]) - pixel_offset,
llfloor((F32)top * LLUI::sGLScaleFactor.mV[VY]) + pixel_offset,
llfloor((F32)right * LLUI::sGLScaleFactor.mV[VX]) + pixel_offset,
llfloor((F32)bottom * LLUI::sGLScaleFactor.mV[VY]) - pixel_offset,
filled);
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
@@ -203,7 +207,7 @@ void gl_rect_2d(S32 left, S32 top, S32 right, S32 bottom, BOOL filled )
// Counterclockwise quad will face the viewer
if( filled )
- {
+ {
gGL.begin( LLRender::QUADS );
gGL.vertex2i(left, top);
gGL.vertex2i(left, bottom);
@@ -508,9 +512,9 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
}
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
{
- gGL.translatef((F32)x, (F32)y, 0.f);
+ gGL.translateUI((F32)x, (F32)y, 0.f);
gGL.getTexUnit(0)->bind(image);
@@ -637,7 +641,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
}
gGL.end();
}
- gGL.popMatrix();
+ gGL.popUIMatrix();
if (solid_color)
{
@@ -660,39 +664,72 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre
LLGLSUIDefault gls_ui;
- gGL.pushMatrix();
+
+ gGL.getTexUnit(0)->bind(image);
+
+ gGL.color4fv(color.mV);
+
+ if (degrees == 0.f)
{
- gGL.translatef((F32)x, (F32)y, 0.f);
- if( degrees )
+ gGL.pushUIMatrix();
+ gGL.translateUI((F32)x, (F32)y, 0.f);
+
+ gGL.begin(LLRender::QUADS);
{
- F32 offset_x = F32(width/2);
- F32 offset_y = F32(height/2);
- gGL.translatef( offset_x, offset_y, 0.f);
- glRotatef( degrees, 0.f, 0.f, 1.f );
- gGL.translatef( -offset_x, -offset_y, 0.f );
+ gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop);
+ gGL.vertex2i(width, height );
+
+ gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop);
+ gGL.vertex2i(0, height );
+
+ gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom);
+ gGL.vertex2i(0, 0);
+
+ gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom);
+ gGL.vertex2i(width, 0);
}
+ gGL.end();
+ gGL.popUIMatrix();
+ }
+ else
+ {
+ gGL.pushUIMatrix();
+ gGL.translateUI((F32)x, (F32)y, 0.f);
+
+ F32 offset_x = F32(width/2);
+ F32 offset_y = F32(height/2);
+ gGL.translateUI(offset_x, offset_y, 0.f);
+
+ LLMatrix3 quat(0.f, 0.f, degrees*DEG_TO_RAD);
+
gGL.getTexUnit(0)->bind(image);
gGL.color4fv(color.mV);
gGL.begin(LLRender::QUADS);
{
+ LLVector3 v;
+
+ v = LLVector3(offset_x, offset_y, 0.f) * quat;
gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop);
- gGL.vertex2i(width, height );
+ gGL.vertex2f(v.mV[0], v.mV[1] );
+ v = LLVector3(-offset_x, offset_y, 0.f) * quat;
gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop);
- gGL.vertex2i(0, height );
+ gGL.vertex2f(v.mV[0], v.mV[1] );
+ v = LLVector3(-offset_x, -offset_y, 0.f) * quat;
gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom);
- gGL.vertex2i(0, 0);
+ gGL.vertex2f(v.mV[0], v.mV[1] );
+ v = LLVector3(offset_x, -offset_y, 0.f) * quat;
gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom);
- gGL.vertex2i(width, 0);
+ gGL.vertex2f(v.mV[0], v.mV[1] );
}
gGL.end();
+ gGL.popUIMatrix();
}
- gGL.popMatrix();
}
@@ -747,9 +784,9 @@ void gl_arc_2d(F32 center_x, F32 center_y, F32 radius, S32 steps, BOOL filled, F
end_angle += F_TWO_PI;
}
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
{
- gGL.translatef(center_x, center_y, 0.f);
+ gGL.translateUI(center_x, center_y, 0.f);
// Inexact, but reasonably fast.
F32 delta = (end_angle - start_angle) / steps;
@@ -780,15 +817,15 @@ void gl_arc_2d(F32 center_x, F32 center_y, F32 radius, S32 steps, BOOL filled, F
}
gGL.end();
}
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
void gl_circle_2d(F32 center_x, F32 center_y, F32 radius, S32 steps, BOOL filled)
{
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
{
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gGL.translatef(center_x, center_y, 0.f);
+ gGL.translateUI(center_x, center_y, 0.f);
// Inexact, but reasonably fast.
F32 delta = F_TWO_PI / steps;
@@ -819,7 +856,7 @@ void gl_circle_2d(F32 center_x, F32 center_y, F32 radius, S32 steps, BOOL filled
}
gGL.end();
}
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
// Renders a ring with sides (tube shape)
@@ -846,9 +883,9 @@ void gl_deep_circle( F32 radius, F32 depth, S32 steps )
void gl_ring( F32 radius, F32 width, const LLColor4& center_color, const LLColor4& side_color, S32 steps, BOOL render_center )
{
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
{
- gGL.translatef(0.f, 0.f, -width / 2);
+ gGL.translateUI(0.f, 0.f, -width / 2);
if( render_center )
{
gGL.color4fv(center_color.mV);
@@ -857,11 +894,11 @@ void gl_ring( F32 radius, F32 width, const LLColor4& center_color, const LLColor
else
{
gl_washer_2d(radius, radius - width, steps, side_color, side_color);
- gGL.translatef(0.f, 0.f, width);
+ gGL.translateUI(0.f, 0.f, width);
gl_washer_2d(radius - width, radius, steps, side_color, side_color);
}
}
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
// Draw gray and white checkerboard with black border
@@ -1050,9 +1087,9 @@ void gl_segmented_rect_2d_tex(const S32 left,
S32 width = llabs(right - left);
S32 height = llabs(top - bottom);
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
- gGL.translatef((F32)left, (F32)bottom, 0.f);
+ gGL.translateUI((F32)left, (F32)bottom, 0.f);
LLVector2 border_uv_scale((F32)border_size / (F32)texture_width, (F32)border_size / (F32)texture_height);
if (border_uv_scale.mV[VX] > 0.5f)
@@ -1193,7 +1230,7 @@ void gl_segmented_rect_2d_tex(const S32 left,
}
gGL.end();
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
void gl_segmented_rect_2d_fragment_tex(const S32 left,
@@ -1210,9 +1247,9 @@ void gl_segmented_rect_2d_fragment_tex(const S32 left,
S32 width = llabs(right - left);
S32 height = llabs(top - bottom);
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
- gGL.translatef((F32)left, (F32)bottom, 0.f);
+ gGL.translateUI((F32)left, (F32)bottom, 0.f);
LLVector2 border_uv_scale((F32)border_size / (F32)texture_width, (F32)border_size / (F32)texture_height);
if (border_uv_scale.mV[VX] > 0.5f)
@@ -1383,7 +1420,7 @@ void gl_segmented_rect_2d_fragment_tex(const S32 left,
}
gGL.end();
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
void gl_segmented_rect_3d_tex(const LLVector2& border_scale, const LLVector3& border_width,
@@ -1573,6 +1610,13 @@ void LLUI::cleanupClass()
sImageProvider->cleanUp();
}
+void LLUI::setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t& remove_popup, const clear_popups_t& clear_popups)
+{
+ sAddPopupFunc = add_popup;
+ sRemovePopupFunc = remove_popup;
+ sClearPopupsFunc = clear_popups;
+}
+
//static
void LLUI::dirtyRect(LLRect rect)
{
@@ -1591,7 +1635,7 @@ void LLUI::dirtyRect(LLRect rect)
//static
void LLUI::translate(F32 x, F32 y, F32 z)
{
- gGL.translatef(x,y,z);
+ gGL.translateUI(x,y,z);
LLFontGL::sCurOrigin.mX += (S32) x;
LLFontGL::sCurOrigin.mY += (S32) y;
LLFontGL::sCurOrigin.mZ += z;
@@ -1600,14 +1644,14 @@ void LLUI::translate(F32 x, F32 y, F32 z)
//static
void LLUI::pushMatrix()
{
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
LLFontGL::sOriginStack.push_back(LLFontGL::sCurOrigin);
}
//static
void LLUI::popMatrix()
{
- gGL.popMatrix();
+ gGL.popUIMatrix();
LLFontGL::sCurOrigin = *LLFontGL::sOriginStack.rbegin();
LLFontGL::sOriginStack.pop_back();
}
@@ -1615,7 +1659,7 @@ void LLUI::popMatrix()
//static
void LLUI::loadIdentity()
{
- glLoadIdentity();
+ gGL.loadUIIdentity();
LLFontGL::sCurOrigin.mX = 0;
LLFontGL::sCurOrigin.mY = 0;
LLFontGL::sCurOrigin.mZ = 0;
@@ -1843,6 +1887,39 @@ LLControlGroup& LLUI::getControlControlGroup (const std::string& controlname)
return *sSettingGroups["config"]; // default group
}
+//static
+void LLUI::addPopup(LLView* viewp)
+{
+ if (sAddPopupFunc)
+ {
+ sAddPopupFunc(viewp);
+ }
+}
+
+//static
+void LLUI::removePopup(LLView* viewp)
+{
+ if (sRemovePopupFunc)
+ {
+ sRemovePopupFunc(viewp);
+ }
+}
+
+//static
+void LLUI::clearPopups()
+{
+ if (sClearPopupsFunc)
+ {
+ sClearPopupsFunc();
+ }
+}
+
+//static
+void LLUI::reportBadKeystroke()
+{
+ make_ui_sound("UISndBadKeystroke");
+}
+
//static
// spawn_x and spawn_y are top left corner of view in screen GL coordinates
void LLUI::positionViewNearMouse(LLView* view, S32 spawn_x, S32 spawn_y)
@@ -1943,6 +2020,7 @@ namespace LLInitParam
{
setBlockFromValue();
addSynonym(name, "");
+ setBlockFromValue();
}
void TypedParam<const LLFontGL*>::setValueFromBlock() const
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index af8d4ea03b..c18262ef76 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -160,12 +160,17 @@ public:
// Methods
//
typedef std::map<std::string, LLControlGroup*> settings_map_t;
+ typedef boost::function<void(LLView*)> add_popup_t;
+ typedef boost::function<void(LLView*)> remove_popup_t;
+ typedef boost::function<void(void)> clear_popups_t;
+
static void initClass(const settings_map_t& settings,
LLImageProviderInterface* image_provider,
LLUIAudioCallback audio_callback = NULL,
const LLVector2 *scale_factor = NULL,
const std::string& language = LLStringUtil::null);
static void cleanupClass();
+ static void setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t&, const clear_popups_t& );
static void pushMatrix();
static void popMatrix();
@@ -208,6 +213,12 @@ public:
static void resetMouseIdleTimer() { sMouseIdleTimer.reset(); }
static LLWindow* getWindow() { return sWindow; }
+ static void addPopup(LLView*);
+ static void removePopup(LLView*);
+ static void clearPopups();
+
+ static void reportBadKeystroke();
+
// Ensures view does not overlap mouse cursor, but is inside
// the view's parent rectangle. Used for tooltips, inspectors.
// Optionally override the view's default X/Y, which are relative to the
@@ -227,6 +238,9 @@ private:
static LLImageProviderInterface* sImageProvider;
static std::vector<std::string> sXUIPaths;
static LLFrameTimer sMouseIdleTimer;
+ static add_popup_t sAddPopupFunc;
+ static remove_popup_t sRemovePopupFunc;
+ static clear_popups_t sClearPopupsFunc;
};
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 3c73ae9b0c..736de651da 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -34,6 +34,8 @@
#include "linden_common.h"
#include "llurlentry.h"
#include "lluri.h"
+#include "llurlmatch.h"
+#include "llurlregistry.h"
#include "llcachename.h"
#include "lltrans.h"
@@ -232,7 +234,7 @@ std::string LLUrlEntryHTTPNoProtocol::getUrl(const std::string &string) const
LLUrlEntrySLURL::LLUrlEntrySLURL()
{
// see http://slurl.com/about.php for details on the SLURL format
- mPattern = boost::regex("http://(maps.secondlife.com|slurl.com)/secondlife/\\S+/?(\\d+)?/?(\\d+)?/?(\\d+)?/?\\S*",
+ mPattern = boost::regex("http://(maps.secondlife.com|slurl.com)/secondlife/[^ /]+(/\\d+){0,3}(/?(\\?title|\\?img|\\?msg)=\\S*)?/?",
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_slurl.xml";
mTooltip = LLTrans::getString("TooltipSLURL");
@@ -320,6 +322,38 @@ void LLUrlEntryAgent::onAgentNameReceived(const LLUUID& id,
callObservers(id.asString(), first + " " + last);
}
+std::string LLUrlEntryAgent::getTooltip(const std::string &string) const
+{
+ // return a tooltip corresponding to the URL type instead of the generic one
+ std::string url = getUrl(string);
+
+ if (LLStringUtil::endsWith(url, "/mute"))
+ {
+ return LLTrans::getString("TooltipAgentMute");
+ }
+ if (LLStringUtil::endsWith(url, "/unmute"))
+ {
+ return LLTrans::getString("TooltipAgentUnmute");
+ }
+ if (LLStringUtil::endsWith(url, "/im"))
+ {
+ return LLTrans::getString("TooltipAgentIM");
+ }
+ if (LLStringUtil::endsWith(url, "/pay"))
+ {
+ return LLTrans::getString("TooltipAgentPay");
+ }
+ if (LLStringUtil::endsWith(url, "/offerteleport"))
+ {
+ return LLTrans::getString("TooltipAgentOfferTeleport");
+ }
+ if (LLStringUtil::endsWith(url, "/requestfriend"))
+ {
+ return LLTrans::getString("TooltipAgentRequestFriend");
+ }
+ return LLTrans::getString("TooltipAgentUrl");
+}
+
std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
{
if (!gCacheName)
@@ -343,6 +377,31 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa
}
else if (gCacheName->getFullName(agent_id, full_name))
{
+ // customize label string based on agent SLapp suffix
+ if (LLStringUtil::endsWith(url, "/mute"))
+ {
+ return LLTrans::getString("SLappAgentMute") + " " + full_name;
+ }
+ if (LLStringUtil::endsWith(url, "/unmute"))
+ {
+ return LLTrans::getString("SLappAgentUnmute") + " " + full_name;
+ }
+ if (LLStringUtil::endsWith(url, "/im"))
+ {
+ return LLTrans::getString("SLappAgentIM") + " " + full_name;
+ }
+ if (LLStringUtil::endsWith(url, "/pay"))
+ {
+ return LLTrans::getString("SLappAgentPay") + " " + full_name;
+ }
+ if (LLStringUtil::endsWith(url, "/offerteleport"))
+ {
+ return LLTrans::getString("SLappAgentOfferTeleport") + " " + full_name;
+ }
+ if (LLStringUtil::endsWith(url, "/requestfriend"))
+ {
+ return LLTrans::getString("SLappAgentRequestFriend") + " " + full_name;
+ }
return full_name;
}
else
@@ -434,6 +493,35 @@ std::string LLUrlEntryInventory::getLabel(const std::string &url, const LLUrlLab
return LLURI::unescape(label.empty() ? url : label);
}
+//
+// LLUrlEntryObjectIM Describes a Second Life inspector for the object Url, e.g.,
+// secondlife:///app/objectim/7bcd7864-da6b-e43f-4486-91d28a28d95b?name=Object&owner=3de548e1-57be-cfea-2b78-83ae3ad95998&slurl=Danger!%20Danger!/200/200/30/&groupowned=1
+//
+LLUrlEntryObjectIM::LLUrlEntryObjectIM()
+{
+ mPattern = boost::regex("secondlife:///app/objectim/[\\da-f-]+\?.*",
+ boost::regex::perl|boost::regex::icase);
+ mMenuName = "menu_url_objectim.xml";
+}
+
+std::string LLUrlEntryObjectIM::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+ LLURI uri(url);
+ LLSD query_map = uri.queryMap();
+ if (query_map.has("name"))
+ return query_map["name"];
+ return unescapeUrl(url);
+}
+
+std::string LLUrlEntryObjectIM::getLocation(const std::string &url) const
+{
+ LLURI uri(url);
+ LLSD query_map = uri.queryMap();
+ if (query_map.has("slurl"))
+ return query_map["slurl"];
+ return LLUrlEntryBase::getLocation(url);
+}
+
///
/// LLUrlEntryParcel Describes a Second Life parcel Url, e.g.,
/// secondlife:///app/parcel/0000060e-4b39-e00b-d0c3-d98b1934e3a8/about
@@ -602,6 +690,20 @@ std::string LLUrlEntrySLLabel::getUrl(const std::string &string) const
return getUrlFromWikiLink(string);
}
+std::string LLUrlEntrySLLabel::getTooltip(const std::string &string) const
+{
+ // return a tooltip corresponding to the URL type instead of the generic one (EXT-4574)
+ std::string url = getUrl(string);
+ LLUrlMatch match;
+ if (LLUrlRegistry::instance().findUrl(url, match))
+ {
+ return match.getTooltip();
+ }
+
+ // unrecognized URL? should not happen
+ return LLUrlEntryBase::getTooltip(string);
+}
+
//
// LLUrlEntryWorldMap Describes secondlife:///<location> URLs
//
@@ -630,7 +732,7 @@ std::string LLUrlEntryWorldMap::getLabel(const std::string &url, const LLUrlLabe
}
const std::string label = LLTrans::getString("SLurlLabelShowOnMap");
- std::string location = path_array[2];
+ std::string location = unescapeUrl(path_array[2]);
std::string x = (path_parts > 3) ? path_array[3] : "128";
std::string y = (path_parts > 4) ? path_array[4] : "128";
std::string z = (path_parts > 5) ? path_array[5] : "0";
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index 3abada0f24..29575d752c 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -83,7 +83,7 @@ public:
LLUIColor getColor() const { return mColor; }
/// Given a matched Url, return a tooltip string for the hyperlink
- std::string getTooltip() const { return mTooltip; }
+ virtual std::string getTooltip(const std::string &string) const { return mTooltip; }
/// Return the name of a XUI file containing the context menu items
std::string getMenuName() const { return mMenuName; }
@@ -169,6 +169,7 @@ class LLUrlEntryAgent : public LLUrlEntryBase
public:
LLUrlEntryAgent();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+ /*virtual*/ std::string getTooltip(const std::string &string) const;
private:
void onAgentNameReceived(const LLUUID& id, const std::string& first,
const std::string& last, BOOL is_group);
@@ -200,6 +201,18 @@ public:
private:
};
+///
+/// LLUrlEntryObjectIM Describes a Second Life inspector for the object Url, e.g.,
+/// secondlife:///app/objectim/7bcd7864-da6b-e43f-4486-91d28a28d95b?name=Object&owner=3de548e1-57be-cfea-2b78-83ae3ad95998&slurl=Danger!%20Danger!/200/200/30/&groupowned=1
+///
+class LLUrlEntryObjectIM : public LLUrlEntryBase
+{
+public:
+ LLUrlEntryObjectIM();
+ /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+ /*virtual*/ std::string getLocation(const std::string &url) const;
+private:
+};
///
/// LLUrlEntryParcel Describes a Second Life parcel Url, e.g.,
@@ -257,6 +270,7 @@ public:
LLUrlEntrySLLabel();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getUrl(const std::string &string) const;
+ /*virtual*/ std::string getTooltip(const std::string &string) const;
};
///
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index 722dbe41b3..0a70aa586a 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -53,8 +53,10 @@ LLUrlRegistry::LLUrlRegistry()
registerUrl(new LLUrlEntryParcel());
registerUrl(new LLUrlEntryTeleport());
registerUrl(new LLUrlEntryWorldMap());
+ registerUrl(new LLUrlEntryObjectIM());
registerUrl(new LLUrlEntryPlace());
registerUrl(new LLUrlEntryInventory());
+ registerUrl(new LLUrlEntryObjectIM());
//LLUrlEntrySL and LLUrlEntrySLLabel have more common pattern,
//so it should be registered in the end of list
registerUrl(new LLUrlEntrySL());
@@ -174,7 +176,7 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL
match.setValues(match_start, match_end,
match_entry->getUrl(url),
match_entry->getLabel(url, cb),
- match_entry->getTooltip(),
+ match_entry->getTooltip(url),
match_entry->getIcon(),
match_entry->getColor(),
match_entry->getMenuName(),
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 63e627ceb5..781c111474 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -73,9 +73,9 @@ S32 LLView::sLastBottomXML = S32_MIN;
std::vector<LLViewDrawContext*> LLViewDrawContext::sDrawContextStack;
-#if LL_DEBUG
+//#if LL_DEBUG
BOOL LLView::sIsDrawing = FALSE;
-#endif
+//#endif
// Compiler optimization, generate extern template
template class LLView* LLView::getChild<class LLView>(
@@ -150,6 +150,10 @@ LLView::~LLView()
{
dirtyRect();
//llinfos << "Deleting view " << mName << ":" << (void*) this << llendl;
+ if (LLView::sIsDrawing)
+ {
+ lldebugs << "Deleting view " << mName << " during UI draw() phase" << llendl;
+ }
// llassert(LLView::sIsDrawing == FALSE);
// llassert_always(sDepth == 0); // avoid deleting views while drawing! It can subtly break list iterators
@@ -592,11 +596,6 @@ void LLView::setVisible(BOOL visible)
{
if ( mVisible != visible )
{
- if( !visible && (gFocusMgr.getTopCtrl() == this) )
- {
- gFocusMgr.setTopCtrl( NULL );
- }
-
mVisible = visible;
// notify children of visibility change if root, or part of visible hierarchy
@@ -1326,7 +1325,6 @@ void LLView::drawChildren()
localRectToScreen(viewp->getRect(),&screenRect);
if ( rootRect.overlaps(screenRect) && LLUI::sDirtyRect.overlaps(screenRect))
{
- glMatrixMode(GL_MODELVIEW);
LLUI::pushMatrix();
{
LLUI::translate((F32)viewp->getRect().mLeft, (F32)viewp->getRect().mBottom, 0.f);
@@ -1350,8 +1348,6 @@ void LLView::drawChildren()
}
--sDepth;
}
-
- gGL.getTexUnit(0)->disable();
}
void LLView::dirtyRect()
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index c4d7313743..efae00f0e5 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -171,9 +171,9 @@ private:
// widgets in general are not copyable
LLView(const LLView& other) {};
public:
-#if LL_DEBUG
+//#if LL_DEBUG
static BOOL sIsDrawing;
-#endif
+//#endif
enum ESoundFlags
{
SILENT = 0,
diff --git a/indra/llui/llviewborder.cpp b/indra/llui/llviewborder.cpp
index 30717f87de..bd9c43c97f 100644
--- a/indra/llui/llviewborder.cpp
+++ b/indra/llui/llviewborder.cpp
@@ -125,14 +125,6 @@ void LLViewBorder::draw()
llassert( FALSE ); // not implemented
}
}
- else
- if( STYLE_TEXTURE == mStyle )
- {
- if( mTexture )
- {
- drawTextures();
- }
- }
LLView::draw();
}
@@ -255,56 +247,6 @@ void LLViewBorder::drawTwoPixelLines()
gl_line_2d(left+1, bottom+1, right-1, bottom+1);
}
-void LLViewBorder::drawTextures()
-{
- //LLGLSUIDefault gls_ui;
-
- //llassert( FALSE ); // TODO: finish implementing
-
- //gGL.color4fv(UI_VERTEX_COLOR.mV);
-
- //gGL.getTexUnit(0)->bind(mTexture);
- //gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_WRAP);
-
- //drawTextureTrapezoid( 0.f, mBorderWidth, getRect().getWidth(), 0, 0 );
- //drawTextureTrapezoid( 90.f, mBorderWidth, getRect().getHeight(), (F32)getRect().getWidth(),0 );
- //drawTextureTrapezoid( 180.f, mBorderWidth, getRect().getWidth(), (F32)getRect().getWidth(),(F32)getRect().getHeight() );
- //drawTextureTrapezoid( 270.f, mBorderWidth, getRect().getHeight(), 0, (F32)getRect().getHeight() );
-}
-
-
-void LLViewBorder::drawTextureTrapezoid( F32 degrees, S32 width, S32 length, F32 start_x, F32 start_y )
-{
- gGL.pushMatrix();
- {
- gGL.translatef(start_x, start_y, 0.f);
- glRotatef( degrees, 0, 0, 1 );
-
- gGL.begin(LLRender::QUADS);
- {
- // width, width /---------\ length-width, width //
- // / \ //
- // / \ //
- // /---------------\ //
- // 0,0 length, 0 //
-
- gGL.texCoord2f( 0, 0 );
- gGL.vertex2i( 0, 0 );
-
- gGL.texCoord2f( (GLfloat)length, 0 );
- gGL.vertex2i( length, 0 );
-
- gGL.texCoord2f( (GLfloat)(length - width), (GLfloat)width );
- gGL.vertex2i( length - width, width );
-
- gGL.texCoord2f( (GLfloat)width, (GLfloat)width );
- gGL.vertex2i( width, width );
- }
- gGL.end();
- }
- gGL.popMatrix();
-}
-
BOOL LLViewBorder::getBevelFromAttribute(LLXMLNodePtr node, LLViewBorder::EBevel& bevel_style)
{
if (node->hasAttribute("bevel_style"))
diff --git a/indra/llui/llviewborder.h b/indra/llui/llviewborder.h
index 92fd569325..342e84fd93 100644
--- a/indra/llui/llviewborder.h
+++ b/indra/llui/llviewborder.h
@@ -99,8 +99,7 @@ private:
void drawOnePixelLines();
void drawTwoPixelLines();
void drawTextures();
- void drawTextureTrapezoid( F32 degrees, S32 width, S32 length, F32 start_x, F32 start_y );
-
+
EBevel mBevel;
EStyle mStyle;
LLUIColor mHighlightLight;
diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h
index 55b221e716..52132c38d3 100644
--- a/indra/llwindow/llwindow.h
+++ b/indra/llwindow/llwindow.h
@@ -160,7 +160,7 @@ public:
virtual void setLanguageTextInput( const LLCoordGL & pos ) {};
virtual void updateLanguageTextInputArea() {}
virtual void interruptLanguageTextInput() {}
- virtual void spawnWebBrowser(const std::string& escaped_url) {};
+ virtual void spawnWebBrowser(const std::string& escaped_url, bool async) {};
static std::vector<std::string> getDynamicFallbackFontList();
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index ad97bc45fc..7026a3f7a6 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -2781,6 +2781,9 @@ const char* cursorIDToName(int id)
case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE";
case UI_CURSOR_TOOLMEDIAOPEN: return "UI_CURSOR_TOOLMEDIAOPEN";
case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE";
+ case UI_CURSOR_TOOLSIT: return "UI_CURSOR_TOOLSIT";
+ case UI_CURSOR_TOOLBUY: return "UI_CURSOR_TOOLBUY";
+ case UI_CURSOR_TOOLOPEN: return "UI_CURSOR_TOOLOPEN";
}
llerrs << "cursorIDToName: unknown cursor id" << id << llendl;
@@ -2883,6 +2886,9 @@ void LLWindowMacOSX::setCursor(ECursorType cursor)
case UI_CURSOR_TOOLPLAY:
case UI_CURSOR_TOOLPAUSE:
case UI_CURSOR_TOOLMEDIAOPEN:
+ case UI_CURSOR_TOOLSIT:
+ case UI_CURSOR_TOOLBUY:
+ case UI_CURSOR_TOOLOPEN:
result = setImageCursor(gCursors[cursor]);
break;
@@ -2924,6 +2930,9 @@ void LLWindowMacOSX::initCursors()
initPixmapCursor(UI_CURSOR_TOOLPLAY, 1, 1);
initPixmapCursor(UI_CURSOR_TOOLPAUSE, 1, 1);
initPixmapCursor(UI_CURSOR_TOOLMEDIAOPEN, 1, 1);
+ initPixmapCursor(UI_CURSOR_TOOLSIT, 20, 15);
+ initPixmapCursor(UI_CURSOR_TOOLBUY, 20, 15);
+ initPixmapCursor(UI_CURSOR_TOOLOPEN, 20, 15);
initPixmapCursor(UI_CURSOR_SIZENWSE, 10, 10);
initPixmapCursor(UI_CURSOR_SIZENESW, 10, 10);
@@ -3169,7 +3178,7 @@ S32 OSMessageBoxMacOSX(const std::string& text, const std::string& caption, U32
// Open a URL with the user's default web browser.
// Must begin with protocol identifier.
-void LLWindowMacOSX::spawnWebBrowser(const std::string& escaped_url)
+void LLWindowMacOSX::spawnWebBrowser(const std::string& escaped_url, bool async)
{
bool found = false;
S32 i;
diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h
index 7c6b324029..5ac74bb004 100644
--- a/indra/llwindow/llwindowmacosx.h
+++ b/indra/llwindow/llwindowmacosx.h
@@ -116,7 +116,7 @@ public:
/*virtual*/ void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b);
/*virtual*/ void interruptLanguageTextInput();
- /*virtual*/ void spawnWebBrowser(const std::string& escaped_url);
+ /*virtual*/ void spawnWebBrowser(const std::string& escaped_url, bool async);
static std::vector<std::string> getDynamicFallbackFontList();
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 1f705f9e60..399d284402 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -2074,6 +2074,9 @@ void LLWindowSDL::initCursors()
mSDLCursors[UI_CURSOR_TOOLPAUSE] = makeSDLCursorFromBMP("toolpause.BMP",0,0);
mSDLCursors[UI_CURSOR_TOOLMEDIAOPEN] = makeSDLCursorFromBMP("toolmediaopen.BMP",0,0);
mSDLCursors[UI_CURSOR_PIPETTE] = makeSDLCursorFromBMP("lltoolpipette.BMP",2,28);
+ mSDLCursors[UI_CURSOR_TOOLSIT] = makeSDLCursorFromBMP("toolsit.BMP",20,15);
+ mSDLCursors[UI_CURSOR_TOOLBUY] = makeSDLCursorFromBMP("toolbuy.BMP",20,15);
+ mSDLCursors[UI_CURSOR_TOOLOPEN] = makeSDLCursorFromBMP("toolopen.BMP",20,15);
if (getenv("LL_ATI_MOUSE_CURSOR_BUG") != NULL) {
llinfos << "Disabling cursor updating due to LL_ATI_MOUSE_CURSOR_BUG" << llendl;
@@ -2465,7 +2468,7 @@ void exec_cmd(const std::string& cmd, const std::string& arg)
// Open a URL with the user's default web browser.
// Must begin with protocol identifier.
-void LLWindowSDL::spawnWebBrowser(const std::string& escaped_url)
+void LLWindowSDL::spawnWebBrowser(const std::string& escaped_url, bool async)
{
llinfos << "spawn_web_browser: " << escaped_url << llendl;
@@ -2543,6 +2546,7 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
// Use libfontconfig to find us a nice ordered list of fallback fonts
// specific to this system.
std::string final_fallback("/usr/share/fonts/truetype/kochi/kochi-gothic.ttf");
+ const int max_font_count_cutoff = 40; // fonts are expensive in the current system, don't enumerate an arbitrary number of them
// Our 'ideal' font properties which define the sorting results.
// slant=0 means Roman, index=0 means the first face in a font file
// (the one we actually use), weight=80 means medium weight,
@@ -2558,7 +2562,6 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
std::vector<std::string> rtns;
FcFontSet *fs = NULL;
FcPattern *sortpat = NULL;
- int font_count = 0;
llinfos << "Getting system font list from FontConfig..." << llendl;
@@ -2602,12 +2605,13 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
FcPatternDestroy(sortpat);
}
+ int found_font_count = 0;
if (fs)
{
// Get the full pathnames to the fonts, where available,
// which is what we really want.
- int i;
- for (i=0; i<fs->nfont; ++i)
+ found_font_count = fs->nfont;
+ for (int i=0; i<fs->nfont; ++i)
{
FcChar8 *filename;
if (FcResultMatch == FcPatternGetString(fs->fonts[i],
@@ -2616,7 +2620,8 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
&& filename)
{
rtns.push_back(std::string((const char*)filename));
- ++font_count;
+ if (rtns.size() >= max_font_count_cutoff)
+ break; // hit limit
}
}
FcFontSetDestroy (fs);
@@ -2629,7 +2634,7 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
{
lldebugs << " file: " << *it << llendl;
}
- llinfos << "Using " << font_count << " system font(s)." << llendl;
+ llinfos << "Using " << rtns.size() << "/" << found_font_count << " system fonts." << llendl;
rtns.push_back(final_fallback);
return rtns;
diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h
index e6bdd46a77..8e65a2f324 100644
--- a/indra/llwindow/llwindowsdl.h
+++ b/indra/llwindow/llwindowsdl.h
@@ -125,7 +125,7 @@ public:
/*virtual*/ void *getPlatformWindow();
/*virtual*/ void bringToFront();
- /*virtual*/ void spawnWebBrowser(const std::string& escaped_url);
+ /*virtual*/ void spawnWebBrowser(const std::string& escaped_url, bool async);
static std::vector<std::string> getDynamicFallbackFontList();
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index c80392ad45..95c1980dd6 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -46,6 +46,7 @@
#include "llerror.h"
#include "llgl.h"
#include "llstring.h"
+#include "lldir.h"
// System includes
#include <commdlg.h>
@@ -1545,6 +1546,11 @@ void LLWindowWin32::initCursors()
mCursor[ UI_CURSOR_PIPETTE ] = LoadCursor(module, TEXT("TOOLPIPETTE"));
// Color cursors
+ gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, "res", "toolbuy.cur");
+
+ mCursor[UI_CURSOR_TOOLSIT] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + "res" + gDirUtilp->getDirDelimiter() + "toolsit.cur").c_str());
+ mCursor[UI_CURSOR_TOOLBUY] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + "res" + gDirUtilp->getDirDelimiter() + "toolbuy.cur").c_str());
+ mCursor[UI_CURSOR_TOOLOPEN] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + "res" + gDirUtilp->getDirDelimiter() + "toolopen.cur").c_str());
mCursor[UI_CURSOR_TOOLPLAY] = loadColorCursor(TEXT("TOOLPLAY"));
mCursor[UI_CURSOR_TOOLPAUSE] = loadColorCursor(TEXT("TOOLPAUSE"));
mCursor[UI_CURSOR_TOOLMEDIAOPEN] = loadColorCursor(TEXT("TOOLMEDIAOPEN"));
@@ -2953,7 +2959,7 @@ S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 t
}
-void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url )
+void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url, bool async)
{
bool found = false;
S32 i;
@@ -2983,84 +2989,16 @@ void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url )
// let the OS decide what to use to open the URL
SHELLEXECUTEINFO sei = { sizeof( sei ) };
- sei.fMask = SEE_MASK_FLAG_DDEWAIT;
+ // NOTE: this assumes that SL will stick around long enough to complete the DDE message exchange
+ // necessary for ShellExecuteEx to complete
+ if (async)
+ {
+ sei.fMask = SEE_MASK_ASYNCOK;
+ }
sei.nShow = SW_SHOWNORMAL;
sei.lpVerb = L"open";
sei.lpFile = url_utf16.c_str();
ShellExecuteEx( &sei );
-
- //// TODO: LEAVING OLD CODE HERE SO I DON'T BONE OTHER MERGES
- //// DELETE THIS ONCE THE MERGES ARE DONE
-
- // Figure out the user's default web browser
- // HKEY_CLASSES_ROOT\http\shell\open\command
- /*
- std::string reg_path_str = gURLProtocolWhitelistHandler[i] + "\\shell\\open\\command";
- WCHAR reg_path_wstr[256];
- mbstowcs( reg_path_wstr, reg_path_str.c_str(), LL_ARRAY_SIZE(reg_path_wstr) );
-
- HKEY key;
- WCHAR browser_open_wstr[1024];
- DWORD buffer_length = 1024;
- RegOpenKeyEx(HKEY_CLASSES_ROOT, reg_path_wstr, 0, KEY_QUERY_VALUE, &key);
- RegQueryValueEx(key, NULL, NULL, NULL, (LPBYTE)browser_open_wstr, &buffer_length);
- RegCloseKey(key);
-
- // Convert to STL string
- LLWString browser_open_wstring = utf16str_to_wstring(browser_open_wstr);
-
- if (browser_open_wstring.length() < 2)
- {
- LL_WARNS("Window") << "Invalid browser executable in registry " << browser_open_wstring << LL_ENDL;
- return;
- }
-
- // Extract the process that's supposed to be launched
- LLWString browser_executable;
- if (browser_open_wstring[0] == '"')
- {
- // executable is quoted, find the matching quote
- size_t quote_pos = browser_open_wstring.find('"', 1);
- // copy out the string including both quotes
- browser_executable = browser_open_wstring.substr(0, quote_pos+1);
- }
- else
- {
- // executable not quoted, find a space
- size_t space_pos = browser_open_wstring.find(' ', 1);
- browser_executable = browser_open_wstring.substr(0, space_pos);
- }
-
- LL_DEBUGS("Window") << "Browser reg key: " << wstring_to_utf8str(browser_open_wstring) << LL_ENDL;
- LL_INFOS("Window") << "Browser executable: " << wstring_to_utf8str(browser_executable) << LL_ENDL;
-
- // Convert URL to wide string for Windows API
- // Assume URL is UTF8, as can come from scripts
- LLWString url_wstring = utf8str_to_wstring(escaped_url);
- llutf16string url_utf16 = wstring_to_utf16str(url_wstring);
-
- // Convert executable and path to wide string for Windows API
- llutf16string browser_exec_utf16 = wstring_to_utf16str(browser_executable);
-
- // ShellExecute returns HINSTANCE for backwards compatiblity.
- // MS docs say to cast to int and compare to 32.
- HWND our_window = NULL;
- LPCWSTR directory_wstr = NULL;
- int retval = (int) ShellExecute(our_window, // Flawfinder: ignore
- L"open",
- browser_exec_utf16.c_str(),
- url_utf16.c_str(),
- directory_wstr,
- SW_SHOWNORMAL);
- if (retval > 32)
- {
- LL_DEBUGS("Window") << "load_url success with " << retval << LL_ENDL;
- }
- else
- {
- LL_INFOS("Window") << "load_url failure with " << retval << LL_ENDL;
- }
- */
}
/*
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
index 9d57735772..d4a3446515 100644
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -114,7 +114,7 @@ public:
/*virtual*/ void setLanguageTextInput( const LLCoordGL & pos );
/*virtual*/ void updateLanguageTextInputArea();
/*virtual*/ void interruptLanguageTextInput();
- /*virtual*/ void spawnWebBrowser(const std::string& escaped_url);
+ /*virtual*/ void spawnWebBrowser(const std::string& escaped_url, bool async);
LLWindowCallbacks::DragNDropResult completeDragNDropRequest( const LLCoordGL gl_coord, const MASK mask, LLWindowCallbacks::DragNDropAction action, const std::string url );
diff --git a/indra/lscript/lscript_execute/lscript_execute.cpp b/indra/lscript/lscript_execute/lscript_execute.cpp
index e849fa9a6e..8de54aeda5 100644
--- a/indra/lscript/lscript_execute/lscript_execute.cpp
+++ b/indra/lscript/lscript_execute/lscript_execute.cpp
@@ -520,7 +520,7 @@ void LLScriptExecuteLSL2::callNextQueuedEventHandler(U64 event_register, const L
}
else
{
- llwarns << "Shit, somehow got an event that we're not registered for!" << llendl;
+ llwarns << "Somehow got an event that we're not registered for!" << llendl;
}
delete eventdata;
}
diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp
index f5b077fea0..49bbca6c52 100644
--- a/indra/media_plugins/example/media_plugin_example.cpp
+++ b/indra/media_plugins/example/media_plugin_example.cpp
@@ -119,17 +119,6 @@ void MediaPluginExample::receiveMessage( const char* message_string )
std::string plugin_version = "Example media plugin, Example Version 1.0.0.0";
message.setValue( "plugin_version", plugin_version );
sendMessage( message );
-
- // Plugin gets to decide the texture parameters to use.
- message.setMessage( LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params" );
- message.setValueS32( "default_width", mWidth );
- message.setValueS32( "default_height", mHeight );
- message.setValueS32( "depth", mDepth );
- message.setValueU32( "internalformat", GL_RGBA );
- message.setValueU32( "format", GL_RGBA );
- message.setValueU32( "type", GL_UNSIGNED_BYTE );
- message.setValueBoolean( "coords_opengl", false );
- sendMessage( message );
}
else
if ( message_name == "idle" )
@@ -191,7 +180,20 @@ void MediaPluginExample::receiveMessage( const char* message_string )
else
if ( message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA )
{
- if ( message_name == "size_change" )
+ if ( message_name == "init" )
+ {
+ // Plugin gets to decide the texture parameters to use.
+ LLPluginMessage message( LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params" );
+ message.setValueS32( "default_width", mWidth );
+ message.setValueS32( "default_height", mHeight );
+ message.setValueS32( "depth", mDepth );
+ message.setValueU32( "internalformat", GL_RGBA );
+ message.setValueU32( "format", GL_RGBA );
+ message.setValueU32( "type", GL_UNSIGNED_BYTE );
+ message.setValueBoolean( "coords_opengl", false );
+ sendMessage( message );
+ }
+ else if ( message_name == "size_change" )
{
std::string name = message_in.getValue( "name" );
S32 width = message_in.getValueS32( "width" );
diff --git a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp
index 26173314a7..033c4ba2f3 100644
--- a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp
+++ b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp
@@ -141,6 +141,7 @@ private:
// Very GStreamer-specific
GMainLoop *mPump; // event pump for this media
GstElement *mPlaybin;
+ GstElement *mVisualizer;
GstSLVideo *mVideoSink;
};
@@ -159,6 +160,7 @@ MediaPluginGStreamer010::MediaPluginGStreamer010(
mSeekDestination(0.0),
mPump ( NULL ),
mPlaybin ( NULL ),
+ mVisualizer ( NULL ),
mVideoSink ( NULL ),
mCommand ( COMMAND_NONE )
{
@@ -686,6 +688,33 @@ MediaPluginGStreamer010::load()
this);
llgst_object_unref (bus);
+ // get a visualizer element (bonus feature!)
+ char* vis_name = getenv("LL_GST_VIS_NAME");
+ if (!vis_name ||
+ (vis_name && std::string(vis_name)!="none"))
+ {
+ if (vis_name)
+ {
+ mVisualizer = llgst_element_factory_make (vis_name, "vis");
+ }
+ if (!mVisualizer)
+ {
+ mVisualizer = llgst_element_factory_make ("libvisual_jess", "vis");
+ if (!mVisualizer)
+ {
+ mVisualizer = llgst_element_factory_make ("goom", "vis");
+ if (!mVisualizer)
+ {
+ mVisualizer = llgst_element_factory_make ("libvisual_lv_scope", "vis");
+ if (!mVisualizer)
+ {
+ // That's okay, we don't NEED this.
+ }
+ }
+ }
+ }
+ }
+
if (NULL == getenv("LL_GSTREAMER_EXTERNAL")) {
// instantiate a custom video sink
mVideoSink =
@@ -702,6 +731,11 @@ MediaPluginGStreamer010::load()
g_object_set(mPlaybin, "video-sink", mVideoSink, NULL);
}
+ if (mVisualizer)
+ {
+ g_object_set(mPlaybin, "vis-plugin", mVisualizer, NULL);
+ }
+
return true;
}
@@ -724,6 +758,12 @@ MediaPluginGStreamer010::unload ()
mPlaybin = NULL;
}
+ if (mVisualizer)
+ {
+ llgst_object_unref (GST_OBJECT (mVisualizer));
+ mVisualizer = NULL;
+ }
+
if (mPump)
{
g_main_loop_quit(mPump);
@@ -946,33 +986,6 @@ void MediaPluginGStreamer010::receiveMessage(const char *message_string)
message.setValue("plugin_version", getVersion());
sendMessage(message);
-
- // Plugin gets to decide the texture parameters to use.
- message.setMessage(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
- // lame to have to decide this now, it depends on the movie. Oh well.
- mDepth = 4;
-
- mCurrentWidth = 1;
- mCurrentHeight = 1;
- mPreviousWidth = 1;
- mPreviousHeight = 1;
- mNaturalWidth = 1;
- mNaturalHeight = 1;
- mWidth = 1;
- mHeight = 1;
- mTextureWidth = 1;
- mTextureHeight = 1;
-
- message.setValueU32("format", GL_RGBA);
- message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV);
-
- message.setValueS32("depth", mDepth);
- message.setValueS32("default_width", mWidth);
- message.setValueS32("default_height", mHeight);
- message.setValueU32("internalformat", GL_RGBA8);
- message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left.
- message.setValueBoolean("allow_downsample", true); // we respond with grace and performance if asked to downscale
- sendMessage(message);
}
else if(message_name == "idle")
{
@@ -1037,7 +1050,36 @@ void MediaPluginGStreamer010::receiveMessage(const char *message_string)
}
else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
{
- if(message_name == "size_change")
+ if(message_name == "init")
+ {
+ // Plugin gets to decide the texture parameters to use.
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
+ // lame to have to decide this now, it depends on the movie. Oh well.
+ mDepth = 4;
+
+ mCurrentWidth = 1;
+ mCurrentHeight = 1;
+ mPreviousWidth = 1;
+ mPreviousHeight = 1;
+ mNaturalWidth = 1;
+ mNaturalHeight = 1;
+ mWidth = 1;
+ mHeight = 1;
+ mTextureWidth = 1;
+ mTextureHeight = 1;
+
+ message.setValueU32("format", GL_RGBA);
+ message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV);
+
+ message.setValueS32("depth", mDepth);
+ message.setValueS32("default_width", mWidth);
+ message.setValueS32("default_height", mHeight);
+ message.setValueU32("internalformat", GL_RGBA8);
+ message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left.
+ message.setValueBoolean("allow_downsample", true); // we respond with grace and performance if asked to downscale
+ sendMessage(message);
+ }
+ else if(message_name == "size_change")
{
std::string name = message_in.getValue("name");
S32 width = message_in.getValueS32("width");
diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
index e230fcc280..1f88301ca7 100644
--- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
+++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
@@ -859,36 +859,6 @@ void MediaPluginQuickTime::receiveMessage(const char *message_string)
plugin_version += codec.str();
message.setValue("plugin_version", plugin_version);
sendMessage(message);
-
- // Plugin gets to decide the texture parameters to use.
- message.setMessage(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
- #if defined(LL_WINDOWS)
- // Values for Windows
- mDepth = 3;
- message.setValueU32("format", GL_RGB);
- message.setValueU32("type", GL_UNSIGNED_BYTE);
-
- // We really want to pad the texture width to a multiple of 32 bytes, but since we're using 3-byte pixels, it doesn't come out even.
- // Padding to a multiple of 3*32 guarantees it'll divide out properly.
- message.setValueU32("padding", 32 * 3);
- #else
- // Values for Mac
- mDepth = 4;
- message.setValueU32("format", GL_BGRA_EXT);
- #ifdef __BIG_ENDIAN__
- message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV );
- #else
- message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8);
- #endif
-
- // Pad texture width to a multiple of 32 bytes, to line up with cache lines.
- message.setValueU32("padding", 32);
- #endif
- message.setValueS32("depth", mDepth);
- message.setValueU32("internalformat", GL_RGB);
- message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left.
- message.setValueBoolean("allow_downsample", true);
- sendMessage(message);
}
else if(message_name == "idle")
{
@@ -953,7 +923,41 @@ void MediaPluginQuickTime::receiveMessage(const char *message_string)
}
else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
{
- if(message_name == "size_change")
+ if(message_name == "init")
+ {
+ // This is the media init message -- all necessary data for initialization should have been received.
+
+ // Plugin gets to decide the texture parameters to use.
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
+ #if defined(LL_WINDOWS)
+ // Values for Windows
+ mDepth = 3;
+ message.setValueU32("format", GL_RGB);
+ message.setValueU32("type", GL_UNSIGNED_BYTE);
+
+ // We really want to pad the texture width to a multiple of 32 bytes, but since we're using 3-byte pixels, it doesn't come out even.
+ // Padding to a multiple of 3*32 guarantees it'll divide out properly.
+ message.setValueU32("padding", 32 * 3);
+ #else
+ // Values for Mac
+ mDepth = 4;
+ message.setValueU32("format", GL_BGRA_EXT);
+ #ifdef __BIG_ENDIAN__
+ message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV );
+ #else
+ message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8);
+ #endif
+
+ // Pad texture width to a multiple of 32 bytes, to line up with cache lines.
+ message.setValueU32("padding", 32);
+ #endif
+ message.setValueS32("depth", mDepth);
+ message.setValueU32("internalformat", GL_RGB);
+ message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left.
+ message.setValueBoolean("allow_downsample", true);
+ sendMessage(message);
+ }
+ else if(message_name == "size_change")
{
std::string name = message_in.getValue("name");
S32 width = message_in.getValueS32("width");
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index 4512c22b5d..9f66a77c64 100644
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -14,10 +14,12 @@ include(Linking)
include(PluginAPI)
include(MediaPluginBase)
include(FindOpenGL)
+include(PulseAudio)
include(WebKitLibPlugin)
include_directories(
+ ${PULSEAUDIO_INCLUDE_DIRS}
${LLPLUGIN_INCLUDE_DIRS}
${MEDIA_PLUGIN_BASE_INCLUDE_DIRS}
${LLCOMMON_INCLUDE_DIRS}
@@ -34,25 +36,27 @@ set(media_plugin_webkit_SOURCE_FILES
media_plugin_webkit.cpp
)
-add_library(media_plugin_webkit
- SHARED
- ${media_plugin_webkit_SOURCE_FILES}
-)
-
set(media_plugin_webkit_LINK_LIBRARIES
${LLPLUGIN_LIBRARIES}
${MEDIA_PLUGIN_BASE_LIBRARIES}
${LLCOMMON_LIBRARIES}
${WEBKIT_PLUGIN_LIBRARIES}
${PLUGIN_API_WINDOWS_LIBRARIES}
+ ${PULSEAUDIO_LIBRARIES}
)
if (LINUX)
+ list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp)
list(APPEND media_plugin_webkit_LINK_LIBRARIES
${UI_LIBRARIES} # for glib/GTK
)
endif (LINUX)
+add_library(media_plugin_webkit
+ SHARED
+ ${media_plugin_webkit_SOURCE_FILES}
+)
+
target_link_libraries(media_plugin_webkit ${media_plugin_webkit_LINK_LIBRARIES})
add_dependencies(media_plugin_webkit
diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp
new file mode 100644
index 0000000000..52ab766f7f
--- /dev/null
+++ b/indra/media_plugins/webkit/linux_volume_catcher.cpp
@@ -0,0 +1,488 @@
+/**
+ * @file linux_volume_catcher.cpp
+ * @brief A Linux-specific, PulseAudio-specific hack to detect and volume-adjust new audio sources
+ *
+ * @cond
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ * @endcond
+ */
+
+/*
+ The high-level design is as follows:
+ 1) Connect to the PulseAudio daemon
+ 2) Watch for the creation of new audio players connecting to the daemon (this includes ALSA clients running on the PulseAudio emulation layer, such as Flash plugins)
+ 3) Examine any new audio player's PID to see if it belongs to our own process
+ 4) If so, tell PA to adjust the volume of that audio player ('sink input' in PA parlance)
+ 5) Keep a list of all living audio players that we care about, adjust the volumes of all of them when we get a new setVolume() call
+ */
+
+#include "linden_common.h"
+
+#include "linux_volume_catcher.h"
+
+
+#if LL_PULSEAUDIO_ENABLED
+
+extern "C" {
+#include <glib.h>
+
+#include <pulse/introspect.h>
+#include <pulse/context.h>
+#include <pulse/subscribe.h>
+#include <pulse/glib-mainloop.h> // There's no special reason why we want the *glib* PA mainloop, but the generic polling implementation seems broken.
+
+#include "apr_pools.h"
+#include "apr_dso.h"
+}
+
+////////////////////////////////////////////////////
+
+#define DEBUGMSG(...) do {} while(0)
+#define INFOMSG(...) do {} while(0)
+#define WARNMSG(...) do {} while(0)
+
+#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) RTN (*ll##PASYM)(__VA_ARGS__) = NULL
+#include "linux_volume_catcher_pa_syms.inc"
+#include "linux_volume_catcher_paglib_syms.inc"
+#undef LL_PA_SYM
+
+static bool sSymsGrabbed = false;
+static apr_pool_t *sSymPADSOMemoryPool = NULL;
+static apr_dso_handle_t *sSymPADSOHandleG = NULL;
+
+bool grab_pa_syms(std::string pulse_dso_name)
+{
+ if (sSymsGrabbed)
+ {
+ // already have grabbed good syms
+ return true;
+ }
+
+ bool sym_error = false;
+ bool rtn = false;
+ apr_status_t rv;
+ apr_dso_handle_t *sSymPADSOHandle = NULL;
+
+#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll##PASYM, sSymPADSOHandle, #PASYM); if (rv != APR_SUCCESS) {INFOMSG("Failed to grab symbol: %s", #PASYM); if (REQUIRED) sym_error = true;} else DEBUGMSG("grabbed symbol: %s from %p", #PASYM, (void*)ll##PASYM);}while(0)
+
+ //attempt to load the shared library
+ apr_pool_create(&sSymPADSOMemoryPool, NULL);
+
+ if ( APR_SUCCESS == (rv = apr_dso_load(&sSymPADSOHandle,
+ pulse_dso_name.c_str(),
+ sSymPADSOMemoryPool) ))
+ {
+ INFOMSG("Found DSO: %s", pulse_dso_name.c_str());
+
+#include "linux_volume_catcher_pa_syms.inc"
+#include "linux_volume_catcher_paglib_syms.inc"
+
+ if ( sSymPADSOHandle )
+ {
+ sSymPADSOHandleG = sSymPADSOHandle;
+ sSymPADSOHandle = NULL;
+ }
+
+ rtn = !sym_error;
+ }
+ else
+ {
+ INFOMSG("Couldn't load DSO: %s", pulse_dso_name.c_str());
+ rtn = false; // failure
+ }
+
+ if (sym_error)
+ {
+ WARNMSG("Failed to find necessary symbols in PulseAudio libraries.");
+ }
+#undef LL_PA_SYM
+
+ sSymsGrabbed = rtn;
+ return rtn;
+}
+
+
+void ungrab_pa_syms()
+{
+ // should be safe to call regardless of whether we've
+ // actually grabbed syms.
+
+ if ( sSymPADSOHandleG )
+ {
+ apr_dso_unload(sSymPADSOHandleG);
+ sSymPADSOHandleG = NULL;
+ }
+
+ if ( sSymPADSOMemoryPool )
+ {
+ apr_pool_destroy(sSymPADSOMemoryPool);
+ sSymPADSOMemoryPool = NULL;
+ }
+
+ // NULL-out all of the symbols we'd grabbed
+#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{ll##PASYM = NULL;}while(0)
+#include "linux_volume_catcher_pa_syms.inc"
+#include "linux_volume_catcher_paglib_syms.inc"
+#undef LL_PA_SYM
+
+ sSymsGrabbed = false;
+}
+////////////////////////////////////////////////////
+
+// PulseAudio requires a chain of callbacks with C linkage
+extern "C" {
+ void callback_discovered_sinkinput(pa_context *context, const pa_sink_input_info *i, int eol, void *userdata);
+ void callback_subscription_alert(pa_context *context, pa_subscription_event_type_t t, uint32_t index, void *userdata);
+ void callback_context_state(pa_context *context, void *userdata);
+}
+
+
+class LinuxVolumeCatcherImpl
+{
+public:
+ LinuxVolumeCatcherImpl();
+ ~LinuxVolumeCatcherImpl();
+
+ void setVolume(F32 volume);
+ void pump(void);
+
+ // for internal use - can't be private because used from our C callbacks
+
+ bool loadsyms(std::string pulse_dso_name);
+ void init();
+ void cleanup();
+
+ void update_all_volumes(F32 volume);
+ void update_index_volume(U32 index, F32 volume);
+ void connected_okay();
+
+ std::set<U32> mSinkInputIndices;
+ std::map<U32,U32> mSinkInputNumChannels;
+ F32 mDesiredVolume;
+ pa_glib_mainloop *mMainloop;
+ pa_context *mPAContext;
+ bool mConnected;
+ bool mGotSyms;
+};
+
+LinuxVolumeCatcherImpl::LinuxVolumeCatcherImpl()
+ : mDesiredVolume(0.0f),
+ mMainloop(NULL),
+ mPAContext(NULL),
+ mConnected(false),
+ mGotSyms(false)
+{
+ init();
+}
+
+LinuxVolumeCatcherImpl::~LinuxVolumeCatcherImpl()
+{
+ cleanup();
+}
+
+bool LinuxVolumeCatcherImpl::loadsyms(std::string pulse_dso_name)
+{
+ return grab_pa_syms(pulse_dso_name);
+}
+
+void LinuxVolumeCatcherImpl::init()
+{
+ // try to be as defensive as possible because PA's interface is a
+ // bit fragile and (for our purposes) we'd rather simply not function
+ // than crash
+
+ // we cheat and rely upon libpulse-mainloop-glib.so.0 to pull-in
+ // libpulse.so.0 - this isn't a great assumption, and the two DSOs should
+ // probably be loaded separately. Our Linux DSO framework needs refactoring,
+ // we do this sort of thing a lot with practically identical logic...
+ mGotSyms = loadsyms("libpulse-mainloop-glib.so.0");
+ if (!mGotSyms) return;
+
+ mMainloop = llpa_glib_mainloop_new(g_main_context_default());
+ if (mMainloop)
+ {
+ pa_mainloop_api *api = llpa_glib_mainloop_get_api(mMainloop);
+ if (api)
+ {
+ pa_proplist *proplist = llpa_proplist_new();
+ if (proplist)
+ {
+ llpa_proplist_sets(proplist, PA_PROP_APPLICATION_ICON_NAME, "multimedia-player");
+ llpa_proplist_sets(proplist, PA_PROP_APPLICATION_ID, "com.secondlife.viewer.mediaplugvoladjust");
+ llpa_proplist_sets(proplist, PA_PROP_APPLICATION_NAME, "SL Plugin Volume Adjuster");
+ llpa_proplist_sets(proplist, PA_PROP_APPLICATION_VERSION, "1");
+
+ // plain old pa_context_new() is broken!
+ mPAContext = llpa_context_new_with_proplist(api, NULL, proplist);
+ llpa_proplist_free(proplist);
+ }
+ }
+ }
+
+ // Now we've set up a PA context and mainloop, try connecting the
+ // PA context to a PA daemon.
+ if (mPAContext)
+ {
+ llpa_context_set_state_callback(mPAContext, callback_context_state, this);
+ pa_context_flags_t cflags = (pa_context_flags)0; // maybe add PA_CONTEXT_NOAUTOSPAWN?
+ if (llpa_context_connect(mPAContext, NULL, cflags, NULL) >= 0)
+ {
+ // Okay! We haven't definitely connected, but we
+ // haven't definitely failed yet.
+ }
+ else
+ {
+ // Failed to connect to PA manager... we'll leave
+ // things like that. Perhaps we should try again later.
+ }
+ }
+}
+
+void LinuxVolumeCatcherImpl::cleanup()
+{
+ mConnected = false;
+
+ if (mGotSyms && mPAContext)
+ {
+ llpa_context_disconnect(mPAContext);
+ llpa_context_unref(mPAContext);
+ }
+ mPAContext = NULL;
+
+ if (mGotSyms && mMainloop)
+ {
+ llpa_glib_mainloop_free(mMainloop);
+ }
+ mMainloop = NULL;
+}
+
+void LinuxVolumeCatcherImpl::setVolume(F32 volume)
+{
+ mDesiredVolume = volume;
+
+ if (!mGotSyms) return;
+
+ if (mConnected && mPAContext)
+ {
+ update_all_volumes(mDesiredVolume);
+ }
+
+ pump();
+}
+
+void LinuxVolumeCatcherImpl::pump()
+{
+ gboolean may_block = FALSE;
+ g_main_context_iteration(g_main_context_default(), may_block);
+}
+
+void LinuxVolumeCatcherImpl::connected_okay()
+{
+ pa_operation *op;
+
+ // fetch global list of existing sinkinputs
+ if ((op = llpa_context_get_sink_input_info_list(mPAContext,
+ callback_discovered_sinkinput,
+ this)))
+ {
+ llpa_operation_unref(op);
+ }
+
+ // subscribe to future global sinkinput changes
+ llpa_context_set_subscribe_callback(mPAContext,
+ callback_subscription_alert,
+ this);
+ if ((op = llpa_context_subscribe(mPAContext, (pa_subscription_mask_t)
+ (PA_SUBSCRIPTION_MASK_SINK_INPUT),
+ NULL, NULL)))
+ {
+ llpa_operation_unref(op);
+ }
+}
+
+void LinuxVolumeCatcherImpl::update_all_volumes(F32 volume)
+{
+ for (std::set<U32>::iterator it = mSinkInputIndices.begin();
+ it != mSinkInputIndices.end(); ++it)
+ {
+ update_index_volume(*it, volume);
+ }
+}
+
+void LinuxVolumeCatcherImpl::update_index_volume(U32 index, F32 volume)
+{
+ static pa_cvolume cvol;
+ llpa_cvolume_set(&cvol, mSinkInputNumChannels[index],
+ llpa_sw_volume_from_linear(volume));
+
+ pa_context *c = mPAContext;
+ uint32_t idx = index;
+ const pa_cvolume *cvolumep = &cvol;
+ pa_context_success_cb_t cb = NULL; // okay as null
+ void *userdata = NULL; // okay as null
+
+ pa_operation *op;
+ if ((op = llpa_context_set_sink_input_volume(c, idx, cvolumep, cb, userdata)))
+ {
+ llpa_operation_unref(op);
+ }
+}
+
+
+void callback_discovered_sinkinput(pa_context *context, const pa_sink_input_info *sii, int eol, void *userdata)
+{
+ LinuxVolumeCatcherImpl *impl = dynamic_cast<LinuxVolumeCatcherImpl*>((LinuxVolumeCatcherImpl*)userdata);
+ llassert(impl);
+
+ if (0 == eol)
+ {
+ pa_proplist *proplist = sii->proplist;
+ pid_t sinkpid = atoll(llpa_proplist_gets(proplist, PA_PROP_APPLICATION_PROCESS_ID));
+
+ if (sinkpid == getpid()) // does the discovered sinkinput belong to this process?
+ {
+ bool is_new = (impl->mSinkInputIndices.find(sii->index) ==
+ impl->mSinkInputIndices.end());
+
+ impl->mSinkInputIndices.insert(sii->index);
+ impl->mSinkInputNumChannels[sii->index] = sii->channel_map.channels;
+
+ if (is_new)
+ {
+ // new!
+ impl->update_index_volume(sii->index, impl->mDesiredVolume);
+ }
+ else
+ {
+ // seen it already, do nothing.
+ }
+ }
+ }
+}
+
+void callback_subscription_alert(pa_context *context, pa_subscription_event_type_t t, uint32_t index, void *userdata)
+{
+ LinuxVolumeCatcherImpl *impl = dynamic_cast<LinuxVolumeCatcherImpl*>((LinuxVolumeCatcherImpl*)userdata);
+ llassert(impl);
+
+ switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) {
+ case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) ==
+ PA_SUBSCRIPTION_EVENT_REMOVE)
+ {
+ // forget this sinkinput, if we were caring about it
+ impl->mSinkInputIndices.erase(index);
+ impl->mSinkInputNumChannels.erase(index);
+ }
+ else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) ==
+ PA_SUBSCRIPTION_EVENT_NEW)
+ {
+ // ask for more info about this new sinkinput
+ pa_operation *op;
+ if ((op = llpa_context_get_sink_input_info(impl->mPAContext, index, callback_discovered_sinkinput, impl)))
+ {
+ llpa_operation_unref(op);
+ }
+ }
+ else
+ {
+ // property change on this sinkinput - we don't care.
+ }
+ break;
+
+ default:;
+ }
+}
+
+void callback_context_state(pa_context *context, void *userdata)
+{
+ LinuxVolumeCatcherImpl *impl = dynamic_cast<LinuxVolumeCatcherImpl*>((LinuxVolumeCatcherImpl*)userdata);
+ llassert(impl);
+
+ switch (llpa_context_get_state(context))
+ {
+ case PA_CONTEXT_READY:
+ impl->mConnected = true;
+ impl->connected_okay();
+ break;
+ case PA_CONTEXT_TERMINATED:
+ impl->mConnected = false;
+ break;
+ case PA_CONTEXT_FAILED:
+ impl->mConnected = false;
+ break;
+ default:;
+ }
+}
+
+/////////////////////////////////////////////////////
+
+LinuxVolumeCatcher::LinuxVolumeCatcher()
+{
+ pimpl = new LinuxVolumeCatcherImpl();
+}
+
+LinuxVolumeCatcher::~LinuxVolumeCatcher()
+{
+ delete pimpl;
+ pimpl = NULL;
+}
+
+void LinuxVolumeCatcher::setVolume(F32 volume)
+{
+ llassert(pimpl);
+ pimpl->setVolume(volume);
+}
+
+void LinuxVolumeCatcher::pump()
+{
+ llassert(pimpl);
+ pimpl->pump();
+}
+
+#else // !LL_PULSEAUDIO_ENABLED
+
+// stub.
+
+LinuxVolumeCatcher::LinuxVolumeCatcher()
+{
+ pimpl = NULL;
+}
+
+LinuxVolumeCatcher::~LinuxVolumeCatcher()
+{
+}
+
+void LinuxVolumeCatcher::setVolume(F32 volume)
+{
+}
+
+void LinuxVolumeCatcher::pump()
+{
+}
+
+#endif // LL_PULSEAUDIO_ENABLED
diff --git a/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc
new file mode 100644
index 0000000000..d806b48428
--- /dev/null
+++ b/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc
@@ -0,0 +1,21 @@
+// required symbols to grab
+LL_PA_SYM(true, pa_context_connect, int, pa_context *c, const char *server, pa_context_flags_t flags, const pa_spawn_api *api);
+LL_PA_SYM(true, pa_context_disconnect, void, pa_context *c);
+LL_PA_SYM(true, pa_context_get_sink_input_info, pa_operation*, pa_context *c, uint32_t idx, pa_sink_input_info_cb_t cb, void *userdata);
+LL_PA_SYM(true, pa_context_get_sink_input_info_list, pa_operation*, pa_context *c, pa_sink_input_info_cb_t cb, void *userdata);
+LL_PA_SYM(true, pa_context_get_state, pa_context_state_t, pa_context *c);
+LL_PA_SYM(true, pa_context_new_with_proplist, pa_context*, pa_mainloop_api *mainloop, const char *name, pa_proplist *proplist);
+LL_PA_SYM(true, pa_context_set_sink_input_volume, pa_operation*, pa_context *c, uint32_t idx, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata);
+LL_PA_SYM(true, pa_context_set_state_callback, void, pa_context *c, pa_context_notify_cb_t cb, void *userdata);
+LL_PA_SYM(true, pa_context_set_subscribe_callback, void, pa_context *c, pa_context_subscribe_cb_t cb, void *userdata);
+LL_PA_SYM(true, pa_context_subscribe, pa_operation*, pa_context *c, pa_subscription_mask_t m, pa_context_success_cb_t cb, void *userdata);
+LL_PA_SYM(true, pa_context_unref, void, pa_context *c);
+LL_PA_SYM(true, pa_cvolume_set, pa_cvolume*, pa_cvolume *a, unsigned channels, pa_volume_t v);
+LL_PA_SYM(true, pa_operation_unref, void, pa_operation *o);
+LL_PA_SYM(true, pa_proplist_free, void, pa_proplist* p);
+LL_PA_SYM(true, pa_proplist_gets, const char*, pa_proplist *p, const char *key);
+LL_PA_SYM(true, pa_proplist_new, pa_proplist*, void);
+LL_PA_SYM(true, pa_proplist_sets, int, pa_proplist *p, const char *key, const char *value);
+LL_PA_SYM(true, pa_sw_volume_from_linear, pa_volume_t, double v);
+
+// optional symbols to grab
diff --git a/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc
new file mode 100644
index 0000000000..abf628c96c
--- /dev/null
+++ b/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc
@@ -0,0 +1,6 @@
+// required symbols to grab
+LL_PA_SYM(true, pa_glib_mainloop_free, void, pa_glib_mainloop* g);
+LL_PA_SYM(true, pa_glib_mainloop_get_api, pa_mainloop_api*, pa_glib_mainloop* g);
+LL_PA_SYM(true, pa_glib_mainloop_new, pa_glib_mainloop *, GMainContext *c);
+
+// optional symbols to grab
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 688d3bcd3d..436e077e9b 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -43,11 +43,22 @@
#include "llpluginmessageclasses.h"
#include "media_plugin_base.h"
+// set to 1 if you're using the version of llqtwebkit that's QPixmap-ified
+#if LL_LINUX
+# define LL_QTWEBKIT_USES_PIXMAPS 0
+#else
+# define LL_QTWEBKIT_USES_PIXMAPS 0
+#endif // LL_LINUX
+
+#if LL_LINUX
+# include "linux_volume_catcher.h"
+#endif // LL_LINUX
+
#if LL_WINDOWS
-#include <direct.h>
+# include <direct.h>
#else
-#include <unistd.h>
-#include <stdlib.h>
+# include <unistd.h>
+# include <stdlib.h>
#endif
#if LL_WINDOWS
@@ -77,10 +88,16 @@ public:
private:
std::string mProfileDir;
+ std::string mHostLanguage;
+ std::string mUserAgent;
+ bool mCookiesEnabled;
+ bool mJavascriptEnabled;
+ bool mPluginsEnabled;
enum
{
- INIT_STATE_UNINITIALIZED, // Browser instance hasn't been set up yet
+ INIT_STATE_UNINITIALIZED, // LLQtWebkit hasn't been set up yet
+ INIT_STATE_INITIALIZED, // LLQtWebkit has been set up, but no browser window has been created yet.
INIT_STATE_NAVIGATING, // Browser instance has been set up and initial navigate to about:blank has been issued
INIT_STATE_NAVIGATE_COMPLETE, // initial navigate to about:blank has completed
INIT_STATE_WAIT_REDRAW, // First real navigate begin has been received, waiting for page changed event to start handling redraws
@@ -102,6 +119,10 @@ private:
F32 mBackgroundG;
F32 mBackgroundB;
+#if LL_LINUX
+ LinuxVolumeCatcher mLinuxVolumeCatcher;
+#endif // LL_LINUX
+
void setInitState(int state)
{
// std::cerr << "changing init state to " << state << std::endl;
@@ -114,6 +135,10 @@ private:
{
LLQtWebKit::getInstance()->pump( milliseconds );
+#if LL_LINUX
+ mLinuxVolumeCatcher.pump();
+#endif // LL_LINUX
+
checkEditState();
if(mInitState == INIT_STATE_NAVIGATE_COMPLETE)
@@ -130,7 +155,11 @@ private:
{
const unsigned char* browser_pixels = LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId );
- unsigned int buffer_size = LLQtWebKit::getInstance()->getBrowserRowSpan( mBrowserWindowId ) * LLQtWebKit::getInstance()->getBrowserHeight( mBrowserWindowId );
+ unsigned int rowspan = LLQtWebKit::getInstance()->getBrowserRowSpan( mBrowserWindowId );
+ unsigned int height = LLQtWebKit::getInstance()->getBrowserHeight( mBrowserWindowId );
+#if !LL_QTWEBKIT_USES_PIXMAPS
+ unsigned int buffer_size = rowspan * height;
+#endif // !LL_QTWEBKIT_USES_PIXMAPS
// std::cerr << "webkit plugin: updating" << std::endl;
@@ -138,7 +167,16 @@ private:
if ( mPixels && browser_pixels )
{
// std::cerr << " memcopy of " << buffer_size << " bytes" << std::endl;
+
+#if LL_QTWEBKIT_USES_PIXMAPS
+ // copy the pixel data upside-down because of the co-ord system
+ for (int y=0; y<height; ++y)
+ {
+ memcpy( &mPixels[(height-y-1)*rowspan], &browser_pixels[y*rowspan], rowspan );
+ }
+#else
memcpy( mPixels, browser_pixels, buffer_size );
+#endif // LL_QTWEBKIT_USES_PIXMAPS
}
if ( mWidth > 0 && mHeight > 0 )
@@ -159,13 +197,6 @@ private:
if ( mInitState > INIT_STATE_UNINITIALIZED )
return true;
- // not enough information to initialize the browser yet.
- if ( mWidth < 0 || mHeight < 0 || mDepth < 0 ||
- mTextureWidth < 0 || mTextureHeight < 0 )
- {
- return false;
- };
-
// set up directories
char cwd[ FILENAME_MAX ]; // I *think* this is defined on all platforms we use
if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
@@ -176,12 +207,12 @@ private:
std::string application_dir = std::string( cwd );
#if LL_DARWIN
- // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on.
- // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger.
- // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it
- // which gets hit when the plugin is probed by webkit.
- // Unsetting the environment variable here works around this issue.
- unsetenv("USERBREAK");
+ // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on.
+ // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger.
+ // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it
+ // which gets hit when the plugin is probed by webkit.
+ // Unsetting the environment variable here works around this issue.
+ unsetenv("USERBREAK");
#endif
#if LL_WINDOWS
@@ -222,65 +253,91 @@ private:
bool result = LLQtWebKit::getInstance()->init( application_dir, component_dir, mProfileDir, native_window_handle );
if ( result )
{
- // create single browser window
- mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight );
-#if LL_WINDOWS
- // Enable plugins
- LLQtWebKit::getInstance()->enablePlugins(true);
-#elif LL_DARWIN
- // Enable plugins
- LLQtWebKit::getInstance()->enablePlugins(true);
-#elif LL_LINUX
- // Enable plugins
- LLQtWebKit::getInstance()->enablePlugins(true);
-#endif
- // Enable cookies
- LLQtWebKit::getInstance()->enableCookies( true );
-
- // tell LLQtWebKit about the size of the browser window
- LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
-
- // observer events that LLQtWebKit emits
- LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this );
-
- // append details to agent string
- LLQtWebKit::getInstance()->setBrowserAgentId( "LLPluginMedia Web Browser" );
-
- // don't flip bitmap
- LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true );
-
- // set background color
- // convert background color channels from [0.0, 1.0] to [0, 255];
- LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) );
-
- // Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns.
- setInitState(INIT_STATE_NAVIGATING);
-
- // Don't do this here -- it causes the dreaded "white flash" when loading a browser instance.
- // FIXME: Re-added this because navigating to a "page" initializes things correctly - especially
- // for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date.
- // Build a data URL like this: "data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#RRGGBB%22%3E%3C/body%3E%3C/html%3E"
- // where RRGGBB is the background color in HTML style
- std::stringstream url;
-
- url << "data:text/html,%3Chtml%3E%3Cbody%20bgcolor=%22#";
- // convert background color channels from [0.0, 1.0] to [0, 255];
- url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundR * 255.0f);
- url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundG * 255.0f);
- url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f);
- url << "%22%3E%3C/body%3E%3C/html%3E";
+ mInitState = INIT_STATE_INITIALIZED;
- lldebugs << "data url is: " << url.str() << llendl;
-
- LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() );
-// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" );
-
return true;
};
return false;
};
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ bool initBrowserWindow()
+ {
+ // already initialized
+ if ( mInitState > INIT_STATE_INITIALIZED )
+ return true;
+
+ // not enough information to initialize the browser yet.
+ if ( mWidth < 0 || mHeight < 0 || mDepth < 0 ||
+ mTextureWidth < 0 || mTextureHeight < 0 )
+ {
+ return false;
+ };
+
+ // Set up host language before creating browser window
+ if(!mHostLanguage.empty())
+ {
+ LLQtWebKit::getInstance()->setHostLanguage(mHostLanguage);
+ }
+
+ // turn on/off cookies based on what host app tells us
+ LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled );
+
+ // turn on/off plugins based on what host app tells us
+ LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled );
+
+ // turn on/off Javascript based on what host app tells us
+ LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
+
+ // create single browser window
+ mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight );
+
+ // tell LLQtWebKit about the size of the browser window
+ LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
+
+ // observer events that LLQtWebKit emits
+ LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this );
+
+ // append details to agent string
+ LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
+
+#if !LL_QTWEBKIT_USES_PIXMAPS
+ // don't flip bitmap
+ LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true );
+#endif // !LL_QTWEBKIT_USES_PIXMAPS
+
+ // set background color
+ // convert background color channels from [0.0, 1.0] to [0, 255];
+ LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) );
+
+ // Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns.
+ setInitState(INIT_STATE_NAVIGATING);
+
+ // Don't do this here -- it causes the dreaded "white flash" when loading a browser instance.
+ // FIXME: Re-added this because navigating to a "page" initializes things correctly - especially
+ // for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date.
+ // Build a data URL like this: "data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#RRGGBB%22%3E%3C/body%3E%3C/html%3E"
+ // where RRGGBB is the background color in HTML style
+ std::stringstream url;
+
+ url << "data:text/html,%3Chtml%3E%3Cbody%20bgcolor=%22#";
+ // convert background color channels from [0.0, 1.0] to [0, 255];
+ url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundR * 255.0f);
+ url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundG * 255.0f);
+ url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f);
+ url << "%22%3E%3C/body%3E%3C/html%3E";
+
+ lldebugs << "data url is: " << url.str() << llendl;
+
+ LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() );
+// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" );
+
+ return true;
+ }
+
+ void setVolume(F32 vol);
////////////////////////////////////////////////////////////////////////////////
// virtual
@@ -451,6 +508,19 @@ private:
sendMessage(message);
}
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onCookieChanged(const EventType& event)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "cookie_set");
+ message.setValue("cookie", event.getStringValue());
+ // These could be passed through as well, but aren't really needed.
+// message.setValue("uri", event.getEventUri());
+// message.setValueBoolean("dead", (event.getIntValue() != 0))
+ sendMessage(message);
+ }
+
LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers)
{
int result = 0;
@@ -615,6 +685,11 @@ MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_
mBackgroundR = 0.0f;
mBackgroundG = 0.0f;
mBackgroundB = 0.0f;
+
+ mHostLanguage = "en"; // default to english
+ mJavascriptEnabled = true; // default to on
+ mPluginsEnabled = true; // default to on
+ mUserAgent = "LLPluginMedia Web Browser";
}
MediaPluginWebKit::~MediaPluginWebKit()
@@ -641,9 +716,6 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
{
if(message_name == "init")
{
- std::string user_data_path = message_in.getValue("user_data_path"); // n.b. always has trailing platform-specific dir-delimiter
- mProfileDir = user_data_path + "browser_profile";
-
LLPluginMessage message("base", "init_response");
LLSD versions = LLSD::emptyMap();
versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION;
@@ -655,19 +727,6 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
plugin_version += LLQtWebKit::getInstance()->getVersion();
message.setValue("plugin_version", plugin_version);
sendMessage(message);
-
- // Plugin gets to decide the texture parameters to use.
- mDepth = 4;
-
- message.setMessage(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
- message.setValueS32("default_width", 1024);
- message.setValueS32("default_height", 1024);
- message.setValueS32("depth", mDepth);
- message.setValueU32("internalformat", GL_RGBA);
- message.setValueU32("format", GL_RGBA);
- message.setValueU32("type", GL_UNSIGNED_BYTE);
- message.setValueBoolean("coords_opengl", true);
- sendMessage(message);
}
else if(message_name == "idle")
{
@@ -732,9 +791,68 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
// std::cerr << "MediaPluginWebKit::receiveMessage: unknown base message: " << message_name << std::endl;
}
}
+ else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
+ {
+ if(message_name == "set_volume")
+ {
+ F32 volume = message_in.getValueReal("volume");
+ setVolume(volume);
+ }
+ }
else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
{
- if(message_name == "size_change")
+ if(message_name == "init")
+ {
+ // This is the media init message -- all necessary data for initialization should have been received.
+ if(initBrowser())
+ {
+
+ // Plugin gets to decide the texture parameters to use.
+ mDepth = 4;
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
+ message.setValueS32("default_width", 1024);
+ message.setValueS32("default_height", 1024);
+ message.setValueS32("depth", mDepth);
+ message.setValueU32("internalformat", GL_RGBA);
+ #if LL_QTWEBKIT_USES_PIXMAPS
+ message.setValueU32("format", GL_BGRA_EXT); // I hope this isn't system-dependant... is it? If so, we'll have to check the root window's pixel layout or something... yuck.
+ #else
+ message.setValueU32("format", GL_RGBA);
+ #endif // LL_QTWEBKIT_USES_PIXMAPS
+ message.setValueU32("type", GL_UNSIGNED_BYTE);
+ message.setValueBoolean("coords_opengl", true);
+ sendMessage(message);
+ }
+ else
+ {
+ // if initialization failed, we're done.
+ mDeleteMe = true;
+ }
+
+ }
+ else if(message_name == "set_user_data_path")
+ {
+ std::string user_data_path = message_in.getValue("path"); // n.b. always has trailing platform-specific dir-delimiter
+ mProfileDir = user_data_path + "browser_profile";
+
+ // FIXME: Should we do anything with this if it comes in after the browser has been initialized?
+ }
+ else if(message_name == "set_language_code")
+ {
+ mHostLanguage = message_in.getValue("language");
+
+ // FIXME: Should we do anything with this if it comes in after the browser has been initialized?
+ }
+ else if(message_name == "plugins_enabled")
+ {
+ mPluginsEnabled = message_in.getValueBoolean("enable");
+ }
+ else if(message_name == "javascript_enabled")
+ {
+ mJavascriptEnabled = message_in.getValueBoolean("enable");
+ }
+ else if(message_name == "size_change")
{
std::string name = message_in.getValue("name");
S32 width = message_in.getValueS32("width");
@@ -756,29 +874,36 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
mWidth = width;
mHeight = height;
- // initialize (only gets called once)
- initBrowser();
-
- // size changed so tell the browser
- LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
-
-// std::cerr << "webkit plugin: set size to " << mWidth << " x " << mHeight
-// << ", rowspan is " << LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) << std::endl;
-
- S32 real_width = LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) / LLQtWebKit::getInstance()->getBrowserDepth(mBrowserWindowId);
-
- // The actual width the browser will be drawing to is probably smaller... let the host know by modifying texture_width in the response.
- if(real_width <= texture_width)
+ if(initBrowserWindow())
{
- texture_width = real_width;
+
+ // size changed so tell the browser
+ LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
+
+ // std::cerr << "webkit plugin: set size to " << mWidth << " x " << mHeight
+ // << ", rowspan is " << LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) << std::endl;
+
+ S32 real_width = LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) / LLQtWebKit::getInstance()->getBrowserDepth(mBrowserWindowId);
+
+ // The actual width the browser will be drawing to is probably smaller... let the host know by modifying texture_width in the response.
+ if(real_width <= texture_width)
+ {
+ texture_width = real_width;
+ }
+ else
+ {
+ // This won't work -- it'll be bigger than the allocated memory. This is a fatal error.
+ // std::cerr << "Fatal error: browser rowbytes greater than texture width" << std::endl;
+ mDeleteMe = true;
+ return;
+ }
}
else
{
- // This won't work -- it'll be bigger than the allocated memory. This is a fatal error.
-// std::cerr << "Fatal error: browser rowbytes greater than texture width" << std::endl;
+ // Setting up the browser window failed. This is a fatal error.
mDeleteMe = true;
- return;
}
+
mTextureWidth = texture_width;
mTextureHeight = texture_height;
@@ -928,8 +1053,22 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
}
else if(message_name == "enable_cookies")
{
- bool val = message_in.getValueBoolean("enable");
- LLQtWebKit::getInstance()->enableCookies( val );
+ mCookiesEnabled = message_in.getValueBoolean("enable");
+ LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled );
+ }
+ else if(message_name == "enable_plugins")
+ {
+ mPluginsEnabled = message_in.getValueBoolean("enable");
+ LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled );
+ }
+ else if(message_name == "enable_javascript")
+ {
+ mJavascriptEnabled = message_in.getValueBoolean("enable");
+ //LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
+ }
+ else if(message_name == "set_cookies")
+ {
+ LLQtWebKit::getInstance()->setCookies(message_in.getValue("cookies"));
}
else if(message_name == "proxy_setup")
{
@@ -966,8 +1105,8 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
}
else if(message_name == "set_user_agent")
{
- std::string user_agent = message_in.getValue("user_agent");
- LLQtWebKit::getInstance()->setBrowserAgentId( user_agent );
+ mUserAgent = message_in.getValue("user_agent");
+ LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
}
else if(message_name == "init_history")
{
@@ -998,6 +1137,13 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
}
}
+void MediaPluginWebKit::setVolume(F32 volume)
+{
+#if LL_LINUX
+ mLinuxVolumeCatcher.setVolume(volume);
+#endif // LL_LINUX
+}
+
int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data)
{
MediaPluginWebKit *self = new MediaPluginWebKit(host_send_func, host_user_data);
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 14eb75e457..47fde08a9d 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -66,6 +66,7 @@ include_directories(
set(viewer_SOURCE_FILES
llagent.cpp
llagentaccess.cpp
+ llagentcamera.cpp
llagentdata.cpp
llagentlanguage.cpp
llagentlistener.cpp
@@ -73,6 +74,7 @@ set(viewer_SOURCE_FILES
llagentpilot.cpp
llagentui.cpp
llagentwearables.cpp
+ llagentwearablesfetch.cpp
llanimstatelabels.cpp
llappearancemgr.cpp
llappviewer.cpp
@@ -252,6 +254,7 @@ set(viewer_SOURCE_FILES
llinventoryfilter.cpp
llinventoryfunctions.cpp
llinventorymodel.cpp
+ llinventorymodelbackgroundfetch.cpp
llinventoryobserver.cpp
llinventorypanel.cpp
lljoystickbutton.cpp
@@ -316,7 +319,6 @@ set(viewer_SOURCE_FILES
llpanellandmedia.cpp
llpanellogin.cpp
llpanelloginlistener.cpp
- llpanellookinfo.cpp
llpanelmaininventory.cpp
llpanelmediasettingsgeneral.cpp
llpanelmediasettingspermissions.cpp
@@ -325,6 +327,7 @@ set(viewer_SOURCE_FILES
llpanelnearbymedia.cpp
llpanelobject.cpp
llpanelobjectinventory.cpp
+ llpaneloutfitedit.cpp
llpaneloutfitsinventory.cpp
llpanelpeople.cpp
llpanelpeoplemenus.cpp
@@ -347,6 +350,7 @@ set(viewer_SOURCE_FILES
llpatchvertexarray.cpp
llplacesinventorybridge.cpp
llplacesinventorypanel.cpp
+ llpopupview.cpp
llpolymesh.cpp
llpolymorph.cpp
llpreview.cpp
@@ -563,6 +567,7 @@ set(viewer_HEADER_FILES
ViewerInstall.cmake
llagent.h
llagentaccess.h
+ llagentcamera.h
llagentdata.h
llagentlanguage.h
llagentlistener.h
@@ -570,6 +575,7 @@ set(viewer_HEADER_FILES
llagentpilot.h
llagentui.h
llagentwearables.h
+ llagentwearablesfetch.h
llanimstatelabels.h
llappearance.h
llappearancemgr.h
@@ -751,6 +757,7 @@ set(viewer_HEADER_FILES
llinventoryfilter.h
llinventoryfunctions.h
llinventorymodel.h
+ llinventorymodelbackgroundfetch.h
llinventoryobserver.h
llinventorypanel.h
lljoystickbutton.h
@@ -811,7 +818,6 @@ set(viewer_HEADER_FILES
llpanellandmedia.h
llpanellogin.h
llpanelloginlistener.h
- llpanellookinfo.h
llpanelmaininventory.h
llpanelmediasettingsgeneral.h
llpanelmediasettingspermissions.h
@@ -820,6 +826,7 @@ set(viewer_HEADER_FILES
llpanelnearbymedia.h
llpanelobject.h
llpanelobjectinventory.h
+ llpaneloutfitedit.h
llpaneloutfitsinventory.h
llpanelpeople.h
llpanelpeoplemenus.h
@@ -844,6 +851,7 @@ set(viewer_HEADER_FILES
llplacesinventorypanel.h
llpolymesh.h
llpolymorph.h
+ llpopupview.h
llpreview.h
llpreviewanim.h
llpreviewgesture.h
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index 879408d6e4..02c3dfc6e0 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -2,6 +2,6 @@
CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 2.0.0.200030";
-CFBundleGetInfoString = "Second Life version 2.0.0.200030, Copyright 2004-2009 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 2.0.0.203110";
+CFBundleGetInfoString = "Second Life version 2.0.0.203110, Copyright 2004-2009 Linden Research, Inc.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 38ebb22b84..4cb01a0f33 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
- <string>2.0.0.200030</string>
+ <string>2.0.0.203110</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 73c08c4867..8b66cce8a3 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1563,6 +1563,28 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>BrowserJavascriptEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable Javascript in the built-in Web browser?</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>BrowserPluginsEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable Web plugins in the built-in Web browser?</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>CreateToolCopyCenters</key>
<map>
<key>Comment</key>
@@ -2542,6 +2564,17 @@
<key>Value</key>
<real>0.10000000149</real>
</map>
+ <key>DragAndDropDistanceThreshold</key>
+ <map>
+ <key>Comment</key>
+ <string>Number of pixels that mouse should move before triggering drag and drop mode</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>3</integer>
+ </map>
<key>DropShadowButton</key>
<map>
<key>Comment</key>
@@ -3607,7 +3640,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>https://viewer-sidebar.secondlife.com/sidebar.html?p=[AUTH_TOKEN]&amp;lang=[LANGUAGE]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;firstlogin=[FIRST_LOGIN]</string>
+ <string>https://viewer-sidebar.secondlife.com/sidebar.html?p=[AUTH_TOKEN]&amp;lang=[LANGUAGE]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]&amp;firstlogin=[FIRST_LOGIN]</string>
</map>
<key>SearchURL</key>
<map>
@@ -3618,7 +3651,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://search.secondlife.com/viewer/[CATEGORY]?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]</string>
+ <string>http://search.secondlife.com/viewer/[CATEGORY]?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
</map>
<key>HighResSnapshot</key>
<map>
@@ -4334,7 +4367,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>home</string>
+ <string>last</string>
</map>
<key>LoginPage</key>
<map>
@@ -4587,7 +4620,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>1</integer>
+ <integer>0</integer>
</map>
<key>MediaShowOutsideParcel</key>
<map>
@@ -5492,7 +5525,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>1.0</real>
+ <real>0.9</real>
</map>
<key>PlainTextChatHistory</key>
@@ -7443,6 +7476,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>RenderUseTriStrips</key>
+ <map>
+ <key>Comment</key>
+ <string>Use triangle strips for rendering prims.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderUseFarClip</key>
<map>
<key>Comment</key>
@@ -8084,13 +8128,13 @@
<key>NearbyPeopleSortOrder</key>
<map>
<key>Comment</key>
- <string>Specifies sort order for nearby people (0 = by name, 2 = by most recent)</string>
+ <string>Specifies sort order for nearby people (0 = by name, 3 = by distance, 4 = by most recent)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
- <integer>2</integer>
+ <integer>4</integer>
</map>
<key>RecentPeopleSortOrder</key>
<map>
@@ -8620,17 +8664,6 @@
<key>Value</key>
<integer>1</integer>
</map>
- <key>SmallAvatarNames</key>
- <map>
- <key>Comment</key>
- <string>Display avatar name text in smaller font</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
<key>SnapEnabled</key>
<map>
<key>Comment</key>
@@ -10644,7 +10677,7 @@
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <integer>700</integer>
+ <integer>738</integer>
</map>
<key>WindowMaximized</key>
<map>
@@ -10666,7 +10699,7 @@
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <integer>1000</integer>
+ <integer>1024</integer>
</map>
<key>WindowX</key>
<map>
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif
new file mode 100644
index 0000000000..f366026c33
--- /dev/null
+++ b/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif
Binary files differ
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif
new file mode 100644
index 0000000000..e9e6a20cd9
--- /dev/null
+++ b/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif
Binary files differ
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif
new file mode 100644
index 0000000000..bea3d9d442
--- /dev/null
+++ b/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif
Binary files differ
diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt
index 887dab66d1..aa0e21ea8f 100644
--- a/indra/newview/gpu_table.txt
+++ b/indra/newview/gpu_table.txt
@@ -47,8 +47,10 @@ ATI ASUS EAH26xx .*ATI.*ASUS.*EAH26.* 3 1
ATI ASUS EAH34xx .*ATI.*ASUS.*EAH34.* 1 1
ATI ASUS EAH36xx .*ATI.*ASUS.*EAH36.* 3 1
ATI ASUS EAH38xx .*ATI.*ASUS.*EAH38.* 3 1
+ATI ASUS EAH45xx .*ATI.*ASUS.*EAH45.* 1 1
ATI ASUS EAH48xx .*ATI.*ASUS.*EAH48.* 3 1
-ATI Radeon X1xxx .*ATI.*ASUS.*X1.* 2 1
+ATI ASUS EAH57xx .*ATI.*ASUS.*EAH57.* 3 1
+ATI Radeon X1xxx .*ATI.*ASUS.*X1.* 3 1
ATI Radeon X7xx .*ATI.*ASUS.*X7.* 1 1
ATI Radeon X500 .*ATI.*Diamond X5.* 1 1
ATI Radeon X13xx .*ATI.*Diamond X13.* 1 1
@@ -95,10 +97,16 @@ ATI Radeon HD 3300 .*ATI.*Radeon HD.*33.* 1 1
ATI Radeon HD 3400 .*ATI.*Radeon HD.*34.* 1 1
ATI Radeon HD 3600 .*ATI.*Radeon HD.*36.* 3 1
ATI Radeon HD 3800 .*ATI.*Radeon HD.*38.* 3 1
+ATI Radeon HD 4200 .*ATI.*Radeon HD 42.* 1 1
ATI Radeon HD 4300 .*ATI.*Radeon HD 43.* 1 1
-ATI Radeon HD 4500 .*ATI.*Radeon HD 45.* 2 1
-ATI Radeon HD 4600 .*ATI.*Radeon HD 46.* 3 1
+ATI Radeon HD 4500 .*ATI.*Radeon HD 45.* 3 1
+ATI Radeon HD 4600 .*ATI.*Radeon HD.*46.* 3 1
+ATI Radeon HD 4700 .*ATI.*Radeon HD 47.* 3 1
ATI Radeon HD 4800 .*ATI.*Radeon.*HD.*48.* 3 1
+ATI Radeon HD 5600 .*ATI.*Radeon.*HD.*56.* 3 1
+ATI Radeon HD 5700 .*ATI.*Radeon.*HD.*57.* 3 1
+ATI Radeon HD 5800 .*ATI.*Radeon.*HD.*58.* 3 1
+ATI Radeon HD 5900 .*ATI.*Radeon.*HD.*59.* 3 1
ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0
ATI Radeon 2100 .*ATI.*Radeon 21.* 0 1
ATI Radeon 3100 .*ATI.*Radeon 31.* 1 1
@@ -152,13 +160,17 @@ Intel 945G .*Intel.*945G.* 0 1
Intel 950 .*Intel.*950.* 0 1
Intel 965 .*Intel.*965.* 0 1
Intel G33 .*Intel.*G33.* 0 0
+Intel G41 .*Intel.*G41.* 0 1
Intel G45 .*Intel.*G45.* 0 1
Intel Bear Lake .*Intel.*Bear Lake.* 0 0
Intel Broadwater .*Intel.*Broadwater.* 0 0
Intel Brookdale .*Intel.*Brookdale.* 0 0
Intel Cantiga .*Intel.*Cantiga.* 0 0
Intel Eaglelake .*Intel.*Eaglelake.* 0 1
+Intel Mobile 4 Series .*Intel.*Mobile.*4 Series.* 0 1
+Intel Media Graphics HD .*Intel.*Media.*Graphics.*HD.* 0 1
Intel Montara .*Intel.*Montara.* 0 0
+Intel Pineview .*Intel.*Pineview.* 0 1
Intel Springdale .*Intel.*Springdale.* 0 0
Matrox .*Matrox.* 0 0
Mesa .*Mesa.* 0 0
diff --git a/indra/newview/installers/darwin/release-dmg/_DS_Store b/indra/newview/installers/darwin/release-dmg/_DS_Store
index 495ec37f53..8f6c25c2f4 100644
--- a/indra/newview/installers/darwin/release-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/release-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/installers/windows/install_icon.ico b/indra/newview/installers/windows/install_icon.ico
index 1e00530c90..efe6c4f323 100644
--- a/indra/newview/installers/windows/install_icon.ico
+++ b/indra/newview/installers/windows/install_icon.ico
Binary files differ
diff --git a/indra/newview/installers/windows/uninstall_icon.ico b/indra/newview/installers/windows/uninstall_icon.ico
index c4ec6c70bd..05e1546860 100644
--- a/indra/newview/installers/windows/uninstall_icon.ico
+++ b/indra/newview/installers/windows/uninstall_icon.ico
Binary files differ
diff --git a/indra/newview/linux_tools/client-readme.txt b/indra/newview/linux_tools/client-readme.txt
index 92d321d8c0..e01b9e4bc6 100644
--- a/indra/newview/linux_tools/client-readme.txt
+++ b/indra/newview/linux_tools/client-readme.txt
@@ -15,7 +15,7 @@ Life itself - please see <http://www.secondlife.com/whatis/>.
5.3. Blank window after minimizing it
5.4. Audio
5.5. 'Alt' key for camera controls doesn't work
- 5.6. In-world streaming movie/music playback
+ 5.6. In-world streaming movie, music and Flash playback
6. Advanced Troubleshooting
6.1. Audio
6.2. OpenGL
@@ -169,12 +169,15 @@ SOLUTION:- Some window managers eat the Alt key for their own purposes; you
example, the 'Windows' key!) which will allow the Alt key to function
properly with mouse actions in Second Life and other applications.
-PROBLEM 6:- In-world movie and/or music playback doesn't work for me.
+PROBLEM 6:- In-world movie, music, or Flash playback doesn't work for me.
SOLUTION:- You need to have a working installation of GStreamer 0.10; this
is usually an optional package for most versions of Linux. If you have
installed GStreamer 0.10 and you can play some music/movies but not others
then you need to install a wider selection of GStreamer plugins, either
- from your vendor or an appropriate third party.
+ from your vendor (i.e. the 'Ugly' plugins) or an appropriate third party.
+ For Flash playback, you need to have Flash 10 installed for your normal
+ web browser (for example, Firefox). PulseAudio is required for Flash
+ volume control / muting to fully function inside Second Life.
6. ADVANCED TROUBLESHOOTING
diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh
index f84102e1fb..d2df968544 100755
--- a/indra/newview/linux_tools/wrapper.sh
+++ b/indra/newview/linux_tools/wrapper.sh
@@ -41,16 +41,8 @@
## driver bug, try enabling this option and report whether it helps:
#export LL_ATI_MOUSE_CURSOR_BUG=x
-## - If you experience crashes with streaming video and music, you can
-## disable these by enabling this option:
-#export LL_DISABLE_GSTREAMER=x
-
-## - GStreamer is automatically disabled - for now - on 64-bit systems due
-## to common fatal incompatibilities; remove/comment these lines if you want
-## to try anyway.
if [ "`uname -m`" = "x86_64" ]; then
- export LL_DISABLE_GSTREAMER=x
- echo '64-bit Linux detected: Disabling GStreamer (streaming video and music) by default; edit ./secondlife to re-enable.'
+ echo '64-bit Linux detected.'
fi
## Everything below this line is just for advanced troubleshooters.
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 3675be16e9..ec465358fa 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -35,6 +35,7 @@
#include "pipeline.h"
+#include "llagentcamera.h"
#include "llagentlistener.h"
#include "llagentwearables.h"
#include "llagentui.h"
@@ -43,7 +44,6 @@
#include "llcallingcard.h"
#include "llchannelmanager.h"
#include "llconsole.h"
-//#include "llfirstuse.h"
#include "llfloatercamera.h"
#include "llfloatercustomize.h"
#include "llfloaterreg.h"
@@ -59,6 +59,7 @@
#include "llnearbychatbar.h"
#include "llnotificationsutil.h"
#include "llparcel.h"
+#include "llrendersphere.h"
#include "llsdutil.h"
#include "llsidetray.h"
#include "llsky.h"
@@ -88,77 +89,18 @@ const BOOL ANIMATE = TRUE;
const U8 AGENT_STATE_TYPING = 0x04;
const U8 AGENT_STATE_EDITING = 0x10;
-//drone wandering constants
-const F32 MAX_WANDER_TIME = 20.f; // seconds
-const F32 MAX_HEADING_HALF_ERROR = 0.2f; // radians
-const F32 WANDER_MAX_SLEW_RATE = 2.f * DEG_TO_RAD; // radians / frame
-const F32 WANDER_TARGET_MIN_DISTANCE = 10.f; // meters
-
// Autopilot constants
-const F32 AUTOPILOT_HEADING_HALF_ERROR = 10.f * DEG_TO_RAD; // radians
-const F32 AUTOPILOT_MAX_SLEW_RATE = 1.f * DEG_TO_RAD; // radians / frame
-const F32 AUTOPILOT_STOP_DISTANCE = 2.f; // meters
const F32 AUTOPILOT_HEIGHT_ADJUST_DISTANCE = 8.f; // meters
const F32 AUTOPILOT_MIN_TARGET_HEIGHT_OFF_GROUND = 1.f; // meters
const F32 AUTOPILOT_MAX_TIME_NO_PROGRESS = 1.5f; // seconds
-// face editing constants
-const LLVector3d FACE_EDIT_CAMERA_OFFSET(0.4f, -0.05f, 0.07f);
-const LLVector3d FACE_EDIT_TARGET_OFFSET(0.f, 0.f, 0.05f);
-
-// Mousewheel camera zoom
-const F32 MIN_ZOOM_FRACTION = 0.25f;
-const F32 INITIAL_ZOOM_FRACTION = 1.f;
-const F32 MAX_ZOOM_FRACTION = 8.f;
-const F32 METERS_PER_WHEEL_CLICK = 1.f;
-
-const F32 MAX_TIME_DELTA = 1.f;
-
-const F32 CAMERA_ZOOM_HALF_LIFE = 0.07f; // seconds
-const F32 FOV_ZOOM_HALF_LIFE = 0.07f; // seconds
-
-const F32 CAMERA_FOCUS_HALF_LIFE = 0.f;//0.02f;
-const F32 CAMERA_LAG_HALF_LIFE = 0.25f;
-const F32 MIN_CAMERA_LAG = 0.5f;
-const F32 MAX_CAMERA_LAG = 5.f;
-
-const F32 CAMERA_COLLIDE_EPSILON = 0.1f;
-const F32 MIN_CAMERA_DISTANCE = 0.1f;
-const F32 AVATAR_ZOOM_MIN_X_FACTOR = 0.55f;
-const F32 AVATAR_ZOOM_MIN_Y_FACTOR = 0.7f;
-const F32 AVATAR_ZOOM_MIN_Z_FACTOR = 1.15f;
-
-const F32 MAX_CAMERA_DISTANCE_FROM_AGENT = 50.f;
-
-const F32 MAX_CAMERA_SMOOTH_DISTANCE = 50.0f;
-
-const F32 HEAD_BUFFER_SIZE = 0.3f;
-const F32 CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP = 0.2f;
-
-const F32 LAND_MIN_ZOOM = 0.15f;
-const F32 AVATAR_MIN_ZOOM = 0.5f;
-const F32 OBJECT_MIN_ZOOM = 0.02f;
-
-const F32 APPEARANCE_MIN_ZOOM = 0.39f;
-const F32 APPEARANCE_MAX_ZOOM = 8.f;
+const F32 MAX_VELOCITY_AUTO_LAND_SQUARED = 4.f * 4.f;
+const F64 CHAT_AGE_FAST_RATE = 3.0;
// fidget constants
const F32 MIN_FIDGET_TIME = 8.f; // seconds
const F32 MAX_FIDGET_TIME = 20.f; // seconds
-const S32 MAX_NUM_CHAT_POSITIONS = 10;
-const F32 GROUND_TO_AIR_CAMERA_TRANSITION_TIME = 0.5f;
-const F32 GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME = 0.5f;
-
-const F32 MAX_VELOCITY_AUTO_LAND_SQUARED = 4.f * 4.f;
-
-const F32 MAX_FOCUS_OFFSET = 20.f;
-
-const F32 OBJECT_EXTENTS_PADDING = 0.5f;
-
-const F32 MIN_RADIUS_ALPHA_SIZZLE = 0.5f;
-
-const F64 CHAT_AGE_FAST_RATE = 3.0;
// The agent instance.
LLAgent gAgent;
@@ -193,11 +135,11 @@ bool handleSlowMotionAnimation(const LLSD& newvalue)
{
if (newvalue.asBoolean())
{
- gAgent.getAvatarObject()->setAnimTimeFactor(0.2f);
+ gAgentAvatarp->setAnimTimeFactor(0.2f);
}
else
{
- gAgent.getAvatarObject()->setAnimTimeFactor(1.0f);
+ gAgentAvatarp->setAnimTimeFactor(1.0f);
}
return true;
}
@@ -218,20 +160,12 @@ bool handleSlowMotionAnimation(const LLSD& newvalue)
// LLAgent()
//-----------------------------------------------------------------------------
LLAgent::LLAgent() :
- mDrawDistance( DEFAULT_FAR_PLANE ),
-
mGroupPowers(0),
mHideGroupTitle(FALSE),
mGroupID(),
- mLookAt(NULL),
- mPointAt(NULL),
-
- mHUDTargetZoom(1.f),
- mHUDCurZoom(1.f),
mInitialized(FALSE),
mListener(),
- mForceMouselook(FALSE),
mDoubleTapRunTimer(),
mDoubleTapRunMode(DOUBLETAP_NONE),
@@ -249,78 +183,17 @@ LLAgent::LLAgent() :
mDistanceTraveled(0.F),
mLastPositionGlobal(LLVector3d::zero),
- mAvatarObject(NULL),
-
mRenderState(0),
mTypingTimer(),
- mCameraMode( CAMERA_MODE_THIRD_PERSON ),
- mLastCameraMode( CAMERA_MODE_THIRD_PERSON ),
mViewsPushed(FALSE),
- mCameraPreset(CAMERA_PRESET_REAR_VIEW),
-
mCustomAnim(FALSE),
mShowAvatar(TRUE),
- mCameraAnimating( FALSE ),
- mAnimationCameraStartGlobal(),
- mAnimationFocusStartGlobal(),
- mAnimationTimer(),
- mAnimationDuration(0.33f),
-
- mCameraFOVZoomFactor(0.f),
- mCameraCurrentFOVZoomFactor(0.f),
- mCameraFocusOffset(),
- mCameraFOVDefault(DEFAULT_FIELD_OF_VIEW),
-
- mCameraCollidePlane(),
-
- mCurrentCameraDistance(2.f), // meters, set in init()
- mTargetCameraDistance(2.f),
- mCameraZoomFraction(1.f), // deprecated
- mThirdPersonHeadOffset(0.f, 0.f, 1.f),
- mSitCameraEnabled(FALSE),
- mCameraSmoothingLastPositionGlobal(),
- mCameraSmoothingLastPositionAgent(),
- mCameraSmoothingStop(FALSE),
-
- mCameraUpVector(LLVector3::z_axis), // default is straight up
-
- mFocusOnAvatar(TRUE),
- mFocusGlobal(),
- mFocusTargetGlobal(),
- mFocusObject(NULL),
- mFocusObjectDist(0.f),
- mFocusObjectOffset(),
- mFocusDotRadius( 0.1f ), // meters
- mTrackFocusObject(TRUE),
- mUIOffset(0.f),
-
mFrameAgent(),
mIsBusy(FALSE),
- mAtKey(0), // Either 1, 0, or -1... indicates that movement-key is pressed
- mWalkKey(0), // like AtKey, but causes less forward thrust
- mLeftKey(0),
- mUpKey(0),
- mYawKey(0.f),
- mPitchKey(0.f),
-
- mOrbitLeftKey(0.f),
- mOrbitRightKey(0.f),
- mOrbitUpKey(0.f),
- mOrbitDownKey(0.f),
- mOrbitInKey(0.f),
- mOrbitOutKey(0.f),
-
- mPanUpKey(0.f),
- mPanDownKey(0.f),
- mPanLeftKey(0.f),
- mPanRightKey(0.f),
- mPanInKey(0.f),
- mPanOutKey(0.f),
-
mControlFlags(0x00000000),
mbFlagsDirty(FALSE),
mbFlagsNeedReset(FALSE),
@@ -358,7 +231,6 @@ LLAgent::LLAgent() :
mControlsTakenPassedOnCount[i] = 0;
}
- mFollowCam.setMaxCameraDistantFromSubject( MAX_CAMERA_DISTANCE_FROM_AGENT );
mListener.reset(new LLAgentListener(*this));
}
@@ -372,37 +244,10 @@ void LLAgent::init()
gSavedSettings.declareBOOL("SlowMotionAnimation", FALSE, "Declared in code", FALSE);
gSavedSettings.getControl("SlowMotionAnimation")->getSignal()->connect(boost::bind(&handleSlowMotionAnimation, _2));
- mDrawDistance = gSavedSettings.getF32("RenderFarClip");
-
// *Note: this is where LLViewerCamera::getInstance() used to be constructed.
- LLViewerCamera::getInstance()->setView(DEFAULT_FIELD_OF_VIEW);
- // Leave at 0.1 meters until we have real near clip management
- LLViewerCamera::getInstance()->setNear(0.1f);
- LLViewerCamera::getInstance()->setFar(mDrawDistance); // if you want to change camera settings, do so in camera.h
- LLViewerCamera::getInstance()->setAspect( gViewerWindow->getWorldViewAspectRatio() ); // default, overridden in LLViewerWindow::reshape
- LLViewerCamera::getInstance()->setViewHeightInPixels(768); // default, overridden in LLViewerWindow::reshape
-
setFlying( gSavedSettings.getBOOL("FlyingAtExit") );
- mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild"));
-
- mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
-
- mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getVector3("CameraOffsetRearView");
- mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getVector3("CameraOffsetFrontView");
- mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getVector3("CameraOffsetGroupView");
-
- mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getVector3d("FocusOffsetRearView");
- mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getVector3d("FocusOffsetFrontView");
- mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getVector3d("FocusOffsetGroupView");
-
- mCameraCollidePlane.clearVec();
- mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale");
- mTargetCameraDistance = mCurrentCameraDistance;
- mCameraZoomFraction = 1.f;
- mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject");
-
mEffectColor = LLUIColorTable::instance().getColor("EffectColor");
gSavedSettings.getControl("PreferredMaturity")->getValidateSignal()->connect(boost::bind(&LLAgent::validateMaturity, this, _2));
@@ -416,22 +261,7 @@ void LLAgent::init()
//-----------------------------------------------------------------------------
void LLAgent::cleanup()
{
- setSitCamera(LLUUID::null);
-
- mAvatarObject = NULL;
-
- if(mLookAt)
- {
- mLookAt->markDead() ;
- mLookAt = NULL;
- }
- if(mPointAt)
- {
- mPointAt->markDead() ;
- mPointAt = NULL;
- }
mRegionp = NULL;
- setFocusObject(NULL);
}
//-----------------------------------------------------------------------------
@@ -444,83 +274,6 @@ LLAgent::~LLAgent()
// *Note: this is where LLViewerCamera::getInstance() used to be deleted.
}
-// Change camera back to third person, stop the autopilot,
-// deselect stuff, etc.
-//-----------------------------------------------------------------------------
-// resetView()
-//-----------------------------------------------------------------------------
-void LLAgent::resetView(BOOL reset_camera, BOOL change_camera)
-{
- if (mAutoPilot)
- {
- stopAutoPilot(TRUE);
- }
-
- if (!gNoRender)
- {
- LLSelectMgr::getInstance()->unhighlightAll();
-
- // By popular request, keep land selection while walking around. JC
- // LLViewerParcelMgr::getInstance()->deselectLand();
-
- // force deselect when walking and attachment is selected
- // this is so people don't wig out when their avatar moves without animating
- if (LLSelectMgr::getInstance()->getSelection()->isAttachment())
- {
- LLSelectMgr::getInstance()->deselectAll();
- }
-
- // Hide all popup menus
- gMenuHolder->hideMenus();
- }
-
- if (change_camera && !gSavedSettings.getBOOL("FreezeTime"))
- {
- changeCameraToDefault();
-
- if (LLViewerJoystick::getInstance()->getOverrideCamera())
- {
- handle_toggle_flycam();
- }
-
- // reset avatar mode from eventual residual motion
- if (LLToolMgr::getInstance()->inBuildMode())
- {
- LLViewerJoystick::getInstance()->moveAvatar(true);
- }
-
- //Camera Tool is needed for Free Camera Control Mode
- if (!LLFloaterCamera::inFreeCameraMode())
- {
- LLFloaterReg::hideInstance("build");
-
- // Switch back to basic toolset
- LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
- }
-
- gViewerWindow->showCursor();
- }
-
-
- if (reset_camera && !gSavedSettings.getBOOL("FreezeTime"))
- {
- if (!gViewerWindow->getLeftMouseDown() && cameraThirdPerson())
- {
- // leaving mouse-steer mode
- LLVector3 agent_at_axis = getAtAxis();
- agent_at_axis -= projected_vec(agent_at_axis, getReferenceUpVector());
- agent_at_axis.normalize();
- gAgent.resetAxes(lerp(getAtAxis(), agent_at_axis, LLCriticalDamp::getInterpolant(0.3f)));
- }
-
- setFocusOnAvatar(TRUE, ANIMATE);
-
- mCameraFOVZoomFactor = 0.f;
- }
-
- mHUDTargetZoom = 1.f;
-}
-
// Handle any actions that need to be performed when the main app gains focus
// (such as through alt-tab).
//-----------------------------------------------------------------------------
@@ -528,9 +281,9 @@ void LLAgent::resetView(BOOL reset_camera, BOOL change_camera)
//-----------------------------------------------------------------------------
void LLAgent::onAppFocusGained()
{
- if (CAMERA_MODE_MOUSELOOK == mCameraMode)
+ if (CAMERA_MODE_MOUSELOOK == gAgentCamera.getCameraMode())
{
- changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
LLToolMgr::getInstance()->clearSavedTool();
}
}
@@ -538,32 +291,15 @@ void LLAgent::onAppFocusGained()
void LLAgent::ageChat()
{
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
// get amount of time since I last chatted
- F64 elapsed_time = (F64)mAvatarObject->mChatTimer.getElapsedTimeF32();
+ F64 elapsed_time = (F64)gAgentAvatarp->mChatTimer.getElapsedTimeF32();
// add in frame time * 3 (so it ages 4x)
- mAvatarObject->mChatTimer.setAge(elapsed_time + (F64)gFrameDTClamped * (CHAT_AGE_FAST_RATE - 1.0));
+ gAgentAvatarp->mChatTimer.setAge(elapsed_time + (F64)gFrameDTClamped * (CHAT_AGE_FAST_RATE - 1.0));
}
}
-// Allow camera to be moved somewhere other than behind avatar.
-//-----------------------------------------------------------------------------
-// unlockView()
-//-----------------------------------------------------------------------------
-void LLAgent::unlockView()
-{
- if (getFocusOnAvatar())
- {
- if (mAvatarObject.notNull())
- {
- setFocusGlobal( LLVector3d::zero, mAvatarObject->mID );
- }
- setFocusOnAvatar(FALSE, FALSE); // no animation
- }
-}
-
-
//-----------------------------------------------------------------------------
// moveAt()
//-----------------------------------------------------------------------------
@@ -572,7 +308,7 @@ void LLAgent::moveAt(S32 direction, bool reset)
// age chat timer so it fades more quickly when you are intentionally moving
ageChat();
- setKey(direction, mAtKey);
+ gAgentCamera.setAtKey(LLAgentCamera::directionToKey(direction));
if (direction > 0)
{
@@ -585,7 +321,7 @@ void LLAgent::moveAt(S32 direction, bool reset)
if (reset)
{
- resetView();
+ gAgentCamera.resetView();
}
}
@@ -597,7 +333,7 @@ void LLAgent::moveAtNudge(S32 direction)
// age chat timer so it fades more quickly when you are intentionally moving
ageChat();
- setKey(direction, mWalkKey);
+ gAgentCamera.setWalkKey(LLAgentCamera::directionToKey(direction));
if (direction > 0)
{
@@ -608,7 +344,7 @@ void LLAgent::moveAtNudge(S32 direction)
setControlFlags(AGENT_CONTROL_NUDGE_AT_NEG);
}
- resetView();
+ gAgentCamera.resetView();
}
//-----------------------------------------------------------------------------
@@ -619,7 +355,7 @@ void LLAgent::moveLeft(S32 direction)
// age chat timer so it fades more quickly when you are intentionally moving
ageChat();
- setKey(direction, mLeftKey);
+ gAgentCamera.setLeftKey(LLAgentCamera::directionToKey(direction));
if (direction > 0)
{
@@ -630,7 +366,7 @@ void LLAgent::moveLeft(S32 direction)
setControlFlags(AGENT_CONTROL_LEFT_NEG | AGENT_CONTROL_FAST_LEFT);
}
- resetView();
+ gAgentCamera.resetView();
}
//-----------------------------------------------------------------------------
@@ -641,7 +377,7 @@ void LLAgent::moveLeftNudge(S32 direction)
// age chat timer so it fades more quickly when you are intentionally moving
ageChat();
- setKey(direction, mLeftKey);
+ gAgentCamera.setLeftKey(LLAgentCamera::directionToKey(direction));
if (direction > 0)
{
@@ -652,7 +388,7 @@ void LLAgent::moveLeftNudge(S32 direction)
setControlFlags(AGENT_CONTROL_NUDGE_LEFT_NEG);
}
- resetView();
+ gAgentCamera.resetView();
}
//-----------------------------------------------------------------------------
@@ -663,7 +399,7 @@ void LLAgent::moveUp(S32 direction)
// age chat timer so it fades more quickly when you are intentionally moving
ageChat();
- setKey(direction, mUpKey);
+ gAgentCamera.setUpKey(LLAgentCamera::directionToKey(direction));
if (direction > 0)
{
@@ -674,7 +410,7 @@ void LLAgent::moveUp(S32 direction)
setControlFlags(AGENT_CONTROL_UP_NEG | AGENT_CONTROL_FAST_UP);
}
- resetView();
+ gAgentCamera.resetView();
}
//-----------------------------------------------------------------------------
@@ -682,7 +418,7 @@ void LLAgent::moveUp(S32 direction)
//-----------------------------------------------------------------------------
void LLAgent::moveYaw(F32 mag, bool reset_view)
{
- mYawKey = mag;
+ gAgentCamera.setYawKey(mag);
if (mag > 0)
{
@@ -695,7 +431,7 @@ void LLAgent::moveYaw(F32 mag, bool reset_view)
if (reset_view)
{
- resetView();
+ gAgentCamera.resetView();
}
}
@@ -704,7 +440,7 @@ void LLAgent::moveYaw(F32 mag, bool reset_view)
//-----------------------------------------------------------------------------
void LLAgent::movePitch(F32 mag)
{
- mPitchKey = mag;
+ gAgentCamera.setPitchKey(mag);
if (mag > 0)
{
@@ -747,20 +483,20 @@ BOOL LLAgent::getFlying() const
//-----------------------------------------------------------------------------
void LLAgent::setFlying(BOOL fly)
{
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
// *HACK: Don't allow to start the flying mode if we got ANIM_AGENT_STANDUP signal
// because in this case we won't get a signal to start avatar flying animation and
// it will be walking with flying mode "ON" indication. However we allow to switch
// the flying mode off if we get ANIM_AGENT_STANDUP signal. See process_avatar_animation().
// See EXT-2781.
- if(fly && mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_STANDUP) != mAvatarObject->mSignaledAnimations.end())
+ if(fly && gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_STANDUP) != gAgentAvatarp->mSignaledAnimations.end())
{
return;
}
// don't allow taking off while sitting
- if (fly && mAvatarObject->isSitting())
+ if (fly && gAgentAvatarp->isSitting())
{
return;
}
@@ -806,16 +542,16 @@ void LLAgent::toggleFlying()
BOOL fly = !gAgent.getFlying();
gAgent.setFlying( fly );
- gAgent.resetView();
+ gAgentCamera.resetView();
}
// static
bool LLAgent::enableFlying()
{
BOOL sitting = FALSE;
- if (gAgent.getAvatarObject())
+ if (isAgentAvatarValid())
{
- sitting = gAgent.getAvatarObject()->isSitting();
+ sitting = gAgentAvatarp->isSitting();
}
return !sitting;
}
@@ -985,9 +721,9 @@ void LLAgent::sendReliableMessage()
//-----------------------------------------------------------------------------
LLVector3 LLAgent::getVelocity() const
{
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
- return mAvatarObject->getVelocity();
+ return gAgentAvatarp->getVelocity();
}
else
{
@@ -1006,13 +742,13 @@ void LLAgent::setPositionAgent(const LLVector3 &pos_agent)
llerrs << "setPositionAgent is not a number" << llendl;
}
- if (mAvatarObject.notNull() && mAvatarObject->getParent())
+ if (isAgentAvatarValid() && gAgentAvatarp->getParent())
{
LLVector3 pos_agent_sitting;
LLVector3d pos_agent_d;
- LLViewerObject *parent = (LLViewerObject*)mAvatarObject->getParent();
+ LLViewerObject *parent = (LLViewerObject*)gAgentAvatarp->getParent();
- pos_agent_sitting = mAvatarObject->getPosition() * parent->getRotation() + parent->getPositionAgent();
+ pos_agent_sitting = gAgentAvatarp->getPosition() * parent->getRotation() + parent->getPositionAgent();
pos_agent_d.setVec(pos_agent_sitting);
mFrameAgent.setOrigin(pos_agent_sitting);
@@ -1029,24 +765,13 @@ void LLAgent::setPositionAgent(const LLVector3 &pos_agent)
}
//-----------------------------------------------------------------------------
-// slamLookAt()
-//-----------------------------------------------------------------------------
-void LLAgent::slamLookAt(const LLVector3 &look_at)
-{
- LLVector3 look_at_norm = look_at;
- look_at_norm.mV[VZ] = 0.f;
- look_at_norm.normalize();
- resetAxes(look_at_norm);
-}
-
-//-----------------------------------------------------------------------------
// getPositionGlobal()
//-----------------------------------------------------------------------------
const LLVector3d &LLAgent::getPositionGlobal() const
{
- if (mAvatarObject.notNull() && !mAvatarObject->mDrawable.isNull())
+ if (isAgentAvatarValid() && !gAgentAvatarp->mDrawable.isNull())
{
- mPositionGlobal = getPosGlobalFromAgent(mAvatarObject->getRenderPosition());
+ mPositionGlobal = getPosGlobalFromAgent(gAgentAvatarp->getRenderPosition());
}
else
{
@@ -1061,9 +786,9 @@ const LLVector3d &LLAgent::getPositionGlobal() const
//-----------------------------------------------------------------------------
const LLVector3 &LLAgent::getPositionAgent()
{
- if(mAvatarObject.notNull() && !mAvatarObject->mDrawable.isNull())
+ if (isAgentAvatarValid() && !gAgentAvatarp->mDrawable.isNull())
{
- mFrameAgent.setOrigin(mAvatarObject->getRenderPosition());
+ mFrameAgent.setOrigin(gAgentAvatarp->getRenderPosition());
}
return mFrameAgent.getOrigin();
@@ -1189,21 +914,21 @@ LLVector3 LLAgent::getReferenceUpVector()
{
// this vector is in the coordinate frame of the avatar's parent object, or the world if none
LLVector3 up_vector = LLVector3::z_axis;
- if (mAvatarObject.notNull() &&
- mAvatarObject->getParent() &&
- mAvatarObject->mDrawable.notNull())
+ if (isAgentAvatarValid() &&
+ gAgentAvatarp->getParent() &&
+ gAgentAvatarp->mDrawable.notNull())
{
- U32 camera_mode = mCameraAnimating ? mLastCameraMode : mCameraMode;
+ U32 camera_mode = gAgentCamera.getCameraAnimating() ? gAgentCamera.getLastCameraMode() : gAgentCamera.getCameraMode();
// and in third person...
if (camera_mode == CAMERA_MODE_THIRD_PERSON)
{
// make the up vector point to the absolute +z axis
- up_vector = up_vector * ~((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();
+ up_vector = up_vector * ~((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
}
else if (camera_mode == CAMERA_MODE_MOUSELOOK)
{
// make the up vector point to the avatar's +z axis
- up_vector = up_vector * mAvatarObject->mDrawable->getRotation();
+ up_vector = up_vector * gAgentAvatarp->mDrawable->getRotation();
}
}
@@ -1239,7 +964,7 @@ F32 LLAgent::clampPitchToLimits(F32 angle)
F32 angle_from_skyward = acos( mFrameAgent.getAtAxis() * skyward );
- if (mAvatarObject.notNull() && mAvatarObject->isSitting())
+ if (isAgentAvatarValid() && gAgentAvatarp->isSitting())
{
look_down_limit = 130.f * DEG_TO_RAD;
}
@@ -1292,736 +1017,11 @@ LLQuaternion LLAgent::getQuat() const
return mFrameAgent.getQuaternion();
}
-
-//-----------------------------------------------------------------------------
-// calcFocusOffset()
-//-----------------------------------------------------------------------------
-LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, LLVector3 original_focus_point, S32 x, S32 y)
-{
- LLMatrix4 obj_matrix = object->getRenderMatrix();
- LLQuaternion obj_rot = object->getRenderRotation();
- LLVector3 obj_pos = object->getRenderPosition();
-
- BOOL is_avatar = object->isAvatar();
- // if is avatar - don't do any funk heuristics to position the focal point
- // see DEV-30589
- if (is_avatar)
- {
- return original_focus_point - obj_pos;
- }
-
-
- LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation
- LLVector3 object_extents = object->getScale();
- // make sure they object extents are non-zero
- object_extents.clamp(0.001f, F32_MAX);
-
- // obj_to_cam_ray is unit vector pointing from object center to camera, in the coordinate frame of the object
- LLVector3 obj_to_cam_ray = obj_pos - LLViewerCamera::getInstance()->getOrigin();
- obj_to_cam_ray.rotVec(inv_obj_rot);
- obj_to_cam_ray.normalize();
-
- // obj_to_cam_ray_proportions are the (positive) ratios of
- // the obj_to_cam_ray x,y,z components with the x,y,z object dimensions.
- LLVector3 obj_to_cam_ray_proportions;
- obj_to_cam_ray_proportions.mV[VX] = llabs(obj_to_cam_ray.mV[VX] / object_extents.mV[VX]);
- obj_to_cam_ray_proportions.mV[VY] = llabs(obj_to_cam_ray.mV[VY] / object_extents.mV[VY]);
- obj_to_cam_ray_proportions.mV[VZ] = llabs(obj_to_cam_ray.mV[VZ] / object_extents.mV[VZ]);
-
- // find the largest ratio stored in obj_to_cam_ray_proportions
- // this corresponds to the object's local axial plane (XY, YZ, XZ) that is *most* facing the camera
- LLVector3 longest_object_axis;
- // is x-axis longest?
- if (obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VY]
- && obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VZ])
- {
- // then grab it
- longest_object_axis.setVec(obj_matrix.getFwdRow4());
- }
- // is y-axis longest?
- else if (obj_to_cam_ray_proportions.mV[VY] > obj_to_cam_ray_proportions.mV[VZ])
- {
- // then grab it
- longest_object_axis.setVec(obj_matrix.getLeftRow4());
- }
- // otherwise, use z axis
- else
- {
- longest_object_axis.setVec(obj_matrix.getUpRow4());
- }
-
- // Use this axis as the normal to project mouse click on to plane with that normal, at the object center.
- // This generates a point behind the mouse cursor that is approximately in the middle of the object in
- // terms of depth.
- // We do this to allow the camera rotation tool to "tumble" the object by rotating the camera.
- // If the focus point were the object surface under the mouse, camera rotation would introduce an undesirable
- // eccentricity to the object orientation
- LLVector3 focus_plane_normal(longest_object_axis);
- focus_plane_normal.normalize();
-
- LLVector3d focus_pt_global;
- gViewerWindow->mousePointOnPlaneGlobal(focus_pt_global, x, y, gAgent.getPosGlobalFromAgent(obj_pos), focus_plane_normal);
- LLVector3 focus_pt = gAgent.getPosAgentFromGlobal(focus_pt_global);
-
- // find vector from camera to focus point in object space
- LLVector3 camera_to_focus_vec = focus_pt - LLViewerCamera::getInstance()->getOrigin();
- camera_to_focus_vec.rotVec(inv_obj_rot);
-
- // find vector from object origin to focus point in object coordinates
- LLVector3 focus_offset_from_object_center = focus_pt - obj_pos;
- // convert to object-local space
- focus_offset_from_object_center.rotVec(inv_obj_rot);
-
- // We need to project the focus point back into the bounding box of the focused object.
- // Do this by calculating the XYZ scale factors needed to get focus offset back in bounds along the camera_focus axis
- LLVector3 clip_fraction;
-
- // for each axis...
- for (U32 axis = VX; axis <= VZ; axis++)
- {
- //...calculate distance that focus offset sits outside of bounding box along that axis...
- //NOTE: dist_out_of_bounds keeps the sign of focus_offset_from_object_center
- F32 dist_out_of_bounds;
- if (focus_offset_from_object_center.mV[axis] > 0.f)
- {
- dist_out_of_bounds = llmax(0.f, focus_offset_from_object_center.mV[axis] - (object_extents.mV[axis] * 0.5f));
- }
- else
- {
- dist_out_of_bounds = llmin(0.f, focus_offset_from_object_center.mV[axis] + (object_extents.mV[axis] * 0.5f));
- }
-
- //...then calculate the scale factor needed to push camera_to_focus_vec back in bounds along current axis
- if (llabs(camera_to_focus_vec.mV[axis]) < 0.0001f)
- {
- // don't divide by very small number
- clip_fraction.mV[axis] = 0.f;
- }
- else
- {
- clip_fraction.mV[axis] = dist_out_of_bounds / camera_to_focus_vec.mV[axis];
- }
- }
-
- LLVector3 abs_clip_fraction = clip_fraction;
- abs_clip_fraction.abs();
-
- // find axis of focus offset that is *most* outside the bounding box and use that to
- // rescale focus offset to inside object extents
- if (abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VY]
- && abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VZ])
- {
- focus_offset_from_object_center -= clip_fraction.mV[VX] * camera_to_focus_vec;
- }
- else if (abs_clip_fraction.mV[VY] > abs_clip_fraction.mV[VZ])
- {
- focus_offset_from_object_center -= clip_fraction.mV[VY] * camera_to_focus_vec;
- }
- else
- {
- focus_offset_from_object_center -= clip_fraction.mV[VZ] * camera_to_focus_vec;
- }
-
- // convert back to world space
- focus_offset_from_object_center.rotVec(obj_rot);
-
- // now, based on distance of camera from object relative to object size
- // push the focus point towards the near surface of the object when (relatively) close to the objcet
- // or keep the focus point in the object middle when (relatively) far
- // NOTE: leave focus point in middle of avatars, since the behavior you want when alt-zooming on avatars
- // is almost always "tumble about middle" and not "spin around surface point"
- if (!is_avatar)
- {
- LLVector3 obj_rel = original_focus_point - object->getRenderPosition();
-
- //now that we have the object relative position, we should bias toward the center of the object
- //based on the distance of the camera to the focus point vs. the distance of the camera to the focus
-
- F32 relDist = llabs(obj_rel * LLViewerCamera::getInstance()->getAtAxis());
- F32 viewDist = dist_vec(obj_pos + obj_rel, LLViewerCamera::getInstance()->getOrigin());
-
-
- LLBBox obj_bbox = object->getBoundingBoxAgent();
- F32 bias = 0.f;
-
- // virtual_camera_pos is the camera position we are simulating by backing the camera off
- // and adjusting the FOV
- LLVector3 virtual_camera_pos = gAgent.getPosAgentFromGlobal(mFocusTargetGlobal + (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor));
-
- // if the camera is inside the object (large, hollow objects, for example)
- // leave focus point all the way to destination depth, away from object center
- if(!obj_bbox.containsPointAgent(virtual_camera_pos))
- {
- // perform magic number biasing of focus point towards surface vs. planar center
- bias = clamp_rescale(relDist/viewDist, 0.1f, 0.7f, 0.0f, 1.0f);
- obj_rel = lerp(focus_offset_from_object_center, obj_rel, bias);
- }
-
- focus_offset_from_object_center = obj_rel;
- }
-
- return focus_offset_from_object_center;
-}
-
-//-----------------------------------------------------------------------------
-// calcCameraMinDistance()
-//-----------------------------------------------------------------------------
-BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
-{
- BOOL soft_limit = FALSE; // is the bounding box to be treated literally (volumes) or as an approximation (avatars)
-
- if (!mFocusObject || mFocusObject->isDead())
- {
- obj_min_distance = 0.f;
- return TRUE;
- }
-
- if (mFocusObject->mDrawable.isNull())
- {
-#ifdef LL_RELEASE_FOR_DOWNLOAD
- llwarns << "Focus object with no drawable!" << llendl;
-#else
- mFocusObject->dump();
- llerrs << "Focus object with no drawable!" << llendl;
-#endif
- obj_min_distance = 0.f;
- return TRUE;
- }
-
- LLQuaternion inv_object_rot = ~mFocusObject->getRenderRotation();
- LLVector3 target_offset_origin = mFocusObjectOffset;
- LLVector3 camera_offset_target(getCameraPositionAgent() - getPosAgentFromGlobal(mFocusTargetGlobal));
-
- // convert offsets into object local space
- camera_offset_target.rotVec(inv_object_rot);
- target_offset_origin.rotVec(inv_object_rot);
-
- // push around object extents based on target offset
- LLVector3 object_extents = mFocusObject->getScale();
- if (mFocusObject->isAvatar())
- {
- // fudge factors that lets you zoom in on avatars a bit more (which don't do FOV zoom)
- object_extents.mV[VX] *= AVATAR_ZOOM_MIN_X_FACTOR;
- object_extents.mV[VY] *= AVATAR_ZOOM_MIN_Y_FACTOR;
- object_extents.mV[VZ] *= AVATAR_ZOOM_MIN_Z_FACTOR;
- soft_limit = TRUE;
- }
- LLVector3 abs_target_offset = target_offset_origin;
- abs_target_offset.abs();
-
- LLVector3 target_offset_dir = target_offset_origin;
- F32 object_radius = mFocusObject->getVObjRadius();
-
- BOOL target_outside_object_extents = FALSE;
-
- for (U32 i = VX; i <= VZ; i++)
- {
- if (abs_target_offset.mV[i] * 2.f > object_extents.mV[i] + OBJECT_EXTENTS_PADDING)
- {
- target_outside_object_extents = TRUE;
- }
- if (camera_offset_target.mV[i] > 0.f)
- {
- object_extents.mV[i] -= target_offset_origin.mV[i] * 2.f;
- }
- else
- {
- object_extents.mV[i] += target_offset_origin.mV[i] * 2.f;
- }
- }
-
- // don't shrink the object extents so far that the object inverts
- object_extents.clamp(0.001f, F32_MAX);
-
- // move into first octant
- LLVector3 camera_offset_target_abs_norm = camera_offset_target;
- camera_offset_target_abs_norm.abs();
- // make sure offset is non-zero
- camera_offset_target_abs_norm.clamp(0.001f, F32_MAX);
- camera_offset_target_abs_norm.normalize();
-
- // find camera position relative to normalized object extents
- LLVector3 camera_offset_target_scaled = camera_offset_target_abs_norm;
- camera_offset_target_scaled.mV[VX] /= object_extents.mV[VX];
- camera_offset_target_scaled.mV[VY] /= object_extents.mV[VY];
- camera_offset_target_scaled.mV[VZ] /= object_extents.mV[VZ];
-
- if (camera_offset_target_scaled.mV[VX] > camera_offset_target_scaled.mV[VY] &&
- camera_offset_target_scaled.mV[VX] > camera_offset_target_scaled.mV[VZ])
- {
- if (camera_offset_target_abs_norm.mV[VX] < 0.001f)
- {
- obj_min_distance = object_extents.mV[VX] * 0.5f;
- }
- else
- {
- obj_min_distance = object_extents.mV[VX] * 0.5f / camera_offset_target_abs_norm.mV[VX];
- }
- }
- else if (camera_offset_target_scaled.mV[VY] > camera_offset_target_scaled.mV[VZ])
- {
- if (camera_offset_target_abs_norm.mV[VY] < 0.001f)
- {
- obj_min_distance = object_extents.mV[VY] * 0.5f;
- }
- else
- {
- obj_min_distance = object_extents.mV[VY] * 0.5f / camera_offset_target_abs_norm.mV[VY];
- }
- }
- else
- {
- if (camera_offset_target_abs_norm.mV[VZ] < 0.001f)
- {
- obj_min_distance = object_extents.mV[VZ] * 0.5f;
- }
- else
- {
- obj_min_distance = object_extents.mV[VZ] * 0.5f / camera_offset_target_abs_norm.mV[VZ];
- }
- }
-
- LLVector3 object_split_axis;
- LLVector3 target_offset_scaled = target_offset_origin;
- target_offset_scaled.abs();
- target_offset_scaled.normalize();
- target_offset_scaled.mV[VX] /= object_extents.mV[VX];
- target_offset_scaled.mV[VY] /= object_extents.mV[VY];
- target_offset_scaled.mV[VZ] /= object_extents.mV[VZ];
-
- if (target_offset_scaled.mV[VX] > target_offset_scaled.mV[VY] &&
- target_offset_scaled.mV[VX] > target_offset_scaled.mV[VZ])
- {
- object_split_axis = LLVector3::x_axis;
- }
- else if (target_offset_scaled.mV[VY] > target_offset_scaled.mV[VZ])
- {
- object_split_axis = LLVector3::y_axis;
- }
- else
- {
- object_split_axis = LLVector3::z_axis;
- }
-
- LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent());
-
- // length projected orthogonal to target offset
- F32 camera_offset_dist = (camera_offset_object - target_offset_dir * (camera_offset_object * target_offset_dir)).magVec();
-
- // calculate whether the target point would be "visible" if it were outside the bounding box
- // on the opposite of the splitting plane defined by object_split_axis;
- BOOL exterior_target_visible = FALSE;
- if (camera_offset_dist > object_radius)
- {
- // target is visible from camera, so turn off fov zoom
- exterior_target_visible = TRUE;
- }
-
- F32 camera_offset_clip = camera_offset_object * object_split_axis;
- F32 target_offset_clip = target_offset_dir * object_split_axis;
-
- // target has moved outside of object extents
- // check to see if camera and target are on same side
- if (target_outside_object_extents)
- {
- if (camera_offset_clip > 0.f && target_offset_clip > 0.f)
- {
- return FALSE;
- }
- else if (camera_offset_clip < 0.f && target_offset_clip < 0.f)
- {
- return FALSE;
- }
- }
-
- // clamp obj distance to diagonal of 10 by 10 cube
- obj_min_distance = llmin(obj_min_distance, 10.f * F_SQRT3);
-
- obj_min_distance += LLViewerCamera::getInstance()->getNear() + (soft_limit ? 0.1f : 0.2f);
-
- return TRUE;
-}
-
-F32 LLAgent::getCameraZoomFraction()
-{
- // 0.f -> camera zoomed all the way out
- // 1.f -> camera zoomed all the way in
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
- {
- // already [0,1]
- return mHUDTargetZoom;
- }
- else if (mFocusOnAvatar && cameraThirdPerson())
- {
- return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f);
- }
- else if (cameraCustomizeAvatar())
- {
- F32 distance = (F32)mCameraFocusOffsetTarget.magVec();
- return clamp_rescale(distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM, 1.f, 0.f );
- }
- else
- {
- F32 min_zoom;
- const F32 DIST_FUDGE = 16.f; // meters
- F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE,
- LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE,
- MAX_CAMERA_DISTANCE_FROM_AGENT);
-
- F32 distance = (F32)mCameraFocusOffsetTarget.magVec();
- if (mFocusObject.notNull())
- {
- if (mFocusObject->isAvatar())
- {
- min_zoom = AVATAR_MIN_ZOOM;
- }
- else
- {
- min_zoom = OBJECT_MIN_ZOOM;
- }
- }
- else
- {
- min_zoom = LAND_MIN_ZOOM;
- }
-
- return clamp_rescale(distance, min_zoom, max_zoom, 1.f, 0.f);
- }
-}
-
-void LLAgent::setCameraZoomFraction(F32 fraction)
-{
- // 0.f -> camera zoomed all the way out
- // 1.f -> camera zoomed all the way in
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
-
- if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
- {
- mHUDTargetZoom = fraction;
- }
- else if (mFocusOnAvatar && cameraThirdPerson())
- {
- mCameraZoomFraction = rescale(fraction, 0.f, 1.f, MAX_ZOOM_FRACTION, MIN_ZOOM_FRACTION);
- }
- else if (cameraCustomizeAvatar())
- {
- LLVector3d camera_offset_dir = mCameraFocusOffsetTarget;
- camera_offset_dir.normalize();
- mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, APPEARANCE_MAX_ZOOM, APPEARANCE_MIN_ZOOM);
- }
- else
- {
- F32 min_zoom = LAND_MIN_ZOOM;
- const F32 DIST_FUDGE = 16.f; // meters
- F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE,
- LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE,
- MAX_CAMERA_DISTANCE_FROM_AGENT);
-
- if (mFocusObject.notNull())
- {
- if (mFocusObject.notNull())
- {
- if (mFocusObject->isAvatar())
- {
- min_zoom = AVATAR_MIN_ZOOM;
- }
- else
- {
- min_zoom = OBJECT_MIN_ZOOM;
- }
- }
- }
-
- LLVector3d camera_offset_dir = mCameraFocusOffsetTarget;
- camera_offset_dir.normalize();
- mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, max_zoom, min_zoom);
- }
- startCameraAnimation();
-}
-
-
-//-----------------------------------------------------------------------------
-// cameraOrbitAround()
-//-----------------------------------------------------------------------------
-void LLAgent::cameraOrbitAround(const F32 radians)
-{
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
- {
- // do nothing for hud selection
- }
- else if (mFocusOnAvatar && (mCameraMode == CAMERA_MODE_THIRD_PERSON || mCameraMode == CAMERA_MODE_FOLLOW))
- {
- mFrameAgent.rotate(radians, getReferenceUpVector());
- }
- else
- {
- mCameraFocusOffsetTarget.rotVec(radians, 0.f, 0.f, 1.f);
-
- cameraZoomIn(1.f);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// cameraOrbitOver()
-//-----------------------------------------------------------------------------
-void LLAgent::cameraOrbitOver(const F32 angle)
-{
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
- {
- // do nothing for hud selection
- }
- else if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON)
- {
- pitch(angle);
- }
- else
- {
- LLVector3 camera_offset_unit(mCameraFocusOffsetTarget);
- camera_offset_unit.normalize();
-
- F32 angle_from_up = acos( camera_offset_unit * getReferenceUpVector() );
-
- LLVector3d left_axis;
- left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
- F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD);
- mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis);
-
- cameraZoomIn(1.f);
- }
-}
-
-//-----------------------------------------------------------------------------
-// cameraZoomIn()
-//-----------------------------------------------------------------------------
-void LLAgent::cameraZoomIn(const F32 fraction)
-{
- if (gDisconnected)
- {
- return;
- }
-
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
- {
- // just update hud zoom level
- mHUDTargetZoom /= fraction;
- return;
- }
-
-
- LLVector3d camera_offset(mCameraFocusOffsetTarget);
- LLVector3d camera_offset_unit(mCameraFocusOffsetTarget);
- F32 min_zoom = LAND_MIN_ZOOM;
- F32 current_distance = (F32)camera_offset_unit.normalize();
- F32 new_distance = current_distance * fraction;
-
- // Don't move through focus point
- if (mFocusObject)
- {
- LLVector3 camera_offset_dir((F32)camera_offset_unit.mdV[VX], (F32)camera_offset_unit.mdV[VY], (F32)camera_offset_unit.mdV[VZ]);
-
- if (mFocusObject->isAvatar())
- {
- calcCameraMinDistance(min_zoom);
- }
- else
- {
- min_zoom = OBJECT_MIN_ZOOM;
- }
- }
-
- new_distance = llmax(new_distance, min_zoom);
-
- // Don't zoom too far back
- const F32 DIST_FUDGE = 16.f; // meters
- F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,
- LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
-
- if (new_distance > max_distance)
- {
- new_distance = max_distance;
-
- /*
- // Unless camera is unlocked
- if (!LLViewerCamera::sDisableCameraConstraints)
- {
- return;
- }
- */
- }
-
- if( cameraCustomizeAvatar() )
- {
- new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM );
- }
-
- mCameraFocusOffsetTarget = new_distance * camera_offset_unit;
-}
-
-//-----------------------------------------------------------------------------
-// cameraOrbitIn()
-//-----------------------------------------------------------------------------
-void LLAgent::cameraOrbitIn(const F32 meters)
-{
- if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON)
- {
- F32 camera_offset_dist = llmax(0.001f, getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale"));
-
- mCameraZoomFraction = (mTargetCameraDistance - meters) / camera_offset_dist;
-
- if (!gSavedSettings.getBOOL("FreezeTime") && mCameraZoomFraction < MIN_ZOOM_FRACTION && meters > 0.f)
- {
- // No need to animate, camera is already there.
- changeCameraToMouselook(FALSE);
- }
-
- mCameraZoomFraction = llclamp(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION);
- }
- else
- {
- LLVector3d camera_offset(mCameraFocusOffsetTarget);
- LLVector3d camera_offset_unit(mCameraFocusOffsetTarget);
- F32 current_distance = (F32)camera_offset_unit.normalize();
- F32 new_distance = current_distance - meters;
- F32 min_zoom = LAND_MIN_ZOOM;
-
- // Don't move through focus point
- if (mFocusObject.notNull())
- {
- if (mFocusObject->isAvatar())
- {
- min_zoom = AVATAR_MIN_ZOOM;
- }
- else
- {
- min_zoom = OBJECT_MIN_ZOOM;
- }
- }
-
- new_distance = llmax(new_distance, min_zoom);
-
- // Don't zoom too far back
- const F32 DIST_FUDGE = 16.f; // meters
- F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,
- LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
-
- if (new_distance > max_distance)
- {
- // Unless camera is unlocked
- if (!gSavedSettings.getBOOL("DisableCameraConstraints"))
- {
- return;
- }
- }
-
- if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() )
- {
- new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM );
- }
-
- // Compute new camera offset
- mCameraFocusOffsetTarget = new_distance * camera_offset_unit;
- cameraZoomIn(1.f);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// cameraPanIn()
-//-----------------------------------------------------------------------------
-void LLAgent::cameraPanIn(F32 meters)
-{
- LLVector3d at_axis;
- at_axis.setVec(LLViewerCamera::getInstance()->getAtAxis());
-
- mFocusTargetGlobal += meters * at_axis;
- mFocusGlobal = mFocusTargetGlobal;
- // don't enforce zoom constraints as this is the only way for users to get past them easily
- updateFocusOffset();
- // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx
- mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
-}
-
-//-----------------------------------------------------------------------------
-// cameraPanLeft()
-//-----------------------------------------------------------------------------
-void LLAgent::cameraPanLeft(F32 meters)
-{
- LLVector3d left_axis;
- left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
-
- mFocusTargetGlobal += meters * left_axis;
- mFocusGlobal = mFocusTargetGlobal;
-
- // disable smoothing for camera pan, which causes some residents unhappiness
- mCameraSmoothingStop = TRUE;
-
- cameraZoomIn(1.f);
- updateFocusOffset();
- // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind - Nyx
- mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
-}
-
-//-----------------------------------------------------------------------------
-// cameraPanUp()
-//-----------------------------------------------------------------------------
-void LLAgent::cameraPanUp(F32 meters)
-{
- LLVector3d up_axis;
- up_axis.setVec(LLViewerCamera::getInstance()->getUpAxis());
-
- mFocusTargetGlobal += meters * up_axis;
- mFocusGlobal = mFocusTargetGlobal;
-
- // disable smoothing for camera pan, which causes some residents unhappiness
- mCameraSmoothingStop = TRUE;
-
- cameraZoomIn(1.f);
- updateFocusOffset();
- // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx
- mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
-}
-
-//-----------------------------------------------------------------------------
-// setKey()
-//-----------------------------------------------------------------------------
-void LLAgent::setKey(const S32 direction, S32 &key)
-{
- if (direction > 0)
- {
- key = 1;
- }
- else if (direction < 0)
- {
- key = -1;
- }
- else
- {
- key = 0;
- }
-}
-
-
//-----------------------------------------------------------------------------
// getControlFlags()
//-----------------------------------------------------------------------------
U32 LLAgent::getControlFlags()
{
-/*
- // HACK -- avoids maintenance of control flags when camera mode is turned on or off,
- // only worries about it when the flags are measured
- if (mCameraMode == CAMERA_MODE_MOUSELOOK)
- {
- if ( !(mControlFlags & AGENT_CONTROL_MOUSELOOK) )
- {
- mControlFlags |= AGENT_CONTROL_MOUSELOOK;
- }
- }
-*/
return mControlFlags;
}
@@ -2117,10 +1117,9 @@ void LLAgent::clearAFK()
// Gods can sometimes get into away state (via gestures)
// without setting the appropriate control flag. JC
- LLVOAvatar* av = mAvatarObject;
if (mControlFlags & AGENT_CONTROL_AWAY
- || (av
- && (av->mSignaledAnimations.find(ANIM_AGENT_AWAY) != av->mSignaledAnimations.end())))
+ || (isAgentAvatarValid()
+ && (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AWAY) != gAgentAvatarp->mSignaledAnimations.end())))
{
sendAnimationRequest(ANIM_AGENT_AWAY, ANIM_REQUEST_STOP);
clearControlFlags(AGENT_CONTROL_AWAY);
@@ -2181,7 +1180,7 @@ BOOL LLAgent::getBusy() const
//-----------------------------------------------------------------------------
void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::string& behavior_name, const LLQuaternion *target_rotation, void (*finish_callback)(BOOL, void *), void *callback_data, F32 stop_distance, F32 rot_threshold)
{
- if (!gAgent.getAvatarObject())
+ if (!isAgentAvatarValid())
{
return;
}
@@ -2242,7 +1241,7 @@ void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::s
LLViewerObject *obj;
LLWorld::getInstance()->resolveStepHeightGlobal(NULL, target_global, traceEndPt, targetOnGround, groundNorm, &obj);
- F64 target_height = llmax((F64)gAgent.getAvatarObject()->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]);
+ F64 target_height = llmax((F64)gAgentAvatarp->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]);
// clamp z value of target to minimum height above ground
mAutoPilotTargetGlobal.mdV[VZ] = targetOnGround.mdV[VZ] + target_height;
@@ -2296,6 +1295,11 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)
{
resetAxes(mAutoPilotTargetFacing);
}
+ // If the user cancelled, don't change the fly state
+ if (!user_cancel)
+ {
+ setFlying(mAutoPilotFlyOnStop);
+ }
//NB: auto pilot can terminate for a reason other than reaching the destination
if (mAutoPilotFinishedCallback)
{
@@ -2303,11 +1307,6 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)
}
mLeaderID = LLUUID::null;
- // If the user cancelled, don't change the fly state
- if (!user_cancel)
- {
- setFlying(mAutoPilotFlyOnStop);
- }
setControlFlags(AGENT_CONTROL_STOP);
if (user_cancel && !mAutoPilotBehaviorName.empty())
@@ -2342,12 +1341,9 @@ void LLAgent::autoPilot(F32 *delta_yaw)
mAutoPilotTargetGlobal = object->getPositionGlobal();
}
- if (mAvatarObject.isNull())
- {
- return;
- }
+ if (!isAgentAvatarValid()) return;
- if (mAvatarObject->mInAir)
+ if (gAgentAvatarp->mInAir)
{
setFlying(TRUE);
}
@@ -2423,9 +1419,9 @@ void LLAgent::autoPilot(F32 *delta_yaw)
// If we're flying, handle autopilot points above or below you.
if (getFlying() && xy_distance < AUTOPILOT_HEIGHT_ADJUST_DISTANCE)
{
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
- F64 current_height = mAvatarObject->getPositionGlobal().mdV[VZ];
+ F64 current_height = gAgentAvatarp->getPositionGlobal().mdV[VZ];
F32 delta_z = (F32)(mAutoPilotTargetGlobal.mdV[VZ] - current_height);
F32 slope = delta_z / xy_distance;
if (slope > 0.45f && delta_z > 6.f)
@@ -2490,30 +1486,30 @@ void LLAgent::propagate(const F32 dt)
LLFloaterMove *floater_move = LLFloaterReg::findTypedInstance<LLFloaterMove>("moveview");
if (floater_move)
{
- floater_move->mForwardButton ->setToggleState( mAtKey > 0 || mWalkKey > 0 );
- floater_move->mBackwardButton ->setToggleState( mAtKey < 0 || mWalkKey < 0 );
- floater_move->mTurnLeftButton ->setToggleState( mYawKey > 0.f );
- floater_move->mTurnRightButton ->setToggleState( mYawKey < 0.f );
- floater_move->mMoveUpButton ->setToggleState( mUpKey > 0 );
- floater_move->mMoveDownButton ->setToggleState( mUpKey < 0 );
+ floater_move->mForwardButton ->setToggleState( gAgentCamera.getAtKey() > 0 || gAgentCamera.getWalkKey() > 0 );
+ floater_move->mBackwardButton ->setToggleState( gAgentCamera.getAtKey() < 0 || gAgentCamera.getWalkKey() < 0 );
+ floater_move->mTurnLeftButton ->setToggleState( gAgentCamera.getYawKey() > 0.f );
+ floater_move->mTurnRightButton ->setToggleState( gAgentCamera.getYawKey() < 0.f );
+ floater_move->mMoveUpButton ->setToggleState( gAgentCamera.getUpKey() > 0 );
+ floater_move->mMoveDownButton ->setToggleState( gAgentCamera.getUpKey() < 0 );
}
// handle rotation based on keyboard levels
const F32 YAW_RATE = 90.f * DEG_TO_RAD; // radians per second
- yaw(YAW_RATE * mYawKey * dt);
+ yaw(YAW_RATE * gAgentCamera.getYawKey() * dt);
const F32 PITCH_RATE = 90.f * DEG_TO_RAD; // radians per second
- pitch(PITCH_RATE * mPitchKey * dt);
+ pitch(PITCH_RATE * gAgentCamera.getPitchKey() * dt);
// handle auto-land behavior
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
- BOOL in_air = mAvatarObject->mInAir;
+ BOOL in_air = gAgentAvatarp->mInAir;
LLVector3 land_vel = getVelocity();
land_vel.mV[VZ] = 0.f;
if (!in_air
- && mUpKey < 0
+ && gAgentCamera.getUpKey() < 0
&& land_vel.magVecSquared() < MAX_VELOCITY_AUTO_LAND_SQUARED
&& gSavedSettings.getBOOL("AutomaticFly"))
{
@@ -2522,13 +1518,7 @@ void LLAgent::propagate(const F32 dt)
}
}
- // clear keys
- mAtKey = 0;
- mWalkKey = 0;
- mLeftKey = 0;
- mUpKey = 0;
- mYawKey = 0.f;
- mPitchKey = 0.f;
+ gAgentCamera.clearGeneralKeys();
}
//-----------------------------------------------------------------------------
@@ -2546,79 +1536,7 @@ void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32
// Check for water and land collision, set underwater flag
//
- updateLookAt(mouse_x, mouse_y);
-}
-
-//-----------------------------------------------------------------------------
-// updateLookAt()
-//-----------------------------------------------------------------------------
-void LLAgent::updateLookAt(const S32 mouse_x, const S32 mouse_y)
-{
- static LLVector3 last_at_axis;
-
-
- if (mAvatarObject.isNull())
- {
- return;
- }
-
- LLQuaternion av_inv_rot = ~mAvatarObject->mRoot.getWorldRotation();
- LLVector3 root_at = LLVector3::x_axis * mAvatarObject->mRoot.getWorldRotation();
-
- if ((gViewerWindow->getMouseVelocityStat()->getCurrent() < 0.01f) &&
- (root_at * last_at_axis > 0.95f ))
- {
- LLVector3 vel = mAvatarObject->getVelocity();
- if (vel.magVecSquared() > 4.f)
- {
- setLookAt(LOOKAT_TARGET_IDLE, mAvatarObject, vel * av_inv_rot);
- }
- else
- {
- // *FIX: rotate mframeagent by sit object's rotation?
- LLQuaternion look_rotation = mAvatarObject->isSitting() ? mAvatarObject->getRenderRotation() : mFrameAgent.getQuaternion(); // use camera's current rotation
- LLVector3 look_offset = LLVector3(2.f, 0.f, 0.f) * look_rotation * av_inv_rot;
- setLookAt(LOOKAT_TARGET_IDLE, mAvatarObject, look_offset);
- }
- last_at_axis = root_at;
- return;
- }
-
- last_at_axis = root_at;
-
- if (CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode())
- {
- setLookAt(LOOKAT_TARGET_NONE, mAvatarObject, LLVector3(-2.f, 0.f, 0.f));
- }
- else
- {
- // Move head based on cursor position
- ELookAtType lookAtType = LOOKAT_TARGET_NONE;
- LLVector3 headLookAxis;
- LLCoordFrame frameCamera = *((LLCoordFrame*)LLViewerCamera::getInstance());
-
- if (cameraMouselook())
- {
- lookAtType = LOOKAT_TARGET_MOUSELOOK;
- }
- else if (cameraThirdPerson())
- {
- // range from -.5 to .5
- F32 x_from_center =
- ((F32) mouse_x / (F32) gViewerWindow->getWindowWidthScaled() ) - 0.5f;
- F32 y_from_center =
- ((F32) mouse_y / (F32) gViewerWindow->getWindowHeightScaled() ) - 0.5f;
-
- frameCamera.yaw( - x_from_center * gSavedSettings.getF32("YawFromMousePosition") * DEG_TO_RAD);
- frameCamera.pitch( - y_from_center * gSavedSettings.getF32("PitchFromMousePosition") * DEG_TO_RAD);
- lookAtType = LOOKAT_TARGET_FREELOOK;
- }
-
- headLookAxis = frameCamera.getAtAxis();
- // RN: we use world-space offset for mouselook and freelook
- //headLookAxis = headLookAxis * av_inv_rot;
- setLookAt(lookAtType, mAvatarObject, headLookAxis);
- }
+ gAgentCamera.updateLookAt(mouse_x, mouse_y);
}
// friends and operators
@@ -2633,44 +1551,6 @@ std::ostream& operator<<(std::ostream &s, const LLAgent &agent)
return s;
}
-
-// ------------------- Beginning of legacy LLCamera hack ----------------------
-// This section is included for legacy LLCamera support until
-// it is no longer needed. Some legacy code must exist in
-// non-legacy functions, and is labeled with "// legacy" comments.
-
-//-----------------------------------------------------------------------------
-// setAvatarObject()
-//-----------------------------------------------------------------------------
-void LLAgent::setAvatarObject(LLVOAvatarSelf *avatar)
-{
- mAvatarObject = avatar;
-
- if (!avatar)
- {
- llinfos << "Setting LLAgent::mAvatarObject to NULL" << llendl;
- return;
- }
-
- if (!mLookAt)
- {
- mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT);
- }
- if (!mPointAt)
- {
- mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT);
- }
-
- if (!mLookAt.isNull())
- {
- mLookAt->setSourceObject(avatar);
- }
- if (!mPointAt.isNull())
- {
- mPointAt->setSourceObject(avatar);
- }
-}
-
// TRUE if your own avatar needs to be rendered. Usually only
// in third person and build.
//-----------------------------------------------------------------------------
@@ -2678,7 +1558,7 @@ void LLAgent::setAvatarObject(LLVOAvatarSelf *avatar)
//-----------------------------------------------------------------------------
BOOL LLAgent::needsRenderAvatar()
{
- if (cameraMouselook() && !LLVOAvatar::sVisibleInFirstPerson)
+ if (gAgentCamera.cameraMouselook() && !LLVOAvatar::sVisibleInFirstPerson)
{
return FALSE;
}
@@ -2689,7 +1569,7 @@ BOOL LLAgent::needsRenderAvatar()
// TRUE if we need to render your own avatar's head.
BOOL LLAgent::needsRenderHead()
{
- return (LLVOAvatar::sVisibleInFirstPerson && LLPipeline::sReflectionRender) || (mShowAvatar && !cameraMouselook());
+ return (LLVOAvatar::sVisibleInFirstPerson && LLPipeline::sReflectionRender) || (mShowAvatar && !gAgentCamera.cameraMouselook());
}
//-----------------------------------------------------------------------------
@@ -2711,7 +1591,7 @@ void LLAgent::startTyping()
LLViewerObject* chatter = gObjectList.findObject(mLastChatterID);
if (chatter && chatter->isAvatar())
{
- gAgent.setLookAt(LOOKAT_TARGET_RESPOND, chatter, LLVector3::zero);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_RESPOND, chatter, LLVector3::zero);
}
}
@@ -2790,14 +1670,14 @@ U8 LLAgent::getRenderState()
//-----------------------------------------------------------------------------
void LLAgent::endAnimationUpdateUI()
{
- if (mCameraMode == mLastCameraMode)
+ if (gAgentCamera.getCameraMode() == gAgentCamera.getLastCameraMode())
{
// We're already done endAnimationUpdateUI for this transition.
return;
}
// clean up UI from mode we're leaving
- if ( mLastCameraMode == CAMERA_MODE_MOUSELOOK )
+ if (gAgentCamera.getLastCameraMode() == CAMERA_MODE_MOUSELOOK )
{
// show mouse cursor
gViewerWindow->showCursor();
@@ -2835,33 +1715,33 @@ void LLAgent::endAnimationUpdateUI()
}
- gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
if( gMorphView )
{
gMorphView->setVisible( FALSE );
}
// Disable mouselook-specific animations
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
- if( mAvatarObject->isAnyAnimationSignaled(AGENT_GUN_AIM_ANIMS, NUM_AGENT_GUN_AIM_ANIMS) )
+ if( gAgentAvatarp->isAnyAnimationSignaled(AGENT_GUN_AIM_ANIMS, NUM_AGENT_GUN_AIM_ANIMS) )
{
- if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_RIFLE_R) != mAvatarObject->mSignaledAnimations.end())
+ if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AIM_RIFLE_R) != gAgentAvatarp->mSignaledAnimations.end())
{
sendAnimationRequest(ANIM_AGENT_AIM_RIFLE_R, ANIM_REQUEST_STOP);
sendAnimationRequest(ANIM_AGENT_HOLD_RIFLE_R, ANIM_REQUEST_START);
}
- if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_HANDGUN_R) != mAvatarObject->mSignaledAnimations.end())
+ if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AIM_HANDGUN_R) != gAgentAvatarp->mSignaledAnimations.end())
{
sendAnimationRequest(ANIM_AGENT_AIM_HANDGUN_R, ANIM_REQUEST_STOP);
sendAnimationRequest(ANIM_AGENT_HOLD_HANDGUN_R, ANIM_REQUEST_START);
}
- if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_BAZOOKA_R) != mAvatarObject->mSignaledAnimations.end())
+ if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AIM_BAZOOKA_R) != gAgentAvatarp->mSignaledAnimations.end())
{
sendAnimationRequest(ANIM_AGENT_AIM_BAZOOKA_R, ANIM_REQUEST_STOP);
sendAnimationRequest(ANIM_AGENT_HOLD_BAZOOKA_R, ANIM_REQUEST_START);
}
- if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_BOW_L) != mAvatarObject->mSignaledAnimations.end())
+ if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AIM_BOW_L) != gAgentAvatarp->mSignaledAnimations.end())
{
sendAnimationRequest(ANIM_AGENT_AIM_BOW_L, ANIM_REQUEST_STOP);
sendAnimationRequest(ANIM_AGENT_HOLD_BOW_L, ANIM_REQUEST_START);
@@ -2869,8 +1749,7 @@ void LLAgent::endAnimationUpdateUI()
}
}
}
- else
- if( mLastCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR )
+ else if (gAgentCamera.getLastCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR)
{
// make sure we ask to save changes
@@ -2881,7 +1760,7 @@ void LLAgent::endAnimationUpdateUI()
gMorphView->setVisible( FALSE );
}
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
if(mCustomAnim)
{
@@ -2892,13 +1771,13 @@ void LLAgent::endAnimationUpdateUI()
}
}
- setLookAt(LOOKAT_TARGET_CLEAR);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
}
//---------------------------------------------------------------------
// Set up UI for mode we're entering
//---------------------------------------------------------------------
- if (mCameraMode == CAMERA_MODE_MOUSELOOK)
+ if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
{
// hide menus
gMenuBarView->setVisible(FALSE);
@@ -2913,7 +1792,7 @@ void LLAgent::endAnimationUpdateUI()
LLPanelStandStopFlying::getInstance()->setVisible(FALSE);
// clear out camera lag effect
- mCameraLag.clearVec();
+ gAgentCamera.clearCameraLag();
// JC - Added for always chat in third person option
gFocusMgr.setKeyboardFocus(NULL);
@@ -2941,49 +1820,49 @@ void LLAgent::endAnimationUpdateUI()
gConsole->setVisible( TRUE );
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
// Trigger mouselook-specific animations
- if( mAvatarObject->isAnyAnimationSignaled(AGENT_GUN_HOLD_ANIMS, NUM_AGENT_GUN_HOLD_ANIMS) )
+ if( gAgentAvatarp->isAnyAnimationSignaled(AGENT_GUN_HOLD_ANIMS, NUM_AGENT_GUN_HOLD_ANIMS) )
{
- if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_RIFLE_R) != mAvatarObject->mSignaledAnimations.end())
+ if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_HOLD_RIFLE_R) != gAgentAvatarp->mSignaledAnimations.end())
{
sendAnimationRequest(ANIM_AGENT_HOLD_RIFLE_R, ANIM_REQUEST_STOP);
sendAnimationRequest(ANIM_AGENT_AIM_RIFLE_R, ANIM_REQUEST_START);
}
- if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_HANDGUN_R) != mAvatarObject->mSignaledAnimations.end())
+ if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_HOLD_HANDGUN_R) != gAgentAvatarp->mSignaledAnimations.end())
{
sendAnimationRequest(ANIM_AGENT_HOLD_HANDGUN_R, ANIM_REQUEST_STOP);
sendAnimationRequest(ANIM_AGENT_AIM_HANDGUN_R, ANIM_REQUEST_START);
}
- if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_BAZOOKA_R) != mAvatarObject->mSignaledAnimations.end())
+ if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_HOLD_BAZOOKA_R) != gAgentAvatarp->mSignaledAnimations.end())
{
sendAnimationRequest(ANIM_AGENT_HOLD_BAZOOKA_R, ANIM_REQUEST_STOP);
sendAnimationRequest(ANIM_AGENT_AIM_BAZOOKA_R, ANIM_REQUEST_START);
}
- if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_BOW_L) != mAvatarObject->mSignaledAnimations.end())
+ if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_HOLD_BOW_L) != gAgentAvatarp->mSignaledAnimations.end())
{
sendAnimationRequest(ANIM_AGENT_HOLD_BOW_L, ANIM_REQUEST_STOP);
sendAnimationRequest(ANIM_AGENT_AIM_BOW_L, ANIM_REQUEST_START);
}
}
- if (mAvatarObject->getParent())
+ if (gAgentAvatarp->getParent())
{
LLVector3 at_axis = LLViewerCamera::getInstance()->getAtAxis();
- LLViewerObject* root_object = (LLViewerObject*)mAvatarObject->getRoot();
+ LLViewerObject* root_object = (LLViewerObject*)gAgentAvatarp->getRoot();
if (root_object->flagCameraDecoupled())
{
resetAxes(at_axis);
}
else
{
- resetAxes(at_axis * ~((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation());
+ resetAxes(at_axis * ~((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation());
}
}
}
}
- else if (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR)
+ else if (gAgentCamera.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR)
{
LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset);
@@ -2993,1585 +1872,22 @@ void LLAgent::endAnimationUpdateUI()
}
// freeze avatar
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
- mPauseRequest = mAvatarObject->requestPause();
+ mPauseRequest = gAgentAvatarp->requestPause();
}
}
- if (getAvatarObject())
+ if (isAgentAvatarValid())
{
- getAvatarObject()->updateAttachmentVisibility(mCameraMode);
+ gAgentAvatarp->updateAttachmentVisibility(gAgentCamera.getCameraMode());
}
gFloaterTools->dirty();
// Don't let this be called more than once if the camera
// mode hasn't changed. --JC
- mLastCameraMode = mCameraMode;
-
-}
-
-
-//-----------------------------------------------------------------------------
-// updateCamera()
-//-----------------------------------------------------------------------------
-void LLAgent::updateCamera()
-{
- //Ventrella - changed camera_skyward to the new global "mCameraUpVector"
- mCameraUpVector = LLVector3::z_axis;
- //LLVector3 camera_skyward(0.f, 0.f, 1.f);
- //end Ventrella
-
- U32 camera_mode = mCameraAnimating ? mLastCameraMode : mCameraMode;
-
- validateFocusObject();
-
- if (mAvatarObject.notNull() &&
- mAvatarObject->isSitting() &&
- camera_mode == CAMERA_MODE_MOUSELOOK)
- {
- //Ventrella
- //changed camera_skyward to the new global "mCameraUpVector"
- mCameraUpVector = mCameraUpVector * mAvatarObject->getRenderRotation();
- //end Ventrella
- }
-
- if (cameraThirdPerson() && mFocusOnAvatar && LLFollowCamMgr::getActiveFollowCamParams())
- {
- changeCameraToFollow();
- }
-
- //Ventrella
- //NOTE - this needs to be integrated into a general upVector system here within llAgent.
- if ( camera_mode == CAMERA_MODE_FOLLOW && mFocusOnAvatar )
- {
- mCameraUpVector = mFollowCam.getUpVector();
- }
- //end Ventrella
-
- if (mSitCameraEnabled)
- {
- if (mSitCameraReferenceObject->isDead())
- {
- setSitCamera(LLUUID::null);
- }
- }
-
- // Update UI with our camera inputs
- LLFloaterCamera* camera_floater = LLFloaterReg::findTypedInstance<LLFloaterCamera>("camera");
- if (camera_floater)
- {
- camera_floater->mRotate->setToggleState(
- mOrbitRightKey > 0.f, // left
- mOrbitUpKey > 0.f, // top
- mOrbitLeftKey > 0.f, // right
- mOrbitDownKey > 0.f); // bottom
-
- camera_floater->mTrack->setToggleState(
- mPanLeftKey > 0.f, // left
- mPanUpKey > 0.f, // top
- mPanRightKey > 0.f, // right
- mPanDownKey > 0.f); // bottom
- }
-
- // Handle camera movement based on keyboard.
- const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second
- const F32 ORBIT_AROUND_RATE = 90.f * DEG_TO_RAD; // radians per second
- const F32 PAN_RATE = 5.f; // meters per second
-
- if( mOrbitUpKey || mOrbitDownKey )
- {
- F32 input_rate = mOrbitUpKey - mOrbitDownKey;
- cameraOrbitOver( input_rate * ORBIT_OVER_RATE / gFPSClamped );
- }
-
- if( mOrbitLeftKey || mOrbitRightKey)
- {
- F32 input_rate = mOrbitLeftKey - mOrbitRightKey;
- cameraOrbitAround( input_rate * ORBIT_AROUND_RATE / gFPSClamped );
- }
-
- if( mOrbitInKey || mOrbitOutKey )
- {
- F32 input_rate = mOrbitInKey - mOrbitOutKey;
-
- LLVector3d to_focus = gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin()) - calcFocusPositionTargetGlobal();
- F32 distance_to_focus = (F32)to_focus.magVec();
- // Move at distance (in meters) meters per second
- cameraOrbitIn( input_rate * distance_to_focus / gFPSClamped );
- }
-
- if( mPanInKey || mPanOutKey )
- {
- F32 input_rate = mPanInKey - mPanOutKey;
- cameraPanIn( input_rate * PAN_RATE / gFPSClamped );
- }
-
- if( mPanRightKey || mPanLeftKey )
- {
- F32 input_rate = mPanRightKey - mPanLeftKey;
- cameraPanLeft( input_rate * -PAN_RATE / gFPSClamped );
- }
-
- if( mPanUpKey || mPanDownKey )
- {
- F32 input_rate = mPanUpKey - mPanDownKey;
- cameraPanUp( input_rate * PAN_RATE / gFPSClamped );
- }
-
- // Clear camera keyboard keys.
- mOrbitLeftKey = 0.f;
- mOrbitRightKey = 0.f;
- mOrbitUpKey = 0.f;
- mOrbitDownKey = 0.f;
- mOrbitInKey = 0.f;
- mOrbitOutKey = 0.f;
-
- mPanRightKey = 0.f;
- mPanLeftKey = 0.f;
- mPanUpKey = 0.f;
- mPanDownKey = 0.f;
- mPanInKey = 0.f;
- mPanOutKey = 0.f;
-
- // lerp camera focus offset
- mCameraFocusOffset = lerp(mCameraFocusOffset, mCameraFocusOffsetTarget, LLCriticalDamp::getInterpolant(CAMERA_FOCUS_HALF_LIFE));
-
- //Ventrella
- if ( mCameraMode == CAMERA_MODE_FOLLOW )
- {
- if ( mAvatarObject.notNull() )
- {
- //--------------------------------------------------------------------------------
- // this is where the avatar's position and rotation are given to followCam, and
- // where it is updated. All three of its attributes are updated: (1) position,
- // (2) focus, and (3) upvector. They can then be queried elsewhere in llAgent.
- //--------------------------------------------------------------------------------
- // *TODO: use combined rotation of frameagent and sit object
- LLQuaternion avatarRotationForFollowCam = mAvatarObject->isSitting() ? mAvatarObject->getRenderRotation() : mFrameAgent.getQuaternion();
-
- LLFollowCamParams* current_cam = LLFollowCamMgr::getActiveFollowCamParams();
- if (current_cam)
- {
- mFollowCam.copyParams(*current_cam);
- mFollowCam.setSubjectPositionAndRotation( mAvatarObject->getRenderPosition(), avatarRotationForFollowCam );
- mFollowCam.update();
- LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true);
- }
- else
- {
- changeCameraToThirdPerson(TRUE);
- }
- }
- }
- // end Ventrella
-
- BOOL hit_limit;
- LLVector3d camera_pos_global;
- LLVector3d camera_target_global = calcCameraPositionTargetGlobal(&hit_limit);
- mCameraVirtualPositionAgent = getPosAgentFromGlobal(camera_target_global);
- LLVector3d focus_target_global = calcFocusPositionTargetGlobal();
-
- // perform field of view correction
- mCameraFOVZoomFactor = calcCameraFOVZoomFactor();
- camera_target_global = focus_target_global + (camera_target_global - focus_target_global) * (1.f + mCameraFOVZoomFactor);
-
- mShowAvatar = TRUE; // can see avatar by default
-
- // Adjust position for animation
- if (mCameraAnimating)
- {
- F32 time = mAnimationTimer.getElapsedTimeF32();
-
- // yet another instance of critically damped motion, hooray!
- // F32 fraction_of_animation = 1.f - pow(2.f, -time / CAMERA_ZOOM_HALF_LIFE);
-
- // linear interpolation
- F32 fraction_of_animation = time / mAnimationDuration;
-
- BOOL isfirstPerson = mCameraMode == CAMERA_MODE_MOUSELOOK;
- BOOL wasfirstPerson = mLastCameraMode == CAMERA_MODE_MOUSELOOK;
- F32 fraction_animation_to_skip;
-
- if (mAnimationCameraStartGlobal == camera_target_global)
- {
- fraction_animation_to_skip = 0.f;
- }
- else
- {
- LLVector3d cam_delta = mAnimationCameraStartGlobal - camera_target_global;
- fraction_animation_to_skip = HEAD_BUFFER_SIZE / (F32)cam_delta.magVec();
- }
- F32 animation_start_fraction = (wasfirstPerson) ? fraction_animation_to_skip : 0.f;
- F32 animation_finish_fraction = (isfirstPerson) ? (1.f - fraction_animation_to_skip) : 1.f;
-
- if (fraction_of_animation < animation_finish_fraction)
- {
- if (fraction_of_animation < animation_start_fraction || fraction_of_animation > animation_finish_fraction )
- {
- mShowAvatar = FALSE;
- }
-
- // ...adjust position for animation
- F32 smooth_fraction_of_animation = llsmoothstep(0.0f, 1.0f, fraction_of_animation);
- camera_pos_global = lerp(mAnimationCameraStartGlobal, camera_target_global, smooth_fraction_of_animation);
- mFocusGlobal = lerp(mAnimationFocusStartGlobal, focus_target_global, smooth_fraction_of_animation);
- }
- else
- {
- // ...animation complete
- mCameraAnimating = FALSE;
-
- camera_pos_global = camera_target_global;
- mFocusGlobal = focus_target_global;
-
- endAnimationUpdateUI();
- mShowAvatar = TRUE;
- }
-
- if (getAvatarObject() && mCameraMode != CAMERA_MODE_MOUSELOOK)
- {
- getAvatarObject()->updateAttachmentVisibility(mCameraMode);
- }
- }
- else
- {
- camera_pos_global = camera_target_global;
- mFocusGlobal = focus_target_global;
- mShowAvatar = TRUE;
- }
-
- // smoothing
- if (TRUE)
- {
- LLVector3d agent_pos = getPositionGlobal();
- LLVector3d camera_pos_agent = camera_pos_global - agent_pos;
- // Sitting on what you're manipulating can cause camera jitter with smoothing.
- // This turns off smoothing while editing. -MG
- mCameraSmoothingStop |= (BOOL)LLToolMgr::getInstance()->inBuildMode();
-
- if (cameraThirdPerson() && !mCameraSmoothingStop)
- {
- const F32 SMOOTHING_HALF_LIFE = 0.02f;
-
- F32 smoothing = LLCriticalDamp::getInterpolant(gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE, FALSE);
-
- if (!mFocusObject) // we differentiate on avatar mode
- {
- // for avatar-relative focus, we smooth in avatar space -
- // the avatar moves too jerkily w/r/t global space to smooth there.
-
- LLVector3d delta = camera_pos_agent - mCameraSmoothingLastPositionAgent;
- if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please
- {
- camera_pos_agent = lerp(mCameraSmoothingLastPositionAgent, camera_pos_agent, smoothing);
- camera_pos_global = camera_pos_agent + agent_pos;
- }
- }
- else
- {
- LLVector3d delta = camera_pos_global - mCameraSmoothingLastPositionGlobal;
- if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please
- {
- camera_pos_global = lerp(mCameraSmoothingLastPositionGlobal, camera_pos_global, smoothing);
- }
- }
- }
-
- mCameraSmoothingLastPositionGlobal = camera_pos_global;
- mCameraSmoothingLastPositionAgent = camera_pos_agent;
- mCameraSmoothingStop = FALSE;
- }
-
-
- mCameraCurrentFOVZoomFactor = lerp(mCameraCurrentFOVZoomFactor, mCameraFOVZoomFactor, LLCriticalDamp::getInterpolant(FOV_ZOOM_HALF_LIFE));
-
-// llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl;
-
- F32 ui_offset = 0.f;
- if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode )
- {
- ui_offset = calcCustomizeAvatarUIOffset( camera_pos_global );
- }
-
-
- LLVector3 focus_agent = getPosAgentFromGlobal(mFocusGlobal);
-
- mCameraPositionAgent = getPosAgentFromGlobal(camera_pos_global);
-
- // Move the camera
-
- //Ventrella
- LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent);
- //LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent);
- //end Ventrella
-
- //RN: translate UI offset after camera is oriented properly
- LLViewerCamera::getInstance()->translate(LLViewerCamera::getInstance()->getLeftAxis() * ui_offset);
-
- // Change FOV
- LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor));
-
- // follow camera when in customize mode
- if (cameraCustomizeAvatar())
- {
- setLookAt(LOOKAT_TARGET_FOCUS, NULL, mCameraPositionAgent);
- }
-
- // update the travel distance stat
- // this isn't directly related to the camera
- // but this seemed like the best place to do this
- LLVector3d global_pos = getPositionGlobal();
- if (! mLastPositionGlobal.isExactlyZero())
- {
- LLVector3d delta = global_pos - mLastPositionGlobal;
- mDistanceTraveled += delta.magVec();
- }
- mLastPositionGlobal = global_pos;
-
- if (LLVOAvatar::sVisibleInFirstPerson && mAvatarObject.notNull() && !mAvatarObject->isSitting() && cameraMouselook())
- {
- LLVector3 head_pos = mAvatarObject->mHeadp->getWorldPosition() +
- LLVector3(0.08f, 0.f, 0.05f) * mAvatarObject->mHeadp->getWorldRotation() +
- LLVector3(0.1f, 0.f, 0.f) * mAvatarObject->mPelvisp->getWorldRotation();
- LLVector3 diff = mCameraPositionAgent - head_pos;
- diff = diff * ~mAvatarObject->mRoot.getWorldRotation();
-
- LLJoint* torso_joint = mAvatarObject->mTorsop;
- LLJoint* chest_joint = mAvatarObject->mChestp;
- LLVector3 torso_scale = torso_joint->getScale();
- LLVector3 chest_scale = chest_joint->getScale();
-
- // shorten avatar skeleton to avoid foot interpenetration
- if (!mAvatarObject->mInAir)
- {
- LLVector3 chest_offset = LLVector3(0.f, 0.f, chest_joint->getPosition().mV[VZ]) * torso_joint->getWorldRotation();
- F32 z_compensate = llclamp(-diff.mV[VZ], -0.2f, 1.f);
- F32 scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / chest_offset.mV[VZ]), 0.5f, 1.2f);
- torso_joint->setScale(LLVector3(1.f, 1.f, scale_factor));
-
- LLJoint* neck_joint = mAvatarObject->mNeckp;
- LLVector3 neck_offset = LLVector3(0.f, 0.f, neck_joint->getPosition().mV[VZ]) * chest_joint->getWorldRotation();
- scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / neck_offset.mV[VZ]), 0.5f, 1.2f);
- chest_joint->setScale(LLVector3(1.f, 1.f, scale_factor));
- diff.mV[VZ] = 0.f;
- }
-
- mAvatarObject->mPelvisp->setPosition(mAvatarObject->mPelvisp->getPosition() + diff);
-
- mAvatarObject->mRoot.updateWorldMatrixChildren();
-
- for (LLVOAvatar::attachment_map_t::iterator iter = mAvatarObject->mAttachmentPoints.begin();
- iter != mAvatarObject->mAttachmentPoints.end(); )
- {
- LLVOAvatar::attachment_map_t::iterator curiter = iter++;
- LLViewerJointAttachment* attachment = curiter->second;
- for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
- attachment_iter != attachment->mAttachedObjects.end();
- ++attachment_iter)
- {
- LLViewerObject *attached_object = (*attachment_iter);
- if (attached_object && !attached_object->isDead() && attached_object->mDrawable.notNull())
- {
- // clear any existing "early" movements of attachment
- attached_object->mDrawable->clearState(LLDrawable::EARLY_MOVE);
- gPipeline.updateMoveNormalAsync(attached_object->mDrawable);
- attached_object->updateText();
- }
- }
- }
-
- torso_joint->setScale(torso_scale);
- chest_joint->setScale(chest_scale);
- }
-}
-
-void LLAgent::updateFocusOffset()
-{
- validateFocusObject();
- if (mFocusObject.notNull())
- {
- LLVector3d obj_pos = getPosGlobalFromAgent(mFocusObject->getRenderPosition());
- mFocusObjectOffset.setVec(mFocusTargetGlobal - obj_pos);
- }
-}
-
-void LLAgent::validateFocusObject()
-{
- if (mFocusObject.notNull() &&
- (mFocusObject->isDead()))
- {
- mFocusObjectOffset.clearVec();
- clearFocusObject();
- mCameraFOVZoomFactor = 0.f;
- }
-}
-
-//-----------------------------------------------------------------------------
-// calcCustomizeAvatarUIOffset()
-//-----------------------------------------------------------------------------
-F32 LLAgent::calcCustomizeAvatarUIOffset( const LLVector3d& camera_pos_global )
-{
- F32 ui_offset = 0.f;
-
- if( gFloaterCustomize )
- {
- const LLRect& rect = gFloaterCustomize->getRect();
-
- // Move the camera so that the avatar isn't covered up by this floater.
- F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidthScaled()))));
- F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); // radians
- F32 offset = tan(apparent_angle);
-
- if( rect.mLeft < (gViewerWindow->getWindowWidthScaled() - rect.mRight) )
- {
- // Move the avatar to the right (camera to the left)
- ui_offset = offset;
- }
- else
- {
- // Move the avatar to the left (camera to the right)
- ui_offset = -offset;
- }
- }
- F32 range = (F32)dist_vec(camera_pos_global, gAgent.getFocusGlobal());
- mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f));
- return mUIOffset * range;
-}
-
-//-----------------------------------------------------------------------------
-// calcFocusPositionTargetGlobal()
-//-----------------------------------------------------------------------------
-LLVector3d LLAgent::calcFocusPositionTargetGlobal()
-{
- if (mFocusObject.notNull() && mFocusObject->isDead())
- {
- clearFocusObject();
- }
-
- // Ventrella
- if ( mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar )
- {
- mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedFocus());
- return mFocusTargetGlobal;
- }// End Ventrella
- else if (mCameraMode == CAMERA_MODE_MOUSELOOK)
- {
- LLVector3d at_axis(1.0, 0.0, 0.0);
- LLQuaternion agent_rot = mFrameAgent.getQuaternion();
- if (mAvatarObject.notNull() && mAvatarObject->getParent())
- {
- LLViewerObject* root_object = (LLViewerObject*)mAvatarObject->getRoot();
- if (!root_object->flagCameraDecoupled())
- {
- agent_rot *= ((LLViewerObject*)(mAvatarObject->getParent()))->getRenderRotation();
- }
- }
- at_axis = at_axis * agent_rot;
- mFocusTargetGlobal = calcCameraPositionTargetGlobal() + at_axis;
- return mFocusTargetGlobal;
- }
- else if (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR)
- {
- return mFocusTargetGlobal;
- }
- else if (!mFocusOnAvatar)
- {
- if (mFocusObject.notNull() && !mFocusObject->isDead() && mFocusObject->mDrawable.notNull())
- {
- LLDrawable* drawablep = mFocusObject->mDrawable;
-
- if (mTrackFocusObject &&
- drawablep &&
- drawablep->isActive())
- {
- if (!mFocusObject->isAvatar())
- {
- if (mFocusObject->isSelected())
- {
- gPipeline.updateMoveNormalAsync(drawablep);
- }
- else
- {
- if (drawablep->isState(LLDrawable::MOVE_UNDAMPED))
- {
- gPipeline.updateMoveNormalAsync(drawablep);
- }
- else
- {
- gPipeline.updateMoveDampedAsync(drawablep);
- }
- }
- }
- }
- // if not tracking object, update offset based on new object position
- else
- {
- updateFocusOffset();
- }
- LLVector3 focus_agent = mFocusObject->getRenderPosition() + mFocusObjectOffset;
- mFocusTargetGlobal.setVec(getPosGlobalFromAgent(focus_agent));
- }
- return mFocusTargetGlobal;
- }
- else if (mSitCameraEnabled && mAvatarObject.notNull() && mAvatarObject->isSitting() && mSitCameraReferenceObject.notNull())
- {
- // sit camera
- LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition();
- LLQuaternion object_rot = mSitCameraReferenceObject->getRenderRotation();
-
- LLVector3 target_pos = object_pos + (mSitCameraFocus * object_rot);
- return getPosGlobalFromAgent(target_pos);
- }
- else
- {
- return getPositionGlobal() + calcThirdPersonFocusOffset();
- }
-}
-
-LLVector3d LLAgent::calcThirdPersonFocusOffset()
-{
- // ...offset from avatar
- LLVector3d focus_offset;
-
- LLQuaternion agent_rot = mFrameAgent.getQuaternion();
- if (!mAvatarObject.isNull() && mAvatarObject->getParent())
- {
- agent_rot *= ((LLViewerObject*)(mAvatarObject->getParent()))->getRenderRotation();
- }
-
- focus_offset = mFocusOffsetInitial[mCameraPreset] * agent_rot;
- return focus_offset;
-}
-
-void LLAgent::setupSitCamera()
-{
- // agent frame entering this function is in world coordinates
- if (mAvatarObject.notNull() && mAvatarObject->getParent())
- {
- LLQuaternion parent_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();
- // slam agent coordinate frame to proper parent local version
- LLVector3 at_axis = mFrameAgent.getAtAxis();
- at_axis.mV[VZ] = 0.f;
- at_axis.normalize();
- resetAxes(at_axis * ~parent_rot);
- }
-}
-
-//-----------------------------------------------------------------------------
-// getCameraPositionAgent()
-//-----------------------------------------------------------------------------
-const LLVector3 &LLAgent::getCameraPositionAgent() const
-{
- return LLViewerCamera::getInstance()->getOrigin();
-}
-
-//-----------------------------------------------------------------------------
-// getCameraPositionGlobal()
-//-----------------------------------------------------------------------------
-LLVector3d LLAgent::getCameraPositionGlobal() const
-{
- return getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin());
-}
-
-//-----------------------------------------------------------------------------
-// calcCameraFOVZoomFactor()
-//-----------------------------------------------------------------------------
-F32 LLAgent::calcCameraFOVZoomFactor()
-{
- LLVector3 camera_offset_dir;
- camera_offset_dir.setVec(mCameraFocusOffset);
-
- if (mCameraMode == CAMERA_MODE_MOUSELOOK)
- {
- return 0.f;
- }
- else if (mFocusObject.notNull() && !mFocusObject->isAvatar() && !mFocusOnAvatar)
- {
- // don't FOV zoom on mostly transparent objects
- LLVector3 focus_offset = mFocusObjectOffset;
- F32 obj_min_dist = 0.f;
- calcCameraMinDistance(obj_min_dist);
- F32 current_distance = llmax(0.001f, camera_offset_dir.magVec());
-
- mFocusObjectDist = obj_min_dist - current_distance;
-
- F32 new_fov_zoom = llclamp(mFocusObjectDist / current_distance, 0.f, 1000.f);
- return new_fov_zoom;
- }
- else // focusing on land or avatar
- {
- // keep old field of view until user changes focus explicitly
- return mCameraFOVZoomFactor;
- //return 0.f;
- }
-}
-
-//-----------------------------------------------------------------------------
-// calcCameraPositionTargetGlobal()
-//-----------------------------------------------------------------------------
-LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
-{
- // Compute base camera position and look-at points.
- F32 camera_land_height;
- LLVector3d frame_center_global = mAvatarObject.isNull() ? getPositionGlobal()
- : getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition());
-
- BOOL isConstrained = FALSE;
- LLVector3d head_offset;
- head_offset.setVec(mThirdPersonHeadOffset);
-
- LLVector3d camera_position_global;
-
- // Ventrella
- if ( mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar )
- {
- camera_position_global = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedPosition());
- }// End Ventrella
- else if (mCameraMode == CAMERA_MODE_MOUSELOOK)
- {
- if (mAvatarObject.isNull() || mAvatarObject->mDrawable.isNull())
- {
- llwarns << "Null avatar drawable!" << llendl;
- return LLVector3d::zero;
- }
- head_offset.clearVec();
- if (mAvatarObject->isSitting() && mAvatarObject->getParent())
- {
- mAvatarObject->updateHeadOffset();
- head_offset.mdV[VX] = mAvatarObject->mHeadOffset.mV[VX];
- head_offset.mdV[VY] = mAvatarObject->mHeadOffset.mV[VY];
- head_offset.mdV[VZ] = mAvatarObject->mHeadOffset.mV[VZ] + 0.1f;
- const LLMatrix4& mat = ((LLViewerObject*) mAvatarObject->getParent())->getRenderMatrix();
- camera_position_global = getPosGlobalFromAgent
- ((mAvatarObject->getPosition()+
- LLVector3(head_offset)*mAvatarObject->getRotation()) * mat);
- }
- else
- {
- head_offset.mdV[VZ] = mAvatarObject->mHeadOffset.mV[VZ];
- if (mAvatarObject->isSitting())
- {
- head_offset.mdV[VZ] += 0.1;
- }
- camera_position_global = getPosGlobalFromAgent(mAvatarObject->getRenderPosition());//frame_center_global;
- head_offset = head_offset * mAvatarObject->getRenderRotation();
- camera_position_global = camera_position_global + head_offset;
- }
- }
- else if (mCameraMode == CAMERA_MODE_THIRD_PERSON && mFocusOnAvatar)
- {
- LLVector3 local_camera_offset;
- F32 camera_distance = 0.f;
-
- if (mSitCameraEnabled
- && mAvatarObject.notNull()
- && mAvatarObject->isSitting()
- && mSitCameraReferenceObject.notNull())
- {
- // sit camera
- LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition();
- LLQuaternion object_rot = mSitCameraReferenceObject->getRenderRotation();
-
- LLVector3 target_pos = object_pos + (mSitCameraPos * object_rot);
-
- camera_position_global = getPosGlobalFromAgent(target_pos);
- }
- else
- {
- local_camera_offset = mCameraZoomFraction * getCameraOffsetInitial() * gSavedSettings.getF32("CameraOffsetScale");
-
- // are we sitting down?
- if (mAvatarObject.notNull() && mAvatarObject->getParent())
- {
- LLQuaternion parent_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();
- // slam agent coordinate frame to proper parent local version
- LLVector3 at_axis = mFrameAgent.getAtAxis() * parent_rot;
- at_axis.mV[VZ] = 0.f;
- at_axis.normalize();
- resetAxes(at_axis * ~parent_rot);
-
- local_camera_offset = local_camera_offset * mFrameAgent.getQuaternion() * parent_rot;
- }
- else
- {
- local_camera_offset = mFrameAgent.rotateToAbsolute( local_camera_offset );
- }
-
- if (!mCameraCollidePlane.isExactlyZero() && (mAvatarObject.isNull() || !mAvatarObject->isSitting()))
- {
- LLVector3 plane_normal;
- plane_normal.setVec(mCameraCollidePlane.mV);
-
- F32 offset_dot_norm = local_camera_offset * plane_normal;
- if (llabs(offset_dot_norm) < 0.001f)
- {
- offset_dot_norm = 0.001f;
- }
-
- camera_distance = local_camera_offset.normalize();
-
- F32 pos_dot_norm = getPosAgentFromGlobal(frame_center_global + head_offset) * plane_normal;
-
- // if agent is outside the colliding half-plane
- if (pos_dot_norm > mCameraCollidePlane.mV[VW])
- {
- // check to see if camera is on the opposite side (inside) the half-plane
- if (offset_dot_norm + pos_dot_norm < mCameraCollidePlane.mV[VW])
- {
- // diminish offset by factor to push it back outside the half-plane
- camera_distance *= (pos_dot_norm - mCameraCollidePlane.mV[VW] - CAMERA_COLLIDE_EPSILON) / -offset_dot_norm;
- }
- }
- else
- {
- if (offset_dot_norm + pos_dot_norm > mCameraCollidePlane.mV[VW])
- {
- camera_distance *= (mCameraCollidePlane.mV[VW] - pos_dot_norm - CAMERA_COLLIDE_EPSILON) / offset_dot_norm;
- }
- }
- }
- else
- {
- camera_distance = local_camera_offset.normalize();
- }
-
- mTargetCameraDistance = llmax(camera_distance, MIN_CAMERA_DISTANCE);
-
- if (mTargetCameraDistance != mCurrentCameraDistance)
- {
- F32 camera_lerp_amt = LLCriticalDamp::getInterpolant(CAMERA_ZOOM_HALF_LIFE);
-
- mCurrentCameraDistance = lerp(mCurrentCameraDistance, mTargetCameraDistance, camera_lerp_amt);
- }
-
- // Make the camera distance current
- local_camera_offset *= mCurrentCameraDistance;
-
- // set the global camera position
- LLVector3d camera_offset;
-
- LLVector3 av_pos = mAvatarObject.isNull() ? LLVector3::zero : mAvatarObject->getRenderPosition();
- camera_offset.setVec( local_camera_offset );
- camera_position_global = frame_center_global + head_offset + camera_offset;
-
- if (mAvatarObject.notNull())
- {
- LLVector3d camera_lag_d;
- F32 lag_interp = LLCriticalDamp::getInterpolant(CAMERA_LAG_HALF_LIFE);
- LLVector3 target_lag;
- LLVector3 vel = getVelocity();
-
- // lag by appropriate amount for flying
- F32 time_in_air = mAvatarObject->mTimeInAir.getElapsedTimeF32();
- if(!mCameraAnimating && mAvatarObject->mInAir && time_in_air > GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME)
- {
- LLVector3 frame_at_axis = mFrameAgent.getAtAxis();
- frame_at_axis -= projected_vec(frame_at_axis, getReferenceUpVector());
- frame_at_axis.normalize();
-
- //transition smoothly in air mode, to avoid camera pop
- F32 u = (time_in_air - GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME) / GROUND_TO_AIR_CAMERA_TRANSITION_TIME;
- u = llclamp(u, 0.f, 1.f);
-
- lag_interp *= u;
-
- if (gViewerWindow->getLeftMouseDown() && gViewerWindow->getLastPick().mObjectID == mAvatarObject->getID())
- {
- // disable camera lag when using mouse-directed steering
- target_lag.clearVec();
- }
- else
- {
- target_lag = vel * gSavedSettings.getF32("DynamicCameraStrength") / 30.f;
- }
-
- mCameraLag = lerp(mCameraLag, target_lag, lag_interp);
-
- F32 lag_dist = mCameraLag.magVec();
- if (lag_dist > MAX_CAMERA_LAG)
- {
- mCameraLag = mCameraLag * MAX_CAMERA_LAG / lag_dist;
- }
-
- // clamp camera lag so that avatar is always in front
- F32 dot = (mCameraLag - (frame_at_axis * (MIN_CAMERA_LAG * u))) * frame_at_axis;
- if (dot < -(MIN_CAMERA_LAG * u))
- {
- mCameraLag -= (dot + (MIN_CAMERA_LAG * u)) * frame_at_axis;
- }
- }
- else
- {
- mCameraLag = lerp(mCameraLag, LLVector3::zero, LLCriticalDamp::getInterpolant(0.15f));
- }
-
- camera_lag_d.setVec(mCameraLag);
- camera_position_global = camera_position_global - camera_lag_d;
- }
- }
- }
- else
- {
- LLVector3d focusPosGlobal = calcFocusPositionTargetGlobal();
- // camera gets pushed out later wrt mCameraFOVZoomFactor...this is "raw" value
- camera_position_global = focusPosGlobal + mCameraFocusOffset;
- }
-
- if (!gSavedSettings.getBOOL("DisableCameraConstraints") && !gAgent.isGodlike())
- {
- LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromPosGlobal(
- camera_position_global);
- bool constrain = true;
- if(regionp && regionp->canManageEstate())
- {
- constrain = false;
- }
- if(constrain)
- {
- F32 max_dist = ( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) ?
- APPEARANCE_MAX_ZOOM : mDrawDistance;
-
- LLVector3d camera_offset = camera_position_global
- - gAgent.getPositionGlobal();
- F32 camera_distance = (F32)camera_offset.magVec();
-
- if(camera_distance > max_dist)
- {
- camera_position_global = gAgent.getPositionGlobal() +
- (max_dist / camera_distance) * camera_offset;
- isConstrained = TRUE;
- }
- }
-
-// JC - Could constrain camera based on parcel stuff here.
-// LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global);
-//
-// if (regionp && !regionp->mParcelOverlay->isBuildCameraAllowed(regionp->getPosRegionFromGlobal(camera_position_global)))
-// {
-// camera_position_global = last_position_global;
-//
-// isConstrained = TRUE;
-// }
- }
-
- // Don't let camera go underground
- F32 camera_min_off_ground = getCameraMinOffGround();
-
- camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global);
-
- if (camera_position_global.mdV[VZ] < camera_land_height + camera_min_off_ground)
- {
- camera_position_global.mdV[VZ] = camera_land_height + camera_min_off_ground;
- isConstrained = TRUE;
- }
-
-
- if (hit_limit)
- {
- *hit_limit = isConstrained;
- }
-
- return camera_position_global;
-}
-
-
-LLVector3 LLAgent::getCameraOffsetInitial()
-{
- return mCameraOffsetInitial[mCameraPreset];
-}
-
-
-//-----------------------------------------------------------------------------
-// handleScrollWheel()
-//-----------------------------------------------------------------------------
-void LLAgent::handleScrollWheel(S32 clicks)
-{
- if ( mCameraMode == CAMERA_MODE_FOLLOW && gAgent.getFocusOnAvatar())
- {
- if ( ! mFollowCam.getPositionLocked() ) // not if the followCam position is locked in place
- {
- mFollowCam.zoom( clicks );
- if ( mFollowCam.isZoomedToMinimumDistance() )
- {
- changeCameraToMouselook(FALSE);
- }
- }
- }
- else
- {
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- const F32 ROOT_ROOT_TWO = sqrt(F_SQRT2);
-
- // Block if camera is animating
- if (mCameraAnimating)
- {
- return;
- }
-
- if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
- {
- F32 zoom_factor = (F32)pow(0.8, -clicks);
- cameraZoomIn(zoom_factor);
- }
- else if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON)
- {
- F32 camera_offset_initial_mag = getCameraOffsetInitial().magVec();
-
- F32 current_zoom_fraction = mTargetCameraDistance / (camera_offset_initial_mag * gSavedSettings.getF32("CameraOffsetScale"));
- current_zoom_fraction *= 1.f - pow(ROOT_ROOT_TWO, clicks);
-
- cameraOrbitIn(current_zoom_fraction * camera_offset_initial_mag * gSavedSettings.getF32("CameraOffsetScale"));
- }
- else
- {
- F32 current_zoom_fraction = (F32)mCameraFocusOffsetTarget.magVec();
- cameraOrbitIn(current_zoom_fraction * (1.f - pow(ROOT_ROOT_TWO, clicks)));
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// getCameraMinOffGround()
-//-----------------------------------------------------------------------------
-F32 LLAgent::getCameraMinOffGround()
-{
- if (mCameraMode == CAMERA_MODE_MOUSELOOK)
- {
- return 0.f;
- }
- else
- {
- if (gSavedSettings.getBOOL("DisableCameraConstraints"))
- {
- return -1000.f;
- }
- else
- {
- return 0.5f;
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// resetCamera()
-//-----------------------------------------------------------------------------
-void LLAgent::resetCamera()
-{
- // Remove any pitch from the avatar
- LLVector3 at = mFrameAgent.getAtAxis();
- at.mV[VZ] = 0.f;
- at.normalize();
- gAgent.resetAxes(at);
- // have to explicitly clear field of view zoom now
- mCameraFOVZoomFactor = 0.f;
-
- updateCamera();
-}
-
-//-----------------------------------------------------------------------------
-// changeCameraToMouselook()
-//-----------------------------------------------------------------------------
-void LLAgent::changeCameraToMouselook(BOOL animate)
-{
- if (LLViewerJoystick::getInstance()->getOverrideCamera())
- {
- return;
- }
-
- // visibility changes at end of animation
- gViewerWindow->getWindow()->resetBusyCount();
-
- // unpause avatar animation
- mPauseRequest = NULL;
-
- LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset);
-
- if (mAvatarObject.notNull())
- {
- mAvatarObject->stopMotion( ANIM_AGENT_BODY_NOISE );
- mAvatarObject->stopMotion( ANIM_AGENT_BREATHE_ROT );
- }
-
- //gViewerWindow->stopGrab();
- LLSelectMgr::getInstance()->deselectAll();
- gViewerWindow->hideCursor();
- gViewerWindow->moveCursorToCenter();
-
- if( mCameraMode != CAMERA_MODE_MOUSELOOK )
- {
- gFocusMgr.setKeyboardFocus( NULL );
-
- mLastCameraMode = mCameraMode;
- mCameraMode = CAMERA_MODE_MOUSELOOK;
- U32 old_flags = mControlFlags;
- setControlFlags(AGENT_CONTROL_MOUSELOOK);
- if (old_flags != mControlFlags)
- {
- mbFlagsDirty = TRUE;
- }
-
- if (animate)
- {
- startCameraAnimation();
- }
- else
- {
- mCameraAnimating = FALSE;
- endAnimationUpdateUI();
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// changeCameraToDefault()
-//-----------------------------------------------------------------------------
-void LLAgent::changeCameraToDefault()
-{
- if (LLViewerJoystick::getInstance()->getOverrideCamera())
- {
- return;
- }
-
- if (LLFollowCamMgr::getActiveFollowCamParams())
- {
- changeCameraToFollow();
- }
- else
- {
- changeCameraToThirdPerson();
- }
-}
-
-
-// Ventrella
-//-----------------------------------------------------------------------------
-// changeCameraToFollow()
-//-----------------------------------------------------------------------------
-void LLAgent::changeCameraToFollow(BOOL animate)
-{
- if (LLViewerJoystick::getInstance()->getOverrideCamera())
- {
- return;
- }
-
- if( mCameraMode != CAMERA_MODE_FOLLOW )
- {
- if (mCameraMode == CAMERA_MODE_MOUSELOOK)
- {
- animate = FALSE;
- }
- startCameraAnimation();
-
- mLastCameraMode = mCameraMode;
- mCameraMode = CAMERA_MODE_FOLLOW;
-
- // bang-in the current focus, position, and up vector of the follow cam
- mFollowCam.reset( mCameraPositionAgent, LLViewerCamera::getInstance()->getPointOfInterest(), LLVector3::z_axis );
-
- if (gBasicToolset)
- {
- LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
- }
-
- if (mAvatarObject.notNull())
- {
- mAvatarObject->mPelvisp->setPosition(LLVector3::zero);
- mAvatarObject->startMotion( ANIM_AGENT_BODY_NOISE );
- mAvatarObject->startMotion( ANIM_AGENT_BREATHE_ROT );
- }
-
- // unpause avatar animation
- mPauseRequest = NULL;
-
- U32 old_flags = mControlFlags;
- clearControlFlags(AGENT_CONTROL_MOUSELOOK);
- if (old_flags != mControlFlags)
- {
- mbFlagsDirty = TRUE;
- }
-
- if (animate)
- {
- startCameraAnimation();
- }
- else
- {
- mCameraAnimating = FALSE;
- endAnimationUpdateUI();
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-// changeCameraToThirdPerson()
-//-----------------------------------------------------------------------------
-void LLAgent::changeCameraToThirdPerson(BOOL animate)
-{
- if (LLViewerJoystick::getInstance()->getOverrideCamera())
- {
- return;
- }
-
- gViewerWindow->getWindow()->resetBusyCount();
-
- mCameraZoomFraction = INITIAL_ZOOM_FRACTION;
-
- if (mAvatarObject.notNull())
- {
- if (!mAvatarObject->isSitting())
- {
- mAvatarObject->mPelvisp->setPosition(LLVector3::zero);
- }
- mAvatarObject->startMotion( ANIM_AGENT_BODY_NOISE );
- mAvatarObject->startMotion( ANIM_AGENT_BREATHE_ROT );
- }
-
- LLVector3 at_axis;
-
- // unpause avatar animation
- mPauseRequest = NULL;
-
- if( mCameraMode != CAMERA_MODE_THIRD_PERSON )
- {
- if (gBasicToolset)
- {
- LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
- }
-
- mCameraLag.clearVec();
- if (mCameraMode == CAMERA_MODE_MOUSELOOK)
- {
- mCurrentCameraDistance = MIN_CAMERA_DISTANCE;
- mTargetCameraDistance = MIN_CAMERA_DISTANCE;
- animate = FALSE;
- }
- mLastCameraMode = mCameraMode;
- mCameraMode = CAMERA_MODE_THIRD_PERSON;
- U32 old_flags = mControlFlags;
- clearControlFlags(AGENT_CONTROL_MOUSELOOK);
- if (old_flags != mControlFlags)
- {
- mbFlagsDirty = TRUE;
- }
-
- }
-
- // Remove any pitch from the avatar
- if (mAvatarObject.notNull() && mAvatarObject->getParent())
- {
- LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();
- at_axis = LLViewerCamera::getInstance()->getAtAxis();
- at_axis.mV[VZ] = 0.f;
- at_axis.normalize();
- resetAxes(at_axis * ~obj_rot);
- }
- else
- {
- at_axis = mFrameAgent.getAtAxis();
- at_axis.mV[VZ] = 0.f;
- at_axis.normalize();
- resetAxes(at_axis);
- }
-
-
- if (animate)
- {
- startCameraAnimation();
- }
- else
- {
- mCameraAnimating = FALSE;
- endAnimationUpdateUI();
- }
-}
-
-//-----------------------------------------------------------------------------
-// changeCameraToCustomizeAvatar()
-//-----------------------------------------------------------------------------
-void LLAgent::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_animate)
-{
- if (LLViewerJoystick::getInstance()->getOverrideCamera())
- {
- return;
- }
-
- standUp(); // force stand up
- gViewerWindow->getWindow()->resetBusyCount();
-
- if (gFaceEditToolset)
- {
- LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset);
- }
-
- if (camera_animate)
- {
- startCameraAnimation();
- }
-
- // Remove any pitch from the avatar
- //LLVector3 at = mFrameAgent.getAtAxis();
- //at.mV[VZ] = 0.f;
- //at.normalize();
- //gAgent.resetAxes(at);
-
- if( mCameraMode != CAMERA_MODE_CUSTOMIZE_AVATAR )
- {
- mLastCameraMode = mCameraMode;
- mCameraMode = CAMERA_MODE_CUSTOMIZE_AVATAR;
- U32 old_flags = mControlFlags;
- clearControlFlags(AGENT_CONTROL_MOUSELOOK);
- if (old_flags != mControlFlags)
- {
- mbFlagsDirty = TRUE;
- }
-
- gFocusMgr.setKeyboardFocus( NULL );
- gFocusMgr.setMouseCapture( NULL );
-
- LLVOAvatarSelf::onCustomizeStart();
- }
-
- if (mAvatarObject.notNull())
- {
- if(avatar_animate)
- {
- // Remove any pitch from the avatar
- LLVector3 at = mFrameAgent.getAtAxis();
- at.mV[VZ] = 0.f;
- at.normalize();
- gAgent.resetAxes(at);
-
- sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START);
- mCustomAnim = TRUE ;
- mAvatarObject->startMotion(ANIM_AGENT_CUSTOMIZE);
- LLMotion* turn_motion = mAvatarObject->findMotion(ANIM_AGENT_CUSTOMIZE);
-
- if (turn_motion)
- {
- mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP;
-
- }
- else
- {
- mAnimationDuration = gSavedSettings.getF32("ZoomTime");
- }
- }
-
-
-
- gAgent.setFocusGlobal(LLVector3d::zero);
- }
- else
- {
- mCameraAnimating = FALSE;
- endAnimationUpdateUI();
- }
-
-}
-
-
-void LLAgent::switchCameraPreset(ECameraPreset preset)
-{
- //zoom is supposed to be reset for the front and group views
- mCameraZoomFraction = 1.f;
-
- //focusing on avatar in that case means following him on movements
- mFocusOnAvatar = TRUE;
-
- mCameraPreset = preset;
-
- gSavedSettings.setU32("CameraPreset", mCameraPreset);
-}
-
-
-//
-// Focus point management
-//
-
-//-----------------------------------------------------------------------------
-// startCameraAnimation()
-//-----------------------------------------------------------------------------
-void LLAgent::startCameraAnimation()
-{
- mAnimationCameraStartGlobal = getCameraPositionGlobal();
- mAnimationFocusStartGlobal = mFocusGlobal;
- mAnimationTimer.reset();
- mCameraAnimating = TRUE;
- mAnimationDuration = gSavedSettings.getF32("ZoomTime");
-}
-
-//-----------------------------------------------------------------------------
-// stopCameraAnimation()
-//-----------------------------------------------------------------------------
-void LLAgent::stopCameraAnimation()
-{
- mCameraAnimating = FALSE;
-}
-
-void LLAgent::clearFocusObject()
-{
- if (mFocusObject.notNull())
- {
- startCameraAnimation();
-
- setFocusObject(NULL);
- mFocusObjectOffset.clearVec();
- }
-}
-
-void LLAgent::setFocusObject(LLViewerObject* object)
-{
- mFocusObject = object;
-}
-
-// Focus on a point, but try to keep camera position stable.
-//-----------------------------------------------------------------------------
-// setFocusGlobal()
-//-----------------------------------------------------------------------------
-void LLAgent::setFocusGlobal(const LLPickInfo& pick)
-{
- LLViewerObject* objectp = gObjectList.findObject(pick.mObjectID);
-
- if (objectp)
- {
- // focus on object plus designated offset
- // which may or may not be same as pick.mPosGlobal
- setFocusGlobal(objectp->getPositionGlobal() + LLVector3d(pick.mObjectOffset), pick.mObjectID);
- }
- else
- {
- // focus directly on point where user clicked
- setFocusGlobal(pick.mPosGlobal, pick.mObjectID);
- }
-}
-
-
-void LLAgent::setFocusGlobal(const LLVector3d& focus, const LLUUID &object_id)
-{
- setFocusObject(gObjectList.findObject(object_id));
- LLVector3d old_focus = mFocusTargetGlobal;
- LLViewerObject *focus_obj = mFocusObject;
-
- // if focus has changed
- if (old_focus != focus)
- {
- if (focus.isExactlyZero())
- {
- if (mAvatarObject.notNull())
- {
- mFocusTargetGlobal = getPosGlobalFromAgent(mAvatarObject->mHeadp->getWorldPosition());
- }
- else
- {
- mFocusTargetGlobal = getPositionGlobal();
- }
- mCameraFocusOffsetTarget = getCameraPositionGlobal() - mFocusTargetGlobal;
- mCameraFocusOffset = mCameraFocusOffsetTarget;
- setLookAt(LOOKAT_TARGET_CLEAR);
- }
- else
- {
- mFocusTargetGlobal = focus;
- if (!focus_obj)
- {
- mCameraFOVZoomFactor = 0.f;
- }
-
- mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(mCameraVirtualPositionAgent) - mFocusTargetGlobal;
-
- startCameraAnimation();
-
- if (focus_obj)
- {
- if (focus_obj->isAvatar())
- {
- setLookAt(LOOKAT_TARGET_FOCUS, focus_obj);
- }
- else
- {
- setLookAt(LOOKAT_TARGET_FOCUS, focus_obj, (getPosAgentFromGlobal(focus) - focus_obj->getRenderPosition()) * ~focus_obj->getRenderRotation());
- }
- }
- else
- {
- setLookAt(LOOKAT_TARGET_FOCUS, NULL, getPosAgentFromGlobal(mFocusTargetGlobal));
- }
- }
- }
- else // focus == mFocusTargetGlobal
- {
- if (focus.isExactlyZero())
- {
- if (mAvatarObject.notNull())
- {
- mFocusTargetGlobal = getPosGlobalFromAgent(mAvatarObject->mHeadp->getWorldPosition());
- }
- else
- {
- mFocusTargetGlobal = getPositionGlobal();
- }
- }
- mCameraFocusOffsetTarget = (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor);;
- mCameraFocusOffset = mCameraFocusOffsetTarget;
- }
-
- if (mFocusObject.notNull())
- {
- // for attachments, make offset relative to avatar, not the attachment
- if (mFocusObject->isAttachment())
- {
- while (mFocusObject.notNull() // DEV-29123 - can crash with a messed-up attachment
- && !mFocusObject->isAvatar())
- {
- mFocusObject = (LLViewerObject*) mFocusObject->getParent();
- }
- setFocusObject((LLViewerObject*)mFocusObject);
- }
- updateFocusOffset();
- }
-}
-
-// Used for avatar customization
-//-----------------------------------------------------------------------------
-// setCameraPosAndFocusGlobal()
-//-----------------------------------------------------------------------------
-void LLAgent::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, const LLVector3d& focus, const LLUUID &object_id)
-{
- LLVector3d old_focus = mFocusTargetGlobal;
-
- F64 focus_delta_squared = (old_focus - focus).magVecSquared();
- const F64 ANIM_EPSILON_SQUARED = 0.0001;
- if( focus_delta_squared > ANIM_EPSILON_SQUARED )
- {
- startCameraAnimation();
-
- if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode )
- {
- // Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize.
- mAnimationCameraStartGlobal -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal ));
- }
- }
-
- //LLViewerCamera::getInstance()->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) );
- setFocusObject(gObjectList.findObject(object_id));
- mFocusTargetGlobal = focus;
- mCameraFocusOffsetTarget = camera_pos - focus;
- mCameraFocusOffset = mCameraFocusOffsetTarget;
-
- if (mFocusObject)
- {
- if (mFocusObject->isAvatar())
- {
- setLookAt(LOOKAT_TARGET_FOCUS, mFocusObject);
- }
- else
- {
- setLookAt(LOOKAT_TARGET_FOCUS, mFocusObject, (getPosAgentFromGlobal(focus) - mFocusObject->getRenderPosition()) * ~mFocusObject->getRenderRotation());
- }
- }
- else
- {
- setLookAt(LOOKAT_TARGET_FOCUS, NULL, getPosAgentFromGlobal(mFocusTargetGlobal));
- }
-
- if( mCameraAnimating )
- {
- const F64 ANIM_METERS_PER_SECOND = 10.0;
- const F64 MIN_ANIM_SECONDS = 0.5;
- const F64 MAX_ANIM_SECONDS = 10.0;
- F64 anim_duration = llmax( MIN_ANIM_SECONDS, sqrt(focus_delta_squared) / ANIM_METERS_PER_SECOND );
- anim_duration = llmin( anim_duration, MAX_ANIM_SECONDS );
- setAnimationDuration( (F32)anim_duration );
- }
-
- updateFocusOffset();
-}
-
-//-----------------------------------------------------------------------------
-// setSitCamera()
-//-----------------------------------------------------------------------------
-void LLAgent::setSitCamera(const LLUUID &object_id, const LLVector3 &camera_pos, const LLVector3 &camera_focus)
-{
- BOOL camera_enabled = !object_id.isNull();
-
- if (camera_enabled)
- {
- LLViewerObject *reference_object = gObjectList.findObject(object_id);
- if (reference_object)
- {
- //convert to root object relative?
- mSitCameraPos = camera_pos;
- mSitCameraFocus = camera_focus;
- mSitCameraReferenceObject = reference_object;
- mSitCameraEnabled = TRUE;
- }
- }
- else
- {
- mSitCameraPos.clearVec();
- mSitCameraFocus.clearVec();
- mSitCameraReferenceObject = NULL;
- mSitCameraEnabled = FALSE;
- }
-}
-
-//-----------------------------------------------------------------------------
-// setFocusOnAvatar()
-//-----------------------------------------------------------------------------
-void LLAgent::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)
-{
- if (focus_on_avatar != mFocusOnAvatar)
- {
- if (animate)
- {
- startCameraAnimation();
- }
- else
- {
- stopCameraAnimation();
- }
- }
-
- //RN: when focused on the avatar, we're not "looking" at it
- // looking implies intent while focusing on avatar means
- // you're just walking around with a camera on you...eesh.
- if (!mFocusOnAvatar && focus_on_avatar)
- {
- setFocusGlobal(LLVector3d::zero);
- mCameraFOVZoomFactor = 0.f;
- if (mCameraMode == CAMERA_MODE_THIRD_PERSON)
- {
- LLVector3 at_axis;
- if (mAvatarObject.notNull() && mAvatarObject->getParent())
- {
- LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation();
- at_axis = LLViewerCamera::getInstance()->getAtAxis();
- at_axis.mV[VZ] = 0.f;
- at_axis.normalize();
- resetAxes(at_axis * ~obj_rot);
- }
- else
- {
- at_axis = LLViewerCamera::getInstance()->getAtAxis();
- at_axis.mV[VZ] = 0.f;
- at_axis.normalize();
- resetAxes(at_axis);
- }
- }
- }
- // unlocking camera from avatar
- else if (mFocusOnAvatar && !focus_on_avatar)
- {
- // keep camera focus point consistent, even though it is now unlocked
- setFocusGlobal(getPositionGlobal() + calcThirdPersonFocusOffset(), gAgent.getID());
- }
-
- mFocusOnAvatar = focus_on_avatar;
+ gAgentCamera.updateLastCamera();
}
//-----------------------------------------------------------------------------
@@ -4589,90 +1905,13 @@ void LLAgent::heardChat(const LLUUID& id)
if (ll_rand(2) == 0)
{
LLViewerObject *chatter = gObjectList.findObject(mLastChatterID);
- setLookAt(LOOKAT_TARGET_AUTO_LISTEN, chatter, LLVector3::zero);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_AUTO_LISTEN, chatter, LLVector3::zero);
}
mLastChatterID = id;
mChatTimer.reset();
}
-//-----------------------------------------------------------------------------
-// lookAtLastChat()
-//-----------------------------------------------------------------------------
-void LLAgent::lookAtLastChat()
-{
- // Block if camera is animating or not in normal third person camera mode
- if (mCameraAnimating || !cameraThirdPerson())
- {
- return;
- }
-
- LLViewerObject *chatter = gObjectList.findObject(mLastChatterID);
- if (chatter)
- {
- LLVector3 delta_pos;
- if (chatter->isAvatar())
- {
- LLVOAvatar *chatter_av = (LLVOAvatar*)chatter;
- if (mAvatarObject.notNull() && chatter_av->mHeadp)
- {
- delta_pos = chatter_av->mHeadp->getWorldPosition() - mAvatarObject->mHeadp->getWorldPosition();
- }
- else
- {
- delta_pos = chatter->getPositionAgent() - getPositionAgent();
- }
- delta_pos.normalize();
-
- setControlFlags(AGENT_CONTROL_STOP);
-
- changeCameraToThirdPerson();
-
- LLVector3 new_camera_pos = mAvatarObject->mHeadp->getWorldPosition();
- LLVector3 left = delta_pos % LLVector3::z_axis;
- left.normalize();
- LLVector3 up = left % delta_pos;
- up.normalize();
- new_camera_pos -= delta_pos * 0.4f;
- new_camera_pos += left * 0.3f;
- new_camera_pos += up * 0.2f;
- if (chatter_av->mHeadp)
- {
- setFocusGlobal(getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), mLastChatterID);
- mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition());
- }
- else
- {
- setFocusGlobal(chatter->getPositionGlobal(), mLastChatterID);
- mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
- }
- setFocusOnAvatar(FALSE, TRUE);
- }
- else
- {
- delta_pos = chatter->getRenderPosition() - getPositionAgent();
- delta_pos.normalize();
-
- setControlFlags(AGENT_CONTROL_STOP);
-
- changeCameraToThirdPerson();
-
- LLVector3 new_camera_pos = mAvatarObject->mHeadp->getWorldPosition();
- LLVector3 left = delta_pos % LLVector3::z_axis;
- left.normalize();
- LLVector3 up = left % delta_pos;
- up.normalize();
- new_camera_pos -= delta_pos * 0.4f;
- new_camera_pos += left * 0.3f;
- new_camera_pos += up * 0.2f;
-
- setFocusGlobal(chatter->getPositionGlobal(), mLastChatterID);
- mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
- setFocusOnAvatar(FALSE, TRUE);
- }
- }
-}
-
const F32 SIT_POINT_EXTENTS = 0.2f;
LLSD ll_sdmap_from_vector3(const LLVector3& vec)
@@ -4717,10 +1956,10 @@ void LLAgent::setStartPosition( U32 location_id )
LLVector3 agent_pos = getPositionAgent();
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
// the z height is at the agent's feet
- agent_pos.mV[VZ] -= 0.5f * mAvatarObject->mBodySize.mV[VZ];
+ agent_pos.mV[VZ] -= 0.5f * gAgentAvatarp->mBodySize.mV[VZ];
}
agent_pos.mV[VX] = llclamp( agent_pos.mV[VX], INSET, REGION_WIDTH - INSET );
@@ -4827,7 +2066,7 @@ void LLAgent::onAnimStop(const LLUUID& id)
setControlFlags(AGENT_CONTROL_FINISH_ANIM);
// now trigger dusting self off animation
- if (mAvatarObject.notNull() && !mAvatarObject->mBelowWater && rand() % 3 == 0)
+ if (isAgentAvatarValid() && !gAgentAvatarp->mBelowWater && rand() % 3 == 0)
sendAnimationRequest( ANIM_AGENT_BRUSH, ANIM_REQUEST_START );
}
else if (id == ANIM_AGENT_PRE_JUMP || id == ANIM_AGENT_LAND || id == ANIM_AGENT_MEDIUM_LAND)
@@ -4836,11 +2075,16 @@ void LLAgent::onAnimStop(const LLUUID& id)
}
}
-BOOL LLAgent::isGodlike() const
+bool LLAgent::isGodlike() const
{
return mAgentAccess.isGodlike();
}
+bool LLAgent::isGodlikeWithoutAdminMenuFakery() const
+{
+ return mAgentAccess.isGodlikeWithoutAdminMenuFakery();
+}
+
U8 LLAgent::getGodLevel() const
{
return mAgentAccess.getGodLevel();
@@ -5021,9 +2265,9 @@ void LLAgent::buildFullnameAndTitle(std::string& name) const
name.erase(0, name.length());
}
- if (mAvatarObject.notNull())
+ if (isAgentAvatarValid())
{
- name += mAvatarObject->getFullname();
+ name += gAgentAvatarp->getFullname();
}
}
@@ -5169,14 +2413,14 @@ BOOL LLAgent::canJoinGroups() const
LLQuaternion LLAgent::getHeadRotation()
{
- if (mAvatarObject.isNull() || !mAvatarObject->mPelvisp || !mAvatarObject->mHeadp)
+ if (!isAgentAvatarValid() || !gAgentAvatarp->mPelvisp || !gAgentAvatarp->mHeadp)
{
return LLQuaternion::DEFAULT;
}
- if (!gAgent.cameraMouselook())
+ if (!gAgentCamera.cameraMouselook())
{
- return mAvatarObject->getRotation();
+ return gAgentAvatarp->getRotation();
}
// We must be in mouselook
@@ -5185,9 +2429,9 @@ LLQuaternion LLAgent::getHeadRotation()
LLVector3 left = up % look_dir;
LLQuaternion rot(look_dir, left, up);
- if (mAvatarObject->getParent())
+ if (gAgentAvatarp->getParent())
{
- rot = rot * ~mAvatarObject->getParent()->getRotation();
+ rot = rot * ~gAgentAvatarp->getParent()->getRotation();
}
return rot;
@@ -5345,10 +2589,11 @@ void LLAgent::initOriginGlobal(const LLVector3d &origin_global)
BOOL LLAgent::leftButtonGrabbed() const
{
- return (!cameraMouselook() && mControlsTakenCount[CONTROL_LBUTTON_DOWN_INDEX] > 0)
- || (cameraMouselook() && mControlsTakenCount[CONTROL_ML_LBUTTON_DOWN_INDEX] > 0)
- || (!cameraMouselook() && mControlsTakenPassedOnCount[CONTROL_LBUTTON_DOWN_INDEX] > 0)
- || (cameraMouselook() && mControlsTakenPassedOnCount[CONTROL_ML_LBUTTON_DOWN_INDEX] > 0);
+ const BOOL camera_mouse_look = gAgentCamera.cameraMouselook();
+ return (!camera_mouse_look && mControlsTakenCount[CONTROL_LBUTTON_DOWN_INDEX] > 0)
+ || (camera_mouse_look && mControlsTakenCount[CONTROL_ML_LBUTTON_DOWN_INDEX] > 0)
+ || (!camera_mouse_look && mControlsTakenPassedOnCount[CONTROL_LBUTTON_DOWN_INDEX] > 0)
+ || (camera_mouse_look && mControlsTakenPassedOnCount[CONTROL_ML_LBUTTON_DOWN_INDEX] > 0);
}
BOOL LLAgent::rotateGrabbed() const
@@ -5809,14 +3054,13 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void *
{
gAgentQueryManager.mNumPendingQueries--;
- LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
- if (!avatarp || avatarp->isDead())
+ if (!isAgentAvatarValid() || gAgentAvatarp->isDead())
{
llwarns << "No avatar for user in cached texture update!" << llendl;
return;
}
- if (gAgent.cameraCustomizeAvatar())
+ if (gAgentCamera.cameraCustomizeAvatar())
{
// ignore baked textures when in customize mode
return;
@@ -5837,26 +3081,33 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void *
mesgsys->getUUIDFast(_PREHASH_WearableData, _PREHASH_TextureID, texture_id, texture_block);
mesgsys->getU8Fast(_PREHASH_WearableData, _PREHASH_TextureIndex, texture_index, texture_block);
- if (texture_id.notNull()
- && (S32)texture_index < BAKED_NUM_INDICES
+ if ((S32)texture_index < BAKED_NUM_INDICES
&& gAgentQueryManager.mActiveCacheQueries[texture_index] == query_id)
{
- //llinfos << "Received cached texture " << (U32)texture_index << ": " << texture_id << llendl;
- avatarp->setCachedBakedTexture(LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)texture_index), texture_id);
- //avatarp->setTETexture( LLVOAvatar::sBakedTextureIndices[texture_index], texture_id );
- gAgentQueryManager.mActiveCacheQueries[texture_index] = 0;
- num_results++;
+ if (texture_id.notNull())
+ {
+ //llinfos << "Received cached texture " << (U32)texture_index << ": " << texture_id << llendl;
+ gAgentAvatarp->setCachedBakedTexture(LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)texture_index), texture_id);
+ //gAgentAvatarp->setTETexture( LLVOAvatar::sBakedTextureIndices[texture_index], texture_id );
+ gAgentQueryManager.mActiveCacheQueries[texture_index] = 0;
+ num_results++;
+ }
+ else
+ {
+ // no cache of this bake. request upload.
+ gAgentAvatarp->requestLayerSetUpload((EBakedTextureIndex)texture_index);
+ }
}
}
llinfos << "Received cached texture response for " << num_results << " textures." << llendl;
- avatarp->updateMeshTextures();
+ gAgentAvatarp->updateMeshTextures();
if (gAgentQueryManager.mNumPendingQueries == 0)
{
// RN: not sure why composites are disabled at this point
- avatarp->setCompositeUpdatesEnabled(TRUE);
+ gAgentAvatarp->setCompositeUpdatesEnabled(TRUE);
gAgent.sendAgentSetAppearance();
}
}
@@ -5909,11 +3160,10 @@ BOOL LLAgent::getHomePosGlobal( LLVector3d* pos_global )
void LLAgent::clearVisualParams(void *data)
{
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (avatarp)
+ if (isAgentAvatarValid())
{
- avatarp->clearVisualParamWeights();
- avatarp->updateVisualParams();
+ gAgentAvatarp->clearVisualParamWeights();
+ gAgentAvatarp->updateVisualParams();
}
}
@@ -5937,16 +3187,15 @@ bool LLAgent::teleportCore(bool is_local)
// sync with other viewers. Discuss in DEV-14145/VWR-6744 before reenabling.
// Stop all animation before actual teleporting
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (avatarp)
+ if (isAgentAvatarValid())
{
- for ( LLVOAvatar::AnimIterator anim_it= avatarp->mPlayingAnimations.begin();
- anim_it != avatarp->mPlayingAnimations.end();
+ for ( LLVOAvatar::AnimIterator anim_it= gAgentAvatarp->mPlayingAnimations.begin();
+ anim_it != gAgentAvatarp->mPlayingAnimations.end();
++anim_it)
{
- avatarp->stopMotion(anim_it->first);
+ gAgentAvatarp->stopMotion(anim_it->first);
}
- avatarp->processAnimationStateChanges();
+ gAgentAvatarp->processAnimationStateChanges();
}
#endif
@@ -5954,9 +3203,9 @@ bool LLAgent::teleportCore(bool is_local)
// yet if the teleport will succeed. Look in
// process_teleport_location_reply
- // close the map and find panels so we can see our destination
+ // close the map panel so we can see our destination.
+ // we don't close search floater, see EXT-5840.
LLFloaterReg::hideInstance("world_map");
- LLFloaterReg::hideInstance("search");
// hide land floater too - it'll be out of date
LLFloaterReg::hideInstance("about_land");
@@ -5966,7 +3215,7 @@ bool LLAgent::teleportCore(bool is_local)
// Close all pie menus, deselect land, etc.
// Don't change the camera until we know teleport succeeded. JC
- resetView(FALSE);
+ gAgentCamera.resetView(FALSE);
// local logic
LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TELEPORT_COUNT);
@@ -6139,13 +3388,11 @@ void LLAgent::stopCurrentAnimations()
{
// This function stops all current overriding animations on this
// avatar, propagating this change back to the server.
-
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (avatarp)
+ if (isAgentAvatarValid())
{
for ( LLVOAvatar::AnimIterator anim_it =
- avatarp->mPlayingAnimations.begin();
- anim_it != avatarp->mPlayingAnimations.end();
+ gAgentAvatarp->mPlayingAnimations.begin();
+ anim_it != gAgentAvatarp->mPlayingAnimations.end();
anim_it++)
{
if (anim_it->first ==
@@ -6158,7 +3405,7 @@ void LLAgent::stopCurrentAnimations()
else
{
// stop this animation locally
- avatarp->stopMotion(anim_it->first, TRUE);
+ gAgentAvatarp->stopMotion(anim_it->first, TRUE);
// ...and tell the server to tell everyone.
sendAnimationRequest(anim_it->first, ANIM_REQUEST_STOP);
}
@@ -6265,15 +3512,15 @@ void LLAgent::requestLeaveGodMode()
//-----------------------------------------------------------------------------
void LLAgent::sendAgentSetAppearance()
{
- if (mAvatarObject.isNull()) return;
+ if (!isAgentAvatarValid()) return;
- if (gAgentQueryManager.mNumPendingQueries > 0 && !gAgent.cameraCustomizeAvatar())
+ if (gAgentQueryManager.mNumPendingQueries > 0 && !gAgentCamera.cameraCustomizeAvatar())
{
return;
}
- llinfos << "TAT: Sent AgentSetAppearance: " << mAvatarObject->getBakedStatusForPrintout() << llendl;
+ llinfos << "TAT: Sent AgentSetAppearance: " << gAgentAvatarp->getBakedStatusForPrintout() << llendl;
//dumpAvatarTEs( "sendAgentSetAppearance()" );
LLMessageSystem* msg = gMessageSystem;
@@ -6287,7 +3534,7 @@ void LLAgent::sendAgentSetAppearance()
// NOTE -- when we start correcting all of the other Havok geometry
// to compensate for the COLLISION_TOLERANCE ugliness we will have
// to tweak this number again
- const LLVector3 body_size = mAvatarObject->mBodySize;
+ const LLVector3 body_size = gAgentAvatarp->mBodySize;
msg->addVector3Fast(_PREHASH_Size, body_size);
// To guard against out of order packets
@@ -6297,20 +3544,20 @@ void LLAgent::sendAgentSetAppearance()
// is texture data current relative to wearables?
// KLW - TAT this will probably need to check the local queue.
- BOOL textures_current = mAvatarObject->areTexturesCurrent();
+ BOOL textures_current = gAgentAvatarp->areTexturesCurrent();
for(U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++ )
{
const ETextureIndex texture_index = LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)baked_index);
// if we're not wearing a skirt, we don't need the texture to be baked
- if (texture_index == TEX_SKIRT_BAKED && !mAvatarObject->isWearingWearableType(WT_SKIRT))
+ if (texture_index == TEX_SKIRT_BAKED && !gAgentAvatarp->isWearingWearableType(WT_SKIRT))
{
continue;
}
// IMG_DEFAULT_AVATAR means not baked. 0 index should be ignored for baked textures
- if (!mAvatarObject->isTextureDefined(texture_index, 0))
+ if (!gAgentAvatarp->isTextureDefined(texture_index, 0))
{
textures_current = FALSE;
break;
@@ -6348,7 +3595,7 @@ void LLAgent::sendAgentSetAppearance()
msg->addU8Fast(_PREHASH_TextureIndex, (U8)texture_index);
}
msg->nextBlockFast(_PREHASH_ObjectData);
- mAvatarObject->sendAppearanceMessage( gMessageSystem );
+ gAgentAvatarp->sendAppearanceMessage( gMessageSystem );
}
else
{
@@ -6361,9 +3608,9 @@ void LLAgent::sendAgentSetAppearance()
S32 transmitted_params = 0;
- for (LLViewerVisualParam* param = (LLViewerVisualParam*)mAvatarObject->getFirstVisualParam();
+ for (LLViewerVisualParam* param = (LLViewerVisualParam*)gAgentAvatarp->getFirstVisualParam();
param;
- param = (LLViewerVisualParam*)mAvatarObject->getNextVisualParam())
+ param = (LLViewerVisualParam*)gAgentAvatarp->getNextVisualParam())
{
if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE)
{
@@ -6485,7 +3732,39 @@ void LLAgent::dumpGroupInfo()
//llinfos << "insig " << gAgent.mGroupInsigniaID << llendl;
}
+// Draw a representation of current autopilot target
+void LLAgent::renderAutoPilotTarget()
+{
+ if (mAutoPilot)
+ {
+ F32 height_meters;
+ LLVector3d target_global;
+
+ glMatrixMode(GL_MODELVIEW);
+ gGL.pushMatrix();
+
+ // not textured
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+
+ // lovely green
+ glColor4f(0.f, 1.f, 1.f, 1.f);
+
+ target_global = mAutoPilotTargetGlobal;
+
+ gGL.translatef((F32)(target_global.mdV[VX]), (F32)(target_global.mdV[VY]), (F32)(target_global.mdV[VZ]));
+
+ height_meters = 1.f;
+
+ glScalef(height_meters, height_meters, height_meters);
+
+ gSphere.render(1500.f);
+
+ gGL.popMatrix();
+ }
+}
+
/********************************************************************************/
+
LLAgentQueryManager gAgentQueryManager;
LLAgentQueryManager::LLAgentQueryManager() :
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 1573fd7131..a460077b7e 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -39,9 +39,6 @@
#include "llagentconstants.h"
#include "llagentdata.h" // gAgentID, gAgentSessionID
#include "llcharacter.h" // LLAnimPauseRequest
-#include "llfollowcam.h" // Ventrella
-#include "llhudeffectlookat.h" // EPointAtType
-#include "llhudeffectpointat.h" // ELookAtType
#include "llpointer.h"
#include "lluicolor.h"
#include "llvoavatardefines.h"
@@ -51,7 +48,6 @@ extern const U8 AGENT_STATE_TYPING; // Typing indication
extern const U8 AGENT_STATE_EDITING; // Set when agent has objects selected
class LLChat;
-class LLVOAvatarSelf;
class LLViewerRegion;
class LLMotion;
class LLToolset;
@@ -66,26 +62,6 @@ class LLAgentDropGroupViewerNode;
//--------------------------------------------------------------------
// Types
//--------------------------------------------------------------------
-enum ECameraMode
-{
- CAMERA_MODE_THIRD_PERSON,
- CAMERA_MODE_MOUSELOOK,
- CAMERA_MODE_CUSTOMIZE_AVATAR,
- CAMERA_MODE_FOLLOW
-};
-
-/** Camera Presets for CAMERA_MODE_THIRD_PERSON */
-enum ECameraPreset
-{
- /** Default preset, what the Third Person Mode actually was */
- CAMERA_PRESET_REAR_VIEW,
-
- /** "Looking at the Avatar from the front" */
- CAMERA_PRESET_FRONT_VIEW,
-
- /** "Above and to the left, over the shoulder, pulled back a little on the zoom" */
- CAMERA_PRESET_GROUP_VIEW
-};
enum EAnimRequest
{
@@ -129,7 +105,6 @@ public:
virtual ~LLAgent();
void init();
void cleanup();
- void setAvatarObject(LLVOAvatarSelf *avatar);
//--------------------------------------------------------------------
// Login
@@ -139,11 +114,12 @@ public:
void setFirstLogin(BOOL b) { mFirstLogin = b; }
// Return TRUE if the database reported this login as the first for this particular user.
BOOL isFirstLogin() const { return mFirstLogin; }
+ BOOL isInitialized() const { return mInitialized; }
public:
- BOOL mInitialized;
- BOOL mFirstLogin;
std::string mMOTD; // Message of the day
private:
+ BOOL mInitialized;
+ BOOL mFirstLogin;
boost::shared_ptr<LLAgentListener> mListener;
//--------------------------------------------------------------------
@@ -192,20 +168,6 @@ private:
/********************************************************************************
** **
- ** GENERAL ACCESSORS
- **/
-
-public:
- LLVOAvatarSelf* getAvatarObject() const { return mAvatarObject; }
-private:
- LLPointer<LLVOAvatarSelf> mAvatarObject; // NULL until avatar object sent down from simulator
-
-/** General Accessors
- ** **
- *******************************************************************************/
-
-/********************************************************************************
- ** **
** POSITION
**/
@@ -236,7 +198,7 @@ public:
// Coordinate System
//--------------------------------------------------------------------
public:
- LLCoordFrame getFrameAgent() const { return mFrameAgent; }
+ const LLCoordFrame& getFrameAgent() const { return mFrameAgent; }
void initOriginGlobal(const LLVector3d &origin_global); // Only to be used in ONE place
void resetAxes();
void resetAxes(const LLVector3 &look_at); // Makes reasonable left and up
@@ -279,6 +241,10 @@ private:
public:
S32 getRegionsVisited() const;
F64 getDistanceTraveled() const;
+ void setDistanceTraveled(F64 dist) { mDistanceTraveled = dist; }
+
+ const LLVector3d &getLastPositionGlobal() const { return mLastPositionGlobal; }
+ void setLastPositionGlobal(const LLVector3d &pos) { mLastPositionGlobal = pos; }
private:
std::set<U64> mRegionsVisited; // Stat - what distinct regions has the avatar been to?
F64 mDistanceTraveled; // Stat - how far has the avatar moved?
@@ -321,7 +287,6 @@ public:
//--------------------------------------------------------------------
public:
void heardChat(const LLUUID& id);
- void lookAtLastChat();
F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); }
LLUUID getLastChatter() const { return mLastChatterID; }
F32 getNearChatRadius() { return mNearChatRadius; }
@@ -430,6 +395,8 @@ public:
// Send message to simulator to force grabbed controls to be
// released, in case of a poorly written script.
void forceReleaseControls();
+ void setFlagsDirty() { mbFlagsDirty = TRUE; }
+
private:
S32 mControlsTakenCount[TOTAL_CONTROLS];
S32 mControlsTakenPassedOnCount[TOTAL_CONTROLS];
@@ -447,9 +414,11 @@ public:
void sendAnimationRequests(LLDynamicArray<LLUUID> &anim_ids, EAnimRequest request);
void sendAnimationRequest(const LLUUID &anim_id, EAnimRequest request);
void endAnimationUpdateUI();
+ void unpauseAnimation() { mPauseRequest = NULL; }
+ BOOL getCustomAnim() const { return mCustomAnim; }
+ void setCustomAnim(BOOL anim) { mCustomAnim = anim; }
+
private:
- LLFrameTimer mAnimationTimer; // Seconds that transition animation has been active
- F32 mAnimationDuration; // In seconds
BOOL mCustomAnim; // Current animation is ANIM_AGENT_CUSTOMIZE ?
LLAnimPauseRequest mPauseRequest;
BOOL mViewsPushed; // Keep track of whether or not we have pushed views
@@ -462,19 +431,6 @@ private:
** **
** MOVEMENT
**/
-
- //--------------------------------------------------------------------
- // Keys
- //--------------------------------------------------------------------
-public:
- void setKey(const S32 direction, S32 &key); // Sets key to +1 for +direction, -1 for -direction
-private:
- S32 mAtKey; // Either 1, 0, or -1. Indicates that movement key is pressed
- S32 mWalkKey; // Like AtKey, but causes less forward thrust
- S32 mLeftKey;
- S32 mUpKey;
- F32 mYawKey;
- F32 mPitchKey;
//--------------------------------------------------------------------
// Movement from user input
@@ -492,42 +448,6 @@ public:
void movePitch(F32 mag);
//--------------------------------------------------------------------
- // Orbit
- //--------------------------------------------------------------------
-public:
- void setOrbitLeftKey(F32 mag) { mOrbitLeftKey = mag; }
- void setOrbitRightKey(F32 mag) { mOrbitRightKey = mag; }
- void setOrbitUpKey(F32 mag) { mOrbitUpKey = mag; }
- void setOrbitDownKey(F32 mag) { mOrbitDownKey = mag; }
- void setOrbitInKey(F32 mag) { mOrbitInKey = mag; }
- void setOrbitOutKey(F32 mag) { mOrbitOutKey = mag; }
-private:
- F32 mOrbitLeftKey;
- F32 mOrbitRightKey;
- F32 mOrbitUpKey;
- F32 mOrbitDownKey;
- F32 mOrbitInKey;
- F32 mOrbitOutKey;
-
- //--------------------------------------------------------------------
- // Pan
- //--------------------------------------------------------------------
-public:
- void setPanLeftKey(F32 mag) { mPanLeftKey = mag; }
- void setPanRightKey(F32 mag) { mPanRightKey = mag; }
- void setPanUpKey(F32 mag) { mPanUpKey = mag; }
- void setPanDownKey(F32 mag) { mPanDownKey = mag; }
- void setPanInKey(F32 mag) { mPanInKey = mag; }
- void setPanOutKey(F32 mag) { mPanOutKey = mag; }
-private:
- F32 mPanUpKey;
- F32 mPanDownKey;
- F32 mPanLeftKey;
- F32 mPanRightKey;
- F32 mPanInKey;
- F32 mPanOutKey;
-
- //--------------------------------------------------------------------
// Move the avatar's frame
//--------------------------------------------------------------------
public:
@@ -640,232 +560,6 @@ private:
/********************************************************************************
** **
- ** CAMERA
- **/
-
- //--------------------------------------------------------------------
- // Mode
- //--------------------------------------------------------------------
-public:
- void changeCameraToDefault();
- void changeCameraToMouselook(BOOL animate = TRUE);
- void changeCameraToThirdPerson(BOOL animate = TRUE);
- void changeCameraToCustomizeAvatar(BOOL avatar_animate = TRUE, BOOL camera_animate = TRUE); // Trigger transition animation
- void changeCameraToFollow(BOOL animate = TRUE); // Ventrella
- BOOL cameraThirdPerson() const { return (mCameraMode == CAMERA_MODE_THIRD_PERSON && mLastCameraMode == CAMERA_MODE_THIRD_PERSON); }
- BOOL cameraMouselook() const { return (mCameraMode == CAMERA_MODE_MOUSELOOK && mLastCameraMode == CAMERA_MODE_MOUSELOOK); }
- BOOL cameraCustomizeAvatar() const { return (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR /*&& !mCameraAnimating*/); }
- BOOL cameraFollow() const { return (mCameraMode == CAMERA_MODE_FOLLOW && mLastCameraMode == CAMERA_MODE_FOLLOW); }
- ECameraMode getCameraMode() const { return mCameraMode; }
- void updateCamera(); // Call once per frame to update camera location/orientation
- void resetCamera(); // Slam camera into its default position
-private:
- ECameraMode mCameraMode; // Target mode after transition animation is done
- ECameraMode mLastCameraMode;
-
- //--------------------------------------------------------------------
- // Preset
- //--------------------------------------------------------------------
-public:
- void switchCameraPreset(ECameraPreset preset);
-
-private:
-
- /** Determines default camera offset depending on the current camera preset */
- LLVector3 getCameraOffsetInitial();
-
- /** Camera preset in Third Person Mode */
- ECameraPreset mCameraPreset;
-
- /** Initial camera offsets */
- std::map<ECameraPreset, LLVector3> mCameraOffsetInitial;
-
- /** Initial focus offsets */
- std::map<ECameraPreset, LLVector3d> mFocusOffsetInitial;
-
-
- //--------------------------------------------------------------------
- // Position
- //--------------------------------------------------------------------
-public:
- LLVector3d getCameraPositionGlobal() const;
- const LLVector3 &getCameraPositionAgent() const;
- LLVector3d calcCameraPositionTargetGlobal(BOOL *hit_limit = NULL); // Calculate the camera position target
- F32 getCameraMinOffGround(); // Minimum height off ground for this mode, meters
- void setCameraCollidePlane(const LLVector4 &plane) { mCameraCollidePlane = plane; }
- BOOL calcCameraMinDistance(F32 &obj_min_distance);
- F32 calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global);
- F32 getCurrentCameraBuildOffset() { return (F32)mCameraFocusOffset.length(); }
-private:
- F32 mCurrentCameraDistance; // Current camera offset from avatar
- F32 mTargetCameraDistance; // Target camera offset from avatar
- F32 mCameraFOVZoomFactor; // Amount of fov zoom applied to camera when zeroing in on an object
- F32 mCameraCurrentFOVZoomFactor; // Interpolated fov zoom
- F32 mCameraFOVDefault; // Default field of view that is basis for FOV zoom effect
- LLVector4 mCameraCollidePlane; // Colliding plane for camera
- F32 mCameraZoomFraction; // Mousewheel driven fraction of zoom
- LLVector3 mCameraPositionAgent; // Camera position in agent coordinates
- LLVector3 mCameraVirtualPositionAgent; // Camera virtual position (target) before performing FOV zoom
- LLVector3d mCameraSmoothingLastPositionGlobal;
- LLVector3d mCameraSmoothingLastPositionAgent;
- BOOL mCameraSmoothingStop;
- LLVector3 mCameraLag; // Third person camera lag
- LLVector3 mCameraUpVector; // Camera's up direction in world coordinates (determines the 'roll' of the view)
-
- //--------------------------------------------------------------------
- // Follow
- //--------------------------------------------------------------------
-public:
- void setUsingFollowCam(bool using_follow_cam);
-private:
- LLFollowCam mFollowCam; // Ventrella
-
- //--------------------------------------------------------------------
- // Sit
- //--------------------------------------------------------------------
-public:
- void setupSitCamera();
- BOOL sitCameraEnabled() { return mSitCameraEnabled; }
- void setSitCamera(const LLUUID &object_id,
- const LLVector3 &camera_pos = LLVector3::zero, const LLVector3 &camera_focus = LLVector3::zero);
-private:
- LLPointer<LLViewerObject> mSitCameraReferenceObject; // Object to which camera is related when sitting
- BOOL mSitCameraEnabled; // Use provided camera information when sitting?
- LLVector3 mSitCameraPos; // Root relative camera pos when sitting
- LLVector3 mSitCameraFocus; // Root relative camera target when sitting
-
- //--------------------------------------------------------------------
- // Animation
- //--------------------------------------------------------------------
-public:
- void setCameraAnimating(BOOL b) { mCameraAnimating = b; }
- BOOL getCameraAnimating() { return mCameraAnimating; }
- void setAnimationDuration(F32 seconds) { mAnimationDuration = seconds; }
- void startCameraAnimation();
- void stopCameraAnimation();
-private:
- BOOL mCameraAnimating; // Camera is transitioning from one mode to another
- LLVector3d mAnimationCameraStartGlobal; // Camera start position, global coords
- LLVector3d mAnimationFocusStartGlobal; // Camera focus point, global coords
-
- //--------------------------------------------------------------------
- // Focus
- //--------------------------------------------------------------------
-public:
- LLVector3d calcFocusPositionTargetGlobal();
- LLVector3 calcFocusOffset(LLViewerObject *object, LLVector3 pos_agent, S32 x, S32 y);
- BOOL getFocusOnAvatar() const { return mFocusOnAvatar; }
- LLPointer<LLViewerObject>& getFocusObject() { return mFocusObject; }
- F32 getFocusObjectDist() const { return mFocusObjectDist; }
- void updateFocusOffset();
- void validateFocusObject();
- void setFocusGlobal(const LLPickInfo& pick);
- void setFocusGlobal(const LLVector3d &focus, const LLUUID &object_id = LLUUID::null);
- void setFocusOnAvatar(BOOL focus, BOOL animate);
- void setCameraPosAndFocusGlobal(const LLVector3d& pos, const LLVector3d& focus, const LLUUID &object_id);
- void clearFocusObject();
- void setFocusObject(LLViewerObject* object);
- void setObjectTracking(BOOL track) { mTrackFocusObject = track; }
- const LLVector3d &getFocusGlobal() const { return mFocusGlobal; }
- const LLVector3d &getFocusTargetGlobal() const { return mFocusTargetGlobal; }
-private:
- LLVector3d mCameraFocusOffset; // Offset from focus point in build mode
- LLVector3d mCameraFocusOffsetTarget; // Target towards which we are lerping the camera's focus offset
- BOOL mFocusOnAvatar;
- LLVector3d mFocusGlobal;
- LLVector3d mFocusTargetGlobal;
- LLPointer<LLViewerObject> mFocusObject;
- F32 mFocusObjectDist;
- LLVector3 mFocusObjectOffset;
- F32 mFocusDotRadius; // Meters
- BOOL mTrackFocusObject;
- F32 mUIOffset;
-
- //--------------------------------------------------------------------
- // Lookat / Pointat
- //--------------------------------------------------------------------
-public:
- void updateLookAt(const S32 mouse_x, const S32 mouse_y);
- BOOL setLookAt(ELookAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero);
- ELookAtType getLookAtType();
- void slamLookAt(const LLVector3 &look_at); // Set the physics data
- BOOL setPointAt(EPointAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero);
- EPointAtType getPointAtType();
-public:
- LLPointer<LLHUDEffectLookAt> mLookAt;
- LLPointer<LLHUDEffectPointAt> mPointAt;
-
- //--------------------------------------------------------------------
- // Third person
- //--------------------------------------------------------------------
-public:
- LLVector3d calcThirdPersonFocusOffset();
- void setThirdPersonHeadOffset(LLVector3 offset) { mThirdPersonHeadOffset = offset; }
-private:
- LLVector3 mThirdPersonHeadOffset; // Head offset for third person camera position
-
- //--------------------------------------------------------------------
- // Orbit
- //--------------------------------------------------------------------
-public:
- void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point
- void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point
- void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point
-
- //--------------------------------------------------------------------
- // Zoom
- //--------------------------------------------------------------------
-public:
- void handleScrollWheel(S32 clicks); // Mousewheel driven zoom
- void cameraZoomIn(const F32 factor); // Zoom in by fraction of current distance
- F32 getCameraZoomFraction(); // Get camera zoom as fraction of minimum and maximum zoom
- void setCameraZoomFraction(F32 fraction); // Set camera zoom as fraction of minimum and maximum zoom
- F32 calcCameraFOVZoomFactor();
-
- //--------------------------------------------------------------------
- // Pan
- //--------------------------------------------------------------------
-public:
- void cameraPanIn(const F32 meters);
- void cameraPanLeft(const F32 meters);
- void cameraPanUp(const F32 meters);
-
- //--------------------------------------------------------------------
- // View
- //--------------------------------------------------------------------
-public:
- // Called whenever the agent moves. Puts camera back in default position, deselects items, etc.
- void resetView(BOOL reset_camera = TRUE, BOOL change_camera = FALSE);
- // Called on camera movement. Unlocks camera from the default position behind the avatar.
- void unlockView();
-
- //--------------------------------------------------------------------
- // Mouselook
- //--------------------------------------------------------------------
-public:
- BOOL getForceMouselook() const { return mForceMouselook; }
- void setForceMouselook(BOOL mouselook) { mForceMouselook = mouselook; }
-private:
- BOOL mForceMouselook;
-
- //--------------------------------------------------------------------
- // HUD
- //--------------------------------------------------------------------
-public:
- const LLColor4 &getEffectColor();
- void setEffectColor(const LLColor4 &color);
-public:
- F32 mHUDTargetZoom; // Target zoom level for HUD objects (used when editing)
- F32 mHUDCurZoom; // Current animated zoom level for HUD objects
-private:
- LLUIColor mEffectColor;
-
-/** Camera
- ** **
- *******************************************************************************/
-
-/********************************************************************************
- ** **
** ACCESS
**/
@@ -888,7 +582,8 @@ private:
// God
//--------------------------------------------------------------------
public:
- BOOL isGodlike() const;
+ bool isGodlike() const;
+ bool isGodlikeWithoutAdminMenuFakery() const;
U8 getGodLevel() const;
void setAdminOverride(BOOL b);
void setGodLevel(U8 god_level);
@@ -937,8 +632,9 @@ public:
LLQuaternion getHeadRotation();
BOOL needsRenderAvatar(); // TRUE when camera mode is such that your own avatar should draw
BOOL needsRenderHead();
-public:
- F32 mDrawDistance;
+ void setShowAvatar(BOOL show) { mShowAvatar = show; }
+ BOOL getShowAvatar() const { return mShowAvatar; }
+
private:
BOOL mShowAvatar; // Should we render the avatar?
U32 mAppearanceSerialNum;
@@ -953,6 +649,15 @@ public:
private:
U8 mRenderState; // Current behavior state of agent
+ //--------------------------------------------------------------------
+ // HUD
+ //--------------------------------------------------------------------
+public:
+ const LLColor4 &getEffectColor();
+ void setEffectColor(const LLColor4 &color);
+private:
+ LLUIColor mEffectColor;
+
/** Rendering
** **
*******************************************************************************/
diff --git a/indra/newview/llagentaccess.cpp b/indra/newview/llagentaccess.cpp
index eb978eb6c1..915dabb935 100644
--- a/indra/newview/llagentaccess.cpp
+++ b/indra/newview/llagentaccess.cpp
@@ -69,12 +69,21 @@ bool LLAgentAccess::isGodlike() const
#endif
}
+bool LLAgentAccess::isGodlikeWithoutAdminMenuFakery() const
+{
+#ifdef HACKED_GODLIKE_VIEWER
+ return true;
+#else
+ return mGodLevel > GOD_NOT;
+#endif
+}
+
U8 LLAgentAccess::getGodLevel() const
{
#ifdef HACKED_GODLIKE_VIEWER
return GOD_MAINTENANCE;
#else
- if(mAdminOverride) return GOD_FULL;
+ if(mAdminOverride) return GOD_FULL; // :(
return mGodLevel;
#endif
}
diff --git a/indra/newview/llagentaccess.h b/indra/newview/llagentaccess.h
index 93d2f0a371..49da5f44cc 100644
--- a/indra/newview/llagentaccess.h
+++ b/indra/newview/llagentaccess.h
@@ -48,6 +48,7 @@ public:
void setGodLevel(U8 god_level);
bool isGodlike() const;
+ bool isGodlikeWithoutAdminMenuFakery() const;
U8 getGodLevel() const;
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
new file mode 100644
index 0000000000..9638d0e94f
--- /dev/null
+++ b/indra/newview/llagentcamera.cpp
@@ -0,0 +1,2869 @@
+/**
+ * @file llagentcamera.cpp
+ * @brief LLAgent class implementation
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llagentcamera.h"
+
+#include "pipeline.h"
+
+#include "llagent.h"
+#include "llanimationstates.h"
+#include "llfloatercamera.h"
+#include "llfloatercustomize.h"
+#include "llfloaterreg.h"
+#include "llhudmanager.h"
+#include "lljoystickbutton.h"
+#include "llselectmgr.h"
+#include "llsmoothstep.h"
+#include "lltoolmgr.h"
+#include "llviewercamera.h"
+#include "llviewercontrol.h"
+#include "llviewerjoystick.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+#include "llvoavatarself.h"
+#include "llwindow.h"
+#include "llworld.h"
+
+using namespace LLVOAvatarDefines;
+
+extern LLMenuBarGL* gMenuBarView;
+
+// Mousewheel camera zoom
+const F32 MIN_ZOOM_FRACTION = 0.25f;
+const F32 INITIAL_ZOOM_FRACTION = 1.f;
+const F32 MAX_ZOOM_FRACTION = 8.f;
+
+const F32 CAMERA_ZOOM_HALF_LIFE = 0.07f; // seconds
+const F32 FOV_ZOOM_HALF_LIFE = 0.07f; // seconds
+
+const F32 CAMERA_FOCUS_HALF_LIFE = 0.f;//0.02f;
+const F32 CAMERA_LAG_HALF_LIFE = 0.25f;
+const F32 MIN_CAMERA_LAG = 0.5f;
+const F32 MAX_CAMERA_LAG = 5.f;
+
+const F32 CAMERA_COLLIDE_EPSILON = 0.1f;
+const F32 MIN_CAMERA_DISTANCE = 0.1f;
+
+const F32 AVATAR_ZOOM_MIN_X_FACTOR = 0.55f;
+const F32 AVATAR_ZOOM_MIN_Y_FACTOR = 0.7f;
+const F32 AVATAR_ZOOM_MIN_Z_FACTOR = 1.15f;
+
+const F32 MAX_CAMERA_DISTANCE_FROM_AGENT = 50.f;
+
+const F32 MAX_CAMERA_SMOOTH_DISTANCE = 50.0f;
+
+const F32 HEAD_BUFFER_SIZE = 0.3f;
+
+const F32 CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP = 0.2f;
+
+const F32 LAND_MIN_ZOOM = 0.15f;
+
+const F32 AVATAR_MIN_ZOOM = 0.5f;
+const F32 OBJECT_MIN_ZOOM = 0.02f;
+
+const F32 APPEARANCE_MIN_ZOOM = 0.39f;
+const F32 APPEARANCE_MAX_ZOOM = 8.f;
+
+const F32 GROUND_TO_AIR_CAMERA_TRANSITION_TIME = 0.5f;
+const F32 GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME = 0.5f;
+
+const F32 OBJECT_EXTENTS_PADDING = 0.5f;
+
+// The agent instance.
+LLAgentCamera gAgentCamera;
+
+//-----------------------------------------------------------------------------
+// LLAgentCamera()
+//-----------------------------------------------------------------------------
+LLAgentCamera::LLAgentCamera() :
+ mInitialized(false),
+
+ mDrawDistance( DEFAULT_FAR_PLANE ),
+
+ mLookAt(NULL),
+ mPointAt(NULL),
+
+ mHUDTargetZoom(1.f),
+ mHUDCurZoom(1.f),
+
+ mForceMouselook(FALSE),
+
+ mCameraMode( CAMERA_MODE_THIRD_PERSON ),
+ mLastCameraMode( CAMERA_MODE_THIRD_PERSON ),
+
+ mCameraPreset(CAMERA_PRESET_REAR_VIEW),
+
+ mCameraAnimating( FALSE ),
+ mAnimationCameraStartGlobal(),
+ mAnimationFocusStartGlobal(),
+ mAnimationTimer(),
+ mAnimationDuration(0.33f),
+
+ mCameraFOVZoomFactor(0.f),
+ mCameraCurrentFOVZoomFactor(0.f),
+ mCameraFocusOffset(),
+ mCameraFOVDefault(DEFAULT_FIELD_OF_VIEW),
+
+ mCameraCollidePlane(),
+
+ mCurrentCameraDistance(2.f), // meters, set in init()
+ mTargetCameraDistance(2.f),
+ mCameraZoomFraction(1.f), // deprecated
+ mThirdPersonHeadOffset(0.f, 0.f, 1.f),
+ mSitCameraEnabled(FALSE),
+ mCameraSmoothingLastPositionGlobal(),
+ mCameraSmoothingLastPositionAgent(),
+ mCameraSmoothingStop(false),
+
+ mCameraUpVector(LLVector3::z_axis), // default is straight up
+
+ mFocusOnAvatar(TRUE),
+ mFocusGlobal(),
+ mFocusTargetGlobal(),
+ mFocusObject(NULL),
+ mFocusObjectDist(0.f),
+ mFocusObjectOffset(),
+ mFocusDotRadius( 0.1f ), // meters
+ mTrackFocusObject(TRUE),
+ mUIOffset(0.f),
+
+ mAtKey(0), // Either 1, 0, or -1... indicates that movement-key is pressed
+ mWalkKey(0), // like AtKey, but causes less forward thrust
+ mLeftKey(0),
+ mUpKey(0),
+ mYawKey(0.f),
+ mPitchKey(0.f),
+
+ mOrbitLeftKey(0.f),
+ mOrbitRightKey(0.f),
+ mOrbitUpKey(0.f),
+ mOrbitDownKey(0.f),
+ mOrbitInKey(0.f),
+ mOrbitOutKey(0.f),
+
+ mPanUpKey(0.f),
+ mPanDownKey(0.f),
+ mPanLeftKey(0.f),
+ mPanRightKey(0.f),
+ mPanInKey(0.f),
+ mPanOutKey(0.f)
+{
+ mFollowCam.setMaxCameraDistantFromSubject( MAX_CAMERA_DISTANCE_FROM_AGENT );
+
+ clearGeneralKeys();
+ clearOrbitKeys();
+ clearPanKeys();
+}
+
+// Requires gSavedSettings to be initialized.
+//-----------------------------------------------------------------------------
+// init()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::init()
+{
+ // *Note: this is where LLViewerCamera::getInstance() used to be constructed.
+
+ mDrawDistance = gSavedSettings.getF32("RenderFarClip");
+
+ LLViewerCamera::getInstance()->setView(DEFAULT_FIELD_OF_VIEW);
+ // Leave at 0.1 meters until we have real near clip management
+ LLViewerCamera::getInstance()->setNear(0.1f);
+ LLViewerCamera::getInstance()->setFar(mDrawDistance); // if you want to change camera settings, do so in camera.h
+ LLViewerCamera::getInstance()->setAspect( gViewerWindow->getWorldViewAspectRatio() ); // default, overridden in LLViewerWindow::reshape
+ LLViewerCamera::getInstance()->setViewHeightInPixels(768); // default, overridden in LLViewerWindow::reshape
+
+ mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild"));
+
+ mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
+
+ mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getVector3("CameraOffsetRearView");
+ mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getVector3("CameraOffsetFrontView");
+ mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getVector3("CameraOffsetGroupView");
+
+ mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getVector3d("FocusOffsetRearView");
+ mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getVector3d("FocusOffsetFrontView");
+ mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getVector3d("FocusOffsetGroupView");
+
+ mCameraCollidePlane.clearVec();
+ mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale");
+ mTargetCameraDistance = mCurrentCameraDistance;
+ mCameraZoomFraction = 1.f;
+ mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject");
+
+ mInitialized = true;
+}
+
+//-----------------------------------------------------------------------------
+// cleanup()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::cleanup()
+{
+ setSitCamera(LLUUID::null);
+
+ if(mLookAt)
+ {
+ mLookAt->markDead() ;
+ mLookAt = NULL;
+ }
+ if(mPointAt)
+ {
+ mPointAt->markDead() ;
+ mPointAt = NULL;
+ }
+ setFocusObject(NULL);
+}
+
+void LLAgentCamera::setAvatarObject(LLVOAvatarSelf* avatar)
+{
+ if (!mLookAt)
+ {
+ mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT);
+ }
+ if (!mPointAt)
+ {
+ mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT);
+ }
+
+ if (!mLookAt.isNull())
+ {
+ mLookAt->setSourceObject(avatar);
+ }
+ if (!mPointAt.isNull())
+ {
+ mPointAt->setSourceObject(avatar);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// LLAgent()
+//-----------------------------------------------------------------------------
+LLAgentCamera::~LLAgentCamera()
+{
+ cleanup();
+
+ // *Note: this is where LLViewerCamera::getInstance() used to be deleted.
+}
+
+// Change camera back to third person, stop the autopilot,
+// deselect stuff, etc.
+//-----------------------------------------------------------------------------
+// resetView()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera)
+{
+ if (gAgent.getAutoPilot())
+ {
+ gAgent.stopAutoPilot(TRUE);
+ }
+
+ if (!gNoRender)
+ {
+ LLSelectMgr::getInstance()->unhighlightAll();
+
+ // By popular request, keep land selection while walking around. JC
+ // LLViewerParcelMgr::getInstance()->deselectLand();
+
+ // force deselect when walking and attachment is selected
+ // this is so people don't wig out when their avatar moves without animating
+ if (LLSelectMgr::getInstance()->getSelection()->isAttachment())
+ {
+ LLSelectMgr::getInstance()->deselectAll();
+ }
+
+ // Hide all popup menus
+ gMenuHolder->hideMenus();
+ }
+
+ if (change_camera && !gSavedSettings.getBOOL("FreezeTime"))
+ {
+ changeCameraToDefault();
+
+ if (LLViewerJoystick::getInstance()->getOverrideCamera())
+ {
+ handle_toggle_flycam();
+ }
+
+ // reset avatar mode from eventual residual motion
+ if (LLToolMgr::getInstance()->inBuildMode())
+ {
+ LLViewerJoystick::getInstance()->moveAvatar(true);
+ }
+
+ //Camera Tool is needed for Free Camera Control Mode
+ if (!LLFloaterCamera::inFreeCameraMode())
+ {
+ LLFloaterReg::hideInstance("build");
+
+ // Switch back to basic toolset
+ LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
+ }
+
+ gViewerWindow->showCursor();
+ }
+
+
+ if (reset_camera && !gSavedSettings.getBOOL("FreezeTime"))
+ {
+ if (!gViewerWindow->getLeftMouseDown() && cameraThirdPerson())
+ {
+ // leaving mouse-steer mode
+ LLVector3 agent_at_axis = gAgent.getAtAxis();
+ agent_at_axis -= projected_vec(agent_at_axis, gAgent.getReferenceUpVector());
+ agent_at_axis.normalize();
+ gAgent.resetAxes(lerp(gAgent.getAtAxis(), agent_at_axis, LLCriticalDamp::getInterpolant(0.3f)));
+ }
+
+ setFocusOnAvatar(TRUE, ANIMATE);
+
+ mCameraFOVZoomFactor = 0.f;
+ }
+
+ mHUDTargetZoom = 1.f;
+}
+
+// Allow camera to be moved somewhere other than behind avatar.
+//-----------------------------------------------------------------------------
+// unlockView()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::unlockView()
+{
+ if (getFocusOnAvatar())
+ {
+ if (isAgentAvatarValid())
+ {
+ setFocusGlobal(LLVector3d::zero, gAgentAvatarp->mID);
+ }
+ setFocusOnAvatar(FALSE, FALSE); // no animation
+ }
+}
+
+//-----------------------------------------------------------------------------
+// slamLookAt()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::slamLookAt(const LLVector3 &look_at)
+{
+ LLVector3 look_at_norm = look_at;
+ look_at_norm.mV[VZ] = 0.f;
+ look_at_norm.normalize();
+ gAgent.resetAxes(look_at_norm);
+}
+
+//-----------------------------------------------------------------------------
+// calcFocusOffset()
+//-----------------------------------------------------------------------------
+LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 original_focus_point, S32 x, S32 y)
+{
+ LLMatrix4 obj_matrix = object->getRenderMatrix();
+ LLQuaternion obj_rot = object->getRenderRotation();
+ LLVector3 obj_pos = object->getRenderPosition();
+
+ BOOL is_avatar = object->isAvatar();
+ // if is avatar - don't do any funk heuristics to position the focal point
+ // see DEV-30589
+ if (is_avatar)
+ {
+ return original_focus_point - obj_pos;
+ }
+
+
+ LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation
+ LLVector3 object_extents = object->getScale();
+ // make sure they object extents are non-zero
+ object_extents.clamp(0.001f, F32_MAX);
+
+ // obj_to_cam_ray is unit vector pointing from object center to camera, in the coordinate frame of the object
+ LLVector3 obj_to_cam_ray = obj_pos - LLViewerCamera::getInstance()->getOrigin();
+ obj_to_cam_ray.rotVec(inv_obj_rot);
+ obj_to_cam_ray.normalize();
+
+ // obj_to_cam_ray_proportions are the (positive) ratios of
+ // the obj_to_cam_ray x,y,z components with the x,y,z object dimensions.
+ LLVector3 obj_to_cam_ray_proportions;
+ obj_to_cam_ray_proportions.mV[VX] = llabs(obj_to_cam_ray.mV[VX] / object_extents.mV[VX]);
+ obj_to_cam_ray_proportions.mV[VY] = llabs(obj_to_cam_ray.mV[VY] / object_extents.mV[VY]);
+ obj_to_cam_ray_proportions.mV[VZ] = llabs(obj_to_cam_ray.mV[VZ] / object_extents.mV[VZ]);
+
+ // find the largest ratio stored in obj_to_cam_ray_proportions
+ // this corresponds to the object's local axial plane (XY, YZ, XZ) that is *most* facing the camera
+ LLVector3 longest_object_axis;
+ // is x-axis longest?
+ if (obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VY]
+ && obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VZ])
+ {
+ // then grab it
+ longest_object_axis.setVec(obj_matrix.getFwdRow4());
+ }
+ // is y-axis longest?
+ else if (obj_to_cam_ray_proportions.mV[VY] > obj_to_cam_ray_proportions.mV[VZ])
+ {
+ // then grab it
+ longest_object_axis.setVec(obj_matrix.getLeftRow4());
+ }
+ // otherwise, use z axis
+ else
+ {
+ longest_object_axis.setVec(obj_matrix.getUpRow4());
+ }
+
+ // Use this axis as the normal to project mouse click on to plane with that normal, at the object center.
+ // This generates a point behind the mouse cursor that is approximately in the middle of the object in
+ // terms of depth.
+ // We do this to allow the camera rotation tool to "tumble" the object by rotating the camera.
+ // If the focus point were the object surface under the mouse, camera rotation would introduce an undesirable
+ // eccentricity to the object orientation
+ LLVector3 focus_plane_normal(longest_object_axis);
+ focus_plane_normal.normalize();
+
+ LLVector3d focus_pt_global;
+ gViewerWindow->mousePointOnPlaneGlobal(focus_pt_global, x, y, gAgent.getPosGlobalFromAgent(obj_pos), focus_plane_normal);
+ LLVector3 focus_pt = gAgent.getPosAgentFromGlobal(focus_pt_global);
+
+ // find vector from camera to focus point in object space
+ LLVector3 camera_to_focus_vec = focus_pt - LLViewerCamera::getInstance()->getOrigin();
+ camera_to_focus_vec.rotVec(inv_obj_rot);
+
+ // find vector from object origin to focus point in object coordinates
+ LLVector3 focus_offset_from_object_center = focus_pt - obj_pos;
+ // convert to object-local space
+ focus_offset_from_object_center.rotVec(inv_obj_rot);
+
+ // We need to project the focus point back into the bounding box of the focused object.
+ // Do this by calculating the XYZ scale factors needed to get focus offset back in bounds along the camera_focus axis
+ LLVector3 clip_fraction;
+
+ // for each axis...
+ for (U32 axis = VX; axis <= VZ; axis++)
+ {
+ //...calculate distance that focus offset sits outside of bounding box along that axis...
+ //NOTE: dist_out_of_bounds keeps the sign of focus_offset_from_object_center
+ F32 dist_out_of_bounds;
+ if (focus_offset_from_object_center.mV[axis] > 0.f)
+ {
+ dist_out_of_bounds = llmax(0.f, focus_offset_from_object_center.mV[axis] - (object_extents.mV[axis] * 0.5f));
+ }
+ else
+ {
+ dist_out_of_bounds = llmin(0.f, focus_offset_from_object_center.mV[axis] + (object_extents.mV[axis] * 0.5f));
+ }
+
+ //...then calculate the scale factor needed to push camera_to_focus_vec back in bounds along current axis
+ if (llabs(camera_to_focus_vec.mV[axis]) < 0.0001f)
+ {
+ // don't divide by very small number
+ clip_fraction.mV[axis] = 0.f;
+ }
+ else
+ {
+ clip_fraction.mV[axis] = dist_out_of_bounds / camera_to_focus_vec.mV[axis];
+ }
+ }
+
+ LLVector3 abs_clip_fraction = clip_fraction;
+ abs_clip_fraction.abs();
+
+ // find axis of focus offset that is *most* outside the bounding box and use that to
+ // rescale focus offset to inside object extents
+ if (abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VY]
+ && abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VZ])
+ {
+ focus_offset_from_object_center -= clip_fraction.mV[VX] * camera_to_focus_vec;
+ }
+ else if (abs_clip_fraction.mV[VY] > abs_clip_fraction.mV[VZ])
+ {
+ focus_offset_from_object_center -= clip_fraction.mV[VY] * camera_to_focus_vec;
+ }
+ else
+ {
+ focus_offset_from_object_center -= clip_fraction.mV[VZ] * camera_to_focus_vec;
+ }
+
+ // convert back to world space
+ focus_offset_from_object_center.rotVec(obj_rot);
+
+ // now, based on distance of camera from object relative to object size
+ // push the focus point towards the near surface of the object when (relatively) close to the objcet
+ // or keep the focus point in the object middle when (relatively) far
+ // NOTE: leave focus point in middle of avatars, since the behavior you want when alt-zooming on avatars
+ // is almost always "tumble about middle" and not "spin around surface point"
+ if (!is_avatar)
+ {
+ LLVector3 obj_rel = original_focus_point - object->getRenderPosition();
+
+ //now that we have the object relative position, we should bias toward the center of the object
+ //based on the distance of the camera to the focus point vs. the distance of the camera to the focus
+
+ F32 relDist = llabs(obj_rel * LLViewerCamera::getInstance()->getAtAxis());
+ F32 viewDist = dist_vec(obj_pos + obj_rel, LLViewerCamera::getInstance()->getOrigin());
+
+
+ LLBBox obj_bbox = object->getBoundingBoxAgent();
+ F32 bias = 0.f;
+
+ // virtual_camera_pos is the camera position we are simulating by backing the camera off
+ // and adjusting the FOV
+ LLVector3 virtual_camera_pos = gAgent.getPosAgentFromGlobal(mFocusTargetGlobal + (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor));
+
+ // if the camera is inside the object (large, hollow objects, for example)
+ // leave focus point all the way to destination depth, away from object center
+ if(!obj_bbox.containsPointAgent(virtual_camera_pos))
+ {
+ // perform magic number biasing of focus point towards surface vs. planar center
+ bias = clamp_rescale(relDist/viewDist, 0.1f, 0.7f, 0.0f, 1.0f);
+ obj_rel = lerp(focus_offset_from_object_center, obj_rel, bias);
+ }
+
+ focus_offset_from_object_center = obj_rel;
+ }
+
+ return focus_offset_from_object_center;
+}
+
+//-----------------------------------------------------------------------------
+// calcCameraMinDistance()
+//-----------------------------------------------------------------------------
+BOOL LLAgentCamera::calcCameraMinDistance(F32 &obj_min_distance)
+{
+ BOOL soft_limit = FALSE; // is the bounding box to be treated literally (volumes) or as an approximation (avatars)
+
+ if (!mFocusObject || mFocusObject->isDead())
+ {
+ obj_min_distance = 0.f;
+ return TRUE;
+ }
+
+ if (mFocusObject->mDrawable.isNull())
+ {
+#ifdef LL_RELEASE_FOR_DOWNLOAD
+ llwarns << "Focus object with no drawable!" << llendl;
+#else
+ mFocusObject->dump();
+ llerrs << "Focus object with no drawable!" << llendl;
+#endif
+ obj_min_distance = 0.f;
+ return TRUE;
+ }
+
+ LLQuaternion inv_object_rot = ~mFocusObject->getRenderRotation();
+ LLVector3 target_offset_origin = mFocusObjectOffset;
+ LLVector3 camera_offset_target(getCameraPositionAgent() - gAgent.getPosAgentFromGlobal(mFocusTargetGlobal));
+
+ // convert offsets into object local space
+ camera_offset_target.rotVec(inv_object_rot);
+ target_offset_origin.rotVec(inv_object_rot);
+
+ // push around object extents based on target offset
+ LLVector3 object_extents = mFocusObject->getScale();
+ if (mFocusObject->isAvatar())
+ {
+ // fudge factors that lets you zoom in on avatars a bit more (which don't do FOV zoom)
+ object_extents.mV[VX] *= AVATAR_ZOOM_MIN_X_FACTOR;
+ object_extents.mV[VY] *= AVATAR_ZOOM_MIN_Y_FACTOR;
+ object_extents.mV[VZ] *= AVATAR_ZOOM_MIN_Z_FACTOR;
+ soft_limit = TRUE;
+ }
+ LLVector3 abs_target_offset = target_offset_origin;
+ abs_target_offset.abs();
+
+ LLVector3 target_offset_dir = target_offset_origin;
+ F32 object_radius = mFocusObject->getVObjRadius();
+
+ BOOL target_outside_object_extents = FALSE;
+
+ for (U32 i = VX; i <= VZ; i++)
+ {
+ if (abs_target_offset.mV[i] * 2.f > object_extents.mV[i] + OBJECT_EXTENTS_PADDING)
+ {
+ target_outside_object_extents = TRUE;
+ }
+ if (camera_offset_target.mV[i] > 0.f)
+ {
+ object_extents.mV[i] -= target_offset_origin.mV[i] * 2.f;
+ }
+ else
+ {
+ object_extents.mV[i] += target_offset_origin.mV[i] * 2.f;
+ }
+ }
+
+ // don't shrink the object extents so far that the object inverts
+ object_extents.clamp(0.001f, F32_MAX);
+
+ // move into first octant
+ LLVector3 camera_offset_target_abs_norm = camera_offset_target;
+ camera_offset_target_abs_norm.abs();
+ // make sure offset is non-zero
+ camera_offset_target_abs_norm.clamp(0.001f, F32_MAX);
+ camera_offset_target_abs_norm.normalize();
+
+ // find camera position relative to normalized object extents
+ LLVector3 camera_offset_target_scaled = camera_offset_target_abs_norm;
+ camera_offset_target_scaled.mV[VX] /= object_extents.mV[VX];
+ camera_offset_target_scaled.mV[VY] /= object_extents.mV[VY];
+ camera_offset_target_scaled.mV[VZ] /= object_extents.mV[VZ];
+
+ if (camera_offset_target_scaled.mV[VX] > camera_offset_target_scaled.mV[VY] &&
+ camera_offset_target_scaled.mV[VX] > camera_offset_target_scaled.mV[VZ])
+ {
+ if (camera_offset_target_abs_norm.mV[VX] < 0.001f)
+ {
+ obj_min_distance = object_extents.mV[VX] * 0.5f;
+ }
+ else
+ {
+ obj_min_distance = object_extents.mV[VX] * 0.5f / camera_offset_target_abs_norm.mV[VX];
+ }
+ }
+ else if (camera_offset_target_scaled.mV[VY] > camera_offset_target_scaled.mV[VZ])
+ {
+ if (camera_offset_target_abs_norm.mV[VY] < 0.001f)
+ {
+ obj_min_distance = object_extents.mV[VY] * 0.5f;
+ }
+ else
+ {
+ obj_min_distance = object_extents.mV[VY] * 0.5f / camera_offset_target_abs_norm.mV[VY];
+ }
+ }
+ else
+ {
+ if (camera_offset_target_abs_norm.mV[VZ] < 0.001f)
+ {
+ obj_min_distance = object_extents.mV[VZ] * 0.5f;
+ }
+ else
+ {
+ obj_min_distance = object_extents.mV[VZ] * 0.5f / camera_offset_target_abs_norm.mV[VZ];
+ }
+ }
+
+ LLVector3 object_split_axis;
+ LLVector3 target_offset_scaled = target_offset_origin;
+ target_offset_scaled.abs();
+ target_offset_scaled.normalize();
+ target_offset_scaled.mV[VX] /= object_extents.mV[VX];
+ target_offset_scaled.mV[VY] /= object_extents.mV[VY];
+ target_offset_scaled.mV[VZ] /= object_extents.mV[VZ];
+
+ if (target_offset_scaled.mV[VX] > target_offset_scaled.mV[VY] &&
+ target_offset_scaled.mV[VX] > target_offset_scaled.mV[VZ])
+ {
+ object_split_axis = LLVector3::x_axis;
+ }
+ else if (target_offset_scaled.mV[VY] > target_offset_scaled.mV[VZ])
+ {
+ object_split_axis = LLVector3::y_axis;
+ }
+ else
+ {
+ object_split_axis = LLVector3::z_axis;
+ }
+
+ LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent());
+
+ // length projected orthogonal to target offset
+ F32 camera_offset_dist = (camera_offset_object - target_offset_dir * (camera_offset_object * target_offset_dir)).magVec();
+
+ // calculate whether the target point would be "visible" if it were outside the bounding box
+ // on the opposite of the splitting plane defined by object_split_axis;
+ BOOL exterior_target_visible = FALSE;
+ if (camera_offset_dist > object_radius)
+ {
+ // target is visible from camera, so turn off fov zoom
+ exterior_target_visible = TRUE;
+ }
+
+ F32 camera_offset_clip = camera_offset_object * object_split_axis;
+ F32 target_offset_clip = target_offset_dir * object_split_axis;
+
+ // target has moved outside of object extents
+ // check to see if camera and target are on same side
+ if (target_outside_object_extents)
+ {
+ if (camera_offset_clip > 0.f && target_offset_clip > 0.f)
+ {
+ return FALSE;
+ }
+ else if (camera_offset_clip < 0.f && target_offset_clip < 0.f)
+ {
+ return FALSE;
+ }
+ }
+
+ // clamp obj distance to diagonal of 10 by 10 cube
+ obj_min_distance = llmin(obj_min_distance, 10.f * F_SQRT3);
+
+ obj_min_distance += LLViewerCamera::getInstance()->getNear() + (soft_limit ? 0.1f : 0.2f);
+
+ return TRUE;
+}
+
+F32 LLAgentCamera::getCameraZoomFraction()
+{
+ // 0.f -> camera zoomed all the way out
+ // 1.f -> camera zoomed all the way in
+ LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+ if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
+ {
+ // already [0,1]
+ return mHUDTargetZoom;
+ }
+ else if (mFocusOnAvatar && cameraThirdPerson())
+ {
+ return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f);
+ }
+ else if (cameraCustomizeAvatar())
+ {
+ F32 distance = (F32)mCameraFocusOffsetTarget.magVec();
+ return clamp_rescale(distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM, 1.f, 0.f );
+ }
+ else
+ {
+ F32 min_zoom;
+ const F32 DIST_FUDGE = 16.f; // meters
+ F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE,
+ LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE,
+ MAX_CAMERA_DISTANCE_FROM_AGENT);
+
+ F32 distance = (F32)mCameraFocusOffsetTarget.magVec();
+ if (mFocusObject.notNull())
+ {
+ if (mFocusObject->isAvatar())
+ {
+ min_zoom = AVATAR_MIN_ZOOM;
+ }
+ else
+ {
+ min_zoom = OBJECT_MIN_ZOOM;
+ }
+ }
+ else
+ {
+ min_zoom = LAND_MIN_ZOOM;
+ }
+
+ return clamp_rescale(distance, min_zoom, max_zoom, 1.f, 0.f);
+ }
+}
+
+void LLAgentCamera::setCameraZoomFraction(F32 fraction)
+{
+ // 0.f -> camera zoomed all the way out
+ // 1.f -> camera zoomed all the way in
+ LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+
+ if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
+ {
+ mHUDTargetZoom = fraction;
+ }
+ else if (mFocusOnAvatar && cameraThirdPerson())
+ {
+ mCameraZoomFraction = rescale(fraction, 0.f, 1.f, MAX_ZOOM_FRACTION, MIN_ZOOM_FRACTION);
+ }
+ else if (cameraCustomizeAvatar())
+ {
+ LLVector3d camera_offset_dir = mCameraFocusOffsetTarget;
+ camera_offset_dir.normalize();
+ mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, APPEARANCE_MAX_ZOOM, APPEARANCE_MIN_ZOOM);
+ }
+ else
+ {
+ F32 min_zoom = LAND_MIN_ZOOM;
+ const F32 DIST_FUDGE = 16.f; // meters
+ F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE,
+ LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE,
+ MAX_CAMERA_DISTANCE_FROM_AGENT);
+
+ if (mFocusObject.notNull())
+ {
+ if (mFocusObject.notNull())
+ {
+ if (mFocusObject->isAvatar())
+ {
+ min_zoom = AVATAR_MIN_ZOOM;
+ }
+ else
+ {
+ min_zoom = OBJECT_MIN_ZOOM;
+ }
+ }
+ }
+
+ LLVector3d camera_offset_dir = mCameraFocusOffsetTarget;
+ camera_offset_dir.normalize();
+ mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, max_zoom, min_zoom);
+ }
+ startCameraAnimation();
+}
+
+
+//-----------------------------------------------------------------------------
+// cameraOrbitAround()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::cameraOrbitAround(const F32 radians)
+{
+ LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+ if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
+ {
+ // do nothing for hud selection
+ }
+ else if (mFocusOnAvatar && (mCameraMode == CAMERA_MODE_THIRD_PERSON || mCameraMode == CAMERA_MODE_FOLLOW))
+ {
+ gAgent.yaw(radians);
+ }
+ else
+ {
+ mCameraFocusOffsetTarget.rotVec(radians, 0.f, 0.f, 1.f);
+
+ cameraZoomIn(1.f);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// cameraOrbitOver()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::cameraOrbitOver(const F32 angle)
+{
+ LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+ if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
+ {
+ // do nothing for hud selection
+ }
+ else if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON)
+ {
+ gAgent.pitch(angle);
+ }
+ else
+ {
+ LLVector3 camera_offset_unit(mCameraFocusOffsetTarget);
+ camera_offset_unit.normalize();
+
+ F32 angle_from_up = acos( camera_offset_unit * gAgent.getReferenceUpVector() );
+
+ LLVector3d left_axis;
+ left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
+ F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD);
+ mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis);
+
+ cameraZoomIn(1.f);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// cameraZoomIn()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::cameraZoomIn(const F32 fraction)
+{
+ if (gDisconnected)
+ {
+ return;
+ }
+
+ LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+ if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
+ {
+ // just update hud zoom level
+ mHUDTargetZoom /= fraction;
+ return;
+ }
+
+
+ LLVector3d camera_offset(mCameraFocusOffsetTarget);
+ LLVector3d camera_offset_unit(mCameraFocusOffsetTarget);
+ F32 min_zoom = LAND_MIN_ZOOM;
+ F32 current_distance = (F32)camera_offset_unit.normalize();
+ F32 new_distance = current_distance * fraction;
+
+ // Don't move through focus point
+ if (mFocusObject)
+ {
+ LLVector3 camera_offset_dir((F32)camera_offset_unit.mdV[VX], (F32)camera_offset_unit.mdV[VY], (F32)camera_offset_unit.mdV[VZ]);
+
+ if (mFocusObject->isAvatar())
+ {
+ calcCameraMinDistance(min_zoom);
+ }
+ else
+ {
+ min_zoom = OBJECT_MIN_ZOOM;
+ }
+ }
+
+ new_distance = llmax(new_distance, min_zoom);
+
+ // Don't zoom too far back
+ const F32 DIST_FUDGE = 16.f; // meters
+ F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,
+ LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
+
+ if (new_distance > max_distance)
+ {
+ new_distance = max_distance;
+
+ /*
+ // Unless camera is unlocked
+ if (!LLViewerCamera::sDisableCameraConstraints)
+ {
+ return;
+ }
+ */
+ }
+
+ if( cameraCustomizeAvatar() )
+ {
+ new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM );
+ }
+
+ mCameraFocusOffsetTarget = new_distance * camera_offset_unit;
+}
+
+//-----------------------------------------------------------------------------
+// cameraOrbitIn()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::cameraOrbitIn(const F32 meters)
+{
+ if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON)
+ {
+ F32 camera_offset_dist = llmax(0.001f, getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale"));
+
+ mCameraZoomFraction = (mTargetCameraDistance - meters) / camera_offset_dist;
+
+ if (!gSavedSettings.getBOOL("FreezeTime") && mCameraZoomFraction < MIN_ZOOM_FRACTION && meters > 0.f)
+ {
+ // No need to animate, camera is already there.
+ changeCameraToMouselook(FALSE);
+ }
+
+ mCameraZoomFraction = llclamp(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION);
+ }
+ else
+ {
+ LLVector3d camera_offset(mCameraFocusOffsetTarget);
+ LLVector3d camera_offset_unit(mCameraFocusOffsetTarget);
+ F32 current_distance = (F32)camera_offset_unit.normalize();
+ F32 new_distance = current_distance - meters;
+ F32 min_zoom = LAND_MIN_ZOOM;
+
+ // Don't move through focus point
+ if (mFocusObject.notNull())
+ {
+ if (mFocusObject->isAvatar())
+ {
+ min_zoom = AVATAR_MIN_ZOOM;
+ }
+ else
+ {
+ min_zoom = OBJECT_MIN_ZOOM;
+ }
+ }
+
+ new_distance = llmax(new_distance, min_zoom);
+
+ // Don't zoom too far back
+ const F32 DIST_FUDGE = 16.f; // meters
+ F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,
+ LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
+
+ if (new_distance > max_distance)
+ {
+ // Unless camera is unlocked
+ if (!gSavedSettings.getBOOL("DisableCameraConstraints"))
+ {
+ return;
+ }
+ }
+
+ if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() )
+ {
+ new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM );
+ }
+
+ // Compute new camera offset
+ mCameraFocusOffsetTarget = new_distance * camera_offset_unit;
+ cameraZoomIn(1.f);
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// cameraPanIn()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::cameraPanIn(F32 meters)
+{
+ LLVector3d at_axis;
+ at_axis.setVec(LLViewerCamera::getInstance()->getAtAxis());
+
+ mFocusTargetGlobal += meters * at_axis;
+ mFocusGlobal = mFocusTargetGlobal;
+ // don't enforce zoom constraints as this is the only way for users to get past them easily
+ updateFocusOffset();
+ // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx
+ mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
+}
+
+//-----------------------------------------------------------------------------
+// cameraPanLeft()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::cameraPanLeft(F32 meters)
+{
+ LLVector3d left_axis;
+ left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
+
+ mFocusTargetGlobal += meters * left_axis;
+ mFocusGlobal = mFocusTargetGlobal;
+
+ // disable smoothing for camera pan, which causes some residents unhappiness
+ mCameraSmoothingStop = true;
+
+ cameraZoomIn(1.f);
+ updateFocusOffset();
+ // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind - Nyx
+ mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
+}
+
+//-----------------------------------------------------------------------------
+// cameraPanUp()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::cameraPanUp(F32 meters)
+{
+ LLVector3d up_axis;
+ up_axis.setVec(LLViewerCamera::getInstance()->getUpAxis());
+
+ mFocusTargetGlobal += meters * up_axis;
+ mFocusGlobal = mFocusTargetGlobal;
+
+ // disable smoothing for camera pan, which causes some residents unhappiness
+ mCameraSmoothingStop = true;
+
+ cameraZoomIn(1.f);
+ updateFocusOffset();
+ // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx
+ mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
+}
+
+//-----------------------------------------------------------------------------
+// updateLookAt()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::updateLookAt(const S32 mouse_x, const S32 mouse_y)
+{
+ static LLVector3 last_at_axis;
+
+ if (!isAgentAvatarValid()) return;
+
+ LLQuaternion av_inv_rot = ~gAgentAvatarp->mRoot.getWorldRotation();
+ LLVector3 root_at = LLVector3::x_axis * gAgentAvatarp->mRoot.getWorldRotation();
+
+ if ((gViewerWindow->getMouseVelocityStat()->getCurrent() < 0.01f) &&
+ (root_at * last_at_axis > 0.95f))
+ {
+ LLVector3 vel = gAgentAvatarp->getVelocity();
+ if (vel.magVecSquared() > 4.f)
+ {
+ setLookAt(LOOKAT_TARGET_IDLE, gAgentAvatarp, vel * av_inv_rot);
+ }
+ else
+ {
+ // *FIX: rotate mframeagent by sit object's rotation?
+ LLQuaternion look_rotation = gAgentAvatarp->isSitting() ? gAgentAvatarp->getRenderRotation() : gAgent.getFrameAgent().getQuaternion(); // use camera's current rotation
+ LLVector3 look_offset = LLVector3(2.f, 0.f, 0.f) * look_rotation * av_inv_rot;
+ setLookAt(LOOKAT_TARGET_IDLE, gAgentAvatarp, look_offset);
+ }
+ last_at_axis = root_at;
+ return;
+ }
+
+ last_at_axis = root_at;
+
+ if (CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode())
+ {
+ setLookAt(LOOKAT_TARGET_NONE, gAgentAvatarp, LLVector3(-2.f, 0.f, 0.f));
+ }
+ else
+ {
+ // Move head based on cursor position
+ ELookAtType lookAtType = LOOKAT_TARGET_NONE;
+ LLVector3 headLookAxis;
+ LLCoordFrame frameCamera = *((LLCoordFrame*)LLViewerCamera::getInstance());
+
+ if (cameraMouselook())
+ {
+ lookAtType = LOOKAT_TARGET_MOUSELOOK;
+ }
+ else if (cameraThirdPerson())
+ {
+ // range from -.5 to .5
+ F32 x_from_center =
+ ((F32) mouse_x / (F32) gViewerWindow->getWorldViewWidthScaled() ) - 0.5f;
+ F32 y_from_center =
+ ((F32) mouse_y / (F32) gViewerWindow->getWorldViewHeightScaled() ) - 0.5f;
+
+ frameCamera.yaw( - x_from_center * gSavedSettings.getF32("YawFromMousePosition") * DEG_TO_RAD);
+ frameCamera.pitch( - y_from_center * gSavedSettings.getF32("PitchFromMousePosition") * DEG_TO_RAD);
+ lookAtType = LOOKAT_TARGET_FREELOOK;
+ }
+
+ headLookAxis = frameCamera.getAtAxis();
+ // RN: we use world-space offset for mouselook and freelook
+ //headLookAxis = headLookAxis * av_inv_rot;
+ setLookAt(lookAtType, gAgentAvatarp, headLookAxis);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// updateCamera()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::updateCamera()
+{
+ static LLFastTimer::DeclareTimer ftm("Camera");
+ LLFastTimer t(ftm);
+
+ //Ventrella - changed camera_skyward to the new global "mCameraUpVector"
+ mCameraUpVector = LLVector3::z_axis;
+ //LLVector3 camera_skyward(0.f, 0.f, 1.f);
+ //end Ventrella
+
+ U32 camera_mode = mCameraAnimating ? mLastCameraMode : mCameraMode;
+
+ validateFocusObject();
+
+ if (isAgentAvatarValid() &&
+ gAgentAvatarp->isSitting() &&
+ camera_mode == CAMERA_MODE_MOUSELOOK)
+ {
+ //Ventrella
+ //changed camera_skyward to the new global "mCameraUpVector"
+ mCameraUpVector = mCameraUpVector * gAgentAvatarp->getRenderRotation();
+ //end Ventrella
+ }
+
+ if (cameraThirdPerson() && mFocusOnAvatar && LLFollowCamMgr::getActiveFollowCamParams())
+ {
+ changeCameraToFollow();
+ }
+
+ //Ventrella
+ //NOTE - this needs to be integrated into a general upVector system here within llAgent.
+ if ( camera_mode == CAMERA_MODE_FOLLOW && mFocusOnAvatar )
+ {
+ mCameraUpVector = mFollowCam.getUpVector();
+ }
+ //end Ventrella
+
+ if (mSitCameraEnabled)
+ {
+ if (mSitCameraReferenceObject->isDead())
+ {
+ setSitCamera(LLUUID::null);
+ }
+ }
+
+ // Update UI with our camera inputs
+ LLFloaterCamera* camera_floater = LLFloaterReg::findTypedInstance<LLFloaterCamera>("camera");
+ if (camera_floater)
+ {
+ camera_floater->mRotate->setToggleState(gAgentCamera.getOrbitRightKey() > 0.f, // left
+ gAgentCamera.getOrbitUpKey() > 0.f, // top
+ gAgentCamera.getOrbitLeftKey() > 0.f, // right
+ gAgentCamera.getOrbitDownKey() > 0.f); // bottom
+
+ camera_floater->mTrack->setToggleState(gAgentCamera.getPanLeftKey() > 0.f, // left
+ gAgentCamera.getPanUpKey() > 0.f, // top
+ gAgentCamera.getPanRightKey() > 0.f, // right
+ gAgentCamera.getPanDownKey() > 0.f); // bottom
+ }
+
+ // Handle camera movement based on keyboard.
+ const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second
+ const F32 ORBIT_AROUND_RATE = 90.f * DEG_TO_RAD; // radians per second
+ const F32 PAN_RATE = 5.f; // meters per second
+
+ if (gAgentCamera.getOrbitUpKey() || gAgentCamera.getOrbitDownKey())
+ {
+ F32 input_rate = gAgentCamera.getOrbitUpKey() - gAgentCamera.getOrbitDownKey();
+ cameraOrbitOver( input_rate * ORBIT_OVER_RATE / gFPSClamped );
+ }
+
+ if (gAgentCamera.getOrbitLeftKey() || gAgentCamera.getOrbitRightKey())
+ {
+ F32 input_rate = gAgentCamera.getOrbitLeftKey() - gAgentCamera.getOrbitRightKey();
+ cameraOrbitAround(input_rate * ORBIT_AROUND_RATE / gFPSClamped);
+ }
+
+ if (gAgentCamera.getOrbitInKey() || gAgentCamera.getOrbitOutKey())
+ {
+ F32 input_rate = gAgentCamera.getOrbitInKey() - gAgentCamera.getOrbitOutKey();
+
+ LLVector3d to_focus = gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin()) - calcFocusPositionTargetGlobal();
+ F32 distance_to_focus = (F32)to_focus.magVec();
+ // Move at distance (in meters) meters per second
+ cameraOrbitIn( input_rate * distance_to_focus / gFPSClamped );
+ }
+
+ if (gAgentCamera.getPanInKey() || gAgentCamera.getPanOutKey())
+ {
+ F32 input_rate = gAgentCamera.getPanInKey() - gAgentCamera.getPanOutKey();
+ cameraPanIn(input_rate * PAN_RATE / gFPSClamped);
+ }
+
+ if (gAgentCamera.getPanRightKey() || gAgentCamera.getPanLeftKey())
+ {
+ F32 input_rate = gAgentCamera.getPanRightKey() - gAgentCamera.getPanLeftKey();
+ cameraPanLeft(input_rate * -PAN_RATE / gFPSClamped );
+ }
+
+ if (gAgentCamera.getPanUpKey() || gAgentCamera.getPanDownKey())
+ {
+ F32 input_rate = gAgentCamera.getPanUpKey() - gAgentCamera.getPanDownKey();
+ cameraPanUp(input_rate * PAN_RATE / gFPSClamped );
+ }
+
+ // Clear camera keyboard keys.
+ gAgentCamera.clearOrbitKeys();
+ gAgentCamera.clearPanKeys();
+
+ // lerp camera focus offset
+ mCameraFocusOffset = lerp(mCameraFocusOffset, mCameraFocusOffsetTarget, LLCriticalDamp::getInterpolant(CAMERA_FOCUS_HALF_LIFE));
+
+ //Ventrella
+ if ( mCameraMode == CAMERA_MODE_FOLLOW )
+ {
+ if (isAgentAvatarValid())
+ {
+ //--------------------------------------------------------------------------------
+ // this is where the avatar's position and rotation are given to followCam, and
+ // where it is updated. All three of its attributes are updated: (1) position,
+ // (2) focus, and (3) upvector. They can then be queried elsewhere in llAgent.
+ //--------------------------------------------------------------------------------
+ // *TODO: use combined rotation of frameagent and sit object
+ LLQuaternion avatarRotationForFollowCam = gAgentAvatarp->isSitting() ? gAgentAvatarp->getRenderRotation() : gAgent.getFrameAgent().getQuaternion();
+
+ LLFollowCamParams* current_cam = LLFollowCamMgr::getActiveFollowCamParams();
+ if (current_cam)
+ {
+ mFollowCam.copyParams(*current_cam);
+ mFollowCam.setSubjectPositionAndRotation( gAgentAvatarp->getRenderPosition(), avatarRotationForFollowCam );
+ mFollowCam.update();
+ LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true);
+ }
+ else
+ {
+ changeCameraToThirdPerson(TRUE);
+ }
+ }
+ }
+ // end Ventrella
+
+ BOOL hit_limit;
+ LLVector3d camera_pos_global;
+ LLVector3d camera_target_global = calcCameraPositionTargetGlobal(&hit_limit);
+ mCameraVirtualPositionAgent = gAgent.getPosAgentFromGlobal(camera_target_global);
+ LLVector3d focus_target_global = calcFocusPositionTargetGlobal();
+
+ // perform field of view correction
+ mCameraFOVZoomFactor = calcCameraFOVZoomFactor();
+ camera_target_global = focus_target_global + (camera_target_global - focus_target_global) * (1.f + mCameraFOVZoomFactor);
+
+ gAgent.setShowAvatar(TRUE); // can see avatar by default
+
+ // Adjust position for animation
+ if (mCameraAnimating)
+ {
+ F32 time = mAnimationTimer.getElapsedTimeF32();
+
+ // yet another instance of critically damped motion, hooray!
+ // F32 fraction_of_animation = 1.f - pow(2.f, -time / CAMERA_ZOOM_HALF_LIFE);
+
+ // linear interpolation
+ F32 fraction_of_animation = time / mAnimationDuration;
+
+ BOOL isfirstPerson = mCameraMode == CAMERA_MODE_MOUSELOOK;
+ BOOL wasfirstPerson = mLastCameraMode == CAMERA_MODE_MOUSELOOK;
+ F32 fraction_animation_to_skip;
+
+ if (mAnimationCameraStartGlobal == camera_target_global)
+ {
+ fraction_animation_to_skip = 0.f;
+ }
+ else
+ {
+ LLVector3d cam_delta = mAnimationCameraStartGlobal - camera_target_global;
+ fraction_animation_to_skip = HEAD_BUFFER_SIZE / (F32)cam_delta.magVec();
+ }
+ F32 animation_start_fraction = (wasfirstPerson) ? fraction_animation_to_skip : 0.f;
+ F32 animation_finish_fraction = (isfirstPerson) ? (1.f - fraction_animation_to_skip) : 1.f;
+
+ if (fraction_of_animation < animation_finish_fraction)
+ {
+ if (fraction_of_animation < animation_start_fraction || fraction_of_animation > animation_finish_fraction )
+ {
+ gAgent.setShowAvatar(FALSE);
+ }
+
+ // ...adjust position for animation
+ F32 smooth_fraction_of_animation = llsmoothstep(0.0f, 1.0f, fraction_of_animation);
+ camera_pos_global = lerp(mAnimationCameraStartGlobal, camera_target_global, smooth_fraction_of_animation);
+ mFocusGlobal = lerp(mAnimationFocusStartGlobal, focus_target_global, smooth_fraction_of_animation);
+ }
+ else
+ {
+ // ...animation complete
+ mCameraAnimating = FALSE;
+
+ camera_pos_global = camera_target_global;
+ mFocusGlobal = focus_target_global;
+
+ gAgent.endAnimationUpdateUI();
+ gAgent.setShowAvatar(TRUE);
+ }
+
+ if (isAgentAvatarValid() && (mCameraMode != CAMERA_MODE_MOUSELOOK))
+ {
+ gAgentAvatarp->updateAttachmentVisibility(mCameraMode);
+ }
+ }
+ else
+ {
+ camera_pos_global = camera_target_global;
+ mFocusGlobal = focus_target_global;
+ gAgent.setShowAvatar(TRUE);
+ }
+
+ // smoothing
+ if (TRUE)
+ {
+ LLVector3d agent_pos = gAgent.getPositionGlobal();
+ LLVector3d camera_pos_agent = camera_pos_global - agent_pos;
+ // Sitting on what you're manipulating can cause camera jitter with smoothing.
+ // This turns off smoothing while editing. -MG
+ bool in_build_mode = LLToolMgr::getInstance()->inBuildMode();
+ mCameraSmoothingStop = mCameraSmoothingStop || in_build_mode;
+
+ if (cameraThirdPerson() && !mCameraSmoothingStop)
+ {
+ const F32 SMOOTHING_HALF_LIFE = 0.02f;
+
+ F32 smoothing = LLCriticalDamp::getInterpolant(gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE, FALSE);
+
+ if (!mFocusObject) // we differentiate on avatar mode
+ {
+ // for avatar-relative focus, we smooth in avatar space -
+ // the avatar moves too jerkily w/r/t global space to smooth there.
+
+ LLVector3d delta = camera_pos_agent - mCameraSmoothingLastPositionAgent;
+ if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please
+ {
+ camera_pos_agent = lerp(mCameraSmoothingLastPositionAgent, camera_pos_agent, smoothing);
+ camera_pos_global = camera_pos_agent + agent_pos;
+ }
+ }
+ else
+ {
+ LLVector3d delta = camera_pos_global - mCameraSmoothingLastPositionGlobal;
+ if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please
+ {
+ camera_pos_global = lerp(mCameraSmoothingLastPositionGlobal, camera_pos_global, smoothing);
+ }
+ }
+ }
+
+ mCameraSmoothingLastPositionGlobal = camera_pos_global;
+ mCameraSmoothingLastPositionAgent = camera_pos_agent;
+ mCameraSmoothingStop = false;
+ }
+
+
+ mCameraCurrentFOVZoomFactor = lerp(mCameraCurrentFOVZoomFactor, mCameraFOVZoomFactor, LLCriticalDamp::getInterpolant(FOV_ZOOM_HALF_LIFE));
+
+// llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl;
+
+ F32 ui_offset = 0.f;
+ if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode )
+ {
+ ui_offset = calcCustomizeAvatarUIOffset( camera_pos_global );
+ }
+
+
+ LLVector3 focus_agent = gAgent.getPosAgentFromGlobal(mFocusGlobal);
+
+ mCameraPositionAgent = gAgent.getPosAgentFromGlobal(camera_pos_global);
+
+ // Move the camera
+
+ //Ventrella
+ LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent);
+ //LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent);
+ //end Ventrella
+
+ //RN: translate UI offset after camera is oriented properly
+ LLViewerCamera::getInstance()->translate(LLViewerCamera::getInstance()->getLeftAxis() * ui_offset);
+
+ // Change FOV
+ LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor));
+
+ // follow camera when in customize mode
+ if (cameraCustomizeAvatar())
+ {
+ setLookAt(LOOKAT_TARGET_FOCUS, NULL, mCameraPositionAgent);
+ }
+
+ // update the travel distance stat
+ // this isn't directly related to the camera
+ // but this seemed like the best place to do this
+ LLVector3d global_pos = gAgent.getPositionGlobal();
+ if (!gAgent.getLastPositionGlobal().isExactlyZero())
+ {
+ LLVector3d delta = global_pos - gAgent.getLastPositionGlobal();
+ gAgent.setDistanceTraveled(gAgent.getDistanceTraveled() + delta.magVec());
+ }
+ gAgent.setLastPositionGlobal(global_pos);
+
+ if (LLVOAvatar::sVisibleInFirstPerson && isAgentAvatarValid() && !gAgentAvatarp->isSitting() && cameraMouselook())
+ {
+ LLVector3 head_pos = gAgentAvatarp->mHeadp->getWorldPosition() +
+ LLVector3(0.08f, 0.f, 0.05f) * gAgentAvatarp->mHeadp->getWorldRotation() +
+ LLVector3(0.1f, 0.f, 0.f) * gAgentAvatarp->mPelvisp->getWorldRotation();
+ LLVector3 diff = mCameraPositionAgent - head_pos;
+ diff = diff * ~gAgentAvatarp->mRoot.getWorldRotation();
+
+ LLJoint* torso_joint = gAgentAvatarp->mTorsop;
+ LLJoint* chest_joint = gAgentAvatarp->mChestp;
+ LLVector3 torso_scale = torso_joint->getScale();
+ LLVector3 chest_scale = chest_joint->getScale();
+
+ // shorten avatar skeleton to avoid foot interpenetration
+ if (!gAgentAvatarp->mInAir)
+ {
+ LLVector3 chest_offset = LLVector3(0.f, 0.f, chest_joint->getPosition().mV[VZ]) * torso_joint->getWorldRotation();
+ F32 z_compensate = llclamp(-diff.mV[VZ], -0.2f, 1.f);
+ F32 scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / chest_offset.mV[VZ]), 0.5f, 1.2f);
+ torso_joint->setScale(LLVector3(1.f, 1.f, scale_factor));
+
+ LLJoint* neck_joint = gAgentAvatarp->mNeckp;
+ LLVector3 neck_offset = LLVector3(0.f, 0.f, neck_joint->getPosition().mV[VZ]) * chest_joint->getWorldRotation();
+ scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / neck_offset.mV[VZ]), 0.5f, 1.2f);
+ chest_joint->setScale(LLVector3(1.f, 1.f, scale_factor));
+ diff.mV[VZ] = 0.f;
+ }
+
+ gAgentAvatarp->mPelvisp->setPosition(gAgentAvatarp->mPelvisp->getPosition() + diff);
+
+ gAgentAvatarp->mRoot.updateWorldMatrixChildren();
+
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); )
+ {
+ LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+ LLViewerJointAttachment* attachment = curiter->second;
+ for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
+ attachment_iter != attachment->mAttachedObjects.end();
+ ++attachment_iter)
+ {
+ LLViewerObject *attached_object = (*attachment_iter);
+ if (attached_object && !attached_object->isDead() && attached_object->mDrawable.notNull())
+ {
+ // clear any existing "early" movements of attachment
+ attached_object->mDrawable->clearState(LLDrawable::EARLY_MOVE);
+ gPipeline.updateMoveNormalAsync(attached_object->mDrawable);
+ attached_object->updateText();
+ }
+ }
+ }
+
+ torso_joint->setScale(torso_scale);
+ chest_joint->setScale(chest_scale);
+ }
+}
+
+void LLAgentCamera::updateLastCamera()
+{
+ mLastCameraMode = mCameraMode;
+}
+
+void LLAgentCamera::updateFocusOffset()
+{
+ validateFocusObject();
+ if (mFocusObject.notNull())
+ {
+ LLVector3d obj_pos = gAgent.getPosGlobalFromAgent(mFocusObject->getRenderPosition());
+ mFocusObjectOffset.setVec(mFocusTargetGlobal - obj_pos);
+ }
+}
+
+void LLAgentCamera::validateFocusObject()
+{
+ if (mFocusObject.notNull() &&
+ mFocusObject->isDead())
+ {
+ mFocusObjectOffset.clearVec();
+ clearFocusObject();
+ mCameraFOVZoomFactor = 0.f;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// calcCustomizeAvatarUIOffset()
+//-----------------------------------------------------------------------------
+F32 LLAgentCamera::calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global)
+{
+ F32 ui_offset = 0.f;
+
+ if (gFloaterCustomize)
+ {
+ const LLRect& rect = gFloaterCustomize->getRect();
+
+ // Move the camera so that the avatar isn't covered up by this floater.
+ F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidthScaled()))));
+ F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); // radians
+ F32 offset = tan(apparent_angle);
+
+ if( rect.mLeft < (gViewerWindow->getWindowWidthScaled() - rect.mRight) )
+ {
+ // Move the avatar to the right (camera to the left)
+ ui_offset = offset;
+ }
+ else
+ {
+ // Move the avatar to the left (camera to the right)
+ ui_offset = -offset;
+ }
+ }
+ F32 range = (F32)dist_vec(camera_pos_global, getFocusGlobal());
+ mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f));
+ return mUIOffset * range;
+}
+
+//-----------------------------------------------------------------------------
+// calcFocusPositionTargetGlobal()
+//-----------------------------------------------------------------------------
+LLVector3d LLAgentCamera::calcFocusPositionTargetGlobal()
+{
+ if (mFocusObject.notNull() && mFocusObject->isDead())
+ {
+ clearFocusObject();
+ }
+
+ // Ventrella
+ if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar)
+ {
+ mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedFocus());
+ return mFocusTargetGlobal;
+ }// End Ventrella
+ else if (mCameraMode == CAMERA_MODE_MOUSELOOK)
+ {
+ LLVector3d at_axis(1.0, 0.0, 0.0);
+ LLQuaternion agent_rot = gAgent.getFrameAgent().getQuaternion();
+ if (isAgentAvatarValid() && gAgentAvatarp->getParent())
+ {
+ LLViewerObject* root_object = (LLViewerObject*)gAgentAvatarp->getRoot();
+ if (!root_object->flagCameraDecoupled())
+ {
+ agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation();
+ }
+ }
+ at_axis = at_axis * agent_rot;
+ mFocusTargetGlobal = calcCameraPositionTargetGlobal() + at_axis;
+ return mFocusTargetGlobal;
+ }
+ else if (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR)
+ {
+ return mFocusTargetGlobal;
+ }
+ else if (!mFocusOnAvatar)
+ {
+ if (mFocusObject.notNull() && !mFocusObject->isDead() && mFocusObject->mDrawable.notNull())
+ {
+ LLDrawable* drawablep = mFocusObject->mDrawable;
+
+ if (mTrackFocusObject &&
+ drawablep &&
+ drawablep->isActive())
+ {
+ if (!mFocusObject->isAvatar())
+ {
+ if (mFocusObject->isSelected())
+ {
+ gPipeline.updateMoveNormalAsync(drawablep);
+ }
+ else
+ {
+ if (drawablep->isState(LLDrawable::MOVE_UNDAMPED))
+ {
+ gPipeline.updateMoveNormalAsync(drawablep);
+ }
+ else
+ {
+ gPipeline.updateMoveDampedAsync(drawablep);
+ }
+ }
+ }
+ }
+ // if not tracking object, update offset based on new object position
+ else
+ {
+ updateFocusOffset();
+ }
+ LLVector3 focus_agent = mFocusObject->getRenderPosition() + mFocusObjectOffset;
+ mFocusTargetGlobal.setVec(gAgent.getPosGlobalFromAgent(focus_agent));
+ }
+ return mFocusTargetGlobal;
+ }
+ else if (mSitCameraEnabled && isAgentAvatarValid() && gAgentAvatarp->isSitting() && mSitCameraReferenceObject.notNull())
+ {
+ // sit camera
+ LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition();
+ LLQuaternion object_rot = mSitCameraReferenceObject->getRenderRotation();
+
+ LLVector3 target_pos = object_pos + (mSitCameraFocus * object_rot);
+ return gAgent.getPosGlobalFromAgent(target_pos);
+ }
+ else
+ {
+ return gAgent.getPositionGlobal() + calcThirdPersonFocusOffset();
+ }
+}
+
+LLVector3d LLAgentCamera::calcThirdPersonFocusOffset()
+{
+ // ...offset from avatar
+ LLVector3d focus_offset;
+ LLQuaternion agent_rot = gAgent.getFrameAgent().getQuaternion();
+ if (isAgentAvatarValid() && gAgentAvatarp->getParent())
+ {
+ agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation();
+ }
+
+ focus_offset = mFocusOffsetInitial[mCameraPreset] * agent_rot;
+ return focus_offset;
+}
+
+void LLAgentCamera::setupSitCamera()
+{
+ // agent frame entering this function is in world coordinates
+ if (isAgentAvatarValid() && gAgentAvatarp->getParent())
+ {
+ LLQuaternion parent_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
+ // slam agent coordinate frame to proper parent local version
+ LLVector3 at_axis = gAgent.getFrameAgent().getAtAxis();
+ at_axis.mV[VZ] = 0.f;
+ at_axis.normalize();
+ gAgent.resetAxes(at_axis * ~parent_rot);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// getCameraPositionAgent()
+//-----------------------------------------------------------------------------
+const LLVector3 &LLAgentCamera::getCameraPositionAgent() const
+{
+ return LLViewerCamera::getInstance()->getOrigin();
+}
+
+//-----------------------------------------------------------------------------
+// getCameraPositionGlobal()
+//-----------------------------------------------------------------------------
+LLVector3d LLAgentCamera::getCameraPositionGlobal() const
+{
+ return gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin());
+}
+
+//-----------------------------------------------------------------------------
+// calcCameraFOVZoomFactor()
+//-----------------------------------------------------------------------------
+F32 LLAgentCamera::calcCameraFOVZoomFactor()
+{
+ LLVector3 camera_offset_dir;
+ camera_offset_dir.setVec(mCameraFocusOffset);
+
+ if (mCameraMode == CAMERA_MODE_MOUSELOOK)
+ {
+ return 0.f;
+ }
+ else if (mFocusObject.notNull() && !mFocusObject->isAvatar() && !mFocusOnAvatar)
+ {
+ // don't FOV zoom on mostly transparent objects
+ LLVector3 focus_offset = mFocusObjectOffset;
+ F32 obj_min_dist = 0.f;
+ calcCameraMinDistance(obj_min_dist);
+ F32 current_distance = llmax(0.001f, camera_offset_dir.magVec());
+
+ mFocusObjectDist = obj_min_dist - current_distance;
+
+ F32 new_fov_zoom = llclamp(mFocusObjectDist / current_distance, 0.f, 1000.f);
+ return new_fov_zoom;
+ }
+ else // focusing on land or avatar
+ {
+ // keep old field of view until user changes focus explicitly
+ return mCameraFOVZoomFactor;
+ //return 0.f;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// calcCameraPositionTargetGlobal()
+//-----------------------------------------------------------------------------
+LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
+{
+ // Compute base camera position and look-at points.
+ F32 camera_land_height;
+ LLVector3d frame_center_global = !isAgentAvatarValid() ?
+ gAgent.getPositionGlobal() :
+ gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot.getWorldPosition());
+
+ BOOL isConstrained = FALSE;
+ LLVector3d head_offset;
+ head_offset.setVec(mThirdPersonHeadOffset);
+
+ LLVector3d camera_position_global;
+
+ // Ventrella
+ if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar)
+ {
+ camera_position_global = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedPosition());
+ }// End Ventrella
+ else if (mCameraMode == CAMERA_MODE_MOUSELOOK)
+ {
+ if (!isAgentAvatarValid() || gAgentAvatarp->mDrawable.isNull())
+ {
+ llwarns << "Null avatar drawable!" << llendl;
+ return LLVector3d::zero;
+ }
+ head_offset.clearVec();
+ if (gAgentAvatarp->isSitting() && gAgentAvatarp->getParent())
+ {
+ gAgentAvatarp->updateHeadOffset();
+ head_offset.mdV[VX] = gAgentAvatarp->mHeadOffset.mV[VX];
+ head_offset.mdV[VY] = gAgentAvatarp->mHeadOffset.mV[VY];
+ head_offset.mdV[VZ] = gAgentAvatarp->mHeadOffset.mV[VZ] + 0.1f;
+ const LLMatrix4& mat = ((LLViewerObject*) gAgentAvatarp->getParent())->getRenderMatrix();
+ camera_position_global = gAgent.getPosGlobalFromAgent
+ ((gAgentAvatarp->getPosition()+
+ LLVector3(head_offset)*gAgentAvatarp->getRotation()) * mat);
+ }
+ else
+ {
+ head_offset.mdV[VZ] = gAgentAvatarp->mHeadOffset.mV[VZ];
+ if (gAgentAvatarp->isSitting())
+ {
+ head_offset.mdV[VZ] += 0.1;
+ }
+ camera_position_global = gAgent.getPosGlobalFromAgent(gAgentAvatarp->getRenderPosition());//frame_center_global;
+ head_offset = head_offset * gAgentAvatarp->getRenderRotation();
+ camera_position_global = camera_position_global + head_offset;
+ }
+ }
+ else if (mCameraMode == CAMERA_MODE_THIRD_PERSON && mFocusOnAvatar)
+ {
+ LLVector3 local_camera_offset;
+ F32 camera_distance = 0.f;
+
+ if (mSitCameraEnabled
+ && isAgentAvatarValid()
+ && gAgentAvatarp->isSitting()
+ && mSitCameraReferenceObject.notNull())
+ {
+ // sit camera
+ LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition();
+ LLQuaternion object_rot = mSitCameraReferenceObject->getRenderRotation();
+
+ LLVector3 target_pos = object_pos + (mSitCameraPos * object_rot);
+
+ camera_position_global = gAgent.getPosGlobalFromAgent(target_pos);
+ }
+ else
+ {
+ local_camera_offset = mCameraZoomFraction * getCameraOffsetInitial() * gSavedSettings.getF32("CameraOffsetScale");
+
+ // are we sitting down?
+ if (isAgentAvatarValid() && gAgentAvatarp->getParent())
+ {
+ LLQuaternion parent_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
+ // slam agent coordinate frame to proper parent local version
+ LLVector3 at_axis = gAgent.getFrameAgent().getAtAxis() * parent_rot;
+ at_axis.mV[VZ] = 0.f;
+ at_axis.normalize();
+ gAgent.resetAxes(at_axis * ~parent_rot);
+
+ local_camera_offset = local_camera_offset * gAgent.getFrameAgent().getQuaternion() * parent_rot;
+ }
+ else
+ {
+ local_camera_offset = gAgent.getFrameAgent().rotateToAbsolute( local_camera_offset );
+ }
+
+ if (!mCameraCollidePlane.isExactlyZero() && (!isAgentAvatarValid() || !gAgentAvatarp->isSitting()))
+ {
+ LLVector3 plane_normal;
+ plane_normal.setVec(mCameraCollidePlane.mV);
+
+ F32 offset_dot_norm = local_camera_offset * plane_normal;
+ if (llabs(offset_dot_norm) < 0.001f)
+ {
+ offset_dot_norm = 0.001f;
+ }
+
+ camera_distance = local_camera_offset.normalize();
+
+ F32 pos_dot_norm = gAgent.getPosAgentFromGlobal(frame_center_global + head_offset) * plane_normal;
+
+ // if agent is outside the colliding half-plane
+ if (pos_dot_norm > mCameraCollidePlane.mV[VW])
+ {
+ // check to see if camera is on the opposite side (inside) the half-plane
+ if (offset_dot_norm + pos_dot_norm < mCameraCollidePlane.mV[VW])
+ {
+ // diminish offset by factor to push it back outside the half-plane
+ camera_distance *= (pos_dot_norm - mCameraCollidePlane.mV[VW] - CAMERA_COLLIDE_EPSILON) / -offset_dot_norm;
+ }
+ }
+ else
+ {
+ if (offset_dot_norm + pos_dot_norm > mCameraCollidePlane.mV[VW])
+ {
+ camera_distance *= (mCameraCollidePlane.mV[VW] - pos_dot_norm - CAMERA_COLLIDE_EPSILON) / offset_dot_norm;
+ }
+ }
+ }
+ else
+ {
+ camera_distance = local_camera_offset.normalize();
+ }
+
+ mTargetCameraDistance = llmax(camera_distance, MIN_CAMERA_DISTANCE);
+
+ if (mTargetCameraDistance != mCurrentCameraDistance)
+ {
+ F32 camera_lerp_amt = LLCriticalDamp::getInterpolant(CAMERA_ZOOM_HALF_LIFE);
+
+ mCurrentCameraDistance = lerp(mCurrentCameraDistance, mTargetCameraDistance, camera_lerp_amt);
+ }
+
+ // Make the camera distance current
+ local_camera_offset *= mCurrentCameraDistance;
+
+ // set the global camera position
+ LLVector3d camera_offset;
+
+ LLVector3 av_pos = !isAgentAvatarValid() ? LLVector3::zero : gAgentAvatarp->getRenderPosition();
+ camera_offset.setVec( local_camera_offset );
+ camera_position_global = frame_center_global + head_offset + camera_offset;
+
+ if (isAgentAvatarValid())
+ {
+ LLVector3d camera_lag_d;
+ F32 lag_interp = LLCriticalDamp::getInterpolant(CAMERA_LAG_HALF_LIFE);
+ LLVector3 target_lag;
+ LLVector3 vel = gAgent.getVelocity();
+
+ // lag by appropriate amount for flying
+ F32 time_in_air = gAgentAvatarp->mTimeInAir.getElapsedTimeF32();
+ if(!mCameraAnimating && gAgentAvatarp->mInAir && time_in_air > GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME)
+ {
+ LLVector3 frame_at_axis = gAgent.getFrameAgent().getAtAxis();
+ frame_at_axis -= projected_vec(frame_at_axis, gAgent.getReferenceUpVector());
+ frame_at_axis.normalize();
+
+ //transition smoothly in air mode, to avoid camera pop
+ F32 u = (time_in_air - GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME) / GROUND_TO_AIR_CAMERA_TRANSITION_TIME;
+ u = llclamp(u, 0.f, 1.f);
+
+ lag_interp *= u;
+
+ if (gViewerWindow->getLeftMouseDown() && gViewerWindow->getLastPick().mObjectID == gAgentAvatarp->getID())
+ {
+ // disable camera lag when using mouse-directed steering
+ target_lag.clearVec();
+ }
+ else
+ {
+ target_lag = vel * gSavedSettings.getF32("DynamicCameraStrength") / 30.f;
+ }
+
+ mCameraLag = lerp(mCameraLag, target_lag, lag_interp);
+
+ F32 lag_dist = mCameraLag.magVec();
+ if (lag_dist > MAX_CAMERA_LAG)
+ {
+ mCameraLag = mCameraLag * MAX_CAMERA_LAG / lag_dist;
+ }
+
+ // clamp camera lag so that avatar is always in front
+ F32 dot = (mCameraLag - (frame_at_axis * (MIN_CAMERA_LAG * u))) * frame_at_axis;
+ if (dot < -(MIN_CAMERA_LAG * u))
+ {
+ mCameraLag -= (dot + (MIN_CAMERA_LAG * u)) * frame_at_axis;
+ }
+ }
+ else
+ {
+ mCameraLag = lerp(mCameraLag, LLVector3::zero, LLCriticalDamp::getInterpolant(0.15f));
+ }
+
+ camera_lag_d.setVec(mCameraLag);
+ camera_position_global = camera_position_global - camera_lag_d;
+ }
+ }
+ }
+ else
+ {
+ LLVector3d focusPosGlobal = calcFocusPositionTargetGlobal();
+ // camera gets pushed out later wrt mCameraFOVZoomFactor...this is "raw" value
+ camera_position_global = focusPosGlobal + mCameraFocusOffset;
+ }
+
+ if (!gSavedSettings.getBOOL("DisableCameraConstraints") && !gAgent.isGodlike())
+ {
+ LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global);
+ bool constrain = true;
+ if(regionp && regionp->canManageEstate())
+ {
+ constrain = false;
+ }
+ if(constrain)
+ {
+ F32 max_dist = (CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode) ? APPEARANCE_MAX_ZOOM : mDrawDistance;
+
+ LLVector3d camera_offset = camera_position_global - gAgent.getPositionGlobal();
+ F32 camera_distance = (F32)camera_offset.magVec();
+
+ if(camera_distance > max_dist)
+ {
+ camera_position_global = gAgent.getPositionGlobal() + (max_dist/camera_distance)*camera_offset;
+ isConstrained = TRUE;
+ }
+ }
+
+// JC - Could constrain camera based on parcel stuff here.
+// LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global);
+//
+// if (regionp && !regionp->mParcelOverlay->isBuildCameraAllowed(regionp->getPosRegionFromGlobal(camera_position_global)))
+// {
+// camera_position_global = last_position_global;
+//
+// isConstrained = TRUE;
+// }
+ }
+
+ // Don't let camera go underground
+ F32 camera_min_off_ground = getCameraMinOffGround();
+
+ camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global);
+
+ if (camera_position_global.mdV[VZ] < camera_land_height + camera_min_off_ground)
+ {
+ camera_position_global.mdV[VZ] = camera_land_height + camera_min_off_ground;
+ isConstrained = TRUE;
+ }
+
+
+ if (hit_limit)
+ {
+ *hit_limit = isConstrained;
+ }
+
+ return camera_position_global;
+}
+
+
+LLVector3 LLAgentCamera::getCameraOffsetInitial()
+{
+ return mCameraOffsetInitial[mCameraPreset];
+}
+
+
+//-----------------------------------------------------------------------------
+// handleScrollWheel()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::handleScrollWheel(S32 clicks)
+{
+ if (mCameraMode == CAMERA_MODE_FOLLOW && getFocusOnAvatar())
+ {
+ if (!mFollowCam.getPositionLocked()) // not if the followCam position is locked in place
+ {
+ mFollowCam.zoom(clicks);
+ if (mFollowCam.isZoomedToMinimumDistance())
+ {
+ changeCameraToMouselook(FALSE);
+ }
+ }
+ }
+ else
+ {
+ LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+ const F32 ROOT_ROOT_TWO = sqrt(F_SQRT2);
+
+ // Block if camera is animating
+ if (mCameraAnimating)
+ {
+ return;
+ }
+
+ if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD)
+ {
+ F32 zoom_factor = (F32)pow(0.8, -clicks);
+ cameraZoomIn(zoom_factor);
+ }
+ else if (mFocusOnAvatar && (mCameraMode == CAMERA_MODE_THIRD_PERSON))
+ {
+ F32 camera_offset_initial_mag = getCameraOffsetInitial().magVec();
+
+ F32 current_zoom_fraction = mTargetCameraDistance / (camera_offset_initial_mag * gSavedSettings.getF32("CameraOffsetScale"));
+ current_zoom_fraction *= 1.f - pow(ROOT_ROOT_TWO, clicks);
+
+ cameraOrbitIn(current_zoom_fraction * camera_offset_initial_mag * gSavedSettings.getF32("CameraOffsetScale"));
+ }
+ else
+ {
+ F32 current_zoom_fraction = (F32)mCameraFocusOffsetTarget.magVec();
+ cameraOrbitIn(current_zoom_fraction * (1.f - pow(ROOT_ROOT_TWO, clicks)));
+ }
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// getCameraMinOffGround()
+//-----------------------------------------------------------------------------
+F32 LLAgentCamera::getCameraMinOffGround()
+{
+ if (mCameraMode == CAMERA_MODE_MOUSELOOK)
+ {
+ return 0.f;
+ }
+ else
+ {
+ if (gSavedSettings.getBOOL("DisableCameraConstraints"))
+ {
+ return -1000.f;
+ }
+ else
+ {
+ return 0.5f;
+ }
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// resetCamera()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::resetCamera()
+{
+ // Remove any pitch from the avatar
+ LLVector3 at = gAgent.getFrameAgent().getAtAxis();
+ at.mV[VZ] = 0.f;
+ at.normalize();
+ gAgent.resetAxes(at);
+ // have to explicitly clear field of view zoom now
+ mCameraFOVZoomFactor = 0.f;
+
+ updateCamera();
+}
+
+//-----------------------------------------------------------------------------
+// changeCameraToMouselook()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::changeCameraToMouselook(BOOL animate)
+{
+ if (LLViewerJoystick::getInstance()->getOverrideCamera())
+ {
+ return;
+ }
+
+ // visibility changes at end of animation
+ gViewerWindow->getWindow()->resetBusyCount();
+
+ // unpause avatar animation
+ gAgent.unpauseAnimation();
+
+ LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset);
+
+ if (isAgentAvatarValid())
+ {
+ gAgentAvatarp->stopMotion(ANIM_AGENT_BODY_NOISE);
+ gAgentAvatarp->stopMotion(ANIM_AGENT_BREATHE_ROT);
+ }
+
+ //gViewerWindow->stopGrab();
+ LLSelectMgr::getInstance()->deselectAll();
+ gViewerWindow->hideCursor();
+ gViewerWindow->moveCursorToCenter();
+
+ if (mCameraMode != CAMERA_MODE_MOUSELOOK)
+ {
+ gFocusMgr.setKeyboardFocus(NULL);
+
+ updateLastCamera();
+ mCameraMode = CAMERA_MODE_MOUSELOOK;
+ const U32 old_flags = gAgent.getControlFlags();
+ gAgent.setControlFlags(AGENT_CONTROL_MOUSELOOK);
+ if (old_flags != gAgent.getControlFlags())
+ {
+ gAgent.setFlagsDirty();
+ }
+
+ if (animate)
+ {
+ startCameraAnimation();
+ }
+ else
+ {
+ mCameraAnimating = FALSE;
+ gAgent.endAnimationUpdateUI();
+ }
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// changeCameraToDefault()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::changeCameraToDefault()
+{
+ if (LLViewerJoystick::getInstance()->getOverrideCamera())
+ {
+ return;
+ }
+
+ if (LLFollowCamMgr::getActiveFollowCamParams())
+ {
+ changeCameraToFollow();
+ }
+ else
+ {
+ changeCameraToThirdPerson();
+ }
+}
+
+
+// Ventrella
+//-----------------------------------------------------------------------------
+// changeCameraToFollow()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::changeCameraToFollow(BOOL animate)
+{
+ if (LLViewerJoystick::getInstance()->getOverrideCamera())
+ {
+ return;
+ }
+
+ if(mCameraMode != CAMERA_MODE_FOLLOW)
+ {
+ if (mCameraMode == CAMERA_MODE_MOUSELOOK)
+ {
+ animate = FALSE;
+ }
+ startCameraAnimation();
+
+ updateLastCamera();
+ mCameraMode = CAMERA_MODE_FOLLOW;
+
+ // bang-in the current focus, position, and up vector of the follow cam
+ mFollowCam.reset(mCameraPositionAgent, LLViewerCamera::getInstance()->getPointOfInterest(), LLVector3::z_axis);
+
+ if (gBasicToolset)
+ {
+ LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
+ }
+
+ if (isAgentAvatarValid())
+ {
+ gAgentAvatarp->mPelvisp->setPosition(LLVector3::zero);
+ gAgentAvatarp->startMotion( ANIM_AGENT_BODY_NOISE );
+ gAgentAvatarp->startMotion( ANIM_AGENT_BREATHE_ROT );
+ }
+
+ // unpause avatar animation
+ gAgent.unpauseAnimation();
+
+ const U32 old_flags = gAgent.getControlFlags();
+ gAgent.clearControlFlags(AGENT_CONTROL_MOUSELOOK);
+ if (old_flags != gAgent.getControlFlags())
+ {
+ gAgent.setFlagsDirty();
+ }
+
+ if (animate)
+ {
+ startCameraAnimation();
+ }
+ else
+ {
+ mCameraAnimating = FALSE;
+ gAgent.endAnimationUpdateUI();
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// changeCameraToThirdPerson()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::changeCameraToThirdPerson(BOOL animate)
+{
+ if (LLViewerJoystick::getInstance()->getOverrideCamera())
+ {
+ return;
+ }
+
+ gViewerWindow->getWindow()->resetBusyCount();
+
+ mCameraZoomFraction = INITIAL_ZOOM_FRACTION;
+
+ if (isAgentAvatarValid())
+ {
+ if (!gAgentAvatarp->isSitting())
+ {
+ gAgentAvatarp->mPelvisp->setPosition(LLVector3::zero);
+ }
+ gAgentAvatarp->startMotion(ANIM_AGENT_BODY_NOISE);
+ gAgentAvatarp->startMotion(ANIM_AGENT_BREATHE_ROT);
+ }
+
+ LLVector3 at_axis;
+
+ // unpause avatar animation
+ gAgent.unpauseAnimation();
+
+ if (mCameraMode != CAMERA_MODE_THIRD_PERSON)
+ {
+ if (gBasicToolset)
+ {
+ LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
+ }
+
+ mCameraLag.clearVec();
+ if (mCameraMode == CAMERA_MODE_MOUSELOOK)
+ {
+ mCurrentCameraDistance = MIN_CAMERA_DISTANCE;
+ mTargetCameraDistance = MIN_CAMERA_DISTANCE;
+ animate = FALSE;
+ }
+ updateLastCamera();
+ mCameraMode = CAMERA_MODE_THIRD_PERSON;
+ const U32 old_flags = gAgent.getControlFlags();
+ gAgent.clearControlFlags(AGENT_CONTROL_MOUSELOOK);
+ if (old_flags != gAgent.getControlFlags())
+ {
+ gAgent.setFlagsDirty();
+ }
+
+ }
+
+ // Remove any pitch from the avatar
+ if (isAgentAvatarValid() && gAgentAvatarp->getParent())
+ {
+ LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
+ at_axis = LLViewerCamera::getInstance()->getAtAxis();
+ at_axis.mV[VZ] = 0.f;
+ at_axis.normalize();
+ gAgent.resetAxes(at_axis * ~obj_rot);
+ }
+ else
+ {
+ at_axis = gAgent.getFrameAgent().getAtAxis();
+ at_axis.mV[VZ] = 0.f;
+ at_axis.normalize();
+ gAgent.resetAxes(at_axis);
+ }
+
+
+ if (animate)
+ {
+ startCameraAnimation();
+ }
+ else
+ {
+ mCameraAnimating = FALSE;
+ gAgent.endAnimationUpdateUI();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// changeCameraToCustomizeAvatar()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_animate)
+{
+ if (LLViewerJoystick::getInstance()->getOverrideCamera())
+ {
+ return;
+ }
+
+ gAgent.standUp(); // force stand up
+ gViewerWindow->getWindow()->resetBusyCount();
+
+ if (gFaceEditToolset)
+ {
+ LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset);
+ }
+
+ if (camera_animate)
+ {
+ startCameraAnimation();
+ }
+
+ // Remove any pitch from the avatar
+ //LLVector3 at = gAgent.getFrameAgent().getAtAxis();
+ //at.mV[VZ] = 0.f;
+ //at.normalize();
+ //gAgent.resetAxes(at);
+
+ if (mCameraMode != CAMERA_MODE_CUSTOMIZE_AVATAR)
+ {
+ updateLastCamera();
+ mCameraMode = CAMERA_MODE_CUSTOMIZE_AVATAR;
+ const U32 old_flags = gAgent.getControlFlags();
+ gAgent.clearControlFlags(AGENT_CONTROL_MOUSELOOK);
+ if (old_flags != gAgent.getControlFlags())
+ {
+ gAgent.setFlagsDirty();
+ }
+
+ gFocusMgr.setKeyboardFocus( NULL );
+ gFocusMgr.setMouseCapture( NULL );
+
+ LLVOAvatarSelf::onCustomizeStart();
+ }
+
+ if (isAgentAvatarValid())
+ {
+ if(avatar_animate)
+ {
+ // Remove any pitch from the avatar
+ LLVector3 at = gAgent.getFrameAgent().getAtAxis();
+ at.mV[VZ] = 0.f;
+ at.normalize();
+ gAgent.resetAxes(at);
+
+ gAgent.sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START);
+ gAgent.setCustomAnim(TRUE);
+ gAgentAvatarp->startMotion(ANIM_AGENT_CUSTOMIZE);
+ LLMotion* turn_motion = gAgentAvatarp->findMotion(ANIM_AGENT_CUSTOMIZE);
+
+ if (turn_motion)
+ {
+ mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP;
+
+ }
+ else
+ {
+ mAnimationDuration = gSavedSettings.getF32("ZoomTime");
+ }
+ }
+ setFocusGlobal(LLVector3d::zero);
+ }
+ else
+ {
+ mCameraAnimating = FALSE;
+ gAgent.endAnimationUpdateUI();
+ }
+}
+
+
+void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
+{
+ //zoom is supposed to be reset for the front and group views
+ mCameraZoomFraction = 1.f;
+
+ //focusing on avatar in that case means following him on movements
+ mFocusOnAvatar = TRUE;
+
+ mCameraPreset = preset;
+
+ gSavedSettings.setU32("CameraPreset", mCameraPreset);
+}
+
+
+//
+// Focus point management
+//
+
+//-----------------------------------------------------------------------------
+// startCameraAnimation()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::startCameraAnimation()
+{
+ mAnimationCameraStartGlobal = getCameraPositionGlobal();
+ mAnimationFocusStartGlobal = mFocusGlobal;
+ mAnimationTimer.reset();
+ mCameraAnimating = TRUE;
+ mAnimationDuration = gSavedSettings.getF32("ZoomTime");
+}
+
+//-----------------------------------------------------------------------------
+// stopCameraAnimation()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::stopCameraAnimation()
+{
+ mCameraAnimating = FALSE;
+}
+
+void LLAgentCamera::clearFocusObject()
+{
+ if (mFocusObject.notNull())
+ {
+ startCameraAnimation();
+
+ setFocusObject(NULL);
+ mFocusObjectOffset.clearVec();
+ }
+}
+
+void LLAgentCamera::setFocusObject(LLViewerObject* object)
+{
+ mFocusObject = object;
+}
+
+// Focus on a point, but try to keep camera position stable.
+//-----------------------------------------------------------------------------
+// setFocusGlobal()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::setFocusGlobal(const LLPickInfo& pick)
+{
+ LLViewerObject* objectp = gObjectList.findObject(pick.mObjectID);
+
+ if (objectp)
+ {
+ // focus on object plus designated offset
+ // which may or may not be same as pick.mPosGlobal
+ setFocusGlobal(objectp->getPositionGlobal() + LLVector3d(pick.mObjectOffset), pick.mObjectID);
+ }
+ else
+ {
+ // focus directly on point where user clicked
+ setFocusGlobal(pick.mPosGlobal, pick.mObjectID);
+ }
+}
+
+
+void LLAgentCamera::setFocusGlobal(const LLVector3d& focus, const LLUUID &object_id)
+{
+ setFocusObject(gObjectList.findObject(object_id));
+ LLVector3d old_focus = mFocusTargetGlobal;
+ LLViewerObject *focus_obj = mFocusObject;
+
+ // if focus has changed
+ if (old_focus != focus)
+ {
+ if (focus.isExactlyZero())
+ {
+ if (isAgentAvatarValid())
+ {
+ mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(gAgentAvatarp->mHeadp->getWorldPosition());
+ }
+ else
+ {
+ mFocusTargetGlobal = gAgent.getPositionGlobal();
+ }
+ mCameraFocusOffsetTarget = getCameraPositionGlobal() - mFocusTargetGlobal;
+ mCameraFocusOffset = mCameraFocusOffsetTarget;
+ setLookAt(LOOKAT_TARGET_CLEAR);
+ }
+ else
+ {
+ mFocusTargetGlobal = focus;
+ if (!focus_obj)
+ {
+ mCameraFOVZoomFactor = 0.f;
+ }
+
+ mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(mCameraVirtualPositionAgent) - mFocusTargetGlobal;
+
+ startCameraAnimation();
+
+ if (focus_obj)
+ {
+ if (focus_obj->isAvatar())
+ {
+ setLookAt(LOOKAT_TARGET_FOCUS, focus_obj);
+ }
+ else
+ {
+ setLookAt(LOOKAT_TARGET_FOCUS, focus_obj, (gAgent.getPosAgentFromGlobal(focus) - focus_obj->getRenderPosition()) * ~focus_obj->getRenderRotation());
+ }
+ }
+ else
+ {
+ setLookAt(LOOKAT_TARGET_FOCUS, NULL, gAgent.getPosAgentFromGlobal(mFocusTargetGlobal));
+ }
+ }
+ }
+ else // focus == mFocusTargetGlobal
+ {
+ if (focus.isExactlyZero())
+ {
+ if (isAgentAvatarValid())
+ {
+ mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(gAgentAvatarp->mHeadp->getWorldPosition());
+ }
+ else
+ {
+ mFocusTargetGlobal = gAgent.getPositionGlobal();
+ }
+ }
+ mCameraFocusOffsetTarget = (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor);;
+ mCameraFocusOffset = mCameraFocusOffsetTarget;
+ }
+
+ if (mFocusObject.notNull())
+ {
+ // for attachments, make offset relative to avatar, not the attachment
+ if (mFocusObject->isAttachment())
+ {
+ while (mFocusObject.notNull() && !mFocusObject->isAvatar())
+ {
+ mFocusObject = (LLViewerObject*) mFocusObject->getParent();
+ }
+ setFocusObject((LLViewerObject*)mFocusObject);
+ }
+ updateFocusOffset();
+ }
+}
+
+// Used for avatar customization
+//-----------------------------------------------------------------------------
+// setCameraPosAndFocusGlobal()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, const LLVector3d& focus, const LLUUID &object_id)
+{
+ LLVector3d old_focus = mFocusTargetGlobal;
+
+ F64 focus_delta_squared = (old_focus - focus).magVecSquared();
+ const F64 ANIM_EPSILON_SQUARED = 0.0001;
+ if (focus_delta_squared > ANIM_EPSILON_SQUARED)
+ {
+ startCameraAnimation();
+
+ if (CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode)
+ {
+ // Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize.
+ mAnimationCameraStartGlobal -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal ));
+ }
+ }
+
+ //LLViewerCamera::getInstance()->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) );
+ setFocusObject(gObjectList.findObject(object_id));
+ mFocusTargetGlobal = focus;
+ mCameraFocusOffsetTarget = camera_pos - focus;
+ mCameraFocusOffset = mCameraFocusOffsetTarget;
+
+ if (mFocusObject)
+ {
+ if (mFocusObject->isAvatar())
+ {
+ setLookAt(LOOKAT_TARGET_FOCUS, mFocusObject);
+ }
+ else
+ {
+ setLookAt(LOOKAT_TARGET_FOCUS, mFocusObject, (gAgent.getPosAgentFromGlobal(focus) - mFocusObject->getRenderPosition()) * ~mFocusObject->getRenderRotation());
+ }
+ }
+ else
+ {
+ setLookAt(LOOKAT_TARGET_FOCUS, NULL, gAgent.getPosAgentFromGlobal(mFocusTargetGlobal));
+ }
+
+ if (mCameraAnimating)
+ {
+ const F64 ANIM_METERS_PER_SECOND = 10.0;
+ const F64 MIN_ANIM_SECONDS = 0.5;
+ const F64 MAX_ANIM_SECONDS = 10.0;
+ F64 anim_duration = llmax( MIN_ANIM_SECONDS, sqrt(focus_delta_squared) / ANIM_METERS_PER_SECOND );
+ anim_duration = llmin( anim_duration, MAX_ANIM_SECONDS );
+ setAnimationDuration( (F32)anim_duration );
+ }
+
+ updateFocusOffset();
+}
+
+//-----------------------------------------------------------------------------
+// setSitCamera()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::setSitCamera(const LLUUID &object_id, const LLVector3 &camera_pos, const LLVector3 &camera_focus)
+{
+ BOOL camera_enabled = !object_id.isNull();
+
+ if (camera_enabled)
+ {
+ LLViewerObject *reference_object = gObjectList.findObject(object_id);
+ if (reference_object)
+ {
+ //convert to root object relative?
+ mSitCameraPos = camera_pos;
+ mSitCameraFocus = camera_focus;
+ mSitCameraReferenceObject = reference_object;
+ mSitCameraEnabled = TRUE;
+ }
+ }
+ else
+ {
+ mSitCameraPos.clearVec();
+ mSitCameraFocus.clearVec();
+ mSitCameraReferenceObject = NULL;
+ mSitCameraEnabled = FALSE;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// setFocusOnAvatar()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)
+{
+ if (focus_on_avatar != mFocusOnAvatar)
+ {
+ if (animate)
+ {
+ startCameraAnimation();
+ }
+ else
+ {
+ stopCameraAnimation();
+ }
+ }
+
+ //RN: when focused on the avatar, we're not "looking" at it
+ // looking implies intent while focusing on avatar means
+ // you're just walking around with a camera on you...eesh.
+ if (!mFocusOnAvatar && focus_on_avatar)
+ {
+ setFocusGlobal(LLVector3d::zero);
+ mCameraFOVZoomFactor = 0.f;
+ if (mCameraMode == CAMERA_MODE_THIRD_PERSON)
+ {
+ LLVector3 at_axis;
+ if (isAgentAvatarValid() && gAgentAvatarp->getParent())
+ {
+ LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
+ at_axis = LLViewerCamera::getInstance()->getAtAxis();
+ at_axis.mV[VZ] = 0.f;
+ at_axis.normalize();
+ gAgent.resetAxes(at_axis * ~obj_rot);
+ }
+ else
+ {
+ at_axis = LLViewerCamera::getInstance()->getAtAxis();
+ at_axis.mV[VZ] = 0.f;
+ at_axis.normalize();
+ gAgent.resetAxes(at_axis);
+ }
+ }
+ }
+ // unlocking camera from avatar
+ else if (mFocusOnAvatar && !focus_on_avatar)
+ {
+ // keep camera focus point consistent, even though it is now unlocked
+ setFocusGlobal(gAgent.getPositionGlobal() + calcThirdPersonFocusOffset(), gAgent.getID());
+ }
+
+ mFocusOnAvatar = focus_on_avatar;
+}
+
+
+BOOL LLAgentCamera::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position)
+{
+ if(object && object->isAttachment())
+ {
+ LLViewerObject* parent = object;
+ while(parent)
+ {
+ if (parent == gAgentAvatarp)
+ {
+ // looking at an attachment on ourselves, which we don't want to do
+ object = gAgentAvatarp;
+ position.clearVec();
+ }
+ parent = (LLViewerObject*)parent->getParent();
+ }
+ }
+ if(!mLookAt || mLookAt->isDead())
+ {
+ mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT);
+ mLookAt->setSourceObject(gAgentAvatarp);
+ }
+
+ return mLookAt->setLookAt(target_type, object, position);
+}
+
+//-----------------------------------------------------------------------------
+// lookAtLastChat()
+//-----------------------------------------------------------------------------
+void LLAgentCamera::lookAtLastChat()
+{
+ // Block if camera is animating or not in normal third person camera mode
+ if (mCameraAnimating || !cameraThirdPerson())
+ {
+ return;
+ }
+
+ LLViewerObject *chatter = gObjectList.findObject(gAgent.getLastChatter());
+ if (!chatter)
+ {
+ return;
+ }
+
+ LLVector3 delta_pos;
+ if (chatter->isAvatar())
+ {
+ LLVOAvatar *chatter_av = (LLVOAvatar*)chatter;
+ if (isAgentAvatarValid() && chatter_av->mHeadp)
+ {
+ delta_pos = chatter_av->mHeadp->getWorldPosition() - gAgentAvatarp->mHeadp->getWorldPosition();
+ }
+ else
+ {
+ delta_pos = chatter->getPositionAgent() - gAgent.getPositionAgent();
+ }
+ delta_pos.normalize();
+
+ gAgent.setControlFlags(AGENT_CONTROL_STOP);
+
+ changeCameraToThirdPerson();
+
+ LLVector3 new_camera_pos = gAgentAvatarp->mHeadp->getWorldPosition();
+ LLVector3 left = delta_pos % LLVector3::z_axis;
+ left.normalize();
+ LLVector3 up = left % delta_pos;
+ up.normalize();
+ new_camera_pos -= delta_pos * 0.4f;
+ new_camera_pos += left * 0.3f;
+ new_camera_pos += up * 0.2f;
+ if (chatter_av->mHeadp)
+ {
+ setFocusGlobal(gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), gAgent.getLastChatter());
+ mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition());
+ }
+ else
+ {
+ setFocusGlobal(chatter->getPositionGlobal(), gAgent.getLastChatter());
+ mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
+ }
+ setFocusOnAvatar(FALSE, TRUE);
+ }
+ else
+ {
+ delta_pos = chatter->getRenderPosition() - gAgent.getPositionAgent();
+ delta_pos.normalize();
+
+ gAgent.setControlFlags(AGENT_CONTROL_STOP);
+
+ changeCameraToThirdPerson();
+
+ LLVector3 new_camera_pos = gAgentAvatarp->mHeadp->getWorldPosition();
+ LLVector3 left = delta_pos % LLVector3::z_axis;
+ left.normalize();
+ LLVector3 up = left % delta_pos;
+ up.normalize();
+ new_camera_pos -= delta_pos * 0.4f;
+ new_camera_pos += left * 0.3f;
+ new_camera_pos += up * 0.2f;
+
+ setFocusGlobal(chatter->getPositionGlobal(), gAgent.getLastChatter());
+ mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
+ setFocusOnAvatar(FALSE, TRUE);
+ }
+}
+
+BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position)
+{
+ // disallow pointing at attachments and avatars
+ if (object && (object->isAttachment() || object->isAvatar()))
+ {
+ return FALSE;
+ }
+ if (!mPointAt || mPointAt->isDead())
+ {
+ mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT);
+ mPointAt->setSourceObject(gAgentAvatarp);
+ }
+ return mPointAt->setPointAt(target_type, object, position);
+}
+
+ELookAtType LLAgentCamera::getLookAtType()
+{
+ if (mLookAt)
+ {
+ return mLookAt->getLookAtType();
+ }
+ return LOOKAT_TARGET_NONE;
+}
+
+EPointAtType LLAgentCamera::getPointAtType()
+{
+ if (mPointAt)
+ {
+ return mPointAt->getPointAtType();
+ }
+ return POINTAT_TARGET_NONE;
+}
+
+void LLAgentCamera::clearGeneralKeys()
+{
+ mAtKey = 0;
+ mWalkKey = 0;
+ mLeftKey = 0;
+ mUpKey = 0;
+ mYawKey = 0.f;
+ mPitchKey = 0.f;
+}
+
+void LLAgentCamera::clearOrbitKeys()
+{
+ mOrbitLeftKey = 0.f;
+ mOrbitRightKey = 0.f;
+ mOrbitUpKey = 0.f;
+ mOrbitDownKey = 0.f;
+ mOrbitInKey = 0.f;
+ mOrbitOutKey = 0.f;
+}
+
+void LLAgentCamera::clearPanKeys()
+{
+ mPanRightKey = 0.f;
+ mPanLeftKey = 0.f;
+ mPanUpKey = 0.f;
+ mPanDownKey = 0.f;
+ mPanInKey = 0.f;
+ mPanOutKey = 0.f;
+}
+
+// static
+S32 LLAgentCamera::directionToKey(S32 direction)
+{
+ if (direction > 0) return 1;
+ if (direction < 0) return -1;
+ return 0;
+}
+
+
+// EOF
+
diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h
new file mode 100644
index 0000000000..5cbb1de6f4
--- /dev/null
+++ b/indra/newview/llagentcamera.h
@@ -0,0 +1,400 @@
+/**
+ * @file llagent.h
+ * @brief LLAgent class header file
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ *
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLAGENTCAMERA_H
+#define LL_LLAGENTCAMERA_H
+
+#include "llfollowcam.h" // Ventrella
+#include "llhudeffectlookat.h" // EPointAtType
+#include "llhudeffectpointat.h" // ELookAtType
+
+class LLPickInfo;
+class LLVOAvatarSelf;
+
+//--------------------------------------------------------------------
+// Types
+//--------------------------------------------------------------------
+enum ECameraMode
+{
+ CAMERA_MODE_THIRD_PERSON,
+ CAMERA_MODE_MOUSELOOK,
+ CAMERA_MODE_CUSTOMIZE_AVATAR,
+ CAMERA_MODE_FOLLOW
+};
+
+/** Camera Presets for CAMERA_MODE_THIRD_PERSON */
+enum ECameraPreset
+{
+ /** Default preset, what the Third Person Mode actually was */
+ CAMERA_PRESET_REAR_VIEW,
+
+ /** "Looking at the Avatar from the front" */
+ CAMERA_PRESET_FRONT_VIEW,
+
+ /** "Above and to the left, over the shoulder, pulled back a little on the zoom" */
+ CAMERA_PRESET_GROUP_VIEW
+};
+
+//------------------------------------------------------------------------
+// LLAgentCamera
+//------------------------------------------------------------------------
+class LLAgentCamera
+{
+ LOG_CLASS(LLAgentCamera);
+
+public:
+ //--------------------------------------------------------------------
+ // Constructors / Destructors
+ //--------------------------------------------------------------------
+public:
+ LLAgentCamera();
+ virtual ~LLAgentCamera();
+ void init();
+ void cleanup();
+ void setAvatarObject(LLVOAvatarSelf* avatar);
+private:
+ bool mInitialized;
+
+
+ //--------------------------------------------------------------------
+ // Mode
+ //--------------------------------------------------------------------
+public:
+ void changeCameraToDefault();
+ void changeCameraToMouselook(BOOL animate = TRUE);
+ void changeCameraToThirdPerson(BOOL animate = TRUE);
+ void changeCameraToCustomizeAvatar(BOOL avatar_animate = TRUE, BOOL camera_animate = TRUE); // Trigger transition animation
+ void changeCameraToFollow(BOOL animate = TRUE); // Ventrella
+ BOOL cameraThirdPerson() const { return (mCameraMode == CAMERA_MODE_THIRD_PERSON && mLastCameraMode == CAMERA_MODE_THIRD_PERSON); }
+ BOOL cameraMouselook() const { return (mCameraMode == CAMERA_MODE_MOUSELOOK && mLastCameraMode == CAMERA_MODE_MOUSELOOK); }
+ BOOL cameraCustomizeAvatar() const { return (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR /*&& !mCameraAnimating*/); }
+ BOOL cameraFollow() const { return (mCameraMode == CAMERA_MODE_FOLLOW && mLastCameraMode == CAMERA_MODE_FOLLOW); }
+ ECameraMode getCameraMode() const { return mCameraMode; }
+ ECameraMode getLastCameraMode() const { return mLastCameraMode; }
+ void updateCamera(); // Call once per frame to update camera location/orientation
+ void resetCamera(); // Slam camera into its default position
+ void updateLastCamera(); // Set last camera to current camera
+
+private:
+ ECameraMode mCameraMode; // Target mode after transition animation is done
+ ECameraMode mLastCameraMode;
+
+ //--------------------------------------------------------------------
+ // Preset
+ //--------------------------------------------------------------------
+public:
+ void switchCameraPreset(ECameraPreset preset);
+private:
+ /** Determines default camera offset depending on the current camera preset */
+ LLVector3 getCameraOffsetInitial();
+
+ /** Camera preset in Third Person Mode */
+ ECameraPreset mCameraPreset;
+
+ /** Initial camera offsets */
+ std::map<ECameraPreset, LLVector3> mCameraOffsetInitial;
+
+ /** Initial focus offsets */
+ std::map<ECameraPreset, LLVector3d> mFocusOffsetInitial;
+
+ //--------------------------------------------------------------------
+ // Position
+ //--------------------------------------------------------------------
+public:
+ LLVector3d getCameraPositionGlobal() const;
+ const LLVector3 &getCameraPositionAgent() const;
+ LLVector3d calcCameraPositionTargetGlobal(BOOL *hit_limit = NULL); // Calculate the camera position target
+ F32 getCameraMinOffGround(); // Minimum height off ground for this mode, meters
+ void setCameraCollidePlane(const LLVector4 &plane) { mCameraCollidePlane = plane; }
+ BOOL calcCameraMinDistance(F32 &obj_min_distance);
+ F32 calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global);
+ F32 getCurrentCameraBuildOffset() { return (F32)mCameraFocusOffset.length(); }
+ void clearCameraLag() { mCameraLag.clearVec(); }
+private:
+ F32 mCurrentCameraDistance; // Current camera offset from avatar
+ F32 mTargetCameraDistance; // Target camera offset from avatar
+ F32 mCameraFOVZoomFactor; // Amount of fov zoom applied to camera when zeroing in on an object
+ F32 mCameraCurrentFOVZoomFactor; // Interpolated fov zoom
+ F32 mCameraFOVDefault; // Default field of view that is basis for FOV zoom effect
+ LLVector4 mCameraCollidePlane; // Colliding plane for camera
+ F32 mCameraZoomFraction; // Mousewheel driven fraction of zoom
+ LLVector3 mCameraPositionAgent; // Camera position in agent coordinates
+ LLVector3 mCameraVirtualPositionAgent; // Camera virtual position (target) before performing FOV zoom
+ LLVector3d mCameraSmoothingLastPositionGlobal;
+ LLVector3d mCameraSmoothingLastPositionAgent;
+ bool mCameraSmoothingStop;
+ LLVector3 mCameraLag; // Third person camera lag
+ LLVector3 mCameraUpVector; // Camera's up direction in world coordinates (determines the 'roll' of the view)
+
+ //--------------------------------------------------------------------
+ // Follow
+ //--------------------------------------------------------------------
+public:
+ void setUsingFollowCam(bool using_follow_cam);
+private:
+ LLFollowCam mFollowCam; // Ventrella
+
+ //--------------------------------------------------------------------
+ // Sit
+ //--------------------------------------------------------------------
+public:
+ void setupSitCamera();
+ BOOL sitCameraEnabled() { return mSitCameraEnabled; }
+ void setSitCamera(const LLUUID &object_id,
+ const LLVector3 &camera_pos = LLVector3::zero, const LLVector3 &camera_focus = LLVector3::zero);
+private:
+ LLPointer<LLViewerObject> mSitCameraReferenceObject; // Object to which camera is related when sitting
+ BOOL mSitCameraEnabled; // Use provided camera information when sitting?
+ LLVector3 mSitCameraPos; // Root relative camera pos when sitting
+ LLVector3 mSitCameraFocus; // Root relative camera target when sitting
+
+ //--------------------------------------------------------------------
+ // Animation
+ //--------------------------------------------------------------------
+public:
+ void setCameraAnimating(BOOL b) { mCameraAnimating = b; }
+ BOOL getCameraAnimating() { return mCameraAnimating; }
+ void setAnimationDuration(F32 seconds) { mAnimationDuration = seconds; }
+ void startCameraAnimation();
+ void stopCameraAnimation();
+private:
+ LLFrameTimer mAnimationTimer; // Seconds that transition animation has been active
+ F32 mAnimationDuration; // In seconds
+ BOOL mCameraAnimating; // Camera is transitioning from one mode to another
+ LLVector3d mAnimationCameraStartGlobal; // Camera start position, global coords
+ LLVector3d mAnimationFocusStartGlobal; // Camera focus point, global coords
+
+ //--------------------------------------------------------------------
+ // Focus
+ //--------------------------------------------------------------------
+public:
+ LLVector3d calcFocusPositionTargetGlobal();
+ LLVector3 calcFocusOffset(LLViewerObject *object, LLVector3 pos_agent, S32 x, S32 y);
+ BOOL getFocusOnAvatar() const { return mFocusOnAvatar; }
+ LLPointer<LLViewerObject>& getFocusObject() { return mFocusObject; }
+ F32 getFocusObjectDist() const { return mFocusObjectDist; }
+ void updateFocusOffset();
+ void validateFocusObject();
+ void setFocusGlobal(const LLPickInfo& pick);
+ void setFocusGlobal(const LLVector3d &focus, const LLUUID &object_id = LLUUID::null);
+ void setFocusOnAvatar(BOOL focus, BOOL animate);
+ void setCameraPosAndFocusGlobal(const LLVector3d& pos, const LLVector3d& focus, const LLUUID &object_id);
+ void clearFocusObject();
+ void setFocusObject(LLViewerObject* object);
+ void setObjectTracking(BOOL track) { mTrackFocusObject = track; }
+ const LLVector3d &getFocusGlobal() const { return mFocusGlobal; }
+ const LLVector3d &getFocusTargetGlobal() const { return mFocusTargetGlobal; }
+private:
+ LLVector3d mCameraFocusOffset; // Offset from focus point in build mode
+ LLVector3d mCameraFocusOffsetTarget; // Target towards which we are lerping the camera's focus offset
+ BOOL mFocusOnAvatar;
+ LLVector3d mFocusGlobal;
+ LLVector3d mFocusTargetGlobal;
+ LLPointer<LLViewerObject> mFocusObject;
+ F32 mFocusObjectDist;
+ LLVector3 mFocusObjectOffset;
+ F32 mFocusDotRadius; // Meters
+ BOOL mTrackFocusObject;
+ F32 mUIOffset;
+
+ //--------------------------------------------------------------------
+ // Lookat / Pointat
+ //--------------------------------------------------------------------
+public:
+ void updateLookAt(const S32 mouse_x, const S32 mouse_y);
+ BOOL setLookAt(ELookAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero);
+ ELookAtType getLookAtType();
+ void lookAtLastChat();
+ void slamLookAt(const LLVector3 &look_at); // Set the physics data
+ BOOL setPointAt(EPointAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero);
+ EPointAtType getPointAtType();
+public:
+ LLPointer<LLHUDEffectLookAt> mLookAt;
+ LLPointer<LLHUDEffectPointAt> mPointAt;
+
+ //--------------------------------------------------------------------
+ // Third person
+ //--------------------------------------------------------------------
+public:
+ LLVector3d calcThirdPersonFocusOffset();
+ void setThirdPersonHeadOffset(LLVector3 offset) { mThirdPersonHeadOffset = offset; }
+private:
+ LLVector3 mThirdPersonHeadOffset; // Head offset for third person camera position
+
+ //--------------------------------------------------------------------
+ // Orbit
+ //--------------------------------------------------------------------
+public:
+ void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point
+ void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point
+ void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point
+
+ //--------------------------------------------------------------------
+ // Zoom
+ //--------------------------------------------------------------------
+public:
+ void handleScrollWheel(S32 clicks); // Mousewheel driven zoom
+ void cameraZoomIn(const F32 factor); // Zoom in by fraction of current distance
+ F32 getCameraZoomFraction(); // Get camera zoom as fraction of minimum and maximum zoom
+ void setCameraZoomFraction(F32 fraction); // Set camera zoom as fraction of minimum and maximum zoom
+ F32 calcCameraFOVZoomFactor();
+
+ //--------------------------------------------------------------------
+ // Pan
+ //--------------------------------------------------------------------
+public:
+ void cameraPanIn(const F32 meters);
+ void cameraPanLeft(const F32 meters);
+ void cameraPanUp(const F32 meters);
+
+ //--------------------------------------------------------------------
+ // View
+ //--------------------------------------------------------------------
+public:
+ // Called whenever the agent moves. Puts camera back in default position, deselects items, etc.
+ void resetView(BOOL reset_camera = TRUE, BOOL change_camera = FALSE);
+ // Called on camera movement. Unlocks camera from the default position behind the avatar.
+ void unlockView();
+public:
+ F32 mDrawDistance;
+
+ //--------------------------------------------------------------------
+ // Mouselook
+ //--------------------------------------------------------------------
+public:
+ BOOL getForceMouselook() const { return mForceMouselook; }
+ void setForceMouselook(BOOL mouselook) { mForceMouselook = mouselook; }
+private:
+ BOOL mForceMouselook;
+
+ //--------------------------------------------------------------------
+ // HUD
+ //--------------------------------------------------------------------
+public:
+ F32 mHUDTargetZoom; // Target zoom level for HUD objects (used when editing)
+ F32 mHUDCurZoom; // Current animated zoom level for HUD objects
+
+
+/********************************************************************************
+ ** **
+ ** KEYS
+ **/
+
+public:
+ S32 getAtKey() const { return mAtKey; }
+ S32 getWalkKey() const { return mWalkKey; }
+ S32 getLeftKey() const { return mLeftKey; }
+ S32 getUpKey() const { return mUpKey; }
+ F32 getYawKey() const { return mYawKey; }
+ F32 getPitchKey() const { return mPitchKey; }
+
+ void setAtKey(S32 mag) { mAtKey = mag; }
+ void setWalkKey(S32 mag) { mWalkKey = mag; }
+ void setLeftKey(S32 mag) { mLeftKey = mag; }
+ void setUpKey(S32 mag) { mUpKey = mag; }
+ void setYawKey(F32 mag) { mYawKey = mag; }
+ void setPitchKey(F32 mag) { mPitchKey = mag; }
+
+ void clearGeneralKeys();
+ static S32 directionToKey(S32 direction); // Changes direction to -1/0/1
+
+private:
+ S32 mAtKey; // Either 1, 0, or -1. Indicates that movement key is pressed
+ S32 mWalkKey; // Like AtKey, but causes less forward thrust
+ S32 mLeftKey;
+ S32 mUpKey;
+ F32 mYawKey;
+ F32 mPitchKey;
+
+ //--------------------------------------------------------------------
+ // Orbit
+ //--------------------------------------------------------------------
+public:
+ F32 getOrbitLeftKey() const { return mOrbitLeftKey; }
+ F32 getOrbitRightKey() const { return mOrbitRightKey; }
+ F32 getOrbitUpKey() const { return mOrbitUpKey; }
+ F32 getOrbitDownKey() const { return mOrbitDownKey; }
+ F32 getOrbitInKey() const { return mOrbitInKey; }
+ F32 getOrbitOutKey() const { return mOrbitOutKey; }
+
+ void setOrbitLeftKey(F32 mag) { mOrbitLeftKey = mag; }
+ void setOrbitRightKey(F32 mag) { mOrbitRightKey = mag; }
+ void setOrbitUpKey(F32 mag) { mOrbitUpKey = mag; }
+ void setOrbitDownKey(F32 mag) { mOrbitDownKey = mag; }
+ void setOrbitInKey(F32 mag) { mOrbitInKey = mag; }
+ void setOrbitOutKey(F32 mag) { mOrbitOutKey = mag; }
+
+ void clearOrbitKeys();
+private:
+ F32 mOrbitLeftKey;
+ F32 mOrbitRightKey;
+ F32 mOrbitUpKey;
+ F32 mOrbitDownKey;
+ F32 mOrbitInKey;
+ F32 mOrbitOutKey;
+
+ //--------------------------------------------------------------------
+ // Pan
+ //--------------------------------------------------------------------
+public:
+ F32 getPanLeftKey() const { return mPanLeftKey; }
+ F32 getPanRightKey() const { return mPanRightKey; }
+ F32 getPanUpKey() const { return mPanUpKey; }
+ F32 getPanDownKey() const { return mPanDownKey; }
+ F32 getPanInKey() const { return mPanInKey; }
+ F32 getPanOutKey() const { return mPanOutKey; }
+
+ void setPanLeftKey(F32 mag) { mPanLeftKey = mag; }
+ void setPanRightKey(F32 mag) { mPanRightKey = mag; }
+ void setPanUpKey(F32 mag) { mPanUpKey = mag; }
+ void setPanDownKey(F32 mag) { mPanDownKey = mag; }
+ void setPanInKey(F32 mag) { mPanInKey = mag; }
+ void setPanOutKey(F32 mag) { mPanOutKey = mag; }
+
+ void clearPanKeys();
+private:
+ F32 mPanUpKey;
+ F32 mPanDownKey;
+ F32 mPanLeftKey;
+ F32 mPanRightKey;
+ F32 mPanInKey;
+ F32 mPanOutKey;
+
+/** Keys
+ ** **
+ *******************************************************************************/
+
+};
+
+extern LLAgentCamera gAgentCamera;
+
+#endif
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 72ab9235cf..c4597ad6f8 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -49,12 +49,10 @@
void LLAgentUI::buildName(std::string& name)
{
name.clear();
-
- LLVOAvatarSelf* avatar_object = gAgent.getAvatarObject();
- if (avatar_object)
+ if (isAgentAvatarValid())
{
- LLNameValue *first_nv = avatar_object->getNVPair("FirstName");
- LLNameValue *last_nv = avatar_object->getNVPair("LastName");
+ LLNameValue *first_nv = gAgentAvatarp->getNVPair("FirstName");
+ LLNameValue *last_nv = gAgentAvatarp->getNVPair("LastName");
if (first_nv && last_nv)
{
name = first_nv->printData() + " " + last_nv->printData();
@@ -73,7 +71,8 @@ void LLAgentUI::buildName(std::string& name)
//static
void LLAgentUI::buildFullname(std::string& name)
{
- if (gAgent.getAvatarObject()) name = gAgent.getAvatarObject()->getFullname();
+ if (isAgentAvatarValid())
+ name = gAgentAvatarp->getFullname();
}
//static
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index f4bc35002b..9d3b5763e8 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -31,104 +31,33 @@
*/
#include "llviewerprecompiledheaders.h"
-
-#include "llagent.h"
#include "llagentwearables.h"
+#include "llaccordionctrltab.h"
+#include "llagent.h"
+#include "llagentcamera.h"
+#include "llagentwearablesfetch.h"
+#include "llappearancemgr.h"
#include "llcallbacklist.h"
#include "llfloatercustomize.h"
+#include "llfolderview.h"
+#include "llgesturemgr.h"
#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
#include "llinventoryobserver.h"
#include "llinventorypanel.h"
+#include "llmd5.h"
#include "llnotificationsutil.h"
+#include "llpaneloutfitsinventory.h"
+#include "llsidetray.h"
+#include "lltexlayer.h"
#include "llviewerregion.h"
#include "llvoavatarself.h"
#include "llwearable.h"
#include "llwearablelist.h"
-#include "llgesturemgr.h"
-#include "llappearancemgr.h"
-#include "lltexlayer.h"
-#include "llsidetray.h"
-#include "llpaneloutfitsinventory.h"
-#include "llfolderview.h"
-#include "llaccordionctrltab.h"
#include <boost/scoped_ptr.hpp>
-#define USE_CURRENT_OUTFIT_FOLDER
-
-//--------------------------------------------------------------------
-// Classes for fetching initial wearables data
-//--------------------------------------------------------------------
-// Outfit folder fetching callback structure.
-class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver
-{
-public:
- LLInitialWearablesFetch() {}
- ~LLInitialWearablesFetch();
- virtual void done();
-
- struct InitialWearableData
- {
- EWearableType mType;
- LLUUID mItemID;
- LLUUID mAssetID;
- InitialWearableData(EWearableType type, LLUUID& itemID, LLUUID& assetID) :
- mType(type),
- mItemID(itemID),
- mAssetID(assetID)
- {}
- };
-
- typedef std::vector<InitialWearableData> initial_wearable_data_vec_t;
- initial_wearable_data_vec_t mCOFInitialWearables; // Wearables from the Current Outfit Folder
- initial_wearable_data_vec_t mAgentInitialWearables; // Wearables from the old agent wearables msg
-
-protected:
- void processWearablesMessage();
- void processContents();
-};
-
-class LLLibraryOutfitsFetch : public LLInventoryFetchDescendentsObserver
-{
-public:
- enum ELibraryOutfitFetchStep {
- LOFS_FOLDER = 0,
- LOFS_OUTFITS,
- LOFS_LIBRARY,
- LOFS_IMPORTED,
- LOFS_CONTENTS
- };
- LLLibraryOutfitsFetch() : mCurrFetchStep(LOFS_FOLDER), mOutfitsPopulated(false)
- {
- mMyOutfitsID = LLUUID::null;
- mClothingID = LLUUID::null;
- mLibraryClothingID = LLUUID::null;
- mImportedClothingID = LLUUID::null;
- mImportedClothingName = "Imported Library Clothing";
- }
- ~LLLibraryOutfitsFetch() {}
- virtual void done();
- void doneIdle();
- LLUUID mMyOutfitsID;
- void importedFolderFetch();
-protected:
- void folderDone(void);
- void outfitsDone(void);
- void libraryDone(void);
- void importedFolderDone(void);
- void contentsDone(void);
- enum ELibraryOutfitFetchStep mCurrFetchStep;
- typedef std::vector< std::pair< LLUUID, std::string > > cloth_folder_vec_t;
- cloth_folder_vec_t mLibraryClothingFolders;
- cloth_folder_vec_t mImportedClothingFolders;
- bool mOutfitsPopulated;
- LLUUID mClothingID;
- LLUUID mLibraryClothingID;
- LLUUID mImportedClothingID;
- std::string mImportedClothingName;
-};
-
LLAgentWearables gAgentWearables;
BOOL LLAgentWearables::mInitialWearablesUpdateReceived = FALSE;
@@ -218,8 +147,7 @@ struct LLAgentDumper
};
LLAgentWearables::LLAgentWearables() :
- mWearablesLoaded(FALSE),
- mAvatarObject(NULL)
+ mWearablesLoaded(FALSE)
{
}
@@ -230,12 +158,10 @@ LLAgentWearables::~LLAgentWearables()
void LLAgentWearables::cleanup()
{
- mAvatarObject = NULL;
}
void LLAgentWearables::setAvatarObject(LLVOAvatarSelf *avatar)
{
- mAvatarObject = avatar;
if (avatar)
{
sendAgentWearablesRequest();
@@ -245,6 +171,7 @@ void LLAgentWearables::setAvatarObject(LLVOAvatarSelf *avatar)
// wearables
LLAgentWearables::createStandardWearablesAllDoneCallback::~createStandardWearablesAllDoneCallback()
{
+ llinfos << "destructor - all done?" << llendl;
gAgentWearables.createStandardWearablesAllDone();
}
@@ -271,10 +198,16 @@ LLAgentWearables::addWearableToAgentInventoryCallback::addWearableToAgentInvento
mTodo(todo),
mCB(cb)
{
+ llinfos << "constructor" << llendl;
}
void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& inv_item)
{
+ if (mTodo & CALL_CREATESTANDARDDONE)
+ {
+ llinfos << "callback fired, inv_item " << inv_item.asString() << llendl;
+ }
+
if (inv_item.isNull())
return;
@@ -286,6 +219,7 @@ void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& i
}
if (mTodo & CALL_RECOVERDONE)
{
+ LLAppearanceMgr::instance().addCOFItemLink(inv_item,false);
gAgentWearables.recoverMissingWearableDone();
}
/*
@@ -293,6 +227,7 @@ void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& i
*/
if (mTodo & CALL_CREATESTANDARDDONE)
{
+ LLAppearanceMgr::instance().addCOFItemLink(inv_item,false);
gAgentWearables.createStandardWearablesDone(mType, mIndex);
}
if (mTodo & CALL_MAKENEWOUTFITDONE)
@@ -301,7 +236,7 @@ void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& i
}
if (mTodo & CALL_WEARITEM)
{
- LLAppearanceManager::instance().addCOFItemLink(inv_item, true);
+ LLAppearanceMgr::instance().addCOFItemLink(inv_item, true);
}
}
@@ -310,6 +245,8 @@ void LLAgentWearables::addWearabletoAgentInventoryDone(const S32 type,
const LLUUID& item_id,
LLWearable* wearable)
{
+ llinfos << "type " << type << " index " << index << " item " << item_id.asString() << llendl;
+
if (item_id.isNull())
return;
@@ -432,6 +369,11 @@ void LLAgentWearables::saveWearable(const EWearableType type, const U32 index, B
new_wearable->setItemID(old_item_id); // should this be in LLWearable::copyDataFrom()?
setWearable(type,index,new_wearable);
+ // old_wearable may still be referred to by other inventory items. Revert
+ // unsaved changes so other inventory items aren't affected by the changes
+ // that were just saved.
+ old_wearable->revertValues();
+
LLInventoryItem* item = gInventory.getItem(old_item_id);
if (item)
{
@@ -471,7 +413,7 @@ void LLAgentWearables::saveWearable(const EWearableType type, const U32 index, B
return;
}
- gAgent.getAvatarObject()->wearableUpdated( type, TRUE );
+ gAgentAvatarp->wearableUpdated( type, TRUE );
if (send_update)
{
@@ -534,6 +476,11 @@ void LLAgentWearables::saveWearableAs(const EWearableType type,
category_id,
new_name,
cb);
+
+ // old_wearable may still be referred to by other inventory items. Revert
+ // unsaved changes so other inventory items aren't affected by the changes
+ // that were just saved.
+ old_wearable->revertValues();
}
void LLAgentWearables::revertWearable(const EWearableType type, const U32 index)
@@ -665,13 +612,13 @@ const LLWearable* LLAgentWearables::getWearableFromItemID(const LLUUID& item_id)
return NULL;
}
-const LLWearable* LLAgentWearables::getWearableFromAssetID(const LLUUID& asset_id) const
+LLWearable* LLAgentWearables::getWearableFromAssetID(const LLUUID& asset_id)
{
for (S32 i=0; i < WT_COUNT; i++)
{
for (U32 j=0; j < getWearableCount((EWearableType)i); j++)
{
- const LLWearable * curr_wearable = getWearable((EWearableType)i, j);
+ LLWearable * curr_wearable = getWearable((EWearableType)i, j);
if (curr_wearable && (curr_wearable->getAssetID() == asset_id))
{
return curr_wearable;
@@ -764,7 +711,7 @@ U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearabl
void LLAgentWearables::wearableUpdated(LLWearable *wearable)
{
- mAvatarObject->wearableUpdated(wearable->getType(), TRUE);
+ gAgentAvatarp->wearableUpdated(wearable->getType(), TRUE);
wearable->refreshName();
wearable->setLabelUpdated();
@@ -808,7 +755,7 @@ void LLAgentWearables::popWearable(const EWearableType type, U32 index)
if (wearable)
{
mWearableDatas[type].erase(mWearableDatas[type].begin() + index);
- mAvatarObject->wearableUpdated(wearable->getType(), TRUE);
+ gAgentAvatarp->wearableUpdated(wearable->getType(), TRUE);
wearable->setLabelUpdated();
}
}
@@ -940,8 +887,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
LLUUID agent_id;
gMessageSystem->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- if (avatar && (agent_id == avatar->getID()))
+ if (isAgentAvatarValid() && (agent_id == gAgentAvatarp->getID()))
{
gMessageSystem->getU32Fast(_PREHASH_AgentData, _PREHASH_SerialNum, gAgentQueryManager.mUpdateSerialNum);
@@ -998,8 +944,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
// Store initial wearables data until we know whether we have the current outfit folder or need to use the data.
LLInitialWearablesFetch::InitialWearableData wearable_data(type, item_id, asset_id); // MULTI-WEARABLE: update
- outfit->mAgentInitialWearables.push_back(wearable_data);
-
+ outfit->add(wearable_data);
}
lldebugs << " " << LLWearableDictionary::getTypeLabel(type) << llendl;
@@ -1007,9 +952,9 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
// Get the complete information on the items in the inventory and set up an observer
// that will trigger when the complete information is fetched.
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+ uuid_vec_t folders;
folders.push_back(current_outfit_id);
- outfit->fetchDescendents(folders);
+ outfit->fetch(folders);
if(outfit->isEverythingComplete())
{
// everything is already here - call done.
@@ -1025,63 +970,6 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
}
}
-// A single wearable that the avatar was wearing on start-up has arrived from the database.
-// static
-void LLAgentWearables::onInitialWearableAssetArrived(LLWearable* wearable, void* userdata)
-{
- boost::scoped_ptr<LLInitialWearablesFetch::InitialWearableData> wear_data((LLInitialWearablesFetch::InitialWearableData*)userdata);
- const EWearableType type = wear_data->mType;
- U32 index = 0;
-
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if (!avatar)
- {
- return;
- }
-
- if (wearable)
- {
- llassert(type == wearable->getType());
- wearable->setItemID(wear_data->mItemID);
- index = gAgentWearables.pushWearable(type, wearable);
- gAgentWearables.mItemsAwaitingWearableUpdate.erase(wear_data->mItemID);
-
- // disable composites if initial textures are baked
- avatar->setupComposites();
-
- avatar->setCompositeUpdatesEnabled(TRUE);
- gInventory.addChangedMask(LLInventoryObserver::LABEL, wearable->getItemID());
- }
- else
- {
- // Somehow the asset doesn't exist in the database.
- gAgentWearables.recoverMissingWearable(type,index);
- }
-
- gInventory.notifyObservers();
-
- // Have all the wearables that the avatar was wearing at log-in arrived?
- // MULTI-WEARABLE: update when multiple wearables can arrive per type.
-
- gAgentWearables.updateWearablesLoaded();
- if (gAgentWearables.areWearablesLoaded())
- {
-
- // Can't query cache until all wearables have arrived, so calling this earlier is a no-op.
- gAgentWearables.queryWearableCache();
-
- // Make sure that the server's idea of the avatar's wearables actually match the wearables.
- gAgent.sendAgentSetAppearance();
-
- // Check to see if there are any baked textures that we hadn't uploaded before we logged off last time.
- // If there are any, schedule them to be uploaded as soon as the layer textures they depend on arrive.
- if (gAgent.cameraCustomizeAvatar())
- {
- avatar->requestLayerSetUploads();
- }
- }
-}
-
// Normally, all wearables referred to "AgentWearablesUpdate" will correspond to actual assets in the
// database. If for some reason, we can't load one of those assets, we can try to reconstruct it so that
// the user isn't left without a shape, for example. (We can do that only after the inventory has loaded.)
@@ -1138,17 +1026,88 @@ void LLAgentWearables::addLocalTextureObject(const EWearableType wearable_type,
wearable->setLocalTextureObject(texture_type, lto);
}
+class OnWearableItemCreatedCB: public LLInventoryCallback
+{
+public:
+ OnWearableItemCreatedCB():
+ mWearablesAwaitingItems(WT_COUNT,NULL)
+ {
+ llinfos << "created callback" << llendl;
+ }
+ /* virtual */ void fire(const LLUUID& inv_item)
+ {
+ llinfos << "One item created " << inv_item.asString() << llendl;
+ LLViewerInventoryItem *item = gInventory.getItem(inv_item);
+ mItemsToLink.put(item);
+ updatePendingWearable(inv_item);
+ }
+ ~OnWearableItemCreatedCB()
+ {
+ llinfos << "All items created" << llendl;
+ LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;
+ LLAppearanceMgr::instance().linkAll(LLAppearanceMgr::instance().getCOF(),
+ mItemsToLink,
+ link_waiter);
+ }
+ void addPendingWearable(LLWearable *wearable)
+ {
+ if (!wearable)
+ {
+ llwarns << "no wearable" << llendl;
+ return;
+ }
+ EWearableType type = wearable->getType();
+ if (type<WT_COUNT)
+ {
+ mWearablesAwaitingItems[type] = wearable;
+ }
+ else
+ {
+ llwarns << "invalid type " << type << llendl;
+ }
+ }
+ void updatePendingWearable(const LLUUID& inv_item)
+ {
+ LLViewerInventoryItem *item = gInventory.getItem(inv_item);
+ if (!item)
+ {
+ llwarns << "no item found" << llendl;
+ return;
+ }
+ if (!item->isWearableType())
+ {
+ llwarns << "non-wearable item found" << llendl;
+ return;
+ }
+ if (item && item->isWearableType())
+ {
+ EWearableType type = item->getWearableType();
+ if (type < WT_COUNT)
+ {
+ LLWearable *wearable = mWearablesAwaitingItems[type];
+ if (wearable)
+ wearable->setItemID(inv_item);
+ }
+ else
+ {
+ llwarns << "invalid wearable type " << type << llendl;
+ }
+ }
+ }
+
+private:
+ LLInventoryModel::item_array_t mItemsToLink;
+ std::vector<LLWearable*> mWearablesAwaitingItems;
+};
+
void LLAgentWearables::createStandardWearables(BOOL female)
{
llwarns << "Creating Standard " << (female ? "female" : "male")
<< " Wearables" << llendl;
- if (mAvatarObject.isNull())
- {
- return;
- }
+ if (!isAgentAvatarValid()) return;
- mAvatarObject->setSex(female ? SEX_FEMALE : SEX_MALE);
+ gAgentAvatarp->setSex(female ? SEX_FEMALE : SEX_MALE);
const BOOL create[WT_COUNT] =
{
@@ -1167,52 +1126,52 @@ void LLAgentWearables::createStandardWearables(BOOL female)
FALSE //WT_SKIRT
};
+ LLPointer<LLInventoryCallback> cb = new OnWearableItemCreatedCB;
for (S32 i=0; i < WT_COUNT; i++)
{
- bool once = false;
- LLPointer<LLRefCount> donecb = NULL;
if (create[i])
{
- if (!once)
- {
- once = true;
- donecb = new createStandardWearablesAllDoneCallback;
- }
llassert(getWearableCount((EWearableType)i) == 0);
LLWearable* wearable = LLWearableList::instance().createNewWearable((EWearableType)i);
- U32 index = pushWearable((EWearableType)i,wearable);
+ ((OnWearableItemCreatedCB*)(&(*cb)))->addPendingWearable(wearable);
// no need to update here...
- LLPointer<LLInventoryCallback> cb =
- new addWearableToAgentInventoryCallback(
- donecb,
- i,
- index,
- wearable,
- addWearableToAgentInventoryCallback::CALL_CREATESTANDARDDONE);
- addWearableToAgentInventory(cb, wearable, LLUUID::null, FALSE);
+ LLUUID category_id = LLUUID::null;
+ create_inventory_item(gAgent.getID(),
+ gAgent.getSessionID(),
+ category_id,
+ wearable->getTransactionID(),
+ wearable->getName(),
+ wearable->getDescription(),
+ wearable->getAssetType(),
+ LLInventoryType::IT_WEARABLE,
+ wearable->getType(),
+ wearable->getPermissions().getMaskNextOwner(),
+ cb);
}
}
}
void LLAgentWearables::createStandardWearablesDone(S32 type, U32 index)
{
- if (mAvatarObject)
- {
- mAvatarObject->updateVisualParams();
- }
+ llinfos << "type " << type << " index " << index << llendl;
+
+ if (!isAgentAvatarValid()) return;
+ gAgentAvatarp->updateVisualParams();
}
void LLAgentWearables::createStandardWearablesAllDone()
{
// ... because sendAgentWearablesUpdate will notify inventory
// observers.
+ llinfos << "all done?" << llendl;
+
mWearablesLoaded = TRUE;
checkWearablesLoaded();
updateServer();
// Treat this as the first texture entry message, if none received yet
- mAvatarObject->onFirstTEMessageReceived();
+ gAgentAvatarp->onFirstTEMessageReceived();
}
// MULTI-WEARABLE: Properly handle multiwearables later.
@@ -1234,10 +1193,7 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name,
const LLDynamicArray<S32>& attachments_to_include,
BOOL rename_clothing)
{
- if (mAvatarObject.isNull())
- {
- return;
- }
+ if (!isAgentAvatarValid()) return;
// First, make a folder in the Clothes directory.
LLUUID folder_id = gInventory.createNewCategory(
@@ -1335,7 +1291,7 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name,
for (S32 i = 0; i < attachments_to_include.count(); i++)
{
S32 attachment_pt = attachments_to_include[i];
- LLViewerJointAttachment* attachment = get_if_there(mAvatarObject->mAttachmentPoints, attachment_pt, (LLViewerJointAttachment*)NULL);
+ LLViewerJointAttachment* attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, attachment_pt, (LLViewerJointAttachment*)NULL);
if (!attachment) continue;
for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
attachment_iter != attachment->mAttachedObjects.end();
@@ -1396,8 +1352,8 @@ public:
tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren());
}
- LLAppearanceManager::instance().updateIsDirty();
- LLAppearanceManager::instance().updatePanelOutfitName("");
+ LLAppearanceMgr::instance().updateIsDirty();
+ LLAppearanceMgr::instance().updatePanelOutfitName("");
}
virtual void fire(const LLUUID&)
@@ -1410,10 +1366,7 @@ private:
LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)
{
- if (mAvatarObject.isNull())
- {
- return LLUUID::null;
- }
+ if (!isAgentAvatarValid()) return LLUUID::null;
// First, make a folder in the My Outfits directory.
const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
@@ -1423,8 +1376,8 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)
new_folder_name);
LLPointer<LLInventoryCallback> cb = new LLShowCreatedOutfit(folder_id);
- LLAppearanceManager::instance().shallowCopyCategoryContents(LLAppearanceManager::instance().getCOF(),folder_id, cb);
- LLAppearanceManager::instance().createBaseOutfitLink(folder_id, cb);
+ LLAppearanceMgr::instance().shallowCopyCategoryContents(LLAppearanceMgr::instance().getCOF(),folder_id, cb);
+ LLAppearanceMgr::instance().createBaseOutfitLink(folder_id, cb);
return folder_id;
}
@@ -1491,6 +1444,7 @@ void LLAgentWearables::removeWearable(const EWearableType type, bool do_remove_a
{
LLSD payload;
payload["wearable_type"] = (S32)type;
+ payload["wearable_index"] = (S32)index;
// Bring up view-modal dialog: Save changes? Yes, No, Cancel
LLNotificationsUtil::add("WearableSave", LLSD(), payload, &LLAgentWearables::onRemoveWearableDialog);
return;
@@ -1504,22 +1458,21 @@ void LLAgentWearables::removeWearable(const EWearableType type, bool do_remove_a
}
-// MULTI_WEARABLE: assuming one wearable per type.
-// MULTI_WEARABLE: hardwiring 0th elt for now - notification needs to change.
// static
bool LLAgentWearables::onRemoveWearableDialog(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
EWearableType type = (EWearableType)notification["payload"]["wearable_type"].asInteger();
+ S32 index = (S32)notification["payload"]["wearable_index"].asInteger();
switch(option)
{
case 0: // "Save"
- gAgentWearables.saveWearable(type, 0);
- gAgentWearables.removeWearableFinal(type, false, 0);
+ gAgentWearables.saveWearable(type, index);
+ gAgentWearables.removeWearableFinal(type, false, index);
break;
case 1: // "Don't Save"
- gAgentWearables.removeWearableFinal(type, false, 0);
+ gAgentWearables.removeWearableFinal(type, false, index);
break;
case 2: // "Cancel"
@@ -1571,30 +1524,25 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
}
// Assumes existing wearables are not dirty.
-// MULTI_WEARABLE: assumes one wearable per type.
void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& items,
const LLDynamicArray< LLWearable* >& wearables,
BOOL remove)
{
- lldebugs << "setWearableOutfit() start" << llendl;
-
- BOOL wearables_to_remove[WT_COUNT];
- wearables_to_remove[WT_SHAPE] = FALSE;
- wearables_to_remove[WT_SKIN] = FALSE;
- wearables_to_remove[WT_HAIR] = FALSE;
- wearables_to_remove[WT_EYES] = FALSE;
- wearables_to_remove[WT_SHIRT] = remove;
- wearables_to_remove[WT_PANTS] = remove;
- wearables_to_remove[WT_SHOES] = remove;
- wearables_to_remove[WT_SOCKS] = remove;
- wearables_to_remove[WT_JACKET] = remove;
- wearables_to_remove[WT_GLOVES] = remove;
- wearables_to_remove[WT_UNDERSHIRT] = (!gAgent.isTeen()) & remove;
- wearables_to_remove[WT_UNDERPANTS] = (!gAgent.isTeen()) & remove;
- wearables_to_remove[WT_SKIRT] = remove;
- wearables_to_remove[WT_ALPHA] = remove;
- wearables_to_remove[WT_TATTOO] = remove;
+ llinfos << "setWearableOutfit() start" << llendl;
+ // TODO: Removed check for ensuring that teens don't remove undershirt and underwear. Handle later
+ if (remove)
+ {
+ // note: shirt is the first non-body part wearable item. Update if wearable order changes.
+ // This loop should remove all clothing, but not any body parts
+ for (S32 type = 0; type < (S32)WT_COUNT; type++)
+ {
+ if (LLWearableDictionary::getAssetType((EWearableType)type) == LLAssetType::AT_CLOTHING)
+ {
+ removeWearable((EWearableType)type, true, 0);
+ }
+ }
+ }
S32 count = wearables.count();
llassert(items.count() == count);
@@ -1609,71 +1557,31 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
if (new_wearable)
{
const EWearableType type = new_wearable->getType();
- wearables_to_remove[type] = FALSE;
+
+ new_wearable->setName(new_item->getName());
+ new_wearable->setItemID(new_item->getUUID());
- // MULTI_WEARABLE: using 0th
- LLWearable* old_wearable = getWearable(type, 0);
- if (old_wearable)
+ if (LLWearableDictionary::getAssetType(type) == LLAssetType::AT_BODYPART)
{
- const LLUUID& old_item_id = getWearableItemID(type, 0);
- if ((old_wearable->getAssetID() == new_wearable->getAssetID()) &&
- (old_item_id == new_item->getUUID()))
- {
- lldebugs << "No change to wearable asset and item: " << LLWearableDictionary::getInstance()->getWearableEntry(type) << llendl;
- continue;
- }
-
- // Assumes existing wearables are not dirty.
- if (old_wearable->isDirty())
- {
- llassert(0);
- continue;
- }
+ // exactly one wearable per body part
+ setWearable(type,0,new_wearable);
}
-
- new_wearable->setItemID(new_item->getUUID());
- setWearable(type,0,new_wearable);
- }
- }
-
- std::vector<LLWearable*> wearables_being_removed;
-
- for (i = 0; i < WT_COUNT; i++)
- {
- if (wearables_to_remove[i])
- {
- // MULTI_WEARABLE: assuming 0th
- LLWearable* wearable = getWearable((EWearableType)i, 0);
- const LLUUID &item_id = getWearableItemID((EWearableType)i,0);
- gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
- if (wearable)
+ else
{
- wearables_being_removed.push_back(wearable);
+ pushWearable(type,new_wearable);
}
- removeWearable((EWearableType)i,true,0);
+ wearableUpdated(new_wearable);
+ checkWearableAgainstInventory(new_wearable);
}
}
gInventory.notifyObservers();
-
- std::vector<LLWearable*>::iterator wearable_iter;
-
- for (wearable_iter = wearables_being_removed.begin();
- wearable_iter != wearables_being_removed.end();
- ++wearable_iter)
+ if (isAgentAvatarValid())
{
- LLWearable* wearablep = *wearable_iter;
- if (wearablep)
- {
- wearablep->removeFromAvatar(TRUE);
- }
- }
-
- if (mAvatarObject)
- {
- mAvatarObject->updateVisualParams();
- mAvatarObject->invalidateAll();
+ gAgentAvatarp->setCompositeUpdatesEnabled(TRUE);
+ gAgentAvatarp->updateVisualParams();
+ gAgentAvatarp->invalidateAll();
}
// Start rendering & update the server
@@ -1732,6 +1640,7 @@ bool LLAgentWearables::onSetWearableDialog(const LLSD& notification, const LLSD&
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
LLInventoryItem* new_item = gInventory.getItem(notification["payload"]["item_id"].asUUID());
+ U32 index = gAgentWearables.getWearableIndex(wearable);
if (!new_item)
{
delete wearable;
@@ -1741,8 +1650,7 @@ bool LLAgentWearables::onSetWearableDialog(const LLSD& notification, const LLSD&
switch(option)
{
case 0: // "Save"
-// MULTI_WEARABLE: assuming 0th
- gAgentWearables.saveWearable(wearable->getType(),0);
+ gAgentWearables.saveWearable(wearable->getType(),index);
gAgentWearables.setWearableFinal(new_item, wearable);
break;
@@ -1832,30 +1740,35 @@ void LLAgentWearables::queryWearableCache()
for (U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++)
{
const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)baked_index);
- LLUUID hash;
+ LLMD5 hash;
+ bool hash_computed = false;
for (U8 i=0; i < baked_dict->mWearables.size(); i++)
{
const EWearableType baked_type = baked_dict->mWearables[i];
- // MULTI_WEARABLE: not order-dependent
const U32 num_wearables = getWearableCount(baked_type);
for (U32 index = 0; index < num_wearables; ++index)
{
const LLWearable* wearable = getWearable(baked_type,index);
if (wearable)
{
- hash ^= wearable->getAssetID();
+ LLUUID asset_id = wearable->getAssetID();
+ hash.update((const unsigned char*)asset_id.mData, UUID_BYTES);
+ hash_computed = true;
}
}
}
- if (hash.notNull())
+ hash.finalize();
+ if (hash_computed)
{
- hash ^= baked_dict->mWearablesHashID;
+ LLUUID hash_id;
+ hash.raw_digest(hash_id.mData);
+ hash_id ^= baked_dict->mWearablesHashID;
num_queries++;
// *NOTE: make sure at least one request gets packed
//llinfos << "Requesting texture for hash " << hash << " in baked texture slot " << baked_index << llendl;
gMessageSystem->nextBlockFast(_PREHASH_WearableData);
- gMessageSystem->addUUIDFast(_PREHASH_ID, hash);
+ gMessageSystem->addUUIDFast(_PREHASH_ID, hash_id);
gMessageSystem->addU8Fast(_PREHASH_TextureIndex, (U8)baked_index);
}
@@ -1868,16 +1781,24 @@ void LLAgentWearables::queryWearableCache()
gAgentQueryManager.mWearablesCacheQueryID++;
}
-// MULTI_WEARABLE: need a way to specify by wearable rather than by type.
// User has picked "remove from avatar" from a menu.
// static
-void LLAgentWearables::userRemoveWearable(EWearableType& type)
+void LLAgentWearables::userRemoveWearable(const EWearableType &type, const U32 &index)
+{
+ if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES)) //&&
+ //!((!gAgent.isTeen()) && (type==WT_UNDERPANTS || type==WT_UNDERSHIRT)))
+ {
+ gAgentWearables.removeWearable(type,false,index);
+ }
+}
+
+//static
+void LLAgentWearables::userRemoveWearablesOfType(const EWearableType &type)
{
- if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR)) //&&
+ if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES)) //&&
//!((!gAgent.isTeen()) && (type==WT_UNDERPANTS || type==WT_UNDERSHIRT)))
{
- // MULTI_WEARABLE: fixed to 0th for now.
- gAgentWearables.removeWearable(type,false,0);
+ gAgentWearables.removeWearable(type,true,0);
}
}
@@ -1923,12 +1844,7 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj
// already wearing and in request set -> leave alone.
// not wearing and in request set -> put on.
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (!avatarp)
- {
- llwarns << "No avatar found." << llendl;
- return;
- }
+ if (!isAgentAvatarValid()) return;
std::set<LLUUID> requested_item_ids;
std::set<LLUUID> current_item_ids;
@@ -1937,8 +1853,8 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj
// Build up list of objects to be removed and items currently attached.
llvo_vec_t objects_to_remove;
- for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
- iter != avatarp->mAttachmentPoints.end();)
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end();)
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
@@ -1994,12 +1910,7 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj
void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remove)
{
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (!avatarp)
- {
- llwarns << "No avatar found." << llendl;
- return;
- }
+ if (!isAgentAvatarValid()) return;
if (objects_to_remove.empty())
return;
@@ -2022,17 +1933,12 @@ void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remo
void LLAgentWearables::userRemoveAllAttachments()
{
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (!avatarp)
- {
- llwarns << "No avatar found." << llendl;
- return;
- }
+ if (!isAgentAvatarValid()) return;
llvo_vec_t objects_to_remove;
- for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
- iter != avatarp->mAttachmentPoints.end();)
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end();)
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
@@ -2153,437 +2059,20 @@ void LLAgentWearables::updateServer()
void LLAgentWearables::populateMyOutfitsFolder(void)
{
- llinfos << "starting outfit populate" << llendl;
+ llinfos << "starting outfit population" << llendl;
LLLibraryOutfitsFetch* outfits = new LLLibraryOutfitsFetch();
// Get the complete information on the items in the inventory and
// setup an observer that will wait for that to happen.
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+ uuid_vec_t folders;
outfits->mMyOutfitsID = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
folders.push_back(outfits->mMyOutfitsID);
gInventory.addObserver(outfits);
- outfits->fetchDescendents(folders);
+ outfits->fetch(folders);
if (outfits->isEverythingComplete())
{
outfits->done();
}
}
-
-void LLLibraryOutfitsFetch::done()
-{
- // Delay this until idle() routine, since it's a heavy operation and
- // we also can't have it run within notifyObservers.
- doOnIdle(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this));
- gInventory.removeObserver(this); // Prevent doOnIdle from being added twice.
-}
-
-void LLLibraryOutfitsFetch::doneIdle()
-{
- gInventory.addObserver(this); // Add this back in since it was taken out during ::done()
-
- switch (mCurrFetchStep)
- {
- case LOFS_FOLDER:
- folderDone();
- mCurrFetchStep = LOFS_OUTFITS;
- break;
- case LOFS_OUTFITS:
- outfitsDone();
- mCurrFetchStep = LOFS_LIBRARY;
- break;
- case LOFS_LIBRARY:
- libraryDone();
- mCurrFetchStep = LOFS_IMPORTED;
- break;
- case LOFS_IMPORTED:
- importedFolderDone();
- mCurrFetchStep = LOFS_CONTENTS;
- break;
- case LOFS_CONTENTS:
- contentsDone();
- break;
- default:
- llwarns << "Got invalid state for outfit fetch: " << mCurrFetchStep << llendl;
- mOutfitsPopulated = TRUE;
- break;
- }
-
- // We're completely done. Cleanup.
- if (mOutfitsPopulated)
- {
- gInventory.removeObserver(this);
- delete this;
- return;
- }
-}
-
-void LLLibraryOutfitsFetch::folderDone(void)
-{
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t wearable_array;
- gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array,
- LLInventoryModel::EXCLUDE_TRASH);
-
- // Early out if we already have items in My Outfits.
- if (cat_array.count() > 0 || wearable_array.count() > 0)
- {
- mOutfitsPopulated = true;
- return;
- }
-
- mClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
- mLibraryClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING, false, true);
-
- mCompleteFolders.clear();
-
- // Get the complete information on the items in the inventory.
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
- folders.push_back(mClothingID);
- folders.push_back(mLibraryClothingID);
- fetchDescendents(folders);
- if (isEverythingComplete())
- {
- done();
- }
-}
-
-void LLLibraryOutfitsFetch::outfitsDone(void)
-{
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t wearable_array;
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
-
- // Collect the contents of the Library's Clothing folder
- gInventory.collectDescendents(mLibraryClothingID, cat_array, wearable_array,
- LLInventoryModel::EXCLUDE_TRASH);
-
- llassert(cat_array.count() > 0);
- for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
- iter != cat_array.end();
- ++iter)
- {
- const LLViewerInventoryCategory *cat = iter->get();
-
- // Get the names and id's of every outfit in the library, except for ruth and other "misc" outfits.
- if (cat->getName() != "More Outfits" && cat->getName() != "Ruth")
- {
- // Get the name of every outfit in the library
- folders.push_back(cat->getUUID());
- mLibraryClothingFolders.push_back(std::make_pair(cat->getUUID(), cat->getName()));
- }
- }
-
- // Collect the contents of your Inventory Clothing folder
- cat_array.clear();
- wearable_array.clear();
- gInventory.collectDescendents(mClothingID, cat_array, wearable_array,
- LLInventoryModel::EXCLUDE_TRASH);
-
- // Check if you already have an "Imported Library Clothing" folder
- for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
- iter != cat_array.end();
- ++iter)
- {
- const LLViewerInventoryCategory *cat = iter->get();
- if (cat->getName() == mImportedClothingName)
- {
- mImportedClothingID = cat->getUUID();
- }
- }
-
- mCompleteFolders.clear();
-
- fetchDescendents(folders);
- if (isEverythingComplete())
- {
- done();
- }
-}
-
-class LLLibraryOutfitsCopyDone: public LLInventoryCallback
-{
-public:
- LLLibraryOutfitsCopyDone(LLLibraryOutfitsFetch * fetcher):
- mFireCount(0), mLibraryOutfitsFetcher(fetcher)
- {
- }
-
- virtual ~LLLibraryOutfitsCopyDone()
- {
- if (!LLApp::isExiting() && mLibraryOutfitsFetcher)
- {
- gInventory.addObserver(mLibraryOutfitsFetcher);
- mLibraryOutfitsFetcher->done();
- }
- }
-
- /* virtual */ void fire(const LLUUID& inv_item)
- {
- mFireCount++;
- }
-private:
- U32 mFireCount;
- LLLibraryOutfitsFetch * mLibraryOutfitsFetcher;
-};
-
-void LLLibraryOutfitsFetch::libraryDone(void)
-{
- // Copy the clothing folders from the library into the imported clothing folder if necessary.
- if (mImportedClothingID == LLUUID::null)
- {
- gInventory.removeObserver(this);
- LLPointer<LLInventoryCallback> copy_waiter = new LLLibraryOutfitsCopyDone(this);
- mImportedClothingID = gInventory.createNewCategory(mClothingID,
- LLFolderType::FT_NONE,
- mImportedClothingName);
-
- for (cloth_folder_vec_t::const_iterator iter = mLibraryClothingFolders.begin();
- iter != mLibraryClothingFolders.end();
- ++iter)
- {
- LLUUID folder_id = gInventory.createNewCategory(mImportedClothingID,
- LLFolderType::FT_NONE,
- iter->second);
- LLAppearanceManager::getInstance()->shallowCopyCategoryContents(iter->first, folder_id, copy_waiter);
- }
- }
- else
- {
- // Skip straight to fetching the contents of the imported folder
- importedFolderFetch();
- }
-}
-
-void LLLibraryOutfitsFetch::importedFolderFetch(void)
-{
- // Fetch the contents of the Imported Clothing Folder
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
- folders.push_back(mImportedClothingID);
-
- mCompleteFolders.clear();
-
- fetchDescendents(folders);
- if (isEverythingComplete())
- {
- done();
- }
-}
-
-void LLLibraryOutfitsFetch::importedFolderDone(void)
-{
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t wearable_array;
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
-
- // Collect the contents of the Imported Clothing folder
- gInventory.collectDescendents(mImportedClothingID, cat_array, wearable_array,
- LLInventoryModel::EXCLUDE_TRASH);
-
- for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
- iter != cat_array.end();
- ++iter)
- {
- const LLViewerInventoryCategory *cat = iter->get();
-
- // Get the name of every imported outfit
- folders.push_back(cat->getUUID());
- mImportedClothingFolders.push_back(std::make_pair(cat->getUUID(), cat->getName()));
- }
-
- mCompleteFolders.clear();
- fetchDescendents(folders);
- if (isEverythingComplete())
- {
- done();
- }
-}
-
-void LLLibraryOutfitsFetch::contentsDone(void)
-{
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t wearable_array;
-
- for (cloth_folder_vec_t::const_iterator folder_iter = mImportedClothingFolders.begin();
- folder_iter != mImportedClothingFolders.end();
- ++folder_iter)
- {
- // First, make a folder in the My Outfits directory.
- LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, folder_iter->second);
-
- cat_array.clear();
- wearable_array.clear();
- // Collect the contents of each imported clothing folder, so we can create new outfit links for it
- gInventory.collectDescendents(folder_iter->first, cat_array, wearable_array,
- LLInventoryModel::EXCLUDE_TRASH);
-
- for (LLInventoryModel::item_array_t::const_iterator wearable_iter = wearable_array.begin();
- wearable_iter != wearable_array.end();
- ++wearable_iter)
- {
- const LLViewerInventoryItem *item = wearable_iter->get();
- link_inventory_item(gAgent.getID(),
- item->getLinkedUUID(),
- new_outfit_folder_id,
- item->getName(),
- LLAssetType::AT_LINK,
- NULL);
- }
- }
-
- mOutfitsPopulated = true;
-}
-
-//--------------------------------------------------------------------
-// InitialWearablesFetch
-//
-// This grabs contents from the COF and processes them.
-// The processing is handled in idle(), i.e. outside of done(),
-// to avoid gInventory.notifyObservers recursion.
-//--------------------------------------------------------------------
-
-LLInitialWearablesFetch::~LLInitialWearablesFetch()
-{
-}
-
-// virtual
-void LLInitialWearablesFetch::done()
-{
- // Delay processing the actual results of this so it's not handled within
- // gInventory.notifyObservers. The results will be handled in the next
- // idle tick instead.
- gInventory.removeObserver(this);
- doOnIdle(boost::bind(&LLInitialWearablesFetch::processContents,this));
-}
-
-void LLInitialWearablesFetch::processContents()
-{
- // Fetch the wearable items from the Current Outfit Folder
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t wearable_array;
- LLFindWearables is_wearable;
- gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array,
- LLInventoryModel::EXCLUDE_TRASH, is_wearable);
-
- LLAppearanceManager::instance().setAttachmentInvLinkEnable(true);
- if (wearable_array.count() > 0)
- {
- LLAppearanceManager::instance().updateAppearanceFromCOF();
- }
- else
- {
- // if we're constructing the COF from the wearables message, we don't have a proper outfit link
- LLAppearanceManager::instance().setOutfitDirty(true);
- processWearablesMessage();
- }
- delete this;
-}
-
-class LLFetchAndLinkObserver: public LLInventoryFetchObserver
-{
-public:
- LLFetchAndLinkObserver(LLInventoryFetchObserver::item_ref_t& ids):
- m_ids(ids),
- LLInventoryFetchObserver(true)
- {
- }
- ~LLFetchAndLinkObserver()
- {
- }
- virtual void done()
- {
- gInventory.removeObserver(this);
- // Link to all fetched items in COF.
- for (LLInventoryFetchObserver::item_ref_t::iterator it = m_ids.begin();
- it != m_ids.end();
- ++it)
- {
- LLUUID id = *it;
- LLViewerInventoryItem *item = gInventory.getItem(*it);
- if (!item)
- {
- llwarns << "fetch failed!" << llendl;
- continue;
- }
- link_inventory_item(gAgent.getID(), item->getLinkedUUID(), LLAppearanceManager::instance().getCOF(), item->getName(),
- LLAssetType::AT_LINK, LLPointer<LLInventoryCallback>(NULL));
- }
- }
-private:
- LLInventoryFetchObserver::item_ref_t m_ids;
-};
-
-void LLInitialWearablesFetch::processWearablesMessage()
-{
- if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead.
- {
- const LLUUID current_outfit_id = LLAppearanceManager::instance().getCOF();
- LLInventoryFetchObserver::item_ref_t ids;
- for (U8 i = 0; i < mAgentInitialWearables.size(); ++i)
- {
- // Populate the current outfit folder with links to the wearables passed in the message
- InitialWearableData *wearable_data = new InitialWearableData(mAgentInitialWearables[i]); // This will be deleted in the callback.
-
- if (wearable_data->mAssetID.notNull())
- {
-#ifdef USE_CURRENT_OUTFIT_FOLDER
- ids.push_back(wearable_data->mItemID);
-#endif
- // Fetch the wearables
- LLWearableList::instance().getAsset(wearable_data->mAssetID,
- LLStringUtil::null,
- LLWearableDictionary::getAssetType(wearable_data->mType),
- LLAgentWearables::onInitialWearableAssetArrived, (void*)(wearable_data));
- }
- else
- {
- llinfos << "Invalid wearable, type " << wearable_data->mType << " itemID "
- << wearable_data->mItemID << " assetID " << wearable_data->mAssetID << llendl;
- delete wearable_data;
- }
- }
-
- // Add all current attachments to the requested items as well.
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if( avatar )
- {
- for (LLVOAvatar::attachment_map_t::const_iterator iter = avatar->mAttachmentPoints.begin();
- iter != avatar->mAttachmentPoints.end(); ++iter)
- {
- LLViewerJointAttachment* attachment = iter->second;
- if (!attachment) continue;
- for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
- attachment_iter != attachment->mAttachedObjects.end();
- ++attachment_iter)
- {
- LLViewerObject* attached_object = (*attachment_iter);
- if (!attached_object) continue;
- const LLUUID& item_id = attached_object->getItemID();
- if (item_id.isNull()) continue;
- ids.push_back(item_id);
- }
- }
- }
-
- // Need to fetch the inventory items for ids, then create links to them after they arrive.
- LLFetchAndLinkObserver *fetcher = new LLFetchAndLinkObserver(ids);
- fetcher->fetchItems(ids);
- // If no items to be fetched, done will never be triggered.
- // TODO: Change LLInventoryFetchObserver::fetchItems to trigger done() on this condition.
- if (fetcher->isEverythingComplete())
- {
- fetcher->done();
- }
- else
- {
- gInventory.addObserver(fetcher);
- }
- }
- else
- {
- LL_WARNS("Wearables") << "No current outfit folder items found and no initial wearables fallback message received." << LL_ENDL;
- }
-}
-
-
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 858540a5f5..b76367324c 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -89,7 +89,7 @@ public:
const LLUUID getWearableItemID(EWearableType type, U32 index /*= 0*/) const;
const LLUUID getWearableAssetID(EWearableType type, U32 index /*= 0*/) const;
const LLWearable* getWearableFromItemID(const LLUUID& item_id) const;
- const LLWearable* getWearableFromAssetID(const LLUUID& asset_id) const;
+ LLWearable* getWearableFromAssetID(const LLUUID& asset_id);
LLInventoryItem* getWearableInventoryItem(EWearableType type, U32 index /*= 0*/);
// MULTI-WEARABLE: assuming one per type.
static BOOL selfHasWearable(EWearableType type);
@@ -174,7 +174,7 @@ public:
// Should only be called if we *know* we've never done so before, since users may
// not want the Library outfits to stay in their quick outfit selector and can delete them.
- void populateMyOutfitsFolder(void);
+ void populateMyOutfitsFolder();
private:
void makeNewOutfitDone(S32 type, U32 index);
@@ -193,8 +193,8 @@ public:
// Static UI hooks
//--------------------------------------------------------------------
public:
- // MULTI-WEARABLE: assuming one wearable per type. Need upstream changes.
- static void userRemoveWearable(EWearableType& type);
+ static void userRemoveWearable(const EWearableType &type, const U32 &index);
+ static void userRemoveWearablesOfType(const EWearableType &type);
static void userRemoveAllClothes();
typedef std::vector<LLViewerObject*> llvo_vec_t;
@@ -218,7 +218,6 @@ private:
static BOOL mInitialWearablesUpdateReceived;
BOOL mWearablesLoaded;
std::set<LLUUID> mItemsAwaitingWearableUpdate;
- LLPointer<LLVOAvatarSelf> mAvatarObject; // NULL until avatar object sent down from simulator
//--------------------------------------------------------------------------------
// Support classes
diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp
new file mode 100644
index 0000000000..3d6740f5a1
--- /dev/null
+++ b/indra/newview/llagentwearablesfetch.cpp
@@ -0,0 +1,516 @@
+/**
+ * @file llagentwearablesfetch.cpp
+ * @brief LLAgentWearblesFetch class implementation
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llagentwearablesfetch.h"
+
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llappearancemgr.h"
+#include "llinventoryfunctions.h"
+#include "llvoavatarself.h"
+
+LLInitialWearablesFetch::LLInitialWearablesFetch()
+{
+}
+
+LLInitialWearablesFetch::~LLInitialWearablesFetch()
+{
+}
+
+// virtual
+void LLInitialWearablesFetch::done()
+{
+ // Delay processing the actual results of this so it's not handled within
+ // gInventory.notifyObservers. The results will be handled in the next
+ // idle tick instead.
+ gInventory.removeObserver(this);
+ doOnIdleOneTime(boost::bind(&LLInitialWearablesFetch::processContents,this));
+}
+
+void LLInitialWearablesFetch::add(InitialWearableData &data)
+
+{
+ mAgentInitialWearables.push_back(data);
+}
+
+void LLInitialWearablesFetch::processContents()
+{
+ // Fetch the wearable items from the Current Outfit Folder
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+ LLFindWearables is_wearable;
+ gInventory.collectDescendentsIf(mComplete.front(), cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH, is_wearable);
+
+ LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true);
+ if (wearable_array.count() > 0)
+ {
+ LLAppearanceMgr::instance().updateAppearanceFromCOF();
+ }
+ else
+ {
+ // if we're constructing the COF from the wearables message, we don't have a proper outfit link
+ LLAppearanceMgr::instance().setOutfitDirty(true);
+ processWearablesMessage();
+ }
+ delete this;
+}
+
+class LLFetchAndLinkObserver: public LLInventoryFetchObserver
+{
+public:
+ LLFetchAndLinkObserver(uuid_vec_t& ids):
+ m_ids(ids),
+ LLInventoryFetchObserver(true) // retry for missing items
+ {
+ }
+ ~LLFetchAndLinkObserver()
+ {
+ }
+ virtual void done()
+ {
+ gInventory.removeObserver(this);
+
+ // Link to all fetched items in COF.
+ LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;
+ for (uuid_vec_t::iterator it = m_ids.begin();
+ it != m_ids.end();
+ ++it)
+ {
+ LLUUID id = *it;
+ LLViewerInventoryItem *item = gInventory.getItem(*it);
+ if (!item)
+ {
+ llwarns << "fetch failed!" << llendl;
+ continue;
+ }
+
+ link_inventory_item(gAgent.getID(),
+ item->getLinkedUUID(),
+ LLAppearanceMgr::instance().getCOF(),
+ item->getName(),
+ LLAssetType::AT_LINK,
+ link_waiter);
+ }
+ }
+private:
+ uuid_vec_t m_ids;
+};
+
+void LLInitialWearablesFetch::processWearablesMessage()
+{
+ if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead.
+ {
+ const LLUUID current_outfit_id = LLAppearanceMgr::instance().getCOF();
+ uuid_vec_t ids;
+ for (U8 i = 0; i < mAgentInitialWearables.size(); ++i)
+ {
+ // Populate the current outfit folder with links to the wearables passed in the message
+ InitialWearableData *wearable_data = new InitialWearableData(mAgentInitialWearables[i]); // This will be deleted in the callback.
+
+ if (wearable_data->mAssetID.notNull())
+ {
+ ids.push_back(wearable_data->mItemID);
+ }
+ else
+ {
+ llinfos << "Invalid wearable, type " << wearable_data->mType << " itemID "
+ << wearable_data->mItemID << " assetID " << wearable_data->mAssetID << llendl;
+ delete wearable_data;
+ }
+ }
+
+ // Add all current attachments to the requested items as well.
+ if (isAgentAvatarValid())
+ {
+ for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); ++iter)
+ {
+ LLViewerJointAttachment* attachment = iter->second;
+ if (!attachment) continue;
+ for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
+ attachment_iter != attachment->mAttachedObjects.end();
+ ++attachment_iter)
+ {
+ LLViewerObject* attached_object = (*attachment_iter);
+ if (!attached_object) continue;
+ const LLUUID& item_id = attached_object->getItemID();
+ if (item_id.isNull()) continue;
+ ids.push_back(item_id);
+ }
+ }
+ }
+
+ // Need to fetch the inventory items for ids, then create links to them after they arrive.
+ LLFetchAndLinkObserver *fetcher = new LLFetchAndLinkObserver(ids);
+ fetcher->fetch(ids);
+ // If no items to be fetched, done will never be triggered.
+ // TODO: Change LLInventoryFetchObserver::fetchItems to trigger done() on this condition.
+ if (fetcher->isEverythingComplete())
+ {
+ fetcher->done();
+ }
+ else
+ {
+ gInventory.addObserver(fetcher);
+ }
+ }
+ else
+ {
+ LL_WARNS("Wearables") << "No current outfit folder items found and no initial wearables fallback message received." << LL_ENDL;
+ }
+}
+
+LLLibraryOutfitsFetch::LLLibraryOutfitsFetch() :
+ mCurrFetchStep(LOFS_FOLDER),
+ mOutfitsPopulated(false)
+{
+ mMyOutfitsID = LLUUID::null;
+ mClothingID = LLUUID::null;
+ mLibraryClothingID = LLUUID::null;
+ mImportedClothingID = LLUUID::null;
+ mImportedClothingName = "Imported Library Clothing";
+}
+
+LLLibraryOutfitsFetch::~LLLibraryOutfitsFetch()
+{
+}
+
+void LLLibraryOutfitsFetch::done()
+{
+ // Delay this until idle() routine, since it's a heavy operation and
+ // we also can't have it run within notifyObservers.
+ doOnIdleOneTime(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this));
+ gInventory.removeObserver(this); // Prevent doOnIdleOneTime from being added twice.
+}
+
+void LLLibraryOutfitsFetch::doneIdle()
+{
+ gInventory.addObserver(this); // Add this back in since it was taken out during ::done()
+
+ switch (mCurrFetchStep)
+ {
+ case LOFS_FOLDER:
+ folderDone();
+ mCurrFetchStep = LOFS_OUTFITS;
+ break;
+ case LOFS_OUTFITS:
+ outfitsDone();
+ mCurrFetchStep = LOFS_LIBRARY;
+ break;
+ case LOFS_LIBRARY:
+ libraryDone();
+ mCurrFetchStep = LOFS_IMPORTED;
+ break;
+ case LOFS_IMPORTED:
+ importedFolderDone();
+ mCurrFetchStep = LOFS_CONTENTS;
+ break;
+ case LOFS_CONTENTS:
+ contentsDone();
+ break;
+ default:
+ llwarns << "Got invalid state for outfit fetch: " << mCurrFetchStep << llendl;
+ mOutfitsPopulated = TRUE;
+ break;
+ }
+
+ // We're completely done. Cleanup.
+ if (mOutfitsPopulated)
+ {
+ gInventory.removeObserver(this);
+ delete this;
+ return;
+ }
+}
+
+void LLLibraryOutfitsFetch::folderDone()
+{
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+ gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH);
+ // Early out if we already have items in My Outfits.
+ if (cat_array.count() > 0 || wearable_array.count() > 0)
+ {
+ mOutfitsPopulated = true;
+ return;
+ }
+
+ mClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
+ mLibraryClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING, false, true);
+
+ // If Library->Clothing->Initial Outfits exists, use that.
+ LLNameCategoryCollector matchFolderFunctor("Initial Outfits");
+ gInventory.collectDescendentsIf(mLibraryClothingID,
+ cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ matchFolderFunctor);
+ if (cat_array.count() > 0)
+ {
+ const LLViewerInventoryCategory *cat = cat_array.get(0);
+ mLibraryClothingID = cat->getUUID();
+ }
+
+ mComplete.clear();
+
+ // Get the complete information on the items in the inventory.
+ uuid_vec_t folders;
+ folders.push_back(mClothingID);
+ folders.push_back(mLibraryClothingID);
+ fetch(folders);
+ if (isEverythingComplete())
+ {
+ done();
+ }
+}
+
+void LLLibraryOutfitsFetch::outfitsDone()
+{
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+ uuid_vec_t folders;
+
+ // Collect the contents of the Library's Clothing folder
+ gInventory.collectDescendents(mLibraryClothingID, cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH);
+
+ llassert(cat_array.count() > 0);
+ for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
+ iter != cat_array.end();
+ ++iter)
+ {
+ const LLViewerInventoryCategory *cat = iter->get();
+
+ // Get the names and id's of every outfit in the library, skip "Ruth"
+ // because it's a low quality legacy outfit
+ if (cat->getName() != "Ruth")
+ {
+ // Get the name of every outfit in the library
+ folders.push_back(cat->getUUID());
+ mLibraryClothingFolders.push_back(cat->getUUID());
+ }
+ }
+ cat_array.clear();
+ wearable_array.clear();
+
+ // Check if you already have an "Imported Library Clothing" folder
+ LLNameCategoryCollector matchFolderFunctor(mImportedClothingName);
+ gInventory.collectDescendentsIf(mClothingID,
+ cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ matchFolderFunctor);
+ if (cat_array.size() > 0)
+ {
+ const LLViewerInventoryCategory *cat = cat_array.get(0);
+ mImportedClothingID = cat->getUUID();
+ }
+
+ mComplete.clear();
+
+ fetch(folders);
+ if (isEverythingComplete())
+ {
+ done();
+ }
+}
+
+class LLLibraryOutfitsCopyDone: public LLInventoryCallback
+{
+public:
+ LLLibraryOutfitsCopyDone(LLLibraryOutfitsFetch * fetcher):
+ mFireCount(0), mLibraryOutfitsFetcher(fetcher)
+ {
+ }
+
+ virtual ~LLLibraryOutfitsCopyDone()
+ {
+ if (!LLApp::isExiting() && mLibraryOutfitsFetcher)
+ {
+ gInventory.addObserver(mLibraryOutfitsFetcher);
+ mLibraryOutfitsFetcher->done();
+ }
+ }
+
+ /* virtual */ void fire(const LLUUID& inv_item)
+ {
+ mFireCount++;
+ }
+private:
+ U32 mFireCount;
+ LLLibraryOutfitsFetch * mLibraryOutfitsFetcher;
+};
+
+// Copy the clothing folders from the library into the imported clothing folder
+void LLLibraryOutfitsFetch::libraryDone()
+{
+ if (mImportedClothingID != LLUUID::null)
+ {
+ // Skip straight to fetching the contents of the imported folder
+ importedFolderFetch();
+ return;
+ }
+
+ // Remove observer; next autopopulation step will be triggered externally by LLLibraryOutfitsCopyDone.
+ gInventory.removeObserver(this);
+
+ LLPointer<LLInventoryCallback> copy_waiter = new LLLibraryOutfitsCopyDone(this);
+ mImportedClothingID = gInventory.createNewCategory(mClothingID,
+ LLFolderType::FT_NONE,
+ mImportedClothingName);
+ // Copy each folder from library into clothing unless it already exists.
+ for (uuid_vec_t::const_iterator iter = mLibraryClothingFolders.begin();
+ iter != mLibraryClothingFolders.end();
+ ++iter)
+ {
+ const LLUUID& src_folder_id = (*iter); // Library clothing folder ID
+ const LLViewerInventoryCategory *cat = gInventory.getCategory(src_folder_id);
+ if (!cat)
+ {
+ llwarns << "Library folder import for uuid:" << src_folder_id << " failed to find folder." << llendl;
+ continue;
+ }
+
+ if (!LLAppearanceMgr::getInstance()->getCanMakeFolderIntoOutfit(src_folder_id))
+ {
+ llinfos << "Skipping non-outfit folder name:" << cat->getName() << llendl;
+ continue;
+ }
+
+ // Don't copy the category if it already exists.
+ LLNameCategoryCollector matchFolderFunctor(cat->getName());
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+ gInventory.collectDescendentsIf(mImportedClothingID,
+ cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ matchFolderFunctor);
+ if (cat_array.size() > 0)
+ {
+ continue;
+ }
+
+ LLUUID dst_folder_id = gInventory.createNewCategory(mImportedClothingID,
+ LLFolderType::FT_NONE,
+ cat->getName());
+ LLAppearanceMgr::getInstance()->shallowCopyCategoryContents(src_folder_id, dst_folder_id, copy_waiter);
+ }
+}
+
+void LLLibraryOutfitsFetch::importedFolderFetch()
+{
+ // Fetch the contents of the Imported Clothing Folder
+ uuid_vec_t folders;
+ folders.push_back(mImportedClothingID);
+
+ mComplete.clear();
+
+ fetch(folders);
+ if (isEverythingComplete())
+ {
+ done();
+ }
+}
+
+void LLLibraryOutfitsFetch::importedFolderDone()
+{
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+ uuid_vec_t folders;
+
+ // Collect the contents of the Imported Clothing folder
+ gInventory.collectDescendents(mImportedClothingID, cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH);
+
+ for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
+ iter != cat_array.end();
+ ++iter)
+ {
+ const LLViewerInventoryCategory *cat = iter->get();
+
+ // Get the name of every imported outfit
+ folders.push_back(cat->getUUID());
+ mImportedClothingFolders.push_back(cat->getUUID());
+ }
+
+ mComplete.clear();
+ fetch(folders);
+ if (isEverythingComplete())
+ {
+ done();
+ }
+}
+
+void LLLibraryOutfitsFetch::contentsDone()
+{
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+
+ for (uuid_vec_t::const_iterator folder_iter = mImportedClothingFolders.begin();
+ folder_iter != mImportedClothingFolders.end();
+ ++folder_iter)
+ {
+ const LLUUID &folder_id = (*folder_iter);
+ const LLViewerInventoryCategory *cat = gInventory.getCategory(folder_id);
+ if (!cat)
+ {
+ llwarns << "Library folder import for uuid:" << folder_id << " failed to find folder." << llendl;
+ continue;
+ }
+
+ // First, make a folder in the My Outfits directory.
+ LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, cat->getName());
+
+ cat_array.clear();
+ wearable_array.clear();
+ // Collect the contents of each imported clothing folder, so we can create new outfit links for it
+ gInventory.collectDescendents(folder_id, cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH);
+
+ for (LLInventoryModel::item_array_t::const_iterator wearable_iter = wearable_array.begin();
+ wearable_iter != wearable_array.end();
+ ++wearable_iter)
+ {
+ const LLViewerInventoryItem *item = wearable_iter->get();
+ link_inventory_item(gAgent.getID(),
+ item->getLinkedUUID(),
+ new_outfit_folder_id,
+ item->getName(),
+ LLAssetType::AT_LINK,
+ NULL);
+ }
+ }
+
+ mOutfitsPopulated = true;
+}
+
diff --git a/indra/newview/llagentwearablesfetch.h b/indra/newview/llagentwearablesfetch.h
new file mode 100644
index 0000000000..1d0c6739ba
--- /dev/null
+++ b/indra/newview/llagentwearablesfetch.h
@@ -0,0 +1,118 @@
+/**
+ * @file llagentwearablesinitialfetch.h
+ * @brief LLAgentWearablesInitialFetch class header file
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ *
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLAGENTWEARABLESINITIALFETCH_H
+#define LL_LLAGENTWEARABLESINITIALFETCH_H
+
+#include "llinventoryobserver.h"
+#include "llwearabledictionary.h"
+#include "lluuid.h"
+
+//--------------------------------------------------------------------
+// InitialWearablesFetch
+//
+// This grabs contents from the COF and processes them.
+// The processing is handled in idle(), i.e. outside of done(),
+// to avoid gInventory.notifyObservers recursion.
+//--------------------------------------------------------------------
+class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver
+{
+public:
+ LLInitialWearablesFetch();
+ ~LLInitialWearablesFetch();
+ virtual void done();
+
+ struct InitialWearableData
+ {
+ EWearableType mType;
+ LLUUID mItemID;
+ LLUUID mAssetID;
+ InitialWearableData(EWearableType type, LLUUID& itemID, LLUUID& assetID) :
+ mType(type),
+ mItemID(itemID),
+ mAssetID(assetID)
+ {}
+ };
+
+ void add(InitialWearableData &data);
+
+protected:
+ void processWearablesMessage();
+ void processContents();
+
+private:
+ typedef std::vector<InitialWearableData> initial_wearable_data_vec_t;
+ initial_wearable_data_vec_t mAgentInitialWearables; // Wearables from the old agent wearables msg
+};
+
+//--------------------------------------------------------------------
+// InitialWearablesFetch
+//
+// This grabs outfits from the Library and copies those over to the user's
+// outfits folder, typically during first-ever login.
+//--------------------------------------------------------------------
+class LLLibraryOutfitsFetch : public LLInventoryFetchDescendentsObserver
+{
+public:
+ enum ELibraryOutfitFetchStep
+ {
+ LOFS_FOLDER = 0,
+ LOFS_OUTFITS,
+ LOFS_LIBRARY,
+ LOFS_IMPORTED,
+ LOFS_CONTENTS
+ };
+
+ LLLibraryOutfitsFetch();
+ ~LLLibraryOutfitsFetch();
+
+ virtual void done();
+ void doneIdle();
+ LLUUID mMyOutfitsID;
+ void importedFolderFetch();
+protected:
+ void folderDone();
+ void outfitsDone();
+ void libraryDone();
+ void importedFolderDone();
+ void contentsDone();
+ enum ELibraryOutfitFetchStep mCurrFetchStep;
+ uuid_vec_t mLibraryClothingFolders;
+ uuid_vec_t mImportedClothingFolders;
+ bool mOutfitsPopulated;
+ LLUUID mClothingID;
+ LLUUID mLibraryClothingID;
+ LLUUID mImportedClothingID;
+ std::string mImportedClothingName;
+};
+
+#endif // LL_AGENTWEARABLESINITIALFETCH_H
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index eb4a47664b..e0f1d5348d 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -39,6 +39,7 @@
#include "llfloatercustomize.h"
#include "llgesturemgr.h"
#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
#include "llinventoryobserver.h"
#include "llnotificationsutil.h"
#include "llsidepanelappearance.h"
@@ -73,23 +74,6 @@ LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string&
}
}
-// support for secondlife:///app/appearance SLapps
-class LLAppearanceHandler : public LLCommandHandler
-{
-public:
- // requests will be throttled from a non-trusted browser
- LLAppearanceHandler() : LLCommandHandler("appearance", UNTRUSTED_THROTTLE) {}
-
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
- {
- // support secondlife:///app/appearance/show, but for now we just
- // make all secondlife:///app/appearance SLapps behave this way
- LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD());
- return true;
- }
-};
-LLAppearanceHandler gAppearanceHandler;
-
class LLWearInventoryCategoryCallback : public LLInventoryCallback
{
public:
@@ -119,7 +103,7 @@ protected:
// If the inventory callback manager goes away, we're shutting down, no longer want the callback.
if( LLInventoryCallbackManager::is_instantiated() )
{
- LLAppearanceManager::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);
+ LLAppearanceMgr::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);
}
else
{
@@ -132,219 +116,52 @@ private:
bool mAppend;
};
-class LLOutfitObserver : public LLInventoryFetchObserver
+LLUpdateAppearanceOnDestroy::LLUpdateAppearanceOnDestroy():
+ mFireCount(0)
{
-public:
- LLOutfitObserver(const LLUUID& cat_id, bool copy_items, bool append) :
- mCatID(cat_id),
- mCopyItems(copy_items),
- mAppend(append)
- {}
- ~LLOutfitObserver() {}
- virtual void done();
- void doWearCategory();
-
-protected:
- LLUUID mCatID;
- bool mCopyItems;
- bool mAppend;
-};
-
-void LLOutfitObserver::done()
-{
- llinfos << "done 2nd stage fetch" << llendl;
- gInventory.removeObserver(this);
- doOnIdle(boost::bind(&LLOutfitObserver::doWearCategory,this));
}
-void LLOutfitObserver::doWearCategory()
+LLUpdateAppearanceOnDestroy::~LLUpdateAppearanceOnDestroy()
{
- llinfos << "starting" << llendl;
+ llinfos << "done update appearance on destroy" << llendl;
- // We now have an outfit ready to be copied to agent inventory. Do
- // it, and wear that outfit normally.
- if(mCopyItems)
- {
- LLInventoryCategory* cat = gInventory.getCategory(mCatID);
- std::string name;
- if(!cat)
- {
- // should never happen.
- name = "New Outfit";
- }
- else
- {
- name = cat->getName();
- }
- LLViewerInventoryItem* item = NULL;
- item_ref_t::iterator it = mComplete.begin();
- item_ref_t::iterator end = mComplete.end();
- LLUUID pid;
- for(; it < end; ++it)
- {
- item = (LLViewerInventoryItem*)gInventory.getItem(*it);
- if(item)
- {
- if(LLInventoryType::IT_GESTURE == item->getInventoryType())
- {
- pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
- }
- else
- {
- pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
- }
- break;
- }
- }
- if(pid.isNull())
- {
- pid = gInventory.getRootFolderID();
- }
-
- LLUUID cat_id = gInventory.createNewCategory(
- pid,
- LLFolderType::FT_NONE,
- name);
- mCatID = cat_id;
- LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(mCatID, mAppend);
- it = mComplete.begin();
- for(; it < end; ++it)
- {
- item = (LLViewerInventoryItem*)gInventory.getItem(*it);
- if(item)
- {
- copy_inventory_item(
- gAgent.getID(),
- item->getPermissions().getOwner(),
- item->getUUID(),
- cat_id,
- std::string(),
- cb);
- }
- }
- // BAP fixes a lag in display of created dir.
- gInventory.notifyObservers();
- }
- else
+ if (!LLApp::isExiting())
{
- // Wear the inventory category.
- LLAppearanceManager::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);
+ LLAppearanceMgr::instance().updateAppearanceFromCOF();
}
- delete this;
}
-class LLOutfitFetch : public LLInventoryFetchDescendentsObserver
-{
-public:
- LLOutfitFetch(bool copy_items, bool append) : mCopyItems(copy_items), mAppend(append) {}
- ~LLOutfitFetch() {}
- virtual void done();
-protected:
- bool mCopyItems;
- bool mAppend;
-};
-
-void LLOutfitFetch::done()
+void LLUpdateAppearanceOnDestroy::fire(const LLUUID& inv_item)
{
- // 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.
- llinfos << "done first stage fetch" << llendl;
-
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t item_array;
- gInventory.collectDescendents(mCompleteFolders.front(),
- cat_array,
- item_array,
- LLInventoryModel::EXCLUDE_TRASH);
- S32 count = item_array.count();
- if(!count)
- {
- llwarns << "Nothing fetched in category " << mCompleteFolders.front()
- << llendl;
- //dec_busy_count();
- gInventory.removeObserver(this);
- delete this;
- return;
- }
-
- LLOutfitObserver* outfit_observer = new LLOutfitObserver(mCompleteFolders.front(), mCopyItems, mAppend);
- LLInventoryFetchObserver::item_ref_t ids;
- for(S32 i = 0; i < count; ++i)
- {
- ids.push_back(item_array.get(i)->getUUID());
- }
-
- // 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);
-
- // increment busy count and either tell the inventory to check &
- // call done, or add this object to the inventory for observation.
- //inc_busy_count();
-
- // do the fetch
- outfit_observer->fetchItems(ids);
- if(outfit_observer->isEverythingComplete())
- {
- // everything is already here - call done.
- outfit_observer->done();
- }
- else
- {
- // it's all on it's way - add an observer, and the inventory
- // will call done for us when everything is here.
- gInventory.addObserver(outfit_observer);
- }
- delete this;
+ llinfos << "callback fired" << llendl;
+ mFireCount++;
}
-class LLUpdateAppearanceOnDestroy: public LLInventoryCallback
-{
-public:
- LLUpdateAppearanceOnDestroy():
- mFireCount(0)
- {
- }
-
- virtual ~LLUpdateAppearanceOnDestroy()
- {
- llinfos << "done update appearance on destroy" << llendl;
-
- if (!LLApp::isExiting())
- {
- LLAppearanceManager::instance().updateAppearanceFromCOF();
- }
- }
-
- /* virtual */ void fire(const LLUUID& inv_item)
- {
- llinfos << "callback fired" << llendl;
- mFireCount++;
- }
-private:
- U32 mFireCount;
-};
-
struct LLFoundData
{
- LLFoundData() : mAssetType(LLAssetType::AT_NONE), mWearable(NULL) {}
+ LLFoundData() :
+ mAssetType(LLAssetType::AT_NONE),
+ mWearableType(WT_INVALID),
+ mWearable(NULL) {}
+
LLFoundData(const LLUUID& item_id,
- const LLUUID& asset_id,
- const std::string& name,
- LLAssetType::EType asset_type) :
+ const LLUUID& asset_id,
+ const std::string& name,
+ const LLAssetType::EType& asset_type,
+ const EWearableType& wearable_type
+ ) :
mItemID(item_id),
mAssetID(asset_id),
mName(name),
mAssetType(asset_type),
+ mWearableType(wearable_type),
mWearable( NULL ) {}
LLUUID mItemID;
LLUUID mAssetID;
std::string mName;
LLAssetType::EType mAssetType;
+ EWearableType mWearableType;
LLWearable* mWearable;
};
@@ -355,14 +172,27 @@ public:
LLWearableHoldingPattern();
~LLWearableHoldingPattern();
- bool pollCompletion();
+ bool pollFetchCompletion();
+ void onFetchCompletion();
bool isFetchCompleted();
bool isTimedOut();
+
+ void checkMissingWearables();
+ bool pollMissingWearables();
+ bool isMissingCompleted();
+ void recoverMissingWearable(EWearableType type);
+ void clearCOFLinksForMissingWearables();
+
+ void onWearableAssetFetch(LLWearable *wearable);
+ void onAllComplete();
typedef std::list<LLFoundData> found_list_t;
found_list_t mFoundList;
LLInventoryModel::item_array_t mObjItems;
LLInventoryModel::item_array_t mGestItems;
+ typedef std::set<S32> type_set_t;
+ type_set_t mTypesToRecover;
+ type_set_t mTypesToLink;
S32 mResolved;
LLTimer mWaitTime;
bool mFired;
@@ -385,20 +215,106 @@ bool LLWearableHoldingPattern::isFetchCompleted()
bool LLWearableHoldingPattern::isTimedOut()
{
- static F32 max_wait_time = 20.0; // give up if wearable fetches haven't completed in max_wait_time seconds.
+ static F32 max_wait_time = 60.0; // give up if wearable fetches haven't completed in max_wait_time seconds.
return mWaitTime.getElapsedTimeF32() > max_wait_time;
}
-bool LLWearableHoldingPattern::pollCompletion()
+void LLWearableHoldingPattern::checkMissingWearables()
+{
+ std::vector<S32> found_by_type(WT_COUNT,0);
+ std::vector<S32> requested_by_type(WT_COUNT,0);
+ for (found_list_t::iterator it = mFoundList.begin(); it != mFoundList.end(); ++it)
+ {
+ LLFoundData &data = *it;
+ if (data.mWearableType < WT_COUNT)
+ requested_by_type[data.mWearableType]++;
+ if (data.mWearable)
+ found_by_type[data.mWearableType]++;
+ }
+
+ for (S32 type = 0; type < WT_COUNT; ++type)
+ {
+ llinfos << "type " << type << " requested " << requested_by_type[type] << " found " << found_by_type[type] << llendl;
+ if (found_by_type[type] > 0)
+ continue;
+ if (
+ // Need to recover if at least one wearable of that type
+ // was requested but none was found (prevent missing
+ // pants)
+ (requested_by_type[type] > 0) ||
+ // or if type is a body part and no wearables were found.
+ ((type == WT_SHAPE) || (type == WT_SKIN) || (type == WT_HAIR) || (type == WT_EYES)))
+ {
+ mTypesToRecover.insert(type);
+ mTypesToLink.insert(type);
+ recoverMissingWearable((EWearableType)type);
+ llwarns << "need to replace " << type << llendl;
+ }
+ }
+
+ mWaitTime.reset();
+ if (!pollMissingWearables())
+ {
+ doOnIdleRepeating(boost::bind(&LLWearableHoldingPattern::pollMissingWearables,this));
+ }
+}
+
+void LLWearableHoldingPattern::onAllComplete()
+{
+ // Activate all gestures in this folder
+ if (mGestItems.count() > 0)
+ {
+ llinfos << "Activating " << mGestItems.count() << " gestures" << llendl;
+
+ LLGestureMgr::instance().activateGestures(mGestItems);
+
+ // Update the inventory item labels to reflect the fact
+ // they are active.
+ LLViewerInventoryCategory* catp =
+ gInventory.getCategory(LLAppearanceMgr::instance().getCOF());
+
+ if (catp)
+ {
+ gInventory.updateCategory(catp);
+ gInventory.notifyObservers();
+ }
+ }
+
+ // Update wearables.
+ llinfos << "Updating agent wearables with " << mResolved << " wearable items " << llendl;
+ LLAppearanceMgr::instance().updateAgentWearables(this, false);
+
+ // Update attachments to match those requested.
+ if (isAgentAvatarValid())
+ {
+ llinfos << "Updating " << mObjItems.count() << " attachments" << llendl;
+ LLAgentWearables::userUpdateAttachments(mObjItems);
+ }
+
+ if (isFetchCompleted() && isMissingCompleted())
+ {
+ // Only safe to delete if all wearable callbacks and all missing wearables completed.
+ delete this;
+ }
+}
+
+void LLWearableHoldingPattern::onFetchCompletion()
+{
+ checkMissingWearables();
+}
+
+// Runs as an idle callback until all wearables are fetched (or we time out).
+bool LLWearableHoldingPattern::pollFetchCompletion()
{
bool completed = isFetchCompleted();
bool timed_out = isTimedOut();
bool done = completed || timed_out;
-
- llinfos << "polling, done status: " << completed << " timed out? " << timed_out << " elapsed " << mWaitTime.getElapsedTimeF32() << llendl;
if (done)
{
+ llinfos << "polling, done status: " << completed << " timed out " << timed_out
+ << " elapsed " << mWaitTime.getElapsedTimeF32() << llendl;
+
mFired = true;
if (timed_out)
@@ -406,46 +322,201 @@ bool LLWearableHoldingPattern::pollCompletion()
llwarns << "Exceeded max wait time for wearables, updating appearance based on what has arrived" << llendl;
}
- // Activate all gestures in this folder
- if (mGestItems.count() > 0)
+ onFetchCompletion();
+ }
+ return done;
+}
+
+class RecoveredItemLinkCB: public LLInventoryCallback
+{
+public:
+ RecoveredItemLinkCB(EWearableType type, LLWearable *wearable, LLWearableHoldingPattern* holder):
+ mHolder(holder),
+ mWearable(wearable),
+ mType(type)
+ {
+ }
+ void fire(const LLUUID& item_id)
+ {
+ llinfos << "Recovered item link for type " << mType << llendl;
+ mHolder->mTypesToLink.erase(mType);
+ // Add wearable to FoundData for actual wearing
+ LLViewerInventoryItem *item = gInventory.getItem(item_id);
+ LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL;
+
+ if (linked_item)
{
- llinfos << "Activating " << mGestItems.count() << " gestures" << llendl;
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
- LLGestureManager::instance().activateGestures(mGestItems);
-
- // Update the inventory item labels to reflect the fact
- // they are active.
- LLViewerInventoryCategory* catp =
- gInventory.getCategory(LLAppearanceManager::instance().getCOF());
-
- if (catp)
+ if (item)
{
- gInventory.updateCategory(catp);
- gInventory.notifyObservers();
+ LLFoundData found(linked_item->getUUID(),
+ linked_item->getAssetUUID(),
+ linked_item->getName(),
+ linked_item->getType(),
+ linked_item->isWearableType() ? linked_item->getWearableType() : WT_INVALID
+ );
+ found.mWearable = mWearable;
+ mHolder->mFoundList.push_front(found);
}
+ else
+ {
+ llwarns << "inventory item not found for recovered wearable" << llendl;
+ }
+ }
+ else
+ {
+ llwarns << "inventory link not found for recovered wearable" << llendl;
}
+ }
+private:
+ LLWearableHoldingPattern* mHolder;
+ LLWearable *mWearable;
+ EWearableType mType;
+};
- // Update wearables.
- llinfos << "Updating agent wearables with " << mResolved << " wearable items " << llendl;
- LLAppearanceManager::instance().updateAgentWearables(this, false);
-
- // Update attachments to match those requested.
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- if( avatar )
+class RecoveredItemCB: public LLInventoryCallback
+{
+public:
+ RecoveredItemCB(EWearableType type, LLWearable *wearable, LLWearableHoldingPattern* holder):
+ mHolder(holder),
+ mWearable(wearable),
+ mType(type)
+ {
+ }
+ void fire(const LLUUID& item_id)
+ {
+ llinfos << "Recovered item for type " << mType << llendl;
+ LLViewerInventoryItem *itemp = gInventory.getItem(item_id);
+ mWearable->setItemID(item_id);
+ LLPointer<LLInventoryCallback> cb = new RecoveredItemLinkCB(mType,mWearable,mHolder);
+ mHolder->mTypesToRecover.erase(mType);
+ llassert(itemp);
+ if (itemp)
{
- llinfos << "Updating " << mObjItems.count() << " attachments" << llendl;
- LLAgentWearables::userUpdateAttachments(mObjItems);
+ link_inventory_item( gAgent.getID(),
+ item_id,
+ LLAppearanceMgr::instance().getCOF(),
+ itemp->getName(),
+ LLAssetType::AT_LINK,
+ cb);
}
+ }
+private:
+ LLWearableHoldingPattern* mHolder;
+ LLWearable *mWearable;
+ EWearableType mType;
+};
+
+void LLWearableHoldingPattern::recoverMissingWearable(EWearableType type)
+{
+ // Try to recover by replacing missing wearable with a new one.
+ LLNotificationsUtil::add("ReplacedMissingWearable");
+ lldebugs << "Wearable " << LLWearableDictionary::getTypeLabel(type)
+ << " could not be downloaded. Replaced inventory item with default wearable." << llendl;
+ LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
+
+ // Add a new one in the lost and found folder.
+ const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
+ LLPointer<LLInventoryCallback> cb = new RecoveredItemCB(type,wearable,this);
+
+ create_inventory_item(gAgent.getID(),
+ gAgent.getSessionID(),
+ lost_and_found_id,
+ wearable->getTransactionID(),
+ wearable->getName(),
+ wearable->getDescription(),
+ wearable->getAssetType(),
+ LLInventoryType::IT_WEARABLE,
+ wearable->getType(),
+ wearable->getPermissions().getMaskNextOwner(),
+ cb);
+}
+
+bool LLWearableHoldingPattern::isMissingCompleted()
+{
+ return mTypesToLink.size()==0 && mTypesToRecover.size()==0;
+}
- if (completed)
+void LLWearableHoldingPattern::clearCOFLinksForMissingWearables()
+{
+ for (found_list_t::iterator it = mFoundList.begin(); it != mFoundList.end(); ++it)
+ {
+ LLFoundData &data = *it;
+ if ((data.mWearableType < WT_COUNT) && (!data.mWearable))
{
- // Only safe to delete if all wearable callbacks completed.
- delete this;
+ // Wearable link that was never resolved; remove links to it from COF
+ llinfos << "removing link for unresolved item " << data.mItemID.asString() << llendl;
+ LLAppearanceMgr::instance().removeCOFItemLinks(data.mItemID,false);
}
}
+}
+
+bool LLWearableHoldingPattern::pollMissingWearables()
+{
+ bool timed_out = isTimedOut();
+ bool missing_completed = isMissingCompleted();
+ bool done = timed_out || missing_completed;
+
+ llinfos << "polling missing wearables, waiting for items " << mTypesToRecover.size()
+ << " links " << mTypesToLink.size()
+ << " wearables, timed out " << timed_out
+ << " elapsed " << mWaitTime.getElapsedTimeF32()
+ << " done " << done << llendl;
+
+ if (done)
+ {
+ clearCOFLinksForMissingWearables();
+ onAllComplete();
+ }
return done;
}
+void LLWearableHoldingPattern::onWearableAssetFetch(LLWearable *wearable)
+{
+ mResolved += 1; // just counting callbacks, not successes.
+ llinfos << "onWearableAssetFetch, resolved count " << mResolved << " of requested " << mFoundList.size() << llendl;
+ if (wearable)
+ {
+ llinfos << "wearable found, type " << wearable->getType() << " asset " << wearable->getAssetID() << llendl;
+ }
+ else
+ {
+ llwarns << "no wearable found" << llendl;
+ }
+
+ if (mFired)
+ {
+ llwarns << "called after holder fired" << llendl;
+ return;
+ }
+
+ if (!wearable)
+ {
+ return;
+ }
+
+ for (LLWearableHoldingPattern::found_list_t::iterator iter = mFoundList.begin();
+ iter != mFoundList.end(); ++iter)
+ {
+ LLFoundData& data = *iter;
+ if(wearable->getAssetID() == data.mAssetID)
+ {
+ data.mWearable = wearable;
+ // Failing this means inventory or asset server are corrupted in a way we don't handle.
+ llassert((data.mWearableType < WT_COUNT) && (wearable->getType() == data.mWearableType));
+ break;
+ }
+ }
+}
+
+static void onWearableAssetFetch(LLWearable* wearable, void* data)
+{
+ LLWearableHoldingPattern* holder = (LLWearableHoldingPattern*)data;
+ holder->onWearableAssetFetch(wearable);
+}
+
+
static void removeDuplicateItems(LLInventoryModel::item_array_t& items)
{
LLInventoryModel::item_array_t new_items;
@@ -473,37 +544,13 @@ static void removeDuplicateItems(LLInventoryModel::item_array_t& items)
items = new_items;
}
-static void onWearableAssetFetch(LLWearable* wearable, void* data)
-{
- LLWearableHoldingPattern* holder = (LLWearableHoldingPattern*)data;
- if (holder->mFired)
- {
- llwarns << "called after holder fired" << llendl;
- }
-
- if(wearable)
- {
- for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin();
- iter != holder->mFoundList.end(); ++iter)
- {
- LLFoundData& data = *iter;
- if(wearable->getAssetID() == data.mAssetID)
- {
- data.mWearable = wearable;
- break;
- }
- }
- }
- holder->mResolved += 1;
-}
-
-const LLUUID LLAppearanceManager::getCOF() const
+const LLUUID LLAppearanceMgr::getCOF() const
{
return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
}
-const LLViewerInventoryItem* LLAppearanceManager::getBaseOutfitLink()
+const LLViewerInventoryItem* LLAppearanceMgr::getBaseOutfitLink()
{
const LLUUID& current_outfit_cat = getCOF();
LLInventoryModel::cat_array_t cat_array;
@@ -531,7 +578,7 @@ const LLViewerInventoryItem* LLAppearanceManager::getBaseOutfitLink()
return NULL;
}
-bool LLAppearanceManager::getBaseOutfitName(std::string& name)
+bool LLAppearanceMgr::getBaseOutfitName(std::string& name)
{
const LLViewerInventoryItem* outfit_link = getBaseOutfitLink();
if(outfit_link)
@@ -547,15 +594,15 @@ bool LLAppearanceManager::getBaseOutfitName(std::string& name)
}
// Update appearance from outfit folder.
-void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, bool append)
+void LLAppearanceMgr::changeOutfit(bool proceed, const LLUUID& category, bool append)
{
if (!proceed)
return;
- LLAppearanceManager::instance().updateCOF(category,append);
+ LLAppearanceMgr::instance().updateCOF(category,append);
}
// Create a copy of src_id + contents as a subfolder of dst_id.
-void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
+void LLAppearanceMgr::shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb)
{
LLInventoryCategory *src_cat = gInventory.getCategory(src_id);
@@ -578,51 +625,95 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
}
// Copy contents of src_id to dst_id.
-void LLAppearanceManager::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id,
+void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb)
{
- LLInventoryModel::cat_array_t cats;
- LLInventoryModel::item_array_t items;
- gInventory.collectDescendents(src_id, cats, items,
- LLInventoryModel::EXCLUDE_TRASH);
- for (S32 i = 0; i < items.count(); ++i)
- {
- const LLViewerInventoryItem* item = items.get(i).get();
- if (item->getActualType() == LLAssetType::AT_LINK)
- {
- link_inventory_item(gAgent.getID(),
- item->getLinkedUUID(),
- dst_id,
- item->getName(),
- LLAssetType::AT_LINK, cb);
- }
- else if (item->getActualType() == LLAssetType::AT_LINK_FOLDER)
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(src_id, cats, items);
+ for (LLInventoryModel::item_array_t::const_iterator iter = items->begin();
+ iter != items->end();
+ ++iter)
+ {
+ const LLViewerInventoryItem* item = (*iter);
+ switch (item->getActualType())
{
- LLViewerInventoryCategory *catp = item->getLinkedCategory();
- // Skip copying outfit links.
- if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT)
+ case LLAssetType::AT_LINK:
{
link_inventory_item(gAgent.getID(),
item->getLinkedUUID(),
dst_id,
item->getName(),
- LLAssetType::AT_LINK_FOLDER, cb);
+ LLAssetType::AT_LINK, cb);
+ break;
}
+ case LLAssetType::AT_LINK_FOLDER:
+ {
+ LLViewerInventoryCategory *catp = item->getLinkedCategory();
+ // Skip copying outfit links.
+ if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT)
+ {
+ link_inventory_item(gAgent.getID(),
+ item->getLinkedUUID(),
+ dst_id,
+ item->getName(),
+ LLAssetType::AT_LINK_FOLDER, cb);
+ }
+ break;
+ }
+ case LLAssetType::AT_CLOTHING:
+ case LLAssetType::AT_OBJECT:
+ case LLAssetType::AT_BODYPART:
+ case LLAssetType::AT_GESTURE:
+ {
+ copy_inventory_item(gAgent.getID(),
+ item->getPermissions().getOwner(),
+ item->getUUID(),
+ dst_id,
+ item->getName(),
+ cb);
+ break;
+ }
+ default:
+ // Ignore non-outfit asset types
+ break;
}
- else
+ }
+}
+
+BOOL LLAppearanceMgr::getCanMakeFolderIntoOutfit(const LLUUID& folder_id)
+{
+ // These are the wearable items that are required for considering this
+ // folder as containing a complete outfit.
+ U32 required_wearables = 0;
+ required_wearables |= 1LL << WT_SHAPE;
+ required_wearables |= 1LL << WT_SKIN;
+ required_wearables |= 1LL << WT_HAIR;
+ required_wearables |= 1LL << WT_EYES;
+
+ // These are the wearables that the folder actually contains.
+ U32 folder_wearables = 0;
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(folder_id, cats, items);
+ for (LLInventoryModel::item_array_t::const_iterator iter = items->begin();
+ iter != items->end();
+ ++iter)
+ {
+ const LLViewerInventoryItem* item = (*iter);
+ if (item->isWearableType())
{
- copy_inventory_item(
- gAgent.getID(),
- item->getPermissions().getOwner(),
- item->getUUID(),
- dst_id,
- item->getName(),
- cb);
+ const EWearableType wearable_type = item->getWearableType();
+ folder_wearables |= 1LL << wearable_type;
}
}
+
+ // If the folder contains the required wearables, return TRUE.
+ return ((required_wearables & folder_wearables) == required_wearables);
}
-void LLAppearanceManager::purgeBaseOutfitLink(const LLUUID& category)
+
+void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category)
{
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
@@ -644,7 +735,7 @@ void LLAppearanceManager::purgeBaseOutfitLink(const LLUUID& category)
}
}
-void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links)
+void LLAppearanceMgr::purgeCategory(const LLUUID& category, bool keep_outfit_links)
{
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
@@ -664,7 +755,7 @@ void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit
// Keep the last N wearables of each type. For viewer 2.0, N is 1 for
// both body parts and clothing items.
-void LLAppearanceManager::filterWearableItems(
+void LLAppearanceMgr::filterWearableItems(
LLInventoryModel::item_array_t& items, S32 max_per_type)
{
// Divvy items into arrays by wearable type.
@@ -700,7 +791,7 @@ void LLAppearanceManager::filterWearableItems(
}
// Create links to all listed items.
-void LLAppearanceManager::linkAll(const LLUUID& category,
+void LLAppearanceMgr::linkAll(const LLUUID& category,
LLInventoryModel::item_array_t& items,
LLPointer<LLInventoryCallback> cb)
{
@@ -716,9 +807,10 @@ void LLAppearanceManager::linkAll(const LLUUID& category,
}
}
-void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
+void LLAppearanceMgr::updateCOF(const LLUUID& category, bool append)
{
- llinfos << "starting" << llendl;
+ LLViewerInventoryCategory *pcat = gInventory.getCategory(category);
+ llinfos << "starting, cat " << (pcat ? pcat->getName() : "[UNKNOWN]") << llendl;
const LLUUID cof = getCOF();
@@ -730,9 +822,9 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
for(S32 i = 0; i < gest_items.count(); ++i)
{
LLViewerInventoryItem *gest_item = gest_items.get(i);
- if ( LLGestureManager::instance().isGestureActive( gest_item->getLinkedUUID()) )
+ if ( LLGestureMgr::instance().isGestureActive( gest_item->getLinkedUUID()) )
{
- LLGestureManager::instance().deactivateGesture( gest_item->getLinkedUUID() );
+ LLGestureMgr::instance().deactivateGesture( gest_item->getLinkedUUID() );
}
}
}
@@ -755,7 +847,7 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
getDescendentsOfAssetType(category, wear_items, LLAssetType::AT_CLOTHING, false);
// Reduce wearables to max of one per type.
removeDuplicateItems(wear_items);
- filterWearableItems(wear_items, 1);
+ filterWearableItems(wear_items, 5);
// - Attachments: include COF contents only if appending.
LLInventoryModel::item_array_t obj_items;
@@ -793,7 +885,7 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
llinfos << "waiting for LLUpdateAppearanceOnDestroy" << llendl;
}
-void LLAppearanceManager::updatePanelOutfitName(const std::string& name)
+void LLAppearanceMgr::updatePanelOutfitName(const std::string& name)
{
LLSidepanelAppearance* panel_appearance =
dynamic_cast<LLSidepanelAppearance *>(LLSideTray::getInstance()->getPanel("sidepanel_appearance"));
@@ -803,7 +895,7 @@ void LLAppearanceManager::updatePanelOutfitName(const std::string& name)
}
}
-void LLAppearanceManager::createBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> link_waiter)
+void LLAppearanceMgr::createBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> link_waiter)
{
const LLUUID cof = getCOF();
LLViewerInventoryCategory* catp = gInventory.getCategory(category);
@@ -821,7 +913,7 @@ void LLAppearanceManager::createBaseOutfitLink(const LLUUID& category, LLPointer
updatePanelOutfitName(new_outfit_name);
}
-void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, bool append)
+void LLAppearanceMgr::updateAgentWearables(LLWearableHoldingPattern* holder, bool append)
{
lldebugs << "updateAgentWearables()" << llendl;
LLInventoryItem::item_array_t items;
@@ -845,7 +937,6 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder,
items.put(item);
wearables.put(wearable);
}
- break;
}
}
}
@@ -858,7 +949,23 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder,
// dec_busy_count();
}
-void LLAppearanceManager::updateAppearanceFromCOF()
+static void remove_non_link_items(LLInventoryModel::item_array_t &items)
+{
+ LLInventoryModel::item_array_t pruned_items;
+ for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
+ iter != items.end();
+ ++iter)
+ {
+ const LLViewerInventoryItem *item = (*iter);
+ if (item && item->getIsLinkType())
+ {
+ pruned_items.push_back((*iter));
+ }
+ }
+ items = pruned_items;
+}
+
+void LLAppearanceMgr::updateAppearanceFromCOF()
{
// update dirty flag to see if the state of the COF matches
// the saved outfit stored as a folder link
@@ -871,13 +978,17 @@ void LLAppearanceManager::updateAppearanceFromCOF()
bool follow_folder_links = true;
LLUUID current_outfit_id = getCOF();
- // Find all the wearables that are in the COF's subtree.
- lldebugs << "LLAppearanceManager::updateFromCOF()" << llendl;
+ // Find all the wearables that are in the COF's subtree.
+ lldebugs << "LLAppearanceMgr::updateFromCOF()" << llendl;
LLInventoryModel::item_array_t wear_items;
LLInventoryModel::item_array_t obj_items;
LLInventoryModel::item_array_t gest_items;
getUserDescendents(current_outfit_id, wear_items, obj_items, gest_items, follow_folder_links);
-
+ // Get rid of non-links in case somehow the COF was corrupted.
+ remove_non_link_items(wear_items);
+ remove_non_link_items(obj_items);
+ remove_non_link_items(gest_items);
+
if(!wear_items.count())
{
LLNotificationsUtil::add("CouldNotPutOnOutfit");
@@ -893,37 +1004,53 @@ void LLAppearanceManager::updateAppearanceFromCOF()
// wearables can be resolved immediately, then the
// callback will be called (and this object deleted)
// before the final getNextData().
- LLDynamicArray<LLFoundData> found_container;
+
for(S32 i = 0; i < wear_items.count(); ++i)
{
LLViewerInventoryItem *item = wear_items.get(i);
LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL;
- if (item && linked_item)
+ if (item && item->getIsLinkType() && linked_item)
{
LLFoundData found(linked_item->getUUID(),
linked_item->getAssetUUID(),
linked_item->getName(),
- linked_item->getType());
+ linked_item->getType(),
+ linked_item->isWearableType() ? linked_item->getWearableType() : WT_INVALID
+ );
+
+#if 0
+ // Fault injection: uncomment this block to test asset
+ // fetch failures (should be replaced by new defaults in
+ // lost&found).
+ if (found.mWearableType == WT_SHAPE || found.mWearableType == WT_JACKET)
+ {
+ found.mAssetID.generate(); // Replace with new UUID, guaranteed not to exist in DB
+
+ }
+#endif
+
holder->mFoundList.push_front(found);
- found_container.put(found);
}
else
{
if (!item)
{
- llwarns << "attempt to wear a null item " << llendl;
+ llwarns << "Attempt to wear a null item " << llendl;
}
else if (!linked_item)
{
- llwarns << "attempt to wear a broken link " << item->getName() << llendl;
+ llwarns << "Attempt to wear a broken link [ name:" << item->getName() << " ] " << llendl;
}
}
}
- for(S32 i = 0; i < found_container.count(); ++i)
+ for (LLWearableHoldingPattern::found_list_t::iterator it = holder->mFoundList.begin();
+ it != holder->mFoundList.end(); ++it)
{
- LLFoundData& found = found_container.get(i);
-
+ LLFoundData& found = *it;
+
+ llinfos << "waiting for onWearableAssetFetch callback, asset " << found.mAssetID.asString() << llendl;
+
// Fetch the wearables about to be worn.
LLWearableList::instance().getAsset(found.mAssetID,
found.mName,
@@ -933,14 +1060,13 @@ void LLAppearanceManager::updateAppearanceFromCOF()
}
- if (!holder->pollCompletion())
+ if (!holder->pollFetchCompletion())
{
- doOnIdleRepeating(boost::bind(&LLWearableHoldingPattern::pollCompletion,holder));
+ doOnIdleRepeating(boost::bind(&LLWearableHoldingPattern::pollFetchCompletion,holder));
}
-
}
-void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category,
+void LLAppearanceMgr::getDescendentsOfAssetType(const LLUUID& category,
LLInventoryModel::item_array_t& items,
LLAssetType::EType type,
bool follow_folder_links)
@@ -955,7 +1081,7 @@ void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category,
follow_folder_links);
}
-void LLAppearanceManager::getUserDescendents(const LLUUID& category,
+void LLAppearanceMgr::getUserDescendents(const LLUUID& category,
LLInventoryModel::item_array_t& wear_items,
LLInventoryModel::item_array_t& obj_items,
LLInventoryModel::item_array_t& gest_items,
@@ -990,36 +1116,97 @@ void LLAppearanceManager::getUserDescendents(const LLUUID& category,
follow_folder_links);
}
-void LLAppearanceManager::wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append)
+void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append)
{
if(!category) return;
llinfos << "wearInventoryCategory( " << category->getName()
<< " )" << llendl;
- // What we do here is get the complete information on the items in
- // the inventory, and set up an observer that will wait for that to
- // happen.
- LLOutfitFetch* outfit_fetcher = new LLOutfitFetch(copy, append);
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
- folders.push_back(category->getUUID());
- outfit_fetcher->fetchDescendents(folders);
- //inc_busy_count();
- if(outfit_fetcher->isEverythingComplete())
+ callAfterCategoryFetch(category->getUUID(),boost::bind(&LLAppearanceMgr::wearCategoryFinal,
+ &LLAppearanceMgr::instance(),
+ category->getUUID(), copy, append));
+}
+
+void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append)
+{
+ llinfos << "starting" << llendl;
+
+ // We now have an outfit ready to be copied to agent inventory. Do
+ // it, and wear that outfit normally.
+ LLInventoryCategory* cat = gInventory.getCategory(cat_id);
+ if(copy_items)
{
- // everything is already here - call done.
- outfit_fetcher->done();
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(cat_id, cats, items);
+ std::string name;
+ if(!cat)
+ {
+ // should never happen.
+ name = "New Outfit";
+ }
+ else
+ {
+ name = cat->getName();
+ }
+ LLViewerInventoryItem* item = NULL;
+ LLInventoryModel::item_array_t::const_iterator it = items->begin();
+ LLInventoryModel::item_array_t::const_iterator end = items->end();
+ LLUUID pid;
+ for(; it < end; ++it)
+ {
+ item = *it;
+ if(item)
+ {
+ if(LLInventoryType::IT_GESTURE == item->getInventoryType())
+ {
+ pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
+ }
+ else
+ {
+ pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
+ }
+ break;
+ }
+ }
+ if(pid.isNull())
+ {
+ pid = gInventory.getRootFolderID();
+ }
+
+ LLUUID new_cat_id = gInventory.createNewCategory(
+ pid,
+ LLFolderType::FT_NONE,
+ name);
+ LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(new_cat_id, append);
+ it = items->begin();
+ for(; it < end; ++it)
+ {
+ item = *it;
+ if(item)
+ {
+ copy_inventory_item(
+ gAgent.getID(),
+ item->getPermissions().getOwner(),
+ item->getUUID(),
+ new_cat_id,
+ std::string(),
+ cb);
+ }
+ }
+ // BAP fixes a lag in display of created dir.
+ gInventory.notifyObservers();
}
else
{
- // it's all on it's way - add an observer, and the inventory
- // will call done for us when everything is here.
- gInventory.addObserver(outfit_fetcher);
+ // Wear the inventory category.
+ LLAppearanceMgr::instance().wearInventoryCategoryOnAvatar(cat, append);
}
}
// *NOTE: hack to get from avatar inventory to avatar
-void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* category, bool append )
+void LLAppearanceMgr::wearInventoryCategoryOnAvatar( LLInventoryCategory* category, bool append )
{
// Avoid unintentionally overwriting old wearables. We have to do
// this up front to avoid having to deal with the case of multiple
@@ -1031,17 +1218,17 @@ void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* ca
if( gFloaterCustomize )
{
- gFloaterCustomize->askToSaveIfDirty(boost::bind(&LLAppearanceManager::changeOutfit,
- &LLAppearanceManager::instance(),
+ gFloaterCustomize->askToSaveIfDirty(boost::bind(&LLAppearanceMgr::changeOutfit,
+ &LLAppearanceMgr::instance(),
_1, category->getUUID(), append));
}
else
{
- LLAppearanceManager::changeOutfit(TRUE, category->getUUID(), append);
+ LLAppearanceMgr::changeOutfit(TRUE, category->getUUID(), append);
}
}
-void LLAppearanceManager::wearOutfitByName(const std::string& name)
+void LLAppearanceMgr::wearOutfitByName(const std::string& name)
{
llinfos << "Wearing category " << name << llendl;
//inc_busy_count();
@@ -1077,7 +1264,7 @@ void LLAppearanceManager::wearOutfitByName(const std::string& name)
if(cat)
{
- LLAppearanceManager::wearInventoryCategory(cat, copy_items, false);
+ LLAppearanceMgr::wearInventoryCategory(cat, copy_items, false);
}
else
{
@@ -1113,7 +1300,7 @@ public:
if (item)
{
gInventory.removeObserver(this);
- LLAppearanceManager::instance().addCOFItemLink(item,mDoUpdate);
+ LLAppearanceMgr::instance().addCOFItemLink(item,mDoUpdate);
delete this;
}
}
@@ -1124,7 +1311,9 @@ private:
};
-void LLAppearanceManager::addCOFItemLink(const LLUUID &item_id, bool do_update )
+// BAP - note that this runs asynchronously if the item is not already loaded from inventory.
+// Dangerous if caller assumes link will exist after calling the function.
+void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update )
{
const LLInventoryItem *item = gInventory.getItem(item_id);
if (!item)
@@ -1138,7 +1327,7 @@ void LLAppearanceManager::addCOFItemLink(const LLUUID &item_id, bool do_update )
}
}
-void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_update )
+void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update )
{
const LLViewerInventoryItem *vitem = dynamic_cast<const LLViewerInventoryItem*>(item);
if (!vitem)
@@ -1151,7 +1340,7 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t item_array;
- gInventory.collectDescendents(LLAppearanceManager::getCOF(),
+ gInventory.collectDescendents(LLAppearanceMgr::getCOF(),
cat_array,
item_array,
LLInventoryModel::EXCLUDE_TRASH);
@@ -1179,7 +1368,7 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up
{
if (do_update)
{
- LLAppearanceManager::updateAppearanceFromCOF();
+ LLAppearanceMgr::updateAppearanceFromCOF();
}
return;
}
@@ -1196,7 +1385,8 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up
return;
}
-void LLAppearanceManager::addEnsembleLink( LLInventoryCategory* cat, bool do_update )
+// BAP remove ensemble code for 2.1?
+void LLAppearanceMgr::addEnsembleLink( LLInventoryCategory* cat, bool do_update )
{
#if SUPPORT_ENSEMBLES
// BAP add check for already in COF.
@@ -1210,13 +1400,13 @@ void LLAppearanceManager::addEnsembleLink( LLInventoryCategory* cat, bool do_upd
#endif
}
-void LLAppearanceManager::removeCOFItemLinks(const LLUUID& item_id, bool do_update)
+void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, bool do_update)
{
gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t item_array;
- gInventory.collectDescendents(LLAppearanceManager::getCOF(),
+ gInventory.collectDescendents(LLAppearanceMgr::getCOF(),
cat_array,
item_array,
LLInventoryModel::EXCLUDE_TRASH);
@@ -1230,11 +1420,11 @@ void LLAppearanceManager::removeCOFItemLinks(const LLUUID& item_id, bool do_upda
}
if (do_update)
{
- LLAppearanceManager::updateAppearanceFromCOF();
+ LLAppearanceMgr::updateAppearanceFromCOF();
}
}
-void LLAppearanceManager::updateIsDirty()
+void LLAppearanceMgr::updateIsDirty()
{
LLUUID cof = getCOF();
LLUUID base_outfit;
@@ -1303,7 +1493,7 @@ void LLAppearanceManager::updateIsDirty()
}
}
-void LLAppearanceManager::onFirstFullyVisible()
+void LLAppearanceMgr::autopopulateOutfits()
{
// If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account)
// then auto-populate outfits from the library into the My Outfits folder.
@@ -1320,9 +1510,15 @@ void LLAppearanceManager::onFirstFullyVisible()
check_populate_my_outfits = false;
}
+// Handler for anything that's deferred until avatar de-clouds.
+void LLAppearanceMgr::onFirstFullyVisible()
+{
+ autopopulateOutfits();
+}
+
//#define DUMP_CAT_VERBOSE
-void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg)
+void LLAppearanceMgr::dumpCat(const LLUUID& cat_id, const std::string& msg)
{
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
@@ -1343,7 +1539,7 @@ void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg)
llinfos << msg << " count " << items.count() << llendl;
}
-void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& items,
+void LLAppearanceMgr::dumpItemArray(const LLInventoryModel::item_array_t& items,
const std::string& msg)
{
llinfos << msg << llendl;
@@ -1355,22 +1551,23 @@ void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& it
llinfos << llendl;
}
-LLAppearanceManager::LLAppearanceManager():
+LLAppearanceMgr::LLAppearanceMgr():
mAttachmentInvLinkEnabled(false),
mOutfitIsDirty(false)
{
}
-LLAppearanceManager::~LLAppearanceManager()
+LLAppearanceMgr::~LLAppearanceMgr()
{
}
-void LLAppearanceManager::setAttachmentInvLinkEnable(bool val)
+void LLAppearanceMgr::setAttachmentInvLinkEnable(bool val)
{
llinfos << "setAttachmentInvLinkEnable => " << (int) val << llendl;
mAttachmentInvLinkEnabled = val;
}
+// BAP TODO - mRegisteredAttachments is currently maintained but not used for anything. Consider yanking.
void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
{
llinfos << msg << llendl;
@@ -1388,15 +1585,14 @@ void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
llinfos << llendl;
}
-void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
+void LLAppearanceMgr::registerAttachment(const LLUUID& item_id)
{
mRegisteredAttachments.insert(item_id);
gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
- //dumpAttachmentSet(mRegisteredAttachments,"after register:");
if (mAttachmentInvLinkEnabled)
{
- LLAppearanceManager::addCOFItemLink(item_id, false); // Add COF link for item.
+ LLAppearanceMgr::addCOFItemLink(item_id, false); // Add COF link for item.
}
else
{
@@ -1404,17 +1600,14 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
}
}
-void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
+void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id)
{
mRegisteredAttachments.erase(item_id);
gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
- //dumpAttachmentSet(mRegisteredAttachments,"after unregister:");
-
if (mAttachmentInvLinkEnabled)
{
- //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
- LLAppearanceManager::removeCOFItemLinks(item_id, false);
+ LLAppearanceMgr::removeCOFItemLinks(item_id, false);
}
else
{
@@ -1422,7 +1615,7 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
}
}
-void LLAppearanceManager::linkRegisteredAttachments()
+void LLAppearanceMgr::linkRegisteredAttachments()
{
for (std::set<LLUUID>::iterator it = mRegisteredAttachments.begin();
it != mRegisteredAttachments.end();
@@ -1434,15 +1627,22 @@ void LLAppearanceManager::linkRegisteredAttachments()
mRegisteredAttachments.clear();
}
-BOOL LLAppearanceManager::getIsInCOF(const LLUUID& obj_id) const
+BOOL LLAppearanceMgr::getIsInCOF(const LLUUID& obj_id) const
{
return gInventory.isObjectDescendentOf(obj_id, getCOF());
}
-BOOL LLAppearanceManager::getIsProtectedCOFItem(const LLUUID& obj_id) const
+BOOL LLAppearanceMgr::getIsProtectedCOFItem(const LLUUID& obj_id) const
{
if (!getIsInCOF(obj_id)) return FALSE;
+ // If a non-link somehow ended up in COF, allow deletion.
+ const LLInventoryObject *obj = gInventory.getObject(obj_id);
+ if (obj && !obj->getIsLinkType())
+ {
+ return FALSE;
+ }
+
// For now, don't allow direct deletion from the COF. Instead, force users
// to choose "Detach" or "Take Off".
return TRUE;
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 28b51ee0f6..40b8844731 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -43,9 +43,9 @@ class LLWearable;
class LLWearableHoldingPattern;
class LLInventoryCallback;
-class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
+class LLAppearanceMgr: public LLSingleton<LLAppearanceMgr>
{
- friend class LLSingleton<LLAppearanceManager>;
+ friend class LLSingleton<LLAppearanceMgr>;
public:
void updateAppearanceFromCOF();
@@ -53,6 +53,7 @@ public:
void updateCOF(const LLUUID& category, bool append = false);
void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append);
void wearInventoryCategoryOnAvatar(LLInventoryCategory* category, bool append);
+ void wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append);
void wearOutfitByName(const std::string& name);
void changeOutfit(bool proceed, const LLUUID& category, bool append);
@@ -60,6 +61,9 @@ public:
void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb);
+ // Return whether this folder contains minimal contents suitable for making a full outfit.
+ BOOL getCanMakeFolderIntoOutfit(const LLUUID& folder_id);
+
// Copy all items in a category.
void shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb);
@@ -115,10 +119,13 @@ public:
// Called when self avatar is first fully visible.
void onFirstFullyVisible();
+
+ // Create initial outfits from library.
+ void autopopulateOutfits();
protected:
- LLAppearanceManager();
- ~LLAppearanceManager();
+ LLAppearanceMgr();
+ ~LLAppearanceMgr();
private:
@@ -151,6 +158,18 @@ public:
BOOL getIsProtectedCOFItem(const LLUUID& obj_id) const;
};
+class LLUpdateAppearanceOnDestroy: public LLInventoryCallback
+{
+public:
+ LLUpdateAppearanceOnDestroy();
+ virtual ~LLUpdateAppearanceOnDestroy();
+ /* virtual */ void fire(const LLUUID& inv_item);
+
+private:
+ U32 mFireCount;
+};
+
+
#define SUPPORT_ENSEMBLES 0
LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string& name);
@@ -158,17 +177,17 @@ LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string&
// Shim class and template function to allow arbitrary boost::bind
// expressions to be run as one-time idle callbacks.
template <typename T>
-class OnIdleCallback
+class OnIdleCallbackOneTime
{
public:
- OnIdleCallback(T callable):
+ OnIdleCallbackOneTime(T callable):
mCallable(callable)
{
}
static void onIdle(void *data)
{
gIdleCallbacks.deleteFunction(onIdle, data);
- OnIdleCallback<T>* self = reinterpret_cast<OnIdleCallback<T>*>(data);
+ OnIdleCallbackOneTime<T>* self = reinterpret_cast<OnIdleCallbackOneTime<T>*>(data);
self->call();
delete self;
}
@@ -181,14 +200,15 @@ private:
};
template <typename T>
-void doOnIdle(T callable)
+void doOnIdleOneTime(T callable)
{
- OnIdleCallback<T>* cb_functor = new OnIdleCallback<T>(callable);
- gIdleCallbacks.addFunction(&OnIdleCallback<T>::onIdle,cb_functor);
+ OnIdleCallbackOneTime<T>* cb_functor = new OnIdleCallbackOneTime<T>(callable);
+ gIdleCallbacks.addFunction(&OnIdleCallbackOneTime<T>::onIdle,cb_functor);
}
// Shim class and template function to allow arbitrary boost::bind
// expressions to be run as recurring idle callbacks.
+// Callable should return true when done, false to continue getting called.
template <typename T>
class OnIdleCallbackRepeating
{
@@ -197,7 +217,7 @@ public:
mCallable(callable)
{
}
- // Will keep getting called until the callable returns false.
+ // Will keep getting called until the callable returns true.
static void onIdle(void *data)
{
OnIdleCallbackRepeating<T>* self = reinterpret_cast<OnIdleCallbackRepeating<T>*>(data);
@@ -237,7 +257,7 @@ public:
virtual void done()
{
gInventory.removeObserver(this);
- doOnIdle(mCallable);
+ doOnIdleOneTime(mCallable);
delete this;
}
protected:
@@ -262,14 +282,14 @@ public:
// happen.
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t item_array;
- gInventory.collectDescendents(mCompleteFolders.front(),
+ gInventory.collectDescendents(mComplete.front(),
cat_array,
item_array,
LLInventoryModel::EXCLUDE_TRASH);
S32 count = item_array.count();
if(!count)
{
- llwarns << "Nothing fetched in category " << mCompleteFolders.front()
+ llwarns << "Nothing fetched in category " << mComplete.front()
<< llendl;
//dec_busy_count();
gInventory.removeObserver(this);
@@ -278,7 +298,7 @@ public:
}
CallAfterCategoryFetchStage2<T> *stage2 = new CallAfterCategoryFetchStage2<T>(mCallable);
- LLInventoryFetchObserver::item_ref_t ids;
+ uuid_vec_t ids;
for(S32 i = 0; i < count; ++i)
{
ids.push_back(item_array.get(i)->getUUID());
@@ -287,7 +307,7 @@ public:
gInventory.removeObserver(this);
// do the fetch
- stage2->fetchItems(ids);
+ stage2->fetch(ids);
if(stage2->isEverythingComplete())
{
// everything is already here - call done.
@@ -309,9 +329,9 @@ template <class T>
void callAfterCategoryFetch(const LLUUID& cat_id, T callable)
{
CallAfterCategoryFetchStage1<T> *stage1 = new CallAfterCategoryFetchStage1<T>(callable);
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+ uuid_vec_t folders;
folders.push_back(cat_id);
- stage1->fetchDescendents(folders);
+ stage1->fetch(folders);
if (stage1->isEverythingComplete())
{
stage1->done();
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 00a9e4d745..43c8c679c6 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -44,6 +44,7 @@
#include "llviewertexturelist.h"
#include "llgroupmgr.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llwindow.h"
#include "llviewerstats.h"
@@ -78,6 +79,7 @@
#include "lllocationhistory.h"
#include "llfasttimerview.h"
#include "llvoicechannel.h"
+#include "llvoavatarself.h"
#include "llsidetray.h"
@@ -355,7 +357,7 @@ void request_initial_instant_messages()
if (!requested
&& gMessageSystem
&& LLMuteList::getInstance()->isLoaded()
- && gAgent.getAvatarObject())
+ && isAgentAvatarValid())
{
// Auto-accepted inventory items may require the avatar object
// to build a correct name. Likewise, inventory offers from
@@ -702,9 +704,9 @@ bool LLAppViewer::init()
settings_map["account"] = &gSavedPerAccountSettings;
LLUI::initClass(settings_map,
- LLUIImageList::getInstance(),
- ui_audio_callback,
- &LLUI::sGLScaleFactor);
+ LLUIImageList::getInstance(),
+ ui_audio_callback,
+ &LLUI::sGLScaleFactor);
// Setup paths and LLTrans after LLUI::initClass has been called
LLUI::setupPaths();
@@ -1107,12 +1109,15 @@ bool LLAppViewer::mainLoop()
ms_sleep(500);
}
-
+ static const F64 FRAME_SLOW_THRESHOLD = 0.5; //2 frames per seconds
const F64 min_frame_time = 0.0; //(.0333 - .0010); // max video frame rate = 30 fps
const F64 min_idle_time = 0.0; //(.0010); // min idle time = 1 ms
const F64 max_idle_time = run_multiple_threads ? min_idle_time : llmin(.005*10.0*gFrameTimeSeconds, 0.005); // 5 ms a second
idleTimer.reset();
- while(1)
+ bool is_slow = (frameTimer.getElapsedTimeF64() > FRAME_SLOW_THRESHOLD) ;
+ S32 total_work_pending = 0;
+ S32 total_io_pending = 0;
+ while(!is_slow)//do not unpause threads if the frame rates are very low.
{
S32 work_pending = 0;
S32 io_pending = 0;
@@ -1143,6 +1148,8 @@ bool LLAppViewer::mainLoop()
ms_sleep(llmin(io_pending/100,100)); // give the vfs some time to catch up
}
+ total_work_pending += work_pending ;
+ total_io_pending += io_pending ;
F64 frame_time = frameTimer.getElapsedTimeF64();
F64 idle_time = idleTimer.getElapsedTimeF64();
if (frame_time >= min_frame_time &&
@@ -1152,25 +1159,32 @@ bool LLAppViewer::mainLoop()
break;
}
}
- if ((LLStartUp::getStartupState() >= STATE_CLEANUP) &&
- (frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD))
- {
- gFrameStalls++;
- }
- frameTimer.reset();
// Prevent the worker threads from running while rendering.
// if (LLThread::processorCount()==1) //pause() should only be required when on a single processor client...
if (run_multiple_threads == FALSE)
{
- LLFastTimer ftm(FTM_PAUSE_THREADS);
-
- LLAppViewer::getTextureCache()->pause();
- LLAppViewer::getImageDecodeThread()->pause();
- // LLAppViewer::getTextureFetch()->pause(); // Don't pause the fetch (IO) thread
+ //LLFastTimer ftm(FTM_PAUSE_THREADS); //not necessary.
+
+ if(!total_work_pending) //pause texture fetching threads if nothing to process.
+ {
+ LLAppViewer::getTextureCache()->pause();
+ LLAppViewer::getImageDecodeThread()->pause();
+ LLAppViewer::getTextureFetch()->pause();
+ }
+ if(!total_io_pending) //pause file threads if nothing to process.
+ {
+ LLVFSThread::sLocal->pause();
+ LLLFSThread::sLocal->pause();
+ }
+ }
+
+ if ((LLStartUp::getStartupState() >= STATE_CLEANUP) &&
+ (frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD))
+ {
+ gFrameStalls++;
}
- //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering.
- //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering.
+ frameTimer.reset();
resumeMainloopTimeout();
@@ -1513,9 +1527,11 @@ bool LLAppViewer::cleanup()
LLLocationHistory::getInstance()->save();
LLAvatarIconIDCache::getInstance()->save();
+
+ LLViewerMedia::saveCookieFile();
llinfos << "Shutting down Threads" << llendflush;
-
+
// Let threads finish
LLTimer idleTimer;
idleTimer.reset();
@@ -1529,19 +1545,26 @@ bool LLAppViewer::cleanup()
pending += LLVFSThread::updateClass(0);
pending += LLLFSThread::updateClass(0);
F64 idle_time = idleTimer.getElapsedTimeF64();
- if (!pending || idle_time >= max_idle_time)
+ if(!pending)
+ {
+ break ; //done
+ }
+ else if(idle_time >= max_idle_time)
{
llwarns << "Quitting with pending background tasks." << llendl;
break;
}
}
-
+
// Delete workers first
// shotdown all worker threads before deleting them in case of co-dependencies
sTextureCache->shutdown();
sTextureFetch->shutdown();
sImageDecodeThread->shutdown();
+ sTextureFetch->shutDownTextureCacheThread() ;
+ sTextureFetch->shutDownImageDecodeThread() ;
+
delete sTextureCache;
sTextureCache = NULL;
delete sTextureFetch;
@@ -1626,7 +1649,7 @@ bool LLAppViewer::cleanup()
// HACK: Attempt to wait until the screen res. switch is complete.
ms_sleep(1000);
- LLWeb::loadURLExternal( gLaunchFileOnQuit );
+ LLWeb::loadURLExternal( gLaunchFileOnQuit, false );
llinfos << "File launched." << llendflush;
}
@@ -2191,10 +2214,12 @@ bool LLAppViewer::initConfiguration()
// Display splash screen. Must be after above check for previous
// crash as this dialog is always frontmost.
- std::ostringstream splash_msg;
- splash_msg << "Loading " << LLTrans::getString("SECOND_LIFE") << "...";
+ std::string splash_msg;
+ LLStringUtil::format_map_t args;
+ args["[APP_NAME]"] = LLTrans::getString("SECOND_LIFE");
+ splash_msg = LLTrans::getString("StartupLoading", args);
LLSplashScreen::show();
- LLSplashScreen::update(splash_msg.str());
+ LLSplashScreen::update(splash_msg);
//LLVolumeMgr::initClass();
LLVolumeMgr* volume_manager = new LLVolumeMgr();
@@ -2473,9 +2498,9 @@ void LLAppViewer::cleanupSavedSettings()
gSavedSettings.setF32("MapScale", LLWorldMapView::sMapScale );
// Some things are cached in LLAgent.
- if (gAgent.mInitialized)
+ if (gAgent.isInitialized())
{
- gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance);
+ gSavedSettings.setF32("RenderFarClip", gAgentCamera.mDrawDistance);
}
}
@@ -3035,11 +3060,11 @@ bool LLAppViewer::initCache()
if (mPurgeCache)
{
- LLSplashScreen::update("Clearing cache...");
+ LLSplashScreen::update(LLTrans::getString("StartupClearingCache"));
purgeCache();
}
- LLSplashScreen::update("Initializing Texture Cache...");
+ LLSplashScreen::update(LLTrans::getString("StartupInitializingTextureCache"));
// Init the texture cache
// Allocate 80% of the cache size for textures
@@ -3052,7 +3077,7 @@ bool LLAppViewer::initCache()
S64 extra = LLAppViewer::getTextureCache()->initCache(LL_PATH_CACHE, texture_cache_size, read_only);
texture_cache_size -= extra;
- LLSplashScreen::update("Initializing VFS...");
+ LLSplashScreen::update(LLTrans::getString("StartupInitializingVFS"));
// Init the VFS
S64 vfs_size = cache_size - texture_cache_size;
@@ -3310,10 +3335,10 @@ void LLAppViewer::saveFinalSnapshot()
{
if (!mSavedFinalSnapshot && !gNoRender)
{
- gSavedSettings.setVector3d("FocusPosOnLogout", gAgent.calcFocusPositionTargetGlobal());
- gSavedSettings.setVector3d("CameraPosOnLogout", gAgent.calcCameraPositionTargetGlobal());
+ gSavedSettings.setVector3d("FocusPosOnLogout", gAgentCamera.calcFocusPositionTargetGlobal());
+ gSavedSettings.setVector3d("CameraPosOnLogout", gAgentCamera.calcCameraPositionTargetGlobal());
gViewerWindow->setCursor(UI_CURSOR_WAIT);
- gAgent.changeCameraToThirdPerson( FALSE ); // don't animate, need immediate switch
+ gAgentCamera.changeCameraToThirdPerson( FALSE ); // don't animate, need immediate switch
gSavedSettings.setBOOL("ShowParcelOwners", FALSE);
idle();
@@ -3593,13 +3618,15 @@ void LLAppViewer::idle()
{
// Handle pending gesture processing
- LLGestureManager::instance().update();
+ static LLFastTimer::DeclareTimer ftm("Agent Position");
+ LLFastTimer t(ftm);
+ LLGestureMgr::instance().update();
gAgent.updateAgentPosition(gFrameDTClamped, yaw, current_mouse.mX, current_mouse.mY);
}
{
- LLFastTimer t(FTM_OBJECTLIST_UPDATE); // Actually "object update"
+ LLFastTimer t(FTM_OBJECTLIST_UPDATE);
if (!(logoutRequestSent() && hasSavedFinalSnapshot()))
{
@@ -3633,6 +3660,8 @@ void LLAppViewer::idle()
//
{
+ static LLFastTimer::DeclareTimer ftm("HUD Effects");
+ LLFastTimer t(ftm);
LLSelectMgr::getInstance()->updateEffects();
LLHUDManager::getInstance()->cleanupEffects();
LLHUDManager::getInstance()->sendEffects();
@@ -3719,7 +3748,7 @@ void LLAppViewer::idle()
LLViewerJoystick::getInstance()->moveObjects();
}
- gAgent.updateCamera();
+ gAgentCamera.updateCamera();
}
// update media focus
@@ -3817,7 +3846,7 @@ void LLAppViewer::idleShutdown()
S32 finished_uploads = total_uploads - pending_uploads;
F32 percent = 100.f * finished_uploads / total_uploads;
gViewerWindow->setProgressPercent(percent);
- gViewerWindow->setProgressString("Saving your settings...");
+ gViewerWindow->setProgressString(LLTrans::getString("SavingSettings"));
return;
}
@@ -3829,7 +3858,7 @@ void LLAppViewer::idleShutdown()
// Wait for a LogoutReply message
gViewerWindow->setShowProgress(TRUE);
gViewerWindow->setProgressPercent(100.f);
- gViewerWindow->setProgressString("Logging out...");
+ gViewerWindow->setProgressString(LLTrans::getString("LoggingOut"));
return;
}
@@ -3889,7 +3918,7 @@ void LLAppViewer::sendLogoutRequest()
static F32 CheckMessagesMaxTime = CHECK_MESSAGES_DEFAULT_MAX_TIME;
#endif
-static LLFastTimer::DeclareTimer FTM_IDLE_NETWORK("Network");
+static LLFastTimer::DeclareTimer FTM_IDLE_NETWORK("Idle Network");
void LLAppViewer::idleNetwork()
{
@@ -4053,7 +4082,7 @@ void LLAppViewer::disconnectViewer()
LLFloaterInventory::cleanup();
gAgentWearables.cleanup();
-
+ gAgentCamera.cleanup();
// Also writes cached agent settings to gSavedSettings
gAgent.cleanup();
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index f8f8f50cd6..80d9b14345 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -392,7 +392,12 @@ void LLAppViewerMacOSX::handleCrashReporting(bool reportFreeze)
_exit(1);
}
- // TODO:palmer REMOVE THIS VERY SOON. THIS WILL NOT BE IN VIEWER 2.0
+ // TODO from palmer: Find a better way to handle managing old crash logs
+ // when this is a separate imbedable module. Ideally just sort crash stack
+ // logs based on date, and grab the latest one as opposed to deleting them
+ // for thoughts on what the module would look like.
+ // See: https://wiki.lindenlab.com/wiki/Viewer_Crash_Reporter_Round_4
+
// Remove the crash stack log from previous executions.
// Since we've started logging a new instance of the app, we can assume
// The old crash stack is invalid for the next crash report.
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index 12cff32780..60a6d2f072 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -469,7 +469,7 @@ bool LLAppViewerWin32::initHardwareTest()
if (OSBTN_NO== button)
{
LL_INFOS("AppInit") << "User quitting after failed DirectX 9 detection" << LL_ENDL;
- LLWeb::loadURLExternal(DIRECTX_9_URL);
+ LLWeb::loadURLExternal(DIRECTX_9_URL, false);
return false;
}
gWarningSettings.setBOOL("AboutDirectX9", FALSE);
@@ -480,10 +480,12 @@ bool LLAppViewerWin32::initHardwareTest()
gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE);
// Disable so debugger can work
- std::ostringstream splash_msg;
- splash_msg << LLTrans::getString("StartupLoading") << " " << LLAppViewer::instance()->getSecondLifeTitle() << "...";
+ std::string splash_msg;
+ LLStringUtil::format_map_t args;
+ args["[APP_NAME]"] = LLAppViewer::instance()->getSecondLifeTitle();
+ splash_msg = LLTrans::getString("StartupLoading", args);
- LLSplashScreen::update(splash_msg.str());
+ LLSplashScreen::update(splash_msg);
}
if (!restoreErrorTrap())
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index a2322e28b4..2f90d652e4 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -39,6 +39,7 @@
#include "llcompilequeue.h"
#include "llfloaterbuycurrency.h"
#include "llfilepicker.h"
+#include "llinventorydefines.h"
#include "llinventoryobserver.h"
#include "llinventorypanel.h"
#include "llpermissionsflags.h"
@@ -55,6 +56,7 @@
#include "llviewermenufile.h"
#include "llviewerwindow.h"
#include "lltexlayer.h"
+#include "lltrans.h"
// library includes
#include "lldir.h"
@@ -181,7 +183,10 @@ void LLAssetUploadResponder::uploadFailure(const LLSD& content)
// deal with L$ errors
if (reason == "insufficient funds")
{
- LLFloaterBuyCurrency::buyCurrency("Uploading costs", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload());
+ S32 price = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", price);
+ LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs", args), price);
}
else
{
@@ -198,13 +203,19 @@ void LLAssetUploadResponder::uploadComplete(const LLSD& content)
LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data,
const LLUUID& vfile_id,
- LLAssetType::EType asset_type)
-: LLAssetUploadResponder(post_data, vfile_id, asset_type)
+ LLAssetType::EType asset_type,
+ boost::function<void(const LLUUID& uuid)> callback)
+: LLAssetUploadResponder(post_data, vfile_id, asset_type),
+ mCallback(callback)
{
}
-LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data, const std::string& file_name, LLAssetType::EType asset_type)
-: LLAssetUploadResponder(post_data, file_name, asset_type)
+LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data,
+ const std::string& file_name,
+ LLAssetType::EType asset_type,
+ boost::function<void(const LLUUID& uuid)> callback)
+: LLAssetUploadResponder(post_data, file_name, asset_type),
+ mCallback(callback)
{
}
@@ -278,10 +289,16 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
mPostData["name"].asString(),
mPostData["description"].asString(),
LLSaleInfo::DEFAULT,
- LLInventoryItem::II_FLAGS_NONE,
+ LLInventoryItemFlags::II_FLAGS_NONE,
creation_date_now);
gInventory.updateItem(item);
gInventory.notifyObservers();
+
+ if (mCallback)
+ {
+ // call the callback with the new Asset UUID
+ mCallback(item->getAssetUUID());
+ }
// Show the preview panel for textures and sounds to let
// user know that the image (or snapshot) arrived intact.
@@ -329,13 +346,11 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
U32 group_perms = mPostData.has("group_mask") ? mPostData.get("group_mask" ).asInteger() : PERM_NONE;
U32 next_owner_perms = mPostData.has("next_owner_mask") ? mPostData.get("next_owner_mask").asInteger() : PERM_NONE;
std::string display_name = LLStringUtil::null;
- LLAssetStorage::LLStoreAssetCallback callback = NULL;
- void *userdata = NULL;
upload_new_resource(next_file, asset_name, asset_name,
- 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
+ LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
next_owner_perms, group_perms,
everyone_perms, display_name,
- callback, expected_upload_cost, userdata);
+ NULL, expected_upload_cost);
}
}
@@ -473,10 +488,10 @@ void LLUpdateAgentInventoryResponder::uploadComplete(const LLSD& content)
{
// If this gesture is active, then we need to update the in-memory
// active map with the new pointer.
- if (LLGestureManager::instance().isGestureActive(item_id))
+ if (LLGestureMgr::instance().isGestureActive(item_id))
{
LLUUID asset_id = new_item->getAssetUUID();
- LLGestureManager::instance().replaceGesture(item_id, asset_id);
+ LLGestureMgr::instance().replaceGesture(item_id, asset_id);
gInventory.notifyObservers();
}
diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h
index e656351305..ade9c96758 100644
--- a/indra/newview/llassetuploadresponders.h
+++ b/indra/newview/llassetuploadresponders.h
@@ -33,6 +33,7 @@
#ifndef LL_LLASSETUPLOADRESPONDER_H
#define LL_LLASSETUPLOADRESPONDER_H
+#include "llassetstorage.h"
#include "llhttpclient.h"
// Abstract class for supporting asset upload
@@ -66,10 +67,15 @@ class LLNewAgentInventoryResponder : public LLAssetUploadResponder
public:
LLNewAgentInventoryResponder(const LLSD& post_data,
const LLUUID& vfile_id,
- LLAssetType::EType asset_type);
- LLNewAgentInventoryResponder(const LLSD& post_data, const std::string& file_name,
- LLAssetType::EType asset_type);
+ LLAssetType::EType asset_type,
+ boost::function<void(const LLUUID& uuid)> callback = NULL);
+ LLNewAgentInventoryResponder(const LLSD& post_data,
+ const std::string& file_name,
+ LLAssetType::EType asset_type,
+ boost::function<void(const LLUUID& uuid)> callback = NULL);
virtual void uploadComplete(const LLSD& content);
+
+ boost::function<void(const LLUUID& uuid)> mCallback;
};
class LLBakedUploadData;
diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp
index 5e71e64b2f..50363ea2e7 100644
--- a/indra/newview/llaudiosourcevo.cpp
+++ b/indra/newview/llaudiosourcevo.cpp
@@ -35,7 +35,7 @@
#include "llaudiosourcevo.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "llmutelist.h"
#include "llviewerparcelmgr.h"
@@ -148,7 +148,7 @@ void LLAudioSourceVO::update()
updateGain();
if (mObjectp->isHUDAttachment())
{
- mPositionGlobal = gAgent.getCameraPositionGlobal();
+ mPositionGlobal = gAgentCamera.getCameraPositionGlobal();
}
else
{
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 1d75374930..c85c72837c 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -50,6 +50,7 @@
#include "llfloatergroups.h"
#include "llfloaterreg.h"
#include "llfloaterpay.h"
+#include "llfloaterworldmap.h"
#include "llinventorymodel.h" // for gInventory.findCategoryUUIDForType
#include "llimview.h" // for gIMMgr
#include "llmutelist.h"
@@ -112,13 +113,13 @@ void LLAvatarActions::removeFriendDialog(const LLUUID& id)
if (id.isNull())
return;
- std::vector<LLUUID> ids;
+ uuid_vec_t ids;
ids.push_back(id);
removeFriendsDialog(ids);
}
// static
-void LLAvatarActions::removeFriendsDialog(const std::vector<LLUUID>& ids)
+void LLAvatarActions::removeFriendsDialog(const uuid_vec_t& ids)
{
if(ids.size() == 0)
return;
@@ -143,7 +144,7 @@ void LLAvatarActions::removeFriendsDialog(const std::vector<LLUUID>& ids)
}
LLSD payload;
- for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it)
+ for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
{
payload["ids"].append(*it);
}
@@ -160,13 +161,21 @@ void LLAvatarActions::offerTeleport(const LLUUID& invitee)
if (invitee.isNull())
return;
+ //waiting until Name Cache gets updated with corresponding avatar name
+ std::string just_to_request_name;
+ if (!gCacheName->getFullName(invitee, just_to_request_name))
+ {
+ gCacheName->get(invitee, FALSE, boost::bind((void (*)(const LLUUID&)) &LLAvatarActions::offerTeleport, invitee));
+ return;
+ }
+
LLDynamicArray<LLUUID> ids;
ids.push_back(invitee);
offerTeleport(ids);
}
// static
-void LLAvatarActions::offerTeleport(const std::vector<LLUUID>& ids)
+void LLAvatarActions::offerTeleport(const uuid_vec_t& ids)
{
if (ids.size() == 0)
return;
@@ -227,7 +236,7 @@ void LLAvatarActions::startCall(const LLUUID& id)
}
// static
-void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids)
+void LLAvatarActions::startAdhocCall(const uuid_vec_t& ids)
{
if (ids.size() == 0)
{
@@ -236,7 +245,7 @@ void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids)
// convert vector into LLDynamicArray for addSession
LLDynamicArray<LLUUID> id_array;
- for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it)
+ for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
{
id_array.push_back(*it);
}
@@ -277,11 +286,11 @@ bool LLAvatarActions::canCall()
}
// static
-void LLAvatarActions::startConference(const std::vector<LLUUID>& ids)
+void LLAvatarActions::startConference(const uuid_vec_t& ids)
{
// *HACK: Copy into dynamic array
LLDynamicArray<LLUUID> id_array;
- for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it)
+ for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
{
id_array.push_back(*it);
}
@@ -317,6 +326,20 @@ void LLAvatarActions::showProfile(const LLUUID& id)
}
// static
+void LLAvatarActions::showOnMap(const LLUUID& id)
+{
+ std::string name;
+ if (!gCacheName->getFullName(id, name))
+ {
+ gCacheName->get(id, FALSE, boost::bind(&LLAvatarActions::showOnMap, id));
+ return;
+ }
+
+ gFloaterWorldMap->trackAvatar(id, name);
+ LLFloaterReg::showInstance("world_map");
+}
+
+// static
void LLAvatarActions::pay(const LLUUID& id)
{
LLNotification::Params params("BusyModePay");
@@ -419,6 +442,20 @@ void LLAvatarActions::toggleBlock(const LLUUID& id)
LLMuteList::getInstance()->add(mute);
}
}
+// static
+bool LLAvatarActions::canOfferTeleport(const LLUUID& id)
+{
+ // First use LLAvatarTracker::isBuddy()
+ // If LLAvatarTracker::instance().isBuddyOnline function only is used
+ // then for avatars that are online and not a friend it will return false.
+ // But we should give an ability to offer a teleport for such avatars.
+ if(LLAvatarTracker::instance().isBuddy(id))
+ {
+ return LLAvatarTracker::instance().isBuddyOnline(id);
+ }
+
+ return true;
+}
void LLAvatarActions::inviteToGroup(const LLUUID& id)
{
@@ -484,7 +521,7 @@ bool LLAvatarActions::handlePay(const LLSD& notification, const LLSD& response,
// static
void LLAvatarActions::callback_invite_to_group(LLUUID group_id, LLUUID id)
{
- std::vector<LLUUID> agent_ids;
+ uuid_vec_t agent_ids;
agent_ids.push_back(id);
LLFloaterGroupInvite::showForGroup(group_id, &agent_ids);
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 16a58718a2..9d8b4b4e23 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -60,13 +60,13 @@ public:
* Show a friend removal dialog.
*/
static void removeFriendDialog(const LLUUID& id);
- static void removeFriendsDialog(const std::vector<LLUUID>& ids);
+ static void removeFriendsDialog(const uuid_vec_t& ids);
/**
* Show teleport offer dialog.
*/
static void offerTeleport(const LLUUID& invitee);
- static void offerTeleport(const std::vector<LLUUID>& ids);
+ static void offerTeleport(const uuid_vec_t& ids);
/**
* Start instant messaging session.
@@ -86,12 +86,12 @@ public:
/**
* Start an ad-hoc conference voice call with multiple users
*/
- static void startAdhocCall(const std::vector<LLUUID>& ids);
+ static void startAdhocCall(const uuid_vec_t& ids);
/**
* Start conference chat with the given avatars.
*/
- static void startConference(const std::vector<LLUUID>& ids);
+ static void startConference(const uuid_vec_t& ids);
/**
* Show avatar profile.
@@ -99,6 +99,11 @@ public:
static void showProfile(const LLUUID& id);
/**
+ * Show avatar on world map.
+ */
+ static void showOnMap(const LLUUID& id);
+
+ /**
* Give money to the avatar.
*/
static void pay(const LLUUID& id);
@@ -166,6 +171,12 @@ public:
*/
static void csr(const LLUUID& id, std::string name);
+ /**
+ * Checks whether can offer teleport to the avatar
+ * Can't offer only for offline friends
+ */
+ static bool canOfferTeleport(const LLUUID& id);
+
private:
static bool callbackAddFriend(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 6784e6693b..407c5b6153 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -39,6 +39,7 @@
#include "llcallingcard.h" // for LLAvatarTracker
#include "llcachename.h"
#include "llrecentpeople.h"
+#include "lluuid.h"
#include "llvoiceclient.h"
#include "llviewercontrol.h" // for gSavedSettings
@@ -53,7 +54,7 @@ static const unsigned ADD_LIMIT = 50;
bool LLAvatarList::contains(const LLUUID& id)
{
- const uuid_vector_t& ids = getIDs();
+ const uuid_vec_t& ids = getIDs();
return std::find(ids.begin(), ids.end(), id) != ids.end();
}
@@ -183,6 +184,15 @@ void LLAvatarList::sortByName()
sort();
}
+void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/)
+{
+ mDirty = val;
+ if(mDirty && force_refresh)
+ {
+ refresh();
+ }
+}
+
//////////////////////////////////////////////////////////////////////////
// PROTECTED SECTION
//////////////////////////////////////////////////////////////////////////
@@ -195,17 +205,17 @@ void LLAvatarList::refresh()
bool have_filter = !mNameFilter.empty();
// Save selection.
- std::vector<LLUUID> selected_ids;
+ uuid_vec_t selected_ids;
getSelectedUUIDs(selected_ids);
LLUUID current_id = getSelectedUUID();
// Determine what to add and what to remove.
- std::vector<LLUUID> added, removed;
+ uuid_vec_t added, removed;
LLAvatarList::computeDifference(getIDs(), added, removed);
// Handle added items.
unsigned nadded = 0;
- for (std::vector<LLUUID>::const_iterator it=added.begin(); it != added.end(); it++)
+ for (uuid_vec_t::const_iterator it=added.begin(); it != added.end(); it++)
{
std::string name;
const LLUUID& buddy_id = *it;
@@ -227,7 +237,7 @@ void LLAvatarList::refresh()
}
// Handle removed items.
- for (std::vector<LLUUID>::const_iterator it=removed.begin(); it != removed.end(); it++)
+ for (uuid_vec_t::const_iterator it=removed.begin(); it != removed.end(); it++)
{
removeItemByUUID(*it);
modified = true;
@@ -294,9 +304,9 @@ void LLAvatarList::refresh()
bool LLAvatarList::filterHasMatches()
{
- uuid_vector_t values = getIDs();
+ uuid_vec_t values = getIDs();
- for (uuid_vector_t::const_iterator it=values.begin(); it != values.end(); it++)
+ for (uuid_vec_t::const_iterator it=values.begin(); it != values.end(); it++)
{
std::string name;
const LLUUID& buddy_id = *it;
@@ -325,11 +335,22 @@ boost::signals2::connection LLAvatarList::setItemDoubleClickCallback(const mouse
return mItemDoubleClickSignal.connect(cb);
}
+//virtual
+S32 LLAvatarList::notifyParent(const LLSD& info)
+{
+ if (info.has("sort") && &NAME_COMPARATOR == mItemComparator)
+ {
+ sort();
+ return 1;
+ }
+ return LLFlatListView::notifyParent(info);
+}
+
void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos)
{
LLAvatarListItem* item = new LLAvatarListItem();
item->setName(name);
- item->setAvatarId(id, mIgnoreOnlineStatus);
+ item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus);
item->setOnline(mIgnoreOnlineStatus ? true : is_online);
item->showLastInteractionTime(mShowLastInteractionTime);
@@ -349,7 +370,7 @@ BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)
BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask);
if ( mContextMenu )
{
- std::vector<LLUUID> selected_uuids;
+ uuid_vec_t selected_uuids;
getSelectedUUIDs(selected_uuids);
mContextMenu->show(this, selected_uuids, x, y);
}
@@ -357,12 +378,12 @@ BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)
}
void LLAvatarList::computeDifference(
- const std::vector<LLUUID>& vnew_unsorted,
- std::vector<LLUUID>& vadded,
- std::vector<LLUUID>& vremoved)
+ const uuid_vec_t& vnew_unsorted,
+ uuid_vec_t& vadded,
+ uuid_vec_t& vremoved)
{
- std::vector<LLUUID> vcur;
- std::vector<LLUUID> vnew = vnew_unsorted;
+ uuid_vec_t vcur;
+ uuid_vec_t vnew = vnew_unsorted;
// Convert LLSDs to LLUUIDs.
{
@@ -376,7 +397,7 @@ void LLAvatarList::computeDifference(
std::sort(vcur.begin(), vcur.end());
std::sort(vnew.begin(), vnew.end());
- std::vector<LLUUID>::iterator it;
+ uuid_vec_t::iterator it;
size_t maxsize = llmax(vcur.size(), vnew.size());
vadded.resize(maxsize);
vremoved.resize(maxsize);
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index aeed4fee08..0203617867 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -53,8 +53,6 @@ class LLAvatarList : public LLFlatListView
{
LOG_CLASS(LLAvatarList);
public:
- typedef std::vector<LLUUID> uuid_vector_t;
-
struct Params : public LLInitParam::Block<Params, LLFlatListView::Params>
{
Optional<bool> ignore_online_status, // show all items as online
@@ -73,11 +71,13 @@ public:
virtual void clear();
void setNameFilter(const std::string& filter);
- void setDirty(bool val = true) { mDirty = val; }
- uuid_vector_t& getIDs() { return mIDs; }
+ void setDirty(bool val = true, bool force_refresh = false);
+ uuid_vec_t& getIDs() { return mIDs; }
bool contains(const LLUUID& id);
void setContextMenu(LLAvatarListItem::ContextMenu* menu) { mContextMenu = menu; }
+ void setSessionID(const LLUUID& session_id) { mSessionID = session_id; }
+ const LLUUID& getSessionID() { return mSessionID; }
void toggleIcons();
void setSpeakingIndicatorsVisible(bool visible);
@@ -94,14 +94,16 @@ public:
boost::signals2::connection setItemDoubleClickCallback(const mouse_signal_t::slot_type& cb);
+ virtual S32 notifyParent(const LLSD& info);
+
protected:
void refresh();
void addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos = ADD_BOTTOM);
void computeDifference(
- const std::vector<LLUUID>& vnew,
- std::vector<LLUUID>& vadded,
- std::vector<LLUUID>& vremoved);
+ const uuid_vec_t& vnew,
+ uuid_vec_t& vadded,
+ uuid_vec_t& vremoved);
void updateLastInteractionTimes();
void onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask);
@@ -118,7 +120,8 @@ private:
LLTimer* mLITUpdateTimer; // last interaction time update timer
std::string mIconParamName;
std::string mNameFilter;
- uuid_vector_t mIDs;
+ uuid_vec_t mIDs;
+ LLUUID mSessionID;
LLAvatarListItem::ContextMenu* mContextMenu;
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 5011b191f4..44f88cce29 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -119,8 +119,9 @@ S32 LLAvatarListItem::notifyParent(const LLSD& info)
if (info.has("visibility_changed"))
{
updateChildren();
+ return 1;
}
- return 0;
+ return LLPanel::notifyParent(info);
}
void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask)
@@ -211,14 +212,14 @@ void LLAvatarListItem::setState(EItemState item_style)
mAvatarIcon->setColor(item_icon_color_map[item_style]);
}
-void LLAvatarListItem::setAvatarId(const LLUUID& id, bool ignore_status_changes)
+void LLAvatarListItem::setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes)
{
if (mAvatarId.notNull())
LLAvatarTracker::instance().removeParticularFriendObserver(mAvatarId, this);
mAvatarId = id;
mAvatarIcon->setValue(id);
- mSpeakingIndicator->setSpeakerId(id);
+ mSpeakingIndicator->setSpeakerId(id, session_id);
// We'll be notified on avatar online status changes
if (!ignore_status_changes && mAvatarId.notNull())
@@ -334,6 +335,9 @@ void LLAvatarListItem::onNameCache(const std::string& first_name, const std::str
{
std::string name = first_name + " " + last_name;
setName(name);
+
+ //requesting the list to resort
+ notifyParent(LLSD().with("sort", LLSD()));
}
// Convert given number of seconds to a string like "23 minutes", "15 hours" or "3 years",
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 426d80e0a8..2db6484a30 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -70,7 +70,7 @@ public:
class ContextMenu
{
public:
- virtual void show(LLView* spawning_view, const std::vector<LLUUID>& selected_uuids, S32 x, S32 y) = 0;
+ virtual void show(LLView* spawning_view, const uuid_vec_t& selected_uuids, S32 x, S32 y) = 0;
};
/**
@@ -100,7 +100,7 @@ public:
void setName(const std::string& name);
void setHighlight(const std::string& highlight);
void setState(EItemState item_style);
- void setAvatarId(const LLUUID& id, bool ignore_status_changes = false);
+ void setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes = false);
void setLastInteractionTime(U32 secs_since);
//Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly
void setShowProfileBtn(bool show);
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 24b8ef3320..41bee540fc 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -35,7 +35,7 @@
#define LLBOTTOMTRAY_CPP
#include "llbottomtray.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "llchiclet.h"
#include "llfloaterreg.h"
#include "llflyoutbutton.h"
@@ -72,6 +72,17 @@ namespace
return minimal_width;
}
+ S32 get_panel_max_width(LLLayoutStack* stack, LLPanel* panel)
+ {
+ S32 max_width = 0;
+ llassert(stack);
+ if ( stack && panel && panel->getVisible() )
+ {
+ stack->getPanelMaxSize(panel->getName(), &max_width, NULL);
+ }
+ return max_width;
+ }
+
S32 get_curr_width(LLUICtrl* ctrl)
{
S32 cur_width = 0;
@@ -114,7 +125,7 @@ public:
void onFocusLost()
{
- if (gAgent.cameraMouselook())
+ if (gAgentCamera.cameraMouselook())
{
LLBottomTray::getInstance()->setVisible(FALSE);
}
@@ -149,10 +160,6 @@ LLBottomTray::LLBottomTray(const LLSD&)
LLUICtrlFactory::getInstance()->buildPanel(this,"panel_bottomtray.xml");
- mChicletPanel = getChild<LLChicletPanel>("chiclet_list");
-
- mChicletPanel->setChicletClickedCallback(boost::bind(&LLBottomTray::onChicletClick,this,_1));
-
LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraPresets, _2));
//this is to fix a crash that occurs because LLBottomTray is a singleton
@@ -160,8 +167,6 @@ LLBottomTray::LLBottomTray(const LLSD&)
//destroyed LLBottomTray requires some subsystems that are long gone
//LLUI::getRootView()->addChild(this);
- initStateProcessedObjectMap();
-
// Necessary for focus movement among child controls
setFocusRoot(TRUE);
@@ -360,6 +365,23 @@ void LLBottomTray::setVisible(BOOL visible)
gFloaterView->setSnapOffsetBottom(0);
}
+S32 LLBottomTray::notifyParent(const LLSD& info)
+{
+ if(info.has("well_empty")) // implementation of EXT-3397
+ {
+ const std::string chiclet_name = info["well_name"];
+
+ // only "im_well" or "notification_well" names are expected.
+ // They are set in panel_bottomtray.xml in <chiclet_im_well> & <chiclet_notification>
+ llassert("im_well" == chiclet_name || "notification_well" == chiclet_name);
+
+ BOOL should_be_visible = !info["well_empty"];
+ showWellButton("im_well" == chiclet_name ? RS_IM_WELL : RS_NOTIFICATION_WELL, should_be_visible);
+ return 1;
+ }
+ return LLPanel::notifyParent(info);
+}
+
void LLBottomTray::showBottomTrayContextMenu(S32 x, S32 y, MASK mask)
{
// We should show BottomTrayContextMenu in last turn
@@ -476,6 +498,15 @@ BOOL LLBottomTray::postBuild()
mNearbyChatBar->getChatBox()->setContextMenu(NULL);
+ mChicletPanel = getChild<LLChicletPanel>("chiclet_list");
+ mChicletPanel->setChicletClickedCallback(boost::bind(&LLBottomTray::onChicletClick,this,_1));
+
+ initStateProcessedObjectMap();
+
+ // update wells visibility:
+ showWellButton(RS_IM_WELL, !LLIMWellWindow::getInstance()->isWindowEmpty());
+ showWellButton(RS_NOTIFICATION_WELL, !LLNotificationWellWindow::getInstance()->isWindowEmpty());
+
return TRUE;
}
@@ -672,7 +703,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
}
const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
- const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth();
+ const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);
if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width)
{
// we have some space to decrease chatbar panel
@@ -745,11 +776,11 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
if (delta_width <= 0) return;
const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
- const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
+ static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
- const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth();
- const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth();
+ static const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);
+ static const S32 chatbar_panel_max_width = get_panel_max_width(mToolbarStack, mNearbyChatBar);
const S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width;
const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width;
@@ -844,6 +875,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* available_width)
{
lldebugs << "Trying to show object type: " << shown_object_type << llendl;
+ llassert(mStateProcessedObjectMap[shown_object_type] != NULL);
LLPanel* panel = mStateProcessedObjectMap[shown_object_type];
if (NULL == panel)
@@ -875,6 +907,7 @@ bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* availa
void LLBottomTray::processHideButton(EResizeState processed_object_type, S32* required_width, S32* buttons_freed_width)
{
lldebugs << "Trying to hide object type: " << processed_object_type << llendl;
+ llassert(mStateProcessedObjectMap[processed_object_type] != NULL);
LLPanel* panel = mStateProcessedObjectMap[processed_object_type];
if (NULL == panel)
@@ -952,6 +985,7 @@ void LLBottomTray::processShrinkButtons(S32* required_width, S32* buttons_freed_
void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32* required_width)
{
+ llassert(mStateProcessedObjectMap[processed_object_type] != NULL);
LLPanel* panel = mStateProcessedObjectMap[processed_object_type];
if (NULL == panel)
{
@@ -1035,6 +1069,7 @@ void LLBottomTray::processExtendButtons(S32* available_width)
void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32* available_width)
{
+ llassert(mStateProcessedObjectMap[processed_object_type] != NULL);
LLPanel* panel = mStateProcessedObjectMap[processed_object_type];
if (NULL == panel)
{
@@ -1115,6 +1150,7 @@ void LLBottomTray::initStateProcessedObjectMap()
void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool visible)
{
+ llassert(mStateProcessedObjectMap[shown_object_type] != NULL);
LLPanel* panel = mStateProcessedObjectMap[shown_object_type];
if (NULL == panel)
{
@@ -1186,7 +1222,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
{
// Calculate the possible shrunk width as difference between current and minimal widths
const S32 chatbar_shrunk_width =
- mNearbyChatBar->getRect().getWidth() - mNearbyChatBar->getMinWidth();
+ mNearbyChatBar->getRect().getWidth() - get_panel_min_width(mToolbarStack, mNearbyChatBar);
const S32 sum_of_min_widths =
get_panel_min_width(mToolbarStack, mStateProcessedObjectMap[RS_BUTTON_CAMERA]) +
@@ -1253,4 +1289,29 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
return is_set;
}
+void LLBottomTray::showWellButton(EResizeState object_type, bool visible)
+{
+ llassert( ((RS_NOTIFICATION_WELL | RS_IM_WELL) & object_type) == object_type );
+
+ const std::string panel_name = RS_IM_WELL == object_type ? "im_well_panel" : "notification_well_panel";
+
+ LLView * panel = getChild<LLView>(panel_name);
+
+ // if necessary visibility is set nothing to do here
+ if (panel->getVisible() == (BOOL)visible) return;
+
+ S32 panel_width = panel->getRect().getWidth();
+ panel->setVisible(visible);
+
+ if (visible)
+ {
+ // method assumes that input param is a negative value
+ processWidthDecreased(-panel_width);
+ }
+ else
+ {
+ processWidthIncreased(panel_width);
+ }
+}
+
//EOF
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 18c14e5e19..3c45777645 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -83,6 +83,8 @@ public:
virtual void setVisible(BOOL visible);
+ /*virtual*/ S32 notifyParent(const LLSD& info);
+
// Implements LLVoiceClientStatusObserver::onChange() to enable the speak
// button when voice is available
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
@@ -116,6 +118,8 @@ private:
, RS_BUTTON_MOVEMENT = 0x0010
, RS_BUTTON_GESTURES = 0x0020
, RS_BUTTON_SPEAK = 0x0040
+ , RS_IM_WELL = 0x0080
+ , RS_NOTIFICATION_WELL = 0x0100
/**
* Specifies buttons which can be hidden when bottom tray is shrunk.
@@ -184,6 +188,15 @@ private:
*/
bool setVisibleAndFitWidths(EResizeState object_type, bool visible);
+ /**
+ * Shows/hides panel with specified well button (IM or Notification)
+ *
+ * @param[in] object_type - type of well button to be processed.
+ * Must be one of RS_IM_WELL or RS_NOTIFICATION_WELL.
+ * @param[in] visible - flag specified whether button should be shown or hidden.
+ */
+ void showWellButton(EResizeState object_type, bool visible);
+
MASK mResizeState;
typedef std::map<EResizeState, LLPanel*> state_object_map_t;
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index 52739184c0..6dfa8397a0 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -55,7 +55,7 @@
#include "llvoiceclient.h" // for Voice font list types
#include "llviewerparcelmgr.h"
-static void get_voice_participants_uuids(std::vector<LLUUID>& speakers_uuids);
+static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids);
void reshape_floater(LLCallFloater* floater, S32 delta_height);
class LLNonAvatarCaller : public LLAvatarListItem
@@ -117,6 +117,9 @@ LLCallFloater::LLCallFloater(const LLSD& key)
mFactoryMap["non_avatar_caller"] = LLCallbackMap(create_non_avatar_caller, NULL);
LLVoiceClient::getInstance()->addObserver(this);
LLTransientFloaterMgr::getInstance()->addControlView(this);
+
+ // force docked state since this floater doesn't save it between recreations
+ setDocked(true);
}
LLCallFloater::~LLCallFloater()
@@ -130,9 +133,7 @@ LLCallFloater::~LLCallFloater()
mAvatarListRefreshConnection.disconnect();
mVoiceChannelStateChangeConnection.disconnect();
- // Don't use LLVoiceClient::getInstance() here
- // singleton MAY have already been destroyed.
- if(gVoiceClient)
+ if(LLVoiceClient::instanceExists())
{
gVoiceClient->removeObserver(this);
}
@@ -217,9 +218,9 @@ void LLCallFloater::onChange()
updateParticipantsVoiceState();
// Add newly joined participants.
- std::vector<LLUUID> speakers_uuids;
+ uuid_vec_t speakers_uuids;
get_voice_participants_uuids(speakers_uuids);
- for (std::vector<LLUUID>::const_iterator it = speakers_uuids.begin(); it != speakers_uuids.end(); it++)
+ for (uuid_vec_t::const_iterator it = speakers_uuids.begin(); it != speakers_uuids.end(); it++)
{
mParticipants->addAvatarIDExceptAgent(*it);
}
@@ -504,7 +505,7 @@ void LLCallFloater::updateAgentModeratorState()
mAgentPanel->childSetValue("user_text", name);
}
-static void get_voice_participants_uuids(std::vector<LLUUID>& speakers_uuids)
+static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids)
{
// Get a list of participants from VoiceClient
LLVoiceClient::participantMap *voice_map = gVoiceClient->getParticipantList();
@@ -529,7 +530,7 @@ void LLCallFloater::initParticipantsVoiceState()
it_end = items.end();
- std::vector<LLUUID> speakers_uuids;
+ uuid_vec_t speakers_uuids;
get_voice_participants_uuids(speakers_uuids);
for(; it != it_end; ++it)
@@ -540,7 +541,7 @@ void LLCallFloater::initParticipantsVoiceState()
LLUUID speaker_id = item->getAvatarId();
- std::vector<LLUUID>::const_iterator speaker_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), speaker_id);
+ uuid_vec_t::const_iterator speaker_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), speaker_id);
// If an avatarID assigned to a panel is found in a speakers list
// obtained from VoiceClient we assign the JOINED status to the owner
@@ -569,10 +570,10 @@ void LLCallFloater::initParticipantsVoiceState()
void LLCallFloater::updateParticipantsVoiceState()
{
- std::vector<LLUUID> speakers_list;
+ uuid_vec_t speakers_list;
// Get a list of participants from VoiceClient
- std::vector<LLUUID> speakers_uuids;
+ uuid_vec_t speakers_uuids;
get_voice_participants_uuids(speakers_uuids);
// Updating the status for each participant already in list.
@@ -590,7 +591,7 @@ void LLCallFloater::updateParticipantsVoiceState()
const LLUUID participant_id = item->getAvatarId();
bool found = false;
- std::vector<LLUUID>::iterator speakers_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), participant_id);
+ uuid_vec_t::iterator speakers_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), participant_id);
lldebugs << "processing speaker: " << item->getAvatarName() << ", " << item->getAvatarId() << llendl;
@@ -700,8 +701,8 @@ void LLCallFloater::setVoiceRemoveTimer(const LLUUID& voice_speaker_id)
bool LLCallFloater::removeVoiceLeftParticipant(const LLUUID& voice_speaker_id)
{
- LLAvatarList::uuid_vector_t& speaker_uuids = mAvatarList->getIDs();
- LLAvatarList::uuid_vector_t::iterator pos = std::find(speaker_uuids.begin(), speaker_uuids.end(), voice_speaker_id);
+ uuid_vec_t& speaker_uuids = mAvatarList->getIDs();
+ uuid_vec_t::iterator pos = std::find(speaker_uuids.begin(), speaker_uuids.end(), voice_speaker_id);
if(pos != speaker_uuids.end())
{
speaker_uuids.erase(pos);
@@ -730,7 +731,7 @@ bool LLCallFloater::validateSpeaker(const LLUUID& speaker_id)
case VC_LOCAL_CHAT:
{
// A nearby chat speaker is considered valid it it's known to LLVoiceClient (i.e. has enabled voice).
- std::vector<LLUUID> speakers;
+ uuid_vec_t speakers;
get_voice_participants_uuids(speakers);
is_valid = std::find(speakers.begin(), speakers.end(), speaker_id) != speakers.end();
}
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
index b32a955038..67d5d21b2a 100644
--- a/indra/newview/llchatbar.cpp
+++ b/indra/newview/llchatbar.cpp
@@ -107,7 +107,7 @@ LLChatBar::LLChatBar()
LLChatBar::~LLChatBar()
{
- LLGestureManager::instance().removeObserver(mObserver);
+ LLGestureMgr::instance().removeObserver(mObserver);
delete mObserver;
mObserver = NULL;
// LLView destructor cleans up children
@@ -209,8 +209,8 @@ void LLChatBar::refreshGestures()
// collect list of unique gestures
std::map <std::string, BOOL> unique;
- LLGestureManager::item_map_t::const_iterator it;
- const LLGestureManager::item_map_t& active_gestures = LLGestureManager::instance().getActiveGestures();
+ LLGestureMgr::item_map_t::const_iterator it;
+ const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures();
for (it = active_gestures.begin(); it != active_gestures.end(); ++it)
{
LLMultiGesture* gesture = (*it).second;
@@ -296,7 +296,7 @@ void LLChatBar::setGestureCombo(LLComboBox* combo)
// now register observer since we have a place to put the results
mObserver = new LLChatBarGestureObserver(this);
- LLGestureManager::instance().addObserver(mObserver);
+ LLGestureMgr::instance().addObserver(mObserver);
// refresh list from current active gestures
refreshGestures();
@@ -377,7 +377,7 @@ void LLChatBar::sendChat( EChatType type )
if (0 == channel)
{
// discard returned "found" boolean
- LLGestureManager::instance().triggerAndReviseString(utf8text, &utf8_revised_text);
+ LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text);
}
else
{
@@ -516,7 +516,7 @@ void LLChatBar::onInputEditorKeystroke( LLLineEditor* caller, void* userdata )
std::string utf8_trigger = wstring_to_utf8str(raw_text);
std::string utf8_out_str(utf8_trigger);
- if (LLGestureManager::instance().matchPrefix(utf8_trigger, &utf8_out_str))
+ if (LLGestureMgr::instance().matchPrefix(utf8_trigger, &utf8_out_str))
{
if (self->mInputEditor)
{
@@ -653,7 +653,7 @@ void LLChatBar::onCommitGesture(LLUICtrl* ctrl)
// substitution and logging.
std::string text(trigger);
std::string revised_text;
- LLGestureManager::instance().triggerAndReviseString(text, &revised_text);
+ LLGestureMgr::instance().triggerAndReviseString(text, &revised_text);
revised_text = utf8str_trim(revised_text);
if (!revised_text.empty())
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 6180b880b5..68c31d87fa 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -93,7 +93,7 @@ public:
payload["object_id"] = object_id;
payload["owner_id"] = query_map["owner"];
payload["name"] = query_map["name"];
- payload["slurl"] = query_map["slurl"];
+ payload["slurl"] = LLWeb::escapeURL(query_map["slurl"]);
payload["group_owned"] = query_map["groupowned"];
LLFloaterReg::showInstance("inspect_remote_object", payload);
return true;
@@ -116,34 +116,6 @@ public:
return LLPanel::handleMouseUp(x,y,mask);
}
- //*TODO remake it using mouse enter/leave and static LLHandle<LLIconCtrl> to add/remove as a child
- BOOL handleToolTip(S32 x, S32 y, MASK mask)
- {
- LLTextBase* name = getChild<LLTextBase>("user_name");
- if (name && name->parentPointInView(x, y) && mAvatarID.notNull() && mFrom.size() && SYSTEM_FROM != mFrom)
- {
-
- // Spawn at right side of the name textbox.
- LLRect sticky_rect = name->calcScreenRect();
- S32 icon_x = llmin(sticky_rect.mLeft + name->getTextBoundingRect().getWidth() + 7, sticky_rect.mRight - 3);
-
- LLToolTip::Params params;
- params.background_visible(false);
- params.click_callback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, 0, 0, 0));
- params.delay_time(0.0f); // spawn instantly on hover
- params.image(LLUI::getUIImage("Info_Small"));
- params.message("");
- params.padding(0);
- params.pos(LLCoordGL(icon_x, sticky_rect.mTop - 2));
- params.sticky_rect(sticky_rect);
-
- LLToolTipMgr::getInstance()->show(params);
- return TRUE;
- }
-
- return LLPanel::handleToolTip(x, y, mask);
- }
-
void onObjectIconContextMenuItemClicked(const LLSD& userdata)
{
std::string level = userdata.asString();
@@ -198,7 +170,10 @@ public:
menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_object_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
mPopupMenuHandleObject = menu->getHandle();
- setDoubleClickCallback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, _2, _3, _4));
+ setDoubleClickCallback(boost::bind(&LLChatHistoryHeader::showInspector, this));
+
+ setMouseEnterCallback(boost::bind(&LLChatHistoryHeader::showInfoCtrl, this));
+ setMouseLeaveCallback(boost::bind(&LLChatHistoryHeader::hideInfoCtrl, this));
return LLPanel::postBuild();
}
@@ -232,8 +207,10 @@ public:
return LLPanel::handleRightMouseDown(x,y,mask);
}
- void onHeaderPanelClick(S32 x, S32 y, MASK mask)
+ void showInspector()
{
+ if (mAvatarID.isNull() && CHAT_SOURCE_SYSTEM != mSourceType) return;
+
if (mSourceType == CHAT_SOURCE_OBJECT)
{
LLFloaterReg::showInstance("inspect_object", LLSD().with("object_id", mAvatarID));
@@ -245,6 +222,17 @@ public:
//if chat source is system, you may add "else" here to define behaviour.
}
+ static void onClickInfoCtrl(LLUICtrl* info_ctrl)
+ {
+ if (!info_ctrl) return;
+
+ LLChatHistoryHeader* header = dynamic_cast<LLChatHistoryHeader*>(info_ctrl->getParent());
+ if (!header) return;
+
+ header->showInspector();
+ }
+
+
const LLUUID& getAvatarId () const { return mAvatarID;}
void setup(const LLChat& chat,const LLStyle::Params& style_params)
@@ -293,6 +281,9 @@ public:
break;
case CHAT_SOURCE_SYSTEM:
icon->setValue(LLSD("SL_Logo"));
+ break;
+ case CHAT_SOURCE_UNKNOWN:
+ icon->setValue(LLSD("Unknown_Icon"));
}
}
@@ -339,9 +330,9 @@ protected:
{
if(mSourceType == CHAT_SOURCE_SYSTEM)
showSystemContextMenu(x,y);
- if(mSourceType == CHAT_SOURCE_AGENT)
+ if(mAvatarID.notNull() && mSourceType == CHAT_SOURCE_AGENT)
showAvatarContextMenu(x,y);
- if(mSourceType == CHAT_SOURCE_OBJECT && SYSTEM_FROM != mFrom)
+ if(mAvatarID.notNull() && mSourceType == CHAT_SOURCE_OBJECT && SYSTEM_FROM != mFrom)
showObjectContextMenu(x,y);
}
@@ -385,6 +376,33 @@ protected:
}
}
+ void showInfoCtrl()
+ {
+ if (mAvatarID.isNull() || mFrom.empty() || SYSTEM_FROM == mFrom) return;
+
+ if (!sInfoCtrl)
+ {
+ sInfoCtrl = LLUICtrlFactory::createFromFile<LLUICtrl>("inspector_info_ctrl.xml", NULL, LLPanel::child_registry_t::instance());
+ sInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, sInfoCtrl));
+ }
+
+ LLTextBase* name = getChild<LLTextBase>("user_name");
+ LLRect sticky_rect = name->getRect();
+ S32 icon_x = llmin(sticky_rect.mLeft + name->getTextBoundingRect().getWidth() + 7, sticky_rect.mRight - 3);
+ sInfoCtrl->setOrigin(icon_x, sticky_rect.getCenterY() - sInfoCtrl->getRect().getHeight() / 2 ) ;
+ addChild(sInfoCtrl);
+ }
+
+ void hideInfoCtrl()
+ {
+ if (!sInfoCtrl) return;
+
+ if (sInfoCtrl->getParent() == this)
+ {
+ removeChild(sInfoCtrl);
+ }
+ }
+
private:
void setTimeField(const LLChat& chat)
{
@@ -413,6 +431,8 @@ protected:
LLHandle<LLView> mPopupMenuHandleAvatar;
LLHandle<LLView> mPopupMenuHandleObject;
+ static LLUICtrl* sInfoCtrl;
+
LLUUID mAvatarID;
EChatSourceType mSourceType;
std::string mFrom;
@@ -421,6 +441,7 @@ protected:
S32 mMinUserNameWidth;
};
+LLUICtrl* LLChatHistoryHeader::sInfoCtrl = NULL;
LLChatHistory::LLChatHistory(const LLChatHistory::Params& p)
: LLUICtrl(p),
@@ -470,7 +491,7 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
panel_p.background_visible = false;
panel_p.has_border = false;
panel_p.mouse_opaque = false;
- stackp->addPanel(LLUICtrlFactory::create<LLPanel>(panel_p), 0, 30, true, false, LLLayoutStack::ANIMATE);
+ stackp->addPanel(LLUICtrlFactory::create<LLPanel>(panel_p), 0, 30, S32_MAX, S32_MAX, true, false, LLLayoutStack::ANIMATE);
panel_p.name = "new_text_notice_holder";
LLRect new_text_notice_rect = getLocalRect();
@@ -488,7 +509,7 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
mMoreChatText = LLUICtrlFactory::create<LLTextBox>(text_p, mMoreChatPanel);
mMoreChatText->setClickedCallback(boost::bind(&LLChatHistory::onClickMoreText, this));
- stackp->addPanel(mMoreChatPanel, 0, 0, false, false, LLLayoutStack::ANIMATE);
+ stackp->addPanel(mMoreChatPanel, 0, 0, S32_MAX, S32_MAX, false, false, LLLayoutStack::ANIMATE);
}
@@ -611,12 +632,19 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
if (use_plain_text_chat_history)
{
- mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, style_params);
+ LLStyle::Params timestamp_style(style_params);
+ if (!message_from_log)
+ {
+ LLColor4 timestamp_color = LLUIColorTable::instance().getColor("ChatTimestampColor");
+ timestamp_style.color(timestamp_color);
+ timestamp_style.readonly_color(timestamp_color);
+ }
+ mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, timestamp_style);
if (utf8str_trim(chat.mFromName).size() != 0)
{
// Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text.
- if ( chat.mSourceType == CHAT_SOURCE_OBJECT )
+ if ( chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mFromID.notNull())
{
// for object IMs, create a secondlife:///app/objectim SLapp
std::string url = LLSLURL::buildCommand("objectim", chat.mFromID, "");
@@ -713,8 +741,8 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
LLNotificationPtr notification = LLNotificationsUtil::find(chat.mNotifId);
if (notification != NULL)
{
- LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(
- notification);
+ LLIMToastNotifyPanel* notify_box = new LLIMToastNotifyPanel(
+ notification, chat.mSessionID);
//we can't set follows in xml since it broke toasts behavior
notify_box->setFollowsLeft();
notify_box->setFollowsRight();
@@ -722,7 +750,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
ctrl_list_t ctrls = notify_box->getControlPanel()->getCtrlList();
S32 offset = 0;
- for (ctrl_list_t::iterator it = ctrls.begin(); it != ctrls.end(); it++)
+ // Children were added by addChild() which uses push_front to insert them into list,
+ // so to get buttons in correct order reverse iterator is used (EXT-5906)
+ for (ctrl_list_t::reverse_iterator it = ctrls.rbegin(); it != ctrls.rend(); it++)
{
LLButton * button = dynamic_cast<LLButton*> (*it);
if (button != NULL)
@@ -737,7 +767,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
button->getRect().mBottom));
button->setAutoResize(true);
button->autoResize();
- offset += 2 * HPAD + button->getRect().getWidth();
+ offset += HPAD + button->getRect().getWidth();
button->setFollowsNone();
}
}
@@ -796,7 +826,6 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
message = chat.mFromName + message;
}
-
mEditor->appendText(message, FALSE, style_params);
}
mEditor->blockUndo();
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index e164aa8fc4..81edb55f93 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -144,6 +144,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
std::string messageText = notification["message"].asString(); // UTF-8 line of text
std::string fromName = notification["from"].asString(); // agent or object name
mFromID = notification["from_id"].asUUID(); // agent id or object id
+ mFromName = fromName;
int sType = notification["source"].asInteger();
mSourceType = (EChatSourceType)sType;
diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h
index 4d730573d9..b28c9dbc4b 100644
--- a/indra/newview/llchatitemscontainerctrl.h
+++ b/indra/newview/llchatitemscontainerctrl.h
@@ -60,6 +60,7 @@ public:
static LLNearbyChatToastPanel* createInstance();
const LLUUID& getFromID() const { return mFromID;}
+ const std::string& getFromName() const { return mFromName; }
//void addText (const std::string& message , const LLStyle::Params& input_params = LLStyle::Params());
//void setMessage (const LLChat& msg);
@@ -84,9 +85,11 @@ public:
virtual void draw();
+ //*TODO REMOVE, why a dup of getFromID?
const LLUUID& messageID() const { return mFromID;}
private:
LLUUID mFromID; // agent id or object id
+ std::string mFromName;
EChatSourceType mSourceType;
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 8efa814a2e..e39384b7b2 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -229,6 +229,11 @@ void LLSysWellChiclet::setNewMessagesState(bool new_messages)
void LLSysWellChiclet::updateWidget(bool is_window_empty)
{
mButton->setEnabled(!is_window_empty);
+
+ LLSD params;
+ params["well_empty"] = is_window_empty;
+ params["well_name"] = getName();
+ notifyParent(params);
}
// virtual
BOOL LLSysWellChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
@@ -1137,7 +1142,7 @@ void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){
S32 unread = data["participant_unread"].asInteger();
LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
- if (im_floater && im_floater->getVisible())
+ if (im_floater && im_floater->getVisible() && im_floater->hasFocus())
{
unread = 0;
}
diff --git a/indra/newview/llclassifiedstatsresponder.cpp b/indra/newview/llclassifiedstatsresponder.cpp
index ecd1879090..95f17aa7ba 100644
--- a/indra/newview/llclassifiedstatsresponder.cpp
+++ b/indra/newview/llclassifiedstatsresponder.cpp
@@ -43,11 +43,12 @@
#include "llview.h"
#include "message.h"
-LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLHandle<LLView> classified_panel_handle, LLUUID classified_id)
-: mClassifiedPanelHandle(classified_panel_handle),
+LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLUUID classified_id)
+:
mClassifiedID(classified_id)
{
}
+
/*virtual*/
void LLClassifiedStatsResponder::result(const LLSD& content)
{
@@ -58,17 +59,12 @@ void LLClassifiedStatsResponder::result(const LLSD& content)
S32 search_map = content["search_map_clicks"].asInteger();
S32 search_profile = content["search_profile_clicks"].asInteger();
- LLPanelClassified* classified_panelp = (LLPanelClassified*)mClassifiedPanelHandle.get();
-
- if(classified_panelp)
- {
- classified_panelp->setClickThrough(mClassifiedID,
- teleport + search_teleport,
- map + search_map,
- profile + search_profile,
- true);
- }
-
+ LLPanelClassifiedInfo::setClickThrough(
+ mClassifiedID,
+ teleport + search_teleport,
+ map + search_map,
+ profile + search_profile,
+ true);
}
/*virtual*/
@@ -77,5 +73,3 @@ void LLClassifiedStatsResponder::error(U32 status, const std::string& reason)
llinfos << "LLClassifiedStatsResponder::error("
<< status << ": " << reason << ")" << llendl;
}
-
-
diff --git a/indra/newview/llclassifiedstatsresponder.h b/indra/newview/llclassifiedstatsresponder.h
index 9c52ed5ae1..4a74f7b129 100644
--- a/indra/newview/llclassifiedstatsresponder.h
+++ b/indra/newview/llclassifiedstatsresponder.h
@@ -40,7 +40,7 @@
class LLClassifiedStatsResponder : public LLHTTPClient::Responder
{
public:
- LLClassifiedStatsResponder(LLHandle<LLView> classified_panel_handle, LLUUID classified_id);
+ LLClassifiedStatsResponder(LLUUID classified_id);
//If we get back a normal response, handle it here
virtual void result(const LLSD& content);
//If we get back an error (not found, etc...), handle it here
@@ -48,7 +48,6 @@ public:
virtual void error(U32 status, const std::string& reason);
protected:
- LLHandle<LLView> mClassifiedPanelHandle;
LLUUID mClassifiedID;
};
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index a96981a108..feb8c540ef 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -114,7 +114,7 @@ BOOL LLFloaterScriptQueue::postBuild()
// worked on.
// NOT static, virtual!
void LLFloaterScriptQueue::inventoryChanged(LLViewerObject* viewer_object,
- InventoryObjectList* inv,
+ LLInventoryObject::object_list_t* inv,
S32,
void* q_id)
{
@@ -305,7 +305,7 @@ LLFloaterCompileQueue::~LLFloaterCompileQueue()
}
void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object,
- InventoryObjectList* inv)
+ LLInventoryObject::object_list_t* inv)
{
// find all of the lsl, leaving off duplicates. We'll remove
// all matching asset uuids on compilation success.
@@ -313,8 +313,8 @@ void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object,
typedef std::multimap<LLUUID, LLPointer<LLInventoryItem> > uuid_item_map;
uuid_item_map asset_item_map;
- InventoryObjectList::const_iterator it = inv->begin();
- InventoryObjectList::const_iterator end = inv->end();
+ LLInventoryObject::object_list_t::const_iterator it = inv->begin();
+ LLInventoryObject::object_list_t::const_iterator end = inv->end();
for ( ; it != end; ++it)
{
if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
@@ -625,14 +625,14 @@ LLFloaterResetQueue::~LLFloaterResetQueue()
}
void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv)
+ LLInventoryObject::object_list_t* inv)
{
// find all of the lsl, leaving off duplicates. We'll remove
// all matching asset uuids on compilation success.
LLDynamicArray<const char*> names;
- InventoryObjectList::const_iterator it = inv->begin();
- InventoryObjectList::const_iterator end = inv->end();
+ LLInventoryObject::object_list_t::const_iterator it = inv->begin();
+ LLInventoryObject::object_list_t::const_iterator end = inv->end();
for ( ; it != end; ++it)
{
if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
@@ -677,14 +677,14 @@ LLFloaterRunQueue::~LLFloaterRunQueue()
}
void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv)
+ LLInventoryObject::object_list_t* inv)
{
// find all of the lsl, leaving off duplicates. We'll remove
// all matching asset uuids on compilation success.
LLDynamicArray<const char*> names;
- InventoryObjectList::const_iterator it = inv->begin();
- InventoryObjectList::const_iterator end = inv->end();
+ LLInventoryObject::object_list_t::const_iterator it = inv->begin();
+ LLInventoryObject::object_list_t::const_iterator end = inv->end();
for ( ; it != end; ++it)
{
if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
@@ -732,14 +732,14 @@ LLFloaterNotRunQueue::~LLFloaterNotRunQueue()
}
void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv)
+ LLInventoryObject::object_list_t* inv)
{
// find all of the lsl, leaving off duplicates. We'll remove
// all matching asset uuids on compilation success.
LLDynamicArray<const char*> names;
- InventoryObjectList::const_iterator it = inv->begin();
- InventoryObjectList::const_iterator end = inv->end();
+ LLInventoryObject::object_list_t::const_iterator it = inv->begin();
+ LLInventoryObject::object_list_t::const_iterator end = inv->end();
for ( ; it != end; ++it)
{
if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h
index 2d061f5d8a..4fde2572af 100644
--- a/indra/newview/llcompilequeue.h
+++ b/indra/newview/llcompilequeue.h
@@ -76,13 +76,13 @@ protected:
// This is the callback method for the viewer object currently
// being worked on.
/*virtual*/ void inventoryChanged(LLViewerObject* obj,
- InventoryObjectList* inv,
+ LLInventoryObject::object_list_t* inv,
S32 serial_num,
void* queue);
// This is called by inventoryChanged
virtual void handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv) = 0;
+ LLInventoryObject::object_list_t* inv) = 0;
static void onCloseBtn(void* user_data);
@@ -145,7 +145,7 @@ protected:
// This is called by inventoryChanged
virtual void handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv);
+ LLInventoryObject::object_list_t* inv);
// This is the callback for when each script arrives
static void scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
@@ -192,7 +192,7 @@ protected:
// This is called by inventoryChanged
virtual void handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv);
+ LLInventoryObject::object_list_t* inv);
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -210,7 +210,7 @@ protected:
// This is called by inventoryChanged
virtual void handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv);
+ LLInventoryObject::object_list_t* inv);
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -228,7 +228,7 @@ protected:
// This is called by inventoryChanged
virtual void handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv);
+ LLInventoryObject::object_list_t* inv);
};
#endif // LL_LLCOMPILEQUEUE_H
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
index 169a963d0d..f113cc49d4 100644
--- a/indra/newview/lldebugview.cpp
+++ b/indra/newview/lldebugview.cpp
@@ -81,11 +81,13 @@ void LLDebugView::init()
r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f),
(S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f));
+
mFastTimerView = new LLFastTimerView(r);
mFastTimerView->setFollowsTop();
mFastTimerView->setFollowsLeft();
mFastTimerView->setVisible(FALSE); // start invisible
addChild(mFastTimerView);
+ mFastTimerView->setRect(rect);
r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f),
(S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f));
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 9fbc3408d7..38eda5bd2e 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -386,8 +386,6 @@ void LLDrawable::makeActive()
mParent->makeActive();
}
- gPipeline.setActive(this, TRUE);
-
//all child objects must also be active
llassert_always(mVObjp);
@@ -434,7 +432,6 @@ void LLDrawable::makeStatic(BOOL warning_enabled)
if (isState(ACTIVE))
{
clearState(ACTIVE);
- gPipeline.setActive(this, FALSE);
if (mParent.notNull() && mParent->isActive() && warning_enabled)
{
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index 95ddacb722..ef946ac49e 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -496,8 +496,8 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
params.mGroup->rebuildMesh();
}
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
- gPipeline.addTrianglesDrawn(params.mCount/3);
+ params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
}
if (params.mTextureMatrix && texture && params.mTexture.notNull())
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 7be6e82251..875c9ac6a9 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -251,8 +251,8 @@ void LLDrawPoolAlpha::renderAlphaHighlight(U32 mask)
params.mGroup->rebuildMesh();
}
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
- gPipeline.addTrianglesDrawn(params.mCount/3);
+ params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
}
}
}
@@ -381,8 +381,8 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
}
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
- gPipeline.addTrianglesDrawn(params.mCount/3);
+ params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
if (params.mTextureMatrix && params.mTexture.notNull())
{
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 03a8b108e2..d09d4a412f 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -560,8 +560,8 @@ void LLDrawPoolBump::renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL
params.mGroup->rebuildMesh();
}
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
- gPipeline.addTrianglesDrawn(params.mCount/3);
+ params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
}
}
@@ -1231,8 +1231,8 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
params.mGroup->rebuildMesh();
}
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
- gPipeline.addTrianglesDrawn(params.mCount/3);
+ params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
if (params.mTextureMatrix)
{
if (mShiny)
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index 5521fb05a8..1a5d55d793 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -115,7 +115,7 @@ void LLDrawPoolTree::render(S32 pass)
LLFace *face = *iter;
face->mVertexBuffer->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK);
face->mVertexBuffer->drawRange(LLRender::TRIANGLES, 0, face->mVertexBuffer->getRequestedVerts()-1, face->mVertexBuffer->getRequestedIndices(), 0);
- gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices()/3);
+ gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices());
}
}
}
@@ -237,7 +237,7 @@ void LLDrawPoolTree::renderForSelect()
face->mVertexBuffer->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK);
face->mVertexBuffer->drawRange(LLRender::TRIANGLES, 0, face->mVertexBuffer->getRequestedVerts()-1, face->mVertexBuffer->getRequestedIndices(), 0);
- gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices()/3);
+ gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices());
}
}
}
diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp
index 830e975e8a..ebd767d654 100644
--- a/indra/newview/lldriverparam.cpp
+++ b/indra/newview/lldriverparam.cpp
@@ -118,13 +118,12 @@ void LLDriverParamInfo::toStream(std::ostream &out)
out << std::endl;
- LLVOAvatarSelf *avatar = gAgent.getAvatarObject();
- if(avatar)
+ if(isAgentAvatarValid())
{
for (entry_info_list_t::iterator iter = mDrivenInfoList.begin(); iter != mDrivenInfoList.end(); iter++)
{
LLDrivenEntryInfo driven = *iter;
- LLViewerVisualParam *param = (LLViewerVisualParam*)avatar->getVisualParam(driven.mDrivenID);
+ LLViewerVisualParam *param = (LLViewerVisualParam*)gAgentAvatarp->getVisualParam(driven.mDrivenID);
if (param)
{
param->getInfo()->toStream(out);
@@ -146,7 +145,7 @@ void LLDriverParamInfo::toStream(std::ostream &out)
}
else
{
- llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << avatar << " for driver parameter " << getID() << llendl;
+ llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << gAgentAvatarp << " for driver parameter " << getID() << llendl;
}
out << std::endl;
}
@@ -626,13 +625,13 @@ F32 LLDriverParam::getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight
void LLDriverParam::setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool upload_bake)
{
- LLVOAvatarSelf *avatar_self = gAgent.getAvatarObject();
- if(mWearablep &&
+ if(isAgentAvatarValid() &&
+ mWearablep &&
driven->mParam->getCrossWearable() &&
mWearablep->isOnTop())
{
// call setWeight through LLVOAvatarSelf so other wearables can be updated with the correct values
- avatar_self->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, upload_bake );
+ gAgentAvatarp->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, upload_bake );
}
else
{
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 3818ee6f78..149ba2478d 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -35,6 +35,7 @@
#include "llscrollcontainer.h"
#include "llwindow.h"
+#include "llviewerwindow.h"
static LLDefaultChildRegistry::Register<LLExpandableTextBox> t1("expandable_text");
@@ -111,13 +112,12 @@ private:
};
LLExpandableTextBox::LLTextBoxEx::Params::Params()
-: more_label("more_label")
{
}
LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)
: LLTextEditor(p),
- mExpanderLabel(p.more_label),
+ mExpanderLabel(p.label),
mExpanderVisible(false)
{
setIsChrome(TRUE);
@@ -382,7 +382,7 @@ void LLExpandableTextBox::expandTextBox()
setFocus(TRUE);
// this lets us receive top_lost event(needed to collapse text box)
// it also draws text box above all other ui elements
- gFocusMgr.setTopCtrl(this);
+ gViewerWindow->addPopup(this);
mExpanded = true;
}
@@ -401,10 +401,7 @@ void LLExpandableTextBox::collapseTextBox()
updateTextBoxRect();
- if(gFocusMgr.getTopCtrl() == this)
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ gViewerWindow->removePopup(this);
}
void LLExpandableTextBox::onFocusLost()
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index 58316ddb98..5872592fae 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -54,7 +54,6 @@ protected:
public:
struct Params : public LLInitParam::Block<Params, LLTextEditor::Params>
{
- Mandatory<std::string> more_label;
Params();
};
@@ -144,6 +143,7 @@ public:
*/
/*virtual*/ void onTopLost();
+
/**
* Draws text box, collapses text box if its expanded and its parent's position changed
*/
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 80acc71a41..9de69a8173 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -870,7 +870,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
llpushcallstacks ;
const LLVolumeFace &vf = volume.getVolumeFace(f);
S32 num_vertices = (S32)vf.mVertices.size();
- S32 num_indices = (S32)vf.mIndices.size();
+ S32 num_indices = LLPipeline::sUseTriStrips ? (S32)vf.mTriStrip.size() : (S32) vf.mIndices.size();
if (mVertexBuffer.notNull())
{
@@ -1063,9 +1063,19 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (full_rebuild)
{
mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex);
- for (U16 i = 0; i < num_indices; i++)
+ if (LLPipeline::sUseTriStrips)
{
- *indicesp++ = vf.mIndices[i] + index_offset;
+ for (U32 i = 0; i < (U32) num_indices; i++)
+ {
+ *indicesp++ = vf.mTriStrip[i] + index_offset;
+ }
+ }
+ else
+ {
+ for (U32 i = 0; i < (U32) num_indices; i++)
+ {
+ *indicesp++ = vf.mIndices[i] + index_offset;
+ }
}
}
@@ -1617,8 +1627,13 @@ S32 LLFace::pushVertices(const U16* index_array) const
{
if (mIndicesCount)
{
- mVertexBuffer->drawRange(LLRender::TRIANGLES, mGeomIndex, mGeomIndex+mGeomCount-1, mIndicesCount, mIndicesIndex);
- gPipeline.addTrianglesDrawn(mIndicesCount/3);
+ U32 render_type = LLRender::TRIANGLES;
+ if (mDrawInfo)
+ {
+ render_type = mDrawInfo->mDrawMode;
+ }
+ mVertexBuffer->drawRange(render_type, mGeomIndex, mGeomIndex+mGeomCount-1, mIndicesCount, mIndicesIndex);
+ gPipeline.addTrianglesDrawn(mIndicesCount, render_type);
}
return mIndicesCount;
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 4fa97e789b..8bc3b5a75f 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -44,6 +44,7 @@
#include "llfontgl.h"
#include "llsdserialize.h"
#include "lltooltip.h"
+#include "llbutton.h"
#include "llappviewer.h"
#include "llviewertexturelist.h"
@@ -99,6 +100,8 @@ LLFastTimerView::LLFastTimerView(const LLRect& rect)
FTV_NUM_TIMERS = LLFastTimer::NamedTimer::instanceCount();
mPrintStats = -1;
mAverageCyclesPerTimer = 0;
+ setCanMinimize(false);
+ setCanClose(true);
}
@@ -139,6 +142,18 @@ LLFastTimer::NamedTimer* LLFastTimerView::getLegendID(S32 y)
BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask)
{
+
+ {
+ S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft;
+ S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom;
+ if(mButtons[BUTTON_CLOSE]->getVisible()
+ && mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y) )
+ {
+ return LLFloater::handleMouseDown(x, y, mask);;
+ }
+ }
+
+
if (x < mBarRect.mLeft)
{
LLFastTimer::NamedTimer* idp = getLegendID(y);
@@ -188,6 +203,15 @@ BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLFastTimerView::handleMouseUp(S32 x, S32 y, MASK mask)
{
+ {
+ S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft;
+ S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom;
+ if(mButtons[BUTTON_CLOSE]->getVisible()
+ && mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y) )
+ {
+ return LLFloater::handleMouseUp(x, y, mask);;
+ }
+ }
return FALSE;
}
@@ -1191,5 +1215,8 @@ void LLFastTimerView::doAnalysis(std::string baseline, std::string target, std::
return ;
}
}
-
+void LLFastTimerView::onClickCloseBtn()
+{
+ setVisible(false);
+}
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
index f5c8f23818..ac06990913 100644
--- a/indra/newview/llfasttimerview.h
+++ b/indra/newview/llfasttimerview.h
@@ -63,7 +63,9 @@ public:
LLFastTimer::NamedTimer* getLegendID(S32 y);
F64 getTime(const std::string& name);
-
+
+protected:
+ virtual void onClickCloseBtn();
private:
typedef std::vector<std::vector<S32> > bar_positions_t;
bar_positions_t mBarStart;
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index bf7c735488..ba92c33d59 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -31,7 +31,6 @@
*/
#include "llviewerprecompiledheaders.h"
-
#include "llfavoritesbar.h"
#include "llfloaterreg.h"
@@ -47,6 +46,7 @@
#include "llclipboard.h"
#include "llinventoryclipboard.h"
#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
#include "llfloaterworldmap.h"
#include "lllandmarkactions.h"
#include "llnotificationsutil.h"
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index aea2de8e92..561965d021 100644
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -51,6 +51,9 @@
/*static*/ F32 LLVolumeImplFlexible::sUpdateFactor = 1.0f;
+static LLFastTimer::DeclareTimer FTM_FLEXIBLE_REBUILD("Rebuild");
+static LLFastTimer::DeclareTimer FTM_DO_FLEXIBLE_UPDATE("Update");
+
// LLFlexibleObjectData::pack/unpack now in llprimitive.cpp
//-----------------------------------------------
@@ -194,7 +197,6 @@ void LLVolumeImplFlexible::remapSections(LLFlexibleObjectSection *source, S32 so
}
}
-
//-----------------------------------------------------------------------------
void LLVolumeImplFlexible::setAttributesOfAllSections(LLVector3* inScale)
{
@@ -363,6 +365,7 @@ inline S32 log2(S32 x)
void LLVolumeImplFlexible::doFlexibleUpdate()
{
+ LLFastTimer ftm(FTM_DO_FLEXIBLE_UPDATE);
LLVolume* volume = mVO->getVolume();
LLPath *path = &volume->getPath();
if (mSimulateRes == 0)
@@ -693,7 +696,10 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
}
volume->updateRelativeXform();
- doFlexibleUpdate();
+ {
+ LLFastTimer t(FTM_DO_FLEXIBLE_UPDATE);
+ doFlexibleUpdate();
+ }
// Object may have been rotated, which means it needs a rebuild. See SL-47220
BOOL rotated = FALSE;
@@ -710,7 +716,10 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
volume->regenFaces();
volume->mDrawable->setState(LLDrawable::REBUILD_VOLUME);
volume->dirtySpatialGroup();
- doFlexibleRebuild();
+ {
+ LLFastTimer t(FTM_FLEXIBLE_REBUILD);
+ doFlexibleRebuild();
+ }
volume->genBBoxes(isVolumeGlobal());
}
else if (!mUpdated || rotated)
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 5ec58c8dd6..434c89e8ba 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -568,7 +568,7 @@ void LLFloaterAnimPreview::onBtnPlay(void* user_data)
{
LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
- if(!avatarp->isMotionActive(previewp->mMotionID))
+ if (!avatarp->isMotionActive(previewp->mMotionID))
{
previewp->resetMotion();
previewp->mPauseRequest = NULL;
@@ -593,7 +593,7 @@ void LLFloaterAnimPreview::onBtnPause(void* user_data)
{
LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
- if(avatarp->isMotionActive(previewp->mMotionID))
+ if (avatarp->isMotionActive(previewp->mMotionID))
{
if (!avatarp->areAnimationsPaused())
{
@@ -1001,19 +1001,18 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata)
{
std::string name = floaterp->childGetValue("name_form").asString();
std::string desc = floaterp->childGetValue("description_form").asString();
- LLAssetStorage::LLStoreAssetCallback callback = NULL;
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
- void *userdata = NULL;
upload_new_resource(floaterp->mTransactionID, // tid
LLAssetType::AT_ANIMATION,
name,
desc,
- 0,
LLFolderType::FT_NONE,
LLInventoryType::IT_ANIMATION,
- LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
+ LLFloaterPerms::getNextOwnerPerms(),
+ LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
name,
- callback, expected_upload_cost, userdata);
+ NULL,
+ expected_upload_cost);
}
else
{
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index a0b2de85f0..2cb0cdf368 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -157,7 +157,7 @@ void LLFloaterAvatarPicker::onBtnFind()
find();
}
-static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std::string>& avatar_names, std::vector<LLUUID>& avatar_ids)
+static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std::string>& avatar_names, uuid_vec_t& avatar_ids)
{
std::vector<LLScrollListItem*> items = from->getAllSelected();
for (std::vector<LLScrollListItem*>::iterator iter = items.begin(); iter != items.end(); ++iter)
@@ -203,7 +203,7 @@ void LLFloaterAvatarPicker::onBtnSelect()
if(list)
{
std::vector<std::string> avatar_names;
- std::vector<LLUUID> avatar_ids;
+ uuid_vec_t avatar_ids;
getSelectedAvatarData(list, avatar_names, avatar_ids);
mSelectionCallback(avatar_names, avatar_ids);
}
@@ -247,7 +247,7 @@ void LLFloaterAvatarPicker::populateNearMe()
LLScrollListCtrl* near_me_scroller = getChild<LLScrollListCtrl>("NearMe");
near_me_scroller->deleteAllItems();
- std::vector<LLUUID> avatar_ids;
+ uuid_vec_t avatar_ids;
LLWorld::getInstance()->getAvatars(&avatar_ids, NULL, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange"));
for(U32 i=0; i<avatar_ids.size(); i++)
{
@@ -499,7 +499,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()
if(list)
{
- std::vector<LLUUID> avatar_ids;
+ uuid_vec_t avatar_ids;
std::vector<std::string> avatar_names;
getSelectedAvatarData(list, avatar_names, avatar_ids);
return mOkButtonValidateSignal(avatar_ids);
diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h
index e35466cec8..860f3930ef 100644
--- a/indra/newview/llfloateravatarpicker.h
+++ b/indra/newview/llfloateravatarpicker.h
@@ -40,11 +40,11 @@
class LLFloaterAvatarPicker : public LLFloater
{
public:
- typedef boost::signals2::signal<bool(const std::vector<LLUUID>&), boost_boolean_combiner> validate_signal_t;
+ typedef boost::signals2::signal<bool(const uuid_vec_t&), boost_boolean_combiner> validate_signal_t;
typedef validate_signal_t::slot_type validate_callback_t;
// The callback function will be called with an avatar name and UUID.
- typedef boost::function<void (const std::vector<std::string>&, const std::vector<LLUUID>&)> select_callback_t;
+ typedef boost::function<void (const std::vector<std::string>&, const uuid_vec_t&)> select_callback_t;
// Call this to select an avatar.
static LLFloaterAvatarPicker* show(select_callback_t callback,
BOOL allow_multiple = FALSE,
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
index 8c7899af3e..18db60705b 100644
--- a/indra/newview/llfloateravatartextures.cpp
+++ b/indra/newview/llfloateravatartextures.cpp
@@ -31,15 +31,14 @@
*/
#include "llviewerprecompiledheaders.h"
-
#include "llfloateravatartextures.h"
+#include "llagent.h"
+#include "llagentwearables.h"
#include "lltexturectrl.h"
-
#include "lluictrlfactory.h"
#include "llviewerobjectlist.h"
#include "llvoavatar.h"
-#include "llagentwearables.h"
using namespace LLVOAvatarDefines;
@@ -75,7 +74,6 @@ void LLFloaterAvatarTextures::draw()
LLFloater::draw();
}
-#if !LL_RELEASE_FOR_DOWNLOAD
static void update_texture_ctrl(LLVOAvatar* avatarp,
LLTextureCtrl* ctrl,
ETextureIndex te)
@@ -132,72 +130,68 @@ static LLVOAvatar* find_avatar(const LLUUID& id)
void LLFloaterAvatarTextures::refresh()
{
- LLVOAvatar *avatarp = find_avatar(mID);
- if (avatarp)
+ if (gAgent.isGodlike())
{
- std::string fullname;
- if (gCacheName->getFullName(avatarp->getID(), fullname))
+ LLVOAvatar *avatarp = find_avatar(mID);
+ if (avatarp)
{
- setTitle(mTitle + ": " + fullname);
+ std::string fullname;
+ if (gCacheName->getFullName(avatarp->getID(), fullname))
+ {
+ setTitle(mTitle + ": " + fullname);
+ }
+ for (U32 i=0; i < TEX_NUM_INDICES; i++)
+ {
+ update_texture_ctrl(avatarp, mTextures[i], ETextureIndex(i));
+ }
}
- for (U32 i=0; i < TEX_NUM_INDICES; i++)
+ else
{
- update_texture_ctrl(avatarp, mTextures[i], ETextureIndex(i));
+ setTitle(mTitle + ": " + getString("InvalidAvatar") + " (" + mID.asString() + ")");
}
}
- else
- {
- setTitle(mTitle + ": " + getString("InvalidAvatar") + " (" + mID.asString() + ")");
- }
}
-#else
-
-void LLFloaterAvatarTextures::refresh()
-{
-}
-
-#endif
-
// static
void LLFloaterAvatarTextures::onClickDump(void* data)
{
-#if !LL_RELEASE_FOR_DOWNLOAD
- LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data;
- LLVOAvatar* avatarp = find_avatar(self->mID);
- if (!avatarp) return;
-
- for (S32 i = 0; i < avatarp->getNumTEs(); i++)
+ if (gAgent.isGodlike())
{
- const LLTextureEntry* te = avatarp->getTE(i);
- if (!te) continue;
+ LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data;
+ LLVOAvatar* avatarp = find_avatar(self->mID);
+ if (!avatarp) return;
- if (LLVOAvatar::isIndexLocalTexture((ETextureIndex)i))
+ for (S32 i = 0; i < avatarp->getNumTEs(); i++)
{
- LLUUID id = IMG_DEFAULT_AVATAR;
- EWearableType wearable_type = LLVOAvatarDictionary::getInstance()->getTEWearableType((ETextureIndex)i);
- LLWearable *wearable = gAgentWearables.getWearable(wearable_type, 0);
- if (wearable)
+ const LLTextureEntry* te = avatarp->getTE(i);
+ if (!te) continue;
+
+ if (LLVOAvatar::isIndexLocalTexture((ETextureIndex)i))
{
- LLLocalTextureObject *lto = wearable->getLocalTextureObject(i);
- if (lto)
+ LLUUID id = IMG_DEFAULT_AVATAR;
+ EWearableType wearable_type = LLVOAvatarDictionary::getInstance()->getTEWearableType((ETextureIndex)i);
+ LLWearable *wearable = gAgentWearables.getWearable(wearable_type, 0);
+ if (wearable)
{
- id = lto->getID();
+ LLLocalTextureObject *lto = wearable->getLocalTextureObject(i);
+ if (lto)
+ {
+ id = lto->getID();
+ }
+ }
+ if (id != IMG_DEFAULT_AVATAR)
+ {
+ llinfos << "Avatar TE " << i << " id " << id << llendl;
+ }
+ else
+ {
+ llinfos << "Avatar TE " << i << " id " << "<DEFAULT>" << llendl;
}
- }
- if (id != IMG_DEFAULT_AVATAR)
- {
- llinfos << "Avatar TE " << i << " id " << id << llendl;
}
else
{
- llinfos << "Avatar TE " << i << " id " << "<DEFAULT>" << llendl;
+ llinfos << "Avatar TE " << i << " id " << te->getID() << llendl;
}
}
- else
- {
- llinfos << "Avatar TE " << i << " id " << te->getID() << llendl;
- }
}
-#endif
}
diff --git a/indra/newview/llfloaterbeacons.cpp b/indra/newview/llfloaterbeacons.cpp
index 13a7888f60..975c888a2b 100644
--- a/indra/newview/llfloaterbeacons.cpp
+++ b/indra/newview/llfloaterbeacons.cpp
@@ -71,7 +71,7 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl)
{
LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
std::string name = check->getName();
- if( name == "touch_only")
+ if(name == "touch_only")
{
LLPipeline::toggleRenderScriptedTouchBeacons(NULL);
// Don't allow both to be ON at the same time. Toggle the other one off if both now on.
@@ -81,7 +81,9 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl)
{
LLPipeline::setRenderScriptedBeacons(FALSE);
getChild<LLCheckBoxCtrl>("scripted")->setControlValue(LLSD(FALSE));
+ getChild<LLCheckBoxCtrl>("scripted")->setValue(FALSE);
getChild<LLCheckBoxCtrl>("touch_only")->setControlValue(LLSD(TRUE)); // just to be sure it's in sync with llpipeline
+ getChild<LLCheckBoxCtrl>("touch_only")->setValue(TRUE);
}
}
else if(name == "scripted")
@@ -94,7 +96,9 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl)
{
LLPipeline::setRenderScriptedTouchBeacons(FALSE);
getChild<LLCheckBoxCtrl>("touch_only")->setControlValue(LLSD(FALSE));
+ getChild<LLCheckBoxCtrl>("touch_only")->setValue(FALSE);
getChild<LLCheckBoxCtrl>("scripted")->setControlValue(LLSD(TRUE)); // just to be sure it's in sync with llpipeline
+ getChild<LLCheckBoxCtrl>("scripted")->setValue(TRUE);
}
}
else if(name == "physical") LLPipeline::setRenderPhysicalBeacons(check->get());
@@ -110,7 +114,9 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl)
{
LLPipeline::setRenderBeacons(TRUE);
getChild<LLCheckBoxCtrl>("beacons")->setControlValue(LLSD(TRUE));
+ getChild<LLCheckBoxCtrl>("beacons")->setValue(TRUE);
getChild<LLCheckBoxCtrl>("highlights")->setControlValue(LLSD(FALSE)); // just to be sure it's in sync with llpipeline
+ getChild<LLCheckBoxCtrl>("highlights")->setValue(FALSE);
}
}
else if(name == "beacons")
@@ -123,7 +129,9 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl)
{
LLPipeline::setRenderHighlights(TRUE);
getChild<LLCheckBoxCtrl>("highlights")->setControlValue(LLSD(TRUE));
+ getChild<LLCheckBoxCtrl>("highlights")->setValue(TRUE);
getChild<LLCheckBoxCtrl>("beacons")->setControlValue(LLSD(FALSE)); // just to be sure it's in sync with llpipeline
+ getChild<LLCheckBoxCtrl>("beacons")->setValue(FALSE);
}
}
}
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index b2f700069f..766fc0723c 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -37,6 +37,7 @@
#include "llfloaterperms.h" // for utilities
#include "llagent.h"
#include "llchat.h"
+#include "llinventorydefines.h"
#include "llviewerwindow.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
@@ -116,7 +117,7 @@ void LLFloaterBulkPermission::doApply()
// worked on.
// NOT static, virtual!
void LLFloaterBulkPermission::inventoryChanged(LLViewerObject* viewer_object,
- InventoryObjectList* inv,
+ LLInventoryObject::object_list_t* inv,
S32,
void* q_id)
{
@@ -250,12 +251,12 @@ void LLFloaterBulkPermission::doCheckUncheckAll(BOOL check)
}
-void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, InventoryObjectList* inv)
+void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, LLInventoryObject::object_list_t* inv)
{
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
- InventoryObjectList::const_iterator it = inv->begin();
- InventoryObjectList::const_iterator end = inv->end();
+ LLInventoryObject::object_list_t::const_iterator it = inv->begin();
+ LLInventoryObject::object_list_t::const_iterator end = inv->end();
for ( ; it != end; ++it)
{
LLAssetType::EType asstype = (*it)->getType();
diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h
index bffcff7059..80dc88fbb1 100644
--- a/indra/newview/llfloaterbulkpermission.h
+++ b/indra/newview/llfloaterbulkpermission.h
@@ -63,13 +63,13 @@ private:
// This is the callback method for the viewer object currently
// being worked on.
/*virtual*/ void inventoryChanged(LLViewerObject* obj,
- InventoryObjectList* inv,
+ LLInventoryObject::object_list_t* inv,
S32 serial_num,
void* queue);
// This is called by inventoryChanged
void handleInventory(LLViewerObject* viewer_obj,
- InventoryObjectList* inv);
+ LLInventoryObject::object_list_t* inv);
void updateInventory(LLViewerObject* object,
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index fba557c656..44c82f1941 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -44,6 +44,7 @@
#include "llinventorymodel.h" // for gInventory
#include "llfloaterreg.h"
#include "llfloaterinventory.h" // for get_item_icon
+#include "llinventorydefines.h"
#include "llinventoryfunctions.h"
#include "llnotificationsutil.h"
#include "llselectmgr.h"
@@ -195,7 +196,7 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info)
}
void LLFloaterBuy::inventoryChanged(LLViewerObject* obj,
- InventoryObjectList* inv,
+ LLInventoryObject::object_list_t* inv,
S32 serial_num,
void* data)
{
@@ -220,8 +221,8 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj,
return;
}
- InventoryObjectList::const_iterator it = inv->begin();
- InventoryObjectList::const_iterator end = inv->end();
+ LLInventoryObject::object_list_t::const_iterator it = inv->begin();
+ LLInventoryObject::object_list_t::const_iterator end = inv->end();
for ( ; it != end; ++it )
{
LLInventoryObject* obj = (LLInventoryObject*)(*it);
@@ -246,7 +247,8 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj,
// Compute icon for this item
BOOL item_is_multi = FALSE;
- if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED )
+ if ( inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED
+ || inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS)
{
item_is_multi = TRUE;
}
diff --git a/indra/newview/llfloaterbuy.h b/indra/newview/llfloaterbuy.h
index ab38e082dc..411c8fb00e 100644
--- a/indra/newview/llfloaterbuy.h
+++ b/indra/newview/llfloaterbuy.h
@@ -65,7 +65,7 @@ protected:
void requestObjectInventories();
/*virtual*/ void inventoryChanged(LLViewerObject* obj,
- InventoryObjectList* inv,
+ LLInventoryObject::object_list_t* inv,
S32 serial_num,
void* data);
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 0daef27af2..1d989ad0fd 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -44,6 +44,7 @@
#include "llagent.h" // for agent id
#include "llcheckboxctrl.h"
+#include "llinventorydefines.h"
#include "llinventoryfunctions.h"
#include "llinventorymodel.h" // for gInventory
#include "llfloaterreg.h"
@@ -142,7 +143,7 @@ void LLFloaterBuyContents::show(const LLSaleInfo& sale_info)
void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
- InventoryObjectList* inv,
+ LLInventoryObject::object_list_t* inv,
S32 serial_num,
void* data)
{
@@ -176,8 +177,8 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
LLInventoryType::EType inv_type;
S32 wearable_count = 0;
- InventoryObjectList::const_iterator it = inv->begin();
- InventoryObjectList::const_iterator end = inv->end();
+ LLInventoryObject::object_list_t::const_iterator it = inv->begin();
+ LLInventoryObject::object_list_t::const_iterator end = inv->end();
for ( ; it != end; ++it )
{
@@ -215,7 +216,7 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
LLSD row;
BOOL item_is_multi = FALSE;
- if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED )
+ if ( inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED )
{
item_is_multi = TRUE;
}
diff --git a/indra/newview/llfloaterbuycontents.h b/indra/newview/llfloaterbuycontents.h
index 8045a46c9f..ab161adfea 100644
--- a/indra/newview/llfloaterbuycontents.h
+++ b/indra/newview/llfloaterbuycontents.h
@@ -59,7 +59,7 @@ public:
protected:
void requestObjectInventories();
/*virtual*/ void inventoryChanged(LLViewerObject* obj,
- InventoryObjectList* inv,
+ LLInventoryObject::object_list_t* inv,
S32 serial_num,
void* data);
diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp
index 1642e6725e..7fddd1fc5f 100644
--- a/indra/newview/llfloaterbuycurrency.cpp
+++ b/indra/newview/llfloaterbuycurrency.cpp
@@ -234,8 +234,7 @@ void LLFloaterBuyCurrencyUI::updateUI()
if (mHasTarget)
{
childSetVisible("buy_action", true);
- childSetTextArg("buy_action", "[NAME]", mTargetName);
- childSetTextArg("buy_action", "[PRICE]", llformat("%d",mTargetPrice));
+ childSetTextArg("buy_action", "[ACTION]", mTargetName);
}
}
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index ecb6254f8a..d84ebef1dd 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -38,11 +38,11 @@
#include "llfloaterreg.h"
// Viewer includes
+#include "llagentcamera.h"
#include "lljoystickbutton.h"
#include "llviewercontrol.h"
#include "llviewercamera.h"
#include "llbottomtray.h"
-#include "llagent.h"
#include "lltoolmgr.h"
#include "lltoolfocus.h"
#include "llslider.h"
@@ -104,7 +104,7 @@ BOOL LLPanelCameraZoom::postBuild()
void LLPanelCameraZoom::draw()
{
- mSlider->setValue(gAgent.getCameraZoomFraction());
+ mSlider->setValue(gAgentCamera.getCameraZoomFraction());
LLPanel::draw();
}
@@ -131,7 +131,7 @@ void LLPanelCameraZoom::onZoomMinusHeldDown()
void LLPanelCameraZoom::onSliderValueChanged()
{
F32 zoom_level = mSlider->getValueF32();
- gAgent.setCameraZoomFraction(zoom_level);
+ gAgentCamera.setCameraZoomFraction(zoom_level);
}
void activate_camera_tool()
@@ -146,7 +146,7 @@ void activate_camera_tool()
/*static*/ bool LLFloaterCamera::inFreeCameraMode()
{
LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
- if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK)
+ if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)
{
return true;
}
@@ -241,6 +241,7 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val)
BOOL LLFloaterCamera::postBuild()
{
setIsChrome(TRUE);
+ setTitleVisible(TRUE); // restore title visibility after chrome applying
mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
mZoom = getChild<LLPanelCameraZoom>(ZOOM);
@@ -264,7 +265,7 @@ ECameraControlMode LLFloaterCamera::determineMode()
return CAMERA_CTRL_MODE_FREE_CAMERA;
}
- if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK)
+ if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
{
return CAMERA_CTRL_MODE_AVATAR_VIEW;
}
@@ -295,6 +296,31 @@ void LLFloaterCamera::setMode(ECameraControlMode mode)
updateState();
}
+void LLFloaterCamera::setModeTitle(const ECameraControlMode mode)
+{
+ std::string title;
+ switch(mode)
+ {
+ case CAMERA_CTRL_MODE_ORBIT:
+ title = getString("orbit_mode_title");
+ break;
+ case CAMERA_CTRL_MODE_PAN:
+ title = getString("pan_mode_title");
+ break;
+ case CAMERA_CTRL_MODE_AVATAR_VIEW:
+ title = getString("avatar_view_mode_title");
+ break;
+ case CAMERA_CTRL_MODE_FREE_CAMERA:
+ title = getString("free_mode_title");
+ break;
+ default:
+ // title should be provided for all modes
+ llassert(false);
+ break;
+ }
+ setTitle(title);
+}
+
void LLFloaterCamera::switchMode(ECameraControlMode mode)
{
setMode(mode);
@@ -354,6 +380,10 @@ void LLFloaterCamera::updateState()
childSetVisible(ZOOM, CAMERA_CTRL_MODE_AVATAR_VIEW != mCurrMode);
childSetVisible(PRESETS, CAMERA_CTRL_MODE_AVATAR_VIEW == mCurrMode);
+ updateCameraPresetButtons();
+ setModeTitle(mCurrMode);
+
+
//hiding or showing the panel with controls by reshaping the floater
bool showControls = CAMERA_CTRL_MODE_FREE_CAMERA != mCurrMode;
if (showControls == childIsVisible(CONTROLS)) return;
@@ -384,25 +414,38 @@ void LLFloaterCamera::updateState()
}
}
+void LLFloaterCamera::updateCameraPresetButtons()
+{
+ ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
+
+ childSetValue("rear_view", preset == CAMERA_PRESET_REAR_VIEW);
+ childSetValue("group_view", preset == CAMERA_PRESET_GROUP_VIEW);
+ childSetValue("front_view", preset == CAMERA_PRESET_FRONT_VIEW);
+ childSetValue("mouselook_view", gAgentCamera.cameraMouselook());
+}
+
void LLFloaterCamera::onClickCameraPresets(const LLSD& param)
{
std::string name = param.asString();
if ("rear_view" == name)
{
- gAgent.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
+ gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
}
else if ("group_view" == name)
{
- gAgent.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
+ gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
}
else if ("front_view" == name)
{
- gAgent.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
+ gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
}
else if ("mouselook_view" == name)
{
- gAgent.changeCameraToMouselook();
+ gAgentCamera.changeCameraToMouselook();
}
+ LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
+ if (camera_floater)
+ camera_floater->updateCameraPresetButtons();
}
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index 45d5e9a845..b268839165 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -100,9 +100,15 @@ private:
/* sets a new mode preserving previous one and updates ui*/
void setMode(ECameraControlMode mode);
+ /** set title appropriate to passed mode */
+ void setModeTitle(const ECameraControlMode mode);
+
/* updates the state (UI) according to the current mode */
void updateState();
+ /* update camera preset buttons toggle state according to the currently selected preset */
+ void updateCameraPresetButtons();
+
void onClickBtn(ECameraControlMode mode);
void assignButton2Mode(ECameraControlMode mode, const std::string& button_name);
diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp
index 64efa10ef9..97ebab3425 100644
--- a/indra/newview/llfloaterevent.cpp
+++ b/indra/newview/llfloaterevent.cpp
@@ -58,6 +58,7 @@
#include "llviewercontrol.h"
#include "llweb.h"
#include "llworldmap.h"
+#include "llworldmapmessage.h"
#include "lluictrlfactory.h"
#include "lltrans.h"
@@ -215,16 +216,15 @@ void LLFloaterEvent::processEventInfoReply(LLMessageSystem *msg, void **)
std::string desc = floater->mEventInfo.mSimName + llformat(" (%d, %d, %d)", region_x, region_y, region_z);
floater->mTBLocation->setText(desc);
- if (floater->mEventInfo.mEventFlags & EVENT_FLAG_MATURE)
- {
- floater->childSetVisible("event_mature_yes", TRUE);
- floater->childSetVisible("event_mature_no", FALSE);
- }
- else
- {
- floater->childSetVisible("event_mature_yes", FALSE);
- floater->childSetVisible("event_mature_no", TRUE);
- }
+ floater->childSetVisible("rating_icon_m", FALSE);
+ floater->childSetVisible("rating_icon_r", FALSE);
+ floater->childSetVisible("rating_icon_pg", FALSE);
+ floater->childSetValue("rating_value", floater->getString("unknown"));
+
+ //for some reason there's not adult flags for now, so see if region is adult and then
+ //set flags
+ LLWorldMapMessage::url_callback_t cb = boost::bind( &regionInfoCallback, floater->mEventInfo.mID, _1);
+ LLWorldMapMessage::getInstance()->sendNamedRegionRequest(floater->mEventInfo.mSimName, cb, std::string("unused"), false);
if (floater->mEventInfo.mUnixTime < time_corrected())
{
@@ -249,6 +249,39 @@ void LLFloaterEvent::processEventInfoReply(LLMessageSystem *msg, void **)
}
}
+//static
+void LLFloaterEvent::regionInfoCallback(U32 event_id, U64 region_handle)
+{
+ LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(region_handle);
+ LLFloaterEvent* floater = LLFloaterReg::getTypedInstance<LLFloaterEvent>("event");
+
+ if (sim_info && floater && (event_id == floater->getEventID()))
+ {
+ // update the event with the maturity info
+ if (sim_info->isAdult())
+ {
+ floater->childSetVisible("rating_icon_m", FALSE);
+ floater->childSetVisible("rating_icon_r", TRUE);
+ floater->childSetVisible("rating_icon_pg", FALSE);
+ floater->childSetValue("rating_value", floater->getString("adult"));
+
+ }
+ else if (floater->mEventInfo.mEventFlags & EVENT_FLAG_MATURE)
+ {
+ floater->childSetVisible("rating_icon_m", TRUE);
+ floater->childSetVisible("rating_icon_r", FALSE);
+ floater->childSetVisible("rating_icon_pg", FALSE);
+ floater->childSetValue("rating_value", floater->getString("moderate"));
+ }
+ else
+ {
+ floater->childSetVisible("rating_icon_m", FALSE);
+ floater->childSetVisible("rating_icon_r", FALSE);
+ floater->childSetVisible("rating_icon_pg", TRUE);
+ floater->childSetValue("rating_value", floater->getString("general"));
+ }
+ }
+}
void LLFloaterEvent::draw()
{
diff --git a/indra/newview/llfloaterevent.h b/indra/newview/llfloaterevent.h
index 54aaaf6a0f..4126236964 100644
--- a/indra/newview/llfloaterevent.h
+++ b/indra/newview/llfloaterevent.h
@@ -70,7 +70,8 @@ protected:
static void onClickNotify(void*);
void onClickDeleteEvent();
-// static bool callbackCreateEventWebPage(const LLSD& notification, const LLSD& response);
+ static void regionInfoCallback(U32 event_id, U64 region_handle);
+
protected:
U32 mEventID;
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index 9c1ac2631d..8ee8d13a9c 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -36,6 +36,7 @@
#include "llinventory.h"
#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
#include "llinventoryclipboard.h"
@@ -106,7 +107,7 @@ LLFloaterGesture::LLFloaterGesture(const LLSD& key)
: LLFloater(key)
{
mObserver = new LLFloaterGestureObserver(this);
- LLGestureManager::instance().addObserver(mObserver);
+ LLGestureMgr::instance().addObserver(mObserver);
mCommitCallbackRegistrar.add("Gesture.Action.ToogleActiveState", boost::bind(&LLFloaterGesture::onActivateBtnClick, this));
mCommitCallbackRegistrar.add("Gesture.Action.ShowPreview", boost::bind(&LLFloaterGesture::onClickEdit, this));
@@ -125,7 +126,7 @@ void LLFloaterGesture::done()
// we load only gesture folder without childred.
LLInventoryModel::cat_array_t* categories;
LLInventoryModel::item_array_t* items;
- LLInventoryFetchDescendentsObserver::folder_ref_t unloaded_folders;
+ uuid_vec_t unloaded_folders;
LL_DEBUGS("Gesture")<< "Get subdirs of Gesture Folder...." << LL_ENDL;
gInventory.getDirectDescendentsOf(mGestureFolderID, categories, items);
if (categories->empty())
@@ -147,7 +148,7 @@ void LLFloaterGesture::done()
if (!unloaded_folders.empty())
{
LL_DEBUGS("Gesture")<< "Fetching subdirectories....." << LL_ENDL;
- fetchDescendents(unloaded_folders);
+ fetch(unloaded_folders);
}
else
{
@@ -165,7 +166,7 @@ void LLFloaterGesture::done()
// virtual
LLFloaterGesture::~LLFloaterGesture()
{
- LLGestureManager::instance().removeObserver(mObserver);
+ LLGestureMgr::instance().removeObserver(mObserver);
delete mObserver;
mObserver = NULL;
gInventory.removeObserver(this);
@@ -197,11 +198,11 @@ BOOL LLFloaterGesture::postBuild()
setDefaultBtn("play_btn");
mGestureFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE, false);
- folder_ref_t folders;
+ uuid_vec_t folders;
folders.push_back(mGestureFolderID);
//perform loading Gesture directory anyway to make sure that all subdirectory are loaded too. See method done() for details.
gInventory.addObserver(this);
- fetchDescendents(folders);
+ fetch(folders);
if (mGestureList)
{
@@ -246,13 +247,13 @@ void LLFloaterGesture::refreshAll()
void LLFloaterGesture::buildGestureList()
{
S32 scroll_pos = mGestureList->getScrollPos();
- std::vector<LLUUID> selected_items;
+ uuid_vec_t selected_items;
getSelectedIds(selected_items);
LL_DEBUGS("Gesture")<< "Rebuilding gesture list "<< LL_ENDL;
mGestureList->deleteAllItems();
- LLGestureManager::item_map_t::const_iterator it;
- const LLGestureManager::item_map_t& active_gestures = LLGestureManager::instance().getActiveGestures();
+ LLGestureMgr::item_map_t::const_iterator it;
+ const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures();
for (it = active_gestures.begin(); it != active_gestures.end(); ++it)
{
addGesture(it->first,it->second, mGestureList);
@@ -278,7 +279,7 @@ void LLFloaterGesture::buildGestureList()
// attempt to preserve scroll position through re-builds
// since we do re-build whenever something gets dirty
- for(std::vector<LLUUID>::iterator it = selected_items.begin(); it != selected_items.end(); it++)
+ for(uuid_vec_t::iterator it = selected_items.begin(); it != selected_items.end(); it++)
{
mGestureList->selectByID(*it);
}
@@ -354,10 +355,10 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur
element["columns"][0]["value"] = "";
element["columns"][0]["font"]["name"] = "SANSSERIF";
element["columns"][0]["font"]["style"] = font_style;
- element["columns"][0]["column"] = "trigger";
- element["columns"][0]["value"] = "---";
- element["columns"][0]["font"]["name"] = "SANSSERIF";
- element["columns"][0]["font"]["style"] = font_style;
+ element["columns"][1]["column"] = "shortcut";
+ element["columns"][1]["value"] = "---";
+ element["columns"][1]["font"]["name"] = "SANSSERIF";
+ element["columns"][1]["font"]["style"] = font_style;
element["columns"][2]["column"] = "key";
element["columns"][2]["value"] = "~~~";
element["columns"][2]["font"]["name"] = "SANSSERIF";
@@ -371,13 +372,13 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur
LLScrollListItem* sl_item = list->addElement(element, ADD_BOTTOM);
if(sl_item)
{
- LLFontGL::StyleFlags style = LLGestureManager::getInstance()->isGestureActive(item_id) ? LLFontGL::BOLD : LLFontGL::NORMAL;
+ LLFontGL::StyleFlags style = LLGestureMgr::getInstance()->isGestureActive(item_id) ? LLFontGL::BOLD : LLFontGL::NORMAL;
// *TODO find out why ["font"]["style"] does not affect font style
((LLScrollListText*)sl_item->getColumn(0))->setFontStyle(style);
}
}
-void LLFloaterGesture::getSelectedIds(std::vector<LLUUID>& ids)
+void LLFloaterGesture::getSelectedIds(uuid_vec_t& ids)
{
std::vector<LLScrollListItem*> items = mGestureList->getAllSelected();
for(std::vector<LLScrollListItem*>::const_iterator it = items.begin(); it != items.end(); it++)
@@ -421,17 +422,17 @@ void LLFloaterGesture::onClickPlay()
if(item_id.isNull()) return;
LL_DEBUGS("Gesture")<<" Trying to play gesture id: "<< item_id <<LL_ENDL;
- if(!LLGestureManager::instance().isGestureActive(item_id))
+ if(!LLGestureMgr::instance().isGestureActive(item_id))
{
// we need to inform server about gesture activating to be consistent with LLPreviewGesture and LLGestureComboList.
BOOL inform_server = TRUE;
BOOL deactivate_similar = FALSE;
- LLGestureManager::instance().setGestureLoadedCallback(item_id, boost::bind(&LLFloaterGesture::playGesture, this, item_id));
+ LLGestureMgr::instance().setGestureLoadedCallback(item_id, boost::bind(&LLFloaterGesture::playGesture, this, item_id));
LLViewerInventoryItem *item = gInventory.getItem(item_id);
llassert(item);
if (item)
{
- LLGestureManager::instance().activateGestureWithAsset(item_id, item->getAssetUUID(), inform_server, deactivate_similar);
+ LLGestureMgr::instance().activateGestureWithAsset(item_id, item->getAssetUUID(), inform_server, deactivate_similar);
LL_DEBUGS("Gesture")<< "Activating gesture with inventory ID: " << item_id <<LL_ENDL;
}
}
@@ -451,13 +452,13 @@ void LLFloaterGesture::onClickNew()
void LLFloaterGesture::onActivateBtnClick()
{
- std::vector<LLUUID> ids;
+ uuid_vec_t ids;
getSelectedIds(ids);
if(ids.empty())
return;
- LLGestureManager* gm = LLGestureManager::getInstance();
- std::vector<LLUUID>::const_iterator it = ids.begin();
+ LLGestureMgr* gm = LLGestureMgr::getInstance();
+ uuid_vec_t::const_iterator it = ids.begin();
BOOL first_gesture_state = gm->isGestureActive(*it);
BOOL is_mixed = FALSE;
while( ++it != ids.end() )
@@ -468,7 +469,7 @@ void LLFloaterGesture::onActivateBtnClick()
break;
}
}
- for(std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++)
+ for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); it++)
{
if(is_mixed)
{
@@ -494,11 +495,11 @@ void LLFloaterGesture::onCopyPasteAction(const LLSD& command)
// since we select this comman inventory item had already arrived .
if("copy_gesture" == command_name)
{
- std::vector<LLUUID> ids;
+ uuid_vec_t ids;
getSelectedIds(ids);
// make sure that clopboard is empty
LLInventoryClipboard::instance().reset();
- for(std::vector<LLUUID>::iterator it = ids.begin(); it != ids.end(); it++)
+ for(uuid_vec_t::iterator it = ids.begin(); it != ids.end(); it++)
{
LLInventoryItem* item = gInventory.getItem(*it);
if(item && item->getInventoryType() == LLInventoryType::IT_GESTURE)
@@ -558,7 +559,7 @@ void LLFloaterGesture::onCommitList()
const LLUUID& item_id = mGestureList->getCurrentID();
mSelectedID = item_id;
- if (LLGestureManager::instance().isGesturePlaying(item_id))
+ if (LLGestureMgr::instance().isGesturePlaying(item_id))
{
childSetVisible("play_btn", false);
childSetVisible("stop_btn", true);
@@ -572,14 +573,14 @@ void LLFloaterGesture::onCommitList()
void LLFloaterGesture::onDeleteSelected()
{
- std::vector<LLUUID> ids;
+ uuid_vec_t ids;
getSelectedIds(ids);
if(ids.empty())
return;
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- LLGestureManager* gm = LLGestureManager::getInstance();
- for(std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++)
+ LLGestureMgr* gm = LLGestureMgr::getInstance();
+ for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); it++)
{
const LLUUID& selected_item = *it;
LLInventoryItem* inv_item = gInventory.getItem(selected_item);
@@ -610,10 +611,10 @@ void LLFloaterGesture::onDeleteSelected()
void LLFloaterGesture::addToCurrentOutFit()
{
- std::vector<LLUUID> ids;
+ uuid_vec_t ids;
getSelectedIds(ids);
- LLAppearanceManager* am = LLAppearanceManager::getInstance();
- for(std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++)
+ LLAppearanceMgr* am = LLAppearanceMgr::getInstance();
+ for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); it++)
{
am->addCOFItemLink(*it);
}
@@ -623,12 +624,12 @@ void LLFloaterGesture::playGesture(LLUUID item_id)
{
LL_DEBUGS("Gesture")<<"Playing gesture "<< item_id<<LL_ENDL;
- if (LLGestureManager::instance().isGesturePlaying(item_id))
+ if (LLGestureMgr::instance().isGesturePlaying(item_id))
{
- LLGestureManager::instance().stopGesture(item_id);
+ LLGestureMgr::instance().stopGesture(item_id);
}
else
{
- LLGestureManager::instance().playGesture(item_id);
+ LLGestureMgr::instance().playGesture(item_id);
}
}
diff --git a/indra/newview/llfloatergesture.h b/indra/newview/llfloatergesture.h
index 629d77b949..1676542c77 100644
--- a/indra/newview/llfloatergesture.h
+++ b/indra/newview/llfloatergesture.h
@@ -85,7 +85,7 @@ private:
* Therefore we have to copy these items to avoid viewer crash.
* @see LLFloaterGesture::onActivateBtnClick
*/
- void getSelectedIds(std::vector<LLUUID>& ids);
+ void getSelectedIds(uuid_vec_t& ids);
bool isActionEnabled(const LLSD& command);
/**
* @brief Activation rules:
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index eb56f387cd..bd07cfdfbf 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -828,7 +828,6 @@ const F32 HOURS_TO_RADIANS = (2.f*F_PI)/24.f;
LLPanelGridTools::LLPanelGridTools() :
LLPanel()
{
- mCommitCallbackRegistrar.add("GridTools.KickAll", boost::bind(&LLPanelGridTools::onClickKickAll, this));
mCommitCallbackRegistrar.add("GridTools.FlushMapVisibilityCaches", boost::bind(&LLPanelGridTools::onClickFlushMapVisibilityCaches, this));
}
@@ -846,46 +845,6 @@ void LLPanelGridTools::refresh()
{
}
-void LLPanelGridTools::onClickKickAll()
-{
- LLNotificationsUtil::add("KickAllUsers", LLSD(), LLSD(), LLPanelGridTools::confirmKick);
-}
-
-
-bool LLPanelGridTools::confirmKick(const LLSD& notification, const LLSD& response)
-{
- if (LLNotificationsUtil::getSelectedOption(notification, response) == 0)
- {
- LLSD payload;
- payload["kick_message"] = response["message"].asString();
- LLNotificationsUtil::add("ConfirmKick", LLSD(), payload, LLPanelGridTools::finishKick);
- }
- return false;
-}
-
-
-// static
-bool LLPanelGridTools::finishKick(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
-
- if (option == 0)
- {
- LLMessageSystem* msg = gMessageSystem;
-
- msg->newMessageFast(_PREHASH_GodKickUser);
- msg->nextBlockFast(_PREHASH_UserInfo);
- msg->addUUIDFast(_PREHASH_GodID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_AgentID, LL_UUID_ALL_AGENTS );
- msg->addU32("KickFlags", KICK_FLAGS_DEFAULT );
- msg->addStringFast(_PREHASH_Reason, notification["payload"]["kick_message"].asString());
- gAgent.sendReliableMessage();
- }
- return false;
-}
-
void LLPanelGridTools::onClickFlushMapVisibilityCaches()
{
LLNotificationsUtil::add("FlushMapVisibilityCaches", LLSD(), LLSD(), flushMapVisibilityCachesConfirm);
@@ -963,6 +922,7 @@ LLPanelObjectTools::~LLPanelObjectTools()
BOOL LLPanelObjectTools::postBuild()
{
+ refresh();
return TRUE;
}
@@ -1191,7 +1151,7 @@ void LLPanelObjectTools::onClickSetBySelection(void* data)
panelp->childSetValue("target_avatar_name", name);
}
-void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
if (ids.empty() || names.empty()) return;
mTargetAvatar = ids[0];
diff --git a/indra/newview/llfloatergodtools.h b/indra/newview/llfloatergodtools.h
index ef5ce02749..aee9db78a3 100644
--- a/indra/newview/llfloatergodtools.h
+++ b/indra/newview/llfloatergodtools.h
@@ -198,9 +198,6 @@ public:
void refresh();
- void onClickKickAll();
- static bool confirmKick(const LLSD& notification, const LLSD& response);
- static bool finishKick(const LLSD& notification, const LLSD& response);
static void onDragSunPhase(LLUICtrl *ctrl, void *userdata);
void onClickFlushMapVisibilityCaches();
static bool flushMapVisibilityCachesConfirm(const LLSD& notification, const LLSD& response);
@@ -234,7 +231,7 @@ public:
void onChangeAnything();
void onApplyChanges();
void onClickSet();
- void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
+ void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids);
void onClickDeletePublicOwnedBy();
void onClickDeleteAllScriptedOwnedBy();
void onClickDeleteAllOwnedBy();
diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp
index bf484c6343..5d1864b4c8 100644
--- a/indra/newview/llfloatergroupinvite.cpp
+++ b/indra/newview/llfloatergroupinvite.cpp
@@ -112,7 +112,7 @@ LLFloaterGroupInvite::~LLFloaterGroupInvite()
}
// static
-void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, std::vector<LLUUID> *agent_ids)
+void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, uuid_vec_t *agent_ids)
{
const LLFloater::Params& floater_params = LLFloater::getDefaultParams();
S32 floater_header_size = floater_params.header_height;
diff --git a/indra/newview/llfloatergroupinvite.h b/indra/newview/llfloatergroupinvite.h
index b3f5d75ac1..68943724df 100644
--- a/indra/newview/llfloatergroupinvite.h
+++ b/indra/newview/llfloatergroupinvite.h
@@ -43,7 +43,7 @@ class LLFloaterGroupInvite
public:
virtual ~LLFloaterGroupInvite();
- static void showForGroup(const LLUUID &group_id, std::vector<LLUUID> *agent_ids = NULL);
+ static void showForGroup(const LLUUID &group_id, uuid_vec_t *agent_ids = NULL);
protected:
LLFloaterGroupInvite(const LLUUID& group_id = LLUUID::null);
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index 61568df12e..6b754bd065 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -611,7 +611,6 @@ LLImagePreviewAvatar::LLImagePreviewAvatar(S32 width, S32 height) : LLViewerDyna
mCameraZoom = 1.f;
mDummyAvatar = (LLVOAvatar*)gObjectList.createObjectViewer(LL_PCODE_LEGACY_AVATAR, gAgent.getRegion());
- mDummyAvatar->initInstance();
mDummyAvatar->createDrawable(&gPipeline);
mDummyAvatar->mIsDummy = TRUE;
mDummyAvatar->mSpecialRenderMode = 2;
@@ -688,6 +687,9 @@ BOOL LLImagePreviewAvatar::render()
mNeedsUpdate = FALSE;
LLVOAvatar* avatarp = mDummyAvatar;
+ gGL.pushUIMatrix();
+ gGL.loadUIIdentity();
+
glMatrixMode(GL_PROJECTION);
gGL.pushMatrix();
glLoadIdentity();
@@ -696,6 +698,7 @@ BOOL LLImagePreviewAvatar::render()
glMatrixMode(GL_MODELVIEW);
gGL.pushMatrix();
glLoadIdentity();
+
LLGLSUIDefault def;
gGL.color4f(0.15f, 0.2f, 0.3f, 1.f);
@@ -741,6 +744,7 @@ BOOL LLImagePreviewAvatar::render()
avatarPoolp->renderAvatars(avatarp); // renders only one avatar
}
+ gGL.popUIMatrix();
gGL.color4f(1,1,1,1);
return TRUE;
}
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index 844f0ac509..4bffd41d29 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -34,7 +34,7 @@
#include "llfloaterinventory.h"
-#include "llagent.h"
+#include "llagentcamera.h"
//#include "llfirstuse.h"
#include "llfloaterreg.h"
#include "llinventorymodel.h"
@@ -64,42 +64,6 @@ BOOL LLFloaterInventory::postBuild()
return TRUE;
}
-
-void LLFloaterInventory::draw()
-{
- updateTitle();
- LLFloater::draw();
-}
-
-void LLFloaterInventory::updateTitle()
-{
- LLLocale locale(LLLocale::USER_LOCALE);
- std::string item_count_string;
- LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount());
-
- LLStringUtil::format_map_t string_args;
- string_args["[ITEM_COUNT]"] = item_count_string;
- string_args["[FILTER]"] = mPanelMainInventory->getFilterText();
-
- if (LLInventoryModel::backgroundFetchActive())
- {
- setTitle(getString("TitleFetching", string_args));
- }
- else if (LLInventoryModel::isEverythingFetched())
- {
- setTitle(getString("TitleCompleted", string_args));
- }
- else
- {
- setTitle(getString("Title"));
- }
-}
-
-void LLFloaterInventory::changed(U32 mask)
-{
- updateTitle();
-}
-
LLInventoryPanel* LLFloaterInventory::getPanel()
{
if (mPanelMainInventory)
@@ -115,7 +79,7 @@ LLFloaterInventory* LLFloaterInventory::showAgentInventory()
instance_num = (instance_num + 1) % S32_MAX;
LLFloaterInventory* iv = NULL;
- if (!gAgent.cameraMouselook())
+ if (!gAgentCamera.cameraMouselook())
{
iv = LLFloaterReg::showTypedInstance<LLFloaterInventory>("inventory", LLSD(instance_num));
}
diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h
index b661c391a7..473d2b189d 100644
--- a/indra/newview/llfloaterinventory.h
+++ b/indra/newview/llfloaterinventory.h
@@ -63,13 +63,9 @@ public:
static void cleanup();
// Inherited functionality
- /*virtual*/ void changed(U32 mask);
- /*virtual*/ void draw();
/*virtual*/ void onOpen(const LLSD& key);
LLInventoryPanel* getPanel();
-protected:
- void updateTitle();
private:
LLPanelMainInventory* mPanelMainInventory;
};
diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp
index 85186cee6b..100cbdb217 100644
--- a/indra/newview/llfloaterlagmeter.cpp
+++ b/indra/newview/llfloaterlagmeter.cpp
@@ -206,7 +206,7 @@ void LLFloaterLagMeter::determineNetwork()
// *FIXME: We can't blame a large ping time on anything in
// particular if the frame rate is low, because a low frame
- // rate is a sure recipe for crappy ping times right now until
+ // rate is a sure recipe for bad ping times right now until
// the network handlers are de-synched from the rendering.
F32 client_frame_time_ms = 1000.0f * LLViewerStats::getInstance()->mFPSStat.getMeanDuration();
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 26c6db9652..2ff483cd34 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -86,10 +86,12 @@
static std::string OWNER_ONLINE = "0";
static std::string OWNER_OFFLINE = "1";
static std::string OWNER_GROUP = "2";
+static std::string MATURITY = "[MATURITY]";
// constants used in callbacks below - syntactic sugar.
static const BOOL BUY_GROUP_LAND = TRUE;
static const BOOL BUY_PERSONAL_LAND = FALSE;
+LLPointer<LLParcelSelection> LLPanelLandGeneral::sSelectionForBuyPass = NULL;
// Statics
LLParcelSelectionObserver* LLFloaterLand::sObserver = NULL;
@@ -102,6 +104,22 @@ public:
virtual void changed() { LLFloaterLand::refreshAll(); }
};
+// class needed to get full access to textbox inside checkbox, because LLCheckBoxCtrl::setLabel() has string as its argument.
+// It was introduced while implementing EXT-4706
+class LLCheckBoxWithTBAcess : public LLCheckBoxCtrl
+{
+public:
+ LLTextBox* getTextBox()
+ {
+ return mLabel;
+ }
+};
+
+// inserts maturity info(icon and text) into target textbox
+// names_floater - pointer to floater which contains strings with maturity icons filenames
+// str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY]
+void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_floater, std::string str_to_parse);
+
//---------------------------------------------------------------------------
// LLFloaterLand
//---------------------------------------------------------------------------
@@ -554,7 +572,7 @@ void LLPanelLandGeneral::refresh()
if (regionp)
{
- mContentRating->setText(regionp->getSimAccessString());
+ insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY);
mLandType->setText(regionp->getSimProductName());
}
@@ -803,16 +821,19 @@ void LLPanelLandGeneral::refreshNames()
}
mTextGroup->setText(group);
- const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
- if(auth_buyer_id.notNull())
- {
- std::string name;
- name = LLSLURL::buildCommand("agent", auth_buyer_id, "inspect");
- mSaleInfoForSale2->setTextArg("[BUYER]", name);
- }
- else
+ if (parcel->getForSale())
{
- mSaleInfoForSale2->setTextArg("[BUYER]", getString("anyone"));
+ const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
+ if(auth_buyer_id.notNull())
+ {
+ std::string name;
+ name = LLSLURL::buildCommand("agent", auth_buyer_id, "inspect");
+ mSaleInfoForSale2->setTextArg("[BUYER]", name);
+ }
+ else
+ {
+ mSaleInfoForSale2->setTextArg("[BUYER]", getString("anyone"));
+ }
}
}
@@ -955,6 +976,8 @@ void LLPanelLandGeneral::onClickBuyPass(void* data)
args["PARCEL_NAME"] = parcel_name;
args["TIME"] = time;
+ // creating pointer on selection to avoid deselection of parcel until we are done with buying pass (EXT-6464)
+ sSelectionForBuyPass = LLViewerParcelMgr::getInstance()->getParcelSelection();
LLNotificationsUtil::add("LandBuyPass", args, LLSD(), cbBuyPass);
}
@@ -986,6 +1009,8 @@ bool LLPanelLandGeneral::cbBuyPass(const LLSD& notification, const LLSD& respons
// User clicked OK
LLViewerParcelMgr::getInstance()->buyPass();
}
+ // we are done with buying pass, additional selection is no longer needed
+ sSelectionForBuyPass = NULL;
return false;
}
@@ -1592,7 +1617,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
item_params.columns.add().value(object_count_str).font(FONT).column("count");
item_params.columns.add().value(LLDate((time_t)most_recent_time)).font(FONT).column("mostrecent").type("date");
- self->mOwnerList->addRow(item_params);
+ self->mOwnerList->addNameItemRow(item_params);
lldebugs << "object owner " << owner_id << " (" << (is_group_owned ? "group" : "agent")
<< ") owns " << object_count << " objects." << llendl;
@@ -2058,8 +2083,14 @@ void LLPanelLandOptions::refresh()
{
// not teen so fill in the data for the maturity control
mMatureCtrl->setVisible(TRUE);
- mMatureCtrl->setLabel(getString("mature_check_mature"));
- mMatureCtrl->setToolTip(getString("mature_check_mature_tooltip"));
+ LLStyle::Params style;
+ style.image(LLUI::getUIImage(gFloaterView->getParentFloater(this)->getString("maturity_icon_moderate")));
+ LLCheckBoxWithTBAcess* fullaccess_mature_ctrl = (LLCheckBoxWithTBAcess*)mMatureCtrl;
+ fullaccess_mature_ctrl->getTextBox()->setText(std::string("icon"),style);
+ fullaccess_mature_ctrl->getTextBox()->appendText(getString("mature_check_mature"), false);
+ fullaccess_mature_ctrl->setToolTip(getString("mature_check_mature_tooltip"));
+ fullaccess_mature_ctrl->reshape(fullaccess_mature_ctrl->getRect().getWidth(), fullaccess_mature_ctrl->getRect().getHeight(), FALSE);
+
// they can see the checkbox, but its disposition depends on the
// state of the region
LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
@@ -2460,19 +2491,26 @@ void LLPanelLandAccess::refresh()
}
}
+ LLCheckBoxWithTBAcess* maturity_checkbox = (LLCheckBoxWithTBAcess*) getChild<LLCheckBoxCtrl>( "public_access");
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if(region)
{
- std::string region_access = "(";
- region_access += region->getSimAccessString();
- region_access += ")";
- childSetLabelArg( "public_access", "[MATURITY]", region_access );
+ LLTextBox* maturity_textbox = maturity_checkbox->getTextBox();
+ insert_maturity_into_textbox(maturity_textbox, gFloaterView->getParentFloater(this), getString("allow_public_access"));
+ maturity_checkbox->reshape(maturity_checkbox->getRect().getWidth(), maturity_checkbox->getRect().getHeight(), FALSE);
}
else
{
- childSetLabelArg( "public_access", "[MATURITY]", std::string() );
- }
+ std::string maturity_string = getString("allow_public_access");
+ size_t maturity_pos = maturity_string.find(MATURITY);
+
+ if (maturity_pos != std::string::npos)
+ {
+ maturity_string.replace(maturity_pos, MATURITY.length(), std::string(""));
+ }
+ maturity_checkbox->setLabel(maturity_string);
+ }
if(parcel->getRegionDenyAnonymousOverride())
{
@@ -2741,7 +2779,7 @@ void LLPanelLandAccess::onClickAddAccess()
gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1,_2)) );
}
-void LLPanelLandAccess::callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLPanelLandAccess::callbackAvatarCBAccess(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
if (!names.empty() && !ids.empty())
{
@@ -2786,7 +2824,7 @@ void LLPanelLandAccess::onClickAddBanned()
}
// static
-void LLPanelLandAccess::callbackAvatarCBBanned(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLPanelLandAccess::callbackAvatarCBBanned(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
if (!names.empty() && !ids.empty())
{
@@ -2858,7 +2896,7 @@ void LLPanelLandCovenant::refresh()
LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
if (region_maturity)
{
- region_maturity->setText(region->getSimAccessString());
+ insert_maturity_into_textbox(region_maturity, gFloaterView->getParentFloater(this), MATURITY);
}
LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
@@ -2939,3 +2977,51 @@ void LLPanelLandCovenant::updateEstateOwnerName(const std::string& name)
if (editor) editor->setText(name);
}
}
+
+// inserts maturity info(icon and text) into target textbox
+// names_floater - pointer to floater which contains strings with maturity icons filenames
+// str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY]
+void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_floater, std::string str_to_parse)
+{
+ LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
+ if (!region)
+ return;
+
+ LLStyle::Params style;
+
+ U8 sim_access = region->getSimAccess();
+
+ switch(sim_access)
+ {
+ case SIM_ACCESS_PG:
+ style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_general")));
+ break;
+
+ case SIM_ACCESS_ADULT:
+ style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_adult")));
+ break;
+
+ case SIM_ACCESS_MATURE:
+ style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_moderate")));
+ break;
+
+ default:
+ break;
+ }
+
+ size_t maturity_pos = str_to_parse.find(MATURITY);
+
+ if (maturity_pos == std::string::npos)
+ {
+ return;
+ }
+
+ std::string text_before_rating = str_to_parse.substr(0, maturity_pos);
+ std::string text_after_rating = str_to_parse.substr(maturity_pos + MATURITY.length());
+
+ target_textbox->setText(text_before_rating);
+ // any text may be here instead of "icon" except ""
+ target_textbox->appendText(std::string("icon"), false, style);
+ target_textbox->appendText(LLViewerParcelMgr::getInstance()->getSelectionRegion()->getSimAccessString(), false);
+ target_textbox->appendText(text_after_rating, false);
+}
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index a4785e8f5b..0a743e5215 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -167,7 +167,7 @@ public:
static void onClickSet(void* data);
static void onClickClear(void* data);
static void onClickShow(void* data);
- static void callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data);
+ static void callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids, void* data);
static void finalizeAvatarPick(void* data);
static void callbackHighlightTransferable(S32 option, void* userdata);
static void onClickStartAuction(void*);
@@ -234,6 +234,11 @@ protected:
LLSafeHandle<LLParcelSelection>& mParcel;
+ // This pointer is needed to avoid parcel deselection until buying pass is completed or canceled.
+ // Deselection happened because of zero references to parcel selection, which took place when
+ // "Buy Pass" was called from popup menu(EXT-6464)
+ static LLPointer<LLParcelSelection> sSelectionForBuyPass;
+
static LLHandle<LLFloater> sBuyPassDialogHandle;
};
@@ -374,8 +379,8 @@ public:
void onClickAddAccess();
void onClickAddBanned();
- void callbackAvatarCBBanned(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
- void callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
+ void callbackAvatarCBBanned(const std::vector<std::string>& names, const uuid_vec_t& ids);
+ void callbackAvatarCBAccess(const std::vector<std::string>& names, const uuid_vec_t& ids);
protected:
LLNameListCtrl* mListAccess;
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index 051ab585e2..5677899dd9 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -41,7 +41,7 @@
#include "llglheaders.h"
// Viewer includes
-#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "llnetmap.h"
#include "lltracker.h"
@@ -196,7 +196,7 @@ void LLFloaterMap::draw()
setDirectionPos( mTextBoxSouthEast, rotation + F_PI + F_PI_BY_TWO + F_PI_BY_TWO / 2);
// Note: we can't just gAgent.check cameraMouselook() because the transition states are wrong.
- if( gAgent.cameraMouselook())
+ if(gAgentCamera.cameraMouselook())
{
setMouseOpaque(FALSE);
getDragHandle()->setMouseOpaque(FALSE);
@@ -215,6 +215,20 @@ void LLFloaterMap::draw()
LLFloater::draw();
}
+// virtual
+void LLFloaterMap::onFocusReceived()
+{
+ setBackgroundOpaque(true);
+ LLPanel::onFocusReceived();
+}
+
+// virtual
+void LLFloaterMap::onFocusLost()
+{
+ setBackgroundOpaque(false);
+ LLPanel::onFocusLost();
+}
+
void LLFloaterMap::reshape(S32 width, S32 height, BOOL called_from_parent)
{
LLFloater::reshape(width, height, called_from_parent);
diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h
index 6c9138c6a7..9ff2f03180 100644
--- a/indra/newview/llfloatermap.h
+++ b/indra/newview/llfloatermap.h
@@ -53,6 +53,8 @@ public:
/*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
/*virtual*/ void draw();
+ /*virtual*/ void onFocusLost();
+ /*virtual*/ void onFocusReceived();
private:
void handleZoom(const LLSD& userdata);
diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp
index 62ec17f89a..ee68faf84b 100644
--- a/indra/newview/llfloatermediasettings.cpp
+++ b/indra/newview/llfloatermediasettings.cpp
@@ -242,6 +242,12 @@ void LLFloaterMediaSettings::onBtnApply( void* userdata )
sInstance->commitFields();
sInstance->apply();
+
+ sInstance->mInitialValues.clear();
+ sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues );
+ sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues );
+ sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues );
+
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index 159ce41b79..5c343ecb22 100644
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -169,16 +169,14 @@ void LLFloaterNameDesc::onBtnOK( )
{
childDisable("ok_btn"); // don't allow inadvertent extra uploads
- LLAssetStorage::LLStoreAssetCallback callback = NULL;
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass).
- void *nruserdata = NULL;
std::string display_name = LLStringUtil::null;
upload_new_resource(mFilenameAndPath, // file
childGetValue("name_form").asString(),
childGetValue("description_form").asString(),
- 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
+ LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
- display_name, callback, expected_upload_cost, nruserdata);
+ display_name, NULL, expected_upload_cost);
closeFloater(false);
}
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
index 94b5ebba00..b744bff084 100644
--- a/indra/newview/llfloaternotificationsconsole.cpp
+++ b/indra/newview/llfloaternotificationsconsole.cpp
@@ -210,7 +210,7 @@ void LLFloaterNotificationConsole::addChannel(const std::string& name, bool open
{
LLLayoutStack& stack = getChildRef<LLLayoutStack>("notification_channels");
LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(name);
- stack.addPanel(panelp, 0, NOTIFICATION_PANEL_HEADER_HEIGHT, TRUE, TRUE, LLLayoutStack::ANIMATE);
+ stack.addPanel(panelp, 0, NOTIFICATION_PANEL_HEADER_HEIGHT, S32_MAX, S32_MAX, TRUE, TRUE, LLLayoutStack::ANIMATE);
LLButton& header_button = panelp->getChildRef<LLButton>("header");
header_button.setToggleState(!open);
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index ec50ed596c..71bfae316a 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -121,12 +121,12 @@ void LLFloaterOpenObject::refresh()
{
// this folder is coming from an object, as there is only one folder in an object, the root,
// we need to collect the entire contents and handle them as a group
- InventoryObjectList inventory_objects;
+ LLInventoryObject::object_list_t inventory_objects;
object->getInventoryContents(inventory_objects);
if (!inventory_objects.empty())
{
- for (InventoryObjectList::iterator it = inventory_objects.begin();
+ for (LLInventoryObject::object_list_t::iterator it = inventory_objects.begin();
it != inventory_objects.end();
++it)
{
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 853693b927..60ce16aafb 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -107,9 +107,14 @@
#include "llpluginclassmedia.h"
#include "llteleporthistorystorage.h"
+#include "lllogininstance.h" // to check if logged in yet
+
const F32 MAX_USER_FAR_CLIP = 512.f;
const F32 MIN_USER_FAR_CLIP = 64.f;
+//control value for middle mouse as talk2push button
+const static std::string MIDDLE_MOUSE_CV = "MiddleMouse";
+
class LLVoiceSetKeyDialog : public LLModalDialog
{
public:
@@ -179,8 +184,6 @@ void LLVoiceSetKeyDialog::onCancel(void* user_data)
// if creating/destroying these is too slow, we'll need to create
// a static member and update all our static callbacks
-void handleNameTagOptionChanged(const LLSD& newvalue);
-viewer_media_t get_web_media();
bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response);
//bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater);
@@ -188,23 +191,14 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response
void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator);
-viewer_media_t get_web_media()
-{
- viewer_media_t media_source = LLViewerMedia::newMediaImpl(LLUUID::null);
- media_source->initializeMedia("text/html");
- return media_source;
-}
-
-
bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if ( option == 0 ) // YES
{
// clean web
- viewer_media_t media_source = get_web_media();
- if (media_source && media_source->hasMedia())
- media_source->getMediaPlugin()->clear_cache();
+ LLViewerMedia::clearAllCaches();
+ LLViewerMedia::clearAllCookies();
// clean nav bar history
LLNavigationBar::getInstance()->clearHistoryCache();
@@ -225,15 +219,6 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response
return false;
}
-void handleNameTagOptionChanged(const LLSD& newvalue)
-{
- S32 name_tag_option = S32(newvalue);
- if(name_tag_option==2)
- {
- gSavedSettings.setBOOL("SmallAvatarNames", TRUE);
- }
-}
-
/*bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
@@ -323,10 +308,9 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
mCommitCallbackRegistrar.add("Pref.getUIColor", boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2));
-
+ mCommitCallbackRegistrar.add("Pref.MaturitySettings", boost::bind(&LLFloaterPreference::onChangeMaturity, this));
+
sSkin = gSavedSettings.getString("SkinCurrent");
-
- gSavedSettings.getControl("AvatarNameTagMode")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged, _2));
}
BOOL LLFloaterPreference::postBuild()
@@ -335,11 +319,13 @@ BOOL LLFloaterPreference::postBuild()
gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&LLNearbyChat::processChatHistoryStyleUpdate, _2));
+ gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLIMFloater::processChatHistoryStyleUpdate, _2));
+
+ gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLNearbyChat::processChatHistoryStyleUpdate, _2));
+
LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core");
if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
tabcontainer->selectFirstTab();
- S32 show_avatar_nametag_options = gSavedSettings.getS32("AvatarNameTagMode");
- handleNameTagOptionChanged(LLSD(show_avatar_nametag_options));
std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
childSetText("cache_location", cache_location);
@@ -421,17 +407,14 @@ void LLFloaterPreference::apply()
std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
childSetText("cache_location", cache_location);
- viewer_media_t media_source = get_web_media();
- if (media_source && media_source->hasMedia())
+ LLViewerMedia::setCookiesEnabled(childGetValue("cookies_enabled"));
+
+ if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port"))
{
- media_source->getMediaPlugin()->enable_cookies(childGetValue("cookies_enabled"));
- if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port"))
- {
- bool proxy_enable = childGetValue("web_proxy_enabled");
- std::string proxy_address = childGetValue("web_proxy_editor");
- int proxy_port = childGetValue("web_proxy_port");
- media_source->getMediaPlugin()->proxy_setup(proxy_enable, proxy_address, proxy_port);
- }
+ bool proxy_enable = childGetValue("web_proxy_enabled");
+ std::string proxy_address = childGetValue("web_proxy_editor");
+ int proxy_port = childGetValue("web_proxy_port");
+ LLViewerMedia::setProxyConfig(proxy_enable, proxy_address, proxy_port);
}
// LLWString busy_response = utf8str_to_wstring(getChild<LLUICtrl>("busy_response")->getValue().asString());
@@ -520,19 +503,24 @@ void LLFloaterPreference::onOpen(const LLSD& key)
// if they're not adult or a god, they shouldn't see the adult selection, so delete it
if (!gAgent.isAdult() && !gAgent.isGodlike())
{
- // we're going to remove the adult entry from the combo. This obviously depends
- // on the order of items in the XML file, but there doesn't seem to be a reasonable
- // way to depend on the field in XML called 'name'.
- maturity_combo->remove(0);
+ // we're going to remove the adult entry from the combo
+ LLScrollListCtrl* maturity_list = maturity_combo->findChild<LLScrollListCtrl>("ComboBox");
+ if (maturity_list)
+ {
+ maturity_list->deleteItems(LLSD(SIM_ACCESS_ADULT));
+ }
}
childSetVisible("maturity_desired_combobox", true);
- childSetVisible("maturity_desired_textbox", false);
+ childSetVisible("maturity_desired_textbox", false);
}
else
{
childSetText("maturity_desired_textbox", maturity_combo->getSelectedItemLabel());
childSetVisible("maturity_desired_combobox", false);
}
+
+ // Display selected maturity icons.
+ onChangeMaturity();
// Enabled/disabled popups, might have been changed by user actions
// while preferences floater was closed.
@@ -872,6 +860,8 @@ void LLFloaterPreference::refreshEnabledState()
ctrl_wind_light->setEnabled(ctrl_shader_enable->getEnabled() && shaders);
// now turn off any features that are unavailable
disableUnavailableSettings();
+
+ childSetEnabled ("block_list", LLLoginInstance::getInstance()->authSuccess());
}
void LLFloaterPreference::disableUnavailableSettings()
@@ -977,7 +967,8 @@ void LLFloaterPreference::cleanupBadSetting()
if (gSavedPerAccountSettings.getString("BusyModeResponse2") == "|TOKEN COPY BusyModeResponse|")
{
llwarns << "cleaning old BusyModeResponse" << llendl;
- gSavedPerAccountSettings.setString("BusyModeResponse2", gSavedPerAccountSettings.getText("BusyModeResponse"));
+ //LLTrans::getString("BusyModeResponseDefault") is used here for localization (EXT-5885)
+ gSavedPerAccountSettings.setString("BusyModeResponse2", LLTrans::getString("BusyModeResponseDefault"));
}
}
@@ -999,9 +990,17 @@ void LLFloaterPreference::setKey(KEY key)
void LLFloaterPreference::onClickSetMiddleMouse()
{
- childSetValue("modifier_combo", "MiddleMouse");
+ LLUICtrl* p2t_line_editor = getChild<LLUICtrl>("modifier_combo");
+
// update the control right away since we no longer wait for apply
- getChild<LLUICtrl>("modifier_combo")->onCommit();
+ p2t_line_editor->setControlValue(MIDDLE_MOUSE_CV);
+
+ //push2talk button "middle mouse" control value is in English, need to localize it for presentation
+ LLPanel* advanced_preferences = dynamic_cast<LLPanel*>(p2t_line_editor->getParent());
+ if (advanced_preferences)
+ {
+ p2t_line_editor->setValue(advanced_preferences->getString("middle_mouse"));
+ }
}
/*
void LLFloaterPreference::onClickSkipDialogs()
@@ -1208,7 +1207,19 @@ void LLFloaterPreference::applyResolution()
refresh();
}
+void LLFloaterPreference::onChangeMaturity()
+{
+ U8 sim_access = gSavedSettings.getU32("PreferredMaturity");
+
+ getChild<LLIconCtrl>("rating_icon_general")->setVisible(sim_access == SIM_ACCESS_PG
+ || sim_access == SIM_ACCESS_MATURE
+ || sim_access == SIM_ACCESS_ADULT);
+ getChild<LLIconCtrl>("rating_icon_moderate")->setVisible(sim_access == SIM_ACCESS_MATURE
+ || sim_access == SIM_ACCESS_ADULT);
+
+ getChild<LLIconCtrl>("rating_icon_adult")->setVisible(sim_access == SIM_ACCESS_ADULT);
+}
void LLFloaterPreference::applyUIColor(LLUICtrl* ctrl, const LLSD& param)
@@ -1268,7 +1279,7 @@ BOOL LLPanelPreference::postBuild()
if (hasChild("media_enabled"))
{
bool media_enabled = gSavedSettings.getBOOL("AudioStreamingMedia");
- getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2));
+
getChild<LLCheckBoxCtrl>("media_enabled")->set(media_enabled);
getChild<LLCheckBoxCtrl>("autoplay_enabled")->setEnabled(media_enabled);
}
@@ -1276,7 +1287,21 @@ BOOL LLPanelPreference::postBuild()
{
getChild<LLCheckBoxCtrl>("music_enabled")->set(gSavedSettings.getBOOL("AudioStreamingMusic"));
}
-
+ if (hasChild("voice_call_friends_only_check"))
+ {
+ getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2));
+ }
+
+ // Panel Advanced
+ if (hasChild("modifier_combo"))
+ {
+ //localizing if push2talk button is set to middle mouse
+ if (MIDDLE_MOUSE_CV == childGetValue("modifier_combo").asString())
+ {
+ childSetValue("modifier_combo", getString("middle_mouse"));
+ }
+ }
+
apply();
return true;
}
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 93b39d72bc..71aa5d3189 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -134,8 +134,9 @@ public:
void onCommitMediaEnabled();
void onCommitMusicEnabled();
void applyResolution();
+ void onChangeMaturity();
void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
- void getUIColor(LLUICtrl* ctrl, const LLSD& param);
+ void getUIColor(LLUICtrl* ctrl, const LLSD& param);
void buildPopupLists();
static void refreshSkin(void* data);
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index 5c0593ad29..bb9d151cd2 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -38,12 +38,12 @@
#include "llcachename.h"
#include "lldbstrings.h"
#include "llfloaterreg.h"
-#include "llinventory.h"
#include "llagent.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
#include "llavataractions.h"
+#include "llinventorydefines.h"
#include "llinventoryobserver.h"
#include "llinventorymodel.h"
#include "lllineeditor.h"
@@ -380,9 +380,9 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
if (item->getType() == LLAssetType::AT_OBJECT)
{
U32 flags = item->getFlags();
- slam_perm = flags & LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
- overwrite_everyone = flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
- overwrite_group = flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+ slam_perm = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM;
+ overwrite_everyone = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+ overwrite_group = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
}
std::string perm_string;
@@ -693,7 +693,7 @@ void LLFloaterProperties::onCommitPermissions()
if((perm.getMaskNextOwner()!=item->getPermissions().getMaskNextOwner())
&& (item->getType() == LLAssetType::AT_OBJECT))
{
- flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
+ flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM;
}
// If everyone permissions have changed (and this is an object)
// then set the overwrite everyone permissions flag so they
@@ -701,7 +701,7 @@ void LLFloaterProperties::onCommitPermissions()
if ((perm.getMaskEveryone()!=item->getPermissions().getMaskEveryone())
&& (item->getType() == LLAssetType::AT_OBJECT))
{
- flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+ flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
}
// If group permissions have changed (and this is an object)
// then set the overwrite group permissions flag so they
@@ -709,7 +709,7 @@ void LLFloaterProperties::onCommitPermissions()
if ((perm.getMaskGroup()!=item->getPermissions().getMaskGroup())
&& (item->getType() == LLAssetType::AT_OBJECT))
{
- flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+ flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
}
new_item->setFlags(flags);
if(mObjectID.isNull())
@@ -821,7 +821,7 @@ void LLFloaterProperties::updateSaleInfo()
if (item->getType() == LLAssetType::AT_OBJECT)
{
U32 flags = new_item->getFlags();
- flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE;
+ flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_SALE;
new_item->setFlags(flags);
}
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index d54736e942..3758cbe74f 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -610,7 +610,7 @@ void LLPanelRegionGeneralInfo::onClickKick()
parent_floater->addDependentFloater(child_floater);
}
-void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
if (names.empty() || ids.empty()) return;
if(ids[0].notNull())
@@ -848,7 +848,7 @@ void LLPanelRegionDebugInfo::onClickChooseAvatar()
}
-void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
if (ids.empty() || names.empty()) return;
mTargetAvatar = ids[0];
@@ -1531,7 +1531,7 @@ void LLPanelEstateInfo::onClickKickUser()
parent_floater->addDependentFloater(child_floater);
}
-void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
if (names.empty() || ids.empty()) return;
@@ -1616,7 +1616,6 @@ bool LLPanelEstateInfo::isLindenEstate()
return (estate_id <= ESTATE_LAST_LINDEN);
}
-typedef std::vector<LLUUID> AgentOrGroupIDsVector;
struct LLEstateAccessChangeInfo
{
LLEstateAccessChangeInfo(const LLSD& sd)
@@ -1637,7 +1636,7 @@ struct LLEstateAccessChangeInfo
LLSD sd;
sd["name"] = mDialogName;
sd["operation"] = (S32)mOperationFlag;
- for (AgentOrGroupIDsVector::const_iterator it = mAgentOrGroupIDs.begin();
+ for (uuid_vec_t::const_iterator it = mAgentOrGroupIDs.begin();
it != mAgentOrGroupIDs.end();
++it)
{
@@ -1648,7 +1647,7 @@ struct LLEstateAccessChangeInfo
U32 mOperationFlag; // ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc.
std::string mDialogName;
- AgentOrGroupIDsVector mAgentOrGroupIDs; // List of agent IDs to apply to this change
+ uuid_vec_t mAgentOrGroupIDs; // List of agent IDs to apply to this change
};
// Special case callback for groups, since it has different callback format than names
@@ -1716,7 +1715,7 @@ bool LLPanelEstateInfo::accessAddCore2(const LLSD& notification, const LLSD& res
}
// static
-void LLPanelEstateInfo::accessAddCore3(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data)
+void LLPanelEstateInfo::accessAddCore3(const std::vector<std::string>& names, const uuid_vec_t& ids, void* data)
{
LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data;
if (!change_info) return;
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 8d315bdb78..482ebb3303 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -168,7 +168,7 @@ public:
protected:
virtual BOOL sendUpdate();
void onClickKick();
- void onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
+ void onKickCommit(const std::vector<std::string>& names, const uuid_vec_t& ids);
static void onClickKickAll(void* userdata);
bool onKickAllCommit(const LLSD& notification, const LLSD& response);
static void onClickMessage(void* userdata);
@@ -193,7 +193,7 @@ protected:
virtual BOOL sendUpdate();
void onClickChooseAvatar();
- void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
+ void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids);
static void onClickReturn(void *);
bool callbackReturn(const LLSD& notification, const LLSD& response);
static void onClickTopColliders(void*);
@@ -284,7 +284,7 @@ public:
// Core methods for all above add/remove button clicks
static void accessAddCore(U32 operation_flag, const std::string& dialog_name);
static bool accessAddCore2(const LLSD& notification, const LLSD& response);
- static void accessAddCore3(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data);
+ static void accessAddCore3(const std::vector<std::string>& names, const uuid_vec_t& ids, void* data);
static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name);
static bool accessRemoveCore2(const LLSD& notification, const LLSD& response);
@@ -296,7 +296,7 @@ public:
// Send the actual EstateOwnerRequest "estateaccessdelta" message
static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id);
- void onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
+ void onKickUserCommit(const std::vector<std::string>& names, const uuid_vec_t& ids);
static void onClickMessageEstate(void* data);
bool onMessageCommit(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 0f3c176cea..b42b34835d 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -84,6 +84,8 @@
#include "llassetuploadresponders.h"
#include "llagentui.h"
+#include "lltrans.h"
+
const U32 INCLUDE_SCREENSHOT = 0x01 << 0;
//-----------------------------------------------------------------------------
@@ -306,7 +308,7 @@ void LLFloaterReporter::onClickSelectAbuser()
gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterReporter::callbackAvatarID, this, _1, _2), FALSE, TRUE ));
}
-void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
if (ids.empty() || names.empty()) return;
@@ -372,8 +374,7 @@ void LLFloaterReporter::onClickSend(void *userdata)
return;
}
-
- LLUploadDialog::modalUploadDialog("Uploading...\n\nReport");
+ LLUploadDialog::modalUploadDialog(LLTrans::getString("uploading_abuse_report"));
// *TODO don't upload image if checkbox isn't checked
std::string url = gAgent.getRegion()->getCapability("SendUserReport");
std::string sshot_url = gAgent.getRegion()->getCapability("SendUserReportWithScreenshot");
diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h
index 7c6473f975..23784b7650 100644
--- a/indra/newview/llfloaterreporter.h
+++ b/indra/newview/llfloaterreporter.h
@@ -123,7 +123,7 @@ private:
void setPosBox(const LLVector3d &pos);
void enableControls(BOOL own_avatar);
void getObjectInfo(const LLUUID& object_id);
- void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
+ void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids);
void setFromAvatar(const LLUUID& avatar_id, const std::string& avatar_name = LLStringUtil::null);
private:
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index fdf128945e..4792d761d8 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -110,7 +110,7 @@ BOOL LLFloaterScriptLimits::postBuild()
if(!mTab)
{
- llinfos << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << llendl;
+ llwarns << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << llendl;
return FALSE;
}
@@ -214,7 +214,7 @@ void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content)
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(!instance)
{
- llinfos << "Failed to get llfloaterscriptlimits instance" << llendl;
+ llwarns << "Failed to get llfloaterscriptlimits instance" << llendl;
}
}
@@ -227,7 +227,7 @@ void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content)
void fetchScriptLimitsRegionInfoResponder::error(U32 status, const std::string& reason)
{
- llinfos << "Error from responder " << reason << llendl;
+ llwarns << "Error from responder " << reason << llendl;
}
void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref)
@@ -281,26 +281,40 @@ void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref)
OSMessageBox(nice_llsd.str(), "summary response:", 0);
- llinfos << "summary response:" << *content << llendl;
+ llwarns << "summary response:" << *content << llendl;
#endif
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(!instance)
{
- llinfos << "Failed to get llfloaterscriptlimits instance" << llendl;
+ llwarns << "Failed to get llfloaterscriptlimits instance" << llendl;
}
else
{
LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- panel_memory->setRegionSummary(content);
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
+ if(panel_memory)
+ {
+ panel_memory->childSetValue("loading_text", LLSD(std::string("")));
+
+ LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn");
+ if(btn)
+ {
+ btn->setEnabled(true);
+ }
+
+ panel_memory->setRegionSummary(content);
+ }
+ }
}
}
void fetchScriptLimitsRegionSummaryResponder::error(U32 status, const std::string& reason)
{
- llinfos << "Error from responder " << reason << llendl;
+ llwarns << "Error from responder " << reason << llendl;
}
void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content_ref)
@@ -383,7 +397,7 @@ result (map)
if(!instance)
{
- llinfos << "Failed to get llfloaterscriptlimits instance" << llendl;
+ llwarns << "Failed to get llfloaterscriptlimits instance" << llendl;
}
else
{
@@ -397,19 +411,19 @@ result (map)
}
else
{
- llinfos << "Failed to get scriptlimits memory panel" << llendl;
+ llwarns << "Failed to get scriptlimits memory panel" << llendl;
}
}
else
{
- llinfos << "Failed to get scriptlimits_panels" << llendl;
+ llwarns << "Failed to get scriptlimits_panels" << llendl;
}
}
}
void fetchScriptLimitsRegionDetailsResponder::error(U32 status, const std::string& reason)
{
- llinfos << "Error from responder " << reason << llendl;
+ llwarns << "Error from responder " << reason << llendl;
}
void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)
@@ -471,7 +485,7 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)
if(!instance)
{
- llinfos << "Failed to get llfloaterscriptlimits instance" << llendl;
+ llwarns << "Failed to get llfloaterscriptlimits instance" << llendl;
}
else
{
@@ -481,29 +495,46 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)
LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel");
if(panel)
{
+ panel->childSetValue("loading_text", LLSD(std::string("")));
+
+ LLButton* btn = panel->getChild<LLButton>("refresh_list_btn");
+ if(btn)
+ {
+ btn->setEnabled(true);
+ }
+
panel->setAttachmentDetails(content);
}
else
{
- llinfos << "Failed to get script_limits_my_avatar_panel" << llendl;
+ llwarns << "Failed to get script_limits_my_avatar_panel" << llendl;
}
}
else
{
- llinfos << "Failed to get scriptlimits_panels" << llendl;
+ llwarns << "Failed to get scriptlimits_panels" << llendl;
}
}
}
void fetchScriptLimitsAttachmentInfoResponder::error(U32 status, const std::string& reason)
{
- llinfos << "Error from responder " << reason << llendl;
+ llwarns << "Error from responder " << reason << llendl;
}
///----------------------------------------------------------------------------
// Memory Panel
///----------------------------------------------------------------------------
+LLPanelScriptLimitsRegionMemory::~LLPanelScriptLimitsRegionMemory()
+{
+ if(!mParcelId.isNull())
+ {
+ LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
+ mParcelId.setNull();
+ }
+};
+
BOOL LLPanelScriptLimitsRegionMemory::getLandScriptResources()
{
LLSD body;
@@ -544,6 +575,11 @@ void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id)
{
if (!parcel_id.isNull())
{
+ if(!mParcelId.isNull())
+ {
+ LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
+ mParcelId.setNull();
+ }
LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);
LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);
}
@@ -557,7 +593,7 @@ void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id)
// virtual
void LLPanelScriptLimitsRegionMemory::setErrorStatus(U32 status, const std::string& reason)
{
- llerrs << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
+ llwarns << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
}
// callback from the name cache with an owner name to add to the list
@@ -597,7 +633,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
if(!list)
{
- llinfos << "Error getting the scripts_list control" << llendl;
+ llwarns << "Error getting the scripts_list control" << llendl;
return;
}
@@ -608,7 +644,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels);
childSetValue("parcels_listed", LLSD(msg_parcels));
- std::vector<LLUUID> names_requested;
+ uuid_vec_t names_requested;
// This makes the assumption that all objects will have the same set
// of attributes, ie they will all have, or none will have locations
@@ -734,8 +770,6 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
// save the structure to make object return easier
mContent = content;
-
- childSetValue("loading_text", LLSD(std::string("")));
}
void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content)
@@ -754,7 +788,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content)
}
else
{
- llinfos << "summary doesn't contain memory info" << llendl;
+ llwarns << "summary doesn't contain memory info" << llendl;
return;
}
@@ -772,7 +806,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content)
}
else
{
- llinfos << "summary doesn't contain urls info" << llendl;
+ llwarns << "summary doesn't contain urls info" << llendl;
return;
}
@@ -919,8 +953,6 @@ void LLPanelScriptLimitsRegionMemory::clearList()
// static
void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata)
{
- llinfos << "LLPanelRegionGeneralInfo::onClickRefresh" << llendl;
-
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(instance)
{
@@ -930,6 +962,13 @@ void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata)
LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
if(panel_memory)
{
+ //To stop people from hammering the refesh button and accidentally dosing themselves - enough requests can crash the viewer!
+ //turn the button off, then turn it on when we get a response
+ LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn");
+ if(btn)
+ {
+ btn->setEnabled(false);
+ }
panel_memory->clearList();
panel_memory->StartRequestChain();
@@ -969,7 +1008,6 @@ void LLPanelScriptLimitsRegionMemory::showBeacon()
// static
void LLPanelScriptLimitsRegionMemory::onClickHighlight(void* userdata)
{
- llinfos << "LLPanelRegionGeneralInfo::onClickHighlight" << llendl;
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(instance)
{
@@ -1075,7 +1113,6 @@ void LLPanelScriptLimitsRegionMemory::returnObjects()
// static
void LLPanelScriptLimitsRegionMemory::onClickReturn(void* userdata)
{
- llinfos << "LLPanelRegionGeneralInfo::onClickReturn" << llendl;
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(instance)
{
@@ -1178,6 +1215,12 @@ void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content)
setAttachmentSummary(content);
childSetValue("loading_text", LLSD(std::string("")));
+
+ LLButton* btn = getChild<LLButton>("refresh_list_btn");
+ if(btn)
+ {
+ btn->setEnabled(true);
+ }
}
BOOL LLPanelScriptLimitsAttachment::postBuild()
@@ -1218,7 +1261,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content)
}
else
{
- llinfos << "attachment details don't contain memory summary info" << llendl;
+ llwarns << "attachment details don't contain memory summary info" << llendl;
return;
}
@@ -1236,7 +1279,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content)
}
else
{
- llinfos << "attachment details don't contain urls summary info" << llendl;
+ llwarns << "attachment details don't contain urls summary info" << llendl;
return;
}
@@ -1267,16 +1310,23 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content)
// static
void LLPanelScriptLimitsAttachment::onClickRefresh(void* userdata)
-{
- llinfos << "Refresh clicked" << llendl;
-
+{
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(instance)
{
LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
LLPanelScriptLimitsAttachment* panel_attachments = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel");
+ LLButton* btn = panel_attachments->getChild<LLButton>("refresh_list_btn");
+
+ //To stop people from hammering the refesh button and accidentally dosing themselves - enough requests can crash the viewer!
+ //turn the button off, then turn it on when we get a response
+ if(btn)
+ {
+ btn->setEnabled(false);
+ }
panel_attachments->clearList();
panel_attachments->requestAttachmentDetails();
+
return;
}
else
diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h
index 0cba4d72f2..3c32b9f701 100644
--- a/indra/newview/llfloaterscriptlimits.h
+++ b/indra/newview/llfloaterscriptlimits.h
@@ -153,10 +153,7 @@ public:
mParcelMemoryMax(0),
mParcelMemoryUsed(0) {};
- ~LLPanelScriptLimitsRegionMemory()
- {
- LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
- };
+ ~LLPanelScriptLimitsRegionMemory();
// LLPanel
virtual BOOL postBuild();
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index eae6121e79..980b456497 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -96,7 +96,7 @@ private:
static void doShowObjects(void *userdata);
static bool callbackHighlightTransferable(const LLSD& notification, const LLSD& response);
- void callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
+ void callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids);
public:
virtual BOOL postBuild();
@@ -391,7 +391,7 @@ void LLFloaterSellLandUI::doSelectAgent()
addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterSellLandUI::callbackAvatarPick, this, _1, _2), FALSE, TRUE));
}
-void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
LLParcel* parcel = mParcelSelection->getParcel();
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index a0031f0193..03389e62d7 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -38,28 +38,34 @@
// Viewer includes
#include "llagent.h"
-#include "llcallbacklist.h"
-#include "llcriticaldamp.h"
-#include "llui.h"
-#include "llfocusmgr.h"
+#include "llagentcamera.h"
+#include "llagentui.h"
+#include "llavatarpropertiesprocessor.h"
+#include "llbottomtray.h"
#include "llbutton.h"
+#include "llcallbacklist.h"
+#include "llcheckboxctrl.h"
#include "llcombobox.h"
+#include "llcriticaldamp.h"
#include "lleconomy.h"
+#include "llfloaterpostcard.h"
+#include "llfocusmgr.h"
+#include "lllandmarkactions.h"
+#include "llradiogroup.h"
#include "llsliderctrl.h"
+#include "llslurl.h"
#include "llspinctrl.h"
-#include "llviewercontrol.h"
+#include "lltoolfocus.h"
+#include "lltoolmgr.h"
+#include "llui.h"
#include "lluictrlfactory.h"
-#include "llviewerstats.h"
#include "llviewercamera.h"
-#include "llviewerwindow.h"
+#include "llviewercontrol.h"
#include "llviewermenufile.h" // upload_new_resource()
-#include "llfloaterpostcard.h"
-#include "llcheckboxctrl.h"
-#include "llradiogroup.h"
-#include "lltoolfocus.h"
-#include "lltoolmgr.h"
+#include "llviewerstats.h"
+#include "llviewerwindow.h"
+#include "llweb.h"
#include "llworld.h"
-#include "llagentui.h"
// Linden library includes
#include "llfontgl.h"
@@ -113,6 +119,7 @@ public:
enum ESnapshotType
{
SNAPSHOT_POSTCARD,
+ SNAPSHOT_WEB,
SNAPSHOT_TEXTURE,
SNAPSHOT_LOCAL
};
@@ -161,8 +168,9 @@ public:
void setSnapshotBufferType(LLViewerWindow::ESnapshotType type) { mSnapshotBufferType = type; }
void updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail = FALSE, F32 delay = 0.f);
LLFloaterPostcard* savePostcard();
- void saveTexture();
+ void saveTexture(bool set_as_profile_pic = false);
BOOL saveLocal();
+ void saveWeb(std::string url);
BOOL setThumbnailImageSize() ;
void generateThumbnailImage(BOOL force_update = FALSE) ;
@@ -171,6 +179,9 @@ public:
// Returns TRUE when snapshot generated, FALSE otherwise.
static BOOL onIdle( void* snapshot_preview );
+
+ // callback for region name resolve
+ void regionNameCallback(std::string url, LLSD body, const std::string& name, S32 x, S32 y, S32 z);
private:
LLColor4 mColor;
@@ -292,7 +303,7 @@ F32 LLSnapshotLivePreview::getAspect()
F32 image_aspect_ratio = ((F32)mWidth[mCurImageIndex]) / ((F32)mHeight[mCurImageIndex]);
F32 window_aspect_ratio = ((F32)getRect().getWidth()) / ((F32)getRect().getHeight());
- if (!mKeepAspectRatio)//gSavedSettings.getBOOL("KeepAspectForSnapshot"))
+ if (!mKeepAspectRatio)
{
return image_aspect_ratio;
}
@@ -625,20 +636,20 @@ BOOL LLSnapshotLivePreview::setThumbnailImageSize()
F32 window_aspect_ratio = ((F32)window_width) / ((F32)window_height);
// UI size for thumbnail
- S32 max_width = LLFloaterSnapshot::getUIWinWidth() - 20;
- S32 max_height = 90;
+ LLFloater* floater = LLFloaterReg::getInstance("snapshot");
+ mThumbnailWidth = floater->getChild<LLView>("thumbnail_placeholder")->getRect().getWidth();
+ mThumbnailHeight = floater->getChild<LLView>("thumbnail_placeholder")->getRect().getHeight();
- if (window_aspect_ratio > (F32)max_width / max_height)
+
+ if (window_aspect_ratio > (F32)mThumbnailWidth / mThumbnailHeight)
{
// image too wide, shrink to width
- mThumbnailWidth = max_width;
- mThumbnailHeight = llround((F32)max_width / window_aspect_ratio);
+ mThumbnailHeight = llround((F32)mThumbnailWidth / window_aspect_ratio);
}
else
{
// image too tall, shrink to height
- mThumbnailHeight = max_height;
- mThumbnailWidth = llround((F32)max_height * window_aspect_ratio);
+ mThumbnailWidth = llround((F32)mThumbnailHeight * window_aspect_ratio);
}
if(mThumbnailWidth > window_width || mThumbnailHeight > window_height)
@@ -824,10 +835,21 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
{
// delete any existing image
previewp->mFormattedImage = NULL;
+
// now create the new one of the appropriate format.
- // note: postcards hardcoded to use jpeg always.
- LLFloaterSnapshot::ESnapshotFormat format = previewp->getSnapshotType() == SNAPSHOT_POSTCARD
- ? LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG : previewp->getSnapshotFormat();
+ // note: postcards and web hardcoded to use jpeg always.
+ LLFloaterSnapshot::ESnapshotFormat format;
+
+ if (previewp->getSnapshotType() == SNAPSHOT_POSTCARD ||
+ previewp->getSnapshotType() == SNAPSHOT_WEB)
+ {
+ format = LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG;
+ }
+ else
+ {
+ format = previewp->getSnapshotFormat();
+ }
+
switch(format)
{
case LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG:
@@ -892,7 +914,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
previewp->mSnapshotUpToDate = TRUE;
previewp->generateThumbnailImage(TRUE) ;
- previewp->mPosTakenGlobal = gAgent.getCameraPositionGlobal();
+ previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();
previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame
}
}
@@ -954,13 +976,21 @@ LLFloaterPostcard* LLSnapshotLivePreview::savePostcard()
return floater;
}
-void LLSnapshotLivePreview::saveTexture()
+// Callback for asset upload
+void profile_pic_upload_callback(const LLUUID& uuid)
+{
+ LLFloaterSnapshot* floater = LLFloaterReg::getTypedInstance<LLFloaterSnapshot>("snapshot");
+ floater->setAsProfilePic(uuid);
+}
+
+
+void LLSnapshotLivePreview::saveTexture(bool set_as_profile_pic)
{
// gen a new uuid for this asset
LLTransactionID tid;
tid.generate();
LLAssetID new_asset_id = tid.makeAssetID(gAgent.getSecureSessionID());
-
+
LLPointer<LLImageJ2C> formatted = new LLImageJ2C;
LLPointer<LLImageRaw> scaled = new LLImageRaw(mPreviewImage->getData(),
mPreviewImage->getWidth(),
@@ -971,26 +1001,30 @@ void LLSnapshotLivePreview::saveTexture()
if (formatted->encode(scaled, 0.0f))
{
+ boost::function<void(const LLUUID& uuid)> callback = NULL;
+
+ if (set_as_profile_pic)
+ {
+ callback = profile_pic_upload_callback;
+ }
+
LLVFile::writeFile(formatted->getData(), formatted->getDataSize(), gVFS, new_asset_id, LLAssetType::AT_TEXTURE);
std::string pos_string;
LLAgentUI::buildLocationString(pos_string, LLAgentUI::LOCATION_FORMAT_FULL);
std::string who_took_it;
LLAgentUI::buildFullname(who_took_it);
- LLAssetStorage::LLStoreAssetCallback callback = NULL;
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
- void *userdata = NULL;
upload_new_resource(tid, // tid
LLAssetType::AT_TEXTURE,
"Snapshot : " + pos_string,
"Taken by " + who_took_it + " at " + pos_string,
- 0,
LLFolderType::FT_SNAPSHOT_CATEGORY,
LLInventoryType::IT_SNAPSHOT,
PERM_ALL, // Note: Snapshots to inventory is a special case of content upload
PERM_NONE, // that ignores the user's premissions preferences and continues to
PERM_NONE, // always use these fairly permissive hard-coded initial perms. - MG
"Snapshot : " + pos_string,
- callback, expected_upload_cost, userdata);
+ callback, expected_upload_cost);
gViewerWindow->playSnapshotAnimAndSound();
}
else
@@ -1020,6 +1054,81 @@ BOOL LLSnapshotLivePreview::saveLocal()
return success;
}
+
+class LLSendWebResponder : public LLHTTPClient::Responder
+{
+public:
+
+ virtual void error(U32 status, const std::string& reason)
+ {
+ llwarns << status << ": " << reason << llendl;
+ LLNotificationsUtil::add("ShareToWebFailed");
+ }
+
+ virtual void result(const LLSD& content)
+ {
+ std::string response_url = content["response_url"].asString();
+
+ if (!response_url.empty())
+ {
+ LLWeb::loadURLExternal(response_url);
+ }
+ else
+ {
+ LLNotificationsUtil::add("ShareToWebFailed");
+ }
+ }
+
+};
+
+void LLSnapshotLivePreview::saveWeb(std::string url)
+{
+ if (url.empty())
+ {
+ llwarns << "No share to web url" << llendl;
+ return;
+ }
+
+ LLImageJPEG* jpg = dynamic_cast<LLImageJPEG*>(mFormattedImage.get());
+ if(!jpg)
+ {
+ llwarns << "Formatted image not a JPEG" << llendl;
+ return;
+ }
+
+/* figure out if there's a better way to serialize */
+ LLSD body;
+ std::vector<U8> binary_image;
+ U8* data = jpg->getData();
+ for (int i = 0; i < jpg->getDataSize(); i++)
+ {
+ binary_image.push_back(data[i]);
+ }
+
+ body["image"] = binary_image;
+
+ body["description"] = getChild<LLLineEditor>("description")->getText();
+
+ std::string name;
+ LLAgentUI::buildFullname(name);
+
+ body["avatar_name"] = name;
+
+ LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(gAgentCamera.getCameraPositionGlobal(),
+ boost::bind(&LLSnapshotLivePreview::regionNameCallback, this, url, body, _1, _2, _3, _4));
+
+ gViewerWindow->playSnapshotAnimAndSound();
+}
+
+
+void LLSnapshotLivePreview::regionNameCallback(std::string url, LLSD body, const std::string& name, S32 x, S32 y, S32 z)
+{
+ body["slurl"] = LLSLURL::buildSLURL(name, x, y, z);
+
+ LLHTTPClient::post(url, body,
+ new LLSendWebResponder());
+}
+
///----------------------------------------------------------------------------
/// Class LLFloaterSnapshot::Impl
///----------------------------------------------------------------------------
@@ -1039,9 +1148,6 @@ public:
mAvatarPauseHandles.clear();
}
- static void onClickDiscard(void* data);
- static void onClickKeep(void* data);
- static void onCommitSave(LLUICtrl* ctrl, void* data);
static void onClickNewSnapshot(void* data);
static void onClickAutoSnap(LLUICtrl *ctrl, void* data);
//static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data);
@@ -1056,9 +1162,11 @@ public:
static void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE);
static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data);
static void onCommitLayerTypes(LLUICtrl* ctrl, void*data);
- static void onCommitSnapshotType(LLUICtrl* ctrl, void* data);
static void onCommitSnapshotFormat(LLUICtrl* ctrl, void* data);
static void onCommitCustomResolution(LLUICtrl *ctrl, void* data);
+ static void onCommitSnapshot(LLFloaterSnapshot* view, LLSnapshotLivePreview::ESnapshotType type);
+ static void onCommitProfilePic(LLFloaterSnapshot* view);
+ static void onToggleAdvanced(LLUICtrl *ctrl, void* data);
static void resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) ;
static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value);
@@ -1066,10 +1174,8 @@ public:
static void setResolution(LLFloaterSnapshot* floater, const std::string& comboname);
static void updateControls(LLFloaterSnapshot* floater);
static void updateLayout(LLFloaterSnapshot* floater);
- static void updateResolutionTextEntry(LLFloaterSnapshot* floater);
private:
- static LLSnapshotLivePreview::ESnapshotType getTypeIndex(LLFloaterSnapshot* floater);
static ESnapshotFormat getFormatIndex(LLFloaterSnapshot* floater);
static LLViewerWindow::ESnapshotType getLayerType(LLFloaterSnapshot* floater);
static void comboSetCustom(LLFloaterSnapshot *floater, const std::string& comboname);
@@ -1092,22 +1198,6 @@ LLSnapshotLivePreview* LLFloaterSnapshot::Impl::getPreviewView(LLFloaterSnapshot
}
// static
-LLSnapshotLivePreview::ESnapshotType LLFloaterSnapshot::Impl::getTypeIndex(LLFloaterSnapshot* floater)
-{
- LLSnapshotLivePreview::ESnapshotType index = LLSnapshotLivePreview::SNAPSHOT_POSTCARD;
- LLSD value = floater->childGetValue("snapshot_type_radio");
- const std::string id = value.asString();
- if (id == "postcard")
- index = LLSnapshotLivePreview::SNAPSHOT_POSTCARD;
- else if (id == "texture")
- index = LLSnapshotLivePreview::SNAPSHOT_TEXTURE;
- else if (id == "local")
- index = LLSnapshotLivePreview::SNAPSHOT_LOCAL;
- return index;
-}
-
-
-// static
LLFloaterSnapshot::ESnapshotFormat LLFloaterSnapshot::Impl::getFormatIndex(LLFloaterSnapshot* floater)
{
ESnapshotFormat index = SNAPSHOT_FORMAT_PNG;
@@ -1155,20 +1245,12 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
{
LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
- S32 delta_height = gSavedSettings.getBOOL("AdvanceSnapshot") ? 0 : floaterp->getUIWinHeightShort() - floaterp->getUIWinHeightLong() ;
-
if(!gSavedSettings.getBOOL("AdvanceSnapshot")) //set to original window resolution
{
previewp->mKeepAspectRatio = TRUE;
- floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0);
- gSavedSettings.setS32("SnapshotPostcardLastResolution", 0);
-
- floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0);
- gSavedSettings.setS32("SnapshotTextureLastResolution", 0);
-
- floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0);
- gSavedSettings.setS32("SnapshotLocalLastResolution", 0);
+ floaterp->getChild<LLComboBox>("snapshot_size_combo")->setCurrentByIndex(0);
+ gSavedSettings.setS32("SnapshotLastResolution", 0);
LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
@@ -1181,9 +1263,6 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
// stop all mouse events at fullscreen preview layer
floaterp->getParent()->setMouseOpaque(TRUE);
- // shrink to smaller layout
- floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height);
-
// can see and interact with fullscreen preview now
if (previewp)
{
@@ -1212,7 +1291,6 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
else // turning off freeze frame mode
{
floaterp->getParent()->setMouseOpaque(FALSE);
- floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height);
if (previewp)
{
previewp->setVisible(FALSE);
@@ -1241,127 +1319,27 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
// static
void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
{
- LLRadioGroup* snapshot_type_radio = floater->getChild<LLRadioGroup>("snapshot_type_radio");
- snapshot_type_radio->setSelectedIndex(gSavedSettings.getS32("LastSnapshotType"));
- LLSnapshotLivePreview::ESnapshotType shot_type = getTypeIndex(floater);
- ESnapshotFormat shot_format = (ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); //getFormatIndex(floater); LLViewerWindow::ESnapshotType layer_type = getLayerType(floater);
- LLViewerWindow::ESnapshotType layer_type = getLayerType(floater);
-
- floater->childSetVisible("postcard_size_combo", FALSE);
- floater->childSetVisible("texture_size_combo", FALSE);
- floater->childSetVisible("local_size_combo", FALSE);
-
- floater->getChild<LLComboBox>("postcard_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution"));
- floater->getChild<LLComboBox>("texture_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution"));
- floater->getChild<LLComboBox>("local_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution"));
- floater->getChild<LLComboBox>("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat"));
-
- floater->childSetVisible("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE);
- floater->childSetVisible("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD);
- floater->childSetVisible("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
- floater->childSetEnabled("keep_aspect_check", shot_type != LLSnapshotLivePreview::SNAPSHOT_TEXTURE && !floater->impl.mAspectRatioCheckOff);
- floater->childSetEnabled("layer_types", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
-
- BOOL is_advance = gSavedSettings.getBOOL("AdvanceSnapshot");
- BOOL is_local = shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL;
- BOOL show_slider =
- shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD
- || (is_local && shot_format == LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG);
-
- floater->childSetVisible("more_btn", !is_advance); // the only item hidden in advanced mode
- floater->childSetVisible("less_btn", is_advance);
- floater->childSetVisible("type_label2", is_advance);
- floater->childSetVisible("format_label", is_advance && is_local);
- floater->childSetVisible("local_format_combo", is_advance && is_local);
- floater->childSetVisible("layer_types", is_advance);
- floater->childSetVisible("layer_type_label", is_advance);
- floater->childSetVisible("snapshot_width", is_advance);
- floater->childSetVisible("snapshot_height", is_advance);
- floater->childSetVisible("keep_aspect_check", is_advance);
- floater->childSetVisible("ui_check", is_advance);
- floater->childSetVisible("hud_check", is_advance);
- floater->childSetVisible("keep_open_check", is_advance);
- floater->childSetVisible("freeze_frame_check", is_advance);
- floater->childSetVisible("auto_snapshot_check", is_advance);
- floater->childSetVisible("image_quality_slider", is_advance && show_slider);
-
LLSnapshotLivePreview* previewp = getPreviewView(floater);
- BOOL got_bytes = previewp && previewp->getDataSize() > 0;
- BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
-
- floater->childSetEnabled("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD && got_snap && previewp->getDataSize() <= MAX_POSTCARD_DATASIZE);
- floater->childSetEnabled("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE && got_snap);
- floater->childSetEnabled("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL && got_snap);
-
- LLLocale locale(LLLocale::USER_LOCALE);
- std::string bytes_string;
- if (got_snap)
- {
- LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 );
- }
- S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
- floater->childSetLabelArg("texture", "[AMOUNT]", llformat("%d",upload_cost));
- floater->childSetLabelArg("upload_btn", "[AMOUNT]", llformat("%d",upload_cost));
- floater->childSetTextArg("file_size_label", "[SIZE]", got_snap ? bytes_string : floater->getString("unknown"));
- floater->childSetColor("file_size_label",
- shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD
- && got_bytes
- && previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" ));
-
- switch(shot_type)
- {
- case LLSnapshotLivePreview::SNAPSHOT_POSTCARD:
- layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
- floater->childSetValue("layer_types", "colors");
- if(is_advance)
- {
- setResolution(floater, "postcard_size_combo");
- }
- break;
- case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:
- layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
- floater->childSetValue("layer_types", "colors");
- if(is_advance)
- {
- setResolution(floater, "texture_size_combo");
- }
- break;
- case LLSnapshotLivePreview::SNAPSHOT_LOCAL:
- if(is_advance)
- {
- setResolution(floater, "local_size_combo");
- }
- break;
- default:
- break;
+ if (NULL == previewp)
+ {
+ return;
}
- updateResolutionTextEntry(floater);
+ // Disable buttons until Snapshot is ready. EXT-6534
+ BOOL got_snap = previewp->getSnapshotUpToDate();
- if (previewp)
- {
- previewp->setSnapshotType(shot_type);
- previewp->setSnapshotFormat(shot_format);
- previewp->setSnapshotBufferType(layer_type);
- }
-}
+ // process Main buttons
+ floater->childSetEnabled("share", got_snap);
+ floater->childSetEnabled("save", got_snap);
+ floater->childSetEnabled("set_profile_pic", got_snap);
-// static
-void LLFloaterSnapshot::Impl::updateResolutionTextEntry(LLFloaterSnapshot* floater)
-{
- LLSpinCtrl* width_spinner = floater->getChild<LLSpinCtrl>("snapshot_width");
- LLSpinCtrl* height_spinner = floater->getChild<LLSpinCtrl>("snapshot_height");
+ // process Share actions buttons
+ floater->childSetEnabled("share_to_web", got_snap);
+ floater->childSetEnabled("share_to_email", got_snap);
- if(getTypeIndex(floater) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
- {
- width_spinner->setAllowEdit(FALSE);
- height_spinner->setAllowEdit(FALSE);
- }
- else
- {
- width_spinner->setAllowEdit(TRUE);
- height_spinner->setAllowEdit(TRUE);
- }
+ // process Save actions buttons
+ floater->childSetEnabled("save_to_inventory", got_snap);
+ floater->childSetEnabled("save_to_computer", got_snap);
}
// static
@@ -1375,70 +1353,6 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp,
}
// static
-void LLFloaterSnapshot::Impl::onClickDiscard(void* data)
-{
- LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
-
- if (view)
- {
- view->closeFloater();
- }
-}
-
-
-// static
-void LLFloaterSnapshot::Impl::onCommitSave(LLUICtrl* ctrl, void* data)
-{
- if (ctrl->getValue().asString() == "save as")
- {
- gViewerWindow->resetSnapshotLoc();
- }
- onClickKeep(data);
-}
-
-// static
-void LLFloaterSnapshot::Impl::onClickKeep(void* data)
-{
- LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
- LLSnapshotLivePreview* previewp = getPreviewView(view);
-
- if (previewp)
- {
- if (previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_POSTCARD)
- {
- LLFloaterPostcard* floater = previewp->savePostcard();
- // if still in snapshot mode, put postcard floater in snapshot floaterview
- // and link it to snapshot floater
- if (floater && !gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
- {
- gFloaterView->removeChild(floater);
- gSnapshotFloaterView->addChild(floater);
- view->addDependentFloater(floater, FALSE);
- }
- }
- else if (previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
- {
- previewp->saveTexture();
- }
- else
- {
- previewp->saveLocal();
- }
-
- if (gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
- {
- view->closeFloater();
- }
- else
- {
- checkAutoSnapshot(previewp);
- }
-
- updateControls(view);
- }
-}
-
-// static
void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)
{
LLSnapshotLivePreview* previewp = getPreviewView((LLFloaterSnapshot *)data);
@@ -1674,10 +1588,8 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
}
// save off all selected resolution values
- gSavedSettings.setS32("SnapshotPostcardLastResolution", view->getChild<LLComboBox>("postcard_size_combo")->getCurrentIndex());
- gSavedSettings.setS32("SnapshotTextureLastResolution", view->getChild<LLComboBox>("texture_size_combo")->getCurrentIndex());
- gSavedSettings.setS32("SnapshotLocalLastResolution", view->getChild<LLComboBox>("local_size_combo")->getCurrentIndex());
-
+ gSavedSettings.setS32("SnapshotLastResolution", view->getChild<LLComboBox>("snapshot_size_combo")->getCurrentIndex());
+
std::string sdstring = combobox->getSelectedValue();
LLSD sdres;
std::stringstream sstream(sdstring);
@@ -1757,17 +1669,130 @@ void LLFloaterSnapshot::Impl::onCommitLayerTypes(LLUICtrl* ctrl, void*data)
}
//static
-void LLFloaterSnapshot::Impl::onCommitSnapshotType(LLUICtrl* ctrl, void* data)
+void LLFloaterSnapshot::Impl::onToggleAdvanced(LLUICtrl* ctrl, void* data)
{
- LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
- if (view)
+ LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
+
+ LLPanel* advanced_panel = view->getChild<LLPanel>("snapshot_advanced");
+
+ if (advanced_panel->getVisible())
{
- gSavedSettings.setS32("LastSnapshotType", getTypeIndex(view));
- getPreviewView(view)->updateSnapshot(TRUE);
- updateControls(view);
+ advanced_panel->setVisible(false);
+
+ // shrink floater back to original size
+ view->reshape(view->getRect().getWidth() - advanced_panel->getRect().getWidth(), view->getRect().getHeight());
+
+ view->getChild<LLButton>("hide_advanced")->setVisible(false);
+ view->getChild<LLButton>("show_advanced")->setVisible(true);
+ }
+ else
+ {
+ advanced_panel->setVisible(true);
+ // stretch the floater so it can accommodate the advanced panel
+ view->reshape(view->getRect().getWidth() + advanced_panel->getRect().getWidth(), view->getRect().getHeight());
+
+ view->getChild<LLButton>("hide_advanced")->setVisible(true);
+ view->getChild<LLButton>("show_advanced")->setVisible(false);
}
}
+// This object represents a pending request for avatar properties information
+class LLAvatarDataRequest : public LLAvatarPropertiesObserver
+{
+public:
+ LLAvatarDataRequest(const LLUUID& avatar_id, const LLUUID& image_id, LLFloaterSnapshot* floater)
+ : mAvatarID(avatar_id),
+ mImageID(image_id),
+ mSnapshotFloater(floater)
+
+ {
+ }
+
+ ~LLAvatarDataRequest()
+ {
+ // remove ourselves as an observer
+ LLAvatarPropertiesProcessor::getInstance()->
+ removeObserver(mAvatarID, this);
+ }
+
+ void processProperties(void* data, EAvatarProcessorType type)
+ {
+ // route the data to the inspector
+ if (data
+ && type == APT_PROPERTIES)
+ {
+
+ LLAvatarData* avatar_data = static_cast<LLAvatarData*>(data);
+
+ LLAvatarData new_data(*avatar_data);
+ new_data.image_id = mImageID;
+
+ LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&new_data);
+
+ delete this;
+ }
+ }
+
+ // Store avatar ID so we can un-register the observer on destruction
+ LLUUID mAvatarID;
+ LLUUID mImageID;
+ LLFloaterSnapshot* mSnapshotFloater;
+};
+
+void LLFloaterSnapshot::Impl::onCommitProfilePic(LLFloaterSnapshot* view)
+{
+ //first save to harddrive
+ LLSnapshotLivePreview* previewp = getPreviewView(view);
+
+ if(previewp)
+ {
+ previewp->saveTexture(true);
+ }
+}
+
+void LLFloaterSnapshot::Impl::onCommitSnapshot(LLFloaterSnapshot* view, LLSnapshotLivePreview::ESnapshotType type)
+{
+ LLSnapshotLivePreview* previewp = getPreviewView(view);
+
+ if (previewp)
+ {
+ previewp->setSnapshotType(type);
+
+ if (type == LLSnapshotLivePreview::SNAPSHOT_WEB)
+ {
+ previewp->saveWeb(view->getString("share_to_web_url"));
+ }
+ else if (type == LLSnapshotLivePreview::SNAPSHOT_LOCAL)
+ {
+ previewp->saveLocal();
+ }
+ else if (type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ previewp->saveTexture();
+ }
+ else if (type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD)
+ {
+ LLFloaterPostcard* floater = previewp->savePostcard();
+ // if still in snapshot mode, put postcard floater in snapshot floaterview
+ // and link it to snapshot floater
+ if (floater && !gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
+ {
+ gFloaterView->removeChild(floater);
+ gSnapshotFloaterView->addChild(floater);
+ view->addDependentFloater(floater, FALSE);
+ }
+ }
+
+ if (gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
+ {
+ view->closeFloater();
+ }
+ else
+ {
+ checkAutoSnapshot(previewp);
+ }
+ }
+}
//static
void LLFloaterSnapshot::Impl::onCommitSnapshotFormat(LLUICtrl* ctrl, void* data)
@@ -1781,8 +1806,6 @@ void LLFloaterSnapshot::Impl::onCommitSnapshotFormat(LLUICtrl* ctrl, void* data)
}
}
-
-
// Sets the named size combo to "custom" mode.
// static
void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname)
@@ -1791,24 +1814,11 @@ void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const s
combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index
- if(comboname == "postcard_size_combo")
- {
- gSavedSettings.setS32("SnapshotPostcardLastResolution", combo->getCurrentIndex());
- }
- else if(comboname == "texture_size_combo")
- {
- gSavedSettings.setS32("SnapshotTextureLastResolution", combo->getCurrentIndex());
- }
- else if(comboname == "local_size_combo")
- {
- gSavedSettings.setS32("SnapshotLocalLastResolution", combo->getCurrentIndex());
- }
+ gSavedSettings.setS32("SnapshotLastResolution", combo->getCurrentIndex());
checkAspectRatio(floater, -1); // -1 means custom
}
-
-
//static
BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value)
{
@@ -1949,9 +1959,7 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
previewp->setSize(w,h);
checkAutoSnapshot(previewp, FALSE);
previewp->updateSnapshot(FALSE, TRUE);
- comboSetCustom(view, "postcard_size_combo");
- comboSetCustom(view, "texture_size_combo");
- comboSetCustom(view, "local_size_combo");
+ comboSetCustom(view, "snapshot_size_combo");
}
}
@@ -1968,7 +1976,7 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
// Default constructor
LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key)
- : LLFloater(key),
+ : LLTransientDockableFloater(NULL, true, key),
impl (*(new Impl))
{
//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_snapshot.xml", FALSE);
@@ -1993,7 +2001,20 @@ LLFloaterSnapshot::~LLFloaterSnapshot()
BOOL LLFloaterSnapshot::postBuild()
{
- childSetCommitCallback("snapshot_type_radio", Impl::onCommitSnapshotType, this);
+
+ getChild<LLButton>("share")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_SHARE));
+ getChild<LLButton>("save")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_SAVE));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_MAIN));
+
+ getChild<LLButton>("share_to_web")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_WEB));
+ getChild<LLButton>("share_to_email")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_POSTCARD));
+ getChild<LLButton>("save_to_inventory")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_TEXTURE));
+ getChild<LLButton>("save_to_computer")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_LOCAL));
+ getChild<LLButton>("set_profile_pic")->setCommitCallback(boost::bind(&Impl::onCommitProfilePic, this));
+
+ childSetCommitCallback("show_advanced", Impl::onToggleAdvanced, this);
+ childSetCommitCallback("hide_advanced", Impl::onToggleAdvanced, this);
+
childSetCommitCallback("local_format_combo", Impl::onCommitSnapshotFormat, this);
childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this);
@@ -2001,11 +2022,6 @@ BOOL LLFloaterSnapshot::postBuild()
childSetAction("more_btn", Impl::onClickMore, this);
childSetAction("less_btn", Impl::onClickLess, this);
- childSetAction("upload_btn", Impl::onClickKeep, this);
- childSetAction("send_btn", Impl::onClickKeep, this);
- childSetCommitCallback("save_btn", Impl::onCommitSave, this);
- childSetAction("discard_btn", Impl::onClickDiscard, this);
-
childSetCommitCallback("image_quality_slider", Impl::onCommitQuality, this);
childSetValue("image_quality_slider", gSavedSettings.getS32("SnapshotQuality"));
@@ -2026,7 +2042,6 @@ BOOL LLFloaterSnapshot::postBuild()
childSetCommitCallback("layer_types", Impl::onCommitLayerTypes, this);
childSetValue("layer_types", "colors");
- childSetEnabled("layer_types", FALSE);
childSetValue("snapshot_width", gSavedSettings.getS32(lastSnapshotWidthName()));
childSetValue("snapshot_height", gSavedSettings.getS32(lastSnapshotHeightName()));
@@ -2037,9 +2052,7 @@ BOOL LLFloaterSnapshot::postBuild()
childSetValue("auto_snapshot_check", gSavedSettings.getBOOL("AutoSnapshot"));
childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this);
- childSetCommitCallback("postcard_size_combo", Impl::onCommitResolution, this);
- childSetCommitCallback("texture_size_combo", Impl::onCommitResolution, this);
- childSetCommitCallback("local_size_combo", Impl::onCommitResolution, this);
+ childSetCommitCallback("snapshot_size_combo", Impl::onCommitResolution, this);
// create preview window
LLRect full_screen_rect = getRootView()->getRect();
@@ -2060,8 +2073,14 @@ BOOL LLFloaterSnapshot::postBuild()
impl.mPreviewHandle = previewp->getHandle();
impl.updateControls(this);
impl.updateLayout(this);
+
+ //save off the refresh button's rectangle so we can apply offsets with thumbnail resize
+ mRefreshBtnRect = getChild<LLButton>("new_snapshot_btn")->getRect();
+
+ // make sure we share/hide the general buttons
+ updateButtons(SNAPSHOT_MAIN);
- return TRUE;
+ return LLDockableFloater::postBuild();
}
void LLFloaterSnapshot::draw()
@@ -2074,15 +2093,19 @@ void LLFloaterSnapshot::draw()
return;
}
- LLFloater::draw();
+ LLDockableFloater::draw();
+
+ LLButton* refresh_btn = getChild<LLButton>("new_snapshot_btn");
+ // revert the refresh button to original intended position
+ LLRect refresh_rect = mRefreshBtnRect;
if (previewp)
{
if(previewp->getThumbnailImage())
{
- LLRect thumbnail_rect = getChild<LLUICtrl>("thumbnail_placeholder")->getRect();
+ LLRect thumbnail_rect = getChild<LLView>("thumbnail_placeholder")->getRect();
- S32 offset_x = (getRect().getWidth() - previewp->getThumbnailWidth()) / 2 ;
+ S32 offset_x = (thumbnail_rect.getWidth() - previewp->getThumbnailWidth()) / 2 + thumbnail_rect.mLeft;
S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ;
glMatrixMode(GL_MODELVIEW);
@@ -2091,8 +2114,14 @@ void LLFloaterSnapshot::draw()
previewp->getThumbnailImage(), LLColor4::white);
previewp->drawPreviewRect(offset_x, offset_y) ;
+
+ refresh_rect.translate(offset_x - thumbnail_rect.mLeft, offset_y - thumbnail_rect.mBottom);
}
}
+
+ refresh_btn->setRect(refresh_rect);
+ drawChild(refresh_btn);
+
}
void LLFloaterSnapshot::onOpen(const LLSD& key)
@@ -2106,6 +2135,12 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
gSnapshotFloaterView->setEnabled(TRUE);
gSnapshotFloaterView->setVisible(TRUE);
gSnapshotFloaterView->adjustToFitScreen(this, FALSE);
+
+ LLButton *snapshots = LLBottomTray::getInstance()->getChild<LLButton>("snapshots");
+
+ setDockControl(new LLDockControl(
+ snapshots, this,
+ getDockTongue(), LLDockControl::TOP));
}
void LLFloaterSnapshot::onClose(bool app_quitting)
@@ -2133,6 +2168,33 @@ void LLFloaterSnapshot::update()
}
}
+bool LLFloaterSnapshot::updateButtons(ESnapshotMode mode)
+{
+ childSetVisible("share", mode == SNAPSHOT_MAIN);
+ childSetVisible("save", mode == SNAPSHOT_MAIN);
+ childSetVisible("set_profile_pic", mode == SNAPSHOT_MAIN);
+
+ childSetVisible("share_to_web", mode == SNAPSHOT_SHARE);
+ childSetVisible("share_to_email", mode == SNAPSHOT_SHARE);
+
+ childSetVisible("save_to_inventory", mode == SNAPSHOT_SAVE);
+ childSetVisible("save_to_computer", mode == SNAPSHOT_SAVE);
+
+ childSetVisible("cancel", mode != SNAPSHOT_MAIN);
+
+ return true;
+}
+
+void LLFloaterSnapshot::setAsProfilePic(const LLUUID& image_id)
+{
+ LLAvatarDataRequest* avatar_data_request = new LLAvatarDataRequest(gAgent.getID(), image_id, this);
+
+ LLAvatarPropertiesProcessor* processor =
+ LLAvatarPropertiesProcessor::getInstance();
+
+ processor->addObserver(gAgent.getID(), avatar_data_request);
+ processor->sendAvatarPropertiesRequest(gAgent.getID());
+}
///----------------------------------------------------------------------------
/// Class LLSnapshotFloaterView
diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h
index 1333497bd2..931d355748 100644
--- a/indra/newview/llfloatersnapshot.h
+++ b/indra/newview/llfloatersnapshot.h
@@ -34,9 +34,10 @@
#define LL_LLFLOATERSNAPSHOT_H
#include "llfloater.h"
+#include "lltransientdockablefloater.h"
-class LLFloaterSnapshot : public LLFloater
+class LLFloaterSnapshot : public LLTransientDockableFloater
{
public:
typedef enum e_snapshot_format
@@ -46,6 +47,13 @@ public:
SNAPSHOT_FORMAT_BMP
} ESnapshotFormat;
+ enum ESnapshotMode
+ {
+ SNAPSHOT_SHARE,
+ SNAPSHOT_SAVE,
+ SNAPSHOT_MAIN
+ };
+
LLFloaterSnapshot(const LLSD& key);
virtual ~LLFloaterSnapshot();
@@ -56,6 +64,10 @@ public:
static void update();
+ void setAsProfilePic(const LLUUID& image_id);
+
+ bool updateButtons(ESnapshotMode mode);
+
static S32 getUIWinHeightLong() {return sUIWinHeightLong ;}
static S32 getUIWinHeightShort() {return sUIWinHeightShort ;}
static S32 getUIWinWidth() {return sUIWinWidth ;}
@@ -67,6 +79,8 @@ private:
static S32 sUIWinHeightLong ;
static S32 sUIWinHeightShort ;
static S32 sUIWinWidth ;
+
+ LLRect mRefreshBtnRect;
};
class LLSnapshotFloaterView : public LLFloaterView
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 7c42a581ff..d8d7057c4e 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -38,7 +38,7 @@
#include "llcoord.h"
//#include "llgl.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
#include "llcombobox.h"
@@ -533,7 +533,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
}
// multiply by correction factor because volume sliders go [0, 0.5]
- childSetValue( "slider zoom", gAgent.getCameraZoomFraction() * 0.5f);
+ childSetValue( "slider zoom", gAgentCamera.getCameraZoomFraction() * 0.5f);
// Move buttons
BOOL move_visible = (tool == LLToolGrab::getInstance());
@@ -766,7 +766,7 @@ void LLFloaterTools::onClose(bool app_quitting)
// Different from handle_reset_view in that it doesn't actually
// move the camera if EditCameraMovement is not set.
- gAgent.resetView(gSavedSettings.getBOOL("EditCameraMovement"));
+ gAgentCamera.resetView(gSavedSettings.getBOOL("EditCameraMovement"));
// exit component selection mode
LLSelectMgr::getInstance()->promoteSelectionToRoot();
@@ -847,7 +847,7 @@ void commit_slider_zoom(LLUICtrl *ctrl)
{
// renormalize value, since max "volume" level is 0.5 for some reason
F32 zoom_level = (F32)ctrl->getValue().asReal() * 2.f; // / 0.5f;
- gAgent.setCameraZoomFraction(zoom_level);
+ gAgentCamera.setCameraZoomFraction(zoom_level);
}
void click_popup_rotate_left(void*)
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 8ab050beaa..84ea353dab 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -315,7 +315,7 @@ void LLFloaterTopObjects::doToObjects(int action, bool all)
LLCtrlListInterface *list = childGetListInterface("objects_list");
if (!list || list->getItemCount() == 0) return;
- std::vector<LLUUID>::iterator id_itor;
+ uuid_vec_t::iterator id_itor;
bool start_message = true;
diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h
index ee3c5d3cce..8fb89a3cc5 100644
--- a/indra/newview/llfloatertopobjects.h
+++ b/indra/newview/llfloatertopobjects.h
@@ -89,7 +89,7 @@ private:
std::string mMethod;
LLSD mObjectListData;
- std::vector<LLUUID> mObjectListIDs;
+ uuid_vec_t mObjectListIDs;
U32 mCurrentMode;
U32 mFlags;
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp
index 69ee8cd547..3db9587797 100644
--- a/indra/newview/llfloatertos.cpp
+++ b/indra/newview/llfloatertos.cpp
@@ -57,7 +57,9 @@ LLFloaterTOS::LLFloaterTOS(const LLSD& data)
: LLModalDialog( data["message"].asString() ),
mMessage(data["message"].asString()),
mWebBrowserWindowId( 0 ),
- mLoadCompleteCount( 0 ),
+ mLoadingScreenLoaded(false),
+ mSiteAlive(false),
+ mRealNavigateBegun(false),
mReplyPumpName(data["reply_pump"].asString())
{
}
@@ -138,6 +140,11 @@ BOOL LLFloaterTOS::postBuild()
if ( web_browser )
{
web_browser->addObserver(this);
+
+ // Don't use the start_url parameter for this browser instance -- it may finish loading before we get to add our observer.
+ // Store the URL separately and navigate here instead.
+ web_browser->navigateTo( getString( "loading_url" ) );
+
gResponsePtr = LLIamHere::build( this );
LLHTTPClient::get( getString( "real_url" ), gResponsePtr );
}
@@ -147,15 +154,16 @@ BOOL LLFloaterTOS::postBuild()
void LLFloaterTOS::setSiteIsAlive( bool alive )
{
+ mSiteAlive = alive;
+
// only do this for TOS pages
if (hasChild("tos_html"))
{
- LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html");
// if the contents of the site was retrieved
if ( alive )
{
// navigate to the "real" page
- web_browser->navigateTo( getString( "real_url" ) );
+ loadIfNeeded();
}
else
{
@@ -167,6 +175,19 @@ void LLFloaterTOS::setSiteIsAlive( bool alive )
}
}
+void LLFloaterTOS::loadIfNeeded()
+{
+ if(!mRealNavigateBegun && mSiteAlive)
+ {
+ LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html");
+ if(web_browser)
+ {
+ mRealNavigateBegun = true;
+ web_browser->navigateTo( getString( "real_url" ) );
+ }
+ }
+}
+
LLFloaterTOS::~LLFloaterTOS()
{
@@ -216,8 +237,13 @@ void LLFloaterTOS::onCancel( void* userdata )
LLEventPumps::instance().obtain(self->mReplyPumpName).post(LLSD(false));
}
- self->mLoadCompleteCount = 0; // reset counter for next time we come to TOS
- self->closeFloater(); // destroys this object
+ // reset state for next time we come to TOS
+ self->mLoadingScreenLoaded = false;
+ self->mSiteAlive = false;
+ self->mRealNavigateBegun = false;
+
+ // destroys this object
+ self->closeFloater();
}
//virtual
@@ -225,8 +251,12 @@ void LLFloaterTOS::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev
{
if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
{
- // skip past the loading screen navigate complete
- if ( ++mLoadCompleteCount == 2 )
+ if(!mLoadingScreenLoaded)
+ {
+ mLoadingScreenLoaded = true;
+ loadIfNeeded();
+ }
+ else if(mRealNavigateBegun)
{
llinfos << "NAVIGATE COMPLETE" << llendl;
// enable Agree to TOS radio button now that page has loaded
diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h
index 1d573e8170..6ea56408ee 100644
--- a/indra/newview/llfloatertos.h
+++ b/indra/newview/llfloatertos.h
@@ -66,9 +66,14 @@ public:
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
private:
+
+ void loadIfNeeded();
+
std::string mMessage;
int mWebBrowserWindowId;
- int mLoadCompleteCount;
+ bool mLoadingScreenLoaded;
+ bool mSiteAlive;
+ bool mRealNavigateBegun;
std::string mReplyPumpName;
};
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index b6de409611..b3223ad494 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -41,6 +41,7 @@
#include "llfloaterworldmap.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llbutton.h"
#include "llcallingcard.h"
#include "llcombobox.h"
@@ -50,7 +51,9 @@
//#include "llfirstuse.h"
#include "llfloaterreg.h" // getTypedInstance()
#include "llfocusmgr.h"
+#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llinventoryobserver.h"
#include "lllandmarklist.h"
#include "lllineeditor.h"
@@ -122,7 +125,7 @@ public:
}
// support the secondlife:///app/worldmap/{LOCATION}/{COORDS} SLapp
- const std::string region_name = params[0].asString();
+ const std::string region_name = LLURI::unescape(params[0].asString());
S32 x = (params.size() > 1) ? params[1].asInteger() : 128;
S32 y = (params.size() > 2) ? params[2].asInteger() : 128;
S32 z = (params.size() > 3) ? params[3].asInteger() : 0;
@@ -321,7 +324,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
// Start speculative download of landmarks
const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
- gInventory.startBackgroundFetch(landmark_folder_id);
+ LLInventoryModelBackgroundFetch::instance().start(landmark_folder_id);
childSetFocus("location", TRUE);
gFocusMgr.triggerFocusFlash();
@@ -359,9 +362,7 @@ BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
{
if (!isMinimized() && isFrontmost())
{
- LLRect area;
- childGetRect("search_results", area);
- if(!area.pointInRect(x, y))
+ if(mPanel->pointInView(x, y))
{
F32 slider_value = (F32)childGetValue("zoom slider").asReal();
slider_value += ((F32)clicks * -0.3333f);
@@ -1222,12 +1223,12 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate)
{
// We've got the position finally, so we're no longer busy. JC
// getWindow()->decBusyCount();
- pos_global = LLTracker::getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();
+ pos_global = LLTracker::getTrackedPositionGlobal() - gAgentCamera.getCameraPositionGlobal();
}
}
else if(LLWorldMap::getInstance()->isTracking())
{
- pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();;
+ pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgentCamera.getCameraPositionGlobal();;
}
else
{
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 7d527fa98a..8d4d6a178a 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -39,6 +39,7 @@
#include "llinventoryclipboard.h" // *TODO: remove this once hack below gone.
#include "llinventoryfilter.h"
#include "llinventoryfunctions.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
#include "llfoldertype.h"
#include "llfloaterinventory.h"// hacked in for the bonus context menu items.
@@ -179,13 +180,14 @@ LLFolderView::LLFolderView(const Params& p)
mSourceID(p.task_id),
mRenameItem( NULL ),
mNeedsScroll( FALSE ),
+ mEnableScroll( true ),
mPinningSelectedItem(FALSE),
mNeedsAutoSelect( FALSE ),
mAutoSelectOverride(FALSE),
mNeedsAutoRename(FALSE),
mDebugFilters(FALSE),
mSortOrder(LLInventoryFilter::SO_FOLDERS_BY_NAME), // This gets overridden by a pref immediately
- mFilter( new LLInventoryFilter(p.name) ),
+ mFilter( new LLInventoryFilter(p.title) ),
mShowSelectionContext(FALSE),
mShowSingleSelection(FALSE),
mArrangeGeneration(0),
@@ -274,20 +276,12 @@ LLFolderView::~LLFolderView( void )
mRenamer = NULL;
mStatusTextBox = NULL;
- if( gEditMenuHandler == this )
- {
- gEditMenuHandler = NULL;
- }
-
mAutoOpenItems.removeAllNodes();
gIdleCallbacks.deleteFunction(idle, this);
LLView::deleteViewByHandle(mPopupMenuHandle);
- if(mRenamer == gFocusMgr.getTopCtrl())
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ gViewerWindow->removePopup(mRenamer);
mAutoOpenItems.removeAllNodes();
clearSelection();
@@ -419,11 +413,6 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen
S32 total_width = LEFT_PAD;
S32 running_height = mDebugFilters ? llceil(LLFontGL::getFontMonospace()->getLineHeight()) : 0;
S32 target_height = running_height;
- if(!mHasVisibleChildren)// is there any filtered items ?
- {
- //Nope. We need to display status textbox, let's reserve some place for it
- target_height += mStatusTextBox->getTextPixelHeight();
- }
S32 parent_item_height = getRect().getHeight();
for (folders_t::iterator iter = mFolders.begin();
@@ -483,6 +472,13 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen
}
}
+ if(!mHasVisibleChildren)// is there any filtered items ?
+ {
+ //Nope. We need to display status textbox, let's reserve some place for it
+ running_height = mStatusTextBox->getTextPixelHeight();
+ target_height = running_height;
+ }
+
LLRect scroll_rect = mScrollContainer->getContentWindowRect();
reshape( llmax(scroll_rect.getWidth(), total_width), running_height );
@@ -839,11 +835,14 @@ void LLFolderView::sanitizeSelection()
void LLFolderView::clearSelection()
{
- if (mSelectedItems.size() > 0)
+ for (selected_items_t::const_iterator item_it = mSelectedItems.begin();
+ item_it != mSelectedItems.end();
+ ++item_it)
{
- recursiveDeselect(FALSE);
- mSelectedItems.clear();
+ (*item_it)->setUnselected();
}
+
+ mSelectedItems.clear();
mSelectThisID.setNull();
}
@@ -862,7 +861,7 @@ BOOL LLFolderView::getSelectionList(std::set<LLUUID> &selection) const
BOOL LLFolderView::startDrag(LLToolDragAndDrop::ESource source)
{
std::vector<EDragAndDropType> types;
- std::vector<LLUUID> cargo_ids;
+ uuid_vec_t cargo_ids;
selected_items_t::iterator item_it;
BOOL can_drag = TRUE;
if (!mSelectedItems.empty())
@@ -940,7 +939,7 @@ void LLFolderView::draw()
}
else
{
- if (gInventory.backgroundFetchActive() || mCompletedFilterGeneration < mFilter->getMinRequiredGeneration())
+ if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() || mCompletedFilterGeneration < mFilter->getMinRequiredGeneration())
{
mStatusText = LLTrans::getString("Searching");
//font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
@@ -971,12 +970,11 @@ void LLFolderView::finishRenamingItem( void )
mRenameItem->rename( mRenamer->getText() );
}
- gFocusMgr.setTopCtrl( NULL );
+ gViewerWindow->removePopup(mRenamer);
if( mRenameItem )
{
setSelectionFromRoot( mRenameItem, TRUE );
- mRenameItem = NULL;
}
// List is re-sorted alphabeticly, so scroll to make sure the selected item is visible.
@@ -988,7 +986,7 @@ void LLFolderView::closeRenamer( void )
// will commit current name (which could be same as original name)
mRenamer->setFocus( FALSE );
mRenamer->setVisible( FALSE );
- gFocusMgr.setTopCtrl( NULL );
+ gViewerWindow->removePopup(mRenamer);
if( mRenameItem )
{
@@ -1420,7 +1418,7 @@ void LLFolderView::startRenamingSelectedItem( void )
mRenamer->setFocus( TRUE );
mRenamer->setTopLostCallback(boost::bind(onRenamerLost, _1));
mRenamer->setFocusLostCallback(boost::bind(onRenamerLost, _1));
- gFocusMgr.setTopCtrl( mRenamer );
+ gViewerWindow->addPopup(mRenamer);
}
}
@@ -1828,7 +1826,9 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask )
BOOL handled = childrenHandleRightMouseDown(x, y, mask) != NULL;
S32 count = mSelectedItems.size();
LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandle.get();
- if(handled && (count > 0) && menu)
+ if ( handled
+ && ( count > 0 && (hasVisibleChildren() || mFilter->getShowFolderState() == LLInventoryFilter::SHOW_ALL_FOLDERS) ) // show menu only if selected items are visible
+ && menu )
{
if (mCallbackRegistrar)
mCallbackRegistrar->pushScope();
@@ -1901,7 +1901,7 @@ void LLFolderView::deleteAllChildren()
{
if(mRenamer == gFocusMgr.getTopCtrl())
{
- gFocusMgr.setTopCtrl(NULL);
+ gViewerWindow->removePopup(mRenamer);
}
LLView::deleteViewByHandle(mPopupMenuHandle);
mPopupMenuHandle = LLHandle<LLView>();
@@ -1913,7 +1913,7 @@ void LLFolderView::deleteAllChildren()
void LLFolderView::scrollToShowSelection()
{
- if (mSelectedItems.size())
+ if (mEnableScroll && mSelectedItems.size())
{
mNeedsScroll = TRUE;
}
@@ -2098,8 +2098,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
if(!folder_item) continue;
LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
if(!bridge) continue;
-
- bridge->performAction(this, model, action);
+ bridge->performAction(model, action);
}
LLFloater::setFloaterHost(NULL);
@@ -2163,6 +2162,15 @@ void LLFolderView::doIdle()
LLSelectFirstFilteredItem filter;
applyFunctorRecursively(filter);
}
+
+ // Open filtered folders for folder views with mAutoSelectOverride=TRUE.
+ // Used by LLPlacesFolderView.
+ if (mAutoSelectOverride && !mFilter->getFilterSubString().empty())
+ {
+ LLOpenFilteredFolders filter;
+ applyFunctorRecursively(filter);
+ }
+
scrollToShowSelection();
}
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index faf6a9cf23..42390dfd17 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -93,8 +93,9 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
public:
struct Params : public LLInitParam::Block<Params, LLFolderViewFolder::Params>
{
- Mandatory<LLPanel*> parent_panel;
- Optional<LLUUID> task_id;
+ Mandatory<LLPanel*> parent_panel;
+ Optional<LLUUID> task_id;
+ Optional<std::string> title;
};
LLFolderView(const Params&);
virtual ~LLFolderView( void );
@@ -269,6 +270,7 @@ public:
void dumpSelectionInformation();
virtual S32 notify(const LLSD& info) ;
+ void setEnableScroll(bool enable_scroll) { mEnableScroll = enable_scroll; }
private:
void updateRenamerPosition();
@@ -300,6 +302,7 @@ protected:
LLLineEditor* mRenamer;
BOOL mNeedsScroll;
+ bool mEnableScroll;
BOOL mPinningSelectedItem;
LLRect mScrollConstraintRect;
BOOL mNeedsAutoSelect;
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index 12e100caf4..a2ef8c1d12 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -88,7 +88,7 @@ public:
virtual BOOL isUpToDate() const = 0;
virtual BOOL hasChildren() const = 0;
virtual LLInventoryType::EType getInventoryType() const = 0;
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) = 0;
+ virtual void performAction(LLInventoryModel* model, std::string action) = 0;
// This method should be called when a drag begins. returns TRUE
// if the drag can begin, otherwise FALSE.
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 76607e4874..3208218302 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -38,6 +38,7 @@
#include "llfoldervieweventlistener.h"
#include "llinventorybridge.h" // for LLItemBridge in LLInventorySort::operator()
#include "llinventoryfilter.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llpanel.h"
#include "llviewercontrol.h" // gSavedSettings
#include "llviewerwindow.h" // Argh, only for setCursor()
@@ -121,7 +122,6 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
mHasVisibleChildren(FALSE),
mIndentation(0),
mItemHeight(p.item_height),
- mNumDescendantsSelected(0),
mPassedFilter(FALSE),
mLastFilterGeneration(-1),
mStringMatchOffset(std::string::npos),
@@ -256,11 +256,30 @@ void LLFolderViewItem::refreshFromListener()
// temporary attempt to display the inventory folder in the user locale.
// mantipov: *NOTE: be sure this code is synchronized with LLFriendCardsManager::findChildFolderUUID
// it uses the same way to find localized string
- if (LLFolderType::lookupIsProtectedType(preferred_type))
+
+ // HACK: EXT - 6028 ([HARD CODED]? Inventory > Library > "Accessories" folder)
+ // Translation of Accessories folder in Library inventory folder
+ bool accessories = false;
+ if(mLabel == std::string("Accessories"))
+ {
+ //To ensure that Accessories folder is in Library we have to check its parent folder.
+ //Due to parent LLFolderViewFloder is not set to this item yet we have to check its parent via Inventory Model
+ LLInventoryCategory* cat = gInventory.getCategory(mListener->getUUID());
+ if(cat)
+ {
+ const LLUUID& parent_folder_id = cat->getParentUUID();
+ accessories = (parent_folder_id == gInventory.getLibraryRootFolderID());
+ }
+ }
+
+ //"Accessories" inventory category has folder type FT_NONE. So, this folder
+ //can not be detected as protected with LLFolderType::lookupIsProtectedType
+ if (accessories || LLFolderType::lookupIsProtectedType(preferred_type))
{
LLTrans::findString(mLabel, "InvFolder " + mLabel);
};
+ setToolTip(mLabel);
setIcon(mListener->getIcon());
time_t creation_date = mListener->getCreationDate();
if (mCreationDate != creation_date)
@@ -418,11 +437,8 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation)
S32 LLFolderViewItem::getItemHeight()
{
- if (mHidden) return 0;
+ if (getHidden()) return 0;
- //S32 icon_height = mIcon->getHeight();
- //S32 label_height = llround(getLabelFontForStyle(mLabelStyle)->getLineHeight());
- //return llmax( icon_height, label_height ) + ICON_PAD;
return mItemHeight;
}
@@ -497,22 +513,6 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte
return FALSE;
}
-void LLFolderViewItem::recursiveDeselect(BOOL deselect_self)
-{
- if (mIsSelected && deselect_self)
- {
- mIsSelected = FALSE;
-
- // update ancestors' count of selected descendents
- LLFolderViewFolder* parent_folder = getParentFolder();
- while(parent_folder)
- {
- parent_folder->mNumDescendantsSelected--;
- parent_folder = parent_folder->getParentFolder();
- }
- }
-}
-
BOOL LLFolderViewItem::isMovable()
{
@@ -821,32 +821,38 @@ BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
return handled;
}
-
void LLFolderViewItem::draw()
{
- if (mHidden) return;
+ if (getHidden())
+ {
+ return;
+ }
static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE);
static LLUIColor sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE);
- static LLUIColor sFocusOutlineColor =
- LLUIColorTable::instance().getColor("InventoryFocusOutlineColor", DEFAULT_WHITE);
+ static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("InventoryFocusOutlineColor", DEFAULT_WHITE);
static LLUIColor sFilterBGColor = LLUIColorTable::instance().getColor("FilterBackgroundColor", DEFAULT_WHITE);
static LLUIColor sFilterTextColor = LLUIColorTable::instance().getColor("FilterTextColor", DEFAULT_WHITE);
- static LLUIColor sSuffixColor = LLUIColorTable::instance().getColor("InventoryItemSuffixColor", DEFAULT_WHITE);
+ static LLUIColor sSuffixColor = LLUIColorTable::instance().getColor("InventoryItemColor", DEFAULT_WHITE);
+ static LLUIColor sLibraryColor = LLUIColorTable::instance().getColor("InventoryItemLibraryColor", DEFAULT_WHITE);
static LLUIColor sSearchStatusColor = LLUIColorTable::instance().getColor("InventorySearchStatusColor", DEFAULT_WHITE);
const Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
const S32 TOP_PAD = default_params.item_top_pad;
+ const S32 FOCUS_LEFT = 1;
+ const LLFontGL* font = getLabelFontForStyle(mLabelStyle);
- bool possibly_has_children = false;
- bool up_to_date = mListener && mListener->isUpToDate();
- if((up_to_date && hasVisibleChildren() ) || // we fetched our children and some of them have passed the filter...
- (!up_to_date && mListener && mListener->hasChildren())) // ...or we know we have children but haven't fetched them (doesn't obey filter)
- {
- possibly_has_children = true;
- }
- if(/*mControlLabel[0] != '\0' && */possibly_has_children)
+ const BOOL in_inventory = getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), gInventory.getRootFolderID());
+ const BOOL in_library = getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), gInventory.getLibraryRootFolderID());
+
+ //--------------------------------------------------------------------------------//
+ // Draw open folder arrow
+ //
+ const bool up_to_date = mListener && mListener->isUpToDate();
+ const bool possibly_has_children = ((up_to_date && hasVisibleChildren()) || // we fetched our children and some of them have passed the filter...
+ (!up_to_date && mListener && mListener->hasChildren())); // ...or we know we have children but haven't fetched them (doesn't obey filter)
+ if (possibly_has_children)
{
LLUIImage* arrow_image = default_params.folder_arrow_image;
gl_draw_scaled_rotated_image(
@@ -854,22 +860,16 @@ void LLFolderViewItem::draw()
ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, arrow_image->getImage(), sFgColor);
}
- // See also LLFolderView::updateRenamerPosition()
- F32 text_left = (F32)(ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + mIndentation);
- LLFontGL* font = getLabelFontForStyle(mLabelStyle);
-
- // If we have keyboard focus, draw selection filled
- BOOL show_context = getRoot()->getShowSelectionContext();
- BOOL filled = show_context || (getRoot()->getParentPanel()->hasFocus());
- const S32 FOCUS_LEFT = 1;
- S32 focus_top = getRect().getHeight();
- S32 focus_bottom = getRect().getHeight() - mItemHeight;
- bool folder_open = (getRect().getHeight() > mItemHeight + 4);
-
- // always render "current" item, only render other selected items if
- // mShowSingleSelection is FALSE
- if( mIsSelected )
+ //--------------------------------------------------------------------------------//
+ // Draw highlight for selected items
+ //
+ const BOOL show_context = getRoot()->getShowSelectionContext();
+ const BOOL filled = show_context || (getRoot()->getParentPanel()->hasFocus()); // If we have keyboard focus, draw selection filled
+ const S32 focus_top = getRect().getHeight();
+ const S32 focus_bottom = getRect().getHeight() - mItemHeight;
+ const bool folder_open = (getRect().getHeight() > mItemHeight + 4);
+ if (mIsSelected) // always render "current" item. Only render other selected items if mShowSingleSelection is FALSE
{
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLColor4 bg_color = sHighlightBgColor;
@@ -888,152 +888,167 @@ void LLFolderViewItem::draw()
bg_color.mV[VALPHA] = clamp_rescale(fade_time, 0.f, 0.4f, 0.f, bg_color.mV[VALPHA]);
}
}
-
- gl_rect_2d(
- FOCUS_LEFT,
- focus_top,
- getRect().getWidth() - 2,
- focus_bottom,
- bg_color, filled);
+ gl_rect_2d(FOCUS_LEFT,
+ focus_top,
+ getRect().getWidth() - 2,
+ focus_bottom,
+ bg_color, filled);
if (mIsCurSelection)
{
- gl_rect_2d(
- FOCUS_LEFT,
- focus_top,
- getRect().getWidth() - 2,
- focus_bottom,
- sFocusOutlineColor, FALSE);
+ gl_rect_2d(FOCUS_LEFT,
+ focus_top,
+ getRect().getWidth() - 2,
+ focus_bottom,
+ sFocusOutlineColor, FALSE);
}
if (folder_open)
{
- gl_rect_2d(
- FOCUS_LEFT,
- focus_bottom + 1, // overlap with bottom edge of above rect
- getRect().getWidth() - 2,
- 0,
- sFocusOutlineColor, FALSE);
+ gl_rect_2d(FOCUS_LEFT,
+ focus_bottom + 1, // overlap with bottom edge of above rect
+ getRect().getWidth() - 2,
+ 0,
+ sFocusOutlineColor, FALSE);
if (show_context)
{
- gl_rect_2d(
- FOCUS_LEFT,
- focus_bottom + 1,
- getRect().getWidth() - 2,
- 0,
- sHighlightBgColor, TRUE);
+ gl_rect_2d(FOCUS_LEFT,
+ focus_bottom + 1,
+ getRect().getWidth() - 2,
+ 0,
+ sHighlightBgColor, TRUE);
}
}
}
+
+ //--------------------------------------------------------------------------------//
+ // Draw DragNDrop highlight
+ //
if (mDragAndDropTarget)
{
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gl_rect_2d(
- FOCUS_LEFT,
- focus_top,
- getRect().getWidth() - 2,
- focus_bottom,
- sHighlightBgColor, FALSE);
+ gl_rect_2d(FOCUS_LEFT,
+ focus_top,
+ getRect().getWidth() - 2,
+ focus_bottom,
+ sHighlightBgColor, FALSE);
if (folder_open)
{
- gl_rect_2d(
- FOCUS_LEFT,
- focus_bottom + 1, // overlap with bottom edge of above rect
- getRect().getWidth() - 2,
- 0,
- sHighlightBgColor, FALSE);
+ gl_rect_2d(FOCUS_LEFT,
+ focus_bottom + 1, // overlap with bottom edge of above rect
+ getRect().getWidth() - 2,
+ 0,
+ sHighlightBgColor, FALSE);
}
mDragAndDropTarget = FALSE;
}
- S32 icon_x = mIndentation + ARROW_SIZE + TEXT_PAD;
- // First case is used for open folders
- if (!mIconOpen.isNull() && (llabs(mControlLabelRotation) > 80))
+
+ //--------------------------------------------------------------------------------//
+ // Draw open icon
+ //
+ const S32 icon_x = mIndentation + ARROW_SIZE + TEXT_PAD;
+ if (!mIconOpen.isNull() && (llabs(mControlLabelRotation) > 80)) // For open folders
{
mIconOpen->draw(icon_x, getRect().getHeight() - mIconOpen->getHeight() - TOP_PAD + 1);
}
- else if(mIcon)
+ else if (mIcon)
{
mIcon->draw(icon_x, getRect().getHeight() - mIcon->getHeight() - TOP_PAD + 1);
}
- if (!mLabel.empty())
- {
- // highlight filtered text
- BOOL debug_filters = getRoot()->getDebugFilters();
- LLColor4 color = ( (mIsSelected && filled) ? sHighlightFgColor : sFgColor );
- F32 right_x;
- F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
- if (debug_filters)
- {
- if (!getFiltered() && !possibly_has_children)
- {
- color.mV[VALPHA] *= 0.5f;
- }
-
- LLColor4 filter_color = mLastFilterGeneration >= getRoot()->getFilter()->getCurrentGeneration() ? LLColor4(0.5f, 0.8f, 0.5f, 1.f) : LLColor4(0.8f, 0.5f, 0.5f, 1.f);
- LLFontGL::getFontMonospace()->renderUTF8(
- mStatusText, 0, text_left, y, filter_color,
- LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
- S32_MAX, S32_MAX, &right_x, FALSE );
- text_left = right_x;
- }
+ //--------------------------------------------------------------------------------//
+ // Exit if no label to draw
+ //
+ if (mLabel.empty())
+ {
+ return;
+ }
+ LLColor4 color = (mIsSelected && filled) ? sHighlightFgColor : sFgColor;
+ if (in_library) color = sLibraryColor;
- font->renderUTF8( mLabel, 0, text_left, y, color,
- LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
- S32_MAX, getRect().getWidth() - (S32) text_left, &right_x, TRUE);
+ 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);
-// LLViewerInventoryCategory *item = 0;
-// if (getListener())
-// item = gInventory.getCategory(getListener()->getUUID());
- bool root_is_loading = false;
- if (getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(),gInventory.getRootFolderID()))
- {
- // Descendent of my inventory.
- root_is_loading = gInventory.myInventoryFetchInProgress();
- }
- if (getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(),gInventory.getLibraryRootFolderID()))
- {
- // Descendent of library
- root_is_loading = gInventory.libraryFetchInProgress();
- }
-
- if ( (mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime"))
- || (LLInventoryModel::backgroundFetchActive() && root_is_loading && mShowLoadStatus) )
+ //--------------------------------------------------------------------------------//
+ // Highlight filtered text
+ //
+ if (getRoot()->getDebugFilters())
+ {
+ if (!getFiltered() && !possibly_has_children)
{
- std::string load_string = " ( " + LLTrans::getString("LoadingData") + " ) ";
- font->renderUTF8(load_string, 0, right_x, y, sSearchStatusColor,
- LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, &right_x, FALSE);
+ color.mV[VALPHA] *= 0.5f;
}
+ LLColor4 filter_color = mLastFilterGeneration >= getRoot()->getFilter()->getCurrentGeneration() ?
+ LLColor4(0.5f, 0.8f, 0.5f, 1.f) :
+ LLColor4(0.8f, 0.5f, 0.5f, 1.f);
+ LLFontGL::getFontMonospace()->renderUTF8(mStatusText, 0, text_left, y, filter_color,
+ LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
+ S32_MAX, S32_MAX, &right_x, FALSE );
+ text_left = right_x;
+ }
+ //--------------------------------------------------------------------------------//
+ // Draw the actual label text
+ //
+ font->renderUTF8(mLabel, 0, text_left, y, color,
+ LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
+ S32_MAX, getRect().getWidth() - (S32) text_left, &right_x, TRUE);
- if (!mLabelSuffix.empty())
- {
- font->renderUTF8( mLabelSuffix, 0, right_x, y, sSuffixColor,
- LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
- S32_MAX, S32_MAX, &right_x, FALSE );
- }
+ //--------------------------------------------------------------------------------//
+ // Draw "Loading..." text
+ //
+ bool root_is_loading = false;
+ if (in_inventory)
+ {
+ root_is_loading = LLInventoryModelBackgroundFetch::instance().inventoryFetchInProgress();
+ }
+ if (in_library)
+ {
+ root_is_loading = LLInventoryModelBackgroundFetch::instance().libraryFetchInProgress();
+ }
+ if ((mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime")) ||
+ (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && root_is_loading && (mShowLoadStatus || mHidden)))
+ {
+ std::string load_string = " ( " + LLTrans::getString("LoadingData") + " ) ";
+ font->renderUTF8(load_string, 0, right_x, y, sSearchStatusColor,
+ LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
+ S32_MAX, S32_MAX, &right_x, FALSE);
+ }
+
+ //--------------------------------------------------------------------------------//
+ // Draw label suffix
+ //
+ if (!mLabelSuffix.empty())
+ {
+ font->renderUTF8( mLabelSuffix, 0, right_x, y, sSuffixColor,
+ LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
+ S32_MAX, S32_MAX, &right_x, FALSE );
+ }
- if (mStringMatchOffset != std::string::npos)
+ //--------------------------------------------------------------------------------//
+ // Highlight string match
+ //
+ if (mStringMatchOffset != std::string::npos)
+ {
+ // don't draw backgrounds for zero-length strings
+ S32 filter_string_length = getRoot()->getFilterSubString().size();
+ if (filter_string_length > 0)
{
- // don't draw backgrounds for zero-length strings
- S32 filter_string_length = getRoot()->getFilterSubString().size();
- if (filter_string_length > 0)
- {
- std::string combined_string = mLabel + mLabelSuffix;
- S32 left = llround(text_left) + font->getWidth(combined_string, 0, mStringMatchOffset) - 1;
- S32 right = left + font->getWidth(combined_string, mStringMatchOffset, filter_string_length) + 2;
- S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD);
- S32 top = getRect().getHeight() - TOP_PAD;
+ std::string combined_string = mLabel + mLabelSuffix;
+ S32 left = llround(text_left) + font->getWidth(combined_string, 0, mStringMatchOffset) - 1;
+ S32 right = left + font->getWidth(combined_string, mStringMatchOffset, filter_string_length) + 2;
+ S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD);
+ S32 top = getRect().getHeight() - TOP_PAD;
- LLUIImage* box_image = default_params.selection_image;
- LLRect box_rect(left, top, right, bottom);
- box_image->draw(box_rect, sFilterBGColor);
- F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mStringMatchOffset);
- F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
- font->renderUTF8( combined_string, mStringMatchOffset, match_string_left, yy,
- sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
- filter_string_length, S32_MAX, &right_x, FALSE );
- }
+ LLUIImage* box_image = default_params.selection_image;
+ LLRect box_rect(left, top, right, bottom);
+ box_image->draw(box_rect, sFilterBGColor);
+ F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mStringMatchOffset);
+ F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
+ font->renderUTF8( combined_string, mStringMatchOffset, match_string_left, yy,
+ sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
+ filter_string_length, S32_MAX, &right_x, FALSE );
}
}
}
@@ -1044,20 +1059,21 @@ void LLFolderViewItem::draw()
///----------------------------------------------------------------------------
LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ):
-LLFolderViewItem( p ), // 0 = no create time
-mIsOpen(FALSE),
-mExpanderHighlighted(FALSE),
-mCurHeight(0.f),
-mTargetHeight(0.f),
-mAutoOpenCountdown(0.f),
-mSubtreeCreationDate(0),
-mAmTrash(LLFolderViewFolder::UNKNOWN),
-mLastArrangeGeneration( -1 ),
-mLastCalculatedWidth(0),
-mCompletedFilterGeneration(-1),
-mMostFilteredDescendantGeneration(-1),
-mNeedsSort(false)
-{}
+ LLFolderViewItem( p ), // 0 = no create time
+ mIsOpen(FALSE),
+ mExpanderHighlighted(FALSE),
+ mCurHeight(0.f),
+ mTargetHeight(0.f),
+ mAutoOpenCountdown(0.f),
+ mSubtreeCreationDate(0),
+ mAmTrash(LLFolderViewFolder::UNKNOWN),
+ mLastArrangeGeneration( -1 ),
+ mLastCalculatedWidth(0),
+ mCompletedFilterGeneration(-1),
+ mMostFilteredDescendantGeneration(-1),
+ mNeedsSort(false)
+{
+}
// Destroys the object
LLFolderViewFolder::~LLFolderViewFolder( void )
@@ -1315,7 +1331,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
// when applying a filter, matching folders get their contents downloaded first
if (filter.isNotDefault() && getFiltered(filter.getMinRequiredGeneration()) && (mListener && !gInventory.isCategoryComplete(mListener->getUUID())))
{
- gInventory.startBackgroundFetch(mListener->getUUID());
+ LLInventoryModelBackgroundFetch::instance().start(mListener->getUUID());
}
// now query children
@@ -1459,7 +1475,6 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
{
rv = TRUE;
child_selected = TRUE;
- mNumDescendantsSelected++;
}
}
for (items_t::iterator iter = mItems.begin();
@@ -1470,7 +1485,6 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
{
rv = TRUE;
child_selected = TRUE;
- mNumDescendantsSelected++;
}
}
if(openitem && child_selected)
@@ -1503,14 +1517,6 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection,
folders_t::iterator fit = iter++;
if((*fit)->changeSelection(selection, selected))
{
- if (selected)
- {
- mNumDescendantsSelected++;
- }
- else
- {
- mNumDescendantsSelected--;
- }
rv = TRUE;
}
}
@@ -1520,14 +1526,6 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection,
items_t::iterator iit = iter++;
if((*iit)->changeSelection(selection, selected))
{
- if (selected)
- {
- mNumDescendantsSelected++;
- }
- else
- {
- mNumDescendantsSelected--;
- }
rv = TRUE;
}
}
@@ -1544,7 +1542,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
{
folders_t::iterator fit = iter++;
num_selected += (*fit)->extendSelection(selection, last_selected, selected_items);
- mNumDescendantsSelected += num_selected;
}
// handle selection of our immediate children...
@@ -1637,7 +1634,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
if (item->changeSelection(item, TRUE))
{
selected_items.put(item);
- mNumDescendantsSelected++;
num_selected++;
}
}
@@ -1648,7 +1644,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
if (selection->changeSelection(selection, TRUE))
{
selected_items.put(selection);
- mNumDescendantsSelected++;
num_selected++;
}
}
@@ -1656,47 +1651,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
return num_selected;
}
-void LLFolderViewFolder::recursiveDeselect(BOOL deselect_self)
-{
- // make sure we don't have negative values
- llassert(mNumDescendantsSelected >= 0);
-
- if (mIsSelected && deselect_self)
- {
- mIsSelected = FALSE;
-
- // update ancestors' count of selected descendents
- LLFolderViewFolder* parent_folder = getParentFolder();
- while(parent_folder)
- {
- parent_folder->mNumDescendantsSelected--;
- parent_folder = parent_folder->getParentFolder();
- }
- }
-
- if (0 == mNumDescendantsSelected)
- {
- return;
- }
-
- for (items_t::iterator iter = mItems.begin();
- iter != mItems.end();)
- {
- items_t::iterator iit = iter++;
- LLFolderViewItem* item = (*iit);
- item->recursiveDeselect(TRUE);
- }
-
- for (folders_t::iterator iter = mFolders.begin();
- iter != mFolders.end();)
- {
- folders_t::iterator fit = iter++;
- LLFolderViewFolder* folder = (*fit);
- folder->recursiveDeselect(TRUE);
- }
-
-}
-
void LLFolderViewFolder::destroyView()
{
for (items_t::iterator iter = mItems.begin();
@@ -1730,8 +1684,6 @@ BOOL LLFolderViewFolder::removeItem(LLFolderViewItem* item)
{
if(item->remove())
{
- //RN: this seem unneccessary as remove() moves to trash
- //removeView(item);
return TRUE;
}
return FALSE;
@@ -1746,7 +1698,6 @@ void LLFolderViewFolder::removeView(LLFolderViewItem* item)
return;
}
// deselect without traversing hierarchy
- item->recursiveDeselect(TRUE);
getRoot()->removeFromSelectionList(item);
extractItem(item);
delete item;
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index be8e73a5a9..655ad89e99 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -150,7 +150,6 @@ protected:
BOOL mHasVisibleChildren;
S32 mIndentation;
S32 mItemHeight;
- S32 mNumDescendantsSelected;
BOOL mPassedFilter;
S32 mLastFilterGeneration;
std::string::size_type mStringMatchOffset;
@@ -231,9 +230,6 @@ public:
// this method is used to group select items
virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items){ return FALSE; }
- // this method is used to group select items
- virtual void recursiveDeselect(BOOL deselect_self);
-
// gets multiple-element selection
virtual BOOL getSelectionList(std::set<LLUUID> &selection) const {return TRUE;}
@@ -246,10 +242,10 @@ public:
// destroys this item recursively
virtual void destroyView();
- S32 getNumSelectedDescendants() { return mNumDescendantsSelected; }
-
BOOL isSelected() { return mIsSelected; }
+ void setUnselected() { mIsSelected = FALSE; }
+
void setIsCurSelection(BOOL select) { mIsCurSelection = select; }
BOOL getIsCurSelection() { return mIsCurSelection; }
@@ -441,8 +437,6 @@ public:
// this method is used to group select items
virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
- virtual void recursiveDeselect(BOOL deselect_self);
-
// Returns true is this object and all of its children can be removed.
virtual BOOL isRemovable();
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index ac060cef15..6f069cca17 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -33,6 +33,7 @@
#include "llviewerprecompiledheaders.h"
#include "llinventory.h"
+#include "llinventoryfunctions.h"
#include "llinventoryobserver.h"
#include "lltrans.h"
@@ -44,24 +45,28 @@
// Constants;
-static const std::string INVENTORY_STRING_FRIENDS_SUBFOLDER = "InvFolder Friends";
-static const std::string INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER = "InvFolder All";
+static const std::string INVENTORY_STRING_FRIENDS_SUBFOLDER = "Friends";
+static const std::string INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER = "All";
// helper functions
-// NOTE: Usage of LLTrans::getString(); in next two functions to set localized
-// folders' names is caused by a hack in the LLFolderViewItem::refreshFromListener()
-// method for protected asset types.
-// So, localized names will be got from the strings with "InvFolder LABEL_NAME"
-// in the strings.xml
+// NOTE: For now Friends & All folders are created as protected folders of the LLFolderType::FT_CALLINGCARD type.
+// So, their names will be processed in the LLFolderViewItem::refreshFromListener() to be localized
+// using "InvFolder LABEL_NAME" as LLTrans::findString argument.
+
+// We must use in this file their hard-coded names to ensure found them on different locales. EXT-5829.
+// These hard-coded names will be stored in InventoryItems but shown localized in FolderViewItems
+
+// If hack in the LLFolderViewItem::refreshFromListener() to localize protected folder is removed
+// or these folders are not protected these names should be localized in another place/way.
inline const std::string get_friend_folder_name()
{
- return LLTrans::getString(INVENTORY_STRING_FRIENDS_SUBFOLDER);
+ return INVENTORY_STRING_FRIENDS_SUBFOLDER;
}
inline const std::string get_friend_all_subfolder_name()
{
- return LLTrans::getString(INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER);
+ return INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER;
}
void move_from_to_arrays(LLInventoryModel::cat_array_t& from, LLInventoryModel::cat_array_t& to)
@@ -318,7 +323,7 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud
if (NULL == items)
continue;
- std::vector<LLUUID> buddyUUIDs;
+ uuid_vec_t buddyUUIDs;
for (itBuddy = items->begin(); itBuddy != items->end(); ++itBuddy)
{
buddyUUIDs.push_back((*itBuddy)->getCreatorUUID());
@@ -350,9 +355,9 @@ const LLUUID& LLFriendCardsManager::findFriendAllSubfolderUUIDImpl() const
return findChildFolderUUID(friendFolderUUID, friendAllSubfolderName);
}
-const LLUUID& LLFriendCardsManager::findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& localizedName) const
+const LLUUID& LLFriendCardsManager::findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& nonLocalizedName) const
{
- LLNameCategoryCollector matchFolderFunctor(localizedName);
+ LLNameCategoryCollector matchFolderFunctor(nonLocalizedName);
return get_folder_uuid(parentFolderUUID, matchFolderFunctor);
}
@@ -405,10 +410,10 @@ void LLFriendCardsManager::fetchAndCheckFolderDescendents(const LLUUID& folder_i
// This instance will be deleted in LLInitialFriendCardsFetch::done().
LLInitialFriendCardsFetch* fetch = new LLInitialFriendCardsFetch(cb);
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+ uuid_vec_t folders;
folders.push_back(folder_id);
- fetch->fetchDescendents(folders);
+ fetch->fetch(folders);
if(fetch->isEverythingComplete())
{
// everything is already here - call done.
diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h
index b94d5ec2c0..638a1eca84 100644
--- a/indra/newview/llfriendcard.h
+++ b/indra/newview/llfriendcard.h
@@ -49,7 +49,7 @@ class LLFriendCardsManager
friend class CreateFriendCardCallback;
public:
- typedef std::map<LLUUID, std::vector<LLUUID> > folderid_buddies_map_t;
+ typedef std::map<LLUUID, uuid_vec_t > folderid_buddies_map_t;
// LLFriendObserver implementation
void changed(U32 mask)
@@ -120,7 +120,7 @@ private:
return (mBuddyIDSet.end() != mBuddyIDSet.find(avatarID));
}
- const LLUUID& findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& localizedName) const;
+ const LLUUID& findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& nonLocalizedName) const;
const LLUUID& findFriendFolderUUIDImpl() const;
const LLUUID& findFriendAllSubfolderUUIDImpl() const;
const LLUUID& findFriendCardInventoryUUIDImpl(const LLUUID& avatarID);
diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp
index 0ba7bdf613..a4342a4bc9 100644
--- a/indra/newview/llgesturemgr.cpp
+++ b/indra/newview/llgesturemgr.cpp
@@ -67,7 +67,7 @@ static const LLUUID& get_linked_uuid(const LLUUID& item_id);
// Lightweight constructor.
// init() does the heavy lifting.
-LLGestureManager::LLGestureManager()
+LLGestureMgr::LLGestureMgr()
: mValid(FALSE),
mPlaying(),
mActive(),
@@ -79,7 +79,7 @@ LLGestureManager::LLGestureManager()
// We own the data for gestures, so clean them up.
-LLGestureManager::~LLGestureManager()
+LLGestureMgr::~LLGestureMgr()
{
item_map_t::iterator it;
for (it = mActive.begin(); it != mActive.end(); ++it)
@@ -93,12 +93,12 @@ LLGestureManager::~LLGestureManager()
}
-void LLGestureManager::init()
+void LLGestureMgr::init()
{
// TODO
}
-void LLGestureManager::changed(U32 mask)
+void LLGestureMgr::changed(U32 mask)
{
LLInventoryFetchObserver::changed(mask);
@@ -136,7 +136,7 @@ void LLGestureManager::changed(U32 mask)
// Use this version when you have the item_id but not the asset_id,
// and you KNOW the inventory is loaded.
-void LLGestureManager::activateGesture(const LLUUID& item_id)
+void LLGestureMgr::activateGesture(const LLUUID& item_id)
{
LLViewerInventoryItem* item = gInventory.getItem(item_id);
if (!item) return;
@@ -152,7 +152,7 @@ void LLGestureManager::activateGesture(const LLUUID& item_id)
}
-void LLGestureManager::activateGestures(LLViewerInventoryItem::item_array_t& items)
+void LLGestureMgr::activateGestures(LLViewerInventoryItem::item_array_t& items)
{
// Load up the assets
S32 count = 0;
@@ -248,7 +248,7 @@ struct LLLoadInfo
/**
* It will load a gesture from remote storage
*/
-void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,
+void LLGestureMgr::activateGestureWithAsset(const LLUUID& item_id,
const LLUUID& asset_id,
BOOL inform_server,
BOOL deactivate_similar)
@@ -257,7 +257,7 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,
if( !gAssetStorage )
{
- llwarns << "LLGestureManager::activateGestureWithAsset without valid gAssetStorage" << llendl;
+ llwarns << "LLGestureMgr::activateGestureWithAsset without valid gAssetStorage" << llendl;
return;
}
// If gesture is already active, nothing to do.
@@ -299,7 +299,7 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,
}
-void LLGestureManager::deactivateGesture(const LLUUID& item_id)
+void LLGestureMgr::deactivateGesture(const LLUUID& item_id)
{
const LLUUID& base_item_id = get_linked_uuid(item_id);
item_map_t::iterator it = mActive.find(base_item_id);
@@ -338,16 +338,16 @@ void LLGestureManager::deactivateGesture(const LLUUID& item_id)
gAgent.sendReliableMessage();
- LLAppearanceManager::instance().removeCOFItemLinks(base_item_id, false);
+ LLAppearanceMgr::instance().removeCOFItemLinks(base_item_id, false);
notifyObservers();
}
-void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& in_item_id)
+void LLGestureMgr::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& in_item_id)
{
const LLUUID& base_in_item_id = get_linked_uuid(in_item_id);
- std::vector<LLUUID> gest_item_ids;
+ uuid_vec_t gest_item_ids;
// Deactivate all gestures that match
item_map_t::iterator it;
@@ -386,7 +386,7 @@ void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUI
// Inform database of the change
LLMessageSystem* msg = gMessageSystem;
BOOL start_message = TRUE;
- std::vector<LLUUID>::const_iterator vit = gest_item_ids.begin();
+ uuid_vec_t::const_iterator vit = gest_item_ids.begin();
while (vit != gest_item_ids.end())
{
if (start_message)
@@ -431,7 +431,7 @@ void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUI
}
-BOOL LLGestureManager::isGestureActive(const LLUUID& item_id)
+BOOL LLGestureMgr::isGestureActive(const LLUUID& item_id)
{
const LLUUID& base_item_id = get_linked_uuid(item_id);
item_map_t::iterator it = mActive.find(base_item_id);
@@ -439,7 +439,7 @@ BOOL LLGestureManager::isGestureActive(const LLUUID& item_id)
}
-BOOL LLGestureManager::isGesturePlaying(const LLUUID& item_id)
+BOOL LLGestureMgr::isGesturePlaying(const LLUUID& item_id)
{
const LLUUID& base_item_id = get_linked_uuid(item_id);
@@ -452,7 +452,7 @@ BOOL LLGestureManager::isGesturePlaying(const LLUUID& item_id)
return gesture->mPlaying;
}
-BOOL LLGestureManager::isGesturePlaying(LLMultiGesture* gesture)
+BOOL LLGestureMgr::isGesturePlaying(LLMultiGesture* gesture)
{
if(!gesture)
{
@@ -462,7 +462,7 @@ BOOL LLGestureManager::isGesturePlaying(LLMultiGesture* gesture)
return gesture->mPlaying;
}
-void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_gesture, const LLUUID& asset_id)
+void LLGestureMgr::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_gesture, const LLUUID& asset_id)
{
const LLUUID& base_item_id = get_linked_uuid(item_id);
@@ -504,11 +504,11 @@ void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new
notifyObservers();
}
-void LLGestureManager::replaceGesture(const LLUUID& item_id, const LLUUID& new_asset_id)
+void LLGestureMgr::replaceGesture(const LLUUID& item_id, const LLUUID& new_asset_id)
{
const LLUUID& base_item_id = get_linked_uuid(item_id);
- item_map_t::iterator it = LLGestureManager::instance().mActive.find(base_item_id);
+ item_map_t::iterator it = LLGestureMgr::instance().mActive.find(base_item_id);
if (it == mActive.end())
{
llwarns << "replaceGesture for inactive gesture " << base_item_id << llendl;
@@ -517,10 +517,10 @@ void LLGestureManager::replaceGesture(const LLUUID& item_id, const LLUUID& new_a
// mActive owns this gesture pointer, so clean up memory.
LLMultiGesture* gesture = (*it).second;
- LLGestureManager::instance().replaceGesture(base_item_id, gesture, new_asset_id);
+ LLGestureMgr::instance().replaceGesture(base_item_id, gesture, new_asset_id);
}
-void LLGestureManager::playGesture(LLMultiGesture* gesture)
+void LLGestureMgr::playGesture(LLMultiGesture* gesture)
{
if (!gesture) return;
@@ -539,7 +539,7 @@ void LLGestureManager::playGesture(LLMultiGesture* gesture)
// Convenience function that looks up the item_id for you.
-void LLGestureManager::playGesture(const LLUUID& item_id)
+void LLGestureMgr::playGesture(const LLUUID& item_id)
{
const LLUUID& base_item_id = get_linked_uuid(item_id);
@@ -556,7 +556,7 @@ void LLGestureManager::playGesture(const LLUUID& item_id)
// Iterates through space delimited tokens in string, triggering any gestures found.
// Generates a revised string that has the found tokens replaced by their replacement strings
// and (as a minor side effect) has multiple spaces in a row replaced by single spaces.
-BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::string* revised_string)
+BOOL LLGestureMgr::triggerAndReviseString(const std::string &utf8str, std::string* revised_string)
{
std::string tokenized = utf8str;
@@ -649,7 +649,7 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s
}
-BOOL LLGestureManager::triggerGesture(KEY key, MASK mask)
+BOOL LLGestureMgr::triggerGesture(KEY key, MASK mask)
{
std::vector <LLMultiGesture *> matching;
item_map_t::iterator it;
@@ -683,7 +683,7 @@ BOOL LLGestureManager::triggerGesture(KEY key, MASK mask)
}
-S32 LLGestureManager::getPlayingCount() const
+S32 LLGestureMgr::getPlayingCount() const
{
return mPlaying.size();
}
@@ -697,7 +697,7 @@ struct IsGesturePlaying : public std::unary_function<LLMultiGesture*, bool>
}
};
-void LLGestureManager::update()
+void LLGestureMgr::update()
{
S32 i;
for (i = 0; i < (S32)mPlaying.size(); ++i)
@@ -740,14 +740,13 @@ void LLGestureManager::update()
// Run all steps until you're either done or hit a wait.
-void LLGestureManager::stepGesture(LLMultiGesture* gesture)
+void LLGestureMgr::stepGesture(LLMultiGesture* gesture)
{
if (!gesture)
{
return;
}
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- if (!avatar) return;
+ if (!isAgentAvatarValid()) return;
// Of the ones that started playing, have any stopped?
@@ -758,8 +757,8 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture)
{
// look in signaled animations (simulator's view of what is
// currently playing.
- LLVOAvatar::AnimIterator play_it = avatar->mSignaledAnimations.find(*gest_it);
- if (play_it != avatar->mSignaledAnimations.end())
+ LLVOAvatar::AnimIterator play_it = gAgentAvatarp->mSignaledAnimations.find(*gest_it);
+ if (play_it != gAgentAvatarp->mSignaledAnimations.end())
{
++gest_it;
}
@@ -777,8 +776,8 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture)
gest_it != gesture->mRequestedAnimIDs.end();
)
{
- LLVOAvatar::AnimIterator play_it = avatar->mSignaledAnimations.find(*gest_it);
- if (play_it != avatar->mSignaledAnimations.end())
+ LLVOAvatar::AnimIterator play_it = gAgentAvatarp->mSignaledAnimations.find(*gest_it);
+ if (play_it != gAgentAvatarp->mSignaledAnimations.end())
{
// Hooray, this animation has started playing!
// Copy into playing.
@@ -888,7 +887,7 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture)
}
-void LLGestureManager::runStep(LLMultiGesture* gesture, LLGestureStep* step)
+void LLGestureMgr::runStep(LLMultiGesture* gesture, LLGestureStep* step)
{
switch(step->getType())
{
@@ -975,7 +974,7 @@ void LLGestureManager::runStep(LLMultiGesture* gesture, LLGestureStep* step)
// static
-void LLGestureManager::onLoadComplete(LLVFS *vfs,
+void LLGestureMgr::onLoadComplete(LLVFS *vfs,
const LLUUID& asset_uuid,
LLAssetType::EType type,
void* user_data, S32 status, LLExtStat ext_status)
@@ -988,7 +987,7 @@ void LLGestureManager::onLoadComplete(LLVFS *vfs,
delete info;
info = NULL;
- LLGestureManager& self = LLGestureManager::instance();
+ LLGestureMgr& self = LLGestureMgr::instance();
self.mLoadingCount--;
if (0 == status)
@@ -1032,9 +1031,9 @@ void LLGestureManager::onLoadComplete(LLVFS *vfs,
else
{
// Watch this item and set gesture name when item exists in inventory
- item_ref_t ids;
+ uuid_vec_t ids;
ids.push_back(item_id);
- self.fetchItems(ids);
+ self.fetch(ids);
}
self.mActive[item_id] = gesture;
@@ -1094,12 +1093,12 @@ void LLGestureManager::onLoadComplete(LLVFS *vfs,
llwarns << "Problem loading gesture: " << status << llendl;
- LLGestureManager::instance().mActive.erase(item_id);
+ LLGestureMgr::instance().mActive.erase(item_id);
}
}
-void LLGestureManager::stopGesture(LLMultiGesture* gesture)
+void LLGestureMgr::stopGesture(LLMultiGesture* gesture)
{
if (!gesture) return;
@@ -1139,7 +1138,7 @@ void LLGestureManager::stopGesture(LLMultiGesture* gesture)
}
-void LLGestureManager::stopGesture(const LLUUID& item_id)
+void LLGestureMgr::stopGesture(const LLUUID& item_id)
{
const LLUUID& base_item_id = get_linked_uuid(item_id);
@@ -1153,12 +1152,12 @@ void LLGestureManager::stopGesture(const LLUUID& item_id)
}
-void LLGestureManager::addObserver(LLGestureManagerObserver* observer)
+void LLGestureMgr::addObserver(LLGestureManagerObserver* observer)
{
mObservers.push_back(observer);
}
-void LLGestureManager::removeObserver(LLGestureManagerObserver* observer)
+void LLGestureMgr::removeObserver(LLGestureManagerObserver* observer)
{
std::vector<LLGestureManagerObserver*>::iterator it;
it = std::find(mObservers.begin(), mObservers.end(), observer);
@@ -1171,9 +1170,9 @@ void LLGestureManager::removeObserver(LLGestureManagerObserver* observer)
// Call this method when it's time to update everyone on a new state.
// Copy the list because an observer could respond by removing itself
// from the list.
-void LLGestureManager::notifyObservers()
+void LLGestureMgr::notifyObservers()
{
- lldebugs << "LLGestureManager::notifyObservers" << llendl;
+ lldebugs << "LLGestureMgr::notifyObservers" << llendl;
std::vector<LLGestureManagerObserver*> observers = mObservers;
@@ -1185,7 +1184,7 @@ void LLGestureManager::notifyObservers()
}
}
-BOOL LLGestureManager::matchPrefix(const std::string& in_str, std::string* out_str)
+BOOL LLGestureMgr::matchPrefix(const std::string& in_str, std::string* out_str)
{
S32 in_len = in_str.length();
@@ -1216,7 +1215,7 @@ BOOL LLGestureManager::matchPrefix(const std::string& in_str, std::string* out_s
}
-void LLGestureManager::getItemIDs(std::vector<LLUUID>* ids)
+void LLGestureMgr::getItemIDs(uuid_vec_t* ids)
{
item_map_t::const_iterator it;
for (it = mActive.begin(); it != mActive.end(); ++it)
@@ -1225,7 +1224,7 @@ void LLGestureManager::getItemIDs(std::vector<LLUUID>* ids)
}
}
-void LLGestureManager::done()
+void LLGestureMgr::done()
{
bool notify = false;
for(item_map_t::iterator it = mActive.begin(); it != mActive.end(); ++it)
diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h
index 3dd184ddc7..081ca983a9 100644
--- a/indra/newview/llgesturemgr.h
+++ b/indra/newview/llgesturemgr.h
@@ -54,7 +54,7 @@ public:
virtual void changed() = 0;
};
-class LLGestureManager : public LLSingleton<LLGestureManager>, public LLInventoryFetchObserver
+class LLGestureMgr : public LLSingleton<LLGestureMgr>, public LLInventoryFetchObserver
{
public:
@@ -63,8 +63,8 @@ public:
typedef std::map<LLUUID, LLMultiGesture*> item_map_t;
typedef std::map<LLUUID, gesture_loaded_callback_t> callback_map_t;
- LLGestureManager();
- ~LLGestureManager();
+ LLGestureMgr();
+ ~LLGestureMgr();
void init();
@@ -146,7 +146,7 @@ public:
BOOL matchPrefix(const std::string& in_str, std::string* out_str);
// Copy item ids into the vector
- void getItemIDs(std::vector<LLUUID>* ids);
+ void getItemIDs(uuid_vec_t* ids);
protected:
// Handle the processing of a single gesture
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 750a9d478f..2aba0b5c09 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -71,99 +71,6 @@
// Height of the yellow selection highlight posts for land
const F32 PARCEL_POST_HEIGHT = 0.666f;
-BOOL LLAgent::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position)
-{
- if(object && object->isAttachment())
- {
- LLViewerObject* parent = object;
- while(parent)
- {
- if (parent == mAvatarObject)
- {
- // looking at an attachment on ourselves, which we don't want to do
- object = mAvatarObject;
- position.clearVec();
- }
- parent = (LLViewerObject*)parent->getParent();
- }
- }
- if(!mLookAt || mLookAt->isDead())
- {
- mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT);
- mLookAt->setSourceObject(mAvatarObject);
- }
-
- return mLookAt->setLookAt(target_type, object, position);
-}
-
-BOOL LLAgent::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position)
-{
- // disallow pointing at attachments and avatars
- if (object && (object->isAttachment() || object->isAvatar()))
- {
- return FALSE;
- }
-
- if(!mPointAt || mPointAt->isDead())
- {
- mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT);
- mPointAt->setSourceObject(mAvatarObject);
- }
-
- return mPointAt->setPointAt(target_type, object, position);
-}
-
-ELookAtType LLAgent::getLookAtType()
-{
- if (mLookAt)
- {
- return mLookAt->getLookAtType();
- }
-
- return LOOKAT_TARGET_NONE;
-}
-
-EPointAtType LLAgent::getPointAtType()
-{
- if (mPointAt)
- {
- return mPointAt->getPointAtType();
- }
-
- return POINTAT_TARGET_NONE;
-}
-
-// Draw a representation of current autopilot target
-void LLAgent::renderAutoPilotTarget()
-{
- if (mAutoPilot)
- {
- F32 height_meters;
- LLVector3d target_global;
-
- glMatrixMode(GL_MODELVIEW);
- gGL.pushMatrix();
-
- // not textured
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-
- // lovely green
- glColor4f(0.f, 1.f, 1.f, 1.f);
-
- target_global = mAutoPilotTargetGlobal;
-
- gGL.translatef((F32)(target_global.mdV[VX]), (F32)(target_global.mdV[VY]), (F32)(target_global.mdV[VZ]));
-
- height_meters = 1.f;
-
- glScalef(height_meters, height_meters, height_meters);
-
- gSphere.render(1500.f);
-
- gGL.popMatrix();
- }
-}
-
// Returns true if you got at least one object
void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
{
@@ -897,19 +804,21 @@ void LLViewerObjectList::renderObjectBeacons()
S32 last_line_width = -1;
// gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width)
- for (S32 i = 0; i < mDebugBeacons.count(); i++)
+ BOOL flush = FALSE;
+ for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter)
{
- const LLDebugBeacon &debug_beacon = mDebugBeacons[i];
+ const LLDebugBeacon &debug_beacon = *iter;
LLColor4 color = debug_beacon.mColor;
color.mV[3] *= 0.25f;
S32 line_width = debug_beacon.mLineWidth;
if (line_width != last_line_width)
{
- if (i > 0)
+ if (flush)
{
gGL.end();
- gGL.flush();
}
+ flush = TRUE;
+ gGL.flush();
glLineWidth( (F32)line_width );
last_line_width = line_width;
gGL.begin(LLRender::LINES);
@@ -936,18 +845,20 @@ void LLViewerObjectList::renderObjectBeacons()
S32 last_line_width = -1;
// gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width)
- for (S32 i = 0; i < mDebugBeacons.count(); i++)
+ BOOL flush = FALSE;
+ for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter)
{
- const LLDebugBeacon &debug_beacon = mDebugBeacons[i];
+ const LLDebugBeacon &debug_beacon = *iter;
S32 line_width = debug_beacon.mLineWidth;
if (line_width != last_line_width)
{
- if (i > 0)
+ if (flush)
{
gGL.end();
- gGL.flush();
}
+ flush = TRUE;
+ gGL.flush();
glLineWidth( (F32)line_width );
last_line_width = line_width;
gGL.begin(LLRender::LINES);
@@ -969,9 +880,9 @@ void LLViewerObjectList::renderObjectBeacons()
gGL.flush();
glLineWidth(1.f);
- for (S32 i = 0; i < mDebugBeacons.count(); i++)
+ for (std::vector<LLDebugBeacon>::iterator iter = mDebugBeacons.begin(); iter != mDebugBeacons.end(); ++iter)
{
- LLDebugBeacon &debug_beacon = mDebugBeacons[i];
+ LLDebugBeacon &debug_beacon = *iter;
if (debug_beacon.mString == "")
{
continue;
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 00e2365ffd..d4eecc8c48 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -105,7 +105,7 @@ public:
{
if (group_id.isNull())
return true;
- LLGroupActions::show(group_id);
+ LLGroupActions::inspect(group_id);
return true;
}
return false;
@@ -246,6 +246,12 @@ static bool isGroupUIVisible()
return panel->isInVisibleChain();
}
+// static
+void LLGroupActions::inspect(const LLUUID& group_id)
+{
+ LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", group_id));
+}
+
// static
void LLGroupActions::show(const LLUUID& group_id)
{
diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h
index e99df86cd9..55cae4db0b 100644
--- a/indra/newview/llgroupactions.h
+++ b/indra/newview/llgroupactions.h
@@ -66,6 +66,11 @@ public:
static void show(const LLUUID& group_id);
/**
+ * Show group inspector floater.
+ */
+ static void inspect(const LLUUID& group_id);
+
+ /**
* Refresh group information panel.
*/
static void refresh(const LLUUID& group_id);
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index bcfb516b81..8a056f836f 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -127,7 +127,7 @@ BOOL LLGroupList::handleRightMouseDown(S32 x, S32 y, MASK mask)
BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask);
LLMenuGL* context_menu = (LLMenuGL*)mContextMenuHandle.get();
- if (context_menu)
+ if (context_menu && size() > 0)
{
context_menu->buildDrawLabels();
context_menu->updateParent(LLMenuGL::sMenuContainer);
diff --git a/indra/newview/llgrouplist.h b/indra/newview/llgrouplist.h
index f3ac676edd..0e9da25c58 100644
--- a/indra/newview/llgrouplist.h
+++ b/indra/newview/llgrouplist.h
@@ -74,6 +74,11 @@ public:
void setNameFilter(const std::string& filter);
void toggleIcons();
bool getIconsVisible() const { return mShowIcons; }
+
+ // *WORKAROUND: two methods to overload appropriate Params due to localization issue:
+ // no_groups_msg & no_filtered_groups_msg attributes are not defined as translatable in VLT. See EXT-5931
+ void setNoGroupsMsg(const std::string& msg) { mNoGroupsMsg = msg; }
+ void setNoFilteredGroupsMsg(const std::string& msg) { mNoFilteredGroupsMsg = msg; }
private:
void setDirty(bool val = true) { mDirty = val; }
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 6e7321f739..996553ccf7 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -54,8 +54,19 @@
#include "llgroupactions.h"
#include "llnotificationsutil.h"
#include "lluictrlfactory.h"
+#include "lltrans.h"
#include <boost/regex.hpp>
+#if LL_MSVC
+// disable boost::lexical_cast warning
+#pragma warning (disable:4702)
+#endif
+
+#include <boost/lexical_cast.hpp>
+
+#if LL_MSVC
+#pragma warning(pop) // Restore all warnings to the previous state
+#endif
const U32 MAX_CACHED_GROUPS = 10;
@@ -149,7 +160,7 @@ LLGroupRoleData::~LLGroupRoleData()
{
}
-S32 LLGroupRoleData::getMembersInRole(std::vector<LLUUID> members,
+S32 LLGroupRoleData::getMembersInRole(uuid_vec_t members,
BOOL needs_sort)
{
if (mRoleID.isNull())
@@ -173,8 +184,8 @@ S32 LLGroupRoleData::getMembersInRole(std::vector<LLUUID> members,
// Return the number of members in the intersection.
S32 max_size = llmin( members.size(), mMemberIDs.size() );
- std::vector<LLUUID> in_role( max_size );
- std::vector<LLUUID>::iterator in_role_end;
+ uuid_vec_t in_role( max_size );
+ uuid_vec_t::iterator in_role_end;
in_role_end = std::set_intersection(mMemberIDs.begin(), mMemberIDs.end(),
members.begin(), members.end(),
in_role.begin());
@@ -189,7 +200,7 @@ void LLGroupRoleData::addMember(const LLUUID& member)
bool LLGroupRoleData::removeMember(const LLUUID& member)
{
- std::vector<LLUUID>::iterator it = std::find(mMemberIDs.begin(),mMemberIDs.end(),member);
+ uuid_vec_t::iterator it = std::find(mMemberIDs.begin(),mMemberIDs.end(),member);
if (it != mMemberIDs.end())
{
@@ -833,12 +844,13 @@ static void formatDateString(std::string &date_string)
const regex expression("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})");
if (regex_match(date_string.c_str(), result, expression))
{
- std::string year = result[3];
- std::string month = result[1];
- std::string day = result[2];
+ // convert matches to integers so that we can pad them with zeroes on Linux
+ S32 year = boost::lexical_cast<S32>(result[3]);
+ S32 month = boost::lexical_cast<S32>(result[1]);
+ S32 day = boost::lexical_cast<S32>(result[2]);
// ISO 8601 date format
- date_string = llformat("%02s/%02s/%04s", month.c_str(), day.c_str(), year.c_str());
+ date_string = llformat("%04d/%02d/%02d", year, month, day);
}
}
@@ -1051,6 +1063,24 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
msg->getU64("RoleData","Powers",powers,i);
msg->getU32("RoleData","Members",member_count,i);
+ //there are 3 predifined roles - Owners, Officers, Everyone
+ //there names are defined in lldatagroups.cpp
+ //lets change names from server to localized strings
+ if(name == "Everyone")
+ {
+ name = LLTrans::getString("group_role_everyone");
+ }
+ else if(name == "Officers")
+ {
+ name = LLTrans::getString("group_role_officers");
+ }
+ else if(name == "Owners")
+ {
+ name = LLTrans::getString("group_role_owners");
+ }
+
+
+
lldebugs << "Adding role data: " << name << " {" << role_id << "}" << llendl;
LLGroupRoleData* rd = new LLGroupRoleData(role_id,name,title,desc,powers,member_count);
group_data->mRoles[role_id] = rd;
@@ -1706,7 +1736,7 @@ void LLGroupMgr::sendGroupMemberInvites(const LLUUID& group_id, std::map<LLUUID,
//static
void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
- std::vector<LLUUID>& member_ids)
+ uuid_vec_t& member_ids)
{
bool start_message = true;
LLMessageSystem* msg = gMessageSystem;
@@ -1716,7 +1746,7 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
if (!group_datap) return;
- for (std::vector<LLUUID>::iterator it = member_ids.begin();
+ for (uuid_vec_t::iterator it = member_ids.begin();
it != member_ids.end(); ++it)
{
LLUUID& ejected_member_id = (*it);
diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h
index 2c86de8b97..82df631b8c 100644
--- a/indra/newview/llgroupmgr.h
+++ b/indra/newview/llgroupmgr.h
@@ -139,8 +139,8 @@ public:
const LLUUID& getID() const { return mRoleID; }
- const std::vector<LLUUID>& getRoleMembers() const { return mMemberIDs; }
- S32 getMembersInRole(std::vector<LLUUID> members, BOOL needs_sort = TRUE);
+ const uuid_vec_t& getRoleMembers() const { return mMemberIDs; }
+ S32 getMembersInRole(uuid_vec_t members, BOOL needs_sort = TRUE);
S32 getTotalMembersInRole() { return mMemberIDs.size(); }
LLRoleData getRoleData() const { return mRoleData; }
@@ -150,10 +150,10 @@ public:
bool removeMember(const LLUUID& member);
void clearMembers();
- const std::vector<LLUUID>::const_iterator getMembersBegin() const
+ const uuid_vec_t::const_iterator getMembersBegin() const
{ return mMemberIDs.begin(); }
- const std::vector<LLUUID>::const_iterator getMembersEnd() const
+ const uuid_vec_t::const_iterator getMembersEnd() const
{ return mMemberIDs.end(); }
@@ -164,7 +164,7 @@ protected:
LLUUID mRoleID;
LLRoleData mRoleData;
- std::vector<LLUUID> mMemberIDs;
+ uuid_vec_t mMemberIDs;
S32 mMemberCount;
private:
@@ -340,7 +340,7 @@ public:
static void sendGroupMemberJoin(const LLUUID& group_id);
static void sendGroupMemberInvites(const LLUUID& group_id, std::map<LLUUID,LLUUID>& role_member_pairs);
static void sendGroupMemberEjects(const LLUUID& group_id,
- std::vector<LLUUID>& member_ids);
+ uuid_vec_t& member_ids);
void cancelGroupRoleChanges(const LLUUID& group_id);
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index 07b81ef134..3be0fcbc5f 100644
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -38,6 +38,7 @@
#include "message.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llvoavatar.h"
#include "lldrawable.h"
#include "llviewerobjectlist.h"
@@ -316,7 +317,7 @@ void LLHUDEffectLookAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
LLUUID dataId;
mesgsys->getUUIDFast(_PREHASH_Effect, _PREHASH_ID, dataId, blocknum);
- if (!gAgent.mLookAt.isNull() && dataId == gAgent.mLookAt->getID())
+ if (!gAgentCamera.mLookAt.isNull() && dataId == gAgentCamera.mLookAt->getID())
{
return;
}
@@ -637,7 +638,7 @@ bool LLHUDEffectLookAt::calcTargetPosition()
// mouselook and freelook target offsets are absolute
target_rot = LLQuaternion::DEFAULT;
}
- else if (looking_at_self && gAgent.cameraCustomizeAvatar())
+ else if (looking_at_self && gAgentCamera.cameraCustomizeAvatar())
{
// *NOTE: We have to do this because animation
// overrides do not set lookat behavior.
diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp
index a13ee8572f..01dfb50b10 100644
--- a/indra/newview/llhudeffectpointat.cpp
+++ b/indra/newview/llhudeffectpointat.cpp
@@ -38,6 +38,7 @@
#include "llrender.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "lldrawable.h"
#include "llviewerobjectlist.h"
#include "llvoavatar.h"
@@ -152,7 +153,7 @@ void LLHUDEffectPointAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
mesgsys->getUUIDFast(_PREHASH_Effect, _PREHASH_ID, dataId, blocknum);
// ignore messages from ourselves
- if (!gAgent.mPointAt.isNull() && dataId == gAgent.mPointAt->getID())
+ if (!gAgentCamera.mPointAt.isNull() && dataId == gAgentCamera.mPointAt->getID())
{
return;
}
diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp
index dc55aba0db..2b73ed1dcd 100644
--- a/indra/newview/llhudobject.cpp
+++ b/indra/newview/llhudobject.cpp
@@ -43,6 +43,7 @@
#include "llhudeffectbeam.h"
#include "llhudeffecttrail.h"
#include "llhudeffectlookat.h"
+#include "llhudeffectpointat.h"
#include "llvoicevisualizer.h"
diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp
index a02dc3355b..325c9c260c 100644
--- a/indra/newview/llhudrender.cpp
+++ b/indra/newview/llhudrender.cpp
@@ -121,24 +121,24 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent,
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
-
+ gGL.pushMatrix();
LLUI::pushMatrix();
gl_state_for_2d(world_view_rect.getWidth(), world_view_rect.getHeight());
gViewerWindow->setup3DViewport();
- //gViewerWindow->setup2DRender();
-
+
winX -= world_view_rect.mLeft;
winY -= world_view_rect.mBottom;
LLUI::loadIdentity();
+ glLoadIdentity();
LLUI::translate((F32) winX*1.0f/LLFontGL::sScaleX, (F32) winY*1.0f/(LLFontGL::sScaleY), -(((F32) winZ*2.f)-1.f));
- //glRotatef(angle * RAD_TO_DEG, axis.mV[VX], axis.mV[VY], axis.mV[VZ]);
- //glScalef(right_scale, up_scale, 1.f);
F32 right_x;
font.render(wstr, 0, 0, 0, color, LLFontGL::LEFT, LLFontGL::BASELINE, style, shadow, wstr.length(), 1000, &right_x);
+
LLUI::popMatrix();
-
+ gGL.popMatrix();
+
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 8ad94b957d..8d1d27444b 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -555,7 +555,7 @@ void LLHUDText::renderText(BOOL for_select)
}
}
/// Reset the default color to white. The renderer expects this to be the default.
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ gGL.color4f(1.0f, 1.0f, 1.0f, 1.0f);
if (for_select)
{
gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 9c0e7a158d..3ec8d11fb0 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -44,6 +44,7 @@
#include "llchiclet.h"
#include "llfloaterreg.h"
#include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container
+#include "llinventoryfunctions.h"
#include "lllayoutstack.h"
#include "lllineeditor.h"
#include "lllogchat.h"
@@ -112,6 +113,8 @@ LLIMFloater::LLIMFloater(const LLUUID& session_id)
setOverlapsScreenChannel(true);
LLTransientFloaterMgr::getInstance()->addControlView(LLTransientFloaterMgr::IM, this);
+
+ setDocked(true);
}
void LLIMFloater::onFocusLost()
@@ -125,13 +128,12 @@ void LLIMFloater::onFocusReceived()
{
LLIMModel::getInstance()->setActiveSessionID(mSessionID);
- // return focus to the input field when active tab in the multitab container is clicked.
- if (isChatMultiTab() && mInputEditor)
+ LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true);
+
+ if (getVisible())
{
- mInputEditor->setFocus(TRUE);
+ LLIMModel::instance().sendNoUnreadMessages(mSessionID);
}
-
- LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true);
}
// virtual
@@ -442,7 +444,7 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
void LLIMFloater::getAllowedRect(LLRect& rect)
{
- rect = gViewerWindow->getWorldViewRectRaw();
+ rect = gViewerWindow->getWorldViewRectScaled();
static S32 right_padding = 0;
if (right_padding == 0)
{
@@ -458,7 +460,7 @@ void LLIMFloater::getAllowedRect(LLRect& rect)
void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
{
// update notification channel state
- LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>
+ LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*>
(LLNotificationsUI::LLChannelManager::getInstance()->
findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
@@ -477,7 +479,7 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
void LLIMFloater::setVisible(BOOL visible)
{
- LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>
+ LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*>
(LLNotificationsUI::LLChannelManager::getInstance()->
findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
LLTransientDockableFloater::setVisible(visible);
@@ -613,7 +615,16 @@ void LLIMFloater::updateMessages()
bool use_plain_text_chat_history = gSavedSettings.getBOOL("PlainTextChatHistory");
std::list<LLSD> messages;
- LLIMModel::instance().getMessages(mSessionID, messages, mLastMessageIndex+1);
+
+ // we shouldn't reset unread message counters if IM floater doesn't have focus
+ if (hasFocus())
+ {
+ LLIMModel::instance().getMessages(mSessionID, messages, mLastMessageIndex+1);
+ }
+ else
+ {
+ LLIMModel::instance().getMessagesSilently(mSessionID, messages, mLastMessageIndex+1);
+ }
if (messages.size())
{
@@ -646,6 +657,24 @@ void LLIMFloater::updateMessages()
if (msg.has("notification_id"))
{
chat.mNotifId = msg["notification_id"].asUUID();
+ // if notification exists - embed it
+ if (LLNotificationsUtil::find(chat.mNotifId) != NULL)
+ {
+ // remove embedded notification from channel
+ LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*>
+ (LLNotificationsUI::LLChannelManager::getInstance()->
+ findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
+ if (getVisible())
+ {
+ // toast will be automatically closed since it is not storable toast
+ channel->hideToast(chat.mNotifId);
+ }
+ }
+ // if notification doesn't exist - try to use next message which should be log entry
+ else
+ {
+ continue;
+ }
}
//process text message
else
@@ -655,6 +684,19 @@ void LLIMFloater::updateMessages()
mChatHistory->appendMessage(chat, chat_args);
mLastMessageIndex = msg["index"].asInteger();
+
+ // if it is a notification - next message is a notification history log, so skip it
+ if (chat.mNotifId.notNull() && LLNotificationsUtil::find(chat.mNotifId) != NULL)
+ {
+ if (++iter == iter_end)
+ {
+ break;
+ }
+ else
+ {
+ mLastMessageIndex++;
+ }
+ }
}
}
}
@@ -680,15 +722,6 @@ void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void*
//in disconnected state IM input editor should be disabled
self->mInputEditor->setEnabled(!gDisconnected);
}
-
- // when IM Floater is a part of the multitab container LLTabContainer set focus to the first
- // child on tab button's mouse up. This leads input field lost focus. See EXT-3852.
- if (isChatMultiTab())
- {
- // So, clear control captured mouse to prevent LLTabContainer set focus on the panel's first child.
- // do not pass self->mInputEditor, this leads to have "Edit Text" mouse pointer wherever it is.
- gFocusMgr.setMouseCapture(NULL);
- }
}
// static
@@ -890,7 +923,7 @@ BOOL LLIMFloater::dropCallingCard(LLInventoryItem* item, BOOL drop)
{
if(drop)
{
- std::vector<LLUUID> ids;
+ uuid_vec_t ids;
ids.push_back(item->getCreatorUUID());
inviteToSession(ids);
}
@@ -923,7 +956,7 @@ BOOL LLIMFloater::dropCategory(LLInventoryCategory* category, BOOL drop)
}
else if(drop)
{
- std::vector<LLUUID> ids;
+ uuid_vec_t ids;
ids.reserve(count);
for(S32 i = 0; i < count; ++i)
{
@@ -960,7 +993,7 @@ private:
LLUUID mSessionID;
};
-BOOL LLIMFloater::inviteToSession(const std::vector<LLUUID>& ids)
+BOOL LLIMFloater::inviteToSession(const uuid_vec_t& ids)
{
LLViewerRegion* region = gAgent.getRegion();
if (!region)
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index 2f034d02b8..763dd5655b 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -129,7 +129,7 @@ private:
BOOL dropCategory(LLInventoryCategory* category, BOOL drop);
BOOL isInviteAllowed() const;
- BOOL inviteToSession(const std::vector<LLUUID>& agent_ids);
+ BOOL inviteToSession(const uuid_vec_t& agent_ids);
static void onInputEditorFocusReceived( LLFocusableElement* caller, void* userdata );
static void onInputEditorFocusLost(LLFocusableElement* caller, void* userdata);
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
index db7998fe6e..9eb11a6ac4 100644
--- a/indra/newview/llimfloatercontainer.cpp
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -155,6 +155,8 @@ void LLIMFloaterContainer::setMinimized(BOOL b)
if (isMinimized() == b) return;
LLMultiFloater::setMinimized(b);
+ // Hide minimized floater (see EXT-5315)
+ setVisible(!b);
if (isMinimized()) return;
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index faddffe0fc..e0f155a6a9 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -36,6 +36,7 @@
#include "llfloaterreg.h"
#include "llfontgl.h"
+#include "llgl.h"
#include "llrect.h"
#include "llerror.h"
#include "llbutton.h"
@@ -80,6 +81,9 @@ const static std::string ADHOC_NAME_SUFFIX(" Conference");
const static std::string NEARBY_P2P_BY_OTHER("nearby_P2P_by_other");
const static std::string NEARBY_P2P_BY_AGENT("nearby_P2P_by_agent");
+/** Timeout of outgoing session initialization (in seconds) */
+const static U32 SESSION_INITIALIZATION_TIMEOUT = 30;
+
std::string LLCallDialogManager::sPreviousSessionlName = "";
LLIMModel::LLIMSession::SType LLCallDialogManager::sPreviousSessionType = LLIMModel::LLIMSession::P2P_SESSION;
std::string LLCallDialogManager::sCurrentSessionlName = "";
@@ -91,6 +95,19 @@ const LLUUID LLOutgoingCallDialog::OCD_KEY = LLUUID("7CF78E11-0CFE-498D-ADB9-141
//
LLIMMgr* gIMMgr = NULL;
+
+BOOL LLSessionTimeoutTimer::tick()
+{
+ if (mSessionId.isNull()) return TRUE;
+
+ LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(mSessionId);
+ if (session && !session->mSessionInitialized)
+ {
+ gIMMgr->showSessionStartError("session_initialization_timed_out_error", mSessionId);
+ }
+ return TRUE;
+}
+
void toast_callback(const LLSD& msg){
// do not show toast in busy mode or it goes from agent
if (gAgent.getBusy() || gAgent.getID() == msg["from_id"])
@@ -146,7 +163,7 @@ LLIMModel::LLIMModel()
addNewMsgCallback(toast_callback);
}
-LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice)
+LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const uuid_vec_t& ids, bool voice)
: mSessionID(session_id),
mName(name),
mType(type),
@@ -214,6 +231,11 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
//so we're already initialized
mSessionInitialized = true;
}
+ else
+ {
+ //tick returns TRUE - timer will be deleted after the tick
+ new LLSessionTimeoutTimer(mSessionID, SESSION_INITIALIZATION_TIMEOUT);
+ }
if (IM_NOTHING_SPECIAL == type)
{
@@ -423,7 +445,7 @@ LLIMModel::LLIMSession* LLIMModel::findIMSession(const LLUUID& session_id) const
}
//*TODO consider switching to using std::set instead of std::list for holding LLUUIDs across the whole code
-LLIMModel::LLIMSession* LLIMModel::findAdHocIMSession(const std::vector<LLUUID>& ids)
+LLIMModel::LLIMSession* LLIMModel::findAdHocIMSession(const uuid_vec_t& ids)
{
S32 num = ids.size();
if (!num) return NULL;
@@ -440,7 +462,7 @@ LLIMModel::LLIMSession* LLIMModel::findAdHocIMSession(const std::vector<LLUUID>&
std::list<LLUUID> tmp_list(session->mInitialTargetIDs.begin(), session->mInitialTargetIDs.end());
- std::vector<LLUUID>::const_iterator iter = ids.begin();
+ uuid_vec_t::const_iterator iter = ids.begin();
while (iter != ids.end())
{
tmp_list.remove(*iter);
@@ -571,7 +593,7 @@ void LLIMModel::testMessages()
//session name should not be empty
bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type,
- const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice)
+ const LLUUID& other_participant_id, const uuid_vec_t& ids, bool voice)
{
if (name.empty())
{
@@ -596,7 +618,7 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co
bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, bool voice)
{
- std::vector<LLUUID> no_ids;
+ uuid_vec_t no_ids;
return newSession(session_id, name, type, other_participant_id, no_ids, voice);
}
@@ -608,10 +630,10 @@ bool LLIMModel::clearSession(const LLUUID& session_id)
return true;
}
-void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages, int start_index)
+void LLIMModel::getMessagesSilently(const LLUUID& session_id, std::list<LLSD>& messages, int start_index)
{
LLIMSession* session = findIMSession(session_id);
- if (!session)
+ if (!session)
{
llwarns << "session " << session_id << "does not exist " << llendl;
return;
@@ -619,7 +641,7 @@ void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages,
int i = session->mMsgs.size() - start_index;
- for (std::list<LLSD>::iterator iter = session->mMsgs.begin();
+ for (std::list<LLSD>::iterator iter = session->mMsgs.begin();
iter != session->mMsgs.end() && i > 0;
iter++)
{
@@ -628,6 +650,16 @@ void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages,
messages.push_back(*iter);
i--;
}
+}
+
+void LLIMModel::sendNoUnreadMessages(const LLUUID& session_id)
+{
+ LLIMSession* session = findIMSession(session_id);
+ if (!session)
+ {
+ llwarns << "session " << session_id << "does not exist " << llendl;
+ return;
+ }
session->mNumUnread = 0;
session->mParticipantUnreadMessageCount = 0;
@@ -639,6 +671,13 @@ void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages,
mNoUnreadMsgsSignal(arg);
}
+void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages, int start_index)
+{
+ getMessagesSilently(session_id, messages, start_index);
+
+ sendNoUnreadMessages(session_id);
+}
+
bool LLIMModel::addToHistory(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text) {
LLIMSession* session = findIMSession(session_id);
@@ -717,13 +756,22 @@ LLIMModel::LLIMSession* LLIMModel::addMessageSilently(const LLUUID& session_id,
return NULL;
}
- addToHistory(session_id, from, from_id, utf8_text);
- if (log2file) logToFile(session_id, from, from_id, utf8_text);
+ // replace interactive system message marker with correct from string value
+ std::string from_name = from;
+ if (INTERACTIVE_SYSTEM_FROM == from)
+ {
+ from_name = SYSTEM_FROM;
+ }
+
+ addToHistory(session_id, from_name, from_id, utf8_text);
+ if (log2file) logToFile(session_id, from_name, from_id, utf8_text);
session->mNumUnread++;
//update count of unread messages from real participant
- if (!(from_id.isNull() || from_id == gAgentID || SYSTEM_FROM == from))
+ if (!(from_id.isNull() || from_id == gAgentID || SYSTEM_FROM == from)
+ // we should increment counter for interactive system messages()
+ || INTERACTIVE_SYSTEM_FROM == from)
{
++(session->mParticipantUnreadMessageCount);
}
@@ -952,7 +1000,42 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
}
// Add the recipient to the recent people list.
- LLRecentPeople::instance().add(other_participant_id);
+ bool is_not_group_id = LLGroupMgr::getInstance()->getGroupData(other_participant_id) == NULL;
+
+ if (is_not_group_id)
+ {
+
+#if 0
+ //use this code to add only online members
+ LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);
+ LLSpeakerMgr::speaker_list_t speaker_list;
+ speaker_mgr->getSpeakerList(&speaker_list, true);
+ for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
+ {
+ const LLPointer<LLSpeaker>& speakerp = *it;
+
+ LLRecentPeople::instance().add(speakerp->mID);
+ }
+#else
+ LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(im_session_id);
+ if( session == 0)//??? shouldn't really happen
+ {
+ LLRecentPeople::instance().add(other_participant_id);
+ }
+ else
+ {
+ for(uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();
+ it!=session->mInitialTargetIDs.end();++it)
+ {
+ const LLUUID id = *it;
+
+ LLRecentPeople::instance().add(id);
+ }
+ }
+#endif
+ }
+
+
}
void session_starter_helper(
@@ -1073,7 +1156,7 @@ private:
bool LLIMModel::sendStartSession(
const LLUUID& temp_session_id,
const LLUUID& other_participant_id,
- const std::vector<LLUUID>& ids,
+ const uuid_vec_t& ids,
EInstantMessage dialog)
{
if ( dialog == IM_SESSION_GROUP_START )
@@ -1473,6 +1556,13 @@ LLCallDialog::LLCallDialog(const LLSD& payload)
mLifetime(DEFAULT_LIFETIME)
{
setAutoFocus(FALSE);
+ // force docked state since this floater doesn't save it between recreations
+ setDocked(true);
+}
+
+LLCallDialog::~LLCallDialog()
+{
+ LLUI::removePopup(this);
}
void LLCallDialog::getAllowedRect(LLRect& rect)
@@ -1528,7 +1618,7 @@ void LLCallDialog::onOpen(const LLSD& key)
LLDockableFloater::onOpen(key);
// it should be over the all floaters. EXT-5116
- gFloaterView->bringToFront(this);
+ LLUI::addPopup(this);
}
void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id)
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index e7404074e0..ffa8a16797 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -34,6 +34,7 @@
#define LL_LLIMVIEW_H
#include "lldockablefloater.h"
+#include "lleventtimer.h"
#include "llinstantmessage.h"
#include "lllogchat.h"
@@ -45,7 +46,24 @@ class LLFriendObserver;
class LLCallDialogManager;
class LLIMSpeakerMgr;
+/**
+ * Timeout Timer for outgoing Ad-Hoc/Group IM sessions which being initialized by the server
+ */
+class LLSessionTimeoutTimer : public LLEventTimer
+{
+public:
+ LLSessionTimeoutTimer(const LLUUID& session_id, F32 period) : LLEventTimer(period), mSessionId(session_id) {}
+ virtual ~LLSessionTimeoutTimer() {};
+ /* virtual */ BOOL tick();
+
+private:
+ LLUUID mSessionId;
+};
+
+/**
+ * Model (MVC) for IM Sessions
+ */
class LLIMModel : public LLSingleton<LLIMModel>
{
public:
@@ -61,7 +79,7 @@ public:
} SType;
LLIMSession(const LLUUID& session_id, const std::string& name,
- const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice);
+ const EInstantMessage& type, const LLUUID& other_participant_id, const uuid_vec_t& ids, bool voice);
virtual ~LLIMSession();
void sessionInitReplyReceived(const LLUUID& new_session_id);
@@ -93,7 +111,7 @@ public:
EInstantMessage mType;
SType mSessionType;
LLUUID mOtherParticipantID;
- std::vector<LLUUID> mInitialTargetIDs;
+ uuid_vec_t mInitialTargetIDs;
std::string mHistoryFileName;
// connection to voice channel state change signal
@@ -152,7 +170,7 @@ public:
* Find an Ad-Hoc IM Session with specified participants
* @return first found Ad-Hoc session or NULL if the session does not exist
*/
- LLIMSession* findAdHocIMSession(const std::vector<LLUUID>& ids);
+ LLIMSession* findAdHocIMSession(const uuid_vec_t& ids);
/**
* Rebind session data to a new session id.
@@ -167,7 +185,7 @@ public:
* @param name session name should not be empty, will return false if empty
*/
bool newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id,
- const std::vector<LLUUID>& ids, bool voice = false);
+ const uuid_vec_t& ids, bool voice = false);
bool newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type,
const LLUUID& other_participant_id, bool voice = false);
@@ -178,6 +196,17 @@ public:
bool clearSession(const LLUUID& session_id);
/**
+ * Populate supplied std::list with messages starting from index specified by start_index without
+ * emitting no unread messages signal.
+ */
+ void getMessagesSilently(const LLUUID& session_id, std::list<LLSD>& messages, int start_index = 0);
+
+ /**
+ * Sends no unread messages signal.
+ */
+ void sendNoUnreadMessages(const LLUUID& session_id);
+
+ /**
* Populate supplied std::list with messages starting from index specified by start_index
*/
void getMessages(const LLUUID& session_id, std::list<LLSD>& messages, int start_index = 0);
@@ -244,7 +273,7 @@ public:
static void sendLeaveSession(const LLUUID& session_id, const LLUUID& other_participant_id);
static bool sendStartSession(const LLUUID& temp_session_id, const LLUUID& other_participant_id,
- const std::vector<LLUUID>& ids, EInstantMessage dialog);
+ const uuid_vec_t& ids, EInstantMessage dialog);
static void sendTypingState(LLUUID session_id, LLUUID other_participant_id, BOOL typing);
static void sendMessage(const std::string& utf8_text, const LLUUID& im_session_id,
const LLUUID& other_participant_id, EInstantMessage dialog);
@@ -466,7 +495,7 @@ class LLCallDialog : public LLDockableFloater
{
public:
LLCallDialog(const LLSD& payload);
- ~LLCallDialog() {}
+ ~LLCallDialog();
virtual BOOL postBuild();
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 14bc4376fe..94ea236757 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -137,6 +137,7 @@ private:
void onVolumeChange(const LLSD& data);
bool enableMute();
bool enableUnmute();
+ bool enableTeleportOffer();
// Is used to determine if "Add friend" option should be enabled in gear menu
bool isNotFriend();
@@ -235,6 +236,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
boost::bind(&LLInspectAvatar::onVisibleZoomIn, this));
mEnableCallbackRegistrar.add("InspectAvatar.Gear.Enable", boost::bind(&LLInspectAvatar::isNotFriend, this));
mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnableCall", boost::bind(&LLAvatarActions::canCall));
+ mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnableTeleportOffer", boost::bind(&LLInspectAvatar::enableTeleportOffer, this));
mEnableCallbackRegistrar.add("InspectAvatar.EnableMute", boost::bind(&LLInspectAvatar::enableMute, this));
mEnableCallbackRegistrar.add("InspectAvatar.EnableUnmute", boost::bind(&LLInspectAvatar::enableUnmute, this));
@@ -564,7 +566,6 @@ void LLInspectAvatar::updateVolumeSlider()
LLUICtrl* volume_slider = getChild<LLUICtrl>("volume_slider");
volume_slider->setEnabled( !is_muted );
- const F32 DEFAULT_VOLUME = 0.5f;
F32 volume;
if (is_muted)
{
@@ -575,13 +576,6 @@ void LLInspectAvatar::updateVolumeSlider()
{
// actual volume
volume = gVoiceClient->getUserVolume(mAvatarID);
-
- // *HACK: Voice client doesn't have any data until user actually
- // says something.
- if (volume == 0.f)
- {
- volume = DEFAULT_VOLUME;
- }
}
volume_slider->setValue( (F64)volume );
}
@@ -772,6 +766,11 @@ bool LLInspectAvatar::enableUnmute()
}
}
+bool LLInspectAvatar::enableTeleportOffer()
+{
+ return LLAvatarActions::canOfferTeleport(mAvatarID);
+}
+
//////////////////////////////////////////////////////////////////////////////
// LLInspectAvatarUtil
//////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 5b59f52fa5..b552b5ac07 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -33,7 +33,11 @@
#include "llviewerprecompiledheaders.h"
#include "llinventorybridge.h"
+// external projects
+#include "lltransfersourceasset.h"
+
#include "llagent.h"
+#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
#include "llavataractions.h"
@@ -46,8 +50,10 @@
#include "llimfloater.h"
#include "llimview.h"
#include "llinventoryclipboard.h"
+#include "llinventorydefines.h"
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
@@ -65,6 +71,18 @@
#include "llwearablelist.h"
#include "llpaneloutfitsinventory.h"
+typedef std::pair<LLUUID, LLUUID> two_uuids_t;
+typedef std::list<two_uuids_t> two_uuids_list_t;
+
+struct LLMoveInv
+{
+ LLUUID mObjectID;
+ LLUUID mCategoryID;
+ two_uuids_list_t mMoveList;
+ void (*mCallback)(S32, void*);
+ void* mUserData;
+};
+
using namespace LLOldEvents;
// Helpers
@@ -88,6 +106,7 @@ void remove_inventory_category_from_avatar(LLInventoryCategory* category);
void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id);
bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);
bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response);
+void teleport_via_landmark(const LLUUID& asset_id);
std::string ICON_NAME[ICON_NAME_COUNT] =
{
@@ -100,7 +119,7 @@ std::string ICON_NAME[ICON_NAME_COUNT] =
"Inv_Script",
"Inv_Clothing",
"Inv_Object",
- "Inv_Object",
+ "Inv_Object_Multi",
"Inv_Notecard",
"Inv_Skin",
"Inv_Snapshot",
@@ -132,8 +151,12 @@ std::string ICON_NAME[ICON_NAME_COUNT] =
// | LLInvFVBridge |
// +=================================================+
-LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
-mUUID(uuid), mInvType(LLInventoryType::IT_NONE)
+LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ mUUID(uuid),
+ mRoot(root),
+ mInvType(LLInventoryType::IT_NONE)
{
mInventoryPanel = inventory->getHandle();
}
@@ -189,7 +212,7 @@ BOOL LLInvFVBridge::isItemRemovable() const
}
// Disable delete from COF folder; have users explicitly choose "detach/take off".
- if (LLAppearanceManager::instance().getIsProtectedCOFItem(mUUID))
+ if (LLAppearanceMgr::instance().getIsProtectedCOFItem(mUUID))
{
return FALSE;
}
@@ -232,7 +255,7 @@ void LLInvFVBridge::showProperties()
// Disable old properties floater; this is replaced by the sidepanel.
/*
- LLFloaterReg::showInstance("properties", mUUID);
+ LLFloaterReg::showInstance("properties", mUUID);
*/
}
@@ -256,7 +279,7 @@ void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batc
{
if(LLAssetType::AT_GESTURE == item->getType())
{
- LLGestureManager::instance().deactivateGesture(item->getUUID());
+ LLGestureMgr::instance().deactivateGesture(item->getUUID());
}
}
}
@@ -272,7 +295,7 @@ void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batc
{
if(LLAssetType::AT_GESTURE == descendent_items[j]->getType())
{
- LLGestureManager::instance().deactivateGesture(descendent_items[j]->getUUID());
+ LLGestureMgr::instance().deactivateGesture(descendent_items[j]->getUUID());
}
}
}
@@ -293,7 +316,7 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
LLMessageSystem* msg = gMessageSystem;
const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
LLViewerInventoryItem* item = NULL;
- std::vector<LLUUID> move_ids;
+ uuid_vec_t move_ids;
LLInventoryModel::update_map_t update;
bool start_new_message = true;
S32 count = batch.count();
@@ -394,8 +417,8 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
}
// move everything.
- std::vector<LLUUID>::iterator it = move_ids.begin();
- std::vector<LLUUID>::iterator end = move_ids.end();
+ uuid_vec_t::iterator it = move_ids.begin();
+ uuid_vec_t::iterator end = move_ids.end();
for(; it != end; ++it)
{
gInventory.moveObject((*it), trash_id);
@@ -480,8 +503,8 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
}
void hide_context_entries(LLMenuGL& menu,
- const menuentry_vec_t &entries_to_show,
- const menuentry_vec_t &disabled_entries)
+ const menuentry_vec_t &entries_to_show,
+ const menuentry_vec_t &disabled_entries)
{
const LLView::child_list_t *list = menu.getChildList();
@@ -583,7 +606,16 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
if (show_asset_id)
{
items.push_back(std::string("Copy Asset UUID"));
- if ( (! ( isItemPermissive() || gAgent.isGodlike() ) )
+
+ bool is_asset_knowable = false;
+
+ LLViewerInventoryItem* inv_item = gInventory.getItem(mUUID);
+ if (inv_item)
+ {
+ is_asset_knowable = LLAssetType::lookupIsAssetIDKnowable(inv_item->getType());
+ }
+ if ( !is_asset_knowable // disable menu item for Inventory items with unknown asset. EXT-5308
+ || (! ( isItemPermissive() || gAgent.isGodlike() ) )
|| (flags & FIRST_SELECTED_ITEM) == 0)
{
disabled_items.push_back(std::string("Copy Asset UUID"));
@@ -671,14 +703,15 @@ void LLInvFVBridge::addTrashContextMenuOptions(menuentry_vec_t &items,
void LLInvFVBridge::addDeleteContextMenuOptions(menuentry_vec_t &items,
menuentry_vec_t &disabled_items)
{
+
+ const LLInventoryObject *obj = getInventoryObject();
+
// Don't allow delete as a direct option from COF folder.
- if (isCOFFolder())
+ if (obj && obj->getIsLinkType() && isCOFFolder())
{
return;
}
- const LLInventoryObject *obj = getInventoryObject();
-
// "Remove link" and "Delete" are the same operation.
if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID))
{
@@ -715,7 +748,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
if (*type == DAD_CATEGORY)
{
- gInventory.startBackgroundFetch(obj->getUUID());
+ LLInventoryModelBackgroundFetch::instance().start(obj->getUUID());
}
rv = TRUE;
@@ -788,7 +821,7 @@ BOOL LLInvFVBridge::isAgentInventory() const
BOOL LLInvFVBridge::isCOFFolder() const
{
- return LLAppearanceManager::instance().getIsInCOF(mUUID);
+ return LLAppearanceMgr::instance().getIsInCOF(mUUID);
}
BOOL LLInvFVBridge::isItemPermissive() const
@@ -845,21 +878,11 @@ void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model,
model->notifyObservers();
}
-
-const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type)
-{
- const std::string rv= LLInventoryType::lookup(inv_type);
- if(rv.empty())
- {
- return std::string("<invalid>");
- }
- return rv;
-}
-
LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
LLAssetType::EType actual_asset_type,
LLInventoryType::EType inv_type,
LLInventoryPanel* inventory,
+ LLFolderView* root,
const LLUUID& uuid,
U32 flags)
{
@@ -869,104 +892,104 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
case LLAssetType::AT_TEXTURE:
if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLTextureBridge(inventory, uuid, inv_type);
+ new_listener = new LLTextureBridge(inventory, root, uuid, inv_type);
break;
case LLAssetType::AT_SOUND:
if(!(inv_type == LLInventoryType::IT_SOUND))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLSoundBridge(inventory, uuid);
+ new_listener = new LLSoundBridge(inventory, root, uuid);
break;
case LLAssetType::AT_LANDMARK:
if(!(inv_type == LLInventoryType::IT_LANDMARK))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLLandmarkBridge(inventory, uuid, flags);
+ new_listener = new LLLandmarkBridge(inventory, root, uuid, flags);
break;
case LLAssetType::AT_CALLINGCARD:
if(!(inv_type == LLInventoryType::IT_CALLINGCARD))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLCallingCardBridge(inventory, uuid);
+ new_listener = new LLCallingCardBridge(inventory, root, uuid);
break;
case LLAssetType::AT_SCRIPT:
if(!(inv_type == LLInventoryType::IT_LSL))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLScriptBridge(inventory, uuid);
+ new_listener = new LLScriptBridge(inventory, root, uuid);
break;
case LLAssetType::AT_OBJECT:
if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags);
+ new_listener = new LLObjectBridge(inventory, root, uuid, inv_type, flags);
break;
case LLAssetType::AT_NOTECARD:
if(!(inv_type == LLInventoryType::IT_NOTECARD))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLNotecardBridge(inventory, uuid);
+ new_listener = new LLNotecardBridge(inventory, root, uuid);
break;
case LLAssetType::AT_ANIMATION:
if(!(inv_type == LLInventoryType::IT_ANIMATION))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLAnimationBridge(inventory, uuid);
+ new_listener = new LLAnimationBridge(inventory, root, uuid);
break;
case LLAssetType::AT_GESTURE:
if(!(inv_type == LLInventoryType::IT_GESTURE))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLGestureBridge(inventory, uuid);
+ new_listener = new LLGestureBridge(inventory, root, uuid);
break;
case LLAssetType::AT_LSL_TEXT:
if(!(inv_type == LLInventoryType::IT_LSL))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLLSLTextBridge(inventory, uuid);
+ new_listener = new LLLSLTextBridge(inventory, root, uuid);
break;
case LLAssetType::AT_CLOTHING:
case LLAssetType::AT_BODYPART:
if(!(inv_type == LLInventoryType::IT_WEARABLE))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags);
+ new_listener = new LLWearableBridge(inventory, root, uuid, asset_type, inv_type, (EWearableType)flags);
break;
case LLAssetType::AT_CATEGORY:
if (actual_asset_type == LLAssetType::AT_LINK_FOLDER)
{
// Create a link folder handler instead.
- new_listener = new LLLinkFolderBridge(inventory, uuid);
+ new_listener = new LLLinkFolderBridge(inventory, root, uuid);
break;
}
- new_listener = new LLFolderBridge(inventory, uuid);
+ new_listener = new LLFolderBridge(inventory, root, uuid);
break;
case LLAssetType::AT_LINK:
case LLAssetType::AT_LINK_FOLDER:
// Only should happen for broken links.
- new_listener = new LLLinkItemBridge(inventory, uuid);
+ new_listener = new LLLinkItemBridge(inventory, root, uuid);
break;
default:
llinfos << "Unhandled asset type (llassetstorage.h): "
@@ -1015,26 +1038,28 @@ LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset
LLAssetType::EType actual_asset_type,
LLInventoryType::EType inv_type,
LLInventoryPanel* inventory,
+ LLFolderView* root,
const LLUUID& uuid,
U32 flags /* = 0x00 */) const
{
return LLInvFVBridge::createBridge(asset_type,
- actual_asset_type,
- inv_type,
- inventory,
- uuid,
- flags);
+ actual_asset_type,
+ inv_type,
+ inventory,
+ root,
+ uuid,
+ flags);
}
// +=================================================+
// | LLItemBridge |
// +=================================================+
-void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
{
if ("goto" == action)
{
- gotoItem(folder);
+ gotoItem();
}
if ("open" == action)
@@ -1065,9 +1090,9 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model,
else if ("copy_uuid" == action)
{
// Single item only
- LLInventoryItem* item = model->getItem(mUUID);
+ LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());
if(!item) return;
- LLUUID asset_id = item->getAssetUUID();
+ LLUUID asset_id = item->getProtectedAssetUUID();
std::string buffer;
asset_id.toString(buffer);
@@ -1085,7 +1110,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model,
LLInventoryItem* itemp = model->getItem(mUUID);
if (!itemp) return;
- LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
+ LLFolderViewItem* folder_view_itemp = mRoot->getItemByID(itemp->getParentUUID());
if (!folder_view_itemp) return;
folder_view_itemp->getListener()->pasteFromClipboard();
@@ -1097,7 +1122,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model,
LLInventoryItem* itemp = model->getItem(mUUID);
if (!itemp) return;
- LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID());
+ LLFolderViewItem* folder_view_itemp = mRoot->getItemByID(itemp->getParentUUID());
if (!folder_view_itemp) return;
folder_view_itemp->getListener()->pasteLinkFromClipboard();
@@ -1107,7 +1132,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model,
void LLItemBridge::selectItem()
{
- LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
+ LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());
if(item && !item->isComplete())
{
item->fetchFromServer();
@@ -1116,7 +1141,7 @@ void LLItemBridge::selectItem()
void LLItemBridge::restoreItem()
{
- LLViewerInventoryItem* item = (LLViewerInventoryItem*)getItem();
+ LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());
if(item)
{
LLInventoryModel* model = getInventoryModel();
@@ -1131,7 +1156,7 @@ void LLItemBridge::restoreToWorld()
//Similar functionality to the drag and drop rez logic
bool remove_from_inventory = false;
- LLViewerInventoryItem* itemp = (LLViewerInventoryItem*)getItem();
+ LLViewerInventoryItem* itemp = static_cast<LLViewerInventoryItem*>(getItem());
if (itemp)
{
LLMessageSystem* msg = gMessageSystem;
@@ -1166,7 +1191,7 @@ void LLItemBridge::restoreToWorld()
}
}
-void LLItemBridge::gotoItem(LLFolderView *folder)
+void LLItemBridge::gotoItem()
{
LLInventoryObject *obj = getInventoryObject();
if (obj && obj->getIsLinkType())
@@ -1424,11 +1449,7 @@ BOOL LLItemBridge::isItemPermissive() const
LLViewerInventoryItem* item = getItem();
if(item)
{
- U32 mask = item->getPermissions().getMaskBase();
- if((mask & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)
- {
- return TRUE;
- }
+ return item->getIsFullPerm();
}
return FALSE;
}
@@ -1496,14 +1517,10 @@ BOOL LLFolderBridge::isItemRemovable() const
return FALSE;
}
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if( !avatar )
- {
- return FALSE;
- }
+ if (!isAgentAvatarValid()) return FALSE;
LLInventoryCategory* category = model->getCategory(mUUID);
- if( !category )
+ if(!category)
{
return FALSE;
}
@@ -1651,8 +1668,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
LLInventoryModel* model = getInventoryModel();
if(!model) return FALSE;
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if(!avatar) return FALSE;
+ if (!isAgentAvatarValid()) return FALSE;
// cannot drag categories into library
if(!isAgentInventory())
@@ -1676,7 +1692,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
// Is the destination the trash?
const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
BOOL move_is_into_trash = (mUUID == trash_id)
- || model->isObjectDescendentOf(mUUID, trash_id);
+ || model->isObjectDescendentOf(mUUID, trash_id);
BOOL is_movable = (!LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType()));
const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
@@ -1724,12 +1740,11 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
-
- accept = is_movable
- && (mUUID != cat_id) // Can't move a folder into itself
- && (mUUID != inv_cat->getParentUUID()) // Avoid moves that would change nothing
- && !(model->isObjectDescendentOf(mUUID, cat_id)); // Avoid circularity
- if(accept && drop)
+ accept = is_movable
+ && (mUUID != cat_id) // Can't move a folder into itself
+ && (mUUID != inv_cat->getParentUUID()) // Avoid moves that would change nothing
+ && !(model->isObjectDescendentOf(mUUID, cat_id)); // Avoid circularity
+ if (accept && drop)
{
// Look for any gestures and deactivate them
if (move_is_into_trash)
@@ -1738,9 +1753,9 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
{
LLInventoryItem* item = descendent_items[i];
if (item->getType() == LLAssetType::AT_GESTURE
- && LLGestureManager::instance().isGestureActive(item->getUUID()))
+ && LLGestureMgr::instance().isGestureActive(item->getUUID()))
{
- LLGestureManager::instance().deactivateGesture(item->getUUID());
+ LLGestureMgr::instance().deactivateGesture(item->getUUID());
}
}
}
@@ -1753,7 +1768,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
{
// traverse category and add all contents to currently worn.
BOOL append = true;
- LLAppearanceManager::instance().wearInventoryCategory(inv_cat, false, append);
+ LLAppearanceMgr::instance().wearInventoryCategory(inv_cat, false, append);
}
else
{
@@ -1761,28 +1776,28 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
gInventory.collectDescendents(inv_cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH);
- LLAppearanceManager::instance().linkAll(mUUID,items,NULL);
+ LLAppearanceMgr::instance().linkAll(mUUID,items,NULL);
}
}
else
{
#if SUPPORT_ENSEMBLES
- // BAP - should skip if dup.
- if (move_is_into_current_outfit)
- {
- LLAppearanceManager::instance().addEnsembleLink(inv_cat);
- }
- else
- {
- LLPointer<LLInventoryCallback> cb = NULL;
- link_inventory_item(
- gAgent.getID(),
- inv_cat->getUUID(),
- mUUID,
- inv_cat->getName(),
- LLAssetType::AT_LINK_FOLDER,
- cb);
- }
+ // BAP - should skip if dup.
+ if (move_is_into_current_outfit)
+ {
+ LLAppearanceMgr::instance().addEnsembleLink(inv_cat);
+ }
+ else
+ {
+ LLPointer<LLInventoryCallback> cb = NULL;
+ link_inventory_item(
+ gAgent.getID(),
+ inv_cat->getUUID(),
+ mUUID,
+ inv_cat->getName(),
+ LLAssetType::AT_LINK_FOLDER,
+ cb);
+ }
#endif
}
}
@@ -1799,7 +1814,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
}
- else if(LLToolDragAndDrop::SOURCE_WORLD == source)
+ else if (LLToolDragAndDrop::SOURCE_WORLD == source)
{
// content category has same ID as object itself
LLUUID object_id = inv_cat->getUUID();
@@ -1844,7 +1859,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
// this folder is coming from an object, as there is only one folder in an object, the root,
// we need to collect the entire contents and handle them as a group
- InventoryObjectList inventory_objects;
+ LLInventoryObject::object_list_t inventory_objects;
object->getInventoryContents(inventory_objects);
if (inventory_objects.empty())
@@ -1858,8 +1873,8 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
// coming from a task. Need to figure out if the person can
// move/copy this item.
- InventoryObjectList::iterator it = inventory_objects.begin();
- InventoryObjectList::iterator end = inventory_objects.end();
+ LLInventoryObject::object_list_t::iterator it = inventory_objects.begin();
+ LLInventoryObject::object_list_t::iterator end = inventory_objects.end();
for ( ; it != end; ++it)
{
// coming from a task. Need to figure out if the person can
@@ -1889,7 +1904,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
if(drop && accept)
{
it = inventory_objects.begin();
- InventoryObjectList::iterator first_it = inventory_objects.begin();
+ LLInventoryObject::object_list_t::iterator first_it = inventory_objects.begin();
LLMoveInv* move_inv = new LLMoveInv;
move_inv->mObjectID = object_id;
move_inv->mCategoryID = category_id;
@@ -1917,50 +1932,6 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
return accept;
}
-bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
- LLInventoryItem* item)
-{
- // Valid COF items are:
- // - links to wearables (body parts or clothing)
- // - links to attachments
- // - links to gestures
- // - links to ensemble folders
- LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); // BAP - safe?
- if (linked_item)
- {
- LLAssetType::EType type = linked_item->getType();
- return (type == LLAssetType::AT_CLOTHING ||
- type == LLAssetType::AT_BODYPART ||
- type == LLAssetType::AT_GESTURE ||
- type == LLAssetType::AT_OBJECT);
- }
- else
- {
- LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
- // BAP remove AT_NONE support after ensembles are fully working?
- return (linked_category &&
- ((linked_category->getPreferredType() == LLFolderType::FT_NONE) ||
- (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType()))));
- }
-}
-
-
-bool LLFindWearables::operator()(LLInventoryCategory* cat,
- LLInventoryItem* item)
-{
- if(item)
- {
- if((item->getType() == LLAssetType::AT_CLOTHING)
- || (item->getType() == LLAssetType::AT_BODYPART))
- {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-
-
//Used by LLFolderBridge as callback for directory recursion.
class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver
{
@@ -1971,7 +1942,7 @@ public:
LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) :
mCatID(cat_id),
mCopyItems(copy_items)
- { };
+ { };
virtual void done()
{
// we've downloaded all the items, so repaint the dialog
@@ -2003,7 +1974,7 @@ void LLRightClickInventoryFetchDescendentsObserver::done()
{
// Avoid passing a NULL-ref as mCompleteFolders.front() down to
// gInventory.collectDescendents()
- if( mCompleteFolders.empty() )
+ if( mComplete.empty() )
{
llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl;
dec_busy_count();
@@ -2017,7 +1988,7 @@ void LLRightClickInventoryFetchDescendentsObserver::done()
// happen.
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t item_array;
- gInventory.collectDescendents(mCompleteFolders.front(),
+ gInventory.collectDescendents(mComplete.front(),
cat_array,
item_array,
LLInventoryModel::EXCLUDE_TRASH);
@@ -2036,8 +2007,8 @@ void LLRightClickInventoryFetchDescendentsObserver::done()
#endif
LLRightClickInventoryFetchObserver* outfit;
- outfit = new LLRightClickInventoryFetchObserver(mCompleteFolders.front(), mCopyItems);
- LLInventoryFetchObserver::item_ref_t ids;
+ outfit = new LLRightClickInventoryFetchObserver(mComplete.front(), mCopyItems);
+ uuid_vec_t ids;
for(S32 i = 0; i < count; ++i)
{
ids.push_back(item_array.get(i)->getUUID());
@@ -2055,19 +2026,19 @@ void LLRightClickInventoryFetchDescendentsObserver::done()
inc_busy_count();
// do the fetch
- outfit->fetchItems(ids);
+ outfit->fetch(ids);
outfit->done(); //Not interested in waiting and this will be right 99% of the time.
//Uncomment the following code for laggy Inventory UI.
/* if(outfit->isEverythingComplete())
{
- // everything is already here - call done.
- outfit->done();
+ // everything is already here - call done.
+ outfit->done();
}
else
{
- // it's all on it's way - add an observer, and the inventory
- // will call done for us when everything is here.
- gInventory.addObserver(outfit);
+ // it's all on it's way - add an observer, and the inventory
+ // will call done for us when everything is here.
+ gInventory.addObserver(outfit);
}*/
}
@@ -2081,7 +2052,8 @@ void LLRightClickInventoryFetchDescendentsObserver::done()
class LLInventoryCopyAndWearObserver : public LLInventoryObserver
{
public:
- LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {}
+ LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :
+ mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {}
virtual ~LLInventoryCopyAndWearObserver() {}
virtual void changed(U32 mask);
@@ -2120,7 +2092,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
if (NULL == category)
{
llwarns << "gInventory.getCategory(" << mCatID
- << ") was NULL" << llendl;
+ << ") was NULL" << llendl;
}
else
{
@@ -2128,7 +2100,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
mContentsCount)
{
gInventory.removeObserver(this);
- LLAppearanceManager::instance().wearInventoryCategory(category, FALSE, TRUE);
+ LLAppearanceMgr::instance().wearInventoryCategory(category, FALSE, TRUE);
delete this;
}
}
@@ -2139,11 +2111,11 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
-void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
{
if ("open" == action)
{
- LLFolderViewFolder *f = dynamic_cast<LLFolderViewFolder *>(folder->getItemByID(mUUID));
+ LLFolderViewFolder *f = dynamic_cast<LLFolderViewFolder *>(mRoot->getItemByID(mUUID));
if (f)
{
f->setOpen(TRUE);
@@ -2178,7 +2150,7 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model
if(!model) return;
LLViewerInventoryCategory* cat = getCategory();
if(!cat) return;
- LLAppearanceManager::instance().addEnsembleLink(cat,true);
+ LLAppearanceMgr::instance().addEnsembleLink(cat,true);
return;
}
#endif
@@ -2408,9 +2380,9 @@ bool LLFolderBridge::removeItemResponse(const LLSD& notification, const LLSD& re
const LLViewerInventoryItem* item = (*iter);
const LLUUID& item_id = item->getUUID();
if (item->getType() == LLAssetType::AT_GESTURE
- && LLGestureManager::instance().isGestureActive(item_id))
+ && LLGestureMgr::instance().isGestureActive(item_id))
{
- LLGestureManager::instance().deactivateGesture(item_id);
+ LLGestureMgr::instance().deactivateGesture(item_id);
}
}
@@ -2496,16 +2468,16 @@ void LLFolderBridge::pasteLinkFromClipboard()
}
else
#endif
- if (LLInventoryItem *item = model->getItem(object_id))
- {
- link_inventory_item(
- gAgent.getID(),
- item->getLinkedUUID(),
- parent_id,
- item->getName(),
- LLAssetType::AT_LINK,
- LLPointer<LLInventoryCallback>(NULL));
- }
+ if (LLInventoryItem *item = model->getItem(object_id))
+ {
+ link_inventory_item(
+ gAgent.getID(),
+ item->getLinkedUUID(),
+ parent_id,
+ item->getName(),
+ LLAssetType::AT_LINK,
+ LLPointer<LLInventoryCallback>(NULL));
+ }
}
}
}
@@ -2530,7 +2502,7 @@ void LLFolderBridge::folderOptionsMenu()
const bool is_system_folder = LLFolderType::lookupIsProtectedType(type);
// BAP change once we're no longer treating regular categories as ensembles.
const bool is_ensemble = (type == LLFolderType::FT_NONE ||
- LLFolderType::lookupIsEnsembleType(type));
+ LLFolderType::lookupIsEnsembleType(type));
// calling card related functionality for folders.
@@ -2660,10 +2632,10 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
if (lost_and_found_id == mUUID)
- {
+ {
// This is the lost+found folder.
- mItems.push_back(std::string("Empty Lost And Found"));
- }
+ mItems.push_back(std::string("Empty Lost And Found"));
+ }
if(trash_id == mUUID)
{
@@ -2681,8 +2653,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
LLViewerInventoryCategory *cat = getCategory();
// BAP removed protected check to re-enable standard ops in untyped folders.
// Not sure what the right thing is to do here.
- if (!isCOFFolder() && cat && cat->getPreferredType()!=LLFolderType::FT_OUTFIT /*&&
- LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())*/)
+ if (!isCOFFolder() && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT))
{
// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
@@ -2714,7 +2685,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
addDeleteContextMenuOptions(mItems, mDisabledItems);
// EXT-4030: disallow deletion of currently worn outfit
- const LLViewerInventoryItem *base_outfit_link = LLAppearanceManager::instance().getBaseOutfitLink();
+ const LLViewerInventoryItem *base_outfit_link = LLAppearanceMgr::instance().getBaseOutfitLink();
if (base_outfit_link && (cat == base_outfit_link->getLinkedCategory()))
{
mDisabledItems.push_back(std::string("Delete"));
@@ -2746,13 +2717,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
sSelf = this;
LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE);
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+ uuid_vec_t folders;
LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
if (category)
{
folders.push_back(category->getUUID());
}
- fetch->fetchDescendents(folders);
+ fetch->fetch(folders);
inc_busy_count();
if(fetch->isEverythingComplete())
{
@@ -2949,10 +2920,10 @@ void LLFolderBridge::createWearable(const LLUUID &parent_id, EWearableType type)
LLAssetType::EType asset_type = wearable->getAssetType();
LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;
create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
- parent_id, wearable->getTransactionID(), wearable->getName(),
- wearable->getDescription(), asset_type, inv_type, wearable->getType(),
- wearable->getPermissions().getMaskNextOwner(),
- LLPointer<LLInventoryCallback>(NULL));
+ parent_id, wearable->getTransactionID(), wearable->getName(),
+ wearable->getDescription(), asset_type, inv_type, wearable->getType(),
+ wearable->getPermissions().getMaskNextOwner(),
+ LLPointer<LLInventoryCallback>(NULL));
}
void LLFolderBridge::modifyOutfit(BOOL append)
@@ -2962,9 +2933,7 @@ void LLFolderBridge::modifyOutfit(BOOL append)
LLViewerInventoryCategory* cat = getCategory();
if(!cat) return;
- // BAP - was:
- // wear_inventory_category_on_avatar( cat, append );
- LLAppearanceManager::instance().wearInventoryCategory( cat, FALSE, append );
+ LLAppearanceMgr::instance().wearInventoryCategory( cat, FALSE, append );
}
// helper stuff
@@ -2978,7 +2947,7 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
{
if (cat_and_wear && cat_and_wear->mWear)
{
- InventoryObjectList inventory_objects;
+ LLInventoryObject::object_list_t inventory_objects;
object->getInventoryContents(inventory_objects);
int contents_count = inventory_objects.size()-1; //subtract one for containing folder
@@ -2988,8 +2957,8 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
two_uuids_list_t::iterator move_it;
for (move_it = move_inv->mMoveList.begin();
- move_it != move_inv->mMoveList.end();
- ++move_it)
+ move_it != move_inv->mMoveList.end();
+ ++move_it)
{
object->moveInventory(move_it->first, move_it->second);
}
@@ -3019,8 +2988,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
return FALSE;
}
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if(!avatar) return FALSE;
+ if (!isAgentAvatarValid()) return FALSE;
LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
BOOL accept = FALSE;
@@ -3030,11 +2998,11 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
BOOL is_movable = TRUE;
switch( inv_item->getActualType() )
{
- case LLAssetType::AT_CATEGORY:
- is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType());
- break;
- default:
- break;
+ case LLAssetType::AT_CATEGORY:
+ is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType());
+ break;
+ default:
+ break;
}
const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
@@ -3042,7 +3010,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
- const BOOL move_is_outof_current_outfit = LLAppearanceManager::instance().getIsInCOF(inv_item->getUUID());
+ const BOOL move_is_outof_current_outfit = LLAppearanceMgr::instance().getIsInCOF(inv_item->getUUID());
// Can't explicitly drag things out of the COF.
if (move_is_outof_current_outfit)
@@ -3074,9 +3042,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
if(accept && drop)
{
if (inv_item->getType() == LLAssetType::AT_GESTURE
- && LLGestureManager::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash)
+ && LLGestureMgr::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash)
{
- LLGestureManager::instance().deactivateGesture(inv_item->getUUID());
+ LLGestureMgr::instance().deactivateGesture(inv_item->getUUID());
}
// If an item is being dragged between windows, unselect
// everything in the active window so that we don't follow
@@ -3129,7 +3097,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// BAP - should skip if dup.
if (move_is_into_current_outfit)
{
- LLAppearanceManager::instance().addCOFItemLink(inv_item);
+ LLAppearanceMgr::instance().addCOFItemLink(inv_item);
}
else
{
@@ -3212,7 +3180,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
if(drop)
{
copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(),
- LLToolDragAndDrop::getInstance()->getSourceID(), inv_item);
+ LLToolDragAndDrop::getInstance()->getSourceID(), inv_item);
}
}
else if(LLToolDragAndDrop::SOURCE_LIBRARY == source)
@@ -3311,7 +3279,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
// virtual
-void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLTextureBridge::performAction(LLInventoryModel* model, std::string action)
{
if ("save_as" == action)
{
@@ -3322,7 +3290,7 @@ void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode
preview_texture->openToSave();
}
}
- else LLItemBridge::performAction(folder, model, action);
+ else LLItemBridge::performAction(model, action);
}
// +=================================================+
@@ -3347,14 +3315,14 @@ void LLSoundBridge::openItem()
// only open the preview dialog through the contextual right-click menu
// double-click just plays the sound
- LLViewerInventoryItem* item = getItem();
- if(item)
- {
- openSoundPreview((void*)this);
- //send_uuid_sound_trigger(item->getAssetUUID(), 1.0);
- }
-*/
+LLViewerInventoryItem* item = getItem();
+if(item)
+{
+openSoundPreview((void*)this);
+//send_uuid_sound_trigger(item->getAssetUUID(), 1.0);
}
+*/
+ }
void LLSoundBridge::previewItem()
{
@@ -3399,11 +3367,14 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
// | LLLandmarkBridge |
// +=================================================+
-LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) :
-LLItemBridge(inventory, uuid)
+LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ U32 flags/* = 0x00*/) :
+ LLItemBridge(inventory, root, uuid)
{
mVisited = FALSE;
- if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
+ if (flags & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED)
{
mVisited = TRUE;
}
@@ -3461,7 +3432,7 @@ void teleport_via_landmark(const LLUUID& asset_id)
}
// virtual
-void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLLandmarkBridge::performAction(LLInventoryModel* model, std::string action)
{
if ("teleport" == action)
{
@@ -3485,7 +3456,7 @@ void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
}
else
{
- LLItemBridge::performAction(folder, model, action);
+ LLItemBridge::performAction(model, action);
}
}
@@ -3512,35 +3483,33 @@ void LLLandmarkBridge::openItem()
{
LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
}
-/*
- LLViewerInventoryItem* item = getItem();
- if( item )
- {
- // Opening (double-clicking) a landmark immediately teleports,
- // but warns you the first time.
- // open_landmark(item);
- LLSD payload;
- payload["asset_id"] = item->getAssetUUID();
- LLNotificationsUtil::add("TeleportFromLandmark", LLSD(), payload);
- }
-*/
}
// +=================================================+
// | LLCallingCardObserver |
// +=================================================+
-void LLCallingCardObserver::changed(U32 mask)
+class LLCallingCardObserver : public LLFriendObserver
{
- mBridgep->refreshFolderViewItem();
-}
+public:
+ LLCallingCardObserver(LLCallingCardBridge* bridge) : mBridgep(bridge) {}
+ virtual ~LLCallingCardObserver() { mBridgep = NULL; }
+ virtual void changed(U32 mask)
+ {
+ mBridgep->refreshFolderViewItem();
+ }
+protected:
+ LLCallingCardBridge* mBridgep;
+};
// +=================================================+
// | LLCallingCardBridge |
// +=================================================+
-LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
- LLItemBridge(inventory, uuid)
+LLCallingCardBridge::LLCallingCardBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid ) :
+ LLItemBridge(inventory, root, uuid)
{
mObserver = new LLCallingCardObserver(this);
LLAvatarTracker::instance().addObserver(mObserver);
@@ -3563,7 +3532,7 @@ void LLCallingCardBridge::refreshFolderViewItem()
}
// virtual
-void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string action)
{
if ("begin_im" == action)
{
@@ -3589,7 +3558,7 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel*
LLAvatarActions::offerTeleport(item->getCreatorUUID());
}
}
- else LLItemBridge::performAction(folder, model, action);
+ else LLItemBridge::performAction(model, action);
}
LLUIImagePtr LLCallingCardBridge::getIcon() const
@@ -3625,11 +3594,11 @@ void LLCallingCardBridge::openItem()
LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
}
/*
- LLViewerInventoryItem* item = getItem();
- if(item && !item->getCreatorUUID().isNull())
- {
- LLAvatarActions::showProfile(item->getCreatorUUID());
- }
+ LLViewerInventoryItem* item = getItem();
+ if(item && !item->getCreatorUUID().isNull())
+ {
+ LLAvatarActions::showProfile(item->getCreatorUUID());
+ }
*/
}
@@ -3652,8 +3621,8 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
LLInventoryItem* item = getItem();
BOOL good_card = (item
- && (LLUUID::null != item->getCreatorUUID())
- && (item->getCreatorUUID() != gAgent.getID()));
+ && (LLUUID::null != item->getCreatorUUID())
+ && (item->getCreatorUUID() != gAgent.getID()));
BOOL user_online = FALSE;
if (item)
{
@@ -3688,16 +3657,16 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
// check the type
switch(cargo_type)
{
- case DAD_TEXTURE:
- case DAD_SOUND:
- case DAD_LANDMARK:
- case DAD_SCRIPT:
- case DAD_CLOTHING:
- case DAD_OBJECT:
- case DAD_NOTECARD:
- case DAD_BODYPART:
- case DAD_ANIMATION:
- case DAD_GESTURE:
+ case DAD_TEXTURE:
+ case DAD_SOUND:
+ case DAD_LANDMARK:
+ case DAD_SCRIPT:
+ case DAD_CLOTHING:
+ case DAD_OBJECT:
+ case DAD_NOTECARD:
+ case DAD_BODYPART:
+ case DAD_ANIMATION:
+ case DAD_GESTURE:
{
LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;
const LLPermissions& perm = inv_item->getPermissions();
@@ -3720,7 +3689,7 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
}
break;
}
- case DAD_CATEGORY:
+ case DAD_CATEGORY:
{
LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data;
if( gInventory.getCategory( inv_cat->getUUID() ) )
@@ -3742,8 +3711,8 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
}
break;
}
- default:
- break;
+ default:
+ break;
}
}
return rv;
@@ -3768,11 +3737,11 @@ void LLNotecardBridge::openItem()
}
/*
- LLViewerInventoryItem* item = getItem();
- if (item)
- {
- LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
- }
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
+ }
*/
}
@@ -3788,7 +3757,7 @@ LLUIImagePtr LLGestureBridge::getIcon() const
LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const
{
- if( LLGestureManager::instance().isGestureActive(mUUID) )
+ if( LLGestureMgr::instance().isGestureActive(mUUID) )
{
return LLFontGL::BOLD;
}
@@ -3800,9 +3769,11 @@ LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const
std::string LLGestureBridge::getLabelSuffix() const
{
- if( LLGestureManager::instance().isGestureActive(mUUID) )
+ if( LLGestureMgr::instance().isGestureActive(mUUID) )
{
- return LLItemBridge::getLabelSuffix() + " (active)";
+ LLStringUtil::format_map_t args;
+ args["[GESLABEL]"] = LLItemBridge::getLabelSuffix();
+ return LLTrans::getString("ActiveGesture", args);
}
else
{
@@ -3811,11 +3782,11 @@ std::string LLGestureBridge::getLabelSuffix() const
}
// virtual
-void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLGestureBridge::performAction(LLInventoryModel* model, std::string action)
{
if (isAddAction(action))
{
- LLGestureManager::instance().activateGesture(mUUID);
+ LLGestureMgr::instance().activateGesture(mUUID);
LLViewerInventoryItem* item = gInventory.getItem(mUUID);
if (!item) return;
@@ -3827,7 +3798,7 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode
}
else if (isRemoveAction(action))
{
- LLGestureManager::instance().deactivateGesture(mUUID);
+ LLGestureMgr::instance().deactivateGesture(mUUID);
LLViewerInventoryItem* item = gInventory.getItem(mUUID);
if (!item) return;
@@ -3839,17 +3810,17 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode
}
else if("play" == action)
{
- if(!LLGestureManager::instance().isGestureActive(mUUID))
+ if(!LLGestureMgr::instance().isGestureActive(mUUID))
{
// we need to inform server about gesture activating to be consistent with LLPreviewGesture and LLGestureComboList.
BOOL inform_server = TRUE;
BOOL deactivate_similar = FALSE;
- LLGestureManager::instance().setGestureLoadedCallback(mUUID, boost::bind(&LLGestureBridge::playGesture, mUUID));
+ LLGestureMgr::instance().setGestureLoadedCallback(mUUID, boost::bind(&LLGestureBridge::playGesture, mUUID));
LLViewerInventoryItem* item = gInventory.getItem(mUUID);
llassert(item);
if (item)
{
- LLGestureManager::instance().activateGestureWithAsset(mUUID, item->getAssetUUID(), inform_server, deactivate_similar);
+ LLGestureMgr::instance().activateGestureWithAsset(mUUID, item->getAssetUUID(), inform_server, deactivate_similar);
}
}
else
@@ -3857,7 +3828,7 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode
playGesture(mUUID);
}
}
- else LLItemBridge::performAction(folder, model, action);
+ else LLItemBridge::performAction(model, action);
}
void LLGestureBridge::openItem()
@@ -3869,12 +3840,12 @@ void LLGestureBridge::openItem()
LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
}
/*
- LLViewerInventoryItem* item = getItem();
- if (item)
- {
- LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
- preview->setFocus(TRUE);
- }
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
+ preview->setFocus(TRUE);
+ }
*/
}
@@ -3891,7 +3862,7 @@ BOOL LLGestureBridge::removeItem()
// This will also force close the preview window, if it exists.
// This may actually delete *this, if mUUID is in the COF.
- LLGestureManager::instance().deactivateGesture(item_id);
+ LLGestureMgr::instance().deactivateGesture(item_id);
// If deactivateGesture deleted *this, then return out immediately.
if (!model->getObject(item_id))
@@ -3924,7 +3895,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
getClipboardEntries(true, items, disabled_items, flags);
items.push_back(std::string("Gesture Separator"));
- if (LLGestureManager::instance().isGestureActive(getUUID()))
+ if (LLGestureMgr::instance().isGestureActive(getUUID()))
{
items.push_back(std::string("Deactivate"));
}
@@ -3939,13 +3910,13 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
// static
void LLGestureBridge::playGesture(const LLUUID& item_id)
{
- if (LLGestureManager::instance().isGesturePlaying(item_id))
+ if (LLGestureMgr::instance().isGesturePlaying(item_id))
{
- LLGestureManager::instance().stopGesture(item_id);
+ LLGestureMgr::instance().stopGesture(item_id);
}
else
{
- LLGestureManager::instance().playGesture(item_id);
+ LLGestureMgr::instance().playGesture(item_id);
}
}
@@ -3986,7 +3957,7 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
// virtual
-void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLAnimationBridge::performAction(LLInventoryModel* model, std::string action)
{
if ((action == "playworld") || (action == "playlocal"))
{
@@ -4005,7 +3976,7 @@ void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* mo
}
else
{
- LLItemBridge::performAction(folder, model, action);
+ LLItemBridge::performAction(model, action);
}
}
@@ -4018,11 +3989,11 @@ void LLAnimationBridge::openItem()
LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
}
/*
- LLViewerInventoryItem* item = getItem();
- if (item)
- {
- LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
- }
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+ }
*/
}
@@ -4033,12 +4004,17 @@ void LLAnimationBridge::openItem()
// static
LLUUID LLObjectBridge::sContextMenuItemID;
-LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) :
-LLItemBridge(inventory, uuid), mInvType(type)
+LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ LLInventoryType::EType type,
+ U32 flags) :
+ LLItemBridge(inventory, root, uuid),
+ mInvType(type)
{
mAttachPt = (flags & 0xff); // low bye of inventory flags
- mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ? TRUE: FALSE;
+ mIsMultiObject = ( flags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ? TRUE: FALSE;
}
LLUIImagePtr LLObjectBridge::getIcon() const
@@ -4058,7 +4034,7 @@ LLInventoryObject* LLObjectBridge::getObject() const
}
// virtual
-void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLObjectBridge::performAction(LLInventoryModel* model, std::string action)
{
if (isAddAction(action))
{
@@ -4102,7 +4078,7 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model
}
}
}
- else LLItemBridge::performAction(folder, model, action);
+ else LLItemBridge::performAction(model, action);
}
void LLObjectBridge::openItem()
@@ -4120,7 +4096,7 @@ void LLObjectBridge::openItem()
// Disable old properties floater; this is replaced by the sidepanel.
/*
- LLFloaterReg::showInstance("properties", mUUID);
+ LLFloaterReg::showInstance("properties", mUUID);
*/
}
@@ -4146,12 +4122,11 @@ std::string LLObjectBridge::getLabelSuffix() const
{
if (get_is_item_worn(mUUID))
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
+ std::string attachment_point_name = gAgentAvatarp->getAttachedPointName(mUUID);
// e.g. "(worn on ...)" / "(attached to ...)"
LLStringUtil::format_map_t args;
- args["[ATTACHMENT_POINT]"] = attachment_point_name.c_str();
+ args["[ATTACHMENT_POINT]"] = LLTrans::getString(attachment_point_name);
return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args);
}
else
@@ -4166,10 +4141,10 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach
payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link.
S32 attach_pt = 0;
- if (gAgent.getAvatarObject() && attachment)
+ if (isAgentAvatarValid() && attachment)
{
- for (LLVOAvatar::attachment_map_t::iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin();
- iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter)
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); ++iter)
{
if (iter->second == attachment)
{
@@ -4195,9 +4170,7 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach
bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response)
{
- LLVOAvatar *avatarp = gAgent.getAvatarObject();
-
- if (!avatarp->canAttachMoreObjects())
+ if (!gAgentAvatarp->canAttachMoreObjects())
{
LLSD args;
args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS);
@@ -4259,18 +4232,14 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
LLInventoryItem *item = getItem();
if(item)
{
- LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
- if( !avatarp )
- {
- return;
- }
+ if (!isAgentAvatarValid()) return;
if( get_is_item_worn( mUUID ) )
{
items.push_back(std::string("Attach Separator"));
items.push_back(std::string("Detach From Yourself"));
}
- else if (!isItemInTrash() && !isLinkedObjectInTrash() && !isLinkedObjectMissing())
+ else if (!isItemInTrash() && !isLinkedObjectInTrash() && !isLinkedObjectMissing() && !isCOFFolder())
{
items.push_back(std::string("Attach Separator"));
items.push_back(std::string("Object Wear"));
@@ -4279,7 +4248,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
// commented out for DEV-32347
//items.push_back(std::string("Restore to Last Position"));
- if (!avatarp->canAttachMoreObjects())
+ if (!gAgentAvatarp->canAttachMoreObjects())
{
disabled_items.push_back(std::string("Object Wear"));
disabled_items.push_back(std::string("Attach To"));
@@ -4287,15 +4256,14 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE);
LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE);
- LLVOAvatar *avatarp = gAgent.getAvatarObject();
if (attach_menu
&& (attach_menu->getChildCount() == 0)
&& attach_hud_menu
&& (attach_hud_menu->getChildCount() == 0)
- && avatarp)
+ && isAgentAvatarValid())
{
- for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
- iter != avatarp->mAttachmentPoints.end(); )
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
@@ -4345,11 +4313,10 @@ BOOL LLObjectBridge::renameItem(const std::string& new_name)
model->notifyObservers();
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if( avatar )
+ if (isAgentAvatarValid())
{
- LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() );
- if( obj )
+ LLViewerObject* obj = gAgentAvatarp->getWornAttachment( item->getUUID() );
+ if(obj)
{
LLSelectMgr::getInstance()->deselectAll();
LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE );
@@ -4380,19 +4347,25 @@ void LLLSLTextBridge::openItem()
{
LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
}
- /*
- LLViewerInventoryItem* item = getItem();
- if (item)
- {
- LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
- }
- */
}
// +=================================================+
// | LLWearableBridge |
// +=================================================+
+LLWearableBridge::LLWearableBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ LLAssetType::EType asset_type,
+ LLInventoryType::EType inv_type,
+ EWearableType wearable_type) :
+ LLItemBridge(inventory, root, uuid),
+ mAssetType( asset_type ),
+ mInvType(inv_type),
+ mWearableType(wearable_type)
+{
+}
+
// *NOTE: hack to get from avatar inventory to avatar
void wear_inventory_item_on_avatar( LLInventoryItem* item )
{
@@ -4401,7 +4374,7 @@ void wear_inventory_item_on_avatar( LLInventoryItem* item )
lldebugs << "wear_inventory_item_on_avatar( " << item->getName()
<< " )" << llendl;
- LLAppearanceManager::instance().addCOFItemLink(item);
+ LLAppearanceMgr::instance().addCOFItemLink(item);
}
}
@@ -4413,10 +4386,10 @@ void wear_add_inventory_item_on_avatar( LLInventoryItem* item )
<< " )" << llendl;
LLWearableList::instance().getAsset(item->getAssetUUID(),
- item->getName(),
- item->getType(),
- LLWearableBridge::onWearAddOnAvatarArrived,
- new LLUUID(item->getUUID()));
+ item->getName(),
+ item->getType(),
+ LLWearableBridge::onWearAddOnAvatarArrived,
+ new LLUUID(item->getUUID()));
}
}
@@ -4538,7 +4511,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_
LLViewerInventoryItem *gest_item = gest_item_array.get(i);
if (get_is_item_worn(gest_item->getUUID()))
{
- LLGestureManager::instance().deactivateGesture( gest_item->getLinkedUUID() );
+ LLGestureMgr::instance().deactivateGesture( gest_item->getLinkedUUID() );
gInventory.updateItem( gest_item );
gInventory.notifyObservers();
}
@@ -4576,7 +4549,7 @@ LLUIImagePtr LLWearableBridge::getIcon() const
}
// virtual
-void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLWearableBridge::performAction(LLInventoryModel* model, std::string action)
{
if (isAddAction(action))
{
@@ -4596,7 +4569,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
removeFromAvatar();
return;
}
- else LLItemBridge::performAction(folder, model, action);
+ else LLItemBridge::performAction(model, action);
}
void LLWearableBridge::openItem()
@@ -4607,42 +4580,6 @@ void LLWearableBridge::openItem()
{
LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
}
- /*
- if( isItemInTrash() )
- {
- LLNotificationsUtil::add("CannotWearTrash");
- }
- else if(isAgentInventory())
- {
- if( !get_is_item_worn( mUUID ) )
- {
- wearOnAvatar();
- }
- }
- else
- {
- // must be in the inventory library. copy it to our inventory
- // and put it on right away.
- LLViewerInventoryItem* item = getItem();
- if(item && item->isComplete())
- {
- LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
- copy_inventory_item(
- gAgent.getID(),
- item->getPermissions().getOwner(),
- item->getUUID(),
- LLUUID::null,
- std::string(),
- cb);
- }
- else if(item)
- {
- // *TODO: We should fetch the item details, and then do
- // the operation above.
- LLNotificationsUtil::add("CannotWearInfoNotComplete");
- }
- }
- */
}
void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
@@ -4696,7 +4633,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
disabled_items.push_back(std::string("Wearable Edit"));
}
// Don't allow items to be worn if their baseobj is in the trash.
- if (isLinkedObjectInTrash() || isLinkedObjectMissing())
+ if (isLinkedObjectInTrash() || isLinkedObjectMissing() || isCOFFolder())
{
disabled_items.push_back(std::string("Wearable Wear"));
disabled_items.push_back(std::string("Wearable Add"));
@@ -4898,10 +4835,10 @@ void LLWearableBridge::editOnAvatar()
if (gFloaterCustomize)
gFloaterCustomize->setCurrentWearableType( wearable->getType() );
- if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() )
+ if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() )
{
// Start Avatar Customization
- gAgent.changeCameraToCustomizeAvatar();
+ gAgentCamera.changeCameraToCustomizeAvatar();
}
}
}
@@ -4952,34 +4889,21 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&&
//!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
{
- // MULTI_WEARABLE: FIXME HACK - always remove all
bool do_remove_all = false;
- gAgentWearables.removeWearable( type, do_remove_all, 0 );
+ U32 index = gAgentWearables.getWearableIndex(wearable);
+ gAgentWearables.removeWearable( type, do_remove_all, index );
}
}
}
// Find and remove this item from the COF.
- // FIXME 2.1 - call removeCOFItemLinks in llappearancemgr instead.
- LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::instance().getCOF());
- if (items.size() != 1)
- {
- llwarns << "Found " << items.size() << " COF links to " << item_id.asString() << ", expected 1" << llendl;
- }
- for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
- iter != items.end();
- ++iter)
- {
- const LLViewerInventoryItem *linked_item = (*iter);
- const LLUUID &item_id = linked_item->getUUID();
- gInventory.purgeObject(item_id);
- }
+ LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false);
gInventory.notifyObservers();
delete on_remove_struct;
}
-/* static */
+// static
void LLWearableBridge::removeAllClothesFromAvatar()
{
// Remove COF links.
@@ -4999,20 +4923,7 @@ void LLWearableBridge::removeAllClothesFromAvatar()
continue;
// Find and remove this item from the COF.
- LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(
- item_id, LLAppearanceManager::instance().getCOF());
- if (items.size() != 1)
- {
- llwarns << "Found " << items.size() << " COF links to " << item_id.asString() << ", expected 1" << llendl;
- }
- for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
- iter != items.end();
- ++iter)
- {
- const LLViewerInventoryItem *linked_item = (*iter);
- const LLUUID &item_id = linked_item->getUUID();
- gInventory.purgeObject(item_id);
- }
+ LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false);
}
gInventory.notifyObservers();
@@ -5020,7 +4931,7 @@ void LLWearableBridge::removeAllClothesFromAvatar()
LLAgentWearables::userRemoveAllClothes();
}
-/* static */
+// static
void LLWearableBridge::removeItemFromAvatar(LLViewerInventoryItem *item)
{
if (item)
@@ -5042,61 +4953,124 @@ void LLWearableBridge::removeFromAvatar()
}
}
-LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type,
- const LLUUID& uuid,LLInventoryModel* model)
+// +=================================================+
+// | LLLinkItemBridge |
+// +=================================================+
+// For broken item links
+std::string LLLinkItemBridge::sPrefix("Link: ");
+LLUIImagePtr LLLinkItemBridge::getIcon() const
{
- LLInvFVBridgeAction* action = NULL;
- switch(asset_type)
+ if (LLViewerInventoryItem *item = getItem())
{
- case LLAssetType::AT_TEXTURE:
- action = new LLTextureBridgeAction(uuid,model);
- break;
-
- case LLAssetType::AT_SOUND:
- action = new LLSoundBridgeAction(uuid,model);
- break;
-
- case LLAssetType::AT_LANDMARK:
- action = new LLLandmarkBridgeAction(uuid,model);
- break;
-
- case LLAssetType::AT_CALLINGCARD:
- action = new LLCallingCardBridgeAction(uuid,model);
- break;
-
- case LLAssetType::AT_OBJECT:
- action = new LLObjectBridgeAction(uuid,model);
- break;
-
- case LLAssetType::AT_NOTECARD:
- action = new LLNotecardBridgeAction(uuid,model);
- break;
-
- case LLAssetType::AT_ANIMATION:
- action = new LLAnimationBridgeAction(uuid,model);
- break;
-
- case LLAssetType::AT_GESTURE:
- action = new LLGestureBridgeAction(uuid,model);
- break;
+ U32 attachment_point = (item->getFlags() & 0xff); // low byte of inventory flags
+ bool is_multi = LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags();
- case LLAssetType::AT_LSL_TEXT:
- action = new LLLSLTextBridgeAction(uuid,model);
- break;
+ return get_item_icon(item->getActualType(), item->getInventoryType(), attachment_point, is_multi);
+ }
+ return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE);
+}
+void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+ // *TODO: Translate
+ lldebugs << "LLLink::buildContextMenu()" << llendl;
+ menuentry_vec_t items;
+ menuentry_vec_t disabled_items;
- case LLAssetType::AT_CLOTHING:
- case LLAssetType::AT_BODYPART:
- action = new LLWearableBridgeAction(uuid,model);
+ items.push_back(std::string("Find Original"));
+ disabled_items.push_back(std::string("Find Original"));
+
+ if(isItemInTrash())
+ {
+ addTrashContextMenuOptions(items, disabled_items);
+ }
+ else
+ {
+ items.push_back(std::string("Properties"));
+ addDeleteContextMenuOptions(items, disabled_items);
+ }
+ hide_context_entries(menu, items, disabled_items);
+}
- break;
+// +=================================================+
+// | LLLinkBridge |
+// +=================================================+
+// For broken folder links.
+std::string LLLinkFolderBridge::sPrefix("Link: ");
+LLUIImagePtr LLLinkFolderBridge::getIcon() const
+{
+ LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
+ if (LLViewerInventoryItem *item = getItem())
+ {
+ if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
+ {
+ preferred_type = cat->getPreferredType();
+ }
+ }
+ return LLFolderBridge::getIcon(preferred_type);
+}
+void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+ // *TODO: Translate
+ lldebugs << "LLLink::buildContextMenu()" << llendl;
+ menuentry_vec_t items;
+ menuentry_vec_t disabled_items;
- default:
- break;
+ if (isItemInTrash())
+ {
+ addTrashContextMenuOptions(items, disabled_items);
}
- return action;
+ else
+ {
+ items.push_back(std::string("Find Original"));
+ addDeleteContextMenuOptions(items, disabled_items);
+ }
+ hide_context_entries(menu, items, disabled_items);
+}
+void LLLinkFolderBridge::performAction(LLInventoryModel* model, std::string action)
+{
+ if ("goto" == action)
+ {
+ gotoItem();
+ return;
+ }
+ LLItemBridge::performAction(model,action);
+}
+void LLLinkFolderBridge::gotoItem()
+{
+ const LLUUID &cat_uuid = getFolderID();
+ if (!cat_uuid.isNull())
+ {
+ if (LLFolderViewItem *base_folder = mRoot->getItemByID(cat_uuid))
+ {
+ if (LLInventoryModel* model = getInventoryModel())
+ {
+ model->fetchDescendentsOf(cat_uuid);
+ }
+ base_folder->setOpen(TRUE);
+ mRoot->setSelectionFromRoot(base_folder,TRUE);
+ mRoot->scrollToShowSelection();
+ }
+ }
+}
+const LLUUID &LLLinkFolderBridge::getFolderID() const
+{
+ if (LLViewerInventoryItem *link_item = getItem())
+ {
+ if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory())
+ {
+ const LLUUID& cat_uuid = cat->getUUID();
+ return cat_uuid;
+ }
+ }
+ return LLUUID::null;
}
-//static
+/********************************************************************************
+ **
+ ** BRIDGE ACTIONS
+ **/
+
+// static
void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
const LLUUID& uuid,LLInventoryModel* model)
{
@@ -5108,7 +5082,7 @@ void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
}
}
-//static
+// static
void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)
{
llassert(model);
@@ -5128,129 +5102,231 @@ void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)
LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const
{
- if(mModel)
+ if (mModel)
return (LLViewerInventoryItem*)mModel->getItem(mUUID);
return NULL;
}
-//virtual
-void LLTextureBridgeAction::doIt()
+class LLTextureBridgeAction: public LLInvFVBridgeAction
{
- if (getItem())
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
{
- LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+ if (getItem())
+ {
+ LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+ }
+ LLInvFVBridgeAction::doIt();
}
+ virtual ~LLTextureBridgeAction(){}
+protected:
+ LLTextureBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+};
- LLInvFVBridgeAction::doIt();
-}
-
-//virtual
-void LLSoundBridgeAction::doIt()
+class LLSoundBridgeAction: public LLInvFVBridgeAction
{
- LLViewerInventoryItem* item = getItem();
- if(item)
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
{
- LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES);
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES);
+ }
+ LLInvFVBridgeAction::doIt();
}
+ virtual ~LLSoundBridgeAction(){}
+protected:
+ LLSoundBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+};
- LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual
-void LLLandmarkBridgeAction::doIt()
+class LLLandmarkBridgeAction: public LLInvFVBridgeAction
{
- LLViewerInventoryItem* item = getItem();
- if( item )
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
{
- // Opening (double-clicking) a landmark immediately teleports,
- // but warns you the first time.
- LLSD payload;
- payload["asset_id"] = item->getAssetUUID();
-
- LLSD args;
- args["LOCATION"] = item->getName();
-
- LLNotificationsUtil::add("TeleportFromLandmark", args, payload);
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ // Opening (double-clicking) a landmark immediately teleports,
+ // but warns you the first time.
+ LLSD payload;
+ payload["asset_id"] = item->getAssetUUID();
+
+ LLSD args;
+ args["LOCATION"] = item->getName();
+
+ LLNotificationsUtil::add("TeleportFromLandmark", args, payload);
+ }
+ LLInvFVBridgeAction::doIt();
}
+ virtual ~LLLandmarkBridgeAction(){}
+protected:
+ LLLandmarkBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+};
- LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual
-void LLCallingCardBridgeAction::doIt()
+class LLCallingCardBridgeAction: public LLInvFVBridgeAction
{
- LLViewerInventoryItem* item = getItem();
- if(item && item->getCreatorUUID().notNull())
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
{
- LLAvatarActions::showProfile(item->getCreatorUUID());
+ LLViewerInventoryItem* item = getItem();
+ if (item && item->getCreatorUUID().notNull())
+ {
+ LLAvatarActions::showProfile(item->getCreatorUUID());
+ }
+ LLInvFVBridgeAction::doIt();
}
+ virtual ~LLCallingCardBridgeAction(){}
+protected:
+ LLCallingCardBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
- LLInvFVBridgeAction::doIt();
-}
+};
-//virtual
-void
-LLNotecardBridgeAction::doIt()
+class LLNotecardBridgeAction: public LLInvFVBridgeAction
{
- LLViewerInventoryItem* item = getItem();
- if (item)
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
{
- LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
+ }
+ LLInvFVBridgeAction::doIt();
}
+ virtual ~LLNotecardBridgeAction(){}
+protected:
+ LLNotecardBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+};
- LLInvFVBridgeAction::doIt();
-}
-
-//virtual
-void LLGestureBridgeAction::doIt()
+class LLGestureBridgeAction: public LLInvFVBridgeAction
{
- LLViewerInventoryItem* item = getItem();
- if (item)
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
{
- LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
- preview->setFocus(TRUE);
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null);
+ preview->setFocus(TRUE);
+ }
+ LLInvFVBridgeAction::doIt();
}
+ virtual ~LLGestureBridgeAction(){}
+protected:
+ LLGestureBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+};
- LLInvFVBridgeAction::doIt();
-}
-
-//virtual
-void LLAnimationBridgeAction::doIt()
+class LLAnimationBridgeAction: public LLInvFVBridgeAction
{
- LLViewerInventoryItem* item = getItem();
- if (item)
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
{
- LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+ }
+ LLInvFVBridgeAction::doIt();
}
+ virtual ~LLAnimationBridgeAction(){}
+protected:
+ LLAnimationBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+};
- LLInvFVBridgeAction::doIt();
-}
-
-
-//virtual
-void LLObjectBridgeAction::doIt()
+class LLObjectBridgeAction: public LLInvFVBridgeAction
{
- /*
- LLFloaterReg::showInstance("properties", mUUID);
- */
- LLInvFVBridgeAction::doIt();
-}
-
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
+ {
+ /*
+ LLFloaterReg::showInstance("properties", mUUID);
+ */
+ LLInvFVBridgeAction::doIt();
+ }
+ virtual ~LLObjectBridgeAction(){}
+protected:
+ LLObjectBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+};
-//virtual
-void LLLSLTextBridgeAction::doIt()
+class LLLSLTextBridgeAction: public LLInvFVBridgeAction
{
- LLViewerInventoryItem* item = getItem();
- if (item)
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
{
- LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
+ LLViewerInventoryItem* item = getItem();
+ if (item)
+ {
+ LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES);
+ }
+ LLInvFVBridgeAction::doIt();
}
+ virtual ~LLLSLTextBridgeAction(){}
+protected:
+ LLLSLTextBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+};
- LLInvFVBridgeAction::doIt();
-}
-
+class LLWearableBridgeAction: public LLInvFVBridgeAction
+{
+ friend class LLInvFVBridgeAction;
+public:
+ virtual void doIt()
+ {
+ if(isItemInTrash())
+ {
+ LLNotificationsUtil::add("CannotWearTrash");
+ }
+ else if(isAgentInventory())
+ {
+ if(!get_is_item_worn(mUUID))
+ {
+ wearOnAvatar();
+ }
+ }
+ else
+ {
+ // must be in the inventory library. copy it to our inventory
+ // and put it on right away.
+ LLViewerInventoryItem* item = getItem();
+ if(item && item->isComplete())
+ {
+ LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
+ copy_inventory_item(
+ gAgent.getID(),
+ item->getPermissions().getOwner(),
+ item->getUUID(),
+ LLUUID::null,
+ std::string(),
+ cb);
+ }
+ else if(item)
+ {
+ // *TODO: We should fetch the item details, and then do
+ // the operation above.
+ LLNotificationsUtil::add("CannotWearInfoNotComplete");
+ }
+ }
+ LLInvFVBridgeAction::doIt();
+ }
+ virtual ~LLWearableBridgeAction(){}
+protected:
+ LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {}
+ BOOL isItemInTrash() const;
+ // return true if the item is in agent inventory. if false, it
+ // must be lost or in the inventory library.
+ BOOL isAgentInventory() const;
+ void wearOnAvatar();
+};
BOOL LLWearableBridgeAction::isItemInTrash() const
{
@@ -5297,164 +5373,50 @@ void LLWearableBridgeAction::wearOnAvatar()
}
}
-//virtual
-void LLWearableBridgeAction::doIt()
-{
- if(isItemInTrash())
- {
- LLNotificationsUtil::add("CannotWearTrash");
- }
- else if(isAgentInventory())
- {
- if(!get_is_item_worn(mUUID))
- {
- wearOnAvatar();
- }
- }
- else
- {
- // must be in the inventory library. copy it to our inventory
- // and put it on right away.
- LLViewerInventoryItem* item = getItem();
- if(item && item->isComplete())
- {
- LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback();
- copy_inventory_item(
- gAgent.getID(),
- item->getPermissions().getOwner(),
- item->getUUID(),
- LLUUID::null,
- std::string(),
- cb);
- }
- else if(item)
- {
- // *TODO: We should fetch the item details, and then do
- // the operation above.
- LLNotificationsUtil::add("CannotWearInfoNotComplete");
- }
- }
-
- LLInvFVBridgeAction::doIt();
-}
-
-// +=================================================+
-// | LLLinkItemBridge |
-// +=================================================+
-// For broken links
-
-std::string LLLinkItemBridge::sPrefix("Link: ");
-
-
-LLUIImagePtr LLLinkItemBridge::getIcon() const
-{
- if (LLViewerInventoryItem *item = getItem())
- {
- return get_item_icon(item->getActualType(), item->getInventoryType(), 0, FALSE);
- }
- return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE);
-}
-
-void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
- // *TODO: Translate
- lldebugs << "LLLink::buildContextMenu()" << llendl;
- menuentry_vec_t items;
- menuentry_vec_t disabled_items;
-
- items.push_back(std::string("Find Original"));
- disabled_items.push_back(std::string("Find Original"));
-
- if(isItemInTrash())
- {
- addTrashContextMenuOptions(items, disabled_items);
- }
- else
- {
- items.push_back(std::string("Properties"));
- addDeleteContextMenuOptions(items, disabled_items);
- }
- hide_context_entries(menu, items, disabled_items);
-}
-
-
-// +=================================================+
-// | LLLinkBridge |
-// +=================================================+
-// For broken links.
-
-std::string LLLinkFolderBridge::sPrefix("Link: ");
-
-
-LLUIImagePtr LLLinkFolderBridge::getIcon() const
-{
- LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
- if (LLViewerInventoryItem *item = getItem())
- {
- if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
- {
- preferred_type = cat->getPreferredType();
- }
- }
- return LLFolderBridge::getIcon(preferred_type);
-}
-
-void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
-{
- // *TODO: Translate
- lldebugs << "LLLink::buildContextMenu()" << llendl;
- menuentry_vec_t items;
- menuentry_vec_t disabled_items;
-
- if (isItemInTrash())
- {
- addTrashContextMenuOptions(items, disabled_items);
- }
- else
- {
- items.push_back(std::string("Find Original"));
- addDeleteContextMenuOptions(items, disabled_items);
- }
- hide_context_entries(menu, items, disabled_items);
-}
-
-void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
-{
- if ("goto" == action)
- {
- gotoItem(folder);
- return;
- }
- LLItemBridge::performAction(folder,model,action);
-}
-
-void LLLinkFolderBridge::gotoItem(LLFolderView *folder)
+LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type,
+ const LLUUID& uuid,
+ LLInventoryModel* model)
{
- const LLUUID &cat_uuid = getFolderID();
- if (!cat_uuid.isNull())
+ LLInvFVBridgeAction* action = NULL;
+ switch(asset_type)
{
- if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid))
- {
- if (LLInventoryModel* model = getInventoryModel())
- {
- model->fetchDescendentsOf(cat_uuid);
- }
- base_folder->setOpen(TRUE);
- folder->setSelectionFromRoot(base_folder,TRUE);
- folder->scrollToShowSelection();
- }
+ case LLAssetType::AT_TEXTURE:
+ action = new LLTextureBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_SOUND:
+ action = new LLSoundBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_LANDMARK:
+ action = new LLLandmarkBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_CALLINGCARD:
+ action = new LLCallingCardBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_OBJECT:
+ action = new LLObjectBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_NOTECARD:
+ action = new LLNotecardBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_ANIMATION:
+ action = new LLAnimationBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_GESTURE:
+ action = new LLGestureBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_LSL_TEXT:
+ action = new LLLSLTextBridgeAction(uuid,model);
+ break;
+ case LLAssetType::AT_CLOTHING:
+ case LLAssetType::AT_BODYPART:
+ action = new LLWearableBridgeAction(uuid,model);
+ break;
+ default:
+ break;
}
+ return action;
}
-const LLUUID &LLLinkFolderBridge::getFolderID() const
-{
- if (LLViewerInventoryItem *link_item = getItem())
- {
- if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory())
- {
- const LLUUID& cat_uuid = cat->getUUID();
- return cat_uuid;
- }
- }
- return LLUUID::null;
-}
+/** Bridge Actions
+ **
+ ********************************************************************************/
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 32504091cb..e7b3785a48 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -44,78 +44,13 @@
class LLInventoryPanel;
class LLInventoryModel;
class LLMenuGL;
-
-enum EInventoryIcon
-{
- TEXTURE_ICON_NAME,
- SOUND_ICON_NAME,
- CALLINGCARD_ONLINE_ICON_NAME,
- CALLINGCARD_OFFLINE_ICON_NAME,
- LANDMARK_ICON_NAME,
- LANDMARK_VISITED_ICON_NAME,
- SCRIPT_ICON_NAME,
- CLOTHING_ICON_NAME,
- OBJECT_ICON_NAME,
- OBJECT_MULTI_ICON_NAME,
- NOTECARD_ICON_NAME,
- BODYPART_ICON_NAME,
- SNAPSHOT_ICON_NAME,
-
- BODYPART_SHAPE_ICON_NAME,
- BODYPART_SKIN_ICON_NAME,
- BODYPART_HAIR_ICON_NAME,
- BODYPART_EYES_ICON_NAME,
- CLOTHING_SHIRT_ICON_NAME,
- CLOTHING_PANTS_ICON_NAME,
- CLOTHING_SHOES_ICON_NAME,
- CLOTHING_SOCKS_ICON_NAME,
- CLOTHING_JACKET_ICON_NAME,
- CLOTHING_GLOVES_ICON_NAME,
- CLOTHING_UNDERSHIRT_ICON_NAME,
- CLOTHING_UNDERPANTS_ICON_NAME,
- CLOTHING_SKIRT_ICON_NAME,
- CLOTHING_ALPHA_ICON_NAME,
- CLOTHING_TATTOO_ICON_NAME,
-
- ANIMATION_ICON_NAME,
- GESTURE_ICON_NAME,
-
- LINKITEM_ICON_NAME,
- LINKFOLDER_ICON_NAME,
-
- ICON_NAME_COUNT
-};
-
-extern std::string ICON_NAME[ICON_NAME_COUNT];
-
-typedef std::pair<LLUUID, LLUUID> two_uuids_t;
-typedef std::list<two_uuids_t> two_uuids_list_t;
-typedef std::pair<LLUUID, two_uuids_list_t> uuid_move_list_t;
-
-struct LLMoveInv
-{
- LLUUID mObjectID;
- LLUUID mCategoryID;
- two_uuids_list_t mMoveList;
- void (*mCallback)(S32, void*);
- void* mUserData;
-};
-
-struct LLAttachmentRezAction
-{
- LLUUID mItemID;
- S32 mAttachPt;
-};
+class LLCallingCardObserver;
+class LLViewerJointAttachment;
typedef std::vector<std::string> menuentry_vec_t;
-const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type);
-void hide_context_entries(LLMenuGL& menu,
- const menuentry_vec_t &entries_to_show,
- const menuentry_vec_t &disabled_entries);
-
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInvFVBridge (& its derived classes)
+// Class LLInvFVBridge
//
// Short for Inventory-Folder-View-Bridge. This is an
// implementation class to be able to view inventory items.
@@ -134,6 +69,7 @@ public:
LLAssetType::EType actual_asset_type,
LLInventoryType::EType inv_type,
LLInventoryPanel* inventory,
+ LLFolderView* root,
const LLUUID& uuid,
U32 flags = 0x00);
virtual ~LLInvFVBridge() {}
@@ -175,7 +111,7 @@ public:
virtual void pasteFromClipboard() {}
virtual void pasteLinkFromClipboard() {}
void getClipboardEntries(bool show_asset_id, menuentry_vec_t &items,
- menuentry_vec_t &disabled_items, U32 flags);
+ menuentry_vec_t &disabled_items, U32 flags);
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
virtual BOOL dragOrDrop(MASK mask, BOOL drop,
@@ -199,7 +135,7 @@ protected:
menuentry_vec_t &disabled_items);
protected:
- LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid);
+ LLInvFVBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid);
LLInventoryObject* getInventoryObject() const;
LLInventoryModel* getInventoryModel() const;
@@ -221,40 +157,88 @@ protected:
void removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch);
protected:
LLHandle<LLPanel> mInventoryPanel;
+ LLFolderView* mRoot;
const LLUUID mUUID; // item id
LLInventoryType::EType mInvType;
void purgeItem(LLInventoryModel *model, const LLUUID &uuid);
};
-/**
- * This class intended to build Folder View Bridge via LLInvFVBridge::createBridge.
- * It can be overridden with another way of creation necessary Inventory-Folder-View-Bridge.
- */
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLInvFVBridge
+//
+// This class intended to build Folder View Bridge via LLInvFVBridge::createBridge.
+// It can be overridden with another way of creation necessary Inventory-Folder-View-Bridge.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLInventoryFVBridgeBuilder
{
public:
- virtual ~LLInventoryFVBridgeBuilder(){}
+ virtual ~LLInventoryFVBridgeBuilder() {}
virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type,
LLAssetType::EType actual_asset_type,
LLInventoryType::EType inv_type,
LLInventoryPanel* inventory,
+ LLFolderView* root,
const LLUUID& uuid,
U32 flags = 0x00) const;
};
+// Used by LLItemBridge::getIcon
+enum EInventoryIcon
+{
+ TEXTURE_ICON_NAME,
+ SOUND_ICON_NAME,
+ CALLINGCARD_ONLINE_ICON_NAME,
+ CALLINGCARD_OFFLINE_ICON_NAME,
+ LANDMARK_ICON_NAME,
+ LANDMARK_VISITED_ICON_NAME,
+ SCRIPT_ICON_NAME,
+ CLOTHING_ICON_NAME,
+ OBJECT_ICON_NAME,
+ OBJECT_MULTI_ICON_NAME,
+ NOTECARD_ICON_NAME,
+ BODYPART_ICON_NAME,
+ SNAPSHOT_ICON_NAME,
+
+ BODYPART_SHAPE_ICON_NAME,
+ BODYPART_SKIN_ICON_NAME,
+ BODYPART_HAIR_ICON_NAME,
+ BODYPART_EYES_ICON_NAME,
+ CLOTHING_SHIRT_ICON_NAME,
+ CLOTHING_PANTS_ICON_NAME,
+ CLOTHING_SHOES_ICON_NAME,
+ CLOTHING_SOCKS_ICON_NAME,
+ CLOTHING_JACKET_ICON_NAME,
+ CLOTHING_GLOVES_ICON_NAME,
+ CLOTHING_UNDERSHIRT_ICON_NAME,
+ CLOTHING_UNDERPANTS_ICON_NAME,
+ CLOTHING_SKIRT_ICON_NAME,
+ CLOTHING_ALPHA_ICON_NAME,
+ CLOTHING_TATTOO_ICON_NAME,
+
+ ANIMATION_ICON_NAME,
+ GESTURE_ICON_NAME,
+
+ LINKITEM_ICON_NAME,
+ LINKFOLDER_ICON_NAME,
+
+ ICON_NAME_COUNT
+};
+extern std::string ICON_NAME[ICON_NAME_COUNT];
class LLItemBridge : public LLInvFVBridge
{
public:
- LLItemBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
- LLInvFVBridge(inventory, uuid) {}
+ LLItemBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ LLInvFVBridge(inventory, root, uuid) {}
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void selectItem();
virtual void restoreItem();
virtual void restoreToWorld();
- virtual void gotoItem(LLFolderView *folder);
+ virtual void gotoItem();
virtual LLUIImagePtr getIcon() const;
virtual const std::string& getDisplayName() const;
virtual std::string getLabelSuffix() const;
@@ -283,7 +267,6 @@ protected:
mutable std::string mDisplayName;
};
-
class LLFolderBridge : public LLInvFVBridge
{
friend class LLInvFVBridge;
@@ -292,7 +275,7 @@ public:
BOOL drop);
BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category,
BOOL drop);
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void openItem();
virtual void closeItem();
virtual BOOL isItemRenameable() const;
@@ -332,9 +315,10 @@ public:
LLViewerInventoryCategory* getCategory() const;
protected:
- LLFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid)
- : LLInvFVBridge(inventory, uuid),
-
+ LLFolderBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ LLInvFVBridge(inventory, root, uuid),
mCallingCards(FALSE),
mWearables(FALSE),
mMenu(NULL) {}
@@ -383,11 +367,12 @@ public:
LLUIImagePtr getIcon() const;
protected:
- LLScriptBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
- LLItemBridge(inventory, uuid) {}
+ LLScriptBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid ) :
+ LLItemBridge(inventory, root, uuid) {}
};
-
class LLTextureBridge : public LLItemBridge
{
friend class LLInvFVBridge;
@@ -395,11 +380,16 @@ public:
virtual LLUIImagePtr getIcon() const;
virtual void openItem();
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
protected:
- LLTextureBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type) :
- LLItemBridge(inventory, uuid), mInvType(type) {}
+ LLTextureBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ LLInventoryType::EType type) :
+ LLItemBridge(inventory, root, uuid),
+ mInvType(type)
+ {}
bool canSaveTexture(void);
LLInventoryType::EType mInvType;
};
@@ -415,39 +405,30 @@ public:
static void openSoundPreview(void*);
protected:
- LLSoundBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
- LLItemBridge(inventory, uuid) {}
+ LLSoundBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ LLItemBridge(inventory, root, uuid) {}
};
class LLLandmarkBridge : public LLItemBridge
{
friend class LLInvFVBridge;
public:
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
virtual LLUIImagePtr getIcon() const;
virtual void openItem();
protected:
- LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags = 0x00);
-
+ LLLandmarkBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ U32 flags = 0x00);
protected:
BOOL mVisited;
};
-class LLCallingCardBridge;
-
-class LLCallingCardObserver : public LLFriendObserver
-{
-public:
- LLCallingCardObserver(LLCallingCardBridge* bridge) : mBridgep(bridge) {}
- virtual ~LLCallingCardObserver() { mBridgep = NULL; }
- virtual void changed(U32 mask);
-
-protected:
- LLCallingCardBridge* mBridgep;
-};
-
class LLCallingCardBridge : public LLItemBridge
{
friend class LLInvFVBridge;
@@ -455,20 +436,18 @@ public:
virtual std::string getLabelSuffix() const;
//virtual const std::string& getDisplayName() const;
virtual LLUIImagePtr getIcon() const;
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void openItem();
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
- //virtual void renameItem(const std::string& new_name);
- //virtual BOOL removeItem();
virtual BOOL dragOrDrop(MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data);
void refreshFolderViewItem();
-
protected:
- LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid );
+ LLCallingCardBridge(LLInventoryPanel* inventory,
+ LLFolderView* folder,
+ const LLUUID& uuid );
~LLCallingCardBridge();
-
protected:
LLCallingCardObserver* mObserver;
};
@@ -480,10 +459,11 @@ class LLNotecardBridge : public LLItemBridge
public:
virtual LLUIImagePtr getIcon() const;
virtual void openItem();
-
protected:
- LLNotecardBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
- LLItemBridge(inventory, uuid) {}
+ LLNotecardBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ LLItemBridge(inventory, root, uuid) {}
};
class LLGestureBridge : public LLItemBridge
@@ -497,7 +477,7 @@ public:
virtual LLFontGL::StyleFlags getLabelStyle() const;
virtual std::string getLabelSuffix() const;
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void openItem();
virtual BOOL removeItem();
@@ -506,33 +486,35 @@ public:
static void playGesture(const LLUUID& item_id);
protected:
- LLGestureBridge(LLInventoryPanel* inventory, const LLUUID& uuid)
- : LLItemBridge(inventory, uuid) {}
+ LLGestureBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid)
+ : LLItemBridge(inventory, root, uuid) {}
};
-
class LLAnimationBridge : public LLItemBridge
{
friend class LLInvFVBridge;
public:
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
virtual LLUIImagePtr getIcon() const;
virtual void openItem();
protected:
- LLAnimationBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
- LLItemBridge(inventory, uuid) {}
+ LLAnimationBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ LLItemBridge(inventory, root, uuid) {}
};
-
class LLObjectBridge : public LLItemBridge
{
friend class LLInvFVBridge;
public:
virtual LLUIImagePtr getIcon() const;
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void openItem();
virtual LLFontGL::StyleFlags getLabelStyle() const;
virtual std::string getLabelSuffix() const;
@@ -540,10 +522,12 @@ public:
virtual BOOL renameItem(const std::string& new_name);
LLInventoryObject* getObject() const;
-
protected:
- LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags);
-
+ LLObjectBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ LLInventoryType::EType type,
+ U32 flags);
protected:
static LLUUID sContextMenuItemID; // Only valid while the context menu is open.
LLInventoryType::EType mInvType;
@@ -551,26 +535,25 @@ protected:
BOOL mIsMultiObject;
};
-
class LLLSLTextBridge : public LLItemBridge
{
friend class LLInvFVBridge;
public:
virtual LLUIImagePtr getIcon() const;
virtual void openItem();
-
protected:
- LLLSLTextBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) :
- LLItemBridge(inventory, uuid) {}
+ LLLSLTextBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid ) :
+ LLItemBridge(inventory, root, uuid) {}
};
-
class LLWearableBridge : public LLItemBridge
{
friend class LLInvFVBridge;
public:
virtual LLUIImagePtr getIcon() const;
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void openItem();
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
virtual std::string getLabelSuffix() const;
@@ -596,13 +579,12 @@ public:
void removeFromAvatar();
protected:
- LLWearableBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLAssetType::EType asset_type, LLInventoryType::EType inv_type, EWearableType wearable_type) :
- LLItemBridge(inventory, uuid),
- mAssetType( asset_type ),
- mInvType(inv_type),
- mWearableType(wearable_type)
- {}
-
+ LLWearableBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ LLAssetType::EType asset_type,
+ LLInventoryType::EType inv_type,
+ EWearableType wearable_type);
protected:
LLAssetType::EType mAssetType;
LLInventoryType::EType mInvType;
@@ -614,41 +596,38 @@ class LLLinkItemBridge : public LLItemBridge
friend class LLInvFVBridge;
public:
virtual const std::string& getPrefix() { return sPrefix; }
-
virtual LLUIImagePtr getIcon() const;
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
-
protected:
- LLLinkItemBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
- LLItemBridge(inventory, uuid) {}
-
+ LLLinkItemBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ LLItemBridge(inventory, root, uuid) {}
protected:
static std::string sPrefix;
};
-
class LLLinkFolderBridge : public LLItemBridge
{
friend class LLInvFVBridge;
public:
virtual const std::string& getPrefix() { return sPrefix; }
-
virtual LLUIImagePtr getIcon() const;
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
- virtual void gotoItem(LLFolderView *folder);
-
+ virtual void performAction(LLInventoryModel* model, std::string action);
+ virtual void gotoItem();
protected:
- LLLinkFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) :
- LLItemBridge(inventory, uuid) {}
+ LLLinkFolderBridge(LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ LLItemBridge(inventory, root, uuid) {}
const LLUUID &getFolderID() const;
-
protected:
static std::string sPrefix;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInvFVBridgeAction (& its derived classes)
+// Class LLInvFVBridgeAction
//
// This is an implementation class to be able to
// perform action to view inventory items.
@@ -658,159 +637,30 @@ class LLInvFVBridgeAction
{
public:
// This method is a convenience function which creates the correct
- // type of bridge action based on some basic information
+ // type of bridge action based on some basic information.
static LLInvFVBridgeAction* createAction(LLAssetType::EType asset_type,
- const LLUUID& uuid,LLInventoryModel* model);
-
+ const LLUUID& uuid,
+ LLInventoryModel* model);
static void doAction(LLAssetType::EType asset_type,
const LLUUID& uuid, LLInventoryModel* model);
static void doAction(const LLUUID& uuid, LLInventoryModel* model);
- virtual void doIt() { };
- virtual ~LLInvFVBridgeAction(){}//need this because of warning on OSX
+ virtual void doIt() {};
+ virtual ~LLInvFVBridgeAction() {} // need this because of warning on OSX
protected:
- LLInvFVBridgeAction(const LLUUID& id,LLInventoryModel* model):mUUID(id),mModel(model){}
-
+ LLInvFVBridgeAction(const LLUUID& id, LLInventoryModel* model) :
+ mUUID(id), mModel(model) {}
LLViewerInventoryItem* getItem() const;
protected:
- const LLUUID& mUUID; // item id
+ const LLUUID& mUUID; // item id
LLInventoryModel* mModel;
-
-};
-
-
-
-class LLTextureBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLTextureBridgeAction(){}
-protected:
- LLTextureBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-};
-
-
-class LLSoundBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLSoundBridgeAction(){}
-protected:
- LLSoundBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-};
-
-
-class LLLandmarkBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLLandmarkBridgeAction(){}
-protected:
- LLLandmarkBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-};
-
-
-class LLCallingCardBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLCallingCardBridgeAction(){}
-protected:
- LLCallingCardBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-};
-
-
-class LLNotecardBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLNotecardBridgeAction(){}
-protected:
- LLNotecardBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-};
-
-
-class LLGestureBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLGestureBridgeAction(){}
-protected:
- LLGestureBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-};
-
-
-class LLAnimationBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLAnimationBridgeAction(){}
-protected:
- LLAnimationBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-};
-
-
-class LLObjectBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLObjectBridgeAction(){}
-protected:
- LLObjectBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
};
-class LLLSLTextBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt() ;
- virtual ~LLLSLTextBridgeAction(){}
-protected:
- LLLSLTextBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-};
-
-
-class LLWearableBridgeAction: public LLInvFVBridgeAction
-{
- friend class LLInvFVBridgeAction;
-public:
- virtual void doIt();
- virtual ~LLWearableBridgeAction(){}
-protected:
- LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
-
-
- BOOL isItemInTrash() const;
- // return true if the item is in agent inventory. if false, it
- // must be lost or in the inventory library.
- BOOL isAgentInventory() const;
-
- void wearOnAvatar();
-
-};
-
void wear_inventory_item_on_avatar(LLInventoryItem* item);
-class LLViewerJointAttachment;
-void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment);
+void rez_attachment(LLViewerInventoryItem* item,
+ LLViewerJointAttachment* attachment);
// Move items from an in-world object's "Contents" folder to a specified
// folder in agent inventory.
@@ -820,13 +670,9 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
void (*callback)(S32, void*) = NULL,
void* user_data = NULL);
-
-
-void teleport_via_landmark(const LLUUID& asset_id);
-
// Utility function to hide all entries except those in the list
void hide_context_entries(LLMenuGL& menu,
- const menuentry_vec_t &entries_to_show,
- const menuentry_vec_t &disabled_entries);
+ const menuentry_vec_t &entries_to_show,
+ const menuentry_vec_t &disabled_entries);
#endif // LL_LLINVENTORYBRIDGE_H
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index cd20d64ca8..1a488175ac 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -37,7 +37,8 @@
// viewer includes
#include "llfoldervieweventlistener.h"
#include "llfolderviewitem.h"
-#include "llinventorymodel.h" // gInventory.backgroundFetchActive()
+#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llviewercontrol.h"
#include "llfolderview.h"
@@ -713,7 +714,7 @@ const std::string& LLInventoryFilter::getFilterText()
filtered_by_all_types = FALSE;
}
- if (!gInventory.backgroundFetchActive()
+ if (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive()
&& filtered_by_type
&& !filtered_by_all_types)
{
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 3553137f53..8487588404 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -41,6 +41,7 @@
#include "llagentwearables.h"
#include "llcallingcard.h"
#include "llfloaterreg.h"
+#include "llinventorydefines.h"
#include "llsdserialize.h"
#include "llfiltereditor.h"
#include "llspinctrl.h"
@@ -86,6 +87,217 @@
BOOL LLInventoryState::sWearNewClothing = FALSE;
LLUUID LLInventoryState::sWearNewClothingTransactionID;
+
+///----------------------------------------------------------------------------
+/// LLInventoryCollectFunctor implementations
+///----------------------------------------------------------------------------
+
+// static
+bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* item)
+{
+ if (!item)
+ return false;
+
+ bool allowed = false;
+
+ switch(item->getType())
+ {
+ case LLAssetType::AT_CALLINGCARD:
+ // not allowed
+ break;
+
+ case LLAssetType::AT_OBJECT:
+ if (isAgentAvatarValid() && !gAgentAvatarp->isWearingAttachment(item->getUUID()))
+ {
+ allowed = true;
+ }
+ break;
+
+ case LLAssetType::AT_BODYPART:
+ case LLAssetType::AT_CLOTHING:
+ if(!gAgentWearables.isWearingItem(item->getUUID()))
+ {
+ allowed = true;
+ }
+ break;
+ default:
+ allowed = true;
+ break;
+ }
+
+ return allowed;
+}
+
+bool LLIsType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
+{
+ if(mType == LLAssetType::AT_CATEGORY)
+ {
+ if(cat) return TRUE;
+ }
+ if(item)
+ {
+ if(item->getType() == mType) return TRUE;
+ }
+ return FALSE;
+}
+
+bool LLIsNotType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
+{
+ if(mType == LLAssetType::AT_CATEGORY)
+ {
+ if(cat) return FALSE;
+ }
+ if(item)
+ {
+ if(item->getType() == mType) return FALSE;
+ else return TRUE;
+ }
+ return TRUE;
+}
+
+bool LLIsTypeWithPermissions::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
+{
+ if(mType == LLAssetType::AT_CATEGORY)
+ {
+ if(cat)
+ {
+ return TRUE;
+ }
+ }
+ if(item)
+ {
+ if(item->getType() == mType)
+ {
+ LLPermissions perm = item->getPermissions();
+ if ((perm.getMaskBase() & mPerm) == mPerm)
+ {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+bool LLBuddyCollector::operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item)
+{
+ if(item)
+ {
+ if((LLAssetType::AT_CALLINGCARD == item->getType())
+ && (!item->getCreatorUUID().isNull())
+ && (item->getCreatorUUID() != gAgent.getID()))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+
+bool LLUniqueBuddyCollector::operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item)
+{
+ if(item)
+ {
+ if((LLAssetType::AT_CALLINGCARD == item->getType())
+ && (item->getCreatorUUID().notNull())
+ && (item->getCreatorUUID() != gAgent.getID()))
+ {
+ mSeen.insert(item->getCreatorUUID());
+ return true;
+ }
+ }
+ return false;
+}
+
+
+bool LLParticularBuddyCollector::operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item)
+{
+ if(item)
+ {
+ if((LLAssetType::AT_CALLINGCARD == item->getType())
+ && (item->getCreatorUUID() == mBuddyID))
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+
+bool LLNameCategoryCollector::operator()(
+ LLInventoryCategory* cat, LLInventoryItem* item)
+{
+ if(cat)
+ {
+ if (!LLStringUtil::compareInsensitive(mName, cat->getName()))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item)
+{
+ // Valid COF items are:
+ // - links to wearables (body parts or clothing)
+ // - links to attachments
+ // - links to gestures
+ // - links to ensemble folders
+ LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem();
+ if (linked_item)
+ {
+ LLAssetType::EType type = linked_item->getType();
+ return (type == LLAssetType::AT_CLOTHING ||
+ type == LLAssetType::AT_BODYPART ||
+ type == LLAssetType::AT_GESTURE ||
+ type == LLAssetType::AT_OBJECT);
+ }
+ else
+ {
+ LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory();
+ // BAP remove AT_NONE support after ensembles are fully working?
+ return (linked_category &&
+ ((linked_category->getPreferredType() == LLFolderType::FT_NONE) ||
+ (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType()))));
+ }
+}
+
+bool LLFindWearables::operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item)
+{
+ if(item)
+ {
+ if((item->getType() == LLAssetType::AT_CLOTHING)
+ || (item->getType() == LLAssetType::AT_BODYPART))
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+///----------------------------------------------------------------------------
+/// LLAssetIDMatches
+///----------------------------------------------------------------------------
+bool LLAssetIDMatches::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
+{
+ return (item && item->getAssetUUID() == mAssetID);
+}
+
+///----------------------------------------------------------------------------
+/// LLLinkedItemIDMatches
+///----------------------------------------------------------------------------
+bool LLLinkedItemIDMatches::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
+{
+ return (item &&
+ (item->getIsLinkType()) &&
+ (item->getLinkedUUID() == mBaseItemID)); // A linked item's assetID will be the compared-to item's itemID.
+}
+
void LLSaveFolderState::setApply(BOOL apply)
{
mApply = apply;
@@ -197,7 +409,7 @@ void LLOpenFoldersWithSelection::doFolder(LLFolderViewFolder* folder)
static void assign_clothing_bodypart_icon(EInventoryIcon &idx, U32 attachment_point)
{
- const EWearableType wearable_type = EWearableType(LLInventoryItem::II_FLAGS_WEARABLES_MASK & attachment_point);
+ const EWearableType wearable_type = EWearableType(LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK & attachment_point);
switch(wearable_type)
{
case WT_SHAPE:
@@ -352,8 +564,7 @@ BOOL get_is_item_worn(const LLUUID& id)
{
case LLAssetType::AT_OBJECT:
{
- const LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject();
- if(my_avatar && my_avatar->isWearingAttachment(item->getLinkedUUID()))
+ if (isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item->getLinkedUUID()))
return TRUE;
break;
}
@@ -363,7 +574,7 @@ BOOL get_is_item_worn(const LLUUID& id)
return TRUE;
break;
case LLAssetType::AT_GESTURE:
- if (LLGestureManager::instance().isGestureActive(item->getLinkedUUID()))
+ if (LLGestureMgr::instance().isGestureActive(item->getLinkedUUID()))
return TRUE;
break;
default:
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 968db84819..e3cd988e39 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -38,14 +38,212 @@
#include "llfolderview.h"
#include "llfolderviewitem.h"
+/********************************************************************************
+ ** **
+ ** INVENTORY COLLECTOR FUNCTIONS
+ **/
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLInventoryCollectFunctor
+//
+// Base class for LLInventoryModel::collectDescendentsIf() method
+// which accepts an instance of one of these objects to use as the
+// function to determine if it should be added. Derive from this class
+// and override the () operator to return TRUE if you want to collect
+// the category or item passed in.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLInventoryCollectFunctor
+{
+public:
+ virtual ~LLInventoryCollectFunctor(){};
+ virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) = 0;
+
+ static bool itemTransferCommonlyAllowed(LLInventoryItem* item);
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLAssetIDMatches
+//
+// This functor finds inventory items pointing to the specified asset
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLViewerInventoryItem;
+
+class LLAssetIDMatches : public LLInventoryCollectFunctor
+{
+public:
+ LLAssetIDMatches(const LLUUID& asset_id) : mAssetID(asset_id) {}
+ virtual ~LLAssetIDMatches() {}
+ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item);
+
+protected:
+ LLUUID mAssetID;
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLLinkedItemIDMatches
+//
+// This functor finds inventory items linked to the specific inventory id.
+// Assumes the inventory id is itself not a linked item.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLLinkedItemIDMatches : public LLInventoryCollectFunctor
+{
+public:
+ LLLinkedItemIDMatches(const LLUUID& item_id) : mBaseItemID(item_id) {}
+ virtual ~LLLinkedItemIDMatches() {}
+ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item);
+
+protected:
+ LLUUID mBaseItemID;
+};
+
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLIsType
//
-// This is a collection of miscellaneous functions and classes
-// that don't fit cleanly into any other class header. Eventually,
-// we should figure out where to put these functions so that we can
-// get rid of this generic file.
+// Implementation of a LLInventoryCollectFunctor which returns TRUE if
+// the type is the type passed in during construction.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLIsType : public LLInventoryCollectFunctor
+{
+public:
+ LLIsType(LLAssetType::EType type) : mType(type) {}
+ virtual ~LLIsType() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+protected:
+ LLAssetType::EType mType;
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLIsNotType
//
+// Implementation of a LLInventoryCollectFunctor which returns FALSE if the
+// type is the type passed in during construction, otherwise false.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLIsNotType : public LLInventoryCollectFunctor
+{
+public:
+ LLIsNotType(LLAssetType::EType type) : mType(type) {}
+ virtual ~LLIsNotType() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+protected:
+ LLAssetType::EType mType;
+};
+
+class LLIsTypeWithPermissions : public LLInventoryCollectFunctor
+{
+public:
+ LLIsTypeWithPermissions(LLAssetType::EType type, const PermissionBit perms, const LLUUID &agent_id, const LLUUID &group_id)
+ : mType(type), mPerm(perms), mAgentID(agent_id), mGroupID(group_id) {}
+ virtual ~LLIsTypeWithPermissions() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+protected:
+ LLAssetType::EType mType;
+ PermissionBit mPerm;
+ LLUUID mAgentID;
+ LLUUID mGroupID;
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLBuddyCollector
+//
+// Simple class that collects calling cards that are not null, and not
+// the agent. Duplicates are possible.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLBuddyCollector : public LLInventoryCollectFunctor
+{
+public:
+ LLBuddyCollector() {}
+ virtual ~LLBuddyCollector() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLUniqueBuddyCollector
+//
+// Simple class that collects calling cards that are not null, and not
+// the agent. Duplicates are discarded.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLUniqueBuddyCollector : public LLInventoryCollectFunctor
+{
+public:
+ LLUniqueBuddyCollector() {}
+ virtual ~LLUniqueBuddyCollector() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+
+protected:
+ std::set<LLUUID> mSeen;
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLParticularBuddyCollector
+//
+// Simple class that collects calling cards that match a particular uuid
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLParticularBuddyCollector : public LLInventoryCollectFunctor
+{
+public:
+ LLParticularBuddyCollector(const LLUUID& id) : mBuddyID(id) {}
+ virtual ~LLParticularBuddyCollector() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+protected:
+ LLUUID mBuddyID;
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLNameCategoryCollector
+//
+// Collects categories based on case-insensitive match of prefix
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLNameCategoryCollector : public LLInventoryCollectFunctor
+{
+public:
+ LLNameCategoryCollector(const std::string& name) : mName(name) {}
+ virtual ~LLNameCategoryCollector() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+protected:
+ std::string mName;
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLFindCOFValidItems
+//
+// Collects items that can be legitimately linked to in the COF.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLFindCOFValidItems : public LLInventoryCollectFunctor
+{
+public:
+ LLFindCOFValidItems() {}
+ virtual ~LLFindCOFValidItems() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLFindWearables
+//
+// Collects wearables based on item type.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLFindWearables : public LLInventoryCollectFunctor
+{
+public:
+ LLFindWearables() {}
+ virtual ~LLFindWearables() {}
+ virtual bool operator()(LLInventoryCategory* cat,
+ LLInventoryItem* item);
+};
+
+/** Inventory Collector Functions
+ ** **
+ *******************************************************************************/
class LLInventoryState
{
@@ -64,7 +262,7 @@ public:
virtual void doItem(LLFolderViewItem* item);
BOOL wasItemSelected() { return mItemSelected; }
protected:
- BOOL mItemSelected;
+ BOOL mItemSelected;
};
class LLOpenFilteredFolders : public LLFolderViewFunctor
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 326f2a5577..6452ae82f8 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -57,32 +57,16 @@
#include "process.h"
#endif
-BOOL LLInventoryModel::sBackgroundFetchActive = FALSE;
-BOOL LLInventoryModel::sAllFoldersFetched = FALSE;
-BOOL LLInventoryModel::sMyInventoryFetchStarted = FALSE;
-BOOL LLInventoryModel::sLibraryFetchStarted = FALSE;
-S32 LLInventoryModel::sNumFetchRetries = 0;
-F32 LLInventoryModel::sMinTimeBetweenFetches = 0.3f;
-F32 LLInventoryModel::sMaxTimeBetweenFetches = 10.f;
-BOOL LLInventoryModel::sTimelyFetchPending = FALSE;
-LLFrameTimer LLInventoryModel::sFetchTimer;
-S16 LLInventoryModel::sBulkFetchCount = 0;
-BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE;
-
// Increment this if the inventory contents change in a non-backwards-compatible way.
// For viewer 2, the addition of link items makes a pre-viewer-2 cache incorrect.
const S32 LLInventoryModel::sCurrentInvCacheVersion = 2;
-
-// RN: for some reason, using std::queue in the header file confuses the compiler which things it's an xmlrpc_queue
-static std::deque<LLUUID> sFetchQueue;
+BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE;
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
//BOOL decompress_file(const char* src_filename, const char* dst_filename);
-const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f;
-const S32 MAX_FETCH_RETRIES = 10;
const char CACHE_FORMAT_STRING[] = "%s.inv";
struct InventoryIDPtrLess
@@ -1342,545 +1326,9 @@ bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id)
//{
// known_descendents += items->count();
//}
- return cat->fetchDescendents();
-}
-
-//Initialize statics.
-bool LLInventoryModel::isBulkFetchProcessingComplete()
-{
- return sFetchQueue.empty() && sBulkFetchCount<=0;
-}
-
-class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder
-{
- public:
- LLInventoryModelFetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
- //LLInventoryModelFetchDescendentsResponder() {};
- void result(const LLSD& content);
- void error(U32 status, const std::string& reason);
- public:
- typedef std::vector<LLViewerInventoryCategory*> folder_ref_t;
- protected:
- LLSD mRequestSD;
-};
-
-//If we get back a normal response, handle it here
-void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
-{
- if (content.has("folders"))
- {
-
- for(LLSD::array_const_iterator folder_it = content["folders"].beginArray();
- folder_it != content["folders"].endArray();
- ++folder_it)
- {
- LLSD folder_sd = *folder_it;
-
-
- //LLUUID agent_id = folder_sd["agent_id"];
-
- //if(agent_id != gAgent.getID()) //This should never happen.
- //{
- // llwarns << "Got a UpdateInventoryItem for the wrong agent."
- // << llendl;
- // break;
- //}
-
- LLUUID parent_id = folder_sd["folder_id"];
- LLUUID owner_id = folder_sd["owner_id"];
- S32 version = (S32)folder_sd["version"].asInteger();
- S32 descendents = (S32)folder_sd["descendents"].asInteger();
- LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
-
- if (parent_id.isNull())
- {
- LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
- for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray();
- item_it != folder_sd["items"].endArray();
- ++item_it)
- {
- const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
- if (lost_uuid.notNull())
- {
- LLSD item = *item_it;
- titem->unpackMessage(item);
-
- LLInventoryModel::update_list_t update;
- LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1);
- update.push_back(new_folder);
- gInventory.accountForUpdate(update);
-
- titem->setParent(lost_uuid);
- titem->updateParentOnServer(FALSE);
- gInventory.updateItem(titem);
- gInventory.notifyObservers("fetchDescendents");
-
- }
- }
- }
-
- LLViewerInventoryCategory* pcat = gInventory.getCategory(parent_id);
- if (!pcat)
- {
- continue;
- }
-
- for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray();
- category_it != folder_sd["categories"].endArray();
- ++category_it)
- {
- LLSD category = *category_it;
- tcategory->fromLLSD(category);
-
- if (LLInventoryModel::sMyInventoryFetchStarted ||
- LLInventoryModel::sLibraryFetchStarted)
- {
- sFetchQueue.push_back(tcategory->getUUID());
- }
- else if ( !gInventory.isCategoryComplete(tcategory->getUUID()) )
- {
- gInventory.updateCategory(tcategory);
- }
-
- }
- LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
- for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray();
- item_it != folder_sd["items"].endArray();
- ++item_it)
- {
- LLSD item = *item_it;
- titem->unpackMessage(item);
-
- gInventory.updateItem(titem);
- }
-
- // set version and descendentcount according to message.
- LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id);
- if(cat)
- {
- cat->setVersion(version);
- cat->setDescendentCount(descendents);
- cat->determineFolderType();
- }
-
- }
- }
-
- if (content.has("bad_folders"))
- {
- for(LLSD::array_const_iterator folder_it = content["bad_folders"].beginArray();
- folder_it != content["bad_folders"].endArray();
- ++folder_it)
- {
- LLSD folder_sd = *folder_it;
-
- //These folders failed on the dataserver. We probably don't want to retry them.
- llinfos << "Folder " << folder_sd["folder_id"].asString()
- << "Error: " << folder_sd["error"].asString() << llendl;
- }
- }
-
- LLInventoryModel::incrBulkFetch(-1);
-
- if (LLInventoryModel::isBulkFetchProcessingComplete())
- {
- llinfos << "Inventory fetch completed" << llendl;
- LLInventoryModel::setAllFoldersFetched();
- }
-
- gInventory.notifyObservers("fetchDescendents");
-}
-
-//If we get back an error (not found, etc...), handle it here
-void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::string& reason)
-{
- llinfos << "LLInventoryModelFetchDescendentsResponder::error "
- << status << ": " << reason << llendl;
-
- LLInventoryModel::incrBulkFetch(-1);
-
- if (status==499) //timed out. Let's be awesome!
- {
- for(LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray();
- folder_it != mRequestSD["folders"].endArray();
- ++folder_it)
- {
- LLSD folder_sd = *folder_it;
- LLUUID folder_id = folder_sd["folder_id"];
- sFetchQueue.push_front(folder_id);
- }
- }
- else
- {
- if (LLInventoryModel::isBulkFetchProcessingComplete())
- {
- LLInventoryModel::setAllFoldersFetched();
- }
- }
- gInventory.notifyObservers("fetchDescendents");
-}
-
-//static Bundle up a bunch of requests to send all at once.
-void LLInventoryModel::bulkFetch(std::string url)
-{
- //Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped.
- //If there are items in sFetchQueue, we want to check the time since the last bulkFetch was
- //sent. If it exceeds our retry time, go ahead and fire off another batch.
- //Stopbackgroundfetch will be run from the Responder instead of here.
-
- S16 max_concurrent_fetches=8;
- F32 new_min_time = 0.5f; //HACK! Clean this up when old code goes away entirely.
- if (sMinTimeBetweenFetches < new_min_time) sMinTimeBetweenFetches=new_min_time; //HACK! See above.
-
- if(gDisconnected
- || sBulkFetchCount > max_concurrent_fetches
- || sFetchTimer.getElapsedTimeF32() < sMinTimeBetweenFetches)
- {
- return; // just bail if we are disconnected.
- }
-
- U32 folder_count=0;
- U32 max_batch_size=5;
-
- U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1;
-
- LLSD body;
- LLSD body_lib;
- while( !(sFetchQueue.empty() ) && (folder_count < max_batch_size) )
- {
- if (sFetchQueue.front().isNull()) //DEV-17797
- {
- LLSD folder_sd;
- folder_sd["folder_id"] = LLUUID::null.asString();
- folder_sd["owner_id"] = gAgent.getID();
- folder_sd["sort_order"] = (LLSD::Integer)sort_order;
- folder_sd["fetch_folders"] = (LLSD::Boolean)FALSE;
- folder_sd["fetch_items"] = (LLSD::Boolean)TRUE;
- body["folders"].append(folder_sd);
- folder_count++;
- }
- else
- {
-
-
- LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front());
-
- if (cat)
- {
- if ( LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
- {
- LLSD folder_sd;
- folder_sd["folder_id"] = cat->getUUID();
- folder_sd["owner_id"] = cat->getOwnerID();
- folder_sd["sort_order"] = (LLSD::Integer)sort_order;
- folder_sd["fetch_folders"] = TRUE; //(LLSD::Boolean)sFullFetchStarted;
- folder_sd["fetch_items"] = (LLSD::Boolean)TRUE;
-
- if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID())
- body_lib["folders"].append(folder_sd);
- else
- body["folders"].append(folder_sd);
- folder_count++;
- }
- if (sMyInventoryFetchStarted ||
- sLibraryFetchStarted)
- { //Already have this folder but append child folders to list.
- // add all children to queue
- parent_cat_map_t::iterator cat_it = gInventory.mParentChildCategoryTree.find(cat->getUUID());
- if (cat_it != gInventory.mParentChildCategoryTree.end())
- {
- cat_array_t* child_categories = cat_it->second;
-
- for (S32 child_num = 0; child_num < child_categories->count(); child_num++)
- {
- sFetchQueue.push_back(child_categories->get(child_num)->getUUID());
- }
- }
-
- }
- }
- }
- sFetchQueue.pop_front();
- }
-
- if (folder_count > 0)
- {
- sBulkFetchCount++;
- if (body["folders"].size())
- {
- LLHTTPClient::post(url, body, new LLInventoryModelFetchDescendentsResponder(body),300.0);
- }
- if (body_lib["folders"].size())
- {
- std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents");
- LLHTTPClient::post(url_lib, body_lib, new LLInventoryModelFetchDescendentsResponder(body_lib),300.0);
- }
- sFetchTimer.reset();
- }
- else if (isBulkFetchProcessingComplete())
- {
- setAllFoldersFetched();
- }
-}
-
-bool fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id)
-{
- for (std::deque<LLUUID>::iterator it = sFetchQueue.begin();
- it != sFetchQueue.end(); ++it)
- {
- const LLUUID& fetch_id = *it;
- if (gInventory.isObjectDescendentOf(fetch_id, cat_id))
- return false;
- }
- return true;
-}
-
-/* static */
-bool LLInventoryModel::libraryFetchStarted()
-{
- return sLibraryFetchStarted;
-}
-
-/* static */
-bool LLInventoryModel::libraryFetchCompleted()
-{
- return libraryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getLibraryRootFolderID());
-}
-
-/* static */
-bool LLInventoryModel::libraryFetchInProgress()
-{
- return libraryFetchStarted() && !libraryFetchCompleted();
-}
-
-/* static */
-bool LLInventoryModel::myInventoryFetchStarted()
-{
- return sMyInventoryFetchStarted;
+ return cat->fetch();
}
-/* static */
-bool LLInventoryModel::myInventoryFetchCompleted()
-{
- return myInventoryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getRootFolderID());
-}
-
-/* static */
-bool LLInventoryModel::myInventoryFetchInProgress()
-{
- return myInventoryFetchStarted() && !myInventoryFetchCompleted();
-}
-
-// static
-bool LLInventoryModel::isEverythingFetched()
-{
- return sAllFoldersFetched;
-}
-
-//static
-BOOL LLInventoryModel::backgroundFetchActive()
-{
- return sBackgroundFetchActive;
-}
-
-void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id)
-{
- if (!sAllFoldersFetched)
- {
- sBackgroundFetchActive = TRUE;
- if (cat_id.isNull())
- {
- if (!sMyInventoryFetchStarted)
- {
- sMyInventoryFetchStarted = TRUE;
- sFetchQueue.push_back(gInventory.getRootFolderID());
- gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL);
- }
- if (!sLibraryFetchStarted)
- {
- sLibraryFetchStarted = TRUE;
- sFetchQueue.push_back(gInventory.getLibraryRootFolderID());
- gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL);
- }
- }
- else
- {
- // specific folder requests go to front of queue
- if (sFetchQueue.empty() || sFetchQueue.front() != cat_id)
- {
- sFetchQueue.push_front(cat_id);
- gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL);
- }
- if (cat_id == gInventory.getLibraryRootFolderID())
- {
- sLibraryFetchStarted = TRUE;
- }
- if (cat_id == gInventory.getRootFolderID())
- {
- sMyInventoryFetchStarted = TRUE;
- }
- }
- }
-}
-
-//static
-void LLInventoryModel::findLostItems()
-{
- sBackgroundFetchActive = TRUE;
- sFetchQueue.push_back(LLUUID::null);
- gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL);
-}
-
-//static
-void LLInventoryModel::stopBackgroundFetch()
-{
- if (sBackgroundFetchActive)
- {
- sBackgroundFetchActive = FALSE;
- gIdleCallbacks.deleteFunction(&LLInventoryModel::backgroundFetch, NULL);
- sBulkFetchCount=0;
- sMinTimeBetweenFetches=0.0f;
- }
-}
-
-// static
-void LLInventoryModel::setAllFoldersFetched()
-{
- if (sMyInventoryFetchStarted &&
- sLibraryFetchStarted)
- {
- sAllFoldersFetched = TRUE;
- }
- stopBackgroundFetch();
-}
-
-//static
-void LLInventoryModel::backgroundFetch(void*)
-{
- if (sBackgroundFetchActive && gAgent.getRegion())
- {
- //If we'll be using the capability, we'll be sending batches and the background thing isn't as important.
- std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
- if (!url.empty())
- {
- bulkFetch(url);
- return;
- }
-
- //DEPRECATED OLD CODE FOLLOWS.
- // no more categories to fetch, stop fetch process
- if (sFetchQueue.empty())
- {
- llinfos << "Inventory fetch completed" << llendl;
-
- setAllFoldersFetched();
- return;
- }
-
- F32 fast_fetch_time = lerp(sMinTimeBetweenFetches, sMaxTimeBetweenFetches, 0.1f);
- F32 slow_fetch_time = lerp(sMinTimeBetweenFetches, sMaxTimeBetweenFetches, 0.5f);
- if (sTimelyFetchPending && sFetchTimer.getElapsedTimeF32() > slow_fetch_time)
- {
- // double timeouts on failure
- sMinTimeBetweenFetches = llmin(sMinTimeBetweenFetches * 2.f, 10.f);
- sMaxTimeBetweenFetches = llmin(sMaxTimeBetweenFetches * 2.f, 120.f);
- llinfos << "Inventory fetch times grown to (" << sMinTimeBetweenFetches << ", " << sMaxTimeBetweenFetches << ")" << llendl;
- // fetch is no longer considered "timely" although we will wait for full time-out
- sTimelyFetchPending = FALSE;
- }
-
- while(1)
- {
- if (sFetchQueue.empty())
- {
- break;
- }
-
- if(gDisconnected)
- {
- // just bail if we are disconnected.
- break;
- }
-
- LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front());
-
- // category has been deleted, remove from queue.
- if (!cat)
- {
- sFetchQueue.pop_front();
- continue;
- }
-
- if (sFetchTimer.getElapsedTimeF32() > sMinTimeBetweenFetches &&
- LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
- {
- // category exists but has no children yet, fetch the descendants
- // for now, just request every time and rely on retry timer to throttle
- if (cat->fetchDescendents())
- {
- sFetchTimer.reset();
- sTimelyFetchPending = TRUE;
- }
- else
- {
- // The catagory also tracks if it has expired and here it says it hasn't
- // yet. Get out of here because nothing is going to happen until we
- // update the timers.
- break;
- }
- }
- // do I have all my children?
- else if (gInventory.isCategoryComplete(sFetchQueue.front()))
- {
- // finished with this category, remove from queue
- sFetchQueue.pop_front();
-
- // add all children to queue
- parent_cat_map_t::iterator cat_it = gInventory.mParentChildCategoryTree.find(cat->getUUID());
- if (cat_it != gInventory.mParentChildCategoryTree.end())
- {
- cat_array_t* child_categories = cat_it->second;
-
- for (S32 child_num = 0; child_num < child_categories->count(); child_num++)
- {
- sFetchQueue.push_back(child_categories->get(child_num)->getUUID());
- }
- }
-
- // we received a response in less than the fast time
- if (sTimelyFetchPending && sFetchTimer.getElapsedTimeF32() < fast_fetch_time)
- {
- // shrink timeouts based on success
- sMinTimeBetweenFetches = llmax(sMinTimeBetweenFetches * 0.8f, 0.3f);
- sMaxTimeBetweenFetches = llmax(sMaxTimeBetweenFetches * 0.8f, 10.f);
- //llinfos << "Inventory fetch times shrunk to (" << sMinTimeBetweenFetches << ", " << sMaxTimeBetweenFetches << ")" << llendl;
- }
-
- sTimelyFetchPending = FALSE;
- continue;
- }
- else if (sFetchTimer.getElapsedTimeF32() > sMaxTimeBetweenFetches)
- {
- // received first packet, but our num descendants does not match db's num descendants
- // so try again later
- LLUUID fetch_id = sFetchQueue.front();
- sFetchQueue.pop_front();
-
- if (sNumFetchRetries++ < MAX_FETCH_RETRIES)
- {
- // push on back of queue
- sFetchQueue.push_back(fetch_id);
- }
- sTimelyFetchPending = FALSE;
- sFetchTimer.reset();
- break;
- }
-
- // not enough time has elapsed to do a new fetch
- break;
- }
- }
-}
void LLInventoryModel::cache(
const LLUUID& parent_folder_id,
@@ -2595,7 +2043,7 @@ void LLInventoryModel::buildParentChildMap()
}
count = items.count();
lost = 0;
- std::vector<LLUUID> lost_item_ids;
+ uuid_vec_t lost_item_ids;
for(i = 0; i < count; ++i)
{
LLPointer<LLViewerInventoryItem> item;
@@ -2634,7 +2082,7 @@ void LLInventoryModel::buildParentChildMap()
LLMessageSystem* msg = gMessageSystem;
BOOL start_new_message = TRUE;
const LLUUID lnf = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
- for(std::vector<LLUUID>::iterator it = lost_item_ids.begin() ; it < lost_item_ids.end(); ++it)
+ for(uuid_vec_t::iterator it = lost_item_ids.begin() ; it < lost_item_ids.end(); ++it)
{
if(start_new_message)
{
@@ -3094,7 +2542,7 @@ void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
return;
}
S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
- std::vector<LLUUID> item_ids;
+ uuid_vec_t item_ids;
update_map_t update;
for(S32 i = 0; i < count; ++i)
{
@@ -3110,7 +2558,7 @@ void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
}
}
gInventory.accountForUpdate(update);
- for(std::vector<LLUUID>::iterator it = item_ids.begin(); it != item_ids.end(); ++it)
+ for(uuid_vec_t::iterator it = item_ids.begin(); it != item_ids.end(); ++it)
{
gInventory.deleteObject(*it);
}
@@ -3190,7 +2638,7 @@ void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg,
<< llendl;
return;
}
- std::vector<LLUUID> folder_ids;
+ uuid_vec_t folder_ids;
update_map_t update;
S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
for(S32 i = 0; i < count; ++i)
@@ -3204,7 +2652,7 @@ void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg,
}
}
gInventory.accountForUpdate(update);
- for(std::vector<LLUUID>::iterator it = folder_ids.begin(); it != folder_ids.end(); ++it)
+ for(uuid_vec_t::iterator it = folder_ids.begin(); it != folder_ids.end(); ++it)
{
gInventory.deleteObject(*it);
}
@@ -3317,7 +2765,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
count = msg->getNumberOfBlocksFast(_PREHASH_ItemData);
- std::vector<LLUUID> wearable_ids;
+ uuid_vec_t wearable_ids;
item_array_t items;
std::list<InventoryCallbackInfo> cblist;
for(i = 0; i < count; ++i)
@@ -3764,207 +3212,6 @@ void LLInventoryModel::dumpInventory() const
}
///----------------------------------------------------------------------------
-/// LLInventoryCollectFunctor implementations
-///----------------------------------------------------------------------------
-
-// static
-bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* item)
-{
- if (!item)
- return false;
-
- bool allowed = false;
- LLVOAvatarSelf* my_avatar = NULL;
-
- switch(item->getType())
- {
- case LLAssetType::AT_CALLINGCARD:
- // not allowed
- break;
-
- case LLAssetType::AT_OBJECT:
- my_avatar = gAgent.getAvatarObject();
- if(my_avatar && !my_avatar->isWearingAttachment(item->getUUID()))
- {
- allowed = true;
- }
- break;
-
- case LLAssetType::AT_BODYPART:
- case LLAssetType::AT_CLOTHING:
- if(!gAgentWearables.isWearingItem(item->getUUID()))
- {
- allowed = true;
- }
- break;
-
- default:
- allowed = true;
- break;
- }
-
- return allowed;
-}
-
-bool LLIsType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
-{
- if(mType == LLAssetType::AT_CATEGORY)
- {
- if(cat) return TRUE;
- }
- if(item)
- {
- if(item->getType() == mType) return TRUE;
- }
- return FALSE;
-}
-
-bool LLIsNotType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
-{
- if(mType == LLAssetType::AT_CATEGORY)
- {
- if(cat) return FALSE;
- }
- if(item)
- {
- if(item->getType() == mType) return FALSE;
- else return TRUE;
- }
- return TRUE;
-}
-
-bool LLIsTypeWithPermissions::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
-{
- if(mType == LLAssetType::AT_CATEGORY)
- {
- if(cat)
- {
- return TRUE;
- }
- }
- if(item)
- {
- if(item->getType() == mType)
- {
- LLPermissions perm = item->getPermissions();
- if ((perm.getMaskBase() & mPerm) == mPerm)
- {
- return TRUE;
- }
- }
- }
- return FALSE;
-}
-
-
-//bool LLIsClone::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
-//{
-// if(cat) return FALSE;
-// if(item)
-// {
-// if(mItemMap->getType() == LLAssetType::AT_CALLINGCARD)
-// {
-// if((item->getType() == LLAssetType::AT_CALLINGCARD)
-// && !(item->getCreatorUUID().isNull())
-// && (item->getCreatorUUID() == mItemMap->getCreatorUUID()))
-// {
-// return TRUE;
-// }
-// }
-// else
-// {
-// if((item->getType() == mItemMap->getType())
-// && !(item->getAssetUUID().isNull())
-// && (item->getAssetUUID() == mItemMap->getAssetUUID())
-// && (item->getName() == mItemMap->getName()))
-// {
-// return TRUE;
-// }
-// }
-// }
-// return FALSE;
-//}
-
-bool LLBuddyCollector::operator()(LLInventoryCategory* cat,
- LLInventoryItem* item)
-{
- if(item)
- {
- if((LLAssetType::AT_CALLINGCARD == item->getType())
- && (!item->getCreatorUUID().isNull())
- && (item->getCreatorUUID() != gAgent.getID()))
- {
- return true;
- }
- }
- return false;
-}
-
-
-bool LLUniqueBuddyCollector::operator()(LLInventoryCategory* cat,
- LLInventoryItem* item)
-{
- if(item)
- {
- if((LLAssetType::AT_CALLINGCARD == item->getType())
- && (item->getCreatorUUID().notNull())
- && (item->getCreatorUUID() != gAgent.getID()))
- {
- mSeen.insert(item->getCreatorUUID());
- return true;
- }
- }
- return false;
-}
-
-
-bool LLParticularBuddyCollector::operator()(LLInventoryCategory* cat,
- LLInventoryItem* item)
-{
- if(item)
- {
- if((LLAssetType::AT_CALLINGCARD == item->getType())
- && (item->getCreatorUUID() == mBuddyID))
- {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-
-bool LLNameCategoryCollector::operator()(
- LLInventoryCategory* cat, LLInventoryItem* item)
-{
- if(cat)
- {
- if (!LLStringUtil::compareInsensitive(mName, cat->getName()))
- {
- return true;
- }
- }
- return false;
-}
-
-///----------------------------------------------------------------------------
-/// LLAssetIDMatches
-///----------------------------------------------------------------------------
-bool LLAssetIDMatches::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
-{
- return (item && item->getAssetUUID() == mAssetID);
-}
-
-///----------------------------------------------------------------------------
-/// LLLinkedItemIDMatches
-///----------------------------------------------------------------------------
-bool LLLinkedItemIDMatches::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
-{
- return (item &&
- (item->getIsLinkType()) &&
- (item->getLinkedUUID() == mBaseItemID)); // A linked item's assetID will be the compared-to item's itemID.
-}
-
-///----------------------------------------------------------------------------
/// Local function definitions
///----------------------------------------------------------------------------
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 2a2b48ce3c..b7c1b57397 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -81,7 +81,6 @@ public:
CHILDREN_MAYBE
};
- // These are used a lot...
typedef LLDynamicArray<LLPointer<LLViewerInventoryCategory> > cat_array_t;
typedef LLDynamicArray<LLPointer<LLViewerInventoryItem> > item_array_t;
typedef std::set<LLUUID> changed_items_t;
@@ -368,8 +367,6 @@ public:
// Utility Functions
void removeItem(const LLUUID& item_id);
- static void findLostItems();
-
// Data about the agent's root folder and root library folder
// are stored here, rather than in LLAgent where it used to be, because
// gInventory is a singleton and represents the agent's inventory.
@@ -501,12 +498,6 @@ private:
LLUUID mLibraryRootFolderID;
LLUUID mLibraryOwnerID;
- static BOOL sTimelyFetchPending;
- static S32 sNumFetchRetries;
- static LLFrameTimer sFetchTimer;
- static F32 sMinTimeBetweenFetches;
- static F32 sMaxTimeBetweenFetches;
-
// Expected inventory cache version
const static S32 sCurrentInvCacheVersion;
@@ -532,41 +523,6 @@ public:
// *NOTE: DEBUG functionality
void dumpInventory() const;
-
- ////////////////////////////////////////////////////////////////////////////////
- // Bulk fetch
-public:
- // Start and stop background breadth-first fetching of inventory contents.
- // This gets triggered when performing a filter-search
- void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null);
- static BOOL backgroundFetchActive();
- static bool isEverythingFetched();
- static void backgroundFetch(void*); // background fetch idle function
- static void incrBulkFetch(S16 fetching) { sBulkFetchCount+=fetching; if (sBulkFetchCount<0) sBulkFetchCount=0; }
- static void stopBackgroundFetch(); // stop fetch process
- static bool isBulkFetchProcessingComplete();
-
- // Add categories to a list to be fetched in bulk.
- static void bulkFetch(std::string url);
-
- static bool libraryFetchStarted();
- static bool libraryFetchCompleted();
- static bool libraryFetchInProgress();
-
- static bool myInventoryFetchStarted();
- static bool myInventoryFetchCompleted();
- static bool myInventoryFetchInProgress();
-
-private:
- static BOOL sMyInventoryFetchStarted;
- static BOOL sLibraryFetchStarted;
- static BOOL sAllFoldersFetched;
- static void setAllFoldersFetched();
-
- // completing the fetch once per session should be sufficient
- static BOOL sBackgroundFetchActive;
- static S16 sBulkFetchCount;
-
////////////////////////////////////////////////////////////////////////////////
// Login status
public:
@@ -578,234 +534,5 @@ private:
// a special inventory model for the agent
extern LLInventoryModel gInventory;
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLInventoryCollectFunctor
-//
-// Base class for LLInventoryModel::collectDescendentsIf() method
-// which accepts an instance of one of these objects to use as the
-// function to determine if it should be added. Derive from this class
-// and override the () operator to return TRUE if you want to collect
-// the category or item passed in.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-class LLInventoryCollectFunctor
-{
-public:
- virtual ~LLInventoryCollectFunctor(){};
- virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) = 0;
-
- static bool itemTransferCommonlyAllowed(LLInventoryItem* item);
-};
-
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLAssetIDMatches
-//
-// This functor finds inventory items pointing to the specified asset
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLViewerInventoryItem;
-
-class LLAssetIDMatches : public LLInventoryCollectFunctor
-{
-public:
- LLAssetIDMatches(const LLUUID& asset_id) : mAssetID(asset_id) {}
- virtual ~LLAssetIDMatches() {}
- bool operator()(LLInventoryCategory* cat, LLInventoryItem* item);
-
-protected:
- LLUUID mAssetID;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLLinkedItemIDMatches
-//
-// This functor finds inventory items linked to the specific inventory id.
-// Assumes the inventory id is itself not a linked item.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLLinkedItemIDMatches : public LLInventoryCollectFunctor
-{
-public:
- LLLinkedItemIDMatches(const LLUUID& item_id) : mBaseItemID(item_id) {}
- virtual ~LLLinkedItemIDMatches() {}
- bool operator()(LLInventoryCategory* cat, LLInventoryItem* item);
-
-protected:
- LLUUID mBaseItemID;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLIsType
-//
-// Implementation of a LLInventoryCollectFunctor which returns TRUE if
-// the type is the type passed in during construction.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-class LLIsType : public LLInventoryCollectFunctor
-{
-public:
- LLIsType(LLAssetType::EType type) : mType(type) {}
- virtual ~LLIsType() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-protected:
- LLAssetType::EType mType;
-};
-
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLIsNotType
-//
-// Implementation of a LLInventoryCollectFunctor which returns FALSE if the
-// type is the type passed in during construction, otherwise false.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-class LLIsNotType : public LLInventoryCollectFunctor
-{
-public:
- LLIsNotType(LLAssetType::EType type) : mType(type) {}
- virtual ~LLIsNotType() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-protected:
- LLAssetType::EType mType;
-};
-
-class LLIsTypeWithPermissions : public LLInventoryCollectFunctor
-{
-public:
- LLIsTypeWithPermissions(LLAssetType::EType type, const PermissionBit perms, const LLUUID &agent_id, const LLUUID &group_id)
- : mType(type), mPerm(perms), mAgentID(agent_id), mGroupID(group_id) {}
- virtual ~LLIsTypeWithPermissions() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-protected:
- LLAssetType::EType mType;
- PermissionBit mPerm;
- LLUUID mAgentID;
- LLUUID mGroupID;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLIsClone
-//
-// Implementation of a LLInventoryCollectFunctor which returns TRUE if
-// the object is a clone of the item passed in during
-// construction.
-//
-// *NOTE: Since clone information is determined based off of asset id
-// (or creator with calling cards), if the id is NULL, it has no
-// clones - even itself.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-//class LLIsClone : public LLInventoryCollectFunctor
-//{
-//public:
-// LLIsClone(LLViewerInventoryItem* item) : mItem(item) {}
-// virtual ~LLIsClone() {}
-// virtual bool operator()(LLViewerInventoryCategory* cat,
-// LLViewerInventoryItem* item);
-//protected:
-// LLPointer<LLViewerInventoryItem> mItem;
-//};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLBuddyCollector
-//
-// Simple class that collects calling cards that are not null, and not
-// the agent. Duplicates are possible.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-class LLBuddyCollector : public LLInventoryCollectFunctor
-{
-public:
- LLBuddyCollector() {}
- virtual ~LLBuddyCollector() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLUniqueBuddyCollector
-//
-// Simple class that collects calling cards that are not null, and not
-// the agent. Duplicates are discarded.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-class LLUniqueBuddyCollector : public LLInventoryCollectFunctor
-{
-public:
- LLUniqueBuddyCollector() {}
- virtual ~LLUniqueBuddyCollector() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-
-protected:
- std::set<LLUUID> mSeen;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLParticularBuddyCollector
-//
-// Simple class that collects calling cards that match a particular uuid
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-class LLParticularBuddyCollector : public LLInventoryCollectFunctor
-{
-public:
- LLParticularBuddyCollector(const LLUUID& id) : mBuddyID(id) {}
- virtual ~LLParticularBuddyCollector() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-protected:
- LLUUID mBuddyID;
-};
-
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLNameCategoryCollector
-//
-// Collects categories based on case-insensitive match of prefix
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-class LLNameCategoryCollector : public LLInventoryCollectFunctor
-{
-public:
- LLNameCategoryCollector(const std::string& name) : mName(name) {}
- virtual ~LLNameCategoryCollector() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-protected:
- std::string mName;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLFindCOFValidItems
-//
-// Collects items that can be legitimately linked to in the COF.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLFindCOFValidItems : public LLInventoryCollectFunctor
-{
-public:
- LLFindCOFValidItems() {}
- virtual ~LLFindCOFValidItems() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLFindWearables
-//
-// Collects wearables based on item type.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLFindWearables : public LLInventoryCollectFunctor
-{
-public:
- LLFindWearables() {}
- virtual ~LLFindWearables() {}
- virtual bool operator()(LLInventoryCategory* cat,
- LLInventoryItem* item);
-};
-
#endif // LL_LLINVENTORYMODEL_H
diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp
new file mode 100644
index 0000000000..cfbc2c3e05
--- /dev/null
+++ b/indra/newview/llinventorymodelbackgroundfetch.cpp
@@ -0,0 +1,603 @@
+/**
+ * @file llinventorymodel.cpp
+ * @brief Implementation of the inventory model used to track agent inventory.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ *
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llinventorymodelbackgroundfetch.h"
+
+// Seraph clean this up
+#include "llagent.h"
+#include "llinventorypanel.h"
+#include "llviewercontrol.h"
+#include "llviewermessage.h"
+#include "llviewerwindow.h"
+#include "llappviewer.h"
+#include "llviewerregion.h"
+#include "llcallbacklist.h"
+
+const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f;
+const S32 MAX_FETCH_RETRIES = 10;
+
+// RN: for some reason, using std::queue in the header file confuses the compiler which thinks it's an xmlrpc_queue
+static std::deque<LLUUID> sFetchQueue;
+bool fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id)
+{
+ for (std::deque<LLUUID>::iterator it = sFetchQueue.begin();
+ it != sFetchQueue.end(); ++it)
+ {
+ const LLUUID& fetch_id = *it;
+ if (gInventory.isObjectDescendentOf(fetch_id, cat_id))
+ return false;
+ }
+ return true;
+}
+
+
+LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch() :
+ mBackgroundFetchActive(FALSE),
+ mAllFoldersFetched(FALSE),
+ mInventoryFetchStarted(FALSE),
+ mLibraryFetchStarted(FALSE),
+ mNumFetchRetries(0),
+ mMinTimeBetweenFetches(0.3f),
+ mMaxTimeBetweenFetches(10.f),
+ mTimelyFetchPending(FALSE),
+ mBulkFetchCount(0)
+{
+}
+
+LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch()
+{
+}
+
+bool LLInventoryModelBackgroundFetch::isBulkFetchProcessingComplete()
+{
+ return sFetchQueue.empty() && mBulkFetchCount<=0;
+}
+
+bool LLInventoryModelBackgroundFetch::libraryFetchStarted()
+{
+ return mLibraryFetchStarted;
+}
+
+bool LLInventoryModelBackgroundFetch::libraryFetchCompleted()
+{
+ return libraryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getLibraryRootFolderID());
+}
+
+bool LLInventoryModelBackgroundFetch::libraryFetchInProgress()
+{
+ return libraryFetchStarted() && !libraryFetchCompleted();
+}
+
+bool LLInventoryModelBackgroundFetch::inventoryFetchStarted()
+{
+ return mInventoryFetchStarted;
+}
+
+bool LLInventoryModelBackgroundFetch::inventoryFetchCompleted()
+{
+ return inventoryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getRootFolderID());
+}
+
+bool LLInventoryModelBackgroundFetch::inventoryFetchInProgress()
+{
+ return inventoryFetchStarted() && !inventoryFetchCompleted();
+}
+
+bool LLInventoryModelBackgroundFetch::isEverythingFetched()
+{
+ return mAllFoldersFetched;
+}
+
+BOOL LLInventoryModelBackgroundFetch::backgroundFetchActive()
+{
+ return mBackgroundFetchActive;
+}
+
+void LLInventoryModelBackgroundFetch::start(const LLUUID& cat_id)
+{
+ if (!mAllFoldersFetched)
+ {
+ mBackgroundFetchActive = TRUE;
+ if (cat_id.isNull())
+ {
+ if (!mInventoryFetchStarted)
+ {
+ mInventoryFetchStarted = TRUE;
+ sFetchQueue.push_back(gInventory.getRootFolderID());
+ gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);
+ }
+ if (!mLibraryFetchStarted)
+ {
+ mLibraryFetchStarted = TRUE;
+ sFetchQueue.push_back(gInventory.getLibraryRootFolderID());
+ gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);
+ }
+ }
+ else
+ {
+ // specific folder requests go to front of queue
+ if (sFetchQueue.empty() || sFetchQueue.front() != cat_id)
+ {
+ sFetchQueue.push_front(cat_id);
+ gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);
+ }
+ if (cat_id == gInventory.getLibraryRootFolderID())
+ {
+ mLibraryFetchStarted = TRUE;
+ }
+ if (cat_id == gInventory.getRootFolderID())
+ {
+ mInventoryFetchStarted = TRUE;
+ }
+ }
+ }
+}
+
+void LLInventoryModelBackgroundFetch::findLostItems()
+{
+ mBackgroundFetchActive = TRUE;
+ sFetchQueue.push_back(LLUUID::null);
+ gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);
+}
+
+void LLInventoryModelBackgroundFetch::stopBackgroundFetch()
+{
+ if (mBackgroundFetchActive)
+ {
+ mBackgroundFetchActive = FALSE;
+ gIdleCallbacks.deleteFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);
+ mBulkFetchCount=0;
+ mMinTimeBetweenFetches=0.0f;
+ }
+}
+
+void LLInventoryModelBackgroundFetch::setAllFoldersFetched()
+{
+ if (mInventoryFetchStarted &&
+ mLibraryFetchStarted)
+ {
+ mAllFoldersFetched = TRUE;
+ }
+ stopBackgroundFetch();
+}
+
+void LLInventoryModelBackgroundFetch::backgroundFetchCB(void *)
+{
+ LLInventoryModelBackgroundFetch::instance().backgroundFetch();
+}
+
+void LLInventoryModelBackgroundFetch::backgroundFetch()
+{
+ if (mBackgroundFetchActive && gAgent.getRegion())
+ {
+ //If we'll be using the capability, we'll be sending batches and the background thing isn't as important.
+ std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
+ if (!url.empty())
+ {
+ bulkFetch(url);
+ return;
+ }
+
+ //DEPRECATED OLD CODE FOLLOWS.
+ // no more categories to fetch, stop fetch process
+ if (sFetchQueue.empty())
+ {
+ llinfos << "Inventory fetch completed" << llendl;
+
+ setAllFoldersFetched();
+ return;
+ }
+
+ F32 fast_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.1f);
+ F32 slow_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.5f);
+ if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() > slow_fetch_time)
+ {
+ // double timeouts on failure
+ mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f);
+ mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f);
+ llinfos << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
+ // fetch is no longer considered "timely" although we will wait for full time-out
+ mTimelyFetchPending = FALSE;
+ }
+
+ while(1)
+ {
+ if (sFetchQueue.empty())
+ {
+ break;
+ }
+
+ if(gDisconnected)
+ {
+ // just bail if we are disconnected.
+ break;
+ }
+
+ LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front());
+
+ // category has been deleted, remove from queue.
+ if (!cat)
+ {
+ sFetchQueue.pop_front();
+ continue;
+ }
+
+ if (mFetchTimer.getElapsedTimeF32() > mMinTimeBetweenFetches &&
+ LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
+ {
+ // category exists but has no children yet, fetch the descendants
+ // for now, just request every time and rely on retry timer to throttle
+ if (cat->fetch())
+ {
+ mFetchTimer.reset();
+ mTimelyFetchPending = TRUE;
+ }
+ else
+ {
+ // The catagory also tracks if it has expired and here it says it hasn't
+ // yet. Get out of here because nothing is going to happen until we
+ // update the timers.
+ break;
+ }
+ }
+ // do I have all my children?
+ else if (gInventory.isCategoryComplete(sFetchQueue.front()))
+ {
+ // finished with this category, remove from queue
+ sFetchQueue.pop_front();
+
+ // add all children to queue
+ LLInventoryModel::cat_array_t* categories;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items);
+ for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin();
+ it != categories->end();
+ ++it)
+ {
+ sFetchQueue.push_back((*it)->getUUID());
+ }
+
+ // we received a response in less than the fast time
+ if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() < fast_fetch_time)
+ {
+ // shrink timeouts based on success
+ mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f);
+ mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f);
+ //llinfos << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
+ }
+
+ mTimelyFetchPending = FALSE;
+ continue;
+ }
+ else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches)
+ {
+ // received first packet, but our num descendants does not match db's num descendants
+ // so try again later
+ LLUUID fetch_id = sFetchQueue.front();
+ sFetchQueue.pop_front();
+
+ if (mNumFetchRetries++ < MAX_FETCH_RETRIES)
+ {
+ // push on back of queue
+ sFetchQueue.push_back(fetch_id);
+ }
+ mTimelyFetchPending = FALSE;
+ mFetchTimer.reset();
+ break;
+ }
+
+ // not enough time has elapsed to do a new fetch
+ break;
+ }
+ }
+}
+
+void LLInventoryModelBackgroundFetch::incrBulkFetch(S16 fetching)
+{
+ mBulkFetchCount += fetching;
+ if (mBulkFetchCount < 0)
+ {
+ mBulkFetchCount = 0;
+ }
+}
+
+
+class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder
+{
+ public:
+ LLInventoryModelFetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
+ //LLInventoryModelFetchDescendentsResponder() {};
+ void result(const LLSD& content);
+ void error(U32 status, const std::string& reason);
+ public:
+ typedef std::vector<LLViewerInventoryCategory*> folder_ref_t;
+ protected:
+ LLSD mRequestSD;
+};
+
+//If we get back a normal response, handle it here
+void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
+{
+ if (content.has("folders"))
+ {
+
+ for(LLSD::array_const_iterator folder_it = content["folders"].beginArray();
+ folder_it != content["folders"].endArray();
+ ++folder_it)
+ {
+ LLSD folder_sd = *folder_it;
+
+
+ //LLUUID agent_id = folder_sd["agent_id"];
+
+ //if(agent_id != gAgent.getID()) //This should never happen.
+ //{
+ // llwarns << "Got a UpdateInventoryItem for the wrong agent."
+ // << llendl;
+ // break;
+ //}
+
+ LLUUID parent_id = folder_sd["folder_id"];
+ LLUUID owner_id = folder_sd["owner_id"];
+ S32 version = (S32)folder_sd["version"].asInteger();
+ S32 descendents = (S32)folder_sd["descendents"].asInteger();
+ LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
+
+ if (parent_id.isNull())
+ {
+ LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
+ for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray();
+ item_it != folder_sd["items"].endArray();
+ ++item_it)
+ {
+ const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
+ if (lost_uuid.notNull())
+ {
+ LLSD item = *item_it;
+ titem->unpackMessage(item);
+
+ LLInventoryModel::update_list_t update;
+ LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1);
+ update.push_back(new_folder);
+ gInventory.accountForUpdate(update);
+
+ titem->setParent(lost_uuid);
+ titem->updateParentOnServer(FALSE);
+ gInventory.updateItem(titem);
+ gInventory.notifyObservers("fetchDescendents");
+
+ }
+ }
+ }
+
+ LLViewerInventoryCategory* pcat = gInventory.getCategory(parent_id);
+ if (!pcat)
+ {
+ continue;
+ }
+
+ for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray();
+ category_it != folder_sd["categories"].endArray();
+ ++category_it)
+ {
+ LLSD category = *category_it;
+ tcategory->fromLLSD(category);
+
+ if (LLInventoryModelBackgroundFetch::instance().inventoryFetchStarted() ||
+ LLInventoryModelBackgroundFetch::instance().libraryFetchStarted())
+ {
+ sFetchQueue.push_back(tcategory->getUUID());
+ }
+ else if ( !gInventory.isCategoryComplete(tcategory->getUUID()) )
+ {
+ gInventory.updateCategory(tcategory);
+ }
+
+ }
+ LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
+ for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray();
+ item_it != folder_sd["items"].endArray();
+ ++item_it)
+ {
+ LLSD item = *item_it;
+ titem->unpackMessage(item);
+
+ gInventory.updateItem(titem);
+ }
+
+ // set version and descendentcount according to message.
+ LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id);
+ if(cat)
+ {
+ cat->setVersion(version);
+ cat->setDescendentCount(descendents);
+ cat->determineFolderType();
+ }
+
+ }
+ }
+
+ if (content.has("bad_folders"))
+ {
+ for(LLSD::array_const_iterator folder_it = content["bad_folders"].beginArray();
+ folder_it != content["bad_folders"].endArray();
+ ++folder_it)
+ {
+ LLSD folder_sd = *folder_it;
+
+ //These folders failed on the dataserver. We probably don't want to retry them.
+ llinfos << "Folder " << folder_sd["folder_id"].asString()
+ << "Error: " << folder_sd["error"].asString() << llendl;
+ }
+ }
+
+ LLInventoryModelBackgroundFetch::instance().incrBulkFetch(-1);
+
+ if (LLInventoryModelBackgroundFetch::instance().isBulkFetchProcessingComplete())
+ {
+ llinfos << "Inventory fetch completed" << llendl;
+ LLInventoryModelBackgroundFetch::instance().setAllFoldersFetched();
+ }
+
+ gInventory.notifyObservers("fetchDescendents");
+}
+
+//If we get back an error (not found, etc...), handle it here
+void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::string& reason)
+{
+ llinfos << "LLInventoryModelFetchDescendentsResponder::error "
+ << status << ": " << reason << llendl;
+
+ LLInventoryModelBackgroundFetch::instance().incrBulkFetch(-1);
+
+ if (status==499) //timed out. Let's be awesome!
+ {
+ for(LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray();
+ folder_it != mRequestSD["folders"].endArray();
+ ++folder_it)
+ {
+ LLSD folder_sd = *folder_it;
+ LLUUID folder_id = folder_sd["folder_id"];
+ sFetchQueue.push_front(folder_id);
+ }
+ }
+ else
+ {
+ if (LLInventoryModelBackgroundFetch::instance().isBulkFetchProcessingComplete())
+ {
+ LLInventoryModelBackgroundFetch::instance().setAllFoldersFetched();
+ }
+ }
+ gInventory.notifyObservers("fetchDescendents");
+}
+
+//static Bundle up a bunch of requests to send all at once.
+void LLInventoryModelBackgroundFetch::bulkFetch(std::string url)
+{
+ //Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped.
+ //If there are items in sFetchQueue, we want to check the time since the last bulkFetch was
+ //sent. If it exceeds our retry time, go ahead and fire off another batch.
+ //Stopbackgroundfetch will be run from the Responder instead of here.
+
+ S16 max_concurrent_fetches=8;
+ F32 new_min_time = 0.5f; //HACK! Clean this up when old code goes away entirely.
+ if (mMinTimeBetweenFetches < new_min_time)
+ {
+ mMinTimeBetweenFetches=new_min_time; //HACK! See above.
+ }
+
+ if (gDisconnected ||
+ (mBulkFetchCount > max_concurrent_fetches) ||
+ (mFetchTimer.getElapsedTimeF32() < mMinTimeBetweenFetches))
+ {
+ return; // just bail if we are disconnected.
+ }
+
+ U32 folder_count=0;
+ U32 max_batch_size=5;
+
+ U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1;
+
+ LLSD body;
+ LLSD body_lib;
+ while (!(sFetchQueue.empty()) && (folder_count < max_batch_size))
+ {
+ if (sFetchQueue.front().isNull()) //DEV-17797
+ {
+ LLSD folder_sd;
+ folder_sd["folder_id"] = LLUUID::null.asString();
+ folder_sd["owner_id"] = gAgent.getID();
+ folder_sd["sort_order"] = (LLSD::Integer)sort_order;
+ folder_sd["fetch_folders"] = (LLSD::Boolean)FALSE;
+ folder_sd["fetch_items"] = (LLSD::Boolean)TRUE;
+ body["folders"].append(folder_sd);
+ folder_count++;
+ }
+ else
+ {
+ LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front());
+
+ if (cat)
+ {
+ if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
+ {
+ LLSD folder_sd;
+ folder_sd["folder_id"] = cat->getUUID();
+ folder_sd["owner_id"] = cat->getOwnerID();
+ folder_sd["sort_order"] = (LLSD::Integer)sort_order;
+ folder_sd["fetch_folders"] = TRUE; //(LLSD::Boolean)sFullFetchStarted;
+ folder_sd["fetch_items"] = (LLSD::Boolean)TRUE;
+
+ if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID())
+ body_lib["folders"].append(folder_sd);
+ else
+ body["folders"].append(folder_sd);
+ folder_count++;
+ }
+ if (mInventoryFetchStarted || mLibraryFetchStarted)
+ { //Already have this folder but append child folders to list.
+ // add all children to queue
+ LLInventoryModel::cat_array_t* categories;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items);
+ for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin();
+ it != categories->end();
+ ++it)
+ {
+ sFetchQueue.push_back((*it)->getUUID());
+ }
+ }
+ }
+ }
+ sFetchQueue.pop_front();
+ }
+
+ if (folder_count > 0)
+ {
+ mBulkFetchCount++;
+ if (body["folders"].size())
+ {
+ LLHTTPClient::post(url, body, new LLInventoryModelFetchDescendentsResponder(body),300.0);
+ }
+ if (body_lib["folders"].size())
+ {
+ std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents");
+ LLHTTPClient::post(url_lib, body_lib, new LLInventoryModelFetchDescendentsResponder(body_lib),300.0);
+ }
+ mFetchTimer.reset();
+ }
+ else if (isBulkFetchProcessingComplete())
+ {
+ setAllFoldersFetched();
+ }
+}
diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h
new file mode 100644
index 0000000000..94606fae23
--- /dev/null
+++ b/indra/newview/llinventorymodelbackgroundfetch.h
@@ -0,0 +1,119 @@
+/**
+ * @file llinventorymodelbackgroundfetch.h
+ * @brief LLInventoryModelBackgroundFetch class header file
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ *
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLINVENTORYMODELBACKGROUNDFETCH_H
+#define LL_LLINVENTORYMODELBACKGROUNDFETCH_H
+
+// Seraph clean this up
+#include "llassettype.h"
+#include "llfoldertype.h"
+#include "lldarray.h"
+#include "llframetimer.h"
+#include "llhttpclient.h"
+#include "lluuid.h"
+#include "llpermissionsflags.h"
+#include "llstring.h"
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+// Seraph clean this up
+class LLInventoryObserver;
+class LLInventoryObject;
+class LLInventoryItem;
+class LLInventoryCategory;
+class LLViewerInventoryItem;
+class LLViewerInventoryCategory;
+class LLViewerInventoryItem;
+class LLViewerInventoryCategory;
+class LLMessageSystem;
+class LLInventoryCollectFunctor;
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLInventoryModelBackgroundFetch
+//
+// This class handles background fetch.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLInventoryModelBackgroundFetch : public LLSingleton<LLInventoryModelBackgroundFetch>
+{
+public:
+ LLInventoryModelBackgroundFetch();
+ ~LLInventoryModelBackgroundFetch();
+
+ // Start and stop background breadth-first fetching of inventory contents.
+ // This gets triggered when performing a filter-search
+ void start(const LLUUID& cat_id = LLUUID::null);
+ BOOL backgroundFetchActive();
+ bool isEverythingFetched();
+ void incrBulkFetch(S16 fetching);
+ void stopBackgroundFetch(); // stop fetch process
+ bool isBulkFetchProcessingComplete();
+
+ // Add categories to a list to be fetched in bulk.
+ void bulkFetch(std::string url);
+
+ bool libraryFetchStarted();
+ bool libraryFetchCompleted();
+ bool libraryFetchInProgress();
+
+ bool inventoryFetchStarted();
+ bool inventoryFetchCompleted();
+ bool inventoryFetchInProgress();
+ void findLostItems();
+
+ void setAllFoldersFetched();
+
+ static void backgroundFetchCB(void*); // background fetch idle function
+ void backgroundFetch();
+
+private:
+ BOOL mInventoryFetchStarted;
+ BOOL mLibraryFetchStarted;
+ BOOL mAllFoldersFetched;
+
+ // completing the fetch once per session should be sufficient
+ BOOL mBackgroundFetchActive;
+ S16 mBulkFetchCount;
+ BOOL mTimelyFetchPending;
+ S32 mNumFetchRetries;
+
+ LLFrameTimer mFetchTimer;
+ F32 mMinTimeBetweenFetches;
+ F32 mMaxTimeBetweenFetches;
+
+};
+
+#endif // LL_LLINVENTORYMODELBACKGROUNDFETCH_H
+
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 2fb8aea4e9..83e1bbd5a0 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -54,7 +54,6 @@
#include "llappviewer.h"
#include "lldbstrings.h"
#include "llviewerstats.h"
-#include "llmutelist.h"
#include "llnotificationsutil.h"
#include "llcallbacklist.h"
#include "llpreview.h"
@@ -78,7 +77,7 @@ void LLInventoryCompletionObserver::changed(U32 mask)
// appropriate.
if(!mIncomplete.empty())
{
- for(item_ref_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); )
+ for(uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); )
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
if(!item)
@@ -109,6 +108,10 @@ void LLInventoryCompletionObserver::watchItem(const LLUUID& id)
}
}
+LLInventoryFetchObserver::LLInventoryFetchObserver(bool retry_if_missing) :
+ mRetryIfMissing(retry_if_missing)
+{
+}
void LLInventoryFetchObserver::changed(U32 mask)
{
@@ -116,7 +119,7 @@ void LLInventoryFetchObserver::changed(U32 mask)
// appropriate.
if(!mIncomplete.empty())
{
- for(item_ref_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); )
+ for(uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); )
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
if(!item)
@@ -220,12 +223,11 @@ void fetch_items_from_llsd(const LLSD& items_llsd)
}
}
-void LLInventoryFetchObserver::fetchItems(
- const LLInventoryFetchObserver::item_ref_t& ids)
+void LLInventoryFetchObserver::fetch(const uuid_vec_t& ids)
{
LLUUID owner_id;
LLSD items_llsd;
- for(item_ref_t::const_iterator it = ids.begin(); it < ids.end(); ++it)
+ for(uuid_vec_t::const_iterator it = ids.begin(); it < ids.end(); ++it)
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
if(item)
@@ -263,50 +265,49 @@ void LLInventoryFetchObserver::fetchItems(
// virtual
void LLInventoryFetchDescendentsObserver::changed(U32 mask)
{
- for(folder_ref_t::iterator it = mIncompleteFolders.begin(); it < mIncompleteFolders.end();)
+ for(uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end();)
{
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
if(!cat)
{
- it = mIncompleteFolders.erase(it);
+ it = mIncomplete.erase(it);
continue;
}
if(isComplete(cat))
{
- mCompleteFolders.push_back(*it);
- it = mIncompleteFolders.erase(it);
+ mComplete.push_back(*it);
+ it = mIncomplete.erase(it);
continue;
}
++it;
}
- if(mIncompleteFolders.empty())
+ if(mIncomplete.empty())
{
done();
}
}
-void LLInventoryFetchDescendentsObserver::fetchDescendents(
- const folder_ref_t& ids)
+void LLInventoryFetchDescendentsObserver::fetch(const uuid_vec_t& ids)
{
- for(folder_ref_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
+ for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
{
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
if(!cat) continue;
if(!isComplete(cat))
{
- cat->fetchDescendents(); //blindly fetch it without seeing if anything else is fetching it.
- mIncompleteFolders.push_back(*it); //Add to list of things being downloaded for this observer.
+ cat->fetch(); //blindly fetch it without seeing if anything else is fetching it.
+ mIncomplete.push_back(*it); //Add to list of things being downloaded for this observer.
}
else
{
- mCompleteFolders.push_back(*it);
+ mComplete.push_back(*it);
}
}
}
bool LLInventoryFetchDescendentsObserver::isEverythingComplete() const
{
- return mIncompleteFolders.empty();
+ return mIncomplete.empty();
}
bool LLInventoryFetchDescendentsObserver::isComplete(LLViewerInventoryCategory* cat)
@@ -356,7 +357,7 @@ void LLInventoryFetchComboObserver::changed(U32 mask)
{
if(!mIncompleteItems.empty())
{
- for(item_ref_t::iterator it = mIncompleteItems.begin(); it < mIncompleteItems.end(); )
+ for(uuid_vec_t::iterator it = mIncompleteItems.begin(); it < mIncompleteItems.end(); )
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
if(!item)
@@ -365,7 +366,7 @@ void LLInventoryFetchComboObserver::changed(U32 mask)
continue;
}
if(item->isComplete())
- {
+ {
mCompleteItems.push_back(*it);
it = mIncompleteItems.erase(it);
continue;
@@ -375,7 +376,7 @@ void LLInventoryFetchComboObserver::changed(U32 mask)
}
if(!mIncompleteFolders.empty())
{
- for(folder_ref_t::iterator it = mIncompleteFolders.begin(); it < mIncompleteFolders.end();)
+ for(uuid_vec_t::iterator it = mIncompleteFolders.begin(); it < mIncompleteFolders.end();)
{
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
if(!cat)
@@ -400,17 +401,17 @@ void LLInventoryFetchComboObserver::changed(U32 mask)
}
void LLInventoryFetchComboObserver::fetch(
- const folder_ref_t& folder_ids,
- const item_ref_t& item_ids)
+ const uuid_vec_t& folder_ids,
+ const uuid_vec_t& item_ids)
{
lldebugs << "LLInventoryFetchComboObserver::fetch()" << llendl;
- for(folder_ref_t::const_iterator fit = folder_ids.begin(); fit != folder_ids.end(); ++fit)
+ for(uuid_vec_t::const_iterator fit = folder_ids.begin(); fit != folder_ids.end(); ++fit)
{
LLViewerInventoryCategory* cat = gInventory.getCategory(*fit);
if(!cat) continue;
if(!gInventory.isCategoryComplete(*fit))
{
- cat->fetchDescendents();
+ cat->fetch();
lldebugs << "fetching folder " << *fit <<llendl;
mIncompleteFolders.push_back(*fit);
}
@@ -427,7 +428,7 @@ void LLInventoryFetchComboObserver::fetch(
// have to fetch it individually.
LLSD items_llsd;
LLUUID owner_id;
- for(item_ref_t::const_iterator iit = item_ids.begin(); iit != item_ids.end(); ++iit)
+ for(uuid_vec_t::const_iterator iit = item_ids.begin(); iit != item_ids.end(); ++iit)
{
LLViewerInventoryItem* item = gInventory.getItem(*iit);
if(!item)
@@ -476,7 +477,7 @@ void LLInventoryExistenceObserver::changed(U32 mask)
// appropriate.
if(!mMIA.empty())
{
- for(item_ref_t::iterator it = mMIA.begin(); it < mMIA.end(); )
+ for(uuid_vec_t::iterator it = mMIA.begin(); it < mMIA.end(); )
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
if(!item)
@@ -565,8 +566,8 @@ void LLInventoryTransactionObserver::changed(U32 mask)
if(id == mTransactionID)
{
// woo hoo, we found it
- folder_ref_t folders;
- item_ref_t items;
+ uuid_vec_t folders;
+ uuid_vec_t items;
S32 count;
count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
S32 i;
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index d6dded52d4..ba70552ebc 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -42,8 +42,8 @@ class LLViewerInventoryCategory;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryObserver
//
-// This class is designed to be a simple abstract base class which can
-// relay messages when the inventory changes.
+// A simple abstract base class that can relay messages when the inventory
+// changes.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLInventoryObserver
@@ -54,17 +54,17 @@ public:
// chaged() to see if the observer is interested in the change.
enum
{
- NONE = 0,
- LABEL = 1, // name changed
- INTERNAL = 2, // internal change (e.g. asset uuid different)
- ADD = 4, // something added
- REMOVE = 8, // something deleted
- STRUCTURE = 16, // structural change (eg item or folder moved)
- CALLING_CARD = 32, // (eg online, grant status, cancel)
- GESTURE = 64,
- REBUILD = 128, // item UI changed (eg item type different)
- SORT = 256, // folder needs to be resorted.
- ALL = 0xffffffff
+ NONE = 0,
+ LABEL = 1, // Name changed
+ INTERNAL = 2, // Internal change (e.g. asset uuid different)
+ ADD = 4, // Something added
+ REMOVE = 8, // Something deleted
+ STRUCTURE = 16, // Structural change (e.g. item or folder moved)
+ CALLING_CARD = 32, // Calling card change (e.g. online, grant status, cancel)
+ GESTURE = 64,
+ REBUILD = 128, // Item UI changed (e.g. item type different)
+ SORT = 256, // Folder needs to be resorted.
+ ALL = 0xffffffff
};
LLInventoryObserver();
virtual ~LLInventoryObserver();
@@ -75,11 +75,10 @@ public:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryCompletionObserver
//
-// Class which can be used as a base class for doing something when
-// when all observed items are locally complete. This class implements
-// the changed() method of LLInventoryObserver and declares a new
-// method named done() which is called when all watched items have
-// complete information in the inventory model.
+// Base class for doing something when when all observed items are locally
+// complete. Implements the changed() method of LLInventoryObserver
+// and declares a new method named done() which is called when all watched items
+// have complete information in the inventory model.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLInventoryCompletionObserver : public LLInventoryObserver
@@ -93,9 +92,8 @@ public:
protected:
virtual void done() = 0;
- typedef std::vector<LLUUID> item_ref_t;
- item_ref_t mComplete;
- item_ref_t mIncomplete;
+ uuid_vec_t mComplete;
+ uuid_vec_t mIncomplete;
};
@@ -110,19 +108,17 @@ protected:
class LLInventoryFetchObserver : public LLInventoryObserver
{
public:
- LLInventoryFetchObserver(bool retry_if_missing = false): mRetryIfMissing(retry_if_missing) {}
+ LLInventoryFetchObserver(bool retry_if_missing = false);
virtual void changed(U32 mask);
- typedef std::vector<LLUUID> item_ref_t;
-
bool isEverythingComplete() const;
- void fetchItems(const item_ref_t& ids);
+ void fetch(const uuid_vec_t& ids);
virtual void done() {};
protected:
bool mRetryIfMissing;
- item_ref_t mComplete;
- item_ref_t mIncomplete;
+ uuid_vec_t mComplete;
+ uuid_vec_t mIncomplete;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -138,15 +134,14 @@ public:
LLInventoryFetchDescendentsObserver() {}
virtual void changed(U32 mask);
- typedef std::vector<LLUUID> folder_ref_t;
- void fetchDescendents(const folder_ref_t& ids);
+ void fetch(const uuid_vec_t& ids);
bool isEverythingComplete() const;
virtual void done() = 0;
protected:
bool isComplete(LLViewerInventoryCategory* cat);
- folder_ref_t mIncompleteFolders;
- folder_ref_t mCompleteFolders;
+ uuid_vec_t mIncomplete;
+ uuid_vec_t mComplete;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -163,18 +158,16 @@ public:
LLInventoryFetchComboObserver() : mDone(false) {}
virtual void changed(U32 mask);
- typedef std::vector<LLUUID> folder_ref_t;
- typedef std::vector<LLUUID> item_ref_t;
- void fetch(const folder_ref_t& folder_ids, const item_ref_t& item_ids);
+ void fetch(const uuid_vec_t& folder_ids, const uuid_vec_t& item_ids);
virtual void done() = 0;
protected:
bool mDone;
- folder_ref_t mCompleteFolders;
- folder_ref_t mIncompleteFolders;
- item_ref_t mCompleteItems;
- item_ref_t mIncompleteItems;
+ uuid_vec_t mCompleteFolders;
+ uuid_vec_t mIncompleteFolders;
+ uuid_vec_t mCompleteItems;
+ uuid_vec_t mIncompleteItems;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -196,10 +189,8 @@ public:
protected:
virtual void done() = 0;
-
- typedef std::vector<LLUUID> item_ref_t;
- item_ref_t mExist;
- item_ref_t mMIA;
+ uuid_vec_t mExist;
+ uuid_vec_t mMIA;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -221,8 +212,7 @@ public:
protected:
virtual void done() = 0;
- typedef std::vector<LLUUID> item_ref_t;
- item_ref_t mAdded;
+ uuid_vec_t mAdded;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -242,9 +232,7 @@ public:
virtual void changed(U32 mask);
protected:
- typedef std::vector<LLUUID> folder_ref_t;
- typedef std::vector<LLUUID> item_ref_t;
- virtual void done(const folder_ref_t& folders, const item_ref_t& items) = 0;
+ virtual void done(const uuid_vec_t& folders, const uuid_vec_t& items) = 0;
LLTransactionID mTransactionID;
};
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 048ed10886..c6c2d23a4b 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -43,6 +43,8 @@
#include "llimfloater.h"
#include "llimview.h"
#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llsidepanelinventory.h"
#include "llsidetray.h"
#include "llscrollcontainer.h"
@@ -78,7 +80,7 @@ protected:
LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
LLPanel(p),
mInventoryObserver(NULL),
- mFolders(NULL),
+ mFolderRoot(NULL),
mScroller(NULL),
mSortOrderSetting(p.sort_order_setting),
mInventory(p.inventory),
@@ -118,16 +120,17 @@ BOOL LLInventoryPanel::postBuild()
0);
LLFolderView::Params p;
p.name = getName();
+ p.title = getLabel();
p.rect = folder_rect;
p.parent_panel = this;
p.tool_tip = p.name;
- mFolders = LLUICtrlFactory::create<LLFolderView>(p);
- mFolders->setAllowMultiSelect(mAllowMultiSelect);
+ mFolderRoot = LLUICtrlFactory::create<LLFolderView>(p);
+ mFolderRoot->setAllowMultiSelect(mAllowMultiSelect);
}
mCommitCallbackRegistrar.popScope();
- mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+ mFolderRoot->setCallbackRegistrar(&mCommitCallbackRegistrar);
// Scroller
{
@@ -141,9 +144,9 @@ BOOL LLInventoryPanel::postBuild()
p.tab_stop(true);
mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
addChild(mScroller);
- mScroller->addChild(mFolders);
- mFolders->setScrollContainer(mScroller);
- mFolders->addChild(mFolders->mStatusTextBox);
+ mScroller->addChild(mFolderRoot);
+ mFolderRoot->setScrollContainer(mScroller);
+ mFolderRoot->addChild(mFolderRoot->mStatusTextBox);
}
// Set up the callbacks from the inventory we're viewing, and then build everything.
@@ -166,16 +169,16 @@ BOOL LLInventoryPanel::postBuild()
{
setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
}
- mFolders->setSortOrder(getFilter()->getSortOrder());
+ mFolderRoot->setSortOrder(getFilter()->getSortOrder());
return TRUE;
}
LLInventoryPanel::~LLInventoryPanel()
{
- if (mFolders)
+ if (mFolderRoot)
{
- U32 sort_order = mFolders->getSortOrder();
+ U32 sort_order = mFolderRoot->getSortOrder();
if (mSortOrderSetting != INHERIT_SORT_ORDER)
{
gSavedSettings.setU32(mSortOrderSetting, sort_order);
@@ -191,15 +194,15 @@ LLInventoryPanel::~LLInventoryPanel()
void LLInventoryPanel::draw()
{
// Select the desired item (in case it wasn't loaded when the selection was requested)
- mFolders->updateSelection();
+ mFolderRoot->updateSelection();
LLPanel::draw();
}
LLInventoryFilter* LLInventoryPanel::getFilter()
{
- if (mFolders)
+ if (mFolderRoot)
{
- return mFolders->getFilter();
+ return mFolderRoot->getFilter();
}
return NULL;
}
@@ -227,9 +230,9 @@ void LLInventoryPanel::setSortOrder(U32 order)
getFilter()->setSortOrder(order);
if (getFilter()->isModified())
{
- mFolders->setSortOrder(order);
+ mFolderRoot->setSortOrder(order);
// try to keep selection onscreen, even if it wasn't to start with
- mFolders->scrollToShowSelection();
+ mFolderRoot->scrollToShowSelection();
}
}
@@ -274,8 +277,8 @@ void LLInventoryPanel::modelChanged(U32 mask)
{
const LLUUID& item_id = (*items_iter);
const LLInventoryObject* model_item = model->getObject(item_id);
- LLFolderViewItem* view_item = mFolders->getItemByID(item_id);
- LLFolderViewFolder* view_folder = mFolders->getFolderByID(item_id);
+ LLFolderViewItem* view_item = mFolderRoot->getItemByID(item_id);
+ LLFolderViewFolder* view_folder = mFolderRoot->getFolderByID(item_id);
//////////////////////////////
// LABEL Operation
@@ -292,9 +295,6 @@ void LLInventoryPanel::modelChanged(U32 mask)
bridge->clearDisplayName();
view_item->refresh();
-
- // Set the new tooltip with the new display name.
- view_item->setToolTip(bridge->getDisplayName());
}
}
}
@@ -353,7 +353,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
// Add the UI element for this item.
buildNewViews(item_id);
// Select any newly created object that has the auto rename at top of folder root set.
- if(mFolders->getRoot()->needsAutoRename())
+ if(mFolderRoot->getRoot()->needsAutoRename())
{
setSelection(item_id, FALSE);
}
@@ -368,7 +368,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
// model_item's parent will be NULL.
if (view_item->getRoot() != view_item->getParent())
{
- LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
+ LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolderRoot->getItemByID(model_item->getParentUUID());
// Item has been moved.
if (view_item->getParentFolder() != new_parent)
{
@@ -376,7 +376,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
{
// Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.
view_item->getParentFolder()->extractItem(view_item);
- view_item->addToFolder(new_parent, mFolders);
+ view_item->addToFolder(new_parent, mFolderRoot);
}
else
{
@@ -444,14 +444,14 @@ void LLInventoryPanel::initializeViews()
if (gAgent.isFirstLogin())
{
// Auto open the user's library
- LLFolderViewFolder* lib_folder = mFolders->getFolderByID(gInventory.getLibraryRootFolderID());
+ LLFolderViewFolder* lib_folder = mFolderRoot->getFolderByID(gInventory.getLibraryRootFolderID());
if (lib_folder)
{
lib_folder->setOpen(TRUE);
}
// Auto close the user's my inventory folder
- LLFolderViewFolder* my_inv_folder = mFolders->getFolderByID(gInventory.getRootFolderID());
+ LLFolderViewFolder* my_inv_folder = mFolderRoot->getFolderByID(gInventory.getRootFolderID());
if (my_inv_folder)
{
my_inv_folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_DOWN);
@@ -462,7 +462,7 @@ void LLInventoryPanel::initializeViews()
void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
{
// Destroy the old view for this ID so we can rebuild it.
- LLFolderViewItem* old_view = mFolders->getItemByID(id);
+ LLFolderViewItem* old_view = mFolderRoot->getItemByID(id);
if (old_view && id.notNull())
{
old_view->destroyView();
@@ -479,10 +479,10 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
if (objectp)
{
const LLUUID &parent_id = objectp->getParentUUID();
- LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolders->getItemByID(parent_id);
+ LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolderRoot->getItemByID(parent_id);
if (id == mStartFolderID)
{
- parent_folder = mFolders;
+ parent_folder = mFolderRoot;
}
else if ((mStartFolderID != LLUUID::null) && (!gInventory.isObjectDescendentOf(id, mStartFolderID)))
{
@@ -506,19 +506,19 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
objectp->getType(),
LLInventoryType::IT_CATEGORY,
this,
+ mFolderRoot,
objectp->getUUID());
-
if (new_listener)
{
LLFolderViewFolder::Params params;
params.name = new_listener->getDisplayName();
params.icon = new_listener->getIcon();
params.icon_open = new_listener->getOpenIcon();
- params.root = mFolders;
+ params.root = mFolderRoot;
params.listener = new_listener;
params.tool_tip = params.name;
LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(params);
- folderp->setItemSortOrder(mFolders->getSortOrder());
+ folderp->setItemSortOrder(mFolderRoot->getSortOrder());
itemp = folderp;
// Hide the root folder, so we can show the contents of a folder flat
@@ -542,6 +542,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
item->getActualType(),
item->getInventoryType(),
this,
+ mFolderRoot,
item->getUUID(),
item->getFlags());
@@ -552,7 +553,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
params.icon = new_listener->getIcon();
params.icon_open = new_listener->getOpenIcon();
params.creation_date = new_listener->getCreationDate();
- params.root = mFolders;
+ params.root = mFolderRoot;
params.listener = new_listener;
params.rect = LLRect (0, 0, 0, 0);
params.tool_tip = params.name;
@@ -562,7 +563,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
if (itemp)
{
- itemp->addToFolder(parent_folder, mFolders);
+ itemp->addToFolder(parent_folder, mFolderRoot);
// Don't add children of hidden folders unless this is the panel's root folder.
if (itemp->getHidden() && (id != mStartFolderID))
@@ -611,19 +612,19 @@ void LLInventoryPanel::openStartFolderOrMyInventory()
{
if (mStartFolderString != "")
{
- mFolders->openFolder(mStartFolderString);
+ mFolderRoot->openFolder(mStartFolderString);
}
else
{
// Find My Inventory folder and open it up by name
- for (LLView *child = mFolders->getFirstChild(); child; child = mFolders->findNextSibling(child))
+ for (LLView *child = mFolderRoot->getFirstChild(); child; child = mFolderRoot->findNextSibling(child))
{
LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
if (fchild && fchild->getListener() &&
(fchild->getListener()->getUUID() == gInventory.getRootFolderID()))
{
const std::string& child_name = child->getName();
- mFolders->openFolder(child_name);
+ mFolderRoot->openFolder(child_name);
break;
}
}
@@ -632,7 +633,7 @@ void LLInventoryPanel::openStartFolderOrMyInventory()
void LLInventoryPanel::openSelected()
{
- LLFolderViewItem* folder_item = mFolders->getCurSelectedItem();
+ LLFolderViewItem* folder_item = mFolderRoot->getCurSelectedItem();
if(!folder_item) return;
LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
if(!bridge) return;
@@ -645,7 +646,7 @@ BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
if(handled)
{
ECursorType cursor = getWindow()->getCursor();
- if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
+ if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
{
// replace arrow cursor with arrow and hourglass cursor
getWindow()->setCursor(UI_CURSOR_WORKING);
@@ -668,23 +669,38 @@ BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
// If folder view is empty the (x, y) point won't be in its rect
// so the handler must be called explicitly.
- if (!mFolders->hasVisibleChildren())
+ if (!mFolderRoot->hasVisibleChildren())
{
- handled = mFolders->handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+ handled = mFolderRoot->handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
}
if (handled)
{
- mFolders->setDragAndDropThisFrame();
+ mFolderRoot->setDragAndDropThisFrame();
}
return handled;
}
+// virtual
+void LLInventoryPanel::onMouseEnter(S32 x, S32 y, MASK mask)
+{
+ LLPanel::onMouseEnter(x, y, mask);
+ // don't auto-scroll a list when cursor is over Inventory. See EXT-3981.
+ mFolderRoot->setEnableScroll(false);
+}
+
+// virtual
+void LLInventoryPanel::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ LLPanel::onMouseLeave(x, y, mask);
+ mFolderRoot->setEnableScroll(true);
+}
+
void LLInventoryPanel::onFocusLost()
{
// inventory no longer handles cut/copy/paste/delete
- if (LLEditMenuHandler::gEditMenuHandler == mFolders)
+ if (LLEditMenuHandler::gEditMenuHandler == mFolderRoot)
{
LLEditMenuHandler::gEditMenuHandler = NULL;
}
@@ -695,39 +711,39 @@ void LLInventoryPanel::onFocusLost()
void LLInventoryPanel::onFocusReceived()
{
// inventory now handles cut/copy/paste/delete
- LLEditMenuHandler::gEditMenuHandler = mFolders;
+ LLEditMenuHandler::gEditMenuHandler = mFolderRoot;
LLPanel::onFocusReceived();
}
void LLInventoryPanel::openAllFolders()
{
- mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
- mFolders->arrangeAll();
+ mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+ mFolderRoot->arrangeAll();
}
void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus)
{
// Don't select objects in COF (e.g. to prevent refocus when items are worn).
const LLInventoryObject *obj = gInventory.getObject(obj_id);
- if (obj && obj->getParentUUID() == LLAppearanceManager::instance().getCOF())
+ if (obj && obj->getParentUUID() == LLAppearanceMgr::instance().getCOF())
{
return;
}
- mFolders->setSelectionByID(obj_id, take_keyboard_focus);
+ mFolderRoot->setSelectionByID(obj_id, take_keyboard_focus);
}
void LLInventoryPanel::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)
{
- if (mFolders)
+ if (mFolderRoot)
{
- mFolders->setSelectCallback(cb);
+ mFolderRoot->setSelectCallback(cb);
}
}
void LLInventoryPanel::clearSelection()
{
- mFolders->clearSelection();
+ mFolderRoot->clearSelection();
}
void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
@@ -746,18 +762,18 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it
void LLInventoryPanel::doToSelected(const LLSD& userdata)
{
- mFolders->doToSelected(&gInventory, userdata);
+ mFolderRoot->doToSelected(&gInventory, userdata);
}
void LLInventoryPanel::doCreate(const LLSD& userdata)
{
- menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata);
+ menu_create_inventory_item(mFolderRoot, LLFolderBridge::sSelf, userdata);
}
bool LLInventoryPanel::beginIMSession()
{
std::set<LLUUID> selected_items;
- mFolders->getSelectionList(selected_items);
+ mFolderRoot->getSelectionList(selected_items);
std::string name;
static int session_num = 1;
@@ -770,7 +786,7 @@ bool LLInventoryPanel::beginIMSession()
{
LLUUID item = *iter;
- LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+ LLFolderViewItem* folder_item = mFolderRoot->getItemByID(item);
if(folder_item)
{
@@ -812,7 +828,7 @@ bool LLInventoryPanel::beginIMSession()
}
else
{
- LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+ LLFolderViewItem* folder_item = mFolderRoot->getItemByID(item);
if(!folder_item) return true;
LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
@@ -855,13 +871,12 @@ bool LLInventoryPanel::beginIMSession()
bool LLInventoryPanel::attachObject(const LLSD& userdata)
{
std::set<LLUUID> selected_items;
- mFolders->getSelectionList(selected_items);
+ mFolderRoot->getSelectionList(selected_items);
std::string joint_name = userdata.asString();
- LLVOAvatar *avatarp = static_cast<LLVOAvatar*>(gAgent.getAvatarObject());
LLViewerJointAttachment* attachmentp = NULL;
- for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
- iter != avatarp->mAttachmentPoints.end(); )
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
@@ -913,7 +928,7 @@ BOOL LLInventoryPanel::getSinceLogoff()
void LLInventoryPanel::dumpSelectionInformation(void* user_data)
{
LLInventoryPanel* iv = (LLInventoryPanel*)user_data;
- iv->mFolders->dumpSelectionInformation();
+ iv->mFolderRoot->dumpSelectionInformation();
}
BOOL is_inventorysp_active()
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index f312b588b9..160a3d6f23 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -65,10 +65,6 @@ class LLInventoryPanel : public LLPanel
// Data
//--------------------------------------------------------------------
public:
- static const std::string DEFAULT_SORT_ORDER;
- static const std::string RECENTITEMS_SORT_ORDER;
- static const std::string INHERIT_SORT_ORDER;
-
struct Filter : public LLInitParam::Block<Filter>
{
Optional<U32> sort_order;
@@ -122,6 +118,10 @@ public:
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg);
+
+ void onMouseEnter(S32 x, S32 y, MASK mask);
+ void onMouseLeave(S32 x, S32 y, MASK mask);
+
// LLUICtrl methods
/*virtual*/ void onFocusLost();
/*virtual*/ void onFocusReceived();
@@ -133,23 +133,21 @@ public:
void clearSelection();
LLInventoryFilter* getFilter();
void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT);
- U32 getFilterObjectTypes() const { return mFolders->getFilterObjectTypes(); }
+ U32 getFilterObjectTypes() const { return mFolderRoot->getFilterObjectTypes(); }
void setFilterPermMask(PermissionMask filter_perm_mask);
- U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); }
+ U32 getFilterPermMask() const { return mFolderRoot->getFilterPermissions(); }
void setFilterSubString(const std::string& string);
- const std::string getFilterSubString() { return mFolders->getFilterSubString(); }
- void setSortOrder(U32 order);
- U32 getSortOrder() { return mFolders->getSortOrder(); }
+ const std::string getFilterSubString() { return mFolderRoot->getFilterSubString(); }
void setSinceLogoff(BOOL sl);
void setHoursAgo(U32 hours);
BOOL getSinceLogoff();
void setShowFolderState(LLInventoryFilter::EFolderShow show);
LLInventoryFilter::EFolderShow getShowFolderState();
- void setAllowMultiSelect(BOOL allow) { mFolders->setAllowMultiSelect(allow); }
+ void setAllowMultiSelect(BOOL allow) { mFolderRoot->setAllowMultiSelect(allow); }
// This method is called when something has changed about the inventory.
void modelChanged(U32 mask);
- LLFolderView* getRootFolder() { return mFolders; }
+ LLFolderView* getRootFolder() { return mFolderRoot; }
LLScrollContainer* getScrollableContainer() { return mScroller; }
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
@@ -164,7 +162,7 @@ public:
static void dumpSelectionInformation(void* user_data);
void openSelected();
- void unSelectAll() { mFolders->setSelection(NULL, FALSE, FALSE); }
+ void unSelectAll() { mFolderRoot->setSelection(NULL, FALSE, FALSE); }
static void onIdle(void* user_data);
@@ -178,9 +176,8 @@ protected:
LLInventoryModel* mInventory;
LLInventoryObserver* mInventoryObserver;
BOOL mAllowMultiSelect;
- std::string mSortOrderSetting;
- LLFolderView* mFolders;
+ LLFolderView* mFolderRoot;
LLScrollContainer* mScroller;
/**
@@ -192,6 +189,20 @@ protected:
*/
const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder;
+
+ //--------------------------------------------------------------------
+ // Sorting
+ //--------------------------------------------------------------------
+public:
+ static const std::string DEFAULT_SORT_ORDER;
+ static const std::string RECENTITEMS_SORT_ORDER;
+ static const std::string INHERIT_SORT_ORDER;
+
+ void setSortOrder(U32 order);
+ U32 getSortOrder() const { return mFolderRoot->getSortOrder(); }
+private:
+ std::string mSortOrderSetting;
+
//--------------------------------------------------------------------
// Hidden folders
//--------------------------------------------------------------------
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index 2cc5c8335d..9e1dc3a4b0 100644
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -42,6 +42,7 @@
// Project includes
#include "llui.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewertexture.h"
#include "llviewertexturelist.h"
#include "llviewerwindow.h"
@@ -482,25 +483,25 @@ void LLJoystickCameraRotate::onHeldDown()
// left-right rotation
if (dx > mHorizSlopNear)
{
- gAgent.unlockView();
- gAgent.setOrbitLeftKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitLeftKey(getOrbitRate());
}
else if (dx < -mHorizSlopNear)
{
- gAgent.unlockView();
- gAgent.setOrbitRightKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitRightKey(getOrbitRate());
}
// over/under rotation
if (dy > mVertSlopNear)
{
- gAgent.unlockView();
- gAgent.setOrbitUpKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitUpKey(getOrbitRate());
}
else if (dy < -mVertSlopNear)
{
- gAgent.unlockView();
- gAgent.setOrbitDownKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitDownKey(getOrbitRate());
}
}
@@ -625,25 +626,25 @@ void LLJoystickCameraTrack::onHeldDown()
if (dx > mVertSlopNear)
{
- gAgent.unlockView();
- gAgent.setPanRightKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanRightKey(getOrbitRate());
}
else if (dx < -mVertSlopNear)
{
- gAgent.unlockView();
- gAgent.setPanLeftKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanLeftKey(getOrbitRate());
}
// over/under rotation
if (dy > mVertSlopNear)
{
- gAgent.unlockView();
- gAgent.setPanUpKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanUpKey(getOrbitRate());
}
else if (dy < -mVertSlopNear)
{
- gAgent.unlockView();
- gAgent.setPanDownKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanDownKey(getOrbitRate());
}
}
@@ -692,26 +693,26 @@ void LLJoystickCameraZoom::onHeldDown()
if (dy > mVertSlopFar)
{
// Zoom in fast
- gAgent.unlockView();
- gAgent.setOrbitInKey(FAST_RATE);
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitInKey(FAST_RATE);
}
else if (dy > mVertSlopNear)
{
// Zoom in slow
- gAgent.unlockView();
- gAgent.setOrbitInKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitInKey(getOrbitRate());
}
else if (dy < -mVertSlopFar)
{
// Zoom out fast
- gAgent.unlockView();
- gAgent.setOrbitOutKey(FAST_RATE);
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitOutKey(FAST_RATE);
}
else if (dy < -mVertSlopNear)
{
// Zoom out slow
- gAgent.unlockView();
- gAgent.setOrbitOutKey(getOrbitRate());
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitOutKey(getOrbitRate());
}
}
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index f25d2ef574..7336efb62a 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -36,6 +36,7 @@
#include "roles_constants.h"
#include "llinventory.h"
+#include "llinventoryfunctions.h"
#include "lllandmark.h"
#include "llparcel.h"
#include "llregionhandle.h"
diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp
index df93930d33..7906d9b20f 100644
--- a/indra/newview/lllocationhistory.cpp
+++ b/indra/newview/lllocationhistory.cpp
@@ -63,6 +63,7 @@ void LLLocationHistory::addItem(const LLLocationHistoryItem& item) {
mItems.erase(mItems.begin(), mItems.end()-max_items);
}
llassert((S32)mItems.size() <= max_items);
+ mChangedSignal(ADD);
}
/*
@@ -87,9 +88,10 @@ bool LLLocationHistory::touchItem(const LLLocationHistoryItem& item) {
void LLLocationHistory::removeItems()
{
mItems.clear();
+ mChangedSignal(CLEAR);
}
-bool LLLocationHistory::getMatchingItems(std::string substring, location_list_t& result) const
+bool LLLocationHistory::getMatchingItems(const std::string& substring, location_list_t& result) const
{
// *TODO: an STL algorithm would look nicer
result.clear();
@@ -160,7 +162,7 @@ void LLLocationHistory::load()
return;
}
- removeItems();
+ mItems.clear();// need to use a direct call of clear() method to avoid signal invocation
// add each line in the file to the list
std::string line;
@@ -179,5 +181,5 @@ void LLLocationHistory::load()
file.close();
- mLoadedSignal();
+ mChangedSignal(LOAD);
}
diff --git a/indra/newview/lllocationhistory.h b/indra/newview/lllocationhistory.h
index 65f0dd2e1b..fb71fbaa0f 100644
--- a/indra/newview/lllocationhistory.h
+++ b/indra/newview/lllocationhistory.h
@@ -111,9 +111,16 @@ class LLLocationHistory: public LLSingleton<LLLocationHistory>
LOG_CLASS(LLLocationHistory);
public:
+ enum EChangeType
+ {
+ ADD
+ ,CLEAR
+ ,LOAD
+ };
+
typedef std::vector<LLLocationHistoryItem> location_list_t;
- typedef boost::function<void()> loaded_callback_t;
- typedef boost::signals2::signal<void()> loaded_signal_t;
+ typedef boost::function<void(EChangeType event)> history_changed_callback_t;
+ typedef boost::signals2::signal<void(EChangeType event)> history_changed_signal_t;
LLLocationHistory();
@@ -122,8 +129,8 @@ public:
void removeItems();
size_t getItemCount() const { return mItems.size(); }
const location_list_t& getItems() const { return mItems; }
- bool getMatchingItems(std::string substring, location_list_t& result) const;
- boost::signals2::connection setLoadedCallback(loaded_callback_t cb) { return mLoadedSignal.connect(cb); }
+ bool getMatchingItems(const std::string& substring, location_list_t& result) const;
+ boost::signals2::connection setChangedCallback(history_changed_callback_t cb) { return mChangedSignal.connect(cb); }
void save() const;
void load();
@@ -133,7 +140,7 @@ private:
location_list_t mItems;
std::string mFilename; /// File to store the history to.
- loaded_signal_t mLoadedSignal;
+ history_changed_signal_t mChangedSignal;
};
#endif
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 04c684b240..4e0be81f62 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -52,7 +52,6 @@
#include "llinventoryobserver.h"
#include "lllandmarkactions.h"
#include "lllandmarklist.h"
-#include "lllocationhistory.h"
#include "llteleporthistory.h"
#include "llsidetray.h"
#include "llslurl.h"
@@ -109,7 +108,7 @@ public:
private:
/*virtual*/ void done()
{
- std::vector<LLUUID>::const_iterator it = mAdded.begin(), end = mAdded.end();
+ uuid_vec_t::const_iterator it = mAdded.begin(), end = mAdded.end();
for(; it != end; ++it)
{
LLInventoryItem* item = gInventory.getItem(*it);
@@ -228,7 +227,6 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
params.default_text(LLStringUtil::null);
params.max_length_bytes(p.max_chars);
params.keystroke_callback(boost::bind(&LLComboBox::onTextEntry, this, _1));
- params.handle_edit_keys_directly(true);
params.commit_on_focus_lost(false);
params.follows.flags(FOLLOWS_ALL);
mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params);
@@ -377,9 +375,10 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
// - Update the location string on parcel change.
mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
boost::bind(&LLLocationInputCtrl::onAgentParcelChange, this));
-
- mLocationHistoryConnection = LLLocationHistory::getInstance()->setLoadedCallback(
- boost::bind(&LLLocationInputCtrl::onLocationHistoryLoaded, this));
+ // LLLocationHistory instance is being created before the location input control, so we have to update initial state of button manually.
+ mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0);
+ mLocationHistoryConnection = LLLocationHistory::getInstance()->setChangedCallback(
+ boost::bind(&LLLocationInputCtrl::onLocationHistoryChanged, this,_1));
mRemoveLandmarkObserver = new LLRemoveLandmarkObserver(this);
mAddLandmarkObserver = new LLAddLandmarkObserver(this);
@@ -391,8 +390,8 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
mAddLandmarkTooltip = LLTrans::getString("LocationCtrlAddLandmarkTooltip");
mEditLandmarkTooltip = LLTrans::getString("LocationCtrlEditLandmarkTooltip");
- getChild<LLView>("Location History")->setToolTip(LLTrans::getString("LocationCtrlComboBtnTooltip"));
- getChild<LLView>("Place Information")->setToolTip(LLTrans::getString("LocationCtrlInfoBtnTooltip"));
+ mButton->setToolTip(LLTrans::getString("LocationCtrlComboBtnTooltip"));
+ mInfoBtn->setToolTip(LLTrans::getString("LocationCtrlInfoBtnTooltip"));
}
LLLocationInputCtrl::~LLLocationInputCtrl()
@@ -473,6 +472,7 @@ BOOL LLLocationInputCtrl::handleKeyHere(KEY key, MASK mask)
void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor)
{
KEY key = gKeyboard->currentKey();
+ MASK mask = gKeyboard->currentMask(TRUE);
if (line_editor->getText().empty())
{
@@ -480,7 +480,7 @@ void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor)
hideList();
}
// Typing? (moving cursor should not affect showing the list)
- else if (key != KEY_LEFT && key != KEY_RIGHT && key != KEY_HOME && key != KEY_END)
+ else if (mask != MASK_CONTROL && key != KEY_LEFT && key != KEY_RIGHT && key != KEY_HOME && key != KEY_END)
{
prearrangeList(line_editor->getText());
if (mList->getItemCount() != 0)
@@ -576,7 +576,7 @@ void LLLocationInputCtrl::reshape(S32 width, S32 height, BOOL called_from_parent
if (isHumanReadableLocationVisible)
{
- positionMaturityIcon();
+ refreshMaturityIcon();
}
}
@@ -619,9 +619,13 @@ void LLLocationInputCtrl::onLandmarkLoaded(LLLandmark* lm)
updateAddLandmarkButton();
}
-void LLLocationInputCtrl::onLocationHistoryLoaded()
+void LLLocationInputCtrl::onLocationHistoryChanged(LLLocationHistory::EChangeType event)
{
- rebuildLocationHistory();
+ if(event == LLLocationHistory::LOAD)
+ {
+ rebuildLocationHistory();
+ }
+ mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0);
}
void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data)
@@ -732,32 +736,7 @@ void LLLocationInputCtrl::refreshLocation()
setText(location_name);
isHumanReadableLocationVisible = true;
- // Updating maturity rating icon.
- LLViewerRegion* region = gAgent.getRegion();
- if (!region)
- return;
-
- U8 sim_access = region->getSimAccess();
- switch(sim_access)
- {
- case SIM_ACCESS_PG:
- mMaturityIcon->setValue(mIconMaturityGeneral->getName());
- mMaturityIcon->setVisible(TRUE);
- break;
-
- case SIM_ACCESS_ADULT:
- mMaturityIcon->setValue(mIconMaturityAdult->getName());
- mMaturityIcon->setVisible(TRUE);
- break;
-
- default:
- mMaturityIcon->setVisible(FALSE);
- }
-
- if (mMaturityIcon->getVisible())
- {
- positionMaturityIcon();
- }
+ refreshMaturityIcon();
}
// returns new right edge
@@ -779,15 +758,19 @@ void LLLocationInputCtrl::refreshParcelIcons()
// Our "cursor" moving right to left
S32 x = mAddLandmarkBtn->getRect().mLeft;
- if (gSavedSettings.getBOOL("NavBarShowParcelProperties"))
- {
- LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
+ LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
+
+ LLViewerRegion* agent_region = gAgent.getRegion();
+ LLParcel* agent_parcel = vpm->getAgentParcel();
+ if (!agent_region || !agent_parcel)
+ return;
+
+ mForSaleBtn->setVisible(vpm->canAgentBuyParcel(agent_parcel, false));
- LLViewerRegion* agent_region = gAgent.getRegion();
- LLParcel* agent_parcel = vpm->getAgentParcel();
- if (!agent_region || !agent_parcel)
- return;
+ x = layout_widget(mForSaleBtn, x);
+ if (gSavedSettings.getBOOL("NavBarShowParcelProperties"))
+ {
LLParcel* current_parcel;
LLViewerRegion* selection_region = vpm->getSelectionRegion();
LLParcel* selected_parcel = vpm->getParcelSelection()->getParcel();
@@ -807,7 +790,6 @@ void LLLocationInputCtrl::refreshParcelIcons()
current_parcel = agent_parcel;
}
- bool allow_buy = vpm->canAgentBuyParcel(current_parcel, false);
bool allow_voice = vpm->allowAgentVoice(agent_region, current_parcel);
bool allow_fly = vpm->allowAgentFly(agent_region, current_parcel);
bool allow_push = vpm->allowAgentPush(agent_region, current_parcel);
@@ -816,7 +798,6 @@ void LLLocationInputCtrl::refreshParcelIcons()
bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel);
// Most icons are "block this ability"
- mForSaleBtn->setVisible(allow_buy);
mParcelIcon[VOICE_ICON]->setVisible( !allow_voice );
mParcelIcon[FLY_ICON]->setVisible( !allow_fly );
mParcelIcon[PUSH_ICON]->setVisible( !allow_push );
@@ -824,11 +805,10 @@ void LLLocationInputCtrl::refreshParcelIcons()
mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage );
mDamageText->setVisible(allow_damage);
-
- x = layout_widget(mForSaleBtn, x);
+
// Padding goes to left of both landmark star and for sale btn
x -= mAddLandmarkHPad;
-
+
// Slide the parcel icons rect from right to left, adjusting rectangles
for (S32 i = 0; i < ICON_COUNT; ++i)
{
@@ -840,7 +820,6 @@ void LLLocationInputCtrl::refreshParcelIcons()
}
else
{
- mForSaleBtn->setVisible(false);
for (S32 i = 0; i < ICON_COUNT; ++i)
{
mParcelIcon[i]->setVisible(false);
@@ -873,6 +852,36 @@ void LLLocationInputCtrl::refreshHealth()
}
}
+void LLLocationInputCtrl::refreshMaturityIcon()
+{
+ // Updating maturity rating icon.
+ LLViewerRegion* region = gAgent.getRegion();
+ if (!region)
+ return;
+
+ U8 sim_access = region->getSimAccess();
+ switch(sim_access)
+ {
+ case SIM_ACCESS_PG:
+ mMaturityIcon->setValue(mIconMaturityGeneral->getName());
+ mMaturityIcon->setVisible(TRUE);
+ break;
+
+ case SIM_ACCESS_ADULT:
+ mMaturityIcon->setValue(mIconMaturityAdult->getName());
+ mMaturityIcon->setVisible(TRUE);
+ break;
+
+ default:
+ mMaturityIcon->setVisible(FALSE);
+ }
+
+ if (mMaturityIcon->getVisible())
+ {
+ positionMaturityIcon();
+ }
+}
+
void LLLocationInputCtrl::positionMaturityIcon()
{
const LLFontGL* font = mTextEntry->getFont();
@@ -892,7 +901,7 @@ void LLLocationInputCtrl::positionMaturityIcon()
mMaturityIcon->setVisible(rect.mRight < mTextEntry->getRect().getWidth() - right_pad);
}
-void LLLocationInputCtrl::rebuildLocationHistory(std::string filter)
+void LLLocationInputCtrl::rebuildLocationHistory(const std::string& filter)
{
LLLocationHistory::location_list_t filtered_items;
const LLLocationHistory::location_list_t* itemsp = NULL;
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index 4bb41f3bf4..f790140f07 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -36,6 +36,7 @@
#include "llcombobox.h"
#include "lliconctrl.h" // Params
#include "lltextbox.h" // Params
+#include "lllocationhistory.h"
class LLLandmark;
@@ -135,9 +136,10 @@ private:
void refreshParcelIcons();
// Refresh the value in the health percentage text field
void refreshHealth();
+ void refreshMaturityIcon();
void positionMaturityIcon();
- void rebuildLocationHistory(std::string filter = "");
+ void rebuildLocationHistory(const std::string& filter = LLStringUtil::null);
bool findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
void setText(const LLStringExplicit& text);
void updateAddLandmarkButton();
@@ -147,7 +149,7 @@ private:
void changeLocationPresentation();
void onInfoButtonClicked();
- void onLocationHistoryLoaded();
+ void onLocationHistoryChanged(LLLocationHistory::EChangeType event);
void onLocationPrearrange(const LLSD& data);
void onTextEditorRightClicked(S32 x, S32 y, MASK mask);
void onLandmarkLoaded(LLLandmark* lm);
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 16b13d9218..be8b2363ad 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -46,7 +46,17 @@
#include <boost/regex.hpp>
#include <boost/regex/v4/match_results.hpp>
+#if LL_MSVC
+// disable warning about boost::lexical_cast unreachable code
+// when it fails to parse the string
+#pragma warning (disable:4702)
+#endif
+
#include <boost/date_time/gregorian/gregorian.hpp>
+#if LL_MSVC
+#pragma warning(pop) // Restore all warnings to the previous state
+#endif
+
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time_adjustor.hpp>
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 1be3430e07..e3817eecc4 100644
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -35,6 +35,7 @@
#include "llloginhandler.h"
// viewer includes
+#include "lllogininstance.h" // to check if logged in yet
#include "llpanellogin.h" // save_password_to_disk()
#include "llstartup.h" // getStartupState()
#include "llurlsimstring.h"
@@ -169,6 +170,13 @@ bool LLLoginHandler::handle(const LLSD& tokens,
const LLSD& query_map,
LLMediaCtrl* web)
{
+ // do nothing if we are already logged in
+ if (LLLoginInstance::getInstance()->authSuccess())
+ {
+ LL_WARNS_ONCE("SLURL") << "Already logged in! Ignoring login SLapp." << LL_ENDL;
+ return true;
+ }
+
if (tokens.size() == 1
&& tokens[0].asString() == "show")
{
diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
index a96240e31c..957e88960d 100644
--- a/indra/newview/llmanip.cpp
+++ b/indra/newview/llmanip.cpp
@@ -43,6 +43,7 @@
#include "llviewertexturelist.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "lldrawable.h"
#include "llfontgl.h"
@@ -180,7 +181,7 @@ F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVecto
LLVector3 cam_to_reference;
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
- cam_to_reference = LLVector3(1.f / gAgent.mHUDCurZoom, 0.f, 0.f);
+ cam_to_reference = LLVector3(1.f / gAgentCamera.mHUDCurZoom, 0.f, 0.f);
}
else
{
@@ -265,8 +266,8 @@ BOOL LLManip::getMousePointOnPlaneGlobal(LLVector3d& point, S32 x, S32 y, LLVect
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
BOOL result = FALSE;
- F32 mouse_x = ((F32)x / gViewerWindow->getWorldViewWidthScaled() - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.mHUDCurZoom;
- F32 mouse_y = ((F32)y / gViewerWindow->getWorldViewHeightScaled() - 0.5f) / gAgent.mHUDCurZoom;
+ F32 mouse_x = ((F32)x / gViewerWindow->getWorldViewWidthScaled() - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgentCamera.mHUDCurZoom;
+ F32 mouse_y = ((F32)y / gViewerWindow->getWorldViewHeightScaled() - 0.5f) / gAgentCamera.mHUDCurZoom;
LLVector3 origin_agent = gAgent.getPosAgentFromGlobal(origin);
LLVector3 mouse_pos = LLVector3(0.f, -mouse_x, mouse_y);
@@ -304,15 +305,15 @@ BOOL LLManip::nearestPointOnLineFromMouse( S32 x, S32 y, const LLVector3& b1, co
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
- F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidthScaled()) - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.mHUDCurZoom;
- F32 mouse_y = (((F32)y / gViewerWindow->getWindowHeightScaled()) - 0.5f) / gAgent.mHUDCurZoom;
+ F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidthScaled()) - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgentCamera.mHUDCurZoom;
+ F32 mouse_y = (((F32)y / gViewerWindow->getWindowHeightScaled()) - 0.5f) / gAgentCamera.mHUDCurZoom;
a1 = LLVector3(llmin(b1.mV[VX] - 0.1f, b2.mV[VX] - 0.1f, 0.f), -mouse_x, mouse_y);
a2 = a1 + LLVector3(1.f, 0.f, 0.f);
}
else
{
- a1 = gAgent.getCameraPositionAgent();
- a2 = gAgent.getCameraPositionAgent() + LLVector3(gViewerWindow->mouseDirectionGlobal(x, y));
+ a1 = gAgentCamera.getCameraPositionAgent();
+ a2 = gAgentCamera.getCameraPositionAgent() + LLVector3(gViewerWindow->mouseDirectionGlobal(x, y));
}
BOOL parallel = TRUE;
@@ -491,7 +492,7 @@ void LLManip::renderTickText(const LLVector3& pos, const std::string& text, cons
LLVector3 render_pos = pos;
if (hud_selection)
{
- F32 zoom_amt = gAgent.mHUDCurZoom;
+ F32 zoom_amt = gAgentCamera.mHUDCurZoom;
F32 inv_zoom_amt = 1.f / zoom_amt;
// scale text back up to counter-act zoom level
render_pos = pos * zoom_amt;
@@ -549,7 +550,7 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const std::string
LLVector3 render_pos = pos;
if (hud_selection)
{
- F32 zoom_amt = gAgent.mHUDCurZoom;
+ F32 zoom_amt = gAgentCamera.mHUDCurZoom;
F32 inv_zoom_amt = 1.f / zoom_amt;
// scale text back up to counter-act zoom level
render_pos = pos * zoom_amt;
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
index 8535d52015..6747bcb9c9 100644
--- a/indra/newview/llmaniprotate.cpp
+++ b/indra/newview/llmaniprotate.cpp
@@ -45,6 +45,7 @@
// viewer includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llbox.h"
#include "llbutton.h"
#include "llviewercontrol.h"
@@ -64,6 +65,7 @@
#include "lldrawable.h"
#include "llglheaders.h"
#include "lltrans.h"
+#include "llvoavatarself.h"
const F32 RADIUS_PIXELS = 100.f; // size in screen space
const F32 SQ_RADIUS = RADIUS_PIXELS * RADIUS_PIXELS;
@@ -138,7 +140,7 @@ void LLManipRotate::render()
glPushMatrix();
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
- F32 zoom = gAgent.mHUDCurZoom;
+ F32 zoom = gAgentCamera.mHUDCurZoom;
glScalef(zoom, zoom, zoom);
}
@@ -690,7 +692,7 @@ void LLManipRotate::drag( S32 x, S32 y )
LLSelectMgr::getInstance()->updateSelectionCenter();
// RN: just clear focus so camera doesn't follow spurious object updates
- gAgent.clearFocusObject();
+ gAgentCamera.clearFocusObject();
dialog_refresh_all();
}
@@ -730,7 +732,7 @@ void LLManipRotate::renderSnapGuides()
}
else
{
- cam_at_axis = center - gAgent.getCameraPositionAgent();
+ cam_at_axis = center - gAgentCamera.getCameraPositionAgent();
cam_at_axis.normVec();
}
@@ -738,7 +740,7 @@ void LLManipRotate::renderSnapGuides()
LLVector3 test_axis = constraint_axis;
BOOL constrain_to_ref_object = FALSE;
- if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject())
+ if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())
{
test_axis = test_axis * ~grid_rotation;
}
@@ -765,7 +767,7 @@ void LLManipRotate::renderSnapGuides()
}
LLVector3 projected_snap_axis = world_snap_axis;
- if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject())
+ if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())
{
projected_snap_axis = projected_snap_axis * grid_rotation;
}
@@ -1097,12 +1099,12 @@ BOOL LLManipRotate::updateVisiblity()
LLVector3 center = gAgent.getPosAgentFromGlobal( mRotationCenter );
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
- mCenterToCam = LLVector3(-1.f / gAgent.mHUDCurZoom, 0.f, 0.f);
+ mCenterToCam = LLVector3(-1.f / gAgentCamera.mHUDCurZoom, 0.f, 0.f);
mCenterToCamNorm = mCenterToCam;
mCenterToCamMag = mCenterToCamNorm.normVec();
mRadiusMeters = RADIUS_PIXELS / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
- mRadiusMeters /= gAgent.mHUDCurZoom;
+ mRadiusMeters /= gAgentCamera.mHUDCurZoom;
mCenterToProfilePlaneMag = mRadiusMeters * mRadiusMeters / mCenterToCamMag;
mCenterToProfilePlane = -mCenterToProfilePlaneMag * mCenterToCamNorm;
@@ -1110,8 +1112,8 @@ BOOL LLManipRotate::updateVisiblity()
// x axis range is (-aspect * 0.5f, +aspect * 0.5)
// y axis range is (-0.5, 0.5)
// so use getWorldViewHeightRaw as scale factor when converting to pixel coordinates
- mCenterScreen.set((S32)((0.5f - center.mV[VY]) / gAgent.mHUDCurZoom * gViewerWindow->getWorldViewHeightScaled()),
- (S32)((center.mV[VZ] + 0.5f) / gAgent.mHUDCurZoom * gViewerWindow->getWorldViewHeightScaled()));
+ mCenterScreen.set((S32)((0.5f - center.mV[VY]) / gAgentCamera.mHUDCurZoom * gViewerWindow->getWorldViewHeightScaled()),
+ (S32)((center.mV[VZ] + 0.5f) / gAgentCamera.mHUDCurZoom * gViewerWindow->getWorldViewHeightScaled()));
visible = TRUE;
}
else
@@ -1119,7 +1121,7 @@ BOOL LLManipRotate::updateVisiblity()
visible = LLViewerCamera::getInstance()->projectPosAgentToScreen(center, mCenterScreen );
if( visible )
{
- mCenterToCam = gAgent.getCameraPositionAgent() - center;
+ mCenterToCam = gAgentCamera.getCameraPositionAgent() - center;
mCenterToCamNorm = mCenterToCam;
mCenterToCamMag = mCenterToCamNorm.normVec();
LLVector3 cameraAtAxis = LLViewerCamera::getInstance()->getAtAxis();
@@ -1165,7 +1167,7 @@ BOOL LLManipRotate::updateVisiblity()
LLQuaternion LLManipRotate::dragUnconstrained( S32 x, S32 y )
{
- LLVector3 cam = gAgent.getCameraPositionAgent();
+ LLVector3 cam = gAgentCamera.getCameraPositionAgent();
LLVector3 center = gAgent.getPosAgentFromGlobal( mRotationCenter );
mMouseCur = intersectMouseWithSphere( x, y, center, mRadiusMeters);
@@ -1281,7 +1283,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )
LLVector3 axis2;
LLVector3 test_axis = constraint_axis;
- if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject())
+ if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())
{
test_axis = test_axis * ~grid_rotation;
}
@@ -1305,7 +1307,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )
axis1 = LLVector3::x_axis;
}
- if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject())
+ if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())
{
axis1 = axis1 * grid_rotation;
}
@@ -1333,7 +1335,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )
}
else
{
- cam_to_snap_plane = snap_plane_center - gAgent.getCameraPositionAgent();
+ cam_to_snap_plane = snap_plane_center - gAgentCamera.getCameraPositionAgent();
cam_to_snap_plane.normVec();
}
@@ -1383,7 +1385,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )
}
else
{
- cam_to_snap_plane = snap_plane_center - gAgent.getCameraPositionAgent();
+ cam_to_snap_plane = snap_plane_center - gAgentCamera.getCameraPositionAgent();
cam_to_snap_plane.normVec();
}
@@ -1430,7 +1432,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )
}
else
{
- cam_at_axis = snap_plane_center - gAgent.getCameraPositionAgent();
+ cam_at_axis = snap_plane_center - gAgentCamera.getCameraPositionAgent();
cam_at_axis.normVec();
}
@@ -1627,15 +1629,15 @@ void LLManipRotate::mouseToRay( S32 x, S32 y, LLVector3* ray_pt, LLVector3* ray_
{
if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD)
{
- F32 mouse_x = (((F32)x / gViewerWindow->getWorldViewRectScaled().getWidth()) - 0.5f) / gAgent.mHUDCurZoom;
- F32 mouse_y = ((((F32)y) / gViewerWindow->getWorldViewRectScaled().getHeight()) - 0.5f) / gAgent.mHUDCurZoom;
+ F32 mouse_x = (((F32)x / gViewerWindow->getWorldViewRectScaled().getWidth()) - 0.5f) / gAgentCamera.mHUDCurZoom;
+ F32 mouse_y = ((((F32)y) / gViewerWindow->getWorldViewRectScaled().getHeight()) - 0.5f) / gAgentCamera.mHUDCurZoom;
*ray_pt = LLVector3(-1.f, -mouse_x, mouse_y);
*ray_dir = LLVector3(1.f, 0.f, 0.f);
}
else
{
- *ray_pt = gAgent.getCameraPositionAgent();
+ *ray_pt = gAgentCamera.getCameraPositionAgent();
LLViewerCamera::getInstance()->projectScreenToPosAgent(x, y, ray_dir);
*ray_dir -= *ray_pt;
ray_dir->normVec();
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index ee3ffa2450..63643a7fc6 100644
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -45,6 +45,7 @@
// viewer includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llbbox.h"
#include "llbox.h"
#include "llviewercontrol.h"
@@ -210,7 +211,7 @@ void LLManipScale::render()
glPushMatrix();
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
- F32 zoom = gAgent.mHUDCurZoom;
+ F32 zoom = gAgentCamera.mHUDCurZoom;
glScalef(zoom, zoom, zoom);
}
@@ -227,11 +228,11 @@ void LLManipScale::render()
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
mBoxHandleSize = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels();
- mBoxHandleSize /= gAgent.mHUDCurZoom;
+ mBoxHandleSize /= gAgentCamera.mHUDCurZoom;
}
else
{
- range = dist_vec(gAgent.getCameraPositionAgent(), center_agent);
+ range = dist_vec(gAgentCamera.getCameraPositionAgent(), center_agent);
range_from_agent = dist_vec(gAgent.getPositionAgent(), center_agent);
// Don't draw manip if object too far away
@@ -438,7 +439,7 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)
LLMatrix4 cfr(OGL_TO_CFR_ROTATION);
transform *= cfr;
LLMatrix4 window_scale;
- F32 zoom_level = 2.f * gAgent.mHUDCurZoom;
+ F32 zoom_level = 2.f * gAgentCamera.mHUDCurZoom;
window_scale.initAll(LLVector3(zoom_level / LLViewerCamera::getInstance()->getAspect(), zoom_level, 0.f),
LLQuaternion::DEFAULT,
LLVector3::zero);
@@ -635,7 +636,7 @@ void LLManipScale::renderFaces( const LLBBox& bbox )
}
// Find nearest vertex
- LLVector3 orientWRTHead = bbox.agentToLocalBasis( bbox.getCenterAgent() - gAgent.getCameraPositionAgent() );
+ LLVector3 orientWRTHead = bbox.agentToLocalBasis( bbox.getCenterAgent() - gAgentCamera.getCameraPositionAgent() );
U32 nearest =
(orientWRTHead.mV[0] < 0.0f ? 1 : 0) +
(orientWRTHead.mV[1] < 0.0f ? 2 : 0) +
@@ -825,7 +826,7 @@ void LLManipScale::drag( S32 x, S32 y )
}
LLSelectMgr::getInstance()->updateSelectionCenter();
- gAgent.clearFocusObject();
+ gAgentCamera.clearFocusObject();
}
// Scale around the
@@ -1364,7 +1365,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)
if(mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
- mSnapRegimeOffset = SNAP_GUIDE_SCREEN_OFFSET / gAgent.mHUDCurZoom;
+ mSnapRegimeOffset = SNAP_GUIDE_SCREEN_OFFSET / gAgentCamera.mHUDCurZoom;
}
else
@@ -1377,7 +1378,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
cam_at_axis.setVec(1.f, 0.f, 0.f);
- snap_guide_length = SNAP_GUIDE_SCREEN_LENGTH / gAgent.mHUDCurZoom;
+ snap_guide_length = SNAP_GUIDE_SCREEN_LENGTH / gAgentCamera.mHUDCurZoom;
}
else
{
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 52fe31fbba..5f0c5e1795 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -42,6 +42,7 @@
#include "llrender.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llbbox.h"
#include "llbox.h"
#include "llviewercontrol.h"
@@ -437,12 +438,12 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
{
if (x < ROTATE_H_MARGIN)
{
- gAgent.cameraOrbitAround(rotate_angle);
+ gAgentCamera.cameraOrbitAround(rotate_angle);
rotated = TRUE;
}
else if (x > world_rect.getWidth() - ROTATE_H_MARGIN)
{
- gAgent.cameraOrbitAround(-rotate_angle);
+ gAgentCamera.cameraOrbitAround(-rotate_angle);
rotated = TRUE;
}
}
@@ -713,7 +714,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
// in position changes even when the mouse moves
object->setPosition(new_position_local);
rebuild(object);
- gAgent.getAvatarObject()->clampAttachmentPositions();
+ gAgentAvatarp->clampAttachmentPositions();
new_position_local = object->getPosition();
if (selectNode->mIndividualSelection)
@@ -789,7 +790,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
}
LLSelectMgr::getInstance()->updateSelectionCenter();
- gAgent.clearFocusObject();
+ gAgentCamera.clearFocusObject();
dialog_refresh_all(); // ??? is this necessary?
lldebugst(LLERR_USER_INPUT) << "hover handled by LLManipTranslate (active)" << llendl;
@@ -830,7 +831,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
LLMatrix4 cfr(OGL_TO_CFR_ROTATION);
transform *= cfr;
LLMatrix4 window_scale;
- F32 zoom_level = 2.f * gAgent.mHUDCurZoom;
+ F32 zoom_level = 2.f * gAgentCamera.mHUDCurZoom;
window_scale.initAll(LLVector3(zoom_level / LLViewerCamera::getInstance()->getAspect(), zoom_level, 0.f),
LLQuaternion::DEFAULT,
LLVector3::zero);
@@ -1075,7 +1076,7 @@ void LLManipTranslate::render()
gGL.pushMatrix();
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
- F32 zoom = gAgent.mHUDCurZoom;
+ F32 zoom = gAgentCamera.mHUDCurZoom;
glScalef(zoom, zoom, zoom);
}
{
@@ -1239,7 +1240,7 @@ void LLManipTranslate::renderSnapGuides()
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
- guide_size_meters = 1.f / gAgent.mHUDCurZoom;
+ guide_size_meters = 1.f / gAgentCamera.mHUDCurZoom;
mSnapOffsetMeters = mArrowLengthMeters * 1.5f;
}
else
@@ -1822,11 +1823,11 @@ void LLManipTranslate::renderTranslationHandles()
if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)
{
mArrowLengthMeters = mAxisArrowLength / gViewerWindow->getWorldViewHeightRaw();
- mArrowLengthMeters /= gAgent.mHUDCurZoom;
+ mArrowLengthMeters /= gAgentCamera.mHUDCurZoom;
}
else
{
- LLVector3 camera_pos_agent = gAgent.getCameraPositionAgent();
+ LLVector3 camera_pos_agent = gAgentCamera.getCameraPositionAgent();
F32 range = dist_vec(camera_pos_agent, selection_center);
F32 range_from_agent = dist_vec(gAgent.getPositionAgent(), selection_center);
@@ -2108,7 +2109,7 @@ void LLManipTranslate::renderTranslationHandles()
// Copied from LLDrawable::updateGeometry
LLVector3 pos_agent = first_object->getPositionAgent();
- LLVector3 camera_agent = gAgent.getCameraPositionAgent();
+ LLVector3 camera_agent = gAgentCamera.getCameraPositionAgent();
LLVector3 headPos = pos_agent - camera_agent;
LLVector3 orientWRTHead = headPos * invRotation;
@@ -2150,7 +2151,7 @@ void LLManipTranslate::renderTranslationHandles()
}
else
{
- camera_axis.setVec(gAgent.getCameraPositionAgent() - first_object->getPositionAgent());
+ camera_axis.setVec(gAgentCamera.getCameraPositionAgent() - first_object->getPositionAgent());
}
for (U32 i = 0; i < NUM_AXES*2; i++)
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 501a137b42..05cb6ddc4a 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -80,8 +80,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
mForceUpdate( false ),
mOpenLinksInExternalBrowser( false ),
mOpenLinksInInternalBrowser( false ),
- mTrusted( false ),
mHomePageUrl( "" ),
+ mTrusted(false),
mIgnoreUIScale( true ),
mAlwaysRefresh( false ),
mMediaSource( 0 ),
@@ -183,6 +183,10 @@ void LLMediaCtrl::setOpenInInternalBrowser( bool valIn )
////////////////////////////////////////////////////////////////////////////////
void LLMediaCtrl::setTrusted( bool valIn )
{
+ if(mMediaSource)
+ {
+ mMediaSource->setTrustedBrowser(valIn);
+ }
mTrusted = valIn;
}
@@ -632,6 +636,7 @@ bool LLMediaCtrl::ensureMediaSourceExists()
mMediaSource->setVisible( getVisible() );
mMediaSource->addObserver( this );
mMediaSource->setBackgroundColor( getBackgroundColor() );
+ mMediaSource->setTrustedBrowser(mTrusted);
if(mClearCache)
{
mMediaSource->clearCache();
@@ -724,14 +729,14 @@ void LLMediaCtrl::draw()
LLGLSUIDefault gls_ui;
LLGLDisable gls_alphaTest( GL_ALPHA_TEST );
- gGL.pushMatrix();
+ gGL.pushUIMatrix();
{
if (mIgnoreUIScale)
{
- glLoadIdentity();
+ gGL.loadUIIdentity();
// font system stores true screen origin, need to scale this by UI scale factor
// to get render origin for this view (with unit scale)
- gGL.translatef(floorf(LLFontGL::sCurOrigin.mX * LLUI::sGLScaleFactor.mV[VX]),
+ gGL.translateUI(floorf(LLFontGL::sCurOrigin.mX * LLUI::sGLScaleFactor.mV[VX]),
floorf(LLFontGL::sCurOrigin.mY * LLUI::sGLScaleFactor.mV[VY]),
LLFontGL::sCurOrigin.mZ);
}
@@ -825,7 +830,7 @@ void LLMediaCtrl::draw()
gGL.end();
gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
- gGL.popMatrix();
+ gGL.popUIMatrix();
}
else
@@ -946,7 +951,6 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
{
LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is " << self->getClickURL() << LL_ENDL;
- onClickLinkNoFollow(self);
};
break;
@@ -1064,15 +1068,6 @@ void LLMediaCtrl::clickLinkWithTarget(const std::string& url, const S32& target_
////////////////////////////////////////////////////////////////////////////////
//
-void LLMediaCtrl::onClickLinkNoFollow( LLPluginClassMedia* self )
-{
- // let the dispatcher handle blocking/throttling of SLURLs
- std::string url = self->getClickURL();
- LLURLDispatcher::dispatch(url, this, mTrusted);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
std::string LLMediaCtrl::getCurrentNavUrl()
{
return mCurrentNavUrl;
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 60e0c4073b..e55d2f7cd0 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -164,7 +164,6 @@ public:
// handlers for individual events (could be done inside the switch in handleMediaEvent, they're just individual functions for clarity)
void onClickLinkHref( LLPluginClassMedia* self );
- void onClickLinkNoFollow( LLPluginClassMedia* self );
protected:
void convertInputCoords(S32& x, S32& y);
diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp
index 8d950f072d..e6ca0dabda 100644
--- a/indra/newview/llmenucommands.cpp
+++ b/indra/newview/llmenucommands.cpp
@@ -42,7 +42,7 @@
#include "llstring.h"
#include "message.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "llcallingcard.h"
#include "llviewercontrol.h"
//#include "llfirstuse.h"
@@ -66,7 +66,7 @@
void handle_mouselook(void*)
{
- gAgent.changeCameraToMouselook();
+ gAgentCamera.changeCameraToMouselook();
}
diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp
index b95e8bd3a2..d670eb6ffd 100644
--- a/indra/newview/llmorphview.cpp
+++ b/indra/newview/llmorphview.cpp
@@ -37,6 +37,7 @@
#include "lljoint.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "lldrawable.h"
#include "lldrawpoolavatar.h"
#include "llface.h"
@@ -88,15 +89,14 @@ void LLMorphView::initialize()
mCameraYaw = 0.f;
mCameraDist = -1.f;
- LLVOAvatar *avatarp = gAgent.getAvatarObject();
- if (!avatarp || avatarp->isDead())
+ if (!isAgentAvatarValid() || gAgentAvatarp->isDead())
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
return;
}
- avatarp->stopMotion( ANIM_AGENT_BODY_NOISE );
- avatarp->mSpecialRenderMode = 3;
+ gAgentAvatarp->stopMotion( ANIM_AGENT_BODY_NOISE );
+ gAgentAvatarp->mSpecialRenderMode = 3;
// set up camera for close look at avatar
mOldCameraNearClip = LLViewerCamera::getInstance()->getNear();
@@ -110,11 +110,10 @@ void LLMorphView::shutdown()
{
LLVOAvatarSelf::onCustomizeEnd();
- LLVOAvatar *avatarp = gAgent.getAvatarObject();
- if(avatarp && !avatarp->isDead())
+ if (isAgentAvatarValid())
{
- avatarp->startMotion( ANIM_AGENT_BODY_NOISE );
- avatarp->mSpecialRenderMode = 0;
+ gAgentAvatarp->startMotion( ANIM_AGENT_BODY_NOISE );
+ gAgentAvatarp->mSpecialRenderMode = 0;
// reset camera
LLViewerCamera::getInstance()->setNear(mOldCameraNearClip);
}
@@ -163,15 +162,11 @@ void LLMorphView::updateCamera()
{
if (!mCameraTargetJoint)
{
- setCameraTargetJoint(gAgent.getAvatarObject()->getJoint("mHead"));
- }
-
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- if( !avatar )
- {
- return;
- }
- LLJoint* root_joint = avatar->getRootJoint();
+ setCameraTargetJoint(gAgentAvatarp->getJoint("mHead"));
+ }
+ if (!isAgentAvatarValid()) return;
+
+ LLJoint* root_joint = gAgentAvatarp->getRootJoint();
if( !root_joint )
{
return;
@@ -187,7 +182,7 @@ void LLMorphView::updateCamera()
LLVector3d camera_pos = joint_pos + mCameraOffset * camera_rot_pitch * camera_rot_yaw * avatar_rot;
- gAgent.setCameraPosAndFocusGlobal( camera_pos, target_pos, gAgent.getID() );
+ gAgentCamera.setCameraPosAndFocusGlobal( camera_pos, target_pos, gAgent.getID() );
}
void LLMorphView::setCameraDrivenByKeys(BOOL b)
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 97e2b5b86e..0f22a50093 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -41,7 +41,8 @@
// Viewer includes
#include "llagent.h"
-#include "llvoavatarself.h" // to check gAgent.getAvatarObject()->isSitting()
+#include "llagentcamera.h"
+#include "llvoavatarself.h" // to check gAgentAvatarp->isSitting()
#include "llbottomtray.h"
#include "llbutton.h"
#include "llfloaterreg.h"
@@ -77,7 +78,6 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
mTurnRightButton(NULL),
mMoveUpButton(NULL),
mMoveDownButton(NULL),
- mStopFlyingButton(NULL),
mModeActionsPanel(NULL),
mCurrentMode(MM_WALK)
{
@@ -87,6 +87,7 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
BOOL LLFloaterMove::postBuild()
{
setIsChrome(TRUE);
+ setTitleVisible(TRUE); // restore title visibility after chrome applying
LLDockableFloater::postBuild();
@@ -112,8 +113,6 @@ BOOL LLFloaterMove::postBuild()
mMoveDownButton->setHeldDownCallback(boost::bind(&LLFloaterMove::moveDown, this));
- mStopFlyingButton = getChild<LLButton>("stop_fly_btn");
-
mModeActionsPanel = getChild<LLPanel>("panel_modes");
LLButton* btn;
@@ -126,11 +125,6 @@ BOOL LLFloaterMove::postBuild()
btn = getChild<LLButton>("mode_fly_btn");
btn->setCommitCallback(boost::bind(&LLFloaterMove::onFlyButtonClick, this));
- btn = getChild<LLButton>("stop_fly_btn");
- btn->setCommitCallback(boost::bind(&LLFloaterMove::onStopFlyingButtonClick, this));
-
-
-
showFlyControls(false);
initModeTooltips();
@@ -304,10 +298,6 @@ void LLFloaterMove::onFlyButtonClick()
{
setMovementMode(MM_FLY);
}
-void LLFloaterMove::onStopFlyingButtonClick()
-{
- setMovementMode(gAgent.getAlwaysRun() ? MM_RUN : MM_WALK);
-}
void LLFloaterMove::setMovementMode(const EMovementMode mode)
{
@@ -342,7 +332,7 @@ void LLFloaterMove::setMovementMode(const EMovementMode mode)
updateButtonsWithMovementMode(mode);
bool bHideModeButtons = MM_FLY == mode
- || (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting());
+ || (isAgentAvatarValid() && gAgentAvatarp->isSitting());
showModeButtons(!bHideModeButtons);
@@ -353,16 +343,13 @@ void LLFloaterMove::updateButtonsWithMovementMode(const EMovementMode newMode)
showFlyControls(MM_FLY == newMode);
setModeTooltip(newMode);
setModeButtonToggleState(newMode);
+ setModeTitle(newMode);
}
void LLFloaterMove::showFlyControls(bool bShow)
{
mMoveUpButton->setVisible(bShow);
mMoveDownButton->setVisible(bShow);
-
- // *TODO: mantipov: mStopFlyingButton from the FloaterMove is not used now.
- // It was not completly removed until functionality is reviewed by LL
- mStopFlyingButton->setVisible(FALSE);
}
void LLFloaterMove::initModeTooltips()
@@ -401,9 +388,9 @@ void LLFloaterMove::initMovementMode()
}
setMovementMode(initMovementMode);
- if (gAgent.getAvatarObject())
+ if (isAgentAvatarValid())
{
- setEnabled(!gAgent.getAvatarObject()->isSitting());
+ setEnabled(!gAgentAvatarp->isSitting());
}
}
@@ -420,11 +407,30 @@ void LLFloaterMove::setModeTooltip(const EMovementMode mode)
}
}
+void LLFloaterMove::setModeTitle(const EMovementMode mode)
+{
+ std::string title;
+ switch(mode)
+ {
+ case MM_WALK:
+ title = getString("walk_title");
+ break;
+ case MM_RUN:
+ title = getString("run_title");
+ break;
+ case MM_FLY:
+ title = getString("fly_title");
+ break;
+ default:
+ // title should be provided for all modes
+ llassert(false);
+ break;
+ }
+ setTitle(title);
+}
+
/**
* Updates position of the floater to be center aligned with Move button.
- *
- * Because Tip floater created as dependent floater this method
- * must be called before "showQuickTips()" to get Tip floater be positioned at the right side of the floater
*/
void LLFloaterMove::updatePosition()
{
@@ -485,7 +491,7 @@ void LLFloaterMove::onOpen(const LLSD& key)
showModeButtons(FALSE);
}
- if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting())
+ if (isAgentAvatarValid() && gAgentAvatarp->isSitting())
{
setSittingMode(TRUE);
showModeButtons(FALSE);
@@ -588,7 +594,7 @@ BOOL LLPanelStandStopFlying::postBuild()
void LLPanelStandStopFlying::setVisible(BOOL visible)
{
//we dont need to show the panel if these buttons are not activated
- if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) visible = false;
+ if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) visible = false;
if (visible)
{
diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h
index 06463f02af..dcca8308d9 100644
--- a/indra/newview/llmoveview.h
+++ b/indra/newview/llmoveview.h
@@ -86,13 +86,12 @@ private:
void onWalkButtonClick();
void onRunButtonClick();
void onFlyButtonClick();
- void onStopFlyingButtonClick();
void initMovementMode();
void setMovementMode(const EMovementMode mode);
void showFlyControls(bool bShow);
void initModeTooltips();
void setModeTooltip(const EMovementMode mode);
- void showQuickTips(const EMovementMode mode);
+ void setModeTitle(const EMovementMode mode);
void initModeButtonMap();
void setModeButtonToggleState(const EMovementMode mode);
void updateButtonsWithMovementMode(const EMovementMode newMode);
@@ -108,7 +107,6 @@ public:
LLButton* mMoveUpButton;
LLButton* mMoveDownButton;
private:
- LLButton* mStopFlyingButton;
LLPanel* mModeActionsPanel;
typedef std::map<LLView*, std::string> control_tooltip_map_t;
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index 2d3c4b187e..95094f6b52 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -128,68 +128,26 @@ LLMute::LLMute(const LLUUID& id, const std::string& name, EType type, U32 flags)
}
-std::string LLMute::getDisplayName() const
+std::string LLMute::getDisplayType() const
{
- std::string name_with_suffix = mName;
switch (mType)
{
case BY_NAME:
default:
- name_with_suffix += " " + LLTrans::getString("MuteByName");
+ return LLTrans::getString("MuteByName");
break;
case AGENT:
- name_with_suffix += " " + LLTrans::getString("MuteAgent");
+ return LLTrans::getString("MuteAgent");
break;
case OBJECT:
- name_with_suffix += " " + LLTrans::getString("MuteObject");
+ return LLTrans::getString("MuteObject");
break;
case GROUP:
- name_with_suffix += " " + LLTrans::getString("MuteGroup");
+ return LLTrans::getString("MuteGroup");
break;
}
- return name_with_suffix;
}
-void LLMute::setFromDisplayName(const std::string& display_name)
-{
- size_t pos = 0;
- mName = display_name;
-
- pos = mName.rfind(" " + LLTrans::getString("MuteGroup"));
- if (pos != std::string::npos)
- {
- mName.erase(pos);
- mType = GROUP;
- return;
- }
-
- pos = mName.rfind(" " + LLTrans::getString("MuteObject"));
- if (pos != std::string::npos)
- {
- mName.erase(pos);
- mType = OBJECT;
- return;
- }
-
- pos = mName.rfind(" " + LLTrans::getString("MuteAgent"));
- if (pos != std::string::npos)
- {
- mName.erase(pos);
- mType = AGENT;
- return;
- }
-
- pos = mName.rfind(" " + LLTrans::getString("MuteByName"));
- if (pos != std::string::npos)
- {
- mName.erase(pos);
- mType = BY_NAME;
- return;
- }
-
- llwarns << "Unable to set mute from display name " << display_name << llendl;
- return;
-}
/* static */
LLMuteList* LLMuteList::getInstance()
diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h
index e1e81a24b4..7cb11e6031 100644
--- a/indra/newview/llmutelist.h
+++ b/indra/newview/llmutelist.h
@@ -63,14 +63,8 @@ public:
LLMute(const LLUUID& id, const std::string& name = std::string(), EType type = BY_NAME, U32 flags = 0);
- // Returns name + suffix based on type
- // For example: "James Tester (resident)"
- std::string getDisplayName() const;
-
- // Converts a UI name into just the agent or object name
- // For example: "James Tester (resident)" sets the name to "James Tester"
- // and the type to AGENT.
- void setFromDisplayName(const std::string& display_name);
+ // Returns localized type name of muted item
+ std::string getDisplayType() const;
public:
LLUUID mID; // agent or object id
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index 114fef8712..9611c286eb 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -47,6 +47,8 @@
static LLDefaultChildRegistry::Register<LLNameListCtrl> r("name_list");
+static const S32 info_icon_size = 16;
+
void LLNameListCtrl::NameTypeNames::declareValues()
{
declare("INDIVIDUAL", LLNameListCtrl::INDIVIDUAL);
@@ -138,6 +140,44 @@ void LLNameListCtrl::showInspector(const LLUUID& avatar_id, bool is_group)
LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id));
}
+void LLNameListCtrl::mouseOverHighlightNthItem( S32 target_index )
+{
+ S32 cur_index = getHighlightedItemInx();
+ if (cur_index != target_index)
+ {
+ if(0 <= cur_index && cur_index < (S32)getItemList().size())
+ {
+ LLScrollListItem* item = getItemList()[cur_index];
+ if (item)
+ {
+ LLScrollListText* cell = dynamic_cast<LLScrollListText*>(item->getColumn(mNameColumnIndex));
+ if (cell)
+ cell->setTextWidth(cell->getTextWidth() + info_icon_size);
+ }
+ else
+ {
+ llwarns << "highlighted name list item is NULL" << llendl;
+ }
+ }
+ if(target_index != -1)
+ {
+ LLScrollListItem* item = getItemList()[target_index];
+ LLScrollListText* cell = dynamic_cast<LLScrollListText*>(item->getColumn(mNameColumnIndex));
+ if (item)
+ {
+ if (cell)
+ cell->setTextWidth(cell->getTextWidth() - info_icon_size);
+ }
+ else
+ {
+ llwarns << "target name item is NULL" << llendl;
+ }
+ }
+ }
+
+ LLScrollListCtrl::mouseOverHighlightNthItem(target_index);
+}
+
//virtual
BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
{
@@ -164,7 +204,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
// Spawn at right side of cell
LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small");
- LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight())/2 );
+ LLCoordGL pos( sticky_rect.mRight - info_icon_size, sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight())/2 );
// Should we show a group or an avatar inspector?
bool is_group = hit_item->getValue()["is_group"].asBoolean();
diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h
index 23b1cb6897..1c26ee5db4 100644
--- a/indra/newview/llnamelistctrl.h
+++ b/indra/newview/llnamelistctrl.h
@@ -120,6 +120,8 @@ public:
void setAllowCallingCardDrop(BOOL b) { mAllowCallingCardDrop = b; }
/*virtual*/ void updateColumns();
+
+ /*virtual*/ void mouseOverHighlightNthItem( S32 index );
private:
void showInspector(const LLUUID& avatar_id, bool is_group);
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index d42e4bc250..e11df06d86 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -451,6 +451,12 @@ void LLNavigationBar::onLocationSelection()
return;
//get selected item from combobox item
LLSD value = mCmbLocation->getSelectedValue();
+ if(value.isUndefined() && !mCmbLocation->getTextEntry()->isDirty())
+ {
+ // At this point we know that: there is no selected item in list and text field has NOT been changed
+ // So there is no sense to try to change the location
+ return;
+ }
/* since navbar list support autocompletion it contains several types of item: landmark, teleport hystory item,
* typed by user slurl or region name. Let's find out which type of item the user has selected
* to make decision about adding this location into typed history. see mSaveToLocationHistory
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 16384ef6e0..c8d5d782b7 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -278,6 +278,13 @@ void LLNearbyChat::processChatHistoryStyleUpdate(const LLSD& newvalue)
nearby_chat->updateChatHistoryStyle();
}
+bool isTwoWordsName(const std::string& name)
+{
+ //checking for a single space
+ S32 pos = name.find(' ', 0);
+ return std::string::npos != pos && name.rfind(' ', name.length()) == pos && 0 != pos && name.length()-1 != pos;
+}
+
void LLNearbyChat::loadHistory()
{
LLSD do_not_log;
@@ -304,6 +311,18 @@ void LLNearbyChat::loadHistory()
chat.mText = msg[IM_TEXT].asString();
chat.mTimeStr = msg[IM_TIME].asString();
chat.mChatStyle = CHAT_STYLE_HISTORY;
+
+ chat.mSourceType = CHAT_SOURCE_AGENT;
+ if (from_id.isNull() && SYSTEM_FROM == from)
+ {
+ chat.mSourceType = CHAT_SOURCE_SYSTEM;
+
+ }
+ else if (from_id.isNull())
+ {
+ chat.mSourceType = isTwoWordsName(from) ? CHAT_SOURCE_UNKNOWN : CHAT_SOURCE_OBJECT;
+ }
+
addMessage(chat, true, do_not_log);
it++;
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index ad98a29fb2..1507b7d324 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -96,18 +96,14 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p)
params.commit_on_keyboard_movement(false);
mList = LLUICtrlFactory::create<LLScrollListCtrl>(params);
-
- // *HACK: adding list as a child to FloaterViewHolder to make it fully visible without
- // making it top control (because it would cause problems).
- gViewerWindow->getFloaterViewHolder()->addChild(mList);
- mList->setVisible(FALSE);
+ addChild(mList);
//****************************Gesture Part********************************/
setCommitCallback(boost::bind(&LLGestureComboList::onCommitGesture, this));
// now register us as observer since we have a place to put the results
- LLGestureManager::instance().addObserver(this);
+ LLGestureMgr::instance().addObserver(this);
// refresh list from current active gestures
refreshGestures();
@@ -115,7 +111,7 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p)
setFocusLostCallback(boost::bind(&LLGestureComboList::hideList, this));
}
-BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent)
+BOOL LLGestureComboList::handleKeyHere(KEY key, MASK mask)
{
BOOL handled = FALSE;
@@ -126,7 +122,7 @@ BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent)
}
else
{
- handled = mList->handleKey(key, mask, called_from_parent);
+ handled = mList->handleKeyHere(key, mask);
}
return handled;
@@ -135,18 +131,17 @@ BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent)
void LLGestureComboList::showList()
{
LLRect rect = mList->getRect();
- LLRect screen;
- mButton->localRectToScreen(getRect(), &screen);
+ LLRect button_rect = mButton->getRect();
// Calculating amount of space between the navigation bar and gestures combo
LLNavigationBar* nb = LLNavigationBar::getInstance();
S32 x, nb_bottom;
- nb->localPointToScreen(0, 0, &x, &nb_bottom);
+ nb->localPointToOtherView(0, 0, &x, &nb_bottom, this);
- S32 max_height = nb_bottom - screen.mTop;
+ S32 max_height = nb_bottom - button_rect.mTop;
mList->calcColumnWidths();
- rect.setOriginAndSize(screen.mLeft, screen.mTop, llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height);
+ rect.setOriginAndSize(button_rect.mLeft, button_rect.mTop, llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height);
mList->setRect(rect);
mList->fitContents( llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height);
@@ -156,6 +151,7 @@ void LLGestureComboList::showList()
// Show the list and push the button down
mButton->setToggleState(TRUE);
mList->setVisible(TRUE);
+ LLUI::addPopup(mList);
}
void LLGestureComboList::onButtonCommit()
@@ -188,6 +184,7 @@ void LLGestureComboList::hideList()
mButton->setToggleState(FALSE);
mList->setVisible(FALSE);
mList->mouseOverHighlightNthItem(-1);
+ LLUI::removePopup(mList);
gFocusMgr.setKeyboardFocus(NULL);
}
}
@@ -247,8 +244,8 @@ void LLGestureComboList::refreshGestures()
mList->clearRows();
mGestures.clear();
- LLGestureManager::item_map_t::const_iterator it;
- const LLGestureManager::item_map_t& active_gestures = LLGestureManager::instance().getActiveGestures();
+ LLGestureMgr::item_map_t::const_iterator it;
+ const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures();
LLSD::Integer idx(0);
for (it = active_gestures.begin(); it != active_gestures.end(); ++it)
{
@@ -292,7 +289,7 @@ void LLGestureComboList::refreshGestures()
gesture = mGestures.at(index);
}
- if(gesture && LLGestureManager::instance().isGesturePlaying(gesture))
+ if(gesture && LLGestureMgr::instance().isGesturePlaying(gesture))
{
return;
}
@@ -324,7 +321,7 @@ void LLGestureComboList::onCommitGesture()
LLMultiGesture* gesture = mGestures.at(index);
if(gesture)
{
- LLGestureManager::instance().playGesture(gesture);
+ LLGestureMgr::instance().playGesture(gesture);
if(!gesture->mReplaceText.empty())
{
LLNearbyChatBar::sendChatFromViewer(gesture->mReplaceText, CHAT_TYPE_NORMAL, FALSE);
@@ -335,7 +332,7 @@ void LLGestureComboList::onCommitGesture()
LLGestureComboList::~LLGestureComboList()
{
- LLGestureManager::instance().removeObserver(this);
+ LLGestureMgr::instance().removeObserver(this);
}
LLNearbyChatBar::LLNearbyChatBar()
@@ -407,32 +404,6 @@ BOOL LLNearbyChatBar::handleKeyHere( KEY key, MASK mask )
return handled;
}
-S32 LLNearbyChatBar::getMinWidth() const
-{
- static S32 min_width = -1;
-
- if (min_width < 0)
- {
- const std::string& s = getString("min_width");
- min_width = !s.empty() ? atoi(s.c_str()) : 300;
- }
-
- return min_width;
-}
-
-S32 LLNearbyChatBar::getMaxWidth() const
-{
- static S32 max_width = -1;
-
- if (max_width < 0)
- {
- const std::string& s = getString("max_width");
- max_width = !s.empty() ? atoi(s.c_str()) : 510;
- }
-
- return max_width;
-}
-
BOOL LLNearbyChatBar::matchChatTypeTrigger(const std::string& in_str, std::string* out_str)
{
U32 in_len = in_str.length();
@@ -505,7 +476,7 @@ void LLNearbyChatBar::onChatBoxKeystroke(LLLineEditor* caller, void* userdata)
std::string utf8_trigger = wstring_to_utf8str(raw_text);
std::string utf8_out_str(utf8_trigger);
- if (LLGestureManager::instance().matchPrefix(utf8_trigger, &utf8_out_str))
+ if (LLGestureMgr::instance().matchPrefix(utf8_trigger, &utf8_out_str))
{
std::string rest_of_match = utf8_out_str.substr(utf8_trigger.size());
self->mChatBox->setText(utf8_trigger + rest_of_match); // keep original capitalization for user-entered part
@@ -587,7 +558,7 @@ void LLNearbyChatBar::sendChat( EChatType type )
if (0 == channel)
{
// discard returned "found" boolean
- LLGestureManager::instance().triggerAndReviseString(utf8text, &utf8_revised_text);
+ LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text);
}
else
{
@@ -836,8 +807,11 @@ public:
{
if (tokens.size() < 2) return false;
S32 channel = tokens[0].asInteger();
- std::string mesg = tokens[1].asString();
- send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel);
+
+ // Send unescaped message, see EXT-6353.
+ std::string unescaped_mesg (LLURI::unescape(tokens[1].asString()));
+
+ send_chat_from_viewer(unescaped_mesg, CHAT_TYPE_NORMAL, channel);
return true;
}
};
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index d9a7403611..dd467d7978 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -70,7 +70,7 @@ public:
LLCtrlListInterface* getListInterface() { return (LLCtrlListInterface*)mList; };
virtual void showList();
virtual void hideList();
- virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
+ virtual BOOL handleKeyHere(KEY key, MASK mask);
S32 getCurrentIndex() const;
void onItemSelected(const LLSD& data);
@@ -117,9 +117,6 @@ public:
static void sendChatFromViewer(const std::string &utf8text, EChatType type, BOOL animate);
static void sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate);
- S32 getMinWidth() const;
- S32 getMaxWidth() const;
-
protected:
static BOOL matchChatTypeTrigger(const std::string& in_str, std::string* out_str);
static void onChatBoxKeystroke(LLLineEditor* caller, void* userdata);
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 3c390c0281..e199f9f180 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -34,6 +34,7 @@
#include "llnearbychathandler.h"
+#include "llbottomtray.h"
#include "llchatitemscontainerctrl.h"
#include "llnearbychat.h"
#include "llrecentpeople.h"
@@ -175,10 +176,11 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
if(m_active_toasts.size())
{
LLUUID fromID = notification["from_id"].asUUID(); // agent id or object id
+ std::string from = notification["from"].asString();
LLToast* toast = m_active_toasts[0];
LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel());
- if(panel && panel->messageID() == fromID && panel->canAddText())
+ if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText())
{
panel->addMessage(notification);
toast->reshapeToPanel();
@@ -266,24 +268,23 @@ void LLNearbyChatScreenChannel::showToastsBottom()
}
break;
}
- else
- {
- toast_rect = toast->getRect();
- toast_rect.setLeftTopAndSize(getRect().mLeft , toast_top, toast_rect.getWidth() ,toast_rect.getHeight());
-
- toast->setRect(toast_rect);
- toast->setIsHidden(false);
- toast->setVisible(TRUE);
+ bottom = toast_top - toast->getTopPad();
+ }
- if(!toast->hasFocus())
- {
- // Fixing Z-order of toasts (EXT-4862)
- // Next toast will be positioned under this one.
- gFloaterView->sendChildToBack(toast);
- }
-
- bottom = toast->getRect().mTop - toast->getTopPad();
- }
+ // use reverse order to provide correct z-order and avoid toast blinking
+ for(std::vector<LLToast*>::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it)
+ {
+ LLToast* toast = (*it);
+ S32 toast_top = bottom + toast->getTopPad();
+
+ toast_rect = toast->getRect();
+ toast_rect.setLeftTopAndSize(getRect().mLeft , toast_top, toast_rect.getWidth() ,toast_rect.getHeight());
+
+ toast->setRect(toast_rect);
+ toast->setIsHidden(false);
+ toast->setVisible(TRUE);
+
+ bottom = toast->getRect().mBottom - margin;
}
}
@@ -319,9 +320,9 @@ LLNearbyChatHandler::~LLNearbyChatHandler()
void LLNearbyChatHandler::initChannel()
{
LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
+ LLView* chat_box = LLBottomTray::getInstance()->getChildView("chat_box");
S32 channel_right_bound = nearby_chat->getRect().mRight;
- S32 channel_width = nearby_chat->getRect().mRight;
- mChannel->init(channel_right_bound - channel_width, channel_right_bound);
+ mChannel->init(chat_box->getRect().mLeft, channel_right_bound);
}
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 234fe13217..a8dee8a24a 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -49,6 +49,7 @@
// Viewer includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llappviewer.h" // for gDisconnected
#include "llcallingcard.h" // LLAvatarTracker
#include "lltracker.h"
@@ -87,7 +88,7 @@ LLNetMap::LLNetMap (const Params & p)
mCurPanX(0.f),
mCurPanY(0.f),
mUpdateNow(FALSE),
- mObjectImageCenterGlobal( gAgent.getCameraPositionGlobal() ),
+ mObjectImageCenterGlobal( gAgentCamera.getCameraPositionGlobal() ),
mObjectRawImagep(),
mObjectImagep(),
mClosestAgentToCursor(),
@@ -153,6 +154,18 @@ void LLNetMap::draw()
// Prepare a scissor region
F32 rotation = 0;
+ gGL.pushMatrix();
+ gGL.pushUIMatrix();
+
+ LLVector3 offset = gGL.getUITranslation();
+ LLVector3 scale = gGL.getUIScale();
+
+ glLoadIdentity();
+ gGL.loadUIIdentity();
+
+ glScalef(scale.mV[0], scale.mV[1], scale.mV[2]);
+ gGL.translatef(offset.mV[0], offset.mV[1], offset.mV[2]);
+
{
LLLocalClipRect clip(getLocalRect());
{
@@ -191,7 +204,7 @@ void LLNetMap::draw()
LLViewerRegion* regionp = *iter;
// Find x and y position relative to camera's center.
LLVector3 origin_agent = regionp->getOriginAgent();
- LLVector3 rel_region_pos = origin_agent - gAgent.getCameraPositionAgent();
+ LLVector3 rel_region_pos = origin_agent - gAgentCamera.getCameraPositionAgent();
F32 relative_x = (rel_region_pos.mV[0] / region_width) * mScale;
F32 relative_y = (rel_region_pos.mV[1] / region_width) * mScale;
@@ -252,7 +265,7 @@ void LLNetMap::draw()
LLVector3d old_center = mObjectImageCenterGlobal;
- LLVector3d new_center = gAgent.getCameraPositionGlobal();
+ LLVector3d new_center = gAgentCamera.getCameraPositionGlobal();
new_center.mdV[0] = (5.f/mObjectMapTPM)*floor(0.2f*mObjectMapTPM*new_center.mdV[0]);
new_center.mdV[1] = (5.f/mObjectMapTPM)*floor(0.2f*mObjectMapTPM*new_center.mdV[1]);
@@ -277,7 +290,7 @@ void LLNetMap::draw()
}
LLVector3 map_center_agent = gAgent.getPosAgentFromGlobal(mObjectImageCenterGlobal);
- map_center_agent -= gAgent.getCameraPositionAgent();
+ map_center_agent -= gAgentCamera.getCameraPositionAgent();
map_center_agent.mV[VX] *= mScale/region_width;
map_center_agent.mV[VY] *= mScale/region_width;
@@ -435,6 +448,9 @@ void LLNetMap::draw()
}
}
+ gGL.popMatrix();
+ gGL.popUIMatrix();
+
LLUICtrl::draw();
}
@@ -446,7 +462,7 @@ void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos )
{
- LLVector3d relative_pos_global = global_pos - gAgent.getCameraPositionGlobal();
+ LLVector3d relative_pos_global = global_pos - gAgentCamera.getCameraPositionGlobal();
LLVector3 pos_local;
pos_local.setVec(relative_pos_global); // convert to floats from doubles
@@ -514,7 +530,7 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y )
LLVector3d pos_global;
pos_global.setVec( pos_local );
- pos_global += gAgent.getCameraPositionGlobal();
+ pos_global += gAgentCamera.getCameraPositionGlobal();
return pos_global;
}
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 0d5c431d75..99a1fedcf3 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -42,6 +42,8 @@
#include "llinstantmessage.h"
#include "llnotificationptr.h"
+class LLIMFloater;
+
namespace LLNotificationsUI
{
// ENotificationType enumerates all possible types of notifications that could be met
@@ -122,9 +124,17 @@ protected:
class LLSysHandler : public LLEventHandler
{
public:
+ LLSysHandler();
virtual ~LLSysHandler() {};
virtual bool processNotification(const LLSD& notify)=0;
+
+protected :
+ static void init();
+ void removeExclusiveNotifications(const LLNotificationPtr& notif);
+
+ typedef std::list< std::set<std::string> > exclusive_notif_sets;
+ static exclusive_notif_sets sExclusiveNotificationGroups;
};
/**
@@ -171,6 +181,7 @@ public:
protected:
virtual void onDeleteToast(LLToast* toast);
+ virtual void onRejectToast(const LLUUID& id);
virtual void initChannel();
};
@@ -282,6 +293,11 @@ public:
static bool canAddNotifPanelToIM(const LLNotificationPtr& notification);
/**
+ * Checks whether notification can be used multiple times or not.
+ */
+ static bool isNotificationReusable(const LLNotificationPtr& notification);
+
+ /**
* Checks if passed notification can create IM session and be written into it.
*
* This method uses canLogToIM() & canSpawnIMSession().
@@ -289,6 +305,21 @@ public:
static bool canSpawnSessionAndLogToIM(const LLNotificationPtr& notification);
/**
+ * Checks if passed notification can create toast.
+ */
+ static bool canSpawnToast(const LLNotificationPtr& notification);
+
+ /**
+ * Determines whether IM floater is opened.
+ */
+ static bool isIMFloaterOpened(const LLNotificationPtr& notification);
+
+ /**
+ * Determines whether IM floater is focused.
+ */
+ static bool isIMFloaterFocused(const LLNotificationPtr& notification);
+
+ /**
* Writes notification message to IM session.
*/
static void logToIM(const EInstantMessage& session_type,
@@ -334,6 +365,29 @@ public:
* Adds notification panel to the IM floater.
*/
static void addNotifPanelToIM(const LLNotificationPtr& notification);
+
+ /**
+ * Updates messages of IM floater.
+ */
+ static void updateIMFLoaterMesages(const LLUUID& session_id);
+
+ /**
+ * Updates messages of visible IM floater.
+ */
+ static void updateVisibleIMFLoaterMesages(const LLNotificationPtr& notification);
+
+ /**
+ * Decrements counter of IM messages.
+ */
+ static void decIMMesageCounter(const LLNotificationPtr& notification);
+
+private:
+
+ /**
+ * Find IM floater based on "from_id"
+ */
+ static LLIMFloater* findIMFloater(const LLNotificationPtr& notification);
+
};
}
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 9de9998cbd..3f551f6b32 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -43,6 +43,75 @@
using namespace LLNotificationsUI;
+// static
+std::list< std::set<std::string> > LLSysHandler::sExclusiveNotificationGroups;
+
+// static
+void LLSysHandler::init()
+{
+ std::set<std::string> online_offline_group;
+ online_offline_group.insert("FriendOnline");
+ online_offline_group.insert("FriendOffline");
+
+ sExclusiveNotificationGroups.push_back(online_offline_group);
+}
+
+LLSysHandler::LLSysHandler()
+{
+ if(sExclusiveNotificationGroups.empty())
+ {
+ init();
+ }
+}
+
+void LLSysHandler::removeExclusiveNotifications(const LLNotificationPtr& notif)
+{
+ LLScreenChannel* channel = dynamic_cast<LLScreenChannel *>(mChannel);
+ if (channel == NULL)
+ {
+ return;
+ }
+
+ class ExclusiveMatcher: public LLScreenChannel::Matcher
+ {
+ public:
+ ExclusiveMatcher(const std::set<std::string>& excl_group,
+ const std::string& from_name) :
+ mExclGroup(excl_group), mFromName(from_name)
+ {
+ }
+ bool matches(const LLNotificationPtr notification) const
+ {
+ for (std::set<std::string>::const_iterator it = mExclGroup.begin(); it
+ != mExclGroup.end(); it++)
+ {
+ std::string from_name = LLHandlerUtil::getSubstitutionName(notification);
+ if (notification->getName() == *it && from_name == mFromName)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ private:
+ const std::set<std::string>& mExclGroup;
+ const std::string& mFromName;
+ };
+
+
+ for (exclusive_notif_sets::iterator it = sExclusiveNotificationGroups.begin(); it
+ != sExclusiveNotificationGroups.end(); it++)
+ {
+ std::set<std::string> group = *it;
+ std::set<std::string>::iterator g_it = group.find(notif->getName());
+ if (g_it != group.end())
+ {
+ channel->killMatchedToasts(ExclusiveMatcher(group,
+ LLHandlerUtil::getSubstitutionName(notif)));
+ }
+ }
+}
+
const static std::string GRANTED_MODIFY_RIGHTS("GrantedModifyRights"),
REVOKED_MODIFY_RIGHTS("RevokedModifyRights"), OBJECT_GIVE_ITEM(
"ObjectGiveItem"), OBJECT_GIVE_ITEM_UNKNOWN_USER(
@@ -58,7 +127,10 @@ const static std::string GRANTED_MODIFY_RIGHTS("GrantedModifyRights"),
FRIENDSHIP_DECLINED_BYME("FriendshipDeclinedByMe"),
FRIEND_ONLINE("FriendOnline"), FRIEND_OFFLINE("FriendOffline"),
SERVER_OBJECT_MESSAGE("ServerObjectMessage"),
- TELEPORT_OFFERED("TeleportOffered");
+ TELEPORT_OFFERED("TeleportOffered"),
+ TELEPORT_OFFER_SENT("TeleportOfferSent"),
+ IM_SYSTEM_MESSAGE_TIP("IMSystemMessageTip");
+
// static
bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
@@ -68,11 +140,16 @@ bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
|| PAYMENT_RECIVED == notification->getName()
|| OFFER_FRIENDSHIP == notification->getName()
|| FRIENDSHIP_OFFERED == notification->getName()
+ || FRIENDSHIP_ACCEPTED == notification->getName()
|| FRIENDSHIP_ACCEPTED_BYME == notification->getName()
|| FRIENDSHIP_DECLINED_BYME == notification->getName()
|| SERVER_OBJECT_MESSAGE == notification->getName()
|| INVENTORY_ACCEPTED == notification->getName()
- || INVENTORY_DECLINED == notification->getName();
+ || INVENTORY_DECLINED == notification->getName()
+ || USER_GIVE_ITEM == notification->getName()
+ || TELEPORT_OFFERED == notification->getName()
+ || TELEPORT_OFFER_SENT == notification->getName()
+ || IM_SYSTEM_MESSAGE_TIP == notification->getName();
}
// static
@@ -82,26 +159,33 @@ bool LLHandlerUtil::canLogToNearbyChat(const LLNotificationPtr& notification)
&& FRIEND_ONLINE != notification->getName()
&& FRIEND_OFFLINE != notification->getName()
&& INVENTORY_ACCEPTED != notification->getName()
- && INVENTORY_DECLINED != notification->getName();
+ && INVENTORY_DECLINED != notification->getName()
+ && IM_SYSTEM_MESSAGE_TIP != notification->getName();
}
// static
bool LLHandlerUtil::canSpawnIMSession(const LLNotificationPtr& notification)
{
return OFFER_FRIENDSHIP == notification->getName()
- || FRIENDSHIP_ACCEPTED == notification->getName()
|| USER_GIVE_ITEM == notification->getName()
- || INVENTORY_ACCEPTED == notification->getName()
- || INVENTORY_DECLINED == notification->getName();
+ || TELEPORT_OFFERED == notification->getName();
}
// static
bool LLHandlerUtil::canAddNotifPanelToIM(const LLNotificationPtr& notification)
{
return OFFER_FRIENDSHIP == notification->getName()
- || USER_GIVE_ITEM == notification->getName();
+ || USER_GIVE_ITEM == notification->getName()
+ || TELEPORT_OFFERED == notification->getName();
}
+// static
+bool LLHandlerUtil::isNotificationReusable(const LLNotificationPtr& notification)
+{
+ return OFFER_FRIENDSHIP == notification->getName()
+ || USER_GIVE_ITEM == notification->getName()
+ || TELEPORT_OFFERED == notification->getName();
+}
// static
bool LLHandlerUtil::canSpawnSessionAndLogToIM(const LLNotificationPtr& notification)
@@ -110,18 +194,91 @@ bool LLHandlerUtil::canSpawnSessionAndLogToIM(const LLNotificationPtr& notificat
}
// static
+bool LLHandlerUtil::canSpawnToast(const LLNotificationPtr& notification)
+{
+ if(INVENTORY_DECLINED == notification->getName()
+ || INVENTORY_ACCEPTED == notification->getName())
+ {
+ // return false for inventory accepted/declined notifications if respective IM window is open (EXT-5909)
+ return ! isIMFloaterOpened(notification);
+ }
+
+ if(FRIENDSHIP_ACCEPTED == notification->getName())
+ {
+ // don't show FRIENDSHIP_ACCEPTED if IM window is opened and focused - EXT-6441
+ return ! isIMFloaterFocused(notification);
+ }
+
+ if(OFFER_FRIENDSHIP == notification->getName()
+ || USER_GIVE_ITEM == notification->getName()
+ || TELEPORT_OFFERED == notification->getName())
+ {
+ // When ANY offer arrives, show toast, unless IM window is already open - EXT-5904
+ return ! isIMFloaterOpened(notification);
+ }
+
+ return true;
+}
+
+// static
+LLIMFloater* LLHandlerUtil::findIMFloater(const LLNotificationPtr& notification)
+{
+ LLUUID from_id = notification->getPayload()["from_id"];
+ LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, from_id);
+ return LLFloaterReg::findTypedInstance<LLIMFloater>("impanel", session_id);
+}
+
+// static
+bool LLHandlerUtil::isIMFloaterOpened(const LLNotificationPtr& notification)
+{
+ bool res = false;
+
+ LLIMFloater* im_floater = findIMFloater(notification);
+ if (im_floater != NULL)
+ {
+ res = im_floater->getVisible() == TRUE;
+ }
+
+ return res;
+}
+
+bool LLHandlerUtil::isIMFloaterFocused(const LLNotificationPtr& notification)
+{
+ bool res = false;
+
+ LLIMFloater* im_floater = findIMFloater(notification);
+ if (im_floater != NULL)
+ {
+ res = im_floater->hasFocus() == TRUE;
+ }
+
+ return res;
+}
+
+// static
void LLHandlerUtil::logToIM(const EInstantMessage& session_type,
const std::string& session_name, const std::string& from_name,
const std::string& message, const LLUUID& session_owner_id,
const LLUUID& from_id)
{
+ std::string from = from_name;
+ if (from_name.empty())
+ {
+ from = SYSTEM_FROM;
+ }
+
LLUUID session_id = LLIMMgr::computeSessionID(session_type,
session_owner_id);
LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(
session_id);
if (session == NULL)
{
- LLIMModel::instance().logToFile(session_name, from_name, from_id, message);
+ // replace interactive system message marker with correct from string value
+ if (INTERACTIVE_SYSTEM_FROM == from_name)
+ {
+ from = SYSTEM_FROM;
+ }
+ LLIMModel::instance().logToFile(session_name, from, from_id, message);
}
else
{
@@ -132,8 +289,16 @@ void LLHandlerUtil::logToIM(const EInstantMessage& session_type,
// set searched session as active to avoid IM toast popup
LLIMModel::instance().setActiveSessionID(session_id);
- LLIMModel::instance().addMessage(session_id, from_name, from_id,
+ S32 unread = session->mNumUnread;
+ S32 participant_unread = session->mParticipantUnreadMessageCount;
+ LLIMModel::instance().addMessageSilently(session_id, from, from_id,
message);
+ // we shouldn't increment counters when logging, so restore them
+ session->mNumUnread = unread;
+ session->mParticipantUnreadMessageCount = participant_unread;
+
+ // update IM floater messages
+ updateIMFLoaterMesages(session_id);
// restore active session id
if (active_session_id.isNull())
@@ -158,7 +323,7 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi
{
const std::string name = LLHandlerUtil::getSubstitutionName(notification);
- std::string session_name = notification->getPayload().has(
+ const std::string& session_name = notification->getPayload().has(
"SESSION_NAME") ? notification->getPayload()["SESSION_NAME"].asString() : name;
// don't create IM p2p session with objects, it's necessary condition to log
@@ -167,12 +332,6 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi
{
LLUUID from_id = notification->getPayload()["from_id"];
- //*HACK for ServerObjectMessage the sesson name is really weird, see EXT-4779
- if (SERVER_OBJECT_MESSAGE == notification->getName())
- {
- session_name = "chat";
- }
-
//there still appears a log history file with weird name " .txt"
if (" " == session_name || "{waiting}" == session_name || "{nobody}" == session_name)
{
@@ -181,13 +340,13 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi
if(to_file_only)
{
- logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(),
+ logToIM(IM_NOTHING_SPECIAL, session_name, "", notification->getMessage(),
LLUUID(), LLUUID());
}
else
{
- logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(),
- from_id, from_id);
+ logToIM(IM_NOTHING_SPECIAL, session_name, INTERACTIVE_SYSTEM_FROM, notification->getMessage(),
+ from_id, LLUUID());
}
}
}
@@ -227,6 +386,7 @@ void LLHandlerUtil::logToNearbyChat(const LLNotificationPtr& notification, EChat
LLChat chat_msg(notification->getMessage());
chat_msg.mSourceType = type;
chat_msg.mFromName = SYSTEM_FROM;
+ chat_msg.mFromID = LLUUID::null;
nearby_chat->addMessage(chat_msg);
}
}
@@ -249,9 +409,24 @@ LLUUID LLHandlerUtil::spawnIMSession(const std::string& name, const LLUUID& from
// static
std::string LLHandlerUtil::getSubstitutionName(const LLNotificationPtr& notification)
{
- return notification->getSubstitutions().has("NAME")
+ std::string res = notification->getSubstitutions().has("NAME")
? notification->getSubstitutions()["NAME"]
: notification->getSubstitutions()["[NAME]"];
+ if (res.empty())
+ {
+ LLUUID from_id = notification->getPayload()["FROM_ID"];
+
+ //*TODO all keys everywhere should be made of the same case, there is a mix of keys in lower and upper cases
+ if (from_id.isNull())
+ {
+ from_id = notification->getPayload()["from_id"];
+ }
+ if(!gCacheName->getFullName(from_id, res))
+ {
+ res = "";
+ }
+ }
+ return res;
}
// static
@@ -268,11 +443,60 @@ void LLHandlerUtil::addNotifPanelToIM(const LLNotificationPtr& notification)
LLSD offer;
offer["notification_id"] = notification->getID();
- offer["from_id"] = notification->getPayload()["from_id"];
- offer["from"] = name;
- offer["time"] = LLLogChat::timestamp(true);
+ offer["from"] = SYSTEM_FROM;
+ offer["time"] = LLLogChat::timestamp(false);
offer["index"] = (LLSD::Integer)session->mMsgs.size();
session->mMsgs.push_front(offer);
- LLIMFloater::show(session_id);
+
+ // update IM floater and counters
+ LLSD arg;
+ arg["session_id"] = session_id;
+ arg["num_unread"] = ++(session->mNumUnread);
+ arg["participant_unread"] = ++(session->mParticipantUnreadMessageCount);
+ LLIMModel::getInstance()->mNewMsgSignal(arg);
+}
+
+// static
+void LLHandlerUtil::updateIMFLoaterMesages(const LLUUID& session_id)
+{
+ LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
+ if (im_floater != NULL && im_floater->getVisible())
+ {
+ im_floater->updateMessages();
+ }
+}
+
+// static
+void LLHandlerUtil::updateVisibleIMFLoaterMesages(const LLNotificationPtr& notification)
+{
+ const std::string name = LLHandlerUtil::getSubstitutionName(notification);
+ LLUUID from_id = notification->getPayload()["from_id"];
+ LLUUID session_id = spawnIMSession(name, from_id);
+
+ updateIMFLoaterMesages(session_id);
+}
+
+// static
+void LLHandlerUtil::decIMMesageCounter(const LLNotificationPtr& notification)
+{
+ const std::string name = LLHandlerUtil::getSubstitutionName(notification);
+ LLUUID from_id = notification->getPayload()["from_id"];
+ LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, from_id);
+
+ LLIMModel::LLIMSession * session = LLIMModel::getInstance()->findIMSession(
+ session_id);
+
+ if (session == NULL)
+ {
+ return;
+ }
+
+ LLSD arg;
+ arg["session_id"] = session_id;
+ session->mNumUnread--;
+ arg["num_unread"] = session->mNumUnread;
+ session->mParticipantUnreadMessageCount--;
+ arg["participant_unread"] = session->mParticipantUnreadMessageCount;
+ LLIMModel::getInstance()->mNewMsgSignal(arg);
}
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index 8ebd5de258..c5960a9040 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -103,6 +103,8 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
}
else
{
+ notification->setReusable(LLHandlerUtil::isNotificationReusable(notification));
+
LLUUID session_id;
if (LLHandlerUtil::canSpawnIMSession(notification))
{
@@ -113,35 +115,54 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
session_id = LLHandlerUtil::spawnIMSession(name, from_id);
}
- if (LLHandlerUtil::canAddNotifPanelToIM(notification))
+ bool show_toast = LLHandlerUtil::canSpawnToast(notification);
+ bool add_notid_to_im = LLHandlerUtil::canAddNotifPanelToIM(notification);
+ if (add_notid_to_im)
{
LLHandlerUtil::addNotifPanelToIM(notification);
- LLHandlerUtil::logToIMP2P(notification, true);
}
- else if (notification->getPayload().has("SUPPRESS_TOAST")
+
+ if (notification->getPayload().has("SUPPRESS_TOAST")
&& notification->getPayload()["SUPPRESS_TOAST"])
{
- LLHandlerUtil::logToIMP2P(notification);
LLNotificationsUtil::cancel(notification);
}
- else
+ else if(show_toast)
{
LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
-
+ // don't close notification on panel destroy since it will be used by IM floater
+ notify_box->setCloseNotificationOnDestroy(!add_notid_to_im);
LLToast::Params p;
p.notif_id = notification->getID();
p.notification = notification;
p.panel = notify_box;
p.on_delete_toast = boost::bind(&LLOfferHandler::onDeleteToast, this, _1);
+ // we not save offer notifications to the syswell floater that should be added to the IM floater
+ p.can_be_stored = !add_notid_to_im;
LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
if(channel)
channel->addToast(p);
- LLHandlerUtil::logToIMP2P(notification);
+ // if we not add notification to IM - add it to notification well
+ if (!add_notid_to_im)
+ {
+ // send a signal to the counter manager
+ mNewNotificationSignal();
+ }
+ }
- // send a signal to the counter manager
- mNewNotificationSignal();
+ if (LLHandlerUtil::canLogToIM(notification))
+ {
+ // log only to file if notif panel can be embedded to IM and IM is opened
+ if (add_notid_to_im && LLHandlerUtil::isIMFloaterOpened(notification))
+ {
+ LLHandlerUtil::logToIMP2P(notification, true);
+ }
+ else
+ {
+ LLHandlerUtil::logToIMP2P(notification);
+ }
}
}
}
@@ -155,6 +176,11 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
}
else
{
+ if (LLHandlerUtil::canAddNotifPanelToIM(notification)
+ && !LLHandlerUtil::isIMFloaterOpened(notification))
+ {
+ LLHandlerUtil::decIMMesageCounter(notification);
+ }
mChannel->killToastByNotificationID(notification->getID());
}
}
@@ -166,8 +192,11 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
void LLOfferHandler::onDeleteToast(LLToast* toast)
{
- // send a signal to the counter manager
- mDelNotificationSignal();
+ if (!LLHandlerUtil::canAddNotifPanelToIM(toast->getNotification()))
+ {
+ // send a signal to the counter manager
+ mDelNotificationSignal();
+ }
// send a signal to a listener to let him perform some action
// in this case listener is a SysWellWindow and it will remove a corresponding item from its list
@@ -181,7 +210,9 @@ void LLOfferHandler::onRejectToast(LLUUID& id)
if (notification
&& LLNotificationManager::getInstance()->getHandlerForNotification(
- notification->getType()) == this)
+ notification->getType()) == this
+ // don't delete notification since it may be used by IM floater
+ && !LLHandlerUtil::canAddNotifPanelToIM(notification))
{
LLNotifications::instance().cancel(notification);
}
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
index be76959d07..afc00bf7ef 100644
--- a/indra/newview/llnotificationtiphandler.cpp
+++ b/indra/newview/llnotificationtiphandler.cpp
@@ -40,6 +40,7 @@
#include "lltoastnotifypanel.h"
#include "llviewercontrol.h"
#include "llviewerwindow.h"
+#include "llnotificationmanager.h"
using namespace LLNotificationsUI;
@@ -70,8 +71,8 @@ public:
p.notification->getResponseTemplate()));
}
- // set line max count to 2 in case of a very long name
- snapToMessageHeight(getChild<LLTextBox>("message"), 2);
+ // set line max count to 3 in case of a very long name
+ snapToMessageHeight(getChild<LLTextBox>("message"), 3);
}
};
@@ -82,6 +83,10 @@ LLTipHandler::LLTipHandler(e_notification_type type, const LLSD& id)
// Getting a Channel for our notifications
mChannel = LLChannelManager::getInstance()->createNotificationChannel();
+
+ LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+ if(channel)
+ channel->setOnRejectToastCallback(boost::bind(&LLTipHandler::onRejectToast, this, _1));
}
//--------------------------------------------------------------------------
@@ -145,6 +150,12 @@ bool LLTipHandler::processNotification(const LLSD& notify)
LLHandlerUtil::spawnIMSession(name, from_id);
}
+ // don't spawn toast for inventory accepted/declined offers if respective IM window is open (EXT-5909)
+ if (!LLHandlerUtil::canSpawnToast(notification))
+ {
+ return true;
+ }
+
LLToastPanel* notify_box = NULL;
if("FriendOffline" == notification->getName() || "FriendOnline" == notification->getName())
{
@@ -167,6 +178,8 @@ bool LLTipHandler::processNotification(const LLSD& notify)
p.is_tip = true;
p.can_be_stored = false;
+ removeExclusiveNotifications(notification);
+
LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
if(channel)
channel->addToast(p);
@@ -185,4 +198,14 @@ void LLTipHandler::onDeleteToast(LLToast* toast)
//--------------------------------------------------------------------------
+void LLTipHandler::onRejectToast(const LLUUID& id)
+{
+ LLNotificationPtr notification = LLNotifications::instance().find(id);
+ if (notification
+ && LLNotificationManager::getInstance()->getHandlerForNotification(
+ notification->getType()) == this)
+ {
+ LLNotifications::instance().cancel(notification);
+ }
+}
diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp
index 9857e37bc3..d6d48a4ead 100644
--- a/indra/newview/lloutputmonitorctrl.cpp
+++ b/indra/newview/lloutputmonitorctrl.cpp
@@ -247,7 +247,7 @@ void LLOutputMonitorCtrl::draw()
gl_rect_2d(0, monh, monw, 0, sColorBound, FALSE);
}
-void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id)
+void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id, const LLUUID& session_id/* = LLUUID::null*/)
{
if (speaker_id.isNull() && mSpeakerId.notNull())
{
@@ -263,7 +263,7 @@ void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id)
}
mSpeakerId = speaker_id;
- LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this);
+ LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this, session_id);
//mute management
if (mAutoUpdate)
@@ -303,7 +303,7 @@ void LLOutputMonitorCtrl::switchIndicator(bool switch_on)
}
// otherwise remember necessary state and mark itself as dirty.
- // State will be applied i next draw when parents chain became visible.
+ // State will be applied in next draw when parents chain becomes visible.
else
{
LL_DEBUGS("SpeakingIndicator") << "Indicator is not in visible chain, parent won't be notified: " << mSpeakerId << LL_ENDL;
@@ -317,7 +317,7 @@ void LLOutputMonitorCtrl::switchIndicator(bool switch_on)
//////////////////////////////////////////////////////////////////////////
void LLOutputMonitorCtrl::notifyParentVisibilityChanged()
{
- LL_DEBUGS("SpeakingIndicator") << "Notify parent that visibility was changed: " << mSpeakerId << " ,new_visibility: " << getVisible() << LL_ENDL;
+ LL_DEBUGS("SpeakingIndicator") << "Notify parent that visibility was changed: " << mSpeakerId << ", new_visibility: " << getVisible() << LL_ENDL;
LLSD params = LLSD().with("visibility_changed", getVisible());
diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h
index 2bbfa251e9..b7454a5066 100644
--- a/indra/newview/lloutputmonitorctrl.h
+++ b/indra/newview/lloutputmonitorctrl.h
@@ -86,7 +86,15 @@ public:
void setIsTalking(bool val) { mIsTalking = val; }
- void setSpeakerId(const LLUUID& speaker_id);
+ /**
+ * Sets avatar UUID to interact with voice channel.
+ *
+ * @param speaker_id LLUUID of an avatar whose voice level is displayed.
+ * @param session_id session UUID for which indicator should be shown only. Passed to LLSpeakingIndicatorManager
+ * If this parameter is set registered indicator will be shown only in voice channel
+ * which has the same session id (EXT-5562).
+ */
+ void setSpeakerId(const LLUUID& speaker_id, const LLUUID& session_id = LLUUID::null);
//called by mute list
virtual void onChange();
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 6b07409676..a0ba2f739b 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -47,8 +47,6 @@
#include "lltooldraganddrop.h"
#include "llscrollcontainer.h"
#include "llavatariconctrl.h"
-#include "llweb.h"
-#include "llfloaterworldmap.h"
#include "llfloaterreg.h"
#include "llnotificationsutil.h"
#include "llvoiceclient.h"
@@ -449,10 +447,7 @@ void LLPanelProfileTab::scrollToTop()
void LLPanelProfileTab::onMapButtonClick()
{
- std::string name;
- gCacheName->getFullName(getAvatarId(), name);
- gFloaterWorldMap->trackAvatar(getAvatarId(), name);
- LLFloaterReg::showInstance("world_map");
+ LLAvatarActions::showOnMap(getAvatarId());
}
void LLPanelProfileTab::updateButtons()
@@ -490,7 +485,6 @@ LLPanelAvatarProfile::LLPanelAvatarProfile()
BOOL LLPanelAvatarProfile::postBuild()
{
- childSetActionTextbox("homepage_edit", boost::bind(&LLPanelAvatarProfile::onHomepageTextboxClicked, this));
childSetCommitCallback("add_friend",(boost::bind(&LLPanelAvatarProfile::onAddFriendButtonClick,this)),NULL);
childSetCommitCallback("im",(boost::bind(&LLPanelAvatarProfile::onIMButtonClick,this)),NULL);
childSetCommitCallback("call",(boost::bind(&LLPanelAvatarProfile::onCallButtonClick,this)),NULL);
@@ -501,6 +495,7 @@ BOOL LLPanelAvatarProfile::postBuild()
&LLPanelAvatarProfile::onMapButtonClick, this)), NULL);
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+ registrar.add("Profile.ShowOnMap", boost::bind(&LLPanelAvatarProfile::onMapButtonClick, this));
registrar.add("Profile.Pay", boost::bind(&LLPanelAvatarProfile::pay, this));
registrar.add("Profile.Share", boost::bind(&LLPanelAvatarProfile::share, this));
registrar.add("Profile.BlockUnblock", boost::bind(&LLPanelAvatarProfile::toggleBlock, this));
@@ -510,6 +505,7 @@ BOOL LLPanelAvatarProfile::postBuild()
registrar.add("Profile.CSR", boost::bind(&LLPanelAvatarProfile::csr, this));
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable;
+ enable.add("Profile.EnableShowOnMap", boost::bind(&LLPanelAvatarProfile::enableShowOnMap, this));
enable.add("Profile.EnableGod", boost::bind(&enable_god));
enable.add("Profile.EnableBlock", boost::bind(&LLPanelAvatarProfile::enableBlock, this));
enable.add("Profile.EnableUnblock", boost::bind(&LLPanelAvatarProfile::enableUnblock, this));
@@ -704,6 +700,15 @@ void LLPanelAvatarProfile::toggleBlock()
LLAvatarActions::toggleBlock(getAvatarId());
}
+bool LLPanelAvatarProfile::enableShowOnMap()
+{
+ bool is_buddy_online = LLAvatarTracker::instance().isBuddyOnline(getAvatarId());
+
+ bool enable_map_btn = (is_buddy_online && is_agent_mappable(getAvatarId()))
+ || gAgent.isGodlike();
+ return enable_map_btn;
+}
+
bool LLPanelAvatarProfile::enableBlock()
{
return LLAvatarActions::canBlock(getAvatarId()) && !LLAvatarActions::isBlocked(getAvatarId());
@@ -736,20 +741,6 @@ void LLPanelAvatarProfile::csr()
LLAvatarActions::csr(getAvatarId(), name);
}
-void LLPanelAvatarProfile::onUrlTextboxClicked(const std::string& url)
-{
- LLWeb::loadURL(url);
-}
-
-void LLPanelAvatarProfile::onHomepageTextboxClicked()
-{
- std::string url = childGetValue("homepage_edit").asString();
- if(!url.empty())
- {
- onUrlTextboxClicked(url);
- }
-}
-
void LLPanelAvatarProfile::onAddFriendButtonClick()
{
LLAvatarActions::requestFriendshipDialog(getAvatarId());
diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h
index babbe534b4..bb8df2ff9c 100644
--- a/indra/newview/llpanelavatar.h
+++ b/indra/newview/llpanelavatar.h
@@ -202,13 +202,12 @@ protected:
void unfreeze();
void csr();
+ bool enableShowOnMap();
bool enableBlock();
bool enableUnblock();
bool enableGod();
- void onUrlTextboxClicked(const std::string& url);
- void onHomepageTextboxClicked();
void onAddFriendButtonClick();
void onIMButtonClick();
void onCallButtonClick();
diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp
index 362657a458..c72f0f8012 100644
--- a/indra/newview/llpanelblockedlist.cpp
+++ b/indra/newview/llpanelblockedlist.cpp
@@ -119,8 +119,13 @@ void LLPanelBlockedList::refreshBlockedList()
std::vector<LLMute>::iterator it;
for (it = mutes.begin(); it != mutes.end(); ++it)
{
- std::string display_name = it->getDisplayName();
- mBlockedList->addStringUUIDItem(display_name, it->mID, ADD_BOTTOM, TRUE);
+ LLScrollListItem::Params item_p;
+ item_p.enabled(TRUE);
+ item_p.value(it->mID); // link UUID of blocked item with ScrollListItem
+ item_p.columns.add().column("item_name").value(it->mName);//.type("text");
+ item_p.columns.add().column("item_type").value(it->getDisplayType());//.type("text").width(111);
+
+ mBlockedList->addRow(item_p, ADD_BOTTOM);
}
}
@@ -145,9 +150,7 @@ void LLPanelBlockedList::onRemoveBtnClick()
{
std::string name = mBlockedList->getSelectedItemLabel();
LLUUID id = mBlockedList->getStringUUIDSelectedItem();
- LLMute mute(id);
- mute.setFromDisplayName(name);
- // now mute.mName has the suffix trimmed off
+ LLMute mute(id, name);
S32 last_selected = mBlockedList->getFirstSelectedIndex();
if (LLMuteList::getInstance()->remove(mute))
@@ -183,7 +186,7 @@ void LLPanelBlockedList::onBlockByNameClick()
LLFloaterGetBlockedObjectName::show(&LLPanelBlockedList::callbackBlockByName);
}
-void LLPanelBlockedList::callbackBlockPicked(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
+void LLPanelBlockedList::callbackBlockPicked(const std::vector<std::string>& names, const uuid_vec_t& ids)
{
if (names.empty() || ids.empty()) return;
LLMute mute(ids[0], names[0], LLMute::AGENT);
diff --git a/indra/newview/llpanelblockedlist.h b/indra/newview/llpanelblockedlist.h
index 1ef16a02f4..a100577e43 100644
--- a/indra/newview/llpanelblockedlist.h
+++ b/indra/newview/llpanelblockedlist.h
@@ -78,7 +78,7 @@ private:
void onPickBtnClick();
void onBlockByNameClick();
- void callbackBlockPicked(const std::vector<std::string>& names, const std::vector<LLUUID>& ids);
+ void callbackBlockPicked(const std::vector<std::string>& names, const uuid_vec_t& ids);
static void callbackBlockByName(const std::string& text);
private:
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index 2a794a06b5..70a7bf644b 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -41,6 +41,7 @@
#include "lldir.h"
#include "lldispatcher.h"
#include "llfloaterreg.h"
+#include "llhttpclient.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
#include "llparcel.h"
@@ -83,6 +84,7 @@ const S32 DECLINE_TO_STATE = 0;
//static
std::list<LLPanelClassified*> LLPanelClassified::sAllPanels;
+std::list<LLPanelClassifiedInfo*> LLPanelClassifiedInfo::sAllPanels;
// "classifiedclickthrough"
// strings[0] = classified_id
@@ -103,15 +105,32 @@ public:
S32 teleport_clicks = atoi(strings[1].c_str());
S32 map_clicks = atoi(strings[2].c_str());
S32 profile_clicks = atoi(strings[3].c_str());
- LLPanelClassified::setClickThrough(classified_id, teleport_clicks,
- map_clicks,
- profile_clicks,
- false);
+
+ LLPanelClassifiedInfo::setClickThrough(
+ classified_id, teleport_clicks, map_clicks, profile_clicks, false);
+
return true;
}
};
static LLDispatchClassifiedClickThrough sClassifiedClickThrough;
+// Just to debug errors. Can be thrown away later.
+class LLClassifiedClickMessageResponder : public LLHTTPClient::Responder
+{
+ LOG_CLASS(LLClassifiedClickMessageResponder);
+
+public:
+ // If we get back an error (not found, etc...), handle it here
+ virtual void errorWithContent(
+ U32 status,
+ const std::string& reason,
+ const LLSD& content)
+ {
+ llwarns << "Sending click message failed (" << status << "): [" << reason << "]" << llendl;
+ llwarns << "Content: [" << content << "]" << llendl;
+ }
+};
+
/* Re-expose this if we need to have classified ad HTML detail
pages. JC
@@ -497,7 +516,7 @@ void LLPanelClassified::sendClassifiedInfoRequest()
if (!url.empty())
{
llinfos << "Classified stat request via capability" << llendl;
- LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(((LLView*)this)->getHandle(), mClassifiedID));
+ LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(mClassifiedID));
}
}
}
@@ -1153,11 +1172,25 @@ void LLPanelClassified::setDefaultAccessCombo()
LLPanelClassifiedInfo::LLPanelClassifiedInfo()
: LLPanel()
, mInfoLoaded(false)
-{
+ , mScrollingPanel(NULL)
+ , mScrollContainer(NULL)
+ , mScrollingPanelMinHeight(0)
+ , mScrollingPanelWidth(0)
+ , mSnapshotStreched(false)
+ , mTeleportClicksOld(0)
+ , mMapClicksOld(0)
+ , mProfileClicksOld(0)
+ , mTeleportClicksNew(0)
+ , mMapClicksNew(0)
+ , mProfileClicksNew(0)
+ , mSnapshotCtrl(NULL)
+{
+ sAllPanels.push_back(this);
}
LLPanelClassifiedInfo::~LLPanelClassifiedInfo()
{
+ sAllPanels.remove(this);
}
// static
@@ -1180,6 +1213,9 @@ BOOL LLPanelClassifiedInfo::postBuild()
mScrollingPanelMinHeight = mScrollContainer->getScrolledViewRect().getHeight();
mScrollingPanelWidth = mScrollingPanel->getRect().getWidth();
+ mSnapshotCtrl = getChild<LLTextureCtrl>("classified_snapshot");
+ mSnapshotRect = getDefaultSnapshotRect();
+
return TRUE;
}
@@ -1211,11 +1247,14 @@ void LLPanelClassifiedInfo::reshape(S32 width, S32 height, BOOL called_from_pare
{
mScrollingPanel->reshape(mScrollingPanelWidth + scrollbar_size, scroll_height);
}
+
+ mSnapshotRect = getDefaultSnapshotRect();
+ stretchSnapshot();
}
void LLPanelClassifiedInfo::onOpen(const LLSD& key)
{
- LLUUID avatar_id = key["avatar_id"];
+ LLUUID avatar_id = key["classified_creator_id"];
if(avatar_id.isNull())
{
return;
@@ -1230,14 +1269,35 @@ void LLPanelClassifiedInfo::onOpen(const LLSD& key)
resetData();
resetControls();
+ scrollToTop();
setClassifiedId(key["classified_id"]);
- setClassifiedName(key["name"]);
- setDescription(key["desc"]);
- setSnapshotId(key["snapshot_id"]);
+ setClassifiedName(key["classified_name"]);
+ setDescription(key["classified_desc"]);
+ setSnapshotId(key["classified_snapshot_id"]);
+ setFromSearch(key["from_search"]);
+
+ llinfos << "Opening classified [" << getClassifiedName() << "] (" << getClassifiedId() << ")" << llendl;
LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
+ gGenericDispatcher.addHandler("classifiedclickthrough", &sClassifiedClickThrough);
+
+ // While we're at it let's get the stats from the new table if that
+ // capability exists.
+ std::string url = gAgent.getRegion()->getCapability("SearchStatRequest");
+ if (!url.empty())
+ {
+ llinfos << "Classified stat request via capability" << llendl;
+ LLSD body;
+ body["classified_id"] = getClassifiedId();
+ LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(getClassifiedId()));
+ }
+
+ // Update classified click stats.
+ // *TODO: Should we do this when opening not from search?
+ sendClickMessage("profile");
+
setInfoLoaded(false);
}
@@ -1253,20 +1313,32 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t
setSnapshotId(c_info->snapshot_id);
setParcelId(c_info->parcel_id);
setPosGlobal(c_info->pos_global);
+ setSimName(c_info->sim_name);
+
setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global));
childSetValue("category", LLClassifiedInfo::sCategories[c_info->category]);
static std::string mature_str = getString("type_mature");
static std::string pg_str = getString("type_pg");
static LLUIString price_str = getString("l$_price");
+ static std::string date_fmt = getString("date_fmt");
bool mature = is_cf_mature(c_info->flags);
childSetValue("content_type", mature ? mature_str : pg_str);
- childSetValue("auto_renew", is_cf_auto_renew(c_info->flags));
+ getChild<LLIconCtrl>("content_type_moderate")->setVisible(mature);
+ getChild<LLIconCtrl>("content_type_general")->setVisible(!mature);
+
+ std::string auto_renew_str = is_cf_auto_renew(c_info->flags) ?
+ getString("auto_renew_on") : getString("auto_renew_off");
+ childSetValue("auto_renew", auto_renew_str);
price_str.setArg("[PRICE]", llformat("%d", c_info->price_for_listing));
childSetValue("price_for_listing", LLSD(price_str));
+ std::string date_str = date_fmt;
+ LLStringUtil::format(date_str, LLSD().with("datetime", (S32) c_info->creation_date));
+ childSetText("creation_date", date_str);
+
setInfoLoaded(true);
}
}
@@ -1279,23 +1351,38 @@ void LLPanelClassifiedInfo::resetData()
setClassifiedLocation(LLStringUtil::null);
setClassifiedId(LLUUID::null);
setSnapshotId(LLUUID::null);
- mPosGlobal.clearVec();
- childSetValue("category", LLStringUtil::null);
- childSetValue("content_type", LLStringUtil::null);
+ setPosGlobal(LLVector3d::zero);
+ setParcelId(LLUUID::null);
+ setSimName(LLStringUtil::null);
+ setFromSearch(false);
+
+ // reset click stats
+ mTeleportClicksOld = 0;
+ mMapClicksOld = 0;
+ mProfileClicksOld = 0;
+ mTeleportClicksNew = 0;
+ mMapClicksNew = 0;
+ mProfileClicksNew = 0;
+
+ childSetText("category", LLStringUtil::null);
+ childSetText("content_type", LLStringUtil::null);
+ childSetText("click_through_text", LLStringUtil::null);
+ childSetText("price_for_listing", LLStringUtil::null);
+ childSetText("auto_renew", LLStringUtil::null);
+ childSetText("creation_date", LLStringUtil::null);
+ childSetText("click_through_text", LLStringUtil::null);
+ getChild<LLIconCtrl>("content_type_moderate")->setVisible(FALSE);
+ getChild<LLIconCtrl>("content_type_general")->setVisible(FALSE);
}
void LLPanelClassifiedInfo::resetControls()
{
- if(getAvatarId() == gAgent.getID())
- {
- childSetEnabled("edit_btn", TRUE);
- childSetVisible("edit_btn", TRUE);
- }
- else
- {
- childSetEnabled("edit_btn", FALSE);
- childSetVisible("edit_btn", FALSE);
- }
+ bool is_self = getAvatarId() == gAgent.getID();
+
+ childSetEnabled("edit_btn", is_self);
+ childSetVisible("edit_btn", is_self);
+ childSetVisible("price_layout_panel", is_self);
+ childSetVisible("clickthrough_layout_panel", is_self);
}
void LLPanelClassifiedInfo::setClassifiedName(const std::string& name)
@@ -1323,9 +1410,27 @@ void LLPanelClassifiedInfo::setClassifiedLocation(const std::string& location)
childSetValue("classified_location", location);
}
+std::string LLPanelClassifiedInfo::getClassifiedLocation()
+{
+ return childGetValue("classified_location").asString();
+}
+
void LLPanelClassifiedInfo::setSnapshotId(const LLUUID& id)
{
- childSetValue("classified_snapshot", id);
+ mSnapshotCtrl->setValue(id);
+ mSnapshotStreched = false;
+}
+
+void LLPanelClassifiedInfo::draw()
+{
+ LLPanel::draw();
+
+ // Stretch in draw because it takes some time to load a texture,
+ // going to try to stretch snapshot until texture is loaded
+ if(!mSnapshotStreched)
+ {
+ stretchSnapshot();
+ }
}
LLUUID LLPanelClassifiedInfo::getSnapshotId()
@@ -1334,6 +1439,69 @@ LLUUID LLPanelClassifiedInfo::getSnapshotId()
}
// static
+void LLPanelClassifiedInfo::setClickThrough(
+ const LLUUID& classified_id,
+ S32 teleport,
+ S32 map,
+ S32 profile,
+ bool from_new_table)
+{
+ llinfos << "Click-through data for classified " << classified_id << " arrived: ["
+ << teleport << ", " << map << ", " << profile << "] ("
+ << (from_new_table ? "new" : "old") << ")" << llendl;
+
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
+ {
+ LLPanelClassifiedInfo* self = *iter;
+ if (self->getClassifiedId() != classified_id)
+ {
+ continue;
+ }
+
+ // *HACK: Skip LLPanelClassifiedEdit instances: they don't display clicks data.
+ // Those instances should not be in the list at all.
+ if (typeid(*self) != typeid(LLPanelClassifiedInfo))
+ {
+ continue;
+ }
+
+ llinfos << "Updating classified info panel" << llendl;
+
+ // We need to check to see if the data came from the new stat_table
+ // or the old classified table. We also need to cache the data from
+ // the two separate sources so as to display the aggregate totals.
+
+ if (from_new_table)
+ {
+ self->mTeleportClicksNew = teleport;
+ self->mMapClicksNew = map;
+ self->mProfileClicksNew = profile;
+ }
+ else
+ {
+ self->mTeleportClicksOld = teleport;
+ self->mMapClicksOld = map;
+ self->mProfileClicksOld = profile;
+ }
+
+ static LLUIString ct_str = self->getString("click_through_text_fmt");
+
+ ct_str.setArg("[TELEPORT]", llformat("%d", self->mTeleportClicksNew + self->mTeleportClicksOld));
+ ct_str.setArg("[MAP]", llformat("%d", self->mMapClicksNew + self->mMapClicksOld));
+ ct_str.setArg("[PROFILE]", llformat("%d", self->mProfileClicksNew + self->mProfileClicksOld));
+
+ self->childSetText("click_through_text", ct_str.getString());
+ // *HACK: remove this when there is enough room for click stats in the info panel
+ self->childSetToolTip("click_through_text", ct_str.getString());
+
+ llinfos << "teleport: " << llformat("%d", self->mTeleportClicksNew + self->mTeleportClicksOld)
+ << ", map: " << llformat("%d", self->mMapClicksNew + self->mMapClicksOld)
+ << ", profile: " << llformat("%d", self->mProfileClicksNew + self->mProfileClicksOld)
+ << llendl;
+ }
+}
+
+// static
std::string LLPanelClassifiedInfo::createLocationText(
const std::string& original_name,
const std::string& sim_name,
@@ -1364,8 +1532,100 @@ std::string LLPanelClassifiedInfo::createLocationText(
return location_text;
}
+void LLPanelClassifiedInfo::stretchSnapshot()
+{
+ // *NOTE dzaporozhan
+ // Could be moved to LLTextureCtrl
+
+ LLViewerFetchedTexture* texture = mSnapshotCtrl->getTexture();
+
+ if(!texture)
+ {
+ return;
+ }
+
+ if(0 == texture->getOriginalWidth() || 0 == texture->getOriginalHeight())
+ {
+ // looks like texture is not loaded yet
+ return;
+ }
+
+ LLRect rc = mSnapshotRect;
+ // *HACK dzaporozhan
+ // LLTextureCtrl uses BTN_HEIGHT_SMALL as bottom for texture which causes
+ // drawn texture to be smaller than expected. (see LLTextureCtrl::draw())
+ // Lets increase texture height to force texture look as expected.
+ rc.mBottom -= BTN_HEIGHT_SMALL;
+
+ F32 t_width = texture->getFullWidth();
+ F32 t_height = texture->getFullHeight();
+
+ F32 ratio = llmin<F32>( (rc.getWidth() / t_width), (rc.getHeight() / t_height) );
+
+ t_width *= ratio;
+ t_height *= ratio;
+
+ rc.setCenterAndSize(rc.getCenterX(), rc.getCenterY(), llfloor(t_width), llfloor(t_height));
+ mSnapshotCtrl->setShape(rc);
+
+ mSnapshotStreched = true;
+}
+
+LLRect LLPanelClassifiedInfo::getDefaultSnapshotRect()
+{
+ // Using scroll container makes getting default rect a hard task
+ // because rect in postBuild() and in first reshape() is not the same.
+ // Using snapshot_panel makes it easier to reshape snapshot.
+ return getChild<LLUICtrl>("snapshot_panel")->getLocalRect();
+}
+
+void LLPanelClassifiedInfo::scrollToTop()
+{
+ LLScrollContainer* scrollContainer = findChild<LLScrollContainer>("profile_scroll");
+ if (scrollContainer)
+ scrollContainer->goToTop();
+}
+
+// static
+// *TODO: move out of the panel
+void LLPanelClassifiedInfo::sendClickMessage(
+ const std::string& type,
+ bool from_search,
+ const LLUUID& classified_id,
+ const LLUUID& parcel_id,
+ const LLVector3d& global_pos,
+ const std::string& sim_name)
+{
+ // You're allowed to click on your own ads to reassure yourself
+ // that the system is working.
+ LLSD body;
+ body["type"] = type;
+ body["from_search"] = from_search;
+ body["classified_id"] = classified_id;
+ body["parcel_id"] = parcel_id;
+ body["dest_pos_global"] = global_pos.getValue();
+ body["region_name"] = sim_name;
+
+ std::string url = gAgent.getRegion()->getCapability("SearchStatTracking");
+ llinfos << "Sending click msg via capability (url=" << url << ")" << llendl;
+ llinfos << "body: [" << body << "]" << llendl;
+ LLHTTPClient::post(url, body, new LLClassifiedClickMessageResponder());
+}
+
+void LLPanelClassifiedInfo::sendClickMessage(const std::string& type)
+{
+ sendClickMessage(
+ type,
+ fromSearch(),
+ getClassifiedId(),
+ getParcelId(),
+ getPosGlobal(),
+ getSimName());
+}
+
void LLPanelClassifiedInfo::onMapClick()
{
+ sendClickMessage("map");
LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
LLFloaterReg::showInstance("world_map", "center");
}
@@ -1374,6 +1634,7 @@ void LLPanelClassifiedInfo::onTeleportClick()
{
if (!getPosGlobal().isExactlyZero())
{
+ sendClickMessage("teleport");
gAgent.teleportViaLocation(getPosGlobal());
LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
}
@@ -1382,6 +1643,7 @@ void LLPanelClassifiedInfo::onTeleportClick()
void LLPanelClassifiedInfo::onExit()
{
LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
+ gGenericDispatcher.addHandler("classifiedclickthrough", NULL); // deregister our handler
}
//////////////////////////////////////////////////////////////////////////
@@ -1394,7 +1656,9 @@ static const S32 CB_ITEM_PG = 1;
LLPanelClassifiedEdit::LLPanelClassifiedEdit()
: LLPanelClassifiedInfo()
, mIsNew(false)
+ , mIsNewWithErrors(false)
, mCanClose(false)
+ , mPublishFloater(NULL)
{
}
@@ -1446,22 +1710,17 @@ BOOL LLPanelClassifiedEdit::postBuild()
childSetAction("save_changes_btn", boost::bind(&LLPanelClassifiedEdit::onSaveClick, this));
childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelClassifiedEdit::onSetLocationClick, this));
+ mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onTextureSelected, this));
+
return TRUE;
}
-void LLPanelClassifiedEdit::onOpen(const LLSD& key)
+void LLPanelClassifiedEdit::fillIn(const LLSD& key)
{
- LLUUID classified_id = key["classified_id"];
+ setAvatarId(gAgent.getID());
- mIsNew = classified_id.isNull();
-
- if(mIsNew)
+ if(key.isUndefined())
{
- setAvatarId(gAgent.getID());
-
- resetData();
- resetControls();
-
setPosGlobal(gAgent.getPositionGlobal());
LLUUID snapshot_id = LLUUID::null;
@@ -1484,22 +1743,55 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key)
childSetValue("classified_name", makeClassifiedName());
childSetValue("classified_desc", desc);
setSnapshotId(snapshot_id);
-
setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal()));
-
// server will set valid parcel id
setParcelId(LLUUID::null);
+ }
+ else
+ {
+ setClassifiedId(key["classified_id"]);
+ setClassifiedName(key["name"]);
+ setDescription(key["desc"]);
+ setSnapshotId(key["snapshot_id"]);
+ setCategory((U32)key["category"].asInteger());
+ setContentType((U32)key["content_type"].asInteger());
+ setClassifiedLocation(key["location_text"]);
+ childSetValue("auto_renew", key["auto_renew"]);
+ childSetValue("price_for_listing", key["price_for_listing"].asInteger());
+ }
+}
- enableVerbs(true);
- enableEditing(true);
+void LLPanelClassifiedEdit::onOpen(const LLSD& key)
+{
+ mIsNew = key.isUndefined();
+
+ scrollToTop();
+
+ // classified is not created yet
+ bool is_new = isNew() || isNewWithErrors();
+
+ if(is_new)
+ {
+ resetData();
+ resetControls();
+
+ fillIn(key);
+
+ if(isNew())
+ {
+ LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
+ }
}
else
{
LLPanelClassifiedInfo::onOpen(key);
- enableVerbs(false);
- enableEditing(false);
}
+ std::string save_btn_label = is_new ? getString("publish_label") : getString("save_label");
+ childSetLabelArg("save_changes_btn", "[LABEL]", save_btn_label);
+
+ enableVerbs(is_new);
+ enableEditing(is_new);
resetDirty();
setInfoLoaded(false);
}
@@ -1511,6 +1803,14 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t
LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
if(c_info && getClassifiedId() == c_info->classified_id)
{
+ // see LLPanelClassifiedEdit::sendUpdate() for notes
+ mIsNewWithErrors = false;
+ // for just created classified - panel will probably be closed when we get here.
+ if(!getVisible())
+ {
+ return;
+ }
+
enableEditing(true);
setClassifiedName(c_info->name);
@@ -1519,18 +1819,23 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t
setPosGlobal(c_info->pos_global);
setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global));
- getChild<LLComboBox>("category")->setCurrentByIndex(c_info->category + 1);
- getChild<LLComboBox>("category")->resetDirty();
+ // *HACK see LLPanelClassifiedEdit::sendUpdate()
+ setCategory(c_info->category - 1);
bool mature = is_cf_mature(c_info->flags);
bool auto_renew = is_cf_auto_renew(c_info->flags);
- getChild<LLComboBox>("content_type")->setCurrentByIndex(mature ? CB_ITEM_MATURE : CB_ITEM_PG);
+ setContentType(mature ? CB_ITEM_MATURE : CB_ITEM_PG);
childSetValue("auto_renew", auto_renew);
childSetValue("price_for_listing", c_info->price_for_listing);
+ childSetEnabled("price_for_listing", isNew());
resetDirty();
setInfoLoaded(true);
+ enableVerbs(false);
+
+ // for just created classified - in case user opened edit panel before processProperties() callback
+ childSetLabelArg("save_changes_btn", "[LABEL]", getString("save_label"));
}
}
}
@@ -1561,19 +1866,24 @@ void LLPanelClassifiedEdit::resetDirty()
LLPanelClassifiedInfo::resetDirty();
getChild<LLUICtrl>("classified_snapshot")->resetDirty();
getChild<LLUICtrl>("classified_name")->resetDirty();
- getChild<LLUICtrl>("classified_desc")->resetDirty();
+
+ LLTextEditor* desc = getChild<LLTextEditor>("classified_desc");
+ // call blockUndo() to really reset dirty(and make isDirty work as intended)
+ desc->blockUndo();
+ desc->resetDirty();
+
getChild<LLUICtrl>("category")->resetDirty();
getChild<LLUICtrl>("content_type")->resetDirty();
getChild<LLUICtrl>("auto_renew")->resetDirty();
getChild<LLUICtrl>("price_for_listing")->resetDirty();
}
-void LLPanelClassifiedEdit::setSaveCallback(const commit_callback_t& cb)
+void LLPanelClassifiedEdit::setSaveCallback(const commit_signal_t::slot_type& cb)
{
- getChild<LLButton>("save_changes_btn")->setClickedCallback(cb);
+ mSaveButtonClickedSignal.connect(cb);
}
-void LLPanelClassifiedEdit::setCancelCallback(const commit_callback_t& cb)
+void LLPanelClassifiedEdit::setCancelCallback(const commit_signal_t::slot_type& cb)
{
getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
}
@@ -1586,6 +1896,7 @@ void LLPanelClassifiedEdit::resetControls()
getChild<LLComboBox>("content_type")->setCurrentByIndex(0);
childSetValue("auto_renew", false);
childSetValue("price_for_listing", MINIMUM_PRICE_FOR_LISTING);
+ childSetEnabled("price_for_listing", TRUE);
}
bool LLPanelClassifiedEdit::canClose()
@@ -1593,20 +1904,54 @@ bool LLPanelClassifiedEdit::canClose()
return mCanClose;
}
+void LLPanelClassifiedEdit::draw()
+{
+ LLPanel::draw();
+
+ // Need to re-stretch on every draw because LLTextureCtrl::onSelectCallback
+ // does not trigger callbacks when user navigates through images.
+ stretchSnapshot();
+}
+
+void LLPanelClassifiedEdit::stretchSnapshot()
+{
+ LLPanelClassifiedInfo::stretchSnapshot();
+
+ getChild<LLUICtrl>("edit_icon")->setShape(mSnapshotCtrl->getRect());
+}
+
+U32 LLPanelClassifiedEdit::getContentType()
+{
+ LLComboBox* ct_cb = getChild<LLComboBox>("content_type");
+ return ct_cb->getCurrentIndex();
+}
+
+void LLPanelClassifiedEdit::setContentType(U32 content_type)
+{
+ LLComboBox* ct_cb = getChild<LLComboBox>("content_type");
+ ct_cb->setCurrentByIndex(content_type);
+ ct_cb->resetDirty();
+}
+
+bool LLPanelClassifiedEdit::getAutoRenew()
+{
+ return childGetValue("auto_renew").asBoolean();
+}
+
void LLPanelClassifiedEdit::sendUpdate()
{
LLAvatarClassifiedInfo c_data;
if(getClassifiedId().isNull())
{
- LLUUID id;
- id.generate();
- setClassifiedId(id);
+ setClassifiedId(LLUUID::generateNewID());
}
c_data.agent_id = gAgent.getID();
c_data.classified_id = getClassifiedId();
- c_data.category = getCategory();
+ // *HACK
+ // Categories on server start with 1 while combo-box index starts with 0
+ c_data.category = getCategory() + 1;
c_data.name = getClassifiedName();
c_data.description = getDescription();
c_data.parcel_id = getParcelId();
@@ -1616,12 +1961,27 @@ void LLPanelClassifiedEdit::sendUpdate()
c_data.price_for_listing = getPriceForListing();
LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoUpdate(&c_data);
+
+ if(isNew())
+ {
+ // Lets assume there will be some error.
+ // Successful sendClassifiedInfoUpdate will trigger processProperties and
+ // let us know there was no error.
+ mIsNewWithErrors = true;
+ }
}
U32 LLPanelClassifiedEdit::getCategory()
{
LLComboBox* cat_cb = getChild<LLComboBox>("category");
- return cat_cb->getCurrentIndex() + 1;
+ return cat_cb->getCurrentIndex();
+}
+
+void LLPanelClassifiedEdit::setCategory(U32 category)
+{
+ LLComboBox* cat_cb = getChild<LLComboBox>("category");
+ cat_cb->setCurrentByIndex(category);
+ cat_cb->resetDirty();
}
U8 LLPanelClassifiedEdit::getFlags()
@@ -1680,6 +2040,11 @@ S32 LLPanelClassifiedEdit::getPriceForListing()
return childGetValue("price_for_listing").asInteger();
}
+void LLPanelClassifiedEdit::setPriceForListing(S32 price)
+{
+ childSetValue("price_for_listing", price);
+}
+
void LLPanelClassifiedEdit::onSetLocationClick()
{
setPosGlobal(gAgent.getPositionGlobal());
@@ -1714,18 +2079,51 @@ void LLPanelClassifiedEdit::onSaveClick()
notifyInvalidName();
return;
}
- if(isNew())
+ if(isNew() || isNewWithErrors())
{
if(gStatusBar->getBalance() < getPriceForListing())
{
LLNotificationsUtil::add("ClassifiedInsufficientFunds");
return;
}
+
+ mPublishFloater = LLFloaterReg::findTypedInstance<LLPublishClassifiedFloater>(
+ "publish_classified", LLSD());
+
+ if(!mPublishFloater)
+ {
+ mPublishFloater = LLFloaterReg::getTypedInstance<LLPublishClassifiedFloater>(
+ "publish_classified", LLSD());
+
+ mPublishFloater->setPublishClickedCallback(boost::bind
+ (&LLPanelClassifiedEdit::onPublishFloaterPublishClicked, this));
+ }
+
+ // set spinner value before it has focus or value wont be set
+ mPublishFloater->setPrice(getPriceForListing());
+ mPublishFloater->openFloater(mPublishFloater->getKey());
+ mPublishFloater->center();
+ }
+ else
+ {
+ doSave();
}
+}
+void LLPanelClassifiedEdit::doSave()
+{
mCanClose = true;
sendUpdate();
resetDirty();
+
+ mSaveButtonClickedSignal(this, LLSD());
+}
+
+void LLPanelClassifiedEdit::onPublishFloaterPublishClicked()
+{
+ setPriceForListing(mPublishFloater->getPrice());
+
+ doSave();
}
std::string LLPanelClassifiedEdit::getLocationNotice()
@@ -1772,4 +2170,52 @@ void LLPanelClassifiedEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
ctrl->setVisible(FALSE);
}
+void LLPanelClassifiedEdit::onTextureSelected()
+{
+ setSnapshotId(mSnapshotCtrl->getValue().asUUID());
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLPublishClassifiedFloater::LLPublishClassifiedFloater(const LLSD& key)
+ : LLFloater(key)
+{
+}
+
+LLPublishClassifiedFloater::~LLPublishClassifiedFloater()
+{
+}
+
+BOOL LLPublishClassifiedFloater::postBuild()
+{
+ LLFloater::postBuild();
+
+ childSetAction("publish_btn", boost::bind(&LLFloater::closeFloater, this, false));
+ childSetAction("cancel_btn", boost::bind(&LLFloater::closeFloater, this, false));
+
+ return TRUE;
+}
+
+void LLPublishClassifiedFloater::setPrice(S32 price)
+{
+ childSetValue("price_for_listing", price);
+}
+
+S32 LLPublishClassifiedFloater::getPrice()
+{
+ return childGetValue("price_for_listing").asInteger();
+}
+
+void LLPublishClassifiedFloater::setPublishClickedCallback(const commit_signal_t::slot_type& cb)
+{
+ getChild<LLButton>("publish_btn")->setClickedCallback(cb);
+}
+
+void LLPublishClassifiedFloater::setCancelClickedCallback(const commit_signal_t::slot_type& cb)
+{
+ getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
+}
+
//EOF
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
index 9e33e55b88..1157649a16 100644
--- a/indra/newview/llpanelclassified.h
+++ b/indra/newview/llpanelclassified.h
@@ -202,8 +202,26 @@ private:
void* mUserData;
};
+class LLPublishClassifiedFloater : public LLFloater
+{
+public:
+ LLPublishClassifiedFloater(const LLSD& key);
+ virtual ~LLPublishClassifiedFloater();
+
+ /*virtual*/ BOOL postBuild();
+
+ void setPrice(S32 price);
+ S32 getPrice();
+
+ void setPublishClickedCallback(const commit_signal_t::slot_type& cb);
+ void setCancelClickedCallback(const commit_signal_t::slot_type& cb);
+
+private:
+};
+
class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
{
+ LOG_CLASS(LLPanelClassifiedInfo);
public:
static LLPanelClassifiedInfo* create();
@@ -238,6 +256,8 @@ public:
void setClassifiedLocation(const std::string& location);
+ std::string getClassifiedLocation();
+
void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
LLVector3d& getPosGlobal() { return mPosGlobal; }
@@ -246,16 +266,41 @@ public:
LLUUID getParcelId() { return mParcelId; }
+ void setSimName(const std::string& sim_name) { mSimName = sim_name; }
+
+ std::string getSimName() { return mSimName; }
+
+ void setFromSearch(bool val) { mFromSearch = val; }
+
+ bool fromSearch() { return mFromSearch; }
+
bool getInfoLoaded() { return mInfoLoaded; }
void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; }
+ static void setClickThrough(
+ const LLUUID& classified_id,
+ S32 teleport,
+ S32 map,
+ S32 profile,
+ bool from_new_table);
+
+ static void sendClickMessage(
+ const std::string& type,
+ bool from_search,
+ const LLUUID& classified_id,
+ const LLUUID& parcel_id,
+ const LLVector3d& global_pos,
+ const std::string& sim_name);
+
void setExitCallback(const commit_callback_t& cb);
void setEditClassifiedCallback(const commit_callback_t& cb);
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
+ /*virtual*/ void draw();
+
protected:
LLPanelClassifiedInfo();
@@ -269,16 +314,29 @@ protected:
const std::string& sim_name,
const LLVector3d& pos_global);
+ void stretchSnapshot();
+ void sendClickMessage(const std::string& type);
+
+ LLRect getDefaultSnapshotRect();
+
+ void scrollToTop();
+
void onMapClick();
void onTeleportClick();
void onExit();
+ bool mSnapshotStreched;
+ LLRect mSnapshotRect;
+ LLTextureCtrl* mSnapshotCtrl;
+
private:
LLUUID mAvatarId;
LLUUID mClassifiedId;
LLVector3d mPosGlobal;
LLUUID mParcelId;
+ std::string mSimName;
+ bool mFromSearch;
bool mInfoLoaded;
LLScrollContainer* mScrollContainer;
@@ -286,10 +344,22 @@ private:
S32 mScrollingPanelMinHeight;
S32 mScrollingPanelWidth;
+
+ // Needed for stat tracking
+ S32 mTeleportClicksOld;
+ S32 mMapClicksOld;
+ S32 mProfileClicksOld;
+ S32 mTeleportClicksNew;
+ S32 mMapClicksNew;
+ S32 mProfileClicksNew;
+
+ typedef std::list<LLPanelClassifiedInfo*> panel_list_t;
+ static panel_list_t sAllPanels;
};
class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
{
+ LOG_CLASS(LLPanelClassifiedEdit);
public:
static LLPanelClassifiedEdit* create();
@@ -298,6 +368,8 @@ public:
/*virtual*/ BOOL postBuild();
+ void fillIn(const LLSD& key);
+
/*virtual*/ void onOpen(const LLSD& key);
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
@@ -306,31 +378,47 @@ public:
/*virtual*/ void resetDirty();
- void setSaveCallback(const commit_callback_t& cb);
+ void setSaveCallback(const commit_signal_t::slot_type& cb);
- void setCancelCallback(const commit_callback_t& cb);
+ void setCancelCallback(const commit_signal_t::slot_type& cb);
/*virtual*/ void resetControls();
bool isNew() { return mIsNew; }
+ bool isNewWithErrors() { return mIsNewWithErrors; }
+
bool canClose();
+ void draw();
+
+ void stretchSnapshot();
+
+ U32 getCategory();
+
+ void setCategory(U32 category);
+
+ U32 getContentType();
+
+ void setContentType(U32 content_type);
+
+ bool getAutoRenew();
+
+ S32 getPriceForListing();
+
protected:
LLPanelClassifiedEdit();
void sendUpdate();
- U32 getCategory();
-
void enableVerbs(bool enable);
void enableEditing(bool enable);
std::string makeClassifiedName();
- S32 getPriceForListing();
+ void setPriceForListing(S32 price);
U8 getFlags();
@@ -344,12 +432,23 @@ protected:
void onChange();
void onSaveClick();
+ void doSave();
+
+ void onPublishFloaterPublishClicked();
+
void onTexturePickerMouseEnter(LLUICtrl* ctrl);
void onTexturePickerMouseLeave(LLUICtrl* ctrl);
+ void onTextureSelected();
+
private:
bool mIsNew;
+ bool mIsNewWithErrors;
bool mCanClose;
+
+ LLPublishClassifiedFloater* mPublishFloater;
+
+ commit_signal_t mSaveButtonClickedSignal;
};
#endif // LL_LLPANELCLASSIFIED_H
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index 2a7d097f94..f4c0a842e7 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -40,6 +40,7 @@
#include "llerror.h"
#include "llfloaterreg.h"
#include "llfontgl.h"
+#include "llinventorydefines.h"
#include "llmaterialtable.h"
#include "llpermissionsflags.h"
#include "llrect.h"
@@ -180,7 +181,7 @@ void LLPanelContents::onClickNewScript(void *userdata)
LLTrans::getString("PanelContentsNewScript"),
desc,
LLSaleInfo::DEFAULT,
- LLViewerInventoryItem::II_FLAGS_NONE,
+ LLInventoryItemFlags::II_FLAGS_NONE,
time_corrected());
object->saveScript(new_item, TRUE, true);
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index e7acc68b93..da74295f9e 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -270,6 +270,8 @@ LLEditWearableDictionary::SubpartEntry::SubpartEntry(ESubpart part,
LLPanelEditWearable::LLPanelEditWearable()
: LLPanel()
+ , mWearablePtr(NULL)
+ , mWearableItem(NULL)
{
}
@@ -338,8 +340,7 @@ BOOL LLPanelEditWearable::isDirty() const
//virtual
void LLPanelEditWearable::draw()
{
- BOOL is_dirty = isDirty();
- mBtnRevert->setEnabled(is_dirty);
+ updateVerbs();
LLPanel::draw();
}
@@ -401,6 +402,9 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)
return;
}
+ mWearableItem = gInventory.getItem(mWearablePtr->getItemID());
+ llassert(mWearableItem);
+
EWearableType type = wearable->getType();
LLPanel *targetPanel = NULL;
std::string title;
@@ -489,7 +493,7 @@ void LLPanelEditWearable::initializePanel()
updateScrollingPanelUI();
}
-
+ updateVerbs();
}
void LLPanelEditWearable::updateScrollingPanelUI()
@@ -602,7 +606,7 @@ LLPanel* LLPanelEditWearable::getPanel(EWearableType type)
void LLPanelEditWearable::getSortedParams(value_map_t &sorted_params, const std::string &edit_group)
{
LLWearable::visual_param_vec_t param_list;
- ESex avatar_sex = gAgent.getAvatarObject()->getSex();
+ ESex avatar_sex = gAgentAvatarp->getSex();
mWearablePtr->getVisualParams(param_list);
@@ -640,18 +644,25 @@ void LLPanelEditWearable::buildParamList(LLScrollingPanelList *panel_list, value
{
LLPanel::Params p;
p.name("LLScrollingPanelParam");
- p.rect(LLRect(0, LLScrollingPanelParam::PARAM_PANEL_HEIGHT, LLScrollingPanelParam::PARAM_PANEL_WIDTH, 0 ));
LLScrollingPanelParam* panel_param = new LLScrollingPanelParam( p, NULL, (*it).second, TRUE, this->getWearable());
height = panel_list->addPanel( panel_param );
}
-
- S32 width = tab->getRect().getWidth();
-
- tab->reshape(width,height + tab->getHeaderHeight()+10,FALSE);
}
}
+void LLPanelEditWearable::updateVerbs()
+{
+ bool can_copy = false;
+ if(mWearableItem)
+ {
+ can_copy = mWearableItem->getPermissions().allowCopyBy(gAgentID);
+ }
+ BOOL is_dirty = isDirty();
+ mBtnRevert->setEnabled(is_dirty);
+ childSetEnabled("save_as_button", is_dirty && can_copy);
+}
+// EOF
diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h
index 4178659617..8b63685177 100644
--- a/indra/newview/llpaneleditwearable.h
+++ b/indra/newview/llpaneleditwearable.h
@@ -41,6 +41,7 @@
class LLWearable;
class LLTextEditor;
class LLTextBox;
+class LLViewerInventoryItem;
class LLViewerVisualParam;
class LLVisualParamHint;
class LLViewerJointMesh;
@@ -73,9 +74,12 @@ private:
LLPanel* getPanel(EWearableType type);
void getSortedParams(value_map_t &sorted_params, const std::string &edit_group);
void buildParamList(LLScrollingPanelList *panel_list, value_map_t &sorted_params, LLAccordionCtrlTab *tab);
+ // update bottom bar buttons ("Save", "Revert", etc)
+ void updateVerbs();
// the pointer to the wearable we're editing. NULL means we're not editing a wearable.
LLWearable *mWearablePtr;
+ LLViewerInventoryItem* mWearableItem;
// these are constant no matter what wearable we're editing
LLButton *mBtnRevert;
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 706787e824..c00b6a4147 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -59,6 +59,8 @@
#include "llaccordionctrltab.h"
#include "llaccordionctrl.h"
+#include "lltrans.h"
+
static LLRegisterPanelClassWrapper<LLPanelGroup> t_panel_group("panel_group_info_sidetray");
@@ -333,8 +335,9 @@ void LLPanelGroup::update(LLGroupChange gc)
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mID);
if(gdatap)
{
- childSetValue("group_name", gdatap->mName);
- childSetToolTip("group_name",gdatap->mName);
+ std::string group_name = gdatap->mName.empty() ? LLTrans::getString("LoadingData") : gdatap->mName;
+ childSetValue("group_name", group_name);
+ childSetToolTip("group_name",group_name);
LLGroupData agent_gdatap;
bool is_member = gAgent.getGroupData(mID,agent_gdatap) || gAgent.isGodlike();
@@ -379,8 +382,9 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mID);
if(gdatap)
{
- childSetValue("group_name", gdatap->mName);
- childSetToolTip("group_name",gdatap->mName);
+ std::string group_name = gdatap->mName.empty() ? LLTrans::getString("LoadingData") : gdatap->mName;
+ childSetValue("group_name", group_name);
+ childSetToolTip("group_name",group_name);
}
LLButton* button_apply = findChild<LLButton>("btn_apply");
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 555e277ce5..0a83ba8212 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -111,6 +111,8 @@ BOOL LLPanelGroupGeneral::postBuild()
{
mListVisibleMembers->setDoubleClickCallback(openProfile, this);
mListVisibleMembers->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+
+ mListVisibleMembers->setSortCallback(boost::bind(&LLPanelGroupGeneral::sortMembersList,this,_1,_2,_3));
}
// Options
@@ -818,15 +820,15 @@ void LLPanelGroupGeneral::reset()
mCtrlListGroup->set(true);
- mCtrlReceiveNotices->setEnabled(true);
+ mCtrlReceiveNotices->setEnabled(false);
mCtrlReceiveNotices->setVisible(true);
- mCtrlListGroup->setEnabled(true);
+ mCtrlListGroup->setEnabled(false);
mGroupNameEditor->setEnabled(TRUE);
mEditCharter->setEnabled(TRUE);
- mCtrlShowInGroupList->setEnabled(TRUE);
+ mCtrlShowInGroupList->setEnabled(false);
mComboMature->setEnabled(TRUE);
mCtrlOpenEnrollment->setEnabled(TRUE);
@@ -932,6 +934,8 @@ void LLPanelGroupGeneral::setGroupID(const LLUUID& id)
mCtrlListGroup->setEnabled(data.mID.notNull());
}
+ mCtrlShowInGroupList->setEnabled(data.mID.notNull());
+
mActiveTitleLabel = getChild<LLTextBox>("active_title_label");
mComboActiveTitle = getChild<LLComboBox>("active_title");
@@ -944,4 +948,18 @@ void LLPanelGroupGeneral::setGroupID(const LLUUID& id)
activate();
}
+S32 LLPanelGroupGeneral::sortMembersList(S32 col_idx,const LLScrollListItem* i1,const LLScrollListItem* i2)
+{
+ const LLScrollListCell *cell1 = i1->getColumn(col_idx);
+ const LLScrollListCell *cell2 = i2->getColumn(col_idx);
+ if(col_idx == 2)
+ {
+ if(LLStringUtil::compareDict(cell1->getValue().asString(),"Online") == 0 )
+ return 1;
+ if(LLStringUtil::compareDict(cell2->getValue().asString(),"Online") == 0 )
+ return -1;
+ }
+
+ return LLStringUtil::compareDict(cell1->getValue().asString(), cell2->getValue().asString());
+}
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
index 7e90e43cf9..6245018871 100644
--- a/indra/newview/llpanelgroupgeneral.h
+++ b/indra/newview/llpanelgroupgeneral.h
@@ -83,6 +83,8 @@ private:
static void onReceiveNotices(LLUICtrl* ctrl, void* data);
static void openProfile(void* data);
+ S32 sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*);
+
static bool joinDlgCB(const LLSD& notification, const LLSD& response);
void updateMembers();
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index 05261a65de..11d3768a3d 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -57,7 +57,7 @@ public:
~impl();
void addUsers(const std::vector<std::string>& names,
- const std::vector<LLUUID>& agent_ids);
+ const uuid_vec_t& agent_ids);
void submitInvitations();
void addRoleNames(LLGroupMgrGroupData* gdatap);
void handleRemove();
@@ -69,7 +69,7 @@ public:
static void callbackClickRemove(void* userdata);
static void callbackSelect(LLUICtrl* ctrl, void* userdata);
static void callbackAddUsers(const std::vector<std::string>& names,
- const std::vector<LLUUID>& agent_ids,
+ const uuid_vec_t& agent_ids,
void* user_data);
bool inviteOwnerCallback(const LLSD& notification, const LLSD& response);
@@ -111,7 +111,7 @@ LLPanelGroupInvite::impl::~impl()
}
void LLPanelGroupInvite::impl::addUsers(const std::vector<std::string>& names,
- const std::vector<LLUUID>& agent_ids)
+ const uuid_vec_t& agent_ids)
{
std::string name;
LLUUID id;
@@ -361,7 +361,7 @@ void LLPanelGroupInvite::impl::callbackClickOK(void* userdata)
//static
void LLPanelGroupInvite::impl::callbackAddUsers(const std::vector<std::string>& names,
- const std::vector<LLUUID>& ids,
+ const uuid_vec_t& ids,
void* user_data)
{
impl* selfp = (impl*) user_data;
@@ -399,7 +399,7 @@ void LLPanelGroupInvite::clear()
mImplementation->mOKButton->setEnabled(FALSE);
}
-void LLPanelGroupInvite::addUsers(std::vector<LLUUID>& agent_ids)
+void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids)
{
std::vector<std::string> names;
for (S32 i = 0; i < (S32)agent_ids.size(); i++)
@@ -456,7 +456,7 @@ void LLPanelGroupInvite::addUsers(std::vector<LLUUID>& agent_ids)
void LLPanelGroupInvite::addUserCallback(const LLUUID& id, const std::string& first_name, const std::string& last_name)
{
std::vector<std::string> names;
- std::vector<LLUUID> agent_ids;
+ uuid_vec_t agent_ids;
std::string full_name = first_name + " " + last_name;
agent_ids.push_back(id);
names.push_back(first_name + " " + last_name);
diff --git a/indra/newview/llpanelgroupinvite.h b/indra/newview/llpanelgroupinvite.h
index b095dd2395..2ed443ed46 100644
--- a/indra/newview/llpanelgroupinvite.h
+++ b/indra/newview/llpanelgroupinvite.h
@@ -42,7 +42,7 @@ public:
LLPanelGroupInvite(const LLUUID& group_id);
~LLPanelGroupInvite();
- void addUsers(std::vector<LLUUID>& agent_ids);
+ void addUsers(uuid_vec_t& agent_ids);
/**
* this callback is being used to add a user whose fullname isn't been loaded before invoking of addUsers().
*/
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 9023afc602..9ac3a07041 100644
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -1600,6 +1600,8 @@ void LLPanelGroupLandMoney::setGroupID(const LLUUID& id)
mImplementationp->mMoneySalesTabEHp->setGroupID(mGroupID);
}
+ mImplementationp->mBeenActivated = false;
+
activate();
}
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 5f913d5469..8da19d1574 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -38,6 +38,7 @@
#include "llinventory.h"
#include "llviewerinventory.h"
+#include "llinventorydefines.h"
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
#include "llfloaterinventory.h"
@@ -329,7 +330,7 @@ void LLPanelGroupNotices::setItem(LLPointer<LLInventoryItem> inv_item)
mInventoryItem = inv_item;
BOOL item_is_multi = FALSE;
- if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+ if ( inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
{
item_is_multi = TRUE;
};
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index c6287472fe..0c24e6ad22 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -859,7 +859,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect()
if (selection.empty()) return;
// Build a vector of all selected members, and gather allowed actions.
- std::vector<LLUUID> selected_members;
+ uuid_vec_t selected_members;
U64 allowed_by_all = 0xffffffffffffLL;
U64 allowed_by_some = 0;
@@ -925,8 +925,8 @@ void LLPanelGroupMembersSubTab::handleMemberSelect()
if (cb_enable && (count > 0) && role_id == gdatap->mOwnerRole)
{
// Check if any owners besides this agent are selected.
- std::vector<LLUUID>::const_iterator member_iter;
- std::vector<LLUUID>::const_iterator member_end =
+ uuid_vec_t::const_iterator member_iter;
+ uuid_vec_t::const_iterator member_end =
selected_members.end();
for (member_iter = selected_members.begin();
member_iter != member_end;
@@ -952,7 +952,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect()
//now see if there are any role changes for the selected
//members and remember to include them
- std::vector<LLUUID>::iterator sel_mem_iter = selected_members.begin();
+ uuid_vec_t::iterator sel_mem_iter = selected_members.begin();
for (; sel_mem_iter != selected_members.end(); sel_mem_iter++)
{
LLRoleMemberChangeType type;
@@ -1009,7 +1009,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect()
check->setTentative(
(0 != count)
&& (selected_members.size() !=
- (std::vector<LLUUID>::size_type)count));
+ (uuid_vec_t::size_type)count));
//NOTE: as of right now a user can break the group
//by removing himself from a role if he is the
@@ -1084,7 +1084,7 @@ void LLPanelGroupMembersSubTab::onEjectMembers(void *userdata)
void LLPanelGroupMembersSubTab::handleEjectMembers()
{
//send down an eject message
- std::vector<LLUUID> selected_members;
+ uuid_vec_t selected_members;
std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
if (selection.empty()) return;
@@ -1105,13 +1105,13 @@ void LLPanelGroupMembersSubTab::handleEjectMembers()
selected_members);
}
-void LLPanelGroupMembersSubTab::sendEjectNotifications(const LLUUID& group_id, const std::vector<LLUUID>& selected_members)
+void LLPanelGroupMembersSubTab::sendEjectNotifications(const LLUUID& group_id, const uuid_vec_t& selected_members)
{
LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(group_id);
if (group_data)
{
- for (std::vector<LLUUID>::const_iterator i = selected_members.begin(); i != selected_members.end(); ++i)
+ for (uuid_vec_t::const_iterator i = selected_members.begin(); i != selected_members.end(); ++i)
{
LLSD args;
std::string name;
@@ -1437,7 +1437,7 @@ U64 LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges(const LLUUID& ag
if ( role_change_datap )
{
- std::vector<LLUUID> roles_to_be_removed;
+ uuid_vec_t roles_to_be_removed;
for (role_change_data_map_t::iterator role = role_change_datap->begin();
role != role_change_datap->end(); ++ role)
@@ -2086,8 +2086,8 @@ void LLPanelGroupRolesSubTab::buildMembersList()
LLGroupRoleData* rdatap = (*rit).second;
if (rdatap)
{
- std::vector<LLUUID>::const_iterator mit = rdatap->getMembersBegin();
- std::vector<LLUUID>::const_iterator end = rdatap->getMembersEnd();
+ uuid_vec_t::const_iterator mit = rdatap->getMembersBegin();
+ uuid_vec_t::const_iterator end = rdatap->getMembersEnd();
for ( ; mit != end; ++mit)
{
mAssignedMembersList->addNameItem((*mit));
diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h
index eac22a6338..98cebe9882 100644
--- a/indra/newview/llpanelgrouproles.h
+++ b/indra/newview/llpanelgrouproles.h
@@ -173,7 +173,7 @@ public:
static void onEjectMembers(void*);
void handleEjectMembers();
- void sendEjectNotifications(const LLUUID& group_id, const std::vector<LLUUID>& selected_members);
+ void sendEjectNotifications(const LLUUID& group_id, const uuid_vec_t& selected_members);
static void onRoleCheck(LLUICtrl* check, void* user_data);
void handleRoleCheck(const LLUUID& role_id,
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index 56d52ccc65..4ffd43cb0f 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -36,6 +36,7 @@
#include "llcombobox.h"
#include "lliconctrl.h"
+#include "llinventoryfunctions.h"
#include "lllineeditor.h"
#include "lltextbox.h"
#include "lltexteditor.h"
@@ -383,22 +384,44 @@ std::string LLPanelLandmarkInfo::getFullFolderName(const LLViewerInventoryCatego
if (cat)
{
name = cat->getName();
-
- // translate category name, if it's right below the root
- // FIXME: it can throw notification about non existent string in strings.xml
- if (cat->getParentUUID().notNull() && cat->getParentUUID() == gInventory.getRootFolderID())
- {
- LLTrans::findString(name, "InvFolder " + name);
- }
+ parent_id = cat->getParentUUID();
+ bool is_under_root_category = parent_id == gInventory.getRootFolderID();
// we don't want "My Inventory" to appear in the name
- while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID())
+ while ((parent_id = cat->getParentUUID()).notNull())
{
cat = gInventory.getCategory(parent_id);
llassert(cat);
if (cat)
{
- name = cat->getName() + "/" + name;
+ if (is_under_root_category || cat->getParentUUID() == gInventory.getRootFolderID())
+ {
+ std::string localized_name;
+
+ // Looking for translation only for protected type categories
+ // to avoid warnings about non existent string in strings.xml.
+ bool is_protected_type = LLFolderType::lookupIsProtectedType(cat->getPreferredType());
+
+ if (is_under_root_category)
+ {
+ // translate category name, if it's right below the root
+ bool is_found = is_protected_type && LLTrans::findString(localized_name, "InvFolder " + name);
+ name = is_found ? localized_name : name;
+ }
+ else
+ {
+ bool is_found = is_protected_type && LLTrans::findString(localized_name, "InvFolder " + cat->getName());
+
+ // add translated category name to folder's full name
+ name = (is_found ? localized_name : cat->getName()) + "/" + name;
+ }
+
+ break;
+ }
+ else
+ {
+ name = cat->getName() + "/" + name;
+ }
}
}
}
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 40ea75ea7a..8d8c996374 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -49,6 +49,7 @@
#include "lldndbutton.h"
#include "llfloaterworldmap.h"
#include "llfolderviewitem.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
#include "lllandmarkactions.h"
#include "llplacesinventorybridge.h"
@@ -69,6 +70,10 @@ static const std::string TRASH_BUTTON_NAME = "trash_btn";
// helper functions
static void filter_list(LLPlacesInventoryPanel* inventory_list, const std::string& string);
static bool category_has_descendents(LLPlacesInventoryPanel* inventory_list);
+static void collapse_all_folders(LLFolderView* root_folder);
+static void expand_all_folders(LLFolderView* root_folder);
+static bool has_expanded_folders(LLFolderView* root_folder);
+static bool has_collapsed_folders(LLFolderView* root_folder);
/**
* Functor counting expanded and collapsed folders in folder view tree to know
@@ -430,9 +435,9 @@ LLFolderViewItem* LLLandmarksPanel::selectItemInAccordionTab(LLPlacesInventoryPa
if (!inventory_list)
return NULL;
- LLFolderView* folder_view = inventory_list->getRootFolder();
+ LLFolderView* root = inventory_list->getRootFolder();
- LLFolderViewItem* item = folder_view->getItemByID(obj_id);
+ LLFolderViewItem* item = root->getItemByID(obj_id);
if (!item)
return NULL;
@@ -442,7 +447,7 @@ LLFolderViewItem* LLLandmarksPanel::selectItemInAccordionTab(LLPlacesInventoryPa
tab->changeOpenClose(false);
}
- folder_view->setSelection(item, FALSE, take_keyboard_focus);
+ root->setSelection(item, FALSE, take_keyboard_focus);
LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
LLRect screen_rc;
@@ -530,7 +535,7 @@ void LLLandmarksPanel::initLandmarksInventoryPanel()
// subscribe to have auto-rename functionality while creating New Folder
mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2));
- initAccordion("tab_landmarks", mLandmarksInventoryPanel, true);
+ mMyLandmarksAccordionTab = initAccordion("tab_landmarks", mLandmarksInventoryPanel, true);
}
void LLLandmarksPanel::initMyInventoryPanel()
@@ -552,7 +557,7 @@ void LLLandmarksPanel::initLibraryInventoryPanel()
const LLUUID &landmarks_cat = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false, true);
if (landmarks_cat.notNull())
{
- gInventory.startBackgroundFetch(landmarks_cat);
+ LLInventoryModelBackgroundFetch::instance().start(landmarks_cat);
}
// Expanding "Library" tab for new users who have no landmarks in "My Inventory".
@@ -584,7 +589,7 @@ void LLLandmarksPanel::initLandmarksPanel(LLPlacesInventoryPanel* inventory_list
inventory_list->saveFolderState();
}
-void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab)
+LLAccordionCtrlTab* LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab)
{
LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name);
@@ -592,6 +597,7 @@ void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPl
accordion_tab->setDropDownStateChangedCallback(
boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list));
accordion_tab->setDisplayChildren(expand_tab);
+ return accordion_tab;
}
void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list)
@@ -615,7 +621,7 @@ void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesI
if (!gInventory.isCategoryComplete(cat_id))
*/
{
- gInventory.startBackgroundFetch(cat_id);
+ LLInventoryModelBackgroundFetch::instance().start(cat_id);
}
// Apply filter substring because it might have been changed
@@ -652,9 +658,6 @@ void LLLandmarksPanel::initListCommandsHandlers()
mListCommands->childSetAction(OPTIONS_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onActionsButtonClick, this));
mListCommands->childSetAction(TRASH_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onTrashButtonClick, this));
- mListCommands->getChild<LLButton>(ADD_BUTTON_NAME)->setHeldDownCallback(boost::bind(&LLLandmarksPanel::onAddButtonHeldDown, this));
- static const LLSD add_landmark_command("add_landmark");
- mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddAction, this, add_landmark_command));
LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>(TRASH_BUTTON_NAME);
trash_btn->setDragAndDropHandler(boost::bind(&LLLandmarksPanel::handleDragAndDropToTrash, this
@@ -672,6 +675,8 @@ void LLLandmarksPanel::initListCommandsHandlers()
mGearLandmarkMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_landmark.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
mGearFolderMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_folder.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_place_add_button.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+
+ mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::showActionMenu, this, mMenuAdd, ADD_BUTTON_NAME));
}
@@ -683,37 +688,30 @@ void LLLandmarksPanel::updateListCommands()
// keep Options & Add Landmark buttons always enabled
mListCommands->childSetEnabled(ADD_FOLDER_BUTTON_NAME, add_folder_enabled);
mListCommands->childSetEnabled(TRASH_BUTTON_NAME, trash_enabled);
- mListCommands->childSetEnabled(OPTIONS_BUTTON_NAME,getCurSelectedItem() != NULL);
}
void LLLandmarksPanel::onActionsButtonClick()
{
+ LLMenuGL* menu = mGearFolderMenu;
+
LLFolderViewItem* cur_item = NULL;
if(mCurrentSelectedList)
- cur_item = mCurrentSelectedList->getRootFolder()->getCurSelectedItem();
-
- if(!cur_item)
- return;
-
- LLFolderViewEventListener* listenerp = cur_item->getListener();
-
- LLMenuGL* menu =NULL;
- if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
- menu = mGearLandmarkMenu;
- }
- else if (listenerp->getInventoryType() == LLInventoryType::IT_CATEGORY)
- {
- mGearFolderMenu->getChild<LLMenuItemCallGL>("expand")->setVisible(!cur_item->isOpen());
- mGearFolderMenu->getChild<LLMenuItemCallGL>("collapse")->setVisible(cur_item->isOpen());
- menu = mGearFolderMenu;
+ cur_item = mCurrentSelectedList->getRootFolder()->getCurSelectedItem();
+ if(!cur_item)
+ return;
+
+ LLFolderViewEventListener* listenerp = cur_item->getListener();
+ if(!listenerp)
+ return;
+
+ if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
+ {
+ menu = mGearLandmarkMenu;
+ }
}
- showActionMenu(menu,OPTIONS_BUTTON_NAME);
-}
-void LLLandmarksPanel::onAddButtonHeldDown()
-{
- showActionMenu(mMenuAdd,ADD_BUTTON_NAME);
+ showActionMenu(menu,OPTIONS_BUTTON_NAME);
}
void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
@@ -775,6 +773,17 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
"category"), gInventory.findCategoryUUIDForType(
LLFolderType::FT_LANDMARK));
}
+ else
+ {
+ //in case My Landmarks tab is completely empty (thus cannot be determined as being selected)
+ menu_create_inventory_item(mLandmarksInventoryPanel->getRootFolder(), NULL, LLSD("category"),
+ gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK));
+
+ if (mMyLandmarksAccordionTab)
+ {
+ mMyLandmarksAccordionTab->changeOpenClose(false);
+ }
+ }
}
}
@@ -805,26 +814,33 @@ void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const
void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
{
- if(!mCurrentSelectedList) return;
-
- LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
std::string command_name = userdata.asString();
if ("expand_all" == command_name)
{
- root_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
- root_folder->arrangeAll();
+ expand_all_folders(mFavoritesInventoryPanel->getRootFolder());
+ expand_all_folders(mLandmarksInventoryPanel->getRootFolder());
+ expand_all_folders(mMyInventoryPanel->getRootFolder());
+ expand_all_folders(mLibraryInventoryPanel->getRootFolder());
+
+ for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
+ {
+ (*iter)->changeOpenClose(false);
+ }
}
else if ("collapse_all" == command_name)
{
- root_folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_DOWN);
+ collapse_all_folders(mFavoritesInventoryPanel->getRootFolder());
+ collapse_all_folders(mLandmarksInventoryPanel->getRootFolder());
+ collapse_all_folders(mMyInventoryPanel->getRootFolder());
+ collapse_all_folders(mLibraryInventoryPanel->getRootFolder());
- // The top level folder is invisible, it must be open to
- // display its sub-folders.
- root_folder->openTopLevelFolders();
- root_folder->arrangeAll();
+ for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
+ {
+ (*iter)->changeOpenClose(true);
+ }
}
- else if ( "sort_by_date" == command_name)
+ else if ("sort_by_date" == command_name)
{
mSortByDate = !mSortByDate;
updateSortOrder(mLandmarksInventoryPanel, mSortByDate);
@@ -833,7 +849,10 @@ void LLLandmarksPanel::onFoldingAction(const LLSD& userdata)
}
else
{
- root_folder->doToSelected(&gInventory, userdata);
+ if(mCurrentSelectedList)
+ {
+ mCurrentSelectedList->getRootFolder()->doToSelected(&gInventory, userdata);
+ }
}
}
@@ -853,53 +872,82 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
{
std::string command_name = userdata.asString();
-
- LLPlacesFolderView* rootFolderView = mCurrentSelectedList ?
+ LLPlacesFolderView* root_folder_view = mCurrentSelectedList ?
static_cast<LLPlacesFolderView*>(mCurrentSelectedList->getRootFolder()) : NULL;
- if (NULL == rootFolderView) return false;
-
- // disable some commands for multi-selection. EXT-1757
- if (rootFolderView->getSelectedCount() > 1)
+ if ("collapse_all" == command_name)
{
- if ( "teleport" == command_name
- || "more_info" == command_name
- || "rename" == command_name
- || "show_on_map" == command_name
- || "copy_slurl" == command_name
- )
+ bool disable_collapse_all = !has_expanded_folders(mFavoritesInventoryPanel->getRootFolder())
+ && !has_expanded_folders(mLandmarksInventoryPanel->getRootFolder())
+ && !has_expanded_folders(mMyInventoryPanel->getRootFolder())
+ && !has_expanded_folders(mLibraryInventoryPanel->getRootFolder());
+ if (disable_collapse_all)
{
- return false;
+ for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
+ {
+ if ((*iter)->isExpanded())
+ {
+ disable_collapse_all = false;
+ break;
+ }
+ }
}
+ return !disable_collapse_all;
}
+ else if ("expand_all" == command_name)
+ {
+ bool disable_expand_all = !has_collapsed_folders(mFavoritesInventoryPanel->getRootFolder())
+ && !has_collapsed_folders(mLandmarksInventoryPanel->getRootFolder())
+ && !has_collapsed_folders(mMyInventoryPanel->getRootFolder())
+ && !has_collapsed_folders(mLibraryInventoryPanel->getRootFolder());
+ if (disable_expand_all)
+ {
+ for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
+ {
+ if (!(*iter)->isExpanded())
+ {
+ disable_expand_all = false;
+ break;
+ }
+ }
+ }
- // disable some commands for Favorites accordion. EXT-1758
- if (mCurrentSelectedList == mFavoritesInventoryPanel)
+ return !disable_expand_all;
+ }
+ else if ("sort_by_date" == command_name)
{
- if ( "expand_all" == command_name
- || "collapse_all" == command_name
- || "sort_by_date" == command_name
- )
+ // disable "sort_by_date" for Favorites accordion because
+ // it has its own items order. EXT-1758
+ if (mCurrentSelectedList == mFavoritesInventoryPanel)
+ {
return false;
+ }
}
-
- LLCheckFolderState checker;
- rootFolderView->applyFunctorRecursively(checker);
-
- // We assume that the root folder is always expanded so we enable "collapse_all"
- // command when we have at least one more expanded folder.
- if (checker.getExpandedFolders() < 2 && "collapse_all" == command_name)
+ else if ( "paste" == command_name
+ || "cut" == command_name
+ || "copy" == command_name
+ || "delete" == command_name
+ || "collapse" == command_name
+ || "expand" == command_name
+ )
{
- return false;
+ return canSelectedBeModified(command_name);
}
-
- if (checker.getCollapsedFolders() < 1 && "expand_all" == command_name)
+ else if ( "teleport" == command_name
+ || "more_info" == command_name
+ || "show_on_map" == command_name
+ || "copy_slurl" == command_name
+ )
{
- return false;
+ // disable some commands for multi-selection. EXT-1757
+ return root_folder_view && root_folder_view->getSelectedCount() == 1;
}
-
- if("category" == command_name)
+ else if ("rename" == command_name)
+ {
+ return root_folder_view && root_folder_view->getSelectedCount() == 1 && canSelectedBeModified(command_name);
+ }
+ else if("category" == command_name)
{
// we can add folder only in Landmarks Accordion
if (mCurrentSelectedList == mLandmarksInventoryPanel)
@@ -907,11 +955,8 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
// ... but except Received folder
return !isReceivedFolderSelected();
}
- else return false;
- }
- else if("paste" == command_name || "rename" == command_name || "cut" == command_name || "delete" == command_name)
- {
- return canSelectedBeModified(command_name);
+ //"Add a folder" is enabled by default (case when My Landmarks is empty)
+ else return true;
}
else if("create_pick" == command_name)
{
@@ -938,7 +983,7 @@ void LLLandmarksPanel::onCustomAction(const LLSD& userdata)
std::string command_name = userdata.asString();
if("more_info" == command_name)
{
- cur_item->getListener()->performAction(mCurrentSelectedList->getRootFolder(),mCurrentSelectedList->getModel(),"about");
+ cur_item->getListener()->performAction(mCurrentSelectedList->getModel(),"about");
}
else if ("teleport" == command_name)
{
@@ -970,6 +1015,9 @@ bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) co
{
// validate own rules first
+ LLFolderViewItem* selected = getCurSelectedItem();
+ if (!selected) return false;
+
// nothing can be modified in Library
if (mLibraryInventoryPanel == mCurrentSelectedList) return false;
@@ -996,24 +1044,41 @@ bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) co
}
// then ask LLFolderView permissions
+
+ LLFolderView* root_folder = mCurrentSelectedList->getRootFolder();
+
+ if ("copy" == command_name)
+ {
+ return root_folder->canCopy();
+ }
+ else if ("collapse" == command_name)
+ {
+ return selected->isOpen();
+ }
+ else if ("expand" == command_name)
+ {
+ return !selected->isOpen();
+ }
+
if (can_be_modified)
{
- LLFolderViewItem* selected = getCurSelectedItem();
+ LLFolderViewEventListener* listenerp = selected->getListener();
+
if ("cut" == command_name)
{
- can_be_modified = mCurrentSelectedList->getRootFolder()->canCut();
+ can_be_modified = root_folder->canCut();
}
else if ("rename" == command_name)
{
- can_be_modified = selected ? selected->getListener()->isItemRenameable() : false;
+ can_be_modified = listenerp ? listenerp->isItemRenameable() : false;
}
else if ("delete" == command_name)
{
- can_be_modified = selected ? selected->getListener()->isItemRemovable(): false;
+ can_be_modified = listenerp ? listenerp->isItemRemovable() && !listenerp->isItemInTrash() : false;
}
else if("paste" == command_name)
{
- return mCurrentSelectedList->getRootFolder()->canPaste();
+ can_be_modified = root_folder->canPaste();
}
else
{
@@ -1197,4 +1262,54 @@ static bool category_has_descendents(LLPlacesInventoryPanel* inventory_list)
return false;
}
+
+static void collapse_all_folders(LLFolderView* root_folder)
+{
+ if (!root_folder)
+ return;
+
+ root_folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_DOWN);
+
+ // The top level folder is invisible, it must be open to
+ // display its sub-folders.
+ root_folder->openTopLevelFolders();
+ root_folder->arrangeAll();
+}
+
+static void expand_all_folders(LLFolderView* root_folder)
+{
+ if (!root_folder)
+ return;
+
+ root_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+ root_folder->arrangeAll();
+}
+
+static bool has_expanded_folders(LLFolderView* root_folder)
+{
+ LLCheckFolderState checker;
+ root_folder->applyFunctorRecursively(checker);
+
+ // We assume that the root folder is always expanded so we enable "collapse_all"
+ // command when we have at least one more expanded folder.
+ if (checker.getExpandedFolders() < 2)
+ {
+ return false;
+ }
+
+ return true;
+}
+
+static bool has_collapsed_folders(LLFolderView* root_folder)
+{
+ LLCheckFolderState checker;
+ root_folder->applyFunctorRecursively(checker);
+
+ if (checker.getCollapsedFolders() < 1)
+ {
+ return false;
+ }
+
+ return true;
+}
// EOF
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
index 6358bd6f23..c9217a4b2f 100644
--- a/indra/newview/llpanellandmarks.h
+++ b/indra/newview/llpanellandmarks.h
@@ -112,7 +112,7 @@ private:
void initMyInventoryPanel();
void initLibraryInventoryPanel();
void initLandmarksPanel(LLPlacesInventoryPanel* inventory_list);
- void initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab);
+ LLAccordionCtrlTab* initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab);
void onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list);
void deselectOtherThan(const LLPlacesInventoryPanel* inventory_list);
@@ -121,7 +121,6 @@ private:
void updateListCommands();
void onActionsButtonClick();
void showActionMenu(LLMenuGL* menu, std::string spawning_view_name);
- void onAddButtonHeldDown();
void onTrashButtonClick() const;
void onAddAction(const LLSD& command_name) const;
void onClipboardAction(const LLSD& command_name) const;
@@ -155,14 +154,14 @@ private:
void doCreatePick(LLLandmark* landmark);
private:
- LLPlacesInventoryPanel* mFavoritesInventoryPanel;
- LLPlacesInventoryPanel* mLandmarksInventoryPanel;
- LLPlacesInventoryPanel* mMyInventoryPanel;
- LLPlacesInventoryPanel* mLibraryInventoryPanel;
+ LLPlacesInventoryPanel* mFavoritesInventoryPanel;
+ LLPlacesInventoryPanel* mLandmarksInventoryPanel;
+ LLPlacesInventoryPanel* mMyInventoryPanel;
+ LLPlacesInventoryPanel* mLibraryInventoryPanel;
LLMenuGL* mGearLandmarkMenu;
LLMenuGL* mGearFolderMenu;
LLMenuGL* mMenuAdd;
- LLPlacesInventoryPanel* mCurrentSelectedList;
+ LLPlacesInventoryPanel* mCurrentSelectedList;
LLInventoryObserver* mInventoryObserver;
LLPanel* mListCommands;
@@ -170,6 +169,8 @@ private:
typedef std::vector<LLAccordionCtrlTab*> accordion_tabs_t;
accordion_tabs_t mAccordionTabs;
+
+ LLAccordionCtrlTab* mMyLandmarksAccordionTab;
};
#endif //LL_LLPANELLANDMARKS_H
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 7bd03167fd..ee4dcc44fe 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -679,6 +679,9 @@ void LLPanelLogin::refreshLocation( bool force_visible )
show_start = gSavedSettings.getBOOL("ShowStartLocation");
}
+ // Update the value of the location combo.
+ updateLocationUI();
+
sInstance->childSetVisible("start_location_combo", show_start);
sInstance->childSetVisible("start_location_text", show_start);
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 2d3401966b..8be4c8402c 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -40,10 +40,12 @@
#include "llfloaterinventory.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
#include "llfiltereditor.h"
#include "llfloaterreg.h"
#include "llpreviewtexture.h"
+#include "llresmgr.h"
#include "llscrollcontainer.h"
#include "llsdserialize.h"
#include "llspinctrl.h"
@@ -117,7 +119,7 @@ LLPanelMainInventory::LLPanelMainInventory()
// Controls
// *TODO: Just use persistant settings for each of these
- U32 sort_order = gSavedSettings.getU32("InventorySortOrder");
+ U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER);
BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE );
BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME );
BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP );
@@ -145,7 +147,7 @@ BOOL LLPanelMainInventory::postBuild()
if (mActivePanel)
{
// "All Items" is the previous only view, so it gets the InventorySortOrder
- mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
+ mActivePanel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER));
mActivePanel->getFilter()->markDefault();
mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
mActivePanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mActivePanel, _1, _2));
@@ -418,12 +420,10 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
return;
}
- gInventory.startBackgroundFetch();
+ LLInventoryModelBackgroundFetch::instance().start();
- std::string uppercase_search_string = search_string;
- LLStringUtil::toUpper(uppercase_search_string);
- mFilterSubString = uppercase_search_string;
- if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
+ mFilterSubString = search_string;
+ if (mActivePanel->getFilterSubString().empty() && mFilterSubString.empty())
{
// current filter and new filter empty, do nothing
return;
@@ -437,7 +437,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
}
// set new filter string
- mActivePanel->setFilterSubString(mFilterSubString);
+ setFilterSubString(mFilterSubString);
}
@@ -500,7 +500,7 @@ void LLPanelMainInventory::onFilterSelected()
if (filter->isActive())
{
// If our filter is active we may be the first thing requiring a fetch so we better start it here.
- gInventory.startBackgroundFetch();
+ LLInventoryModelBackgroundFetch::instance().start();
}
setFilterTextFromFilter();
}
@@ -540,7 +540,7 @@ BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
// virtual
void LLPanelMainInventory::changed(U32)
{
- // empty, but must have this defined for abstract base class.
+ updateItemcountText();
}
@@ -552,6 +552,34 @@ void LLPanelMainInventory::draw()
mFilterEditor->setText(mFilterSubString);
}
LLPanel::draw();
+ updateItemcountText();
+}
+
+void LLPanelMainInventory::updateItemcountText()
+{
+ LLLocale locale(LLLocale::USER_LOCALE);
+ std::string item_count_string;
+ LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount());
+
+ LLStringUtil::format_map_t string_args;
+ string_args["[ITEM_COUNT]"] = item_count_string;
+ string_args["[FILTER]"] = getFilterText();
+
+ std::string text = "";
+
+ if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive())
+ {
+ text = getString("ItemcountFetching", string_args);
+ }
+ else if (LLInventoryModelBackgroundFetch::instance().isEverythingFetched())
+ {
+ text = getString("ItemcountCompleted", string_args);
+ }
+ else
+ {
+ text = getString("ItemcountUnknown");
+ }
+ childSetText("ItemcountText",text);
}
void LLPanelMainInventory::setFilterTextFromFilter()
@@ -573,7 +601,7 @@ void LLPanelMainInventory::toggleFindOptions()
if (parent_floater) // Seraph: Fix this, shouldn't be null even for sidepanel
parent_floater->addDependentFloater(mFinderHandle);
// start background fetch of folders
- gInventory.startBackgroundFetch();
+ LLInventoryModelBackgroundFetch::instance().start();
}
else
{
@@ -1016,7 +1044,7 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
{
return;
}
- current_item->getListener()->performAction(getActivePanel()->getRootFolder(), getActivePanel()->getModel(), "goto");
+ current_item->getListener()->performAction(getActivePanel()->getModel(), "goto");
}
if (command_name == "find_links")
@@ -1061,19 +1089,19 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
if (command_name == "delete")
{
BOOL can_delete = FALSE;
- LLFolderView *folder = getActivePanel()->getRootFolder();
- if (folder)
+ LLFolderView* root = getActivePanel()->getRootFolder();
+ if (root)
{
can_delete = TRUE;
std::set<LLUUID> selection_set;
- folder->getSelectionList(selection_set);
+ root->getSelectionList(selection_set);
if (selection_set.empty()) return FALSE;
for (std::set<LLUUID>::iterator iter = selection_set.begin();
iter != selection_set.end();
++iter)
{
const LLUUID &item_id = (*iter);
- LLFolderViewItem *item = folder->getItemByID(item_id);
+ LLFolderViewItem *item = root->getItemByID(item_id);
const LLFolderViewEventListener *listener = item->getListener();
llassert(listener);
if (!listener) return FALSE;
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index d9ea0da2da..b43e057f83 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -113,7 +113,8 @@ protected:
void setSortBy(const LLSD& userdata);
void saveTexture(const LLSD& userdata);
bool isSaveTextureEnabled(const LLSD& userdata);
-
+ void updateItemcountText();
+
private:
LLFloaterInventoryFinder* getFinder();
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 3504cbd1ef..35acf8edcc 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -36,6 +36,7 @@
#include "llavatarconstants.h"
#include "llpanelme.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llagentwearables.h"
#include "lliconctrl.h"
#include "llsidetray.h"
@@ -144,7 +145,7 @@ void LLPanelMe::onEditAppearanceClicked()
{
if (gAgentWearables.areWearablesLoaded())
{
- gAgent.changeCameraToCustomizeAvatar();
+ gAgentCamera.changeCameraToCustomizeAvatar();
}
}
diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
index 8ad5389566..4f2d6374ca 100644
--- a/indra/newview/llpanelnearbymedia.cpp
+++ b/indra/newview/llpanelnearbymedia.cpp
@@ -82,6 +82,8 @@ LLPanelNearByMedia::LLPanelNearByMedia()
mParcelMediaItem(NULL),
mParcelAudioItem(NULL)
{
+ mHoverTimer.stop();
+
mParcelAudioAutoStart = gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING) &&
gSavedSettings.getBOOL("MediaTentativeAutoPlay");
@@ -135,7 +137,6 @@ BOOL LLPanelNearByMedia::postBuild()
mMediaList = getChild<LLScrollListCtrl>("media_list");
mEnableAllCtrl = getChild<LLUICtrl>("all_nearby_media_enable_btn");
mDisableAllCtrl = getChild<LLUICtrl>("all_nearby_media_disable_btn");
- mItemCountText = getChild<LLTextBox>("media_item_count");
mShowCtrl = getChild<LLComboBox>("show_combo");
// Dynamic (selection-dependent) controls
@@ -189,33 +190,25 @@ void LLPanelNearByMedia::onMouseLeave(S32 x, S32 y, MASK mask)
}
/*virtual*/
+void LLPanelNearByMedia::onTopLost()
+{
+ setVisible(FALSE);
+}
+
+
+/*virtual*/
void LLPanelNearByMedia::handleVisibilityChange ( BOOL new_visibility )
{
if (new_visibility)
{
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
- //gFocusMgr.setTopCtrl(this);
}
else
{
mHoverTimer.stop();
- //if (gFocusMgr.getTopCtrl() == this)
- //{
- // gFocusMgr.setTopCtrl(NULL);
- //}
}
}
-/*virtual*/
-void LLPanelNearByMedia::onTopLost ()
-{
- //LLUICtrl* new_top = gFocusMgr.getTopCtrl();
- //if (!new_top || !new_top->hasAncestor(this))
- //{
- // setVisible(FALSE);
- //}
-}
-
/*virtual*/
void LLPanelNearByMedia::reshape(S32 width, S32 height, BOOL called_from_parent)
{
@@ -232,15 +225,9 @@ void LLPanelNearByMedia::reshape(S32 width, S32 height, BOOL called_from_parent)
const F32 AUTO_CLOSE_FADE_TIME_START= 4.0f;
const F32 AUTO_CLOSE_FADE_TIME_END = 5.0f;
+/*virtual*/
void LLPanelNearByMedia::draw()
{
- //LLUICtrl* new_top = gFocusMgr.getTopCtrl();
- //if (new_top != this)
- //{
- // // reassert top ctrl
- // gFocusMgr.setTopCtrl(this);
- //}
-
// keep bottom of panel on screen
LLRect screen_rect = calcScreenRect();
if (screen_rect.mBottom < 0)
@@ -250,8 +237,6 @@ void LLPanelNearByMedia::draw()
setShape(new_rect);
}
- mItemCountText->setValue(llformat(getString("media_item_count_format").c_str(), mMediaList->getItemCount()));
-
refreshList();
updateControls();
@@ -268,6 +253,21 @@ void LLPanelNearByMedia::draw()
}
}
+/*virtual*/
+BOOL LLPanelNearByMedia::handleHover(S32 x, S32 y, MASK mask)
+{
+ LLPanel::handleHover(x, y, mask);
+
+ // If we are hovering over this panel, make sure to clear any hovered media
+ // ID. Note that the more general solution would be to clear this ID when
+ // the mouse leaves the in-scene view, but that proved to be problematic.
+ // See EXT-5517
+ LLViewerMediaFocus::getInstance()->clearHover();
+
+ // Always handle
+ return true;
+}
+
bool LLPanelNearByMedia::getParcelAudioAutoStart()
{
return mParcelAudioAutoStart;
@@ -535,10 +535,11 @@ void LLPanelNearByMedia::refreshParcelItems()
const LLSD &choice_llsd = mShowCtrl->getSelectedValue();
MediaClass choice = (MediaClass)choice_llsd.asInteger();
// Only show "special parcel items" if "All" or "Within" filter
- bool should_include = choice == MEDIA_CLASS_ALL || choice == MEDIA_CLASS_WITHIN_PARCEL;
+ // (and if media is "enabled")
+ bool should_include = (choice == MEDIA_CLASS_ALL || choice == MEDIA_CLASS_WITHIN_PARCEL);
// First Parcel Media: add or remove it as necessary
- if (should_include && LLViewerMedia::hasParcelMedia())
+ if (gSavedSettings.getBOOL("AudioStreamingMedia") &&should_include && LLViewerMedia::hasParcelMedia())
{
// Yes, there is parcel media.
if (NULL == mParcelMediaItem)
@@ -559,13 +560,16 @@ void LLPanelNearByMedia::refreshParcelItems()
if (NULL != mParcelMediaItem)
{
std::string name, url, tooltip;
- getNameAndUrlHelper(LLViewerParcelMedia::getParcelMedia(), name, url, "");
- if (name.empty() || name == url)
+ if (!LLViewerParcelMgr::getInstance()->getAgentParcel()->getObscureMedia())
{
- tooltip = url;
- }
- else {
- tooltip = name + " : " + url;
+ getNameAndUrlHelper(LLViewerParcelMedia::getParcelMedia(), name, url, "");
+ if (name.empty() || name == url)
+ {
+ tooltip = url;
+ }
+ else {
+ tooltip = name + " : " + url;
+ }
}
LLViewerMediaImpl *impl = LLViewerParcelMedia::getParcelMedia();
updateListItem(mParcelMediaItem,
@@ -579,8 +583,8 @@ void LLPanelNearByMedia::refreshParcelItems()
"parcel media");
}
- // Next Parcel Audio: add or remove it as necessary
- if (should_include && LLViewerMedia::hasParcelAudio())
+ // Next Parcel Audio: add or remove it as necessary (don't show if disabled in prefs)
+ if (should_include && LLViewerMedia::hasParcelAudio() && gSavedSettings.getBOOL("AudioStreamingMusic"))
{
// Yes, there is parcel audio.
if (NULL == mParcelAudioItem)
@@ -601,11 +605,17 @@ void LLPanelNearByMedia::refreshParcelItems()
if (NULL != mParcelAudioItem)
{
bool is_playing = LLViewerMedia::isParcelAudioPlaying();
+
+ std::string url;
+ if (!LLViewerParcelMgr::getInstance()->getAgentParcel()->getObscureMusic())
+ {
+ url = LLViewerMedia::getParcelAudioURL();
+ }
updateListItem(mParcelAudioItem,
mParcelAudioName,
- LLViewerMedia::getParcelAudioURL(),
+ url,
-1, // Proximity after Parcel Media, but closer than anything else
- !is_playing,
+ (!is_playing),
is_playing,
is_playing,
MEDIA_CLASS_ALL,
@@ -692,14 +702,19 @@ void LLPanelNearByMedia::refreshList()
}
}
}
- mDisableAllCtrl->setEnabled(LLViewerMedia::isAnyMediaShowing() ||
- LLViewerMedia::isParcelMediaPlaying() ||
- LLViewerMedia::isParcelAudioPlaying());
- mEnableAllCtrl->setEnabled(disabled_count > 0 ||
- // parcel media (if we have it, and it isn't playing, enable "start")
- (LLViewerMedia::hasParcelMedia() && ! LLViewerMedia::isParcelMediaPlaying()) ||
- // parcel audio (if we have it, and it isn't playing, enable "start")
- (LLViewerMedia::hasParcelAudio() && ! LLViewerMedia::isParcelAudioPlaying()));
+ mDisableAllCtrl->setEnabled((gSavedSettings.getBOOL("AudioStreamingMusic") ||
+ gSavedSettings.getBOOL("AudioStreamingMedia")) &&
+ (LLViewerMedia::isAnyMediaShowing() ||
+ LLViewerMedia::isParcelMediaPlaying() ||
+ LLViewerMedia::isParcelAudioPlaying()));
+
+ mEnableAllCtrl->setEnabled( (gSavedSettings.getBOOL("AudioStreamingMusic") ||
+ gSavedSettings.getBOOL("AudioStreamingMedia")) &&
+ (disabled_count > 0 ||
+ // parcel media (if we have it, and it isn't playing, enable "start")
+ (LLViewerMedia::hasParcelMedia() && ! LLViewerMedia::isParcelMediaPlaying()) ||
+ // parcel audio (if we have it, and it isn't playing, enable "start")
+ (LLViewerMedia::hasParcelAudio() && ! LLViewerMedia::isParcelAudioPlaying())));
// Iterate over the rows in the control, updating ones whose impl exists, and deleting ones whose impl has gone away.
std::vector<LLScrollListItem*> items = mMediaList->getAllData();
@@ -847,7 +862,7 @@ void LLPanelNearByMedia::onClickParcelAudioStart()
// User *explicitly* started the internet stream, so keep the stream
// playing and updated as they cross to other parcels etc.
mParcelAudioAutoStart = true;
-
+
if (!gAudiop)
return;
@@ -957,17 +972,24 @@ void LLPanelNearByMedia::updateControls()
if (selected_media_id == PARCEL_AUDIO_LIST_ITEM_UUID)
{
- showTimeBasedControls(LLViewerMedia::isParcelAudioPlaying(),
+ if (!LLViewerMedia::hasParcelAudio() || !gSavedSettings.getBOOL("AudioStreamingMusic"))
+ {
+ // disable controls if audio streaming music is disabled from preference
+ showDisabledControls();
+ }
+ else {
+ showTimeBasedControls(LLViewerMedia::isParcelAudioPlaying(),
false, // include_zoom
false, // is_zoomed
gSavedSettings.getBOOL("MuteMusic"),
gSavedSettings.getF32("AudioLevelMusic") );
+ }
}
else if (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID)
{
- if (!LLViewerMedia::hasParcelMedia())
+ if (!LLViewerMedia::hasParcelMedia() || !gSavedSettings.getBOOL("AudioStreamingMedia"))
{
- // Shouldn't happen, but do this anyway
+ // disable controls if audio streaming media is disabled from preference
showDisabledControls();
}
else {
@@ -994,7 +1016,7 @@ void LLPanelNearByMedia::updateControls()
else {
LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(selected_media_id);
- if (NULL == impl)
+ if (NULL == impl || !gSavedSettings.getBOOL("AudioStreamingMedia"))
{
showDisabledControls();
}
@@ -1075,15 +1097,18 @@ void LLPanelNearByMedia::onClickSelectedMediaPlay()
{
LLViewerMediaImpl *impl = (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID) ?
((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getMediaImplFromTextureID(selected_media_id);
- if (NULL != impl && impl->isMediaTimeBased() && impl->isMediaPaused())
- {
- // Aha! It's really time-based media that's paused, so unpause
- impl->play();
- return;
- }
- else if (impl->isParcelMedia())
+ if (NULL != impl)
{
- LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
+ if (impl->isMediaTimeBased() && impl->isMediaPaused())
+ {
+ // Aha! It's really time-based media that's paused, so unpause
+ impl->play();
+ return;
+ }
+ else if (impl->isParcelMedia())
+ {
+ LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
+ }
}
}
}
diff --git a/indra/newview/llpanelnearbymedia.h b/indra/newview/llpanelnearbymedia.h
index 6fe724266b..af4659365f 100644
--- a/indra/newview/llpanelnearbymedia.h
+++ b/indra/newview/llpanelnearbymedia.h
@@ -53,9 +53,10 @@ public:
/*virtual*/ void draw();
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
+ /*virtual*/ void onTopLost();
/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
- /*virtual*/ void onTopLost ();
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
+ /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
// this is part of the nearby media *dialog* so we can track whether
// the user *implicitly* wants audio on or off via their *explicit*
@@ -149,7 +150,6 @@ private:
void onClickSelectedMediaUnzoom();
LLUICtrl* mNearbyMediaPanel;
- LLTextBox* mItemCountText;
LLScrollListCtrl* mMediaList;
LLUICtrl* mEnableAllCtrl;
LLUICtrl* mDisableAllCtrl;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 5ddbdf7f01..df74c5dd47 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -50,6 +50,7 @@
#include "llfloaterbuycurrency.h"
#include "llfloaterreg.h"
#include "llinventorybridge.h"
+#include "llinventorydefines.h"
#include "llinventoryfilter.h"
#include "llinventoryfunctions.h"
#include "llpreviewanim.h"
@@ -128,7 +129,7 @@ public:
virtual void pasteFromClipboard();
virtual void pasteLinkFromClipboard();
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual BOOL isUpToDate() const { return TRUE; }
virtual BOOL hasChildren() const { return FALSE; }
virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; }
@@ -344,7 +345,7 @@ time_t LLTaskInvFVBridge::getCreationDate() const
LLUIImagePtr LLTaskInvFVBridge::getIcon() const
{
BOOL item_is_multi = FALSE;
- if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+ if ( mFlags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
{
item_is_multi = TRUE;
}
@@ -595,7 +596,7 @@ BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop,
}
// virtual
-void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLTaskInvFVBridge::performAction(LLInventoryModel* model, std::string action)
{
if (action == "task_buy")
{
@@ -609,7 +610,9 @@ void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* mo
{
if (price > 0 && price > gStatusBar->getBalance())
{
- LLFloaterBuyCurrency::buyCurrency("This costs", price);
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", price);
+ LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_costs", args), price);
}
else
{
@@ -770,8 +773,8 @@ BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
if(object)
{
- LLInventoryItem* inv = NULL;
- if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
+ const LLInventoryItem *inv = dynamic_cast<LLInventoryItem*>(object->getInventoryObject(mUUID));
+ if (inv)
{
const LLPermissions& perm = inv->getPermissions();
bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
@@ -915,7 +918,7 @@ public:
virtual LLUIImagePtr getIcon() const;
virtual void openItem();
- virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ virtual void performAction(LLInventoryModel* model, std::string action);
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
static void openSoundPreview(void* data);
};
@@ -952,7 +955,7 @@ void LLTaskSoundBridge::openSoundPreview(void* data)
}
// virtual
-void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLTaskSoundBridge::performAction(LLInventoryModel* model, std::string action)
{
if (action == "task_play")
{
@@ -962,7 +965,7 @@ void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* mo
send_sound_trigger(item->getAssetUUID(), 1.0);
}
}
- LLTaskInvFVBridge::performAction(folder, model, action);
+ LLTaskInvFVBridge::performAction(model, action);
}
void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
@@ -1188,7 +1191,8 @@ public:
LLTaskObjectBridge(
LLPanelObjectInventory* panel,
const LLUUID& uuid,
- const std::string& name);
+ const std::string& name,
+ U32 flags = 0);
virtual LLUIImagePtr getIcon() const;
};
@@ -1196,15 +1200,16 @@ public:
LLTaskObjectBridge::LLTaskObjectBridge(
LLPanelObjectInventory* panel,
const LLUUID& uuid,
- const std::string& name) :
- LLTaskInvFVBridge(panel, uuid, name)
+ const std::string& name,
+ U32 flags) :
+ LLTaskInvFVBridge(panel, uuid, name, flags)
{
}
LLUIImagePtr LLTaskObjectBridge::getIcon() const
{
BOOL item_is_multi = FALSE;
- if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+ if ( mFlags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
{
item_is_multi = TRUE;
}
@@ -1442,9 +1447,15 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*
// object->getName());
break;
case LLAssetType::AT_OBJECT:
+ {
+ item = dynamic_cast<LLInventoryItem*>(object);
+ U32 flags = ( NULL == item ? 0 : item->getFlags() );
+
new_bridge = new LLTaskObjectBridge(panel,
object->getUUID(),
- object->getName());
+ object->getName(),
+ flags);
+ }
break;
case LLAssetType::AT_NOTECARD:
new_bridge = new LLTaskNotecardBridge(panel,
@@ -1575,9 +1586,10 @@ void LLPanelObjectInventory::reset()
LLRect dummy_rect(0, 1, 1, 0);
LLFolderView::Params p;
p.name = "task inventory";
+ p.title = "task inventory";
p.task_id = getTaskUUID();
p.parent_panel = this;
- p.tool_tip= p.name;
+ p.tool_tip= LLTrans::getString("PanelContentsTooltip");
mFolders = LLUICtrlFactory::create<LLFolderView>(p);
// this ensures that we never say "searching..." or "no items found"
mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
@@ -1604,7 +1616,7 @@ void LLPanelObjectInventory::reset()
}
void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object,
- InventoryObjectList* inventory,
+ LLInventoryObject::object_list_t* inventory,
S32 serial_num,
void* data)
{
@@ -1621,7 +1633,7 @@ void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object,
// refresh any properties floaters that are hanging around.
if(inventory)
{
- for (InventoryObjectList::const_iterator iter = inventory->begin();
+ for (LLInventoryObject::object_list_t::const_iterator iter = inventory->begin();
iter != inventory->end(); )
{
LLInventoryObject* item = *iter++;
@@ -1642,7 +1654,7 @@ void LLPanelObjectInventory::updateInventory()
// We're still interested in this task's inventory.
std::set<LLUUID> selected_items;
BOOL inventory_has_focus = FALSE;
- if (mHaveInventory && mFolders->getNumSelectedDescendants())
+ if (mHaveInventory)
{
mFolders->getSelectionList(selected_items);
inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);
@@ -1654,7 +1666,7 @@ void LLPanelObjectInventory::updateInventory()
if (objectp)
{
LLInventoryObject* inventory_root = objectp->getInventoryRoot();
- InventoryObjectList contents;
+ LLInventoryObject::object_list_t contents;
objectp->getInventoryContents(contents);
if (inventory_root)
{
@@ -1708,7 +1720,7 @@ void LLPanelObjectInventory::updateInventory()
// leads to an N^2 based on the category count. This could be greatly
// speeded with an efficient multimap implementation, but we don't
// have that in our current arsenal.
-void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents)
+void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root, LLInventoryObject::object_list_t& contents)
{
if (!inventory_root)
{
@@ -1737,7 +1749,7 @@ void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root
typedef std::pair<LLInventoryObject*, LLFolderViewFolder*> obj_folder_pair;
-void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* inventory,
+void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_list_t* inventory,
LLInventoryObject* parent,
LLFolderViewFolder* folder)
{
@@ -1746,8 +1758,8 @@ void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* invento
LLTaskInvFVBridge* bridge;
LLFolderViewItem* view;
- InventoryObjectList::iterator it = inventory->begin();
- InventoryObjectList::iterator end = inventory->end();
+ LLInventoryObject::object_list_t::iterator it = inventory->begin();
+ LLInventoryObject::object_list_t::iterator end = inventory->end();
for( ; it != end; ++it)
{
LLInventoryObject* obj = *it;
diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h
index bc339ece35..d015929841 100644
--- a/indra/newview/llpanelobjectinventory.h
+++ b/indra/newview/llpanelobjectinventory.h
@@ -82,12 +82,12 @@ public:
protected:
void reset();
/*virtual*/ void inventoryChanged(LLViewerObject* object,
- InventoryObjectList* inventory,
+ LLInventoryObject::object_list_t* inventory,
S32 serial_num,
void* user_data);
void updateInventory();
- void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents);
- void createViewsForCategory(InventoryObjectList* inventory,
+ void createFolderViews(LLInventoryObject* inventory_root, LLInventoryObject::object_list_t& contents);
+ void createViewsForCategory(LLInventoryObject::object_list_t* inventory,
LLInventoryObject* parent,
LLFolderViewFolder* folder);
void clearContents();
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
new file mode 100644
index 0000000000..cf04ab378f
--- /dev/null
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -0,0 +1,528 @@
+/**
+ * @file llpaneloutfitedit.cpp
+ * @brief Displays outfit edit information in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpaneloutfitedit.h"
+
+// *TODO: reorder includes to match the coding standard
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llappearancemgr.h"
+#include "llinventory.h"
+#include "llviewercontrol.h"
+#include "llui.h"
+#include "llfloater.h"
+#include "llfloaterreg.h"
+#include "llinventoryfunctions.h"
+#include "llinventorypanel.h"
+#include "llviewerwindow.h"
+#include "llviewerinventory.h"
+#include "llbutton.h"
+#include "llcombobox.h"
+#include "llfiltereditor.h"
+#include "llfloaterinventory.h"
+#include "llinventorybridge.h"
+#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
+#include "lluiconstants.h"
+#include "llscrolllistctrl.h"
+#include "lltextbox.h"
+#include "lluictrlfactory.h"
+#include "llsdutil.h"
+#include "llsidepanelappearance.h"
+#include "llwearablelist.h"
+
+static LLRegisterPanelClassWrapper<LLPanelOutfitEdit> t_outfit_edit("panel_outfit_edit");
+
+const U64 WEARABLE_MASK = (1LL << LLInventoryType::IT_WEARABLE);
+const U64 ATTACHMENT_MASK = (1LL << LLInventoryType::IT_ATTACHMENT) | (1LL << LLInventoryType::IT_OBJECT);
+const U64 ALL_ITEMS_MASK = WEARABLE_MASK | ATTACHMENT_MASK;
+
+class LLInventoryLookObserver : public LLInventoryObserver
+{
+public:
+ LLInventoryLookObserver(LLPanelOutfitEdit *panel) : mPanel(panel) {}
+ virtual ~LLInventoryLookObserver()
+ {
+ if (gInventory.containsObserver(this))
+ {
+ gInventory.removeObserver(this);
+ }
+ }
+
+ virtual void changed(U32 mask)
+ {
+ if (mask & (LLInventoryObserver::ADD | LLInventoryObserver::REMOVE))
+ {
+ mPanel->updateLookInfo();
+ }
+ }
+protected:
+ LLPanelOutfitEdit *mPanel;
+};
+
+class LLLookFetchObserver : public LLInventoryFetchDescendentsObserver
+{
+public:
+ LLLookFetchObserver(LLPanelOutfitEdit *panel) :
+ mPanel(panel)
+ {}
+ LLLookFetchObserver() {}
+ virtual void done()
+ {
+ mPanel->lookFetched();
+ if(gInventory.containsObserver(this))
+ {
+ gInventory.removeObserver(this);
+ }
+ }
+private:
+ LLPanelOutfitEdit *mPanel;
+};
+
+
+
+LLPanelOutfitEdit::LLPanelOutfitEdit()
+: LLPanel(), mCurrentOutfitID(), mFetchLook(NULL), mSearchFilter(NULL),
+mLookContents(NULL), mInventoryItemsPanel(NULL), mAddToLookBtn(NULL),
+mRemoveFromLookBtn(NULL), mLookObserver(NULL)
+{
+ mSavedFolderState = new LLSaveFolderState();
+ mSavedFolderState->setApply(FALSE);
+
+ mFetchLook = new LLLookFetchObserver(this);
+ mLookObserver = new LLInventoryLookObserver(this);
+ gInventory.addObserver(mLookObserver);
+
+ mLookItemTypes.reserve(NUM_LOOK_ITEM_TYPES);
+ for (U32 i = 0; i < NUM_LOOK_ITEM_TYPES; i++)
+ {
+ mLookItemTypes.push_back(LLLookItemType());
+ }
+
+ // TODO: make these strings translatable
+ mLookItemTypes[LIT_ALL] = LLLookItemType("All Items", ALL_ITEMS_MASK);
+ mLookItemTypes[LIT_WEARABLE] = LLLookItemType("Shape & Clothing", WEARABLE_MASK);
+ mLookItemTypes[LIT_ATTACHMENT] = LLLookItemType("Attachments", ATTACHMENT_MASK);
+
+}
+
+LLPanelOutfitEdit::~LLPanelOutfitEdit()
+{
+ delete mSavedFolderState;
+ if (gInventory.containsObserver(mFetchLook))
+ {
+ gInventory.removeObserver(mFetchLook);
+ }
+ delete mFetchLook;
+
+ if (gInventory.containsObserver(mLookObserver))
+ {
+ gInventory.removeObserver(mLookObserver);
+ }
+ delete mLookObserver;
+}
+
+BOOL LLPanelOutfitEdit::postBuild()
+{
+ // gInventory.isInventoryUsable() no longer needs to be tested per Richard's fix for race conditions between inventory and panels
+
+ mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name");
+
+ childSetCommitCallback("add_btn", boost::bind(&LLPanelOutfitEdit::showAddWearablesPanel, this), NULL);
+
+ /*
+ mLookContents->setDoubleClickCallback(onDoubleClickSpeaker, this);
+ mLookContents->setCommitOnSelectionChange(TRUE);
+ mLookContents->setCommitCallback(boost::bind(&LLPanelActiveSpeakers::handleSpeakerSelect, this, _2));
+ mLookContents->setSortChangedCallback(boost::bind(&LLPanelActiveSpeakers::onSortChanged, this));
+ mLookContents->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+ */
+
+ mInventoryItemsPanel = getChild<LLInventoryPanel>("inventory_items");
+ mInventoryItemsPanel->setFilterTypes(ALL_ITEMS_MASK);
+ mInventoryItemsPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+ // mInventoryItemsPanel->setSelectCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this, _1, _2));
+ // mInventoryItemsPanel->getRootFolder()->setReshapeCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this, _1, _2));
+
+ LLComboBox* type_filter = getChild<LLComboBox>("inventory_filter");
+ type_filter->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onTypeFilterChanged, this, _1));
+ type_filter->removeall();
+ for (U32 i = 0; i < mLookItemTypes.size(); ++i)
+ {
+ type_filter->add(mLookItemTypes[i].displayName);
+ }
+ type_filter->setCurrentByIndex(LIT_ALL);
+
+ mSearchFilter = getChild<LLFilterEditor>("look_item_filter");
+ mSearchFilter->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onSearchEdit, this, _2));
+
+ /* Removing add to look inline button (not part of mvp for viewer 2)
+ LLButton::Params add_params;
+ add_params.name("add_to_look");
+ add_params.click_callback.function(boost::bind(&LLPanelOutfitEdit::onAddToLookClicked, this));
+ add_params.label("+");
+
+ mAddToLookBtn = LLUICtrlFactory::create<LLButton>(add_params);
+ mAddToLookBtn->setEnabled(FALSE);
+ mAddToLookBtn->setVisible(FALSE); */
+
+ childSetAction("add_item_btn", boost::bind(&LLPanelOutfitEdit::onAddToLookClicked, this), this);
+
+ mUpBtn = getChild<LLButton>("up_btn");
+ mUpBtn->setEnabled(TRUE);
+ mUpBtn->setClickedCallback(boost::bind(&LLPanelOutfitEdit::onUpClicked, this));
+
+ mLookContents = getChild<LLScrollListCtrl>("look_items_list");
+ mLookContents->sortByColumn("look_item_sort", TRUE);
+ mLookContents->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onLookItemSelectionChange, this));
+
+ /*
+ LLButton::Params remove_params;
+ remove_params.name("remove_from_look");
+ remove_params.click_callback.function(boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this));
+ remove_params.label("-"); */
+
+ //mRemoveFromLookBtn = LLUICtrlFactory::create<LLButton>(remove_params);
+ mRemoveFromLookBtn = getChild<LLButton>("remove_from_look_btn");
+ mRemoveFromLookBtn->setEnabled(FALSE);
+ mRemoveFromLookBtn->setVisible(FALSE);
+ //childSetAction("remove_from_look_btn", boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this), this);
+ mRemoveFromLookBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this));
+ //getChild<LLPanel>("look_info_group_bar")->addChild(mRemoveFromLookBtn); remove_item_btn
+
+ mEditWearableBtn = getChild<LLButton>("edit_wearable_btn");
+ mEditWearableBtn->setEnabled(FALSE);
+ mEditWearableBtn->setVisible(FALSE);
+ mEditWearableBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onEditWearableClicked, this));
+
+ childSetAction("remove_item_btn", boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this), this);
+
+ return TRUE;
+}
+
+void LLPanelOutfitEdit::showAddWearablesPanel()
+{
+ childSetVisible("add_wearables_panel", childGetValue("add_btn"));
+}
+
+void LLPanelOutfitEdit::onTypeFilterChanged(LLUICtrl* ctrl)
+{
+ LLComboBox* type_filter = dynamic_cast<LLComboBox*>(ctrl);
+ llassert(type_filter);
+ if (type_filter)
+ {
+ U32 curr_filter_type = type_filter->getCurrentIndex();
+ mInventoryItemsPanel->setFilterTypes(mLookItemTypes[curr_filter_type].inventoryMask);
+ }
+
+ mSavedFolderState->setApply(TRUE);
+ mInventoryItemsPanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+
+ LLOpenFoldersWithSelection opener;
+ mInventoryItemsPanel->getRootFolder()->applyFunctorRecursively(opener);
+ mInventoryItemsPanel->getRootFolder()->scrollToShowSelection();
+
+ LLInventoryModelBackgroundFetch::instance().start();
+}
+
+void LLPanelOutfitEdit::onSearchEdit(const std::string& string)
+{
+ if (mSearchString != string)
+ {
+ mSearchString = string;
+
+ // Searches are case-insensitive
+ LLStringUtil::toUpper(mSearchString);
+ LLStringUtil::trimHead(mSearchString);
+ }
+
+ if (mSearchString == "")
+ {
+ mInventoryItemsPanel->setFilterSubString(LLStringUtil::null);
+
+ // re-open folders that were initially open
+ mSavedFolderState->setApply(TRUE);
+ mInventoryItemsPanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+ LLOpenFoldersWithSelection opener;
+ mInventoryItemsPanel->getRootFolder()->applyFunctorRecursively(opener);
+ mInventoryItemsPanel->getRootFolder()->scrollToShowSelection();
+ }
+
+ LLInventoryModelBackgroundFetch::instance().start();
+
+ if (mInventoryItemsPanel->getFilterSubString().empty() && mSearchString.empty())
+ {
+ // current filter and new filter empty, do nothing
+ return;
+ }
+
+ // save current folder open state if no filter currently applied
+ if (mInventoryItemsPanel->getRootFolder()->getFilterSubString().empty())
+ {
+ mSavedFolderState->setApply(FALSE);
+ mInventoryItemsPanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+ }
+
+ // set new filter string
+ mInventoryItemsPanel->setFilterSubString(mSearchString);
+}
+
+void LLPanelOutfitEdit::onAddToLookClicked(void)
+{
+ LLFolderViewItem* curr_item = mInventoryItemsPanel->getRootFolder()->getCurSelectedItem();
+ LLFolderViewEventListener* listenerp = curr_item->getListener();
+ link_inventory_item(gAgent.getID(), listenerp->getUUID(), mCurrentOutfitID, listenerp->getName(),
+ LLAssetType::AT_LINK, LLPointer<LLInventoryCallback>(NULL));
+ updateLookInfo();
+}
+
+
+void LLPanelOutfitEdit::onRemoveFromLookClicked(void)
+{
+ LLUUID id_to_remove = mLookContents->getSelectionInterface()->getCurrentID();
+
+ LLViewerInventoryItem * item_to_remove = gInventory.getItem(id_to_remove);
+
+ if (item_to_remove)
+ {
+ // returns null if not a wearable (attachment, etc).
+ const LLWearable* wearable_to_remove = gAgentWearables.getWearableFromAssetID(item_to_remove->getAssetUUID());
+ if (!wearable_to_remove || gAgentWearables.canWearableBeRemoved( wearable_to_remove ))
+ {
+ gInventory.purgeObject( id_to_remove );
+ updateLookInfo();
+ mRemoveFromLookBtn->setEnabled(FALSE);
+ if (mRemoveFromLookBtn->getVisible())
+ {
+ mRemoveFromLookBtn->setVisible(FALSE);
+ }
+ }
+ }
+}
+
+
+void LLPanelOutfitEdit::onUpClicked(void)
+{
+ LLUUID inv_id = mLookContents->getSelectionInterface()->getCurrentID();
+ if (inv_id.isNull())
+ {
+ //nothing selected, do nothing
+ return;
+ }
+
+ LLViewerInventoryItem *link_item = gInventory.getItem(inv_id);
+ if (!link_item)
+ {
+ llwarns << "could not find inventory item based on currently worn link." << llendl;
+ return;
+ }
+
+
+ LLUUID asset_id = link_item->getAssetUUID();
+ if (asset_id.isNull())
+ {
+ llwarns << "inventory link has null Asset ID. could not get object reference" << llendl;
+ }
+
+ static const std::string empty = "";
+ LLWearableList::instance().getAsset(asset_id,
+ empty, // don't care about wearable name
+ link_item->getActualType(),
+ LLSidepanelAppearance::editWearable,
+ (void*)getParentUICtrl());
+}
+
+
+void LLPanelOutfitEdit::onEditWearableClicked(void)
+{
+ LLUUID id_to_edit = mLookContents->getSelectionInterface()->getCurrentID();
+ LLViewerInventoryItem * item_to_edit = gInventory.getItem(id_to_edit);
+
+ if (item_to_edit)
+ {
+ // returns null if not a wearable (attachment, etc).
+ LLWearable* wearable_to_edit = gAgentWearables.getWearableFromAssetID(item_to_edit->getAssetUUID());
+ if(wearable_to_edit)
+ {
+ bool can_modify = false;
+ bool is_complete = item_to_edit->isComplete();
+ // if item_to_edit is a link, its properties are not appropriate,
+ // lets get original item with actual properties
+ LLViewerInventoryItem* original_item = gInventory.getItem(wearable_to_edit->getItemID());
+ if(original_item)
+ {
+ can_modify = original_item->getPermissions().allowModifyBy(gAgentID);
+ is_complete = original_item->isComplete();
+ }
+
+ if (can_modify && is_complete)
+ {
+ LLSidepanelAppearance::editWearable(wearable_to_edit, getParent());
+ if (mEditWearableBtn->getVisible())
+ {
+ mEditWearableBtn->setVisible(FALSE);
+ }
+ }
+ }
+ }
+}
+
+void LLPanelOutfitEdit::onInventorySelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
+{
+ LLFolderViewItem* current_item = mInventoryItemsPanel->getRootFolder()->getCurSelectedItem();
+ if (!current_item)
+ {
+ return;
+ }
+
+ /* Removing add to look inline button (not part of mvp for viewer 2)
+ LLRect btn_rect(current_item->getLocalRect().mRight - 50,
+ current_item->getLocalRect().mTop,
+ current_item->getLocalRect().mRight - 30,
+ current_item->getLocalRect().mBottom);
+
+ mAddToLookBtn->setRect(btn_rect);
+ mAddToLookBtn->setEnabled(TRUE);
+ if (!mAddToLookBtn->getVisible())
+ {
+ mAddToLookBtn->setVisible(TRUE);
+ }
+
+ current_item->addChild(mAddToLookBtn); */
+}
+
+void LLPanelOutfitEdit::onLookItemSelectionChange(void)
+{
+ S32 left_offset = -4;
+ S32 top_offset = -10;
+ LLScrollListItem* item = mLookContents->getLastSelectedItem();
+ if (!item)
+ return;
+
+ LLRect rect = item->getRect();
+ LLRect btn_rect(
+ left_offset + rect.mRight - 50,
+ top_offset + rect.mTop,
+ left_offset + rect.mRight - 30,
+ top_offset + rect.mBottom);
+
+ mEditWearableBtn->setRect(btn_rect);
+
+ mEditWearableBtn->setEnabled(TRUE);
+ if (!mEditWearableBtn->getVisible())
+ {
+ mEditWearableBtn->setVisible(TRUE);
+ }
+ //mLookContents->addChild(mRemoveFromLookBtn);
+}
+
+void LLPanelOutfitEdit::changed(U32 mask)
+{
+}
+
+void LLPanelOutfitEdit::lookFetched(void)
+{
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t item_array;
+
+ // collectDescendentsIf takes non-const reference:
+ LLFindCOFValidItems is_cof_valid;
+ gInventory.collectDescendentsIf(mCurrentOutfitID,
+ cat_array,
+ item_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ is_cof_valid);
+ for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin();
+ iter != item_array.end();
+ iter++)
+ {
+ const LLViewerInventoryItem *item = (*iter);
+
+ LLSD row;
+ row["id"] = item->getUUID();
+ LLSD& columns = row["columns"];
+ columns[0]["column"] = "look_item";
+ columns[0]["type"] = "text";
+ columns[0]["value"] = item->getName();
+ columns[1]["column"] = "look_item_sort";
+ columns[1]["type"] = "text"; // TODO: multi-wearable sort "type" should go here.
+ columns[1]["value"] = "BAR"; // TODO: Multi-wearable sort index should go here
+
+ mLookContents->addElement(row);
+ }
+}
+
+void LLPanelOutfitEdit::updateLookInfo()
+{
+ if (getVisible())
+ {
+ mLookContents->clearRows();
+
+ uuid_vec_t folders;
+ folders.push_back(mCurrentOutfitID);
+ mFetchLook->fetch(folders);
+ if (mFetchLook->isEverythingComplete())
+ {
+ mFetchLook->done();
+ }
+ else
+ {
+ gInventory.addObserver(mFetchLook);
+ }
+ }
+}
+
+void LLPanelOutfitEdit::displayCurrentOutfit()
+{
+ if (!getVisible())
+ {
+ setVisible(TRUE);
+ }
+
+ mCurrentOutfitID = LLAppearanceMgr::getInstance()->getCOF();
+
+ std::string current_outfit_name;
+ if (LLAppearanceMgr::getInstance()->getBaseOutfitName(current_outfit_name))
+ {
+ mCurrentOutfitName->setText(current_outfit_name);
+ }
+ else
+ {
+ mCurrentOutfitName->setText(getString("No Outfit"));
+ }
+
+ updateLookInfo();
+}
+
+
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
new file mode 100644
index 0000000000..ba382d7320
--- /dev/null
+++ b/indra/newview/llpaneloutfitedit.h
@@ -0,0 +1,126 @@
+/**
+ * @file llpaneloutfitedit.h
+ * @brief Displays outfit edit information in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELOUTFITEDIT_H
+#define LL_LLPANELOUTFITEDIT_H
+
+#include "llpanel.h"
+
+#include "v3dmath.h"
+#include "lluuid.h"
+
+#include "lliconctrl.h"
+
+#include "llremoteparcelrequest.h"
+#include "llinventory.h"
+#include "llinventorymodel.h"
+
+class LLButton;
+class LLTextBox;
+class LLInventoryCategory;
+class LLInventoryLookObserver;
+class LLInventoryPanel;
+class LLSaveFolderState;
+class LLFolderViewItem;
+class LLScrollListCtrl;
+class LLLookFetchObserver;
+class LLFilterEditor;
+
+class LLPanelOutfitEdit : public LLPanel
+{
+public:
+
+ // NOTE: initialize mLookItemTypes at the index of any new enum you add in the LLPanelOutfitEdit() constructor
+ typedef enum e_look_item_type
+ {
+ LIT_ALL = 0,
+ LIT_WEARABLE, // clothing or shape
+ LIT_ATTACHMENT,
+ NUM_LOOK_ITEM_TYPES
+ } ELookItemType;
+
+ struct LLLookItemType {
+ std::string displayName;
+ U64 inventoryMask;
+ LLLookItemType() : displayName("NONE"), inventoryMask(0) {}
+ LLLookItemType(std::string name, U64 mask) : displayName(name), inventoryMask(mask) {}
+ };
+
+ LLPanelOutfitEdit();
+ /*virtual*/ ~LLPanelOutfitEdit();
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void changed(U32 mask);
+
+ /*virtual*/ void setParcelID(const LLUUID& parcel_id);
+ // Sends a request for data about the given parcel, which will
+ // only update the location if there is none already available.
+
+ void showAddWearablesPanel();
+
+ void onTypeFilterChanged(LLUICtrl* ctrl);
+ void onSearchEdit(const std::string& string);
+ void onInventorySelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+ void onAddToLookClicked(void);
+ void onLookItemSelectionChange(void);
+ void onRemoveFromLookClicked(void);
+ void onEditWearableClicked(void);
+ void onUpClicked(void);
+
+ void displayCurrentOutfit();
+
+ void lookFetched(void);
+
+ void updateLookInfo(void);
+
+private:
+
+ //*TODO got rid of mCurrentOutfitID
+ LLUUID mCurrentOutfitID;
+
+ LLTextBox* mCurrentOutfitName;
+ LLScrollListCtrl* mLookContents;
+ LLInventoryPanel* mInventoryItemsPanel;
+ LLFilterEditor* mSearchFilter;
+ LLSaveFolderState* mSavedFolderState;
+ std::string mSearchString;
+ LLButton* mAddToLookBtn;
+ LLButton* mRemoveFromLookBtn;
+ LLButton* mUpBtn;
+ LLButton* mEditWearableBtn;
+
+ LLLookFetchObserver* mFetchLook;
+ LLInventoryLookObserver* mLookObserver;
+ std::vector<LLLookItemType> mLookItemTypes;
+};
+
+#endif // LL_LLPANELOUTFITEDIT_H
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index c2f2d32142..7d8b1dea0e 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -43,10 +43,12 @@
#include "llfloaterinventory.h"
#include "llfoldervieweventlistener.h"
#include "llinventoryfunctions.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
#include "lllandmark.h"
#include "lllineeditor.h"
#include "llmodaldialog.h"
+#include "llnotificationsutil.h"
#include "llsidepanelappearance.h"
#include "llsidetray.h"
#include "lltabcontainer.h"
@@ -67,75 +69,13 @@ static const std::string COF_TAB_NAME = "cof_tab";
static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory");
bool LLPanelOutfitsInventory::sShowDebugEditor = false;
-class LLOutfitSaveAsDialog : public LLModalDialog
-{
-private:
- std::string mItemName;
- std::string mTempItemName;
-
- boost::signals2::signal<void (const std::string&)> mSaveAsSignal;
-
-public:
- LLOutfitSaveAsDialog( const LLSD& key )
- : LLModalDialog( key ),
- mTempItemName(key.asString())
- {
- }
-
- BOOL postBuild()
- {
- getChild<LLUICtrl>("Save")->setCommitCallback(boost::bind(&LLOutfitSaveAsDialog::onSave, this ));
- getChild<LLUICtrl>("Cancel")->setCommitCallback(boost::bind(&LLOutfitSaveAsDialog::onCancel, this ));
-
- childSetTextArg("name ed", "[DESC]", mTempItemName);
- return TRUE;
- }
-
- void setSaveAsCommit( const boost::signals2::signal<void (const std::string&)>::slot_type& cb )
- {
- mSaveAsSignal.connect(cb);
- }
-
- virtual void onOpen(const LLSD& key)
- {
- LLLineEditor* edit = getChild<LLLineEditor>("name ed");
- if (edit)
- {
- edit->setFocus(TRUE);
- edit->selectAll();
- }
- }
-
- void onSave()
- {
- mItemName = childGetValue("name ed").asString();
- LLStringUtil::trim(mItemName);
- if( !mItemName.empty() )
- {
- mSaveAsSignal(mItemName);
- closeFloater(); // destroys this object
- }
- }
- void onCancel()
- {
- closeFloater(); // destroys this object
- }
-};
-
LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
mActivePanel(NULL),
mParent(NULL)
{
mSavedFolderState = new LLSaveFolderState();
mSavedFolderState->setApply(FALSE);
-
- static bool registered_dialog = false;
- if (!registered_dialog)
- {
- LLFloaterReg::add("outfit_save_as", "floater_outfit_save_as.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutfitSaveAsDialog>);
- registered_dialog = true;
- }
}
LLPanelOutfitsInventory::~LLPanelOutfitsInventory()
@@ -191,7 +131,7 @@ void LLPanelOutfitsInventory::updateVerbs()
if (mListCommands)
{
- mListCommands->childSetVisible("look_edit_btn",sShowDebugEditor);
+ mListCommands->childSetVisible("edit_current_outfit_btn",sShowDebugEditor);
updateListCommands();
}
}
@@ -217,7 +157,7 @@ void LLPanelOutfitsInventory::onSearchEdit(const std::string& string)
getRootFolder()->scrollToShowSelection();
}
- gInventory.startBackgroundFetch();
+ LLInventoryModelBackgroundFetch::instance().start();
if (mActivePanel->getFilterSubString().empty() && string.empty())
{
@@ -241,7 +181,7 @@ void LLPanelOutfitsInventory::onWearButtonClick()
LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
if (listenerp)
{
- listenerp->performAction(NULL, NULL,"replaceoutfit");
+ listenerp->performAction(NULL, "replaceoutfit");
}
}
@@ -250,7 +190,7 @@ void LLPanelOutfitsInventory::onAdd()
LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
if (listenerp)
{
- listenerp->performAction(NULL, NULL,"addtooutfit");
+ listenerp->performAction(NULL, "addtooutfit");
}
}
@@ -259,7 +199,7 @@ void LLPanelOutfitsInventory::onRemove()
LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
if (listenerp)
{
- listenerp->performAction(NULL, NULL,"removefromoutfit");
+ listenerp->performAction(NULL, "removefromoutfit");
}
}
@@ -267,32 +207,56 @@ void LLPanelOutfitsInventory::onEdit()
{
}
+bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (0 == option)
+ {
+ std::string outfit_name = response["message"].asString();
+ LLStringUtil::trim(outfit_name);
+ if( !outfit_name.empty() )
+ {
+ LLUUID outfit_folder = gAgentWearables.makeNewOutfitLinks(outfit_name);
+ LLSD key;
+ LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key);
+
+ if (mAppearanceTabs)
+ {
+ mAppearanceTabs->selectTabByName(OUTFITS_TAB_NAME);
+ }
+ }
+ }
+
+ return false;
+}
+
+
+
void LLPanelOutfitsInventory::onSave()
{
std::string outfit_name;
- if (!LLAppearanceManager::getInstance()->getBaseOutfitName(outfit_name))
+ if (!LLAppearanceMgr::getInstance()->getBaseOutfitName(outfit_name))
{
outfit_name = LLViewerFolderType::lookupNewCategoryName(LLFolderType::FT_OUTFIT);
}
+ LLSD args;
+ args["DESC"] = outfit_name;
+
+ LLSD payload;
+ //payload["ids"].append(*it);
+
+ LLNotificationsUtil::add("SaveOutfitAs", args, payload, boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1, _2));
+
+ //)
+
+/*
LLOutfitSaveAsDialog* save_as_dialog = LLFloaterReg::showTypedInstance<LLOutfitSaveAsDialog>("outfit_save_as", LLSD(outfit_name), TRUE);
if (save_as_dialog)
{
save_as_dialog->setSaveAsCommit(boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1 ));
- }
-}
-
-void LLPanelOutfitsInventory::onSaveCommit(const std::string& outfit_name)
-{
- LLUUID outfit_folder = gAgentWearables.makeNewOutfitLinks(outfit_name);
- LLSD key;
- LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key);
-
- if (mAppearanceTabs)
- {
- mAppearanceTabs->selectTabByName(OUTFITS_TAB_NAME);
- }
+ }*/
}
void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
@@ -305,19 +269,12 @@ void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewIte
}
}
-void LLPanelOutfitsInventory::onSelectorButtonClicked()
+void LLPanelOutfitsInventory::showEditOutfitPanel()
{
- LLFolderViewItem* cur_item = getRootFolder()->getCurSelectedItem();
-
- LLFolderViewEventListener* listenerp = cur_item->getListener();
- if (getIsCorrectType(listenerp))
- {
- LLSD key;
- key["type"] = "look";
- key["id"] = listenerp->getUUID();
-
- LLSideTray::getInstance()->showPanel("sidepanel_appearance", key);
- }
+ LLSD key;
+ key["type"] = "edit_outfit";
+
+ LLSideTray::getInstance()->showPanel("sidepanel_appearance", key);
}
LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction()
@@ -364,7 +321,7 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
mListCommands->childSetAction("make_outfit_btn", boost::bind(&LLPanelOutfitsInventory::onAddButtonClick, this));
mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this));
- mListCommands->childSetAction("look_edit_btn", boost::bind(&LLPanelOutfitsInventory::onSelectorButtonClicked, this));
+ mListCommands->childSetAction("edit_current_outfit_btn", boost::bind(&LLPanelOutfitsInventory::showEditOutfitPanel, this));
LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this
@@ -479,18 +436,18 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
if (command_name == "delete" || command_name == "remove")
{
BOOL can_delete = FALSE;
- LLFolderView *folder = getActivePanel()->getRootFolder();
- if (folder)
+ LLFolderView* root = getActivePanel()->getRootFolder();
+ if (root)
{
std::set<LLUUID> selection_set;
- folder->getSelectionList(selection_set);
+ root->getSelectionList(selection_set);
can_delete = (selection_set.size() > 0);
for (std::set<LLUUID>::iterator iter = selection_set.begin();
iter != selection_set.end();
++iter)
{
const LLUUID &item_id = (*iter);
- LLFolderViewItem *item = folder->getItemByID(item_id);
+ LLFolderViewItem *item = root->getItemByID(item_id);
can_delete &= item->getListener()->isItemRemovable();
}
return can_delete;
@@ -500,11 +457,11 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
if (command_name == "remove_link")
{
BOOL can_delete = FALSE;
- LLFolderView *folder = getActivePanel()->getRootFolder();
- if (folder)
+ LLFolderView* root = getActivePanel()->getRootFolder();
+ if (root)
{
std::set<LLUUID> selection_set;
- folder->getSelectionList(selection_set);
+ root->getSelectionList(selection_set);
can_delete = (selection_set.size() > 0);
for (std::set<LLUUID>::iterator iter = selection_set.begin();
iter != selection_set.end();
@@ -549,11 +506,11 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
bool LLPanelOutfitsInventory::hasItemsSelected()
{
bool has_items_selected = false;
- LLFolderView *folder = getActivePanel()->getRootFolder();
- if (folder)
+ LLFolderView* root = getActivePanel()->getRootFolder();
+ if (root)
{
std::set<LLUUID> selection_set;
- folder->getSelectionList(selection_set);
+ root->getSelectionList(selection_set);
has_items_selected = (selection_set.size() > 0);
}
return has_items_selected;
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index ab25ef0a49..41afc2f372 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -61,10 +61,10 @@ public:
void onEdit();
void onSave();
- void onSaveCommit(const std::string& item_name);
+ bool onSaveCommit(const LLSD& notification, const LLSD& response);
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
- void onSelectorButtonClicked();
+ void showEditOutfitPanel();
// If a compatible listener type is selected, then return a pointer to that.
// Otherwise, return NULL.
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index d2a518a06a..5802d53cd1 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -134,13 +134,13 @@ public:
typedef std::map < LLUUID, LLVector3d > id_to_pos_map_t;
LLAvatarItemDistanceComparator() {};
- void updateAvatarsPositions(std::vector<LLVector3d>& positions, std::vector<LLUUID>& uuids)
+ void updateAvatarsPositions(std::vector<LLVector3d>& positions, uuid_vec_t& uuids)
{
std::vector<LLVector3d>::const_iterator
pos_it = positions.begin(),
pos_end = positions.end();
- std::vector<LLUUID>::const_iterator
+ uuid_vec_t::const_iterator
id_it = uuids.begin(),
id_end = uuids.end();
@@ -178,8 +178,8 @@ public:
protected:
virtual bool doCompare(const LLAvatarListItem* item1, const LLAvatarListItem* item2) const
{
- LLPointer<LLSpeaker> lhs = LLLocalSpeakerMgr::instance().findSpeaker(item1->getAvatarId());
- LLPointer<LLSpeaker> rhs = LLLocalSpeakerMgr::instance().findSpeaker(item2->getAvatarId());
+ LLPointer<LLSpeaker> lhs = LLActiveSpeakerMgr::instance().findSpeaker(item1->getAvatarId());
+ LLPointer<LLSpeaker> rhs = LLActiveSpeakerMgr::instance().findSpeaker(item2->getAvatarId());
if ( lhs.notNull() && rhs.notNull() )
{
// Compare by last speaking time
@@ -519,6 +519,8 @@ BOOL LLPanelPeople::postBuild()
mRecentList->setShowIcons("RecentListShowIcons");
mGroupList = getChild<LLGroupList>("group_list");
+ mGroupList->setNoGroupsMsg(getString("no_groups_msg"));
+ mGroupList->setNoFilteredGroupsMsg(getString("no_filtered_groups_msg"));
mNearbyList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
mRecentList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
@@ -650,8 +652,8 @@ void LLPanelPeople::updateFriendList()
av_tracker.copyBuddyList(all_buddies);
// save them to the online and all friends vectors
- LLAvatarList::uuid_vector_t& online_friendsp = mOnlineFriendList->getIDs();
- LLAvatarList::uuid_vector_t& all_friendsp = mAllFriendList->getIDs();
+ uuid_vec_t& online_friendsp = mOnlineFriendList->getIDs();
+ uuid_vec_t& all_friendsp = mAllFriendList->getIDs();
all_friendsp.clear();
online_friendsp.clear();
@@ -670,11 +672,6 @@ void LLPanelPeople::updateFriendList()
lldebugs << "Friends Cards were not found" << llendl;
}
- // show special help text for just created account to help found friends. EXT-4836
- static LLTextBox* no_friends_text = getChild<LLTextBox>("no_friends_msg");
- no_friends_text->setVisible(all_friendsp.size() == 0);
-
-
LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
for (; buddy_it != all_buddies.end(); ++buddy_it)
{
@@ -683,9 +680,23 @@ void LLPanelPeople::updateFriendList()
online_friendsp.push_back(buddy_id);
}
- mOnlineFriendList->setDirty();
- mAllFriendList->setDirty();
+ // show special help text for just created account to help found friends. EXT-4836
+ static LLTextBox* no_friends_text = getChild<LLTextBox>("no_friends_msg");
+
+ // Seems sometimes all_friends can be empty because of issue with Inventory loading (clear cache, slow connection...)
+ // So, lets check all lists to avoid overlapping the text with online list. See EXT-6448.
+ bool any_friend_exists = (all_friendsp.size() > 0) || (online_friendsp.size() > 0);
+ no_friends_text->setVisible(!any_friend_exists);
+ /*
+ * Avatarlists will be hidden by showFriendsAccordionsIfNeeded(), if they do not have items.
+ * But avatarlist can be updated only if it is visible @see LLAvatarList::draw();
+ * So we need to do force update of lists to avoid inconsistency of data and view of avatarlist.
+ */
+ mOnlineFriendList->setDirty(true, !mOnlineFriendList->filterHasMatches());// do force update if list do NOT have items
+ mAllFriendList->setDirty(true, !mAllFriendList->filterHasMatches());
+ //update trash and other buttons according to a selected item
+ updateButtons();
showFriendsAccordionsIfNeeded();
}
@@ -700,7 +711,7 @@ void LLPanelPeople::updateNearbyList()
mNearbyList->setDirty();
DISTANCE_COMPARATOR.updateAvatarsPositions(positions, mNearbyList->getIDs());
- LLLocalSpeakerMgr::instance().update(TRUE);
+ LLActiveSpeakerMgr::instance().update(TRUE);
}
void LLPanelPeople::updateRecentList()
@@ -735,7 +746,7 @@ void LLPanelPeople::buttonSetAction(const std::string& btn_name, const commit_si
bool LLPanelPeople::isFriendOnline(const LLUUID& id)
{
- LLAvatarList::uuid_vector_t ids = mOnlineFriendList->getIDs();
+ uuid_vec_t ids = mOnlineFriendList->getIDs();
return std::find(ids.begin(), ids.end(), id) != ids.end();
}
@@ -748,7 +759,7 @@ void LLPanelPeople::updateButtons()
//bool recent_tab_active = (cur_tab == RECENT_TAB_NAME);
LLUUID selected_id;
- std::vector<LLUUID> selected_uuids;
+ uuid_vec_t selected_uuids;
getCurrentItemIDs(selected_uuids);
bool item_selected = (selected_uuids.size() == 1);
bool multiple_selected = (selected_uuids.size() >= 1);
@@ -844,7 +855,7 @@ LLUUID LLPanelPeople::getCurrentItemID() const
return LLUUID::null;
}
-void LLPanelPeople::getCurrentItemIDs(std::vector<LLUUID>& selected_uuids) const
+void LLPanelPeople::getCurrentItemIDs(uuid_vec_t& selected_uuids) const
{
std::string cur_tab = getActiveTabName();
@@ -1055,10 +1066,10 @@ void LLPanelPeople::onAddFriendButtonClicked()
}
}
-bool LLPanelPeople::isItemsFreeOfFriends(const std::vector<LLUUID>& uuids)
+bool LLPanelPeople::isItemsFreeOfFriends(const uuid_vec_t& uuids)
{
const LLAvatarTracker& av_tracker = LLAvatarTracker::instance();
- for ( std::vector<LLUUID>::const_iterator
+ for ( uuid_vec_t::const_iterator
id = uuids.begin(),
id_end = uuids.end();
id != id_end; ++id )
@@ -1086,7 +1097,7 @@ void LLPanelPeople::onAddFriendWizButtonClicked()
void LLPanelPeople::onDeleteFriendButtonClicked()
{
- std::vector<LLUUID> selected_uuids;
+ uuid_vec_t selected_uuids;
getCurrentItemIDs(selected_uuids);
if (selected_uuids.size() == 1)
@@ -1113,7 +1124,7 @@ void LLPanelPeople::onChatButtonClicked()
void LLPanelPeople::onImButtonClicked()
{
- std::vector<LLUUID> selected_uuids;
+ uuid_vec_t selected_uuids;
getCurrentItemIDs(selected_uuids);
if ( selected_uuids.size() == 1 )
{
@@ -1135,7 +1146,7 @@ void LLPanelPeople::onActivateButtonClicked()
// static
void LLPanelPeople::onAvatarPicked(
const std::vector<std::string>& names,
- const std::vector<LLUUID>& ids)
+ const uuid_vec_t& ids)
{
if (!names.empty() && !ids.empty())
LLAvatarActions::requestFriendshipDialog(ids[0], names[0]);
@@ -1285,7 +1296,7 @@ bool LLPanelPeople::onRecentViewSortMenuItemCheck(const LLSD& userdata)
void LLPanelPeople::onCallButtonClicked()
{
- std::vector<LLUUID> selected_uuids;
+ uuid_vec_t selected_uuids;
getCurrentItemIDs(selected_uuids);
if (selected_uuids.size() == 1)
@@ -1434,9 +1445,6 @@ void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param
{
showAccordion("tab_all", param.asInteger());
}
-
- LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
- accordion->arrange();
}
void LLPanelPeople::setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed)
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index 6d3d436156..891381e2de 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -78,12 +78,12 @@ private:
void updateRecentList();
bool isFriendOnline(const LLUUID& id);
- bool isItemsFreeOfFriends(const std::vector<LLUUID>& uuids);
+ bool isItemsFreeOfFriends(const uuid_vec_t& uuids);
void updateButtons();
std::string getActiveTabName() const;
LLUUID getCurrentItemID() const;
- void getCurrentItemIDs(std::vector<LLUUID>& selected_uuids) const;
+ void getCurrentItemIDs(uuid_vec_t& selected_uuids) const;
void buttonSetVisible(std::string btn_name, BOOL visible);
void buttonSetEnabled(const std::string& btn_name, bool enabled);
void buttonSetAction(const std::string& btn_name, const commit_signal_t::slot_type& cb);
@@ -134,7 +134,7 @@ private:
// misc callbacks
static void onAvatarPicked(
const std::vector<std::string>& names,
- const std::vector<LLUUID>& ids);
+ const uuid_vec_t& ids);
void onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list);
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index 900d28adca..862e32cca8 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -39,6 +39,7 @@
#include "llpanelpeoplemenus.h"
// newview
+#include "llagent.h"
#include "llagentdata.h" // for gAgentID
#include "llavataractions.h"
#include "llviewermenu.h" // for gMenuHolder
@@ -71,7 +72,7 @@ ContextMenu::~ContextMenu()
}
}
-void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y)
+void ContextMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y)
{
if (mMenu)
{
@@ -125,7 +126,7 @@ LLContextMenu* NearbyMenu::createMenu()
registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startIM, id));
registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startCall, id));
registrar.add("Avatar.OfferTeleport", boost::bind(&NearbyMenu::offerTeleport, this));
- registrar.add("Avatar.ShowOnMap", boost::bind(&LLAvatarActions::startIM, id)); // *TODO: unimplemented
+ registrar.add("Avatar.ShowOnMap", boost::bind(&LLAvatarActions::showOnMap, id));
registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::share, id));
registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, id));
registrar.add("Avatar.BlockUnblock", boost::bind(&LLAvatarActions::toggleBlock, id));
@@ -176,7 +177,7 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)
bool result = (mUUIDs.size() > 0);
- std::vector<LLUUID>::const_iterator
+ uuid_vec_t::const_iterator
id = mUUIDs.begin(),
uuids_end = mUUIDs.end();
@@ -199,7 +200,7 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)
bool result = (mUUIDs.size() > 0);
- std::vector<LLUUID>::const_iterator
+ uuid_vec_t::const_iterator
id = mUUIDs.begin(),
uuids_end = mUUIDs.end();
@@ -218,6 +219,18 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)
{
return LLAvatarActions::canCall();
}
+ else if (item == std::string("can_show_on_map"))
+ {
+ const LLUUID& id = mUUIDs.front();
+
+ return (LLAvatarTracker::instance().isBuddyOnline(id) && is_agent_mappable(id))
+ || gAgent.isGodlike();
+ }
+ else if(item == std::string("can_offer_teleport"))
+ {
+ const LLUUID& id = mUUIDs.front();
+ return LLAvatarActions::canOfferTeleport(id);
+ }
return false;
}
diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h
index 913638d8c8..8e12710afc 100644
--- a/indra/newview/llpanelpeoplemenus.h
+++ b/indra/newview/llpanelpeoplemenus.h
@@ -52,7 +52,7 @@ public:
*
* @param uuids - an array of avatar or group ids
*/
- /*virtual*/ void show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y);
+ /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y);
virtual void hide();
@@ -60,7 +60,7 @@ protected:
virtual LLContextMenu* createMenu() = 0;
- std::vector<LLUUID> mUUIDs;
+ uuid_vec_t mUUIDs;
LLContextMenu* mMenu;
LLHandle<LLView> mMenuHandle;
};
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
index 01b6e8ffad..71d16a08b4 100644
--- a/indra/newview/llpanelpermissions.cpp
+++ b/indra/newview/llpanelpermissions.cpp
@@ -195,8 +195,8 @@ void LLPanelPermissions::disableAll()
childSetEnabled("Owner Name", FALSE);
childSetEnabled("Group:", FALSE);
- childSetText("Group Name", LLStringUtil::null);
- childSetEnabled("Group Name", FALSE);
+ childSetText("Group Name Proxy", LLStringUtil::null);
+ childSetEnabled("Group Name Proxy", FALSE);
childSetEnabled("button set group", FALSE);
childSetText("Object Name", LLStringUtil::null);
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index 5ac0587550..f0dc493ebe 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -72,12 +72,6 @@
#define XML_BTN_ON_TXTR "edit_icon"
#define XML_BTN_SAVE "save_changes_btn"
-#define SAVE_BTN_LABEL "[WHAT]"
-#define LABEL_PICK = "Pick"
-#define LABEL_CHANGES = "Changes"
-
-std::string SET_LOCATION_NOTICE("(will update after save)");
-
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
@@ -150,8 +144,6 @@ BOOL LLPanelPickInfo::postBuild()
{
mSnapshotCtrl = getChild<LLTextureCtrl>(XML_SNAPSHOT);
- childSetLabelArg(XML_BTN_SAVE, SAVE_BTN_LABEL, std::string("Pick"));
-
childSetAction("teleport_btn", boost::bind(&LLPanelPickInfo::onClickTeleport, this));
childSetAction("show_on_map_btn", boost::bind(&LLPanelPickInfo::onClickMap, this));
childSetAction("back_btn", boost::bind(&LLPanelPickInfo::onClickBack, this));
@@ -410,7 +402,7 @@ void LLPanelPickEdit::onOpen(const LLSD& key)
childSetValue("pick_name", pick_name.empty() ? region_name : pick_name);
childSetValue("pick_desc", pick_desc);
setSnapshotId(snapshot_id);
- setPickLocation(createLocationText(SET_LOCATION_NOTICE, pick_name, region_name, getPosGlobal()));
+ setPickLocation(createLocationText(getLocationNotice(), pick_name, region_name, getPosGlobal()));
enableSaveButton(true);
}
@@ -578,7 +570,7 @@ void LLPanelPickEdit::onClickSetLocation()
region_name = region->getName();
}
- setPickLocation(createLocationText(SET_LOCATION_NOTICE, parcel_name, region_name, getPosGlobal()));
+ setPickLocation(createLocationText(getLocationNotice(), parcel_name, region_name, getPosGlobal()));
mLocationChanged = true;
enableSaveButton(TRUE);
@@ -595,6 +587,12 @@ void LLPanelPickEdit::onClickSave()
notifyParent(params);
}
+std::string LLPanelPickEdit::getLocationNotice()
+{
+ static std::string notice = getString("location_notice");
+ return notice;
+}
+
void LLPanelPickEdit::processProperties(void* data, EAvatarProcessorType type)
{
if(mNeedData)
diff --git a/indra/newview/llpanelpick.h b/indra/newview/llpanelpick.h
index 4f27760a8d..94ee2f83ab 100644
--- a/indra/newview/llpanelpick.h
+++ b/indra/newview/llpanelpick.h
@@ -248,6 +248,8 @@ protected:
*/
void onClickSave();
+ std::string getLocationNotice();
+
protected:
bool mLocationChanged;
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 2ff2597f08..bde8d02885 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -140,10 +140,11 @@ public:
params["open_tab_name"] = "panel_picks";
params["show_tab_panel"] = "classified_details";
params["classified_id"] = c_info->classified_id;
- params["classified_avatar_id"] = c_info->creator_id;
+ params["classified_creator_id"] = c_info->creator_id;
params["classified_snapshot_id"] = c_info->snapshot_id;
params["classified_name"] = c_info->name;
params["classified_desc"] = c_info->description;
+ params["from_search"] = true;
LLSideTray::getInstance()->showPanel("panel_profile_view", params);
}
@@ -174,31 +175,6 @@ LLClassifiedHandler gClassifiedHandler;
//////////////////////////////////////////////////////////////////////////
-/**
- * Copy&Pasted from old LLPanelClassified. This class does nothing at the moment.
- * Subscribing to "classifiedclickthrough" removes a few warnings.
- */
-class LLClassifiedClickThrough : public LLDispatchHandler
-{
-public:
-
- // "classifiedclickthrough"
- // strings[0] = classified_id
- // strings[1] = teleport_clicks
- // strings[2] = map_clicks
- // strings[3] = profile_clicks
- virtual bool operator()(
- const LLDispatcher* dispatcher,
- const std::string& key,
- const LLUUID& invoice,
- const sparam_t& strings)
- {
- if (strings.size() != 4)
- return false;
-
- return true;
- }
-};
//-----------------------------------------------------------------------------
// LLPanelPicks
@@ -216,13 +192,9 @@ LLPanelPicks::LLPanelPicks()
mPicksAccTab(NULL),
mClassifiedsAccTab(NULL),
mPanelClassifiedInfo(NULL),
- mPanelClassifiedEdit(NULL),
- mClickThroughDisp(NULL),
mNoClassifieds(false),
mNoPicks(false)
{
- mClickThroughDisp = new LLClassifiedClickThrough();
- gGenericDispatcher.addHandler("classifiedclickthrough", mClickThroughDisp);
}
LLPanelPicks::~LLPanelPicks()
@@ -231,8 +203,6 @@ LLPanelPicks::~LLPanelPicks()
{
LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
}
-
- delete mClickThroughDisp;
}
void* LLPanelPicks::create(void* data /* = NULL */)
@@ -318,7 +288,8 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
LLAvatarClassifieds* c_info = static_cast<LLAvatarClassifieds*>(data);
if(c_info && getAvatarId() == c_info->target_id)
{
- mClassifiedsList->clear();
+ // do not clear classified list in case we will receive two or more data packets.
+ // list has been cleared in updateData(). (fix for EXT-6436)
LLAvatarClassifieds::classifieds_list_t::const_iterator it = c_info->classifieds_list.begin();
for(; c_info->classifieds_list.end() != it; ++it)
@@ -414,6 +385,9 @@ BOOL LLPanelPicks::postBuild()
registar.add("Pick.Teleport", boost::bind(&LLPanelPicks::onClickTeleport, this));
registar.add("Pick.Map", boost::bind(&LLPanelPicks::onClickMap, this));
registar.add("Pick.Delete", boost::bind(&LLPanelPicks::onClickDelete, this));
+ LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registar;
+ enable_registar.add("Pick.Enable", boost::bind(&LLPanelPicks::onEnableMenuItem, this, _2));
+
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_picks.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar plus_registar;
@@ -450,6 +424,22 @@ bool LLPanelPicks::isActionEnabled(const LLSD& userdata) const
return true;
}
+bool LLPanelPicks::isClassifiedPublished(LLClassifiedItem* c_item)
+{
+ if(c_item)
+ {
+ LLPanelClassifiedEdit* panel = mEditClassifiedPanels[c_item->getClassifiedId()];
+ if(panel)
+ {
+ return !panel->isNewWithErrors();
+ }
+
+ // we've got this classified from server - it's published
+ return true;
+ }
+ return false;
+}
+
void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab)
{
if(!mPicksAccTab->getDisplayChildren())
@@ -607,7 +597,11 @@ void LLPanelPicks::onClickTeleport()
if(pick_item)
pos = pick_item->getPosGlobal();
else if(c_item)
+ {
pos = c_item->getPosGlobal();
+ LLPanelClassifiedInfo::sendClickMessage("teleport", false,
+ c_item->getClassifiedId(), LLUUID::null, pos, LLStringUtil::null);
+ }
if (!pos.isExactlyZero())
{
@@ -626,7 +620,11 @@ void LLPanelPicks::onClickMap()
if (pick_item)
pos = pick_item->getPosGlobal();
else if(c_item)
+ {
+ LLPanelClassifiedInfo::sendClickMessage("map", false,
+ c_item->getClassifiedId(), LLUUID::null, pos, LLStringUtil::null);
pos = c_item->getPosGlobal();
+ }
LLFloaterWorldMap::getInstance()->trackLocation(pos);
LLFloaterReg::showInstance("world_map", "center");
@@ -678,6 +676,12 @@ void LLPanelPicks::updateButtons()
childSetEnabled(XML_BTN_INFO, has_selected);
childSetEnabled(XML_BTN_TELEPORT, has_selected);
childSetEnabled(XML_BTN_SHOW_ON_MAP, has_selected);
+
+ LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
+ if(c_item)
+ {
+ childSetEnabled(XML_BTN_INFO, isClassifiedPublished(c_item));
+ }
}
void LLPanelPicks::setProfilePanel(LLPanelProfile* profile_panel)
@@ -714,9 +718,10 @@ void LLPanelPicks::createNewPick()
void LLPanelPicks::createNewClassified()
{
- createClassifiedEditPanel();
+ LLPanelClassifiedEdit* panel = NULL;
+ createClassifiedEditPanel(&panel);
- getProfilePanel()->openPanel(mPanelClassifiedEdit, LLSD());
+ getProfilePanel()->openPanel(panel, LLSD());
}
void LLPanelPicks::onClickInfo()
@@ -756,26 +761,20 @@ void LLPanelPicks::openClassifiedInfo()
if (selected_value.isUndefined()) return;
LLClassifiedItem* c_item = getSelectedClassifiedItem();
+ LLSD params;
+ params["classified_id"] = c_item->getClassifiedId();
+ params["classified_creator_id"] = c_item->getAvatarId();
+ params["classified_snapshot_id"] = c_item->getSnapshotId();
+ params["classified_name"] = c_item->getClassifiedName();
+ params["classified_desc"] = c_item->getDescription();
+ params["from_search"] = false;
- openClassifiedInfo(c_item->getClassifiedId(), c_item->getAvatarId(),
- c_item->getSnapshotId(), c_item->getClassifiedName(),
- c_item->getDescription());
+ openClassifiedInfo(params);
}
-void LLPanelPicks::openClassifiedInfo(const LLUUID &classified_id,
- const LLUUID &avatar_id,
- const LLUUID &snapshot_id,
- const std::string &name, const std::string &desc)
+void LLPanelPicks::openClassifiedInfo(const LLSD &params)
{
createClassifiedInfoPanel();
-
- LLSD params;
- params["classified_id"] = classified_id;
- params["avatar_id"] = avatar_id;
- params["snapshot_id"] = snapshot_id;
- params["name"] = name;
- params["desc"] = desc;
-
getProfilePanel()->openPanel(mPanelClassifiedInfo, params);
}
@@ -807,11 +806,10 @@ void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel)
if(panel->isNew())
{
+ mEditClassifiedPanels[panel->getClassifiedId()] = panel;
+
LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), panel->getClassifiedId());
-
- c_item->setClassifiedName(panel->getClassifiedName());
- c_item->setDescription(panel->getDescription());
- c_item->setSnapshotId(panel->getSnapshotId());
+ c_item->fillIn(panel);
LLSD c_value;
c_value.insert(CLASSIFIED_ID, c_item->getClassifiedId());
@@ -827,6 +825,15 @@ void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel)
mClassifiedsAccTab->changeOpenClose(false);
showAccordion("tab_classifieds", true);
}
+ else if(panel->isNewWithErrors())
+ {
+ LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
+ llassert(c_item);
+ if (c_item)
+ {
+ c_item->fillIn(panel);
+ }
+ }
else
{
onPanelClassifiedClose(panel);
@@ -887,15 +894,16 @@ void LLPanelPicks::createClassifiedInfoPanel()
}
}
-void LLPanelPicks::createClassifiedEditPanel()
+void LLPanelPicks::createClassifiedEditPanel(LLPanelClassifiedEdit** panel)
{
- if(!mPanelClassifiedEdit)
+ if(panel)
{
- mPanelClassifiedEdit = LLPanelClassifiedEdit::create();
- mPanelClassifiedEdit->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedEdit));
- mPanelClassifiedEdit->setSaveCallback(boost::bind(&LLPanelPicks::onPanelClassifiedSave, this, mPanelClassifiedEdit));
- mPanelClassifiedEdit->setCancelCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedEdit));
- mPanelClassifiedEdit->setVisible(FALSE);
+ LLPanelClassifiedEdit* new_panel = LLPanelClassifiedEdit::create();
+ new_panel->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, new_panel));
+ new_panel->setSaveCallback(boost::bind(&LLPanelPicks::onPanelClassifiedSave, this, new_panel));
+ new_panel->setCancelCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, new_panel));
+ new_panel->setVisible(FALSE);
+ *panel = new_panel;
}
}
@@ -967,17 +975,32 @@ void LLPanelPicks::onPanelClassifiedEdit()
}
LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
-
- createClassifiedEditPanel();
+ llassert(c_item);
+ if (!c_item)
+ {
+ return;
+ }
LLSD params;
params["classified_id"] = c_item->getClassifiedId();
- params["avatar_id"] = c_item->getAvatarId();
+ params["classified_creator_id"] = c_item->getAvatarId();
params["snapshot_id"] = c_item->getSnapshotId();
params["name"] = c_item->getClassifiedName();
params["desc"] = c_item->getDescription();
-
- getProfilePanel()->openPanel(mPanelClassifiedEdit, params);
+ params["category"] = (S32)c_item->getCategory();
+ params["content_type"] = (S32)c_item->getContentType();
+ params["auto_renew"] = c_item->getAutoRenew();
+ params["price_for_listing"] = c_item->getPriceForListing();
+ params["location_text"] = c_item->getLocationText();
+
+ LLPanelClassifiedEdit* panel = mEditClassifiedPanels[c_item->getClassifiedId()];
+ if(!panel)
+ {
+ createClassifiedEditPanel(&panel);
+ mEditClassifiedPanels[c_item->getClassifiedId()] = panel;
+ }
+ getProfilePanel()->openPanel(panel, params);
+ panel->setPosGlobal(c_item->getPosGlobal());
}
void LLPanelPicks::onClickMenuEdit()
@@ -992,6 +1015,20 @@ void LLPanelPicks::onClickMenuEdit()
}
}
+bool LLPanelPicks::onEnableMenuItem(const LLSD& user_data)
+{
+ std::string param = user_data.asString();
+
+ LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
+ if(c_item && "info" == param)
+ {
+ // dont show Info panel if classified was not created
+ return isClassifiedPublished(c_item);
+ }
+
+ return true;
+}
+
inline LLPanelProfile* LLPanelPicks::getProfilePanel()
{
llassert_always(NULL != mProfilePanel);
@@ -1180,6 +1217,24 @@ void LLClassifiedItem::setValue(const LLSD& value)
childSetVisible("selected_icon", value["selected"]);
}
+void LLClassifiedItem::fillIn(LLPanelClassifiedEdit* panel)
+{
+ if(!panel)
+ {
+ return;
+ }
+
+ setClassifiedName(panel->getClassifiedName());
+ setDescription(panel->getDescription());
+ setSnapshotId(panel->getSnapshotId());
+ setCategory(panel->getCategory());
+ setContentType(panel->getContentType());
+ setAutoRenew(panel->getAutoRenew());
+ setPriceForListing(panel->getPriceForListing());
+ setPosGlobal(panel->getPosGlobal());
+ setLocationText(panel->getClassifiedLocation());
+}
+
void LLClassifiedItem::setClassifiedName(const std::string& name)
{
childSetValue("name", name);
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index 3f757e482e..a98b8c413e 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -55,7 +55,6 @@ class LLPanelPickEdit;
class LLToggleableMenu;
class LLPanelClassifiedInfo;
class LLPanelClassifiedEdit;
-class LLClassifiedClickThrough;
// *TODO
// Panel Picks has been consolidated with Classifieds (EXT-2095), give LLPanelPicks
@@ -99,6 +98,8 @@ private:
void onPlusMenuItemClicked(const LLSD& param);
bool isActionEnabled(const LLSD& userdata) const;
+ bool isClassifiedPublished(LLClassifiedItem* c_item);
+
void onListCommit(const LLFlatListView* f_list);
void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab);
@@ -115,14 +116,14 @@ private:
void onPanelClassifiedEdit();
void onClickMenuEdit();
+ bool onEnableMenuItem(const LLSD& user_data);
+
void createNewPick();
void createNewClassified();
void openPickInfo();
void openClassifiedInfo();
- void openClassifiedInfo(const LLUUID &classified_id, const LLUUID &avatar_id,
- const LLUUID &snapshot_id, const std::string &name,
- const std::string &desc);
+ void openClassifiedInfo(const LLSD& params);
friend class LLPanelProfile;
void showAccordion(const std::string& name, bool show);
@@ -143,7 +144,7 @@ private:
void createPickInfoPanel();
void createPickEditPanel();
void createClassifiedInfoPanel();
- void createClassifiedEditPanel();
+ void createClassifiedEditPanel(LLPanelClassifiedEdit** panel);
LLMenuGL* mPopupMenu;
LLPanelProfile* mProfilePanel;
@@ -152,15 +153,19 @@ private:
LLFlatListView* mClassifiedsList;
LLPanelPickInfo* mPanelPickInfo;
LLPanelClassifiedInfo* mPanelClassifiedInfo;
- LLPanelClassifiedEdit* mPanelClassifiedEdit;
LLPanelPickEdit* mPanelPickEdit;
LLToggleableMenu* mPlusMenu;
+ // <classified_id, edit_panel>
+ typedef std::map<LLUUID, LLPanelClassifiedEdit*> panel_classified_edit_map_t;
+
+ // This map is needed for newly created classifieds. The purpose of panel is to
+ // sit in this map and listen to LLPanelClassifiedEdit::processProperties callback.
+ panel_classified_edit_map_t mEditClassifiedPanels;
+
LLAccordionCtrlTab* mPicksAccTab;
LLAccordionCtrlTab* mClassifiedsAccTab;
- LLClassifiedClickThrough* mClickThroughDisp;
-
//true if picks list is empty after processing picks
bool mNoPicks;
//true if classifieds list is empty after processing classifieds
@@ -250,6 +255,8 @@ public:
/*virtual*/ void setValue(const LLSD& value);
+ void fillIn(LLPanelClassifiedEdit* panel);
+
LLUUID getAvatarId() {return mAvatarId;}
void setAvatarId(const LLUUID& avatar_id) {mAvatarId = avatar_id;}
@@ -260,7 +267,11 @@ public:
void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
- const LLVector3d& getPosGlobal() { return mPosGlobal; }
+ const LLVector3d getPosGlobal() { return mPosGlobal; }
+
+ void setLocationText(const std::string location) { mLocationText = location; }
+
+ std::string getLocationText() { return mLocationText; }
void setClassifiedName (const std::string& name);
@@ -274,10 +285,31 @@ public:
LLUUID getSnapshotId();
+ void setCategory(U32 cat) { mCategory = cat; }
+
+ U32 getCategory() { return mCategory; }
+
+ void setContentType(U32 ct) { mContentType = ct; }
+
+ U32 getContentType() { return mContentType; }
+
+ void setAutoRenew(U32 renew) { mAutoRenew = renew; }
+
+ bool getAutoRenew() { return mAutoRenew; }
+
+ void setPriceForListing(S32 price) { mPriceForListing = price; }
+
+ S32 getPriceForListing() { return mPriceForListing; }
+
private:
LLUUID mAvatarId;
LLUUID mClassifiedId;
LLVector3d mPosGlobal;
+ std::string mLocationText;
+ U32 mCategory;
+ U32 mContentType;
+ bool mAutoRenew;
+ S32 mPriceForListing;
};
#endif // LL_LLPANELPICKS_H
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 9ebc8ca2b9..f6133d4446 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -256,7 +256,7 @@ void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent)
static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
S32 scroll_height = mScrollContainer->getRect().getHeight();
- if (mScrollingPanelMinHeight >= scroll_height)
+ if (mScrollingPanelMinHeight > scroll_height)
{
mScrollingPanel->reshape(mScrollingPanelWidth, mScrollingPanelMinHeight);
}
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 9e5f9da0ea..1a1650c38b 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -567,9 +567,13 @@ void LLPanelPlaceProfile::onForSaleBannerClick()
if(parcel->getLocalID() == mSelectedParcelID &&
mLastSelectedRegionID ==selected_region->getRegionID())
{
- if(parcel->getSalePrice() - gStatusBar->getBalance() > 0)
+ S32 price = parcel->getSalePrice();
+
+ if(price - gStatusBar->getBalance() > 0)
{
- LLFloaterBuyCurrency::buyCurrency("Buying selected land ", parcel->getSalePrice());
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", price);
+ LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("buying_selected_land", args), price);
}
else
{
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 26b57c003b..54455afa4f 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -278,6 +278,11 @@ BOOL LLPanelPlaces::postBuild()
mFilterEditor = getChild<LLFilterEditor>("Filter");
if (mFilterEditor)
{
+ //when list item is being clicked the filter editor looses focus
+ //committing on focus lost leads to detaching list items
+ //BUT a detached list item cannot be made selected and must not be clicked onto
+ mFilterEditor->setCommitOnFocusLost(false);
+
mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false));
}
@@ -546,7 +551,9 @@ void LLPanelPlaces::onTeleportButtonClicked()
{
LLSD payload;
payload["asset_id"] = mItem->getAssetUUID();
- LLNotificationsUtil::add("TeleportFromLandmark", LLSD(), payload);
+ LLSD args;
+ args["LOCATION"] = mItem->getName();
+ LLNotificationsUtil::add("TeleportFromLandmark", args, payload);
}
else if (mPlaceInfoType == AGENT_INFO_TYPE ||
mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
@@ -1001,9 +1008,9 @@ void LLPanelPlaces::changedGlobalPos(const LLVector3d &global_pos)
updateVerbs();
}
-void LLPanelPlaces::showAddedLandmarkInfo(const std::vector<LLUUID>& items)
+void LLPanelPlaces::showAddedLandmarkInfo(const uuid_vec_t& items)
{
- for (std::vector<LLUUID>::const_iterator item_iter = items.begin();
+ for (uuid_vec_t::const_iterator item_iter = items.begin();
item_iter != items.end();
++item_iter)
{
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index 78fcbbb11d..97cf43d222 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -73,7 +73,7 @@ public:
void changedGlobalPos(const LLVector3d &global_pos);
// Opens landmark info panel when agent creates or receives landmark.
- void showAddedLandmarkInfo(const std::vector<LLUUID>& items);
+ void showAddedLandmarkInfo(const uuid_vec_t& items);
void setItem(LLInventoryItem* item);
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index a53a3ba1ad..ab2f9284f7 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -33,6 +33,7 @@
//LLPanelPrimMediaControls
#include "llagent.h"
+#include "llagentcamera.h"
#include "llparcel.h"
#include "llpanel.h"
#include "llselectmgr.h"
@@ -1010,7 +1011,7 @@ void LLPanelPrimMediaControls::updateZoom()
{
case ZOOM_NONE:
{
- gAgent.setFocusOnAvatar(TRUE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE);
break;
}
case ZOOM_FAR:
@@ -1030,7 +1031,7 @@ void LLPanelPrimMediaControls::updateZoom()
}
default:
{
- gAgent.setFocusOnAvatar(TRUE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE);
break;
}
}
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index b5d85dfd4b..18da8dd48c 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -171,15 +171,13 @@ void LLPanelProfile::onOpen(const LLSD& key)
}
else if (panel == "classified_details")
{
- LLUUID classified_id = key["classified_id"].asUUID();
- LLUUID avatar_id = key["classified_avatar_id"].asUUID();
- LLUUID snapshot_id = key["classified_snapshot_id"].asUUID();
- std::string name = key["classified_name"].asString();
- std::string desc = key["classified_desc"].asString();
LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
if (picks)
{
- picks->openClassifiedInfo(classified_id, avatar_id, snapshot_id, name, desc);
+ LLSD params = key;
+ params.erase("show_tab_panel");
+ params.erase("open_tab_name");
+ picks->openClassifiedInfo(params);
}
}
}
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 90c8f2551f..0a34531eee 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -348,7 +348,7 @@ LLContextMenu* LLTeleportHistoryPanel::ContextMenu::createMenu()
void LLTeleportHistoryPanel::ContextMenu::onTeleport()
{
- LLTeleportHistoryStorage::getInstance()->goToItem(mIndex);
+ confirmTeleport(mIndex);
}
void LLTeleportHistoryPanel::ContextMenu::onInfo()
@@ -507,7 +507,7 @@ void LLTeleportHistoryPanel::onTeleport()
return;
// teleport to existing item in history, so we don't add it again
- mTeleportHistory->goToItem(itemp->getIndex());
+ confirmTeleport(itemp->getIndex());
}
/*
@@ -1058,3 +1058,27 @@ void LLTeleportHistoryPanel::onAccordionExpand(LLUICtrl* ctrl, const LLSD& param
mLastSelectedFlatlList->resetSelection();
}
}
+
+// static
+void LLTeleportHistoryPanel::confirmTeleport(S32 hist_idx)
+{
+ LLSD args;
+ args["HISTORY_ENTRY"] = LLTeleportHistoryStorage::getInstance()->getItems()[hist_idx].mTitle;
+ LLNotificationsUtil::add("TeleportToHistoryEntry", args, LLSD(),
+ boost::bind(&LLTeleportHistoryPanel::onTeleportConfirmation, _1, _2, hist_idx));
+}
+
+// Called when user reacts upon teleport confirmation dialog.
+// static
+bool LLTeleportHistoryPanel::onTeleportConfirmation(const LLSD& notification, const LLSD& response, S32 hist_idx)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ if (0 == option)
+ {
+ // Teleport to given history item.
+ LLTeleportHistoryStorage::getInstance()->goToItem(hist_idx);
+ }
+
+ return false;
+}
diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h
index 4eeaec7705..5e2ccc0c93 100644
--- a/indra/newview/llpanelteleporthistory.h
+++ b/indra/newview/llpanelteleporthistory.h
@@ -103,6 +103,9 @@ private:
bool isAccordionCollapsedByUser(LLUICtrl* acc_tab);
void onAccordionExpand(LLUICtrl* ctrl, const LLSD& param);
+ static void confirmTeleport(S32 hist_idx);
+ static bool onTeleportConfirmation(const LLSD& notification, const LLSD& response, S32 hist_idx);
+
LLTeleportHistoryStorage* mTeleportHistory;
LLAccordionCtrl* mHistoryAccordion;
diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp
index 559997254e..ae52bd3703 100644
--- a/indra/newview/llpanelvolumepulldown.cpp
+++ b/indra/newview/llpanelvolumepulldown.cpp
@@ -56,6 +56,8 @@
// Default constructor
LLPanelVolumePulldown::LLPanelVolumePulldown()
{
+ mHoverTimer.stop();
+
mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2));
mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2));
LLUICtrlFactory::instance().buildPanel(this, "panel_volume_pulldown.xml");
@@ -77,6 +79,11 @@ void LLPanelVolumePulldown::onMouseEnter(S32 x, S32 y, MASK mask)
LLPanel::onMouseEnter(x,y,mask);
}
+/*virtual*/
+void LLPanelVolumePulldown::onTopLost()
+{
+ setVisible(FALSE);
+}
/*virtual*/
void LLPanelVolumePulldown::onMouseLeave(S32 x, S32 y, MASK mask)
@@ -95,13 +102,8 @@ void LLPanelVolumePulldown::handleVisibilityChange ( BOOL new_visibility )
else
{
mHoverTimer.stop();
- }
-}
-/*virtual*/
-void LLPanelVolumePulldown::onTopLost()
-{
- setVisible(FALSE);
+ }
}
void LLPanelVolumePulldown::onAdvancedButtonClick(const LLSD& user_data)
diff --git a/indra/newview/llpanelvolumepulldown.h b/indra/newview/llpanelvolumepulldown.h
index 9f20caa1a8..7fb025f329 100644
--- a/indra/newview/llpanelvolumepulldown.h
+++ b/indra/newview/llpanelvolumepulldown.h
@@ -47,8 +47,8 @@ class LLPanelVolumePulldown : public LLPanel
/*virtual*/ void draw();
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
- /*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
/*virtual*/ void onTopLost();
+ /*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
/*virtual*/ BOOL postBuild();
private:
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 1c4004c37a..eb245453db 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -70,6 +70,8 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
mSpeakerMgr->addListener(mSpeakerModeratorListener, "update_moderator");
mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
+ LL_DEBUGS("SpeakingIndicator") << "Set session for speaking indicators: " << mSpeakerMgr->getSessionID() << LL_ENDL;
+ mAvatarList->setSessionID(mSpeakerMgr->getSessionID());
mAvatarListDoubleClickConnection = mAvatarList->setItemDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, _1));
mAvatarListRefreshConnection = mAvatarList->setRefreshCompleteCallback(boost::bind(&LLParticipantList::onAvatarListRefreshed, this, _1, _2));
// Set onAvatarListDoubleClicked as default on_return action.
@@ -246,8 +248,8 @@ bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, co
bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
{
- LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
- LLAvatarList::uuid_vector_t::iterator pos = std::find(group_members.begin(), group_members.end(), event->getValue().asUUID());
+ uuid_vec_t& group_members = mAvatarList->getIDs();
+ uuid_vec_t::iterator pos = std::find(group_members.begin(), group_members.end(), event->getValue().asUUID());
if(pos != group_members.end())
{
group_members.erase(pos);
@@ -258,7 +260,7 @@ bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event,
bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
{
- LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
+ uuid_vec_t& group_members = mAvatarList->getIDs();
group_members.clear();
mAvatarList->setDirty();
return true;
@@ -443,7 +445,7 @@ LLContextMenu* LLParticipantList::LLParticipantListMenu::createMenu()
return main_menu;
}
-void LLParticipantList::LLParticipantListMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y)
+void LLParticipantList::LLParticipantListMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y)
{
LLPanelPeopleMenus::ContextMenu::show(spawning_view, uuids, x, y);
@@ -613,7 +615,7 @@ bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD&
bool result = (mUUIDs.size() > 0);
- std::vector<LLUUID>::const_iterator
+ uuid_vec_t::const_iterator
id = mUUIDs.begin(),
uuids_end = mUUIDs.end();
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index e1b1b5af00..d9ca4230a9 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -152,7 +152,7 @@ class LLParticipantList
public:
LLParticipantListMenu(LLParticipantList& parent):mParent(parent){};
/*virtual*/ LLContextMenu* createMenu();
- /*virtual*/ void show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y);
+ /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y);
protected:
LLParticipantList& mParent;
private:
diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp
index 4fe69f295c..f59a55cb8b 100644
--- a/indra/newview/llplacesinventorybridge.cpp
+++ b/indra/newview/llplacesinventorybridge.cpp
@@ -122,7 +122,7 @@ void LLPlacesFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
//virtual
-void LLPlacesFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+void LLPlacesFolderBridge::performAction(LLInventoryModel* model, std::string action)
{
if ("expand" == action)
{
@@ -136,7 +136,7 @@ void LLPlacesFolderBridge::performAction(LLFolderView* folder, LLInventoryModel*
}
else
{
- LLFolderBridge::performAction(folder, model, action);
+ LLFolderBridge::performAction(model, action);
}
}
@@ -158,6 +158,7 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge(
LLAssetType::EType actual_asset_type,
LLInventoryType::EType inv_type,
LLInventoryPanel* inventory,
+ LLFolderView* root,
const LLUUID& uuid,
U32 flags/* = 0x00*/) const
{
@@ -167,9 +168,9 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge(
case LLAssetType::AT_LANDMARK:
if(!(inv_type == LLInventoryType::IT_LANDMARK))
{
- llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl;
+ llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;
}
- new_listener = new LLPlacesLandmarkBridge(inv_type, inventory, uuid, flags);
+ new_listener = new LLPlacesLandmarkBridge(inv_type, inventory, root, uuid, flags);
break;
case LLAssetType::AT_CATEGORY:
if (actual_asset_type == LLAssetType::AT_LINK_FOLDER)
@@ -180,11 +181,12 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge(
actual_asset_type,
inv_type,
inventory,
+ root,
uuid,
flags);
break;
}
- new_listener = new LLPlacesFolderBridge(inv_type, inventory, uuid);
+ new_listener = new LLPlacesFolderBridge(inv_type, inventory, root, uuid);
break;
default:
new_listener = LLInventoryFVBridgeBuilder::createBridge(
@@ -192,6 +194,7 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge(
actual_asset_type,
inv_type,
inventory,
+ root,
uuid,
flags);
}
diff --git a/indra/newview/llplacesinventorybridge.h b/indra/newview/llplacesinventorybridge.h
index 66a8e8e54d..7e5170cc33 100644
--- a/indra/newview/llplacesinventorybridge.h
+++ b/indra/newview/llplacesinventorybridge.h
@@ -48,8 +48,15 @@ public:
/*virtual*/ void buildContextMenu(LLMenuGL& menu, U32 flags);
protected:
- LLPlacesLandmarkBridge(LLInventoryType::EType type, LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags = 0x00)
- : LLLandmarkBridge(inventory, uuid, flags) {mInvType = type;}
+ LLPlacesLandmarkBridge(LLInventoryType::EType type,
+ LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ U32 flags = 0x00) :
+ LLLandmarkBridge(inventory, root, uuid, flags)
+ {
+ mInvType = type;
+ }
};
/**
@@ -61,12 +68,17 @@ class LLPlacesFolderBridge : public LLFolderBridge
public:
/*virtual*/ void buildContextMenu(LLMenuGL& menu, U32 flags);
- /*virtual*/ void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+ /*virtual*/ void performAction(LLInventoryModel* model, std::string action);
protected:
- LLPlacesFolderBridge(LLInventoryType::EType type, LLInventoryPanel* inventory, const LLUUID& uuid)
- : LLFolderBridge(inventory, uuid) {mInvType = type;}
-
+ LLPlacesFolderBridge(LLInventoryType::EType type,
+ LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid) :
+ LLFolderBridge(inventory, root, uuid)
+ {
+ mInvType = type;
+ }
LLFolderViewFolder* getFolder();
};
@@ -79,13 +91,13 @@ protected:
class LLPlacesInventoryBridgeBuilder : public LLInventoryFVBridgeBuilder
{
public:
- /*virtual*/ LLInvFVBridge* createBridge(
- LLAssetType::EType asset_type,
- LLAssetType::EType actual_asset_type,
- LLInventoryType::EType inv_type,
- LLInventoryPanel* inventory,
- const LLUUID& uuid,
- U32 flags = 0x00) const;
+ /*virtual*/ LLInvFVBridge* createBridge(LLAssetType::EType asset_type,
+ LLAssetType::EType actual_asset_type,
+ LLInventoryType::EType inv_type,
+ LLInventoryPanel* inventory,
+ LLFolderView* root,
+ const LLUUID& uuid,
+ U32 flags = 0x00) const;
};
#endif // LL_LLPLACESINVENTORYBRIDGE_H
diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp
index f1e450a083..0930a7be7f 100644
--- a/indra/newview/llplacesinventorypanel.cpp
+++ b/indra/newview/llplacesinventorypanel.cpp
@@ -68,9 +68,9 @@ BOOL LLPlacesInventoryPanel::postBuild()
// clear Contents();
{
- mFolders->destroyView();
- mFolders->getParent()->removeChild(mFolders);
- mFolders->die();
+ mFolderRoot->destroyView();
+ mFolderRoot->getParent()->removeChild(mFolderRoot);
+ mFolderRoot->die();
if( mScroller )
{
@@ -78,7 +78,7 @@ BOOL LLPlacesInventoryPanel::postBuild()
mScroller->die();
mScroller = NULL;
}
- mFolders = NULL;
+ mFolderRoot = NULL;
}
@@ -92,15 +92,16 @@ BOOL LLPlacesInventoryPanel::postBuild()
0);
LLPlacesFolderView::Params p;
p.name = getName();
+ p.title = getLabel();
p.rect = folder_rect;
p.parent_panel = this;
- mFolders = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p);
- mFolders->setAllowMultiSelect(mAllowMultiSelect);
+ mFolderRoot = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p);
+ mFolderRoot->setAllowMultiSelect(mAllowMultiSelect);
}
mCommitCallbackRegistrar.popScope();
- mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+ mFolderRoot->setCallbackRegistrar(&mCommitCallbackRegistrar);
// scroller
{
@@ -115,14 +116,14 @@ BOOL LLPlacesInventoryPanel::postBuild()
mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
}
addChild(mScroller);
- mScroller->addChild(mFolders);
+ mScroller->addChild(mFolderRoot);
- mFolders->setScrollContainer(mScroller);
- mFolders->addChild(mFolders->mStatusTextBox);
+ mFolderRoot->setScrollContainer(mScroller);
+ mFolderRoot->addChild(mFolderRoot->mStatusTextBox);
// cut subitems
- mFolders->setUseEllipses(true);
+ mFolderRoot->setUseEllipses(true);
return TRUE;
}
@@ -131,17 +132,17 @@ BOOL LLPlacesInventoryPanel::postBuild()
void LLPlacesInventoryPanel::saveFolderState()
{
mSavedFolderState->setApply(FALSE);
- getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+ mFolderRoot->applyFunctorRecursively(*mSavedFolderState);
}
// re-open folders which state was saved
void LLPlacesInventoryPanel::restoreFolderState()
{
mSavedFolderState->setApply(TRUE);
- getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+ mFolderRoot->applyFunctorRecursively(*mSavedFolderState);
LLOpenFoldersWithSelection opener;
- getRootFolder()->applyFunctorRecursively(opener);
- getRootFolder()->scrollToShowSelection();
+ mFolderRoot->applyFunctorRecursively(opener);
+ mFolderRoot->scrollToShowSelection();
}
S32 LLPlacesInventoryPanel::notify(const LLSD& info)
@@ -151,11 +152,11 @@ S32 LLPlacesInventoryPanel::notify(const LLSD& info)
std::string str_action = info["action"];
if(str_action == "select_first")
{
- return getRootFolder()->notify(info);
+ return mFolderRoot->notify(info);
}
else if(str_action == "select_last")
{
- return getRootFolder()->notify(info);
+ return mFolderRoot->notify(info);
}
}
return 0;
diff --git a/indra/newview/llpopupview.cpp b/indra/newview/llpopupview.cpp
new file mode 100644
index 0000000000..b010f4d72f
--- /dev/null
+++ b/indra/newview/llpopupview.cpp
@@ -0,0 +1,238 @@
+/**
+ * @file llpopupview.cpp
+ * @brief Holds transient popups
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#include "llviewerprecompiledheaders.h"
+
+#include "llpopupview.h"
+
+static LLRegisterPanelClassWrapper<LLPopupView> r("popup_holder");
+
+bool view_visible_and_enabled(LLView* viewp)
+{
+ return viewp->getVisible() && viewp->getEnabled();
+}
+
+bool view_visible(LLView* viewp)
+{
+ return viewp->getVisible();
+}
+
+
+LLPopupView::LLPopupView()
+{
+ // register ourself as handler of UI popups
+ LLUI::setPopupFuncs(boost::bind(&LLPopupView::addPopup, this, _1), boost::bind(&LLPopupView::removePopup, this, _1), boost::bind(&LLPopupView::clearPopups, this));
+}
+
+LLPopupView::~LLPopupView()
+{
+ // set empty callback function so we can't handle popups anymore
+ LLUI::setPopupFuncs(LLUI::add_popup_t(), LLUI::remove_popup_t(), LLUI::clear_popups_t());
+}
+
+void LLPopupView::draw()
+{
+ S32 screen_x, screen_y;
+
+ // remove dead popups
+ for (popup_list_t::iterator popup_it = mPopups.begin();
+ popup_it != mPopups.end();)
+ {
+ if (!popup_it->get())
+ {
+ mPopups.erase(popup_it++);
+ }
+ else
+ {
+ popup_it++;
+ }
+ }
+
+ // draw in reverse order (most recent is on top)
+ for (popup_list_t::reverse_iterator popup_it = mPopups.rbegin();
+ popup_it != mPopups.rend();)
+ {
+ LLView* popup = popup_it->get();
+
+ if (popup->getVisible())
+ {
+ popup->localPointToScreen(0, 0, &screen_x, &screen_y);
+
+ LLUI::pushMatrix();
+ {
+ LLUI::translate( (F32) screen_x, (F32) screen_y, 0.f);
+ popup->draw();
+ }
+ LLUI::popMatrix();
+ }
+ ++popup_it;
+ }
+
+ LLPanel::draw();
+}
+
+BOOL LLPopupView::handleMouseEvent(boost::function<BOOL(LLView*, S32, S32)> func,
+ boost::function<bool(LLView*)> predicate,
+ S32 x, S32 y,
+ bool close_popups)
+{
+ for (popup_list_t::iterator popup_it = mPopups.begin();
+ popup_it != mPopups.end();)
+ {
+ LLView* popup = popup_it->get();
+ if (!popup
+ || !predicate(popup))
+ {
+ ++popup_it;
+ continue;
+ }
+
+ S32 popup_x, popup_y;
+ if (localPointToOtherView(x, y, &popup_x, &popup_y, popup)
+ && popup->pointInView(popup_x, popup_y))
+ {
+ if (func(popup, popup_x, popup_y))
+ {
+ return TRUE;
+ }
+ }
+
+ if (close_popups)
+ {
+ popup_list_t::iterator cur_popup_it = popup_it++;
+ mPopups.erase(cur_popup_it);
+ popup->onTopLost();
+ }
+ else
+ {
+ ++popup_it;
+ }
+ }
+
+ return FALSE;
+}
+
+
+BOOL LLPopupView::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+ if (!handleMouseEvent(boost::bind(&LLMouseHandler::handleMouseDown, _1, _2, _3, mask), view_visible_and_enabled, x, y, true))
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+BOOL LLPopupView::handleMouseUp(S32 x, S32 y, MASK mask)
+{
+ return handleMouseEvent(boost::bind(&LLMouseHandler::handleMouseUp, _1, _2, _3, mask), view_visible_and_enabled, x, y, false);
+}
+
+BOOL LLPopupView::handleMiddleMouseDown(S32 x, S32 y, MASK mask)
+{
+ if (!handleMouseEvent(boost::bind(&LLMouseHandler::handleMiddleMouseDown, _1, _2, _3, mask), view_visible_and_enabled, x, y, true))
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+BOOL LLPopupView::handleMiddleMouseUp(S32 x, S32 y, MASK mask)
+{
+ return handleMouseEvent(boost::bind(&LLMouseHandler::handleMiddleMouseUp, _1, _2, _3, mask), view_visible_and_enabled, x, y, false);
+}
+
+BOOL LLPopupView::handleRightMouseDown(S32 x, S32 y, MASK mask)
+{
+ if (!handleMouseEvent(boost::bind(&LLMouseHandler::handleRightMouseDown, _1, _2, _3, mask), view_visible_and_enabled, x, y, true))
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+BOOL LLPopupView::handleRightMouseUp(S32 x, S32 y, MASK mask)
+{
+ return handleMouseEvent(boost::bind(&LLMouseHandler::handleRightMouseUp, _1, _2, _3, mask), view_visible_and_enabled, x, y, false);
+}
+
+BOOL LLPopupView::handleDoubleClick(S32 x, S32 y, MASK mask)
+{
+ return handleMouseEvent(boost::bind(&LLMouseHandler::handleDoubleClick, _1, _2, _3, mask), view_visible_and_enabled, x, y, false);
+}
+
+BOOL LLPopupView::handleHover(S32 x, S32 y, MASK mask)
+{
+ return handleMouseEvent(boost::bind(&LLMouseHandler::handleHover, _1, _2, _3, mask), view_visible_and_enabled, x, y, false);
+}
+
+BOOL LLPopupView::handleScrollWheel(S32 x, S32 y, S32 clicks)
+{
+ return handleMouseEvent(boost::bind(&LLMouseHandler::handleScrollWheel, _1, _2, _3, clicks), view_visible_and_enabled, x, y, false);
+}
+
+BOOL LLPopupView::handleToolTip(S32 x, S32 y, MASK mask)
+{
+ return handleMouseEvent(boost::bind(&LLMouseHandler::handleToolTip, _1, _2, _3, mask), view_visible, x, y, false);
+}
+
+void LLPopupView::addPopup(LLView* popup)
+{
+ if (popup)
+ {
+ mPopups.remove(popup->getHandle());
+ mPopups.push_front(popup->getHandle());
+ }
+}
+
+void LLPopupView::removePopup(LLView* popup)
+{
+ if (popup)
+ {
+ mPopups.remove(popup->getHandle());
+ popup->onTopLost();
+ }
+}
+
+void LLPopupView::clearPopups()
+{
+ for (popup_list_t::iterator popup_it = mPopups.begin();
+ popup_it != mPopups.end();)
+ {
+ LLView* popup = popup_it->get();
+
+ popup_list_t::iterator cur_popup_it = popup_it;
+ ++popup_it;
+
+ mPopups.erase(cur_popup_it);
+ popup->onTopLost();
+ }
+}
+
diff --git a/indra/newview/llpopupview.h b/indra/newview/llpopupview.h
new file mode 100644
index 0000000000..1ec61d5450
--- /dev/null
+++ b/indra/newview/llpopupview.h
@@ -0,0 +1,67 @@
+/**
+ * @file llpopupview.h
+ * @brief Holds transient popups
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPOPUPVIEW_H
+#define LL_LLPOPUPVIEW_H
+
+#include "llpanel.h"
+
+class LLPopupView : public LLPanel
+{
+public:
+ LLPopupView();
+ ~LLPopupView();
+
+ /*virtual*/ void draw();
+ /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleRightMouseUp(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ /*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask);
+
+ void addPopup(LLView* popup);
+ void removePopup(LLView* popup);
+ void clearPopups();
+
+ typedef std::list<LLHandle<LLView> > popup_list_t;
+ popup_list_t getCurrentPopups() { return mPopups; }
+
+private:
+ BOOL handleMouseEvent(boost::function<BOOL(LLView*, S32, S32)>, boost::function<bool(LLView*)>, S32 x, S32 y, bool close_popups);
+ popup_list_t mPopups;
+};
+#endif //LL_LLROOTVIEW_H
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index 0b0c03e9e9..d0db77dcbe 100644
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -36,7 +36,7 @@
#include "llpreview.h"
#include "lllineeditor.h"
-#include "llinventory.h"
+#include "llinventorydefines.h"
#include "llinventorymodel.h"
#include "llresmgr.h"
#include "lltextbox.h"
@@ -179,10 +179,9 @@ void LLPreview::onCommit()
// update the object itself.
if( item->getType() == LLAssetType::AT_OBJECT )
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if( avatar )
+ if (isAgentAvatarValid())
{
- LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() );
+ LLViewerObject* obj = gAgentAvatarp->getWornAttachment( item->getUUID() );
if( obj )
{
LLSelectMgr::getInstance()->deselectAll();
diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp
index 0cc747f789..262961b73b 100644
--- a/indra/newview/llpreviewanim.cpp
+++ b/indra/newview/llpreviewanim.cpp
@@ -71,7 +71,7 @@ BOOL LLPreviewAnim::postBuild()
const LLInventoryItem* item = getItem();
if(item)
{
- gAgent.getAvatarObject()->createMotion(item->getAssetUUID()); // preload the animation
+ gAgentAvatarp->createMotion(item->getAssetUUID()); // preload the animation
childSetText("desc", item->getDescription());
}
@@ -125,10 +125,7 @@ void LLPreviewAnim::playAnim( void *userdata )
{
self->mPauseRequest = NULL;
gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_START);
-
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- LLMotion* motion = avatar->findMotion(itemID);
-
+ LLMotion* motion = gAgentAvatarp->findMotion(itemID);
if (motion)
{
motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLHandle<LLFloater>(self->getHandle())));
@@ -136,7 +133,7 @@ void LLPreviewAnim::playAnim( void *userdata )
}
else
{
- gAgent.getAvatarObject()->stopMotion(itemID);
+ gAgentAvatarp->stopMotion(itemID);
gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP);
}
}
@@ -161,10 +158,8 @@ void LLPreviewAnim::auditionAnim( void *userdata )
if (self->childGetValue("Anim audition btn").asBoolean() )
{
self->mPauseRequest = NULL;
- gAgent.getAvatarObject()->startMotion(item->getAssetUUID());
-
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- LLMotion* motion = avatar->findMotion(itemID);
+ gAgentAvatarp->startMotion(item->getAssetUUID());
+ LLMotion* motion = gAgentAvatarp->findMotion(itemID);
if (motion)
{
@@ -173,7 +168,7 @@ void LLPreviewAnim::auditionAnim( void *userdata )
}
else
{
- gAgent.getAvatarObject()->stopMotion(itemID);
+ gAgentAvatarp->stopMotion(itemID);
gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP);
}
}
@@ -186,11 +181,9 @@ void LLPreviewAnim::onClose(bool app_quitting)
if(item)
{
- gAgent.getAvatarObject()->stopMotion(item->getAssetUUID());
+ gAgentAvatarp->stopMotion(item->getAssetUUID());
gAgent.sendAnimationRequest(item->getAssetUUID(), ANIM_REQUEST_STOP);
-
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- LLMotion* motion = avatar->findMotion(item->getAssetUUID());
+ LLMotion* motion = gAgentAvatarp->findMotion(item->getAssetUUID());
if (motion)
{
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 57a8ca3d12..fce90e4c44 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -42,6 +42,10 @@
#include "llstring.h"
#include "lldir.h"
#include "llfloaterreg.h"
+#include "llinventorydefines.h"
+#include "llinventoryfunctions.h"
+#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llmultigesture.h"
#include "llnotificationsutil.h"
#include "llvfile.h"
@@ -56,7 +60,6 @@
#include "lldelayedgestureerror.h"
#include "llfloatergesture.h" // for some label constants
#include "llgesturemgr.h"
-#include "llinventorymodel.h"
#include "llkeyboard.h"
#include "lllineeditor.h"
#include "llradiogroup.h"
@@ -97,7 +100,7 @@ protected:
void LLInventoryGestureAvailable::done()
{
- for(item_ref_t::iterator it = mComplete.begin(); it != mComplete.end(); ++it)
+ for(uuid_vec_t::iterator it = mComplete.begin(); it != mComplete.end(); ++it)
{
LLPreviewGesture* preview = LLFloaterReg::findTypedInstance<LLPreviewGesture>("preview_gesture", *it);
if(preview)
@@ -131,10 +134,10 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob
// Start speculative download of sounds and animations
const LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_ANIMATION);
- gInventory.startBackgroundFetch(animation_folder_id);
+ LLInventoryModelBackgroundFetch::instance().start(animation_folder_id);
const LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SOUND);
- gInventory.startBackgroundFetch(sound_folder_id);
+ LLInventoryModelBackgroundFetch::instance().start(sound_folder_id);
// this will call refresh when we have everything.
LLViewerInventoryItem* item = (LLViewerInventoryItem*)preview->getItem();
@@ -269,7 +272,7 @@ BOOL LLPreviewGesture::canClose()
// virtual
void LLPreviewGesture::onClose(bool app_quitting)
{
- LLGestureManager::instance().stopGesture(mPreviewGesture);
+ LLGestureMgr::instance().stopGesture(mPreviewGesture);
}
// virtual
@@ -293,13 +296,13 @@ bool LLPreviewGesture::handleSaveChangesDialog(const LLSD& notification, const L
switch(option)
{
case 0: // "Yes"
- LLGestureManager::instance().stopGesture(mPreviewGesture);
+ LLGestureMgr::instance().stopGesture(mPreviewGesture);
mCloseAfterSave = TRUE;
onClickSave(this);
break;
case 1: // "No"
- LLGestureManager::instance().stopGesture(mPreviewGesture);
+ LLGestureMgr::instance().stopGesture(mPreviewGesture);
mDirty = FALSE; // Force the dirty flag because user has clicked NO on confirm save dialog...
closeFloater();
break;
@@ -784,7 +787,7 @@ void LLPreviewGesture::refresh()
mOptionsText->setText(optionstext);
- BOOL active = LLGestureManager::instance().isGestureActive(mItemUUID);
+ BOOL active = LLGestureMgr::instance().isGestureActive(mItemUUID);
mActiveCheck->set(active);
// Can only preview if there are steps
@@ -1138,10 +1141,10 @@ void LLPreviewGesture::saveIfNeeded()
// If this gesture is active, then we need to update the in-memory
// active map with the new pointer.
- if (!delayedUpload && LLGestureManager::instance().isGestureActive(mItemUUID))
+ if (!delayedUpload && LLGestureMgr::instance().isGestureActive(mItemUUID))
{
// gesture manager now owns the pointer
- LLGestureManager::instance().replaceGesture(mItemUUID, gesture, asset_id);
+ LLGestureMgr::instance().replaceGesture(mItemUUID, gesture, asset_id);
// replaceGesture may deactivate other gestures so let the
// inventory know.
@@ -1702,13 +1705,13 @@ void LLPreviewGesture::onClickDelete(void* data)
void LLPreviewGesture::onCommitActive(LLUICtrl* ctrl, void* data)
{
LLPreviewGesture* self = (LLPreviewGesture*)data;
- if (!LLGestureManager::instance().isGestureActive(self->mItemUUID))
+ if (!LLGestureMgr::instance().isGestureActive(self->mItemUUID))
{
- LLGestureManager::instance().activateGesture(self->mItemUUID);
+ LLGestureMgr::instance().activateGesture(self->mItemUUID);
}
else
{
- LLGestureManager::instance().deactivateGesture(self->mItemUUID);
+ LLGestureMgr::instance().deactivateGesture(self->mItemUUID);
}
// Make sure the (active) label in the inventory gets updated.
@@ -1747,14 +1750,14 @@ void LLPreviewGesture::onClickPreview(void* data)
self->mPreviewBtn->setLabel(self->getString("stop_txt"));
// play it, and delete when done
- LLGestureManager::instance().playGesture(self->mPreviewGesture);
+ LLGestureMgr::instance().playGesture(self->mPreviewGesture);
self->refresh();
}
else
{
// Will call onDonePreview() below
- LLGestureManager::instance().stopGesture(self->mPreviewGesture);
+ LLGestureMgr::instance().stopGesture(self->mPreviewGesture);
self->refresh();
}
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index ee8e3f1db6..75702dc8e5 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -38,9 +38,11 @@
#include "llagent.h"
#include "llassetuploadresponders.h"
+#include "lldraghandle.h"
#include "llviewerwindow.h"
#include "llbutton.h"
#include "llfloaterreg.h"
+#include "llinventorydefines.h"
#include "llinventorymodel.h"
#include "lllineeditor.h"
#include "llnotificationsutil.h"
@@ -188,6 +190,20 @@ void LLPreviewNotecard::refreshFromInventory(const LLUUID& new_item_id)
loadAsset();
}
+void LLPreviewNotecard::updateTitleButtons()
+{
+ LLPreview::updateTitleButtons();
+
+ LLUICtrl* lock_btn = getChild<LLUICtrl>("lock");
+ if(lock_btn->getVisible() && !isMinimized()) // lock button stays visible if floater is minimized.
+ {
+ LLRect lock_rc = lock_btn->getRect();
+ LLRect buttons_rect = getDragHandle()->getButtonsRect();
+ buttons_rect.mLeft = lock_rc.mLeft;
+ getDragHandle()->setButtonsRect(buttons_rect);
+ }
+}
+
void LLPreviewNotecard::loadAsset()
{
// request the asset.
diff --git a/indra/newview/llpreviewnotecard.h b/indra/newview/llpreviewnotecard.h
index 5b8cf1c2f6..e0363eef54 100644
--- a/indra/newview/llpreviewnotecard.h
+++ b/indra/newview/llpreviewnotecard.h
@@ -79,6 +79,7 @@ public:
protected:
+ void updateTitleButtons();
virtual void loadAsset();
bool saveIfNeeded(LLInventoryItem* copyitem = NULL);
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index f5a9f82d50..6b0e524f8c 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -41,6 +41,7 @@
#include "llcombobox.h"
#include "lldir.h"
#include "llfloaterreg.h"
+#include "llinventorydefines.h"
#include "llinventorymodel.h"
#include "llkeyboard.h"
#include "lllineeditor.h"
@@ -1090,8 +1091,7 @@ void LLPreviewLSL::onSave(void* userdata, BOOL close_after_save)
// Save needs to compile the text in the buffer. If the compile
// succeeds, then save both assets out to the database. If the compile
-// fails, go ahead and save the text anyway so that the user doesn't
-// get too fucked.
+// fails, go ahead and save the text anyway.
void LLPreviewLSL::saveIfNeeded()
{
// llinfos << "LLPreviewLSL::saveIfNeeded()" << llendl;
@@ -1579,7 +1579,7 @@ void LLLiveLSLEditor::loadAsset()
DEFAULT_SCRIPT_NAME,
DEFAULT_SCRIPT_DESC,
LLSaleInfo::DEFAULT,
- LLInventoryItem::II_FLAGS_NONE,
+ LLInventoryItemFlags::II_FLAGS_NONE,
time_corrected());
mAssetStatus = PREVIEW_ASSET_LOADED;
}
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 0476e785a5..9b5e38d0aa 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -68,15 +68,16 @@ const F32 TOTAL_LOGIN_TIME = 10.f; // seconds, wild guess at time from GL contex
S32 gLastStartAnimationFrame = 0; // human-style indexing, first image = 1
const S32 ANIMATION_FRAMES = 1; //13;
+static LLRegisterPanelClassWrapper<LLProgressView> r("progress_view");
+
+
// XUI: Translate
-LLProgressView::LLProgressView(const LLRect &rect)
+LLProgressView::LLProgressView()
: LLPanel(),
mPercentDone( 0.f ),
mMouseDownInActiveArea( false ),
mUpdateEvents("LLProgressView")
{
- LLUICtrlFactory::getInstance()->buildPanel(this, "panel_progress.xml");
- reshape(rect.getWidth(), rect.getHeight());
mUpdateEvents.listen("self", boost::bind(&LLProgressView::handleUpdate, this, _1));
}
@@ -92,6 +93,9 @@ BOOL LLProgressView::postBuild()
getChild<LLTextBox>("message_text")->setClickedCallback(onClickMessage, this);
+ // hidden initially, until we need it
+ LLPanel::setVisible(FALSE);
+
sInstance = this;
return TRUE;
}
@@ -126,17 +130,23 @@ BOOL LLProgressView::handleKeyHere(KEY key, MASK mask)
void LLProgressView::setVisible(BOOL visible)
{
+ // hiding progress view
if (getVisible() && !visible)
{
mFadeTimer.start();
+ // hiding progress view, so show menu bars
+ LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(TRUE);
}
+ // showing progress view
else if (!getVisible() && visible)
{
- gFocusMgr.setTopCtrl(this);
+ // showing progress view, so hide menu bars
+ LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(FALSE);
+
setFocus(TRUE);
mFadeTimer.stop();
mProgressTimer.start();
- LLPanel::setVisible(visible);
+ LLPanel::setVisible(TRUE);
}
}
@@ -146,7 +156,7 @@ void LLProgressView::draw()
static LLTimer timer;
// Paint bitmap if we've got one
- glPushMatrix();
+ glPushMatrix();
if (gStartTexture)
{
LLGLSUIDefault gls_ui;
@@ -187,6 +197,8 @@ void LLProgressView::draw()
// Fade is complete, release focus
gFocusMgr.releaseFocusIfNeeded( this );
LLPanel::setVisible(FALSE);
+ mFadeTimer.stop();
+
gStartTexture = NULL;
}
return;
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
index 6853674d88..374b14be83 100644
--- a/indra/newview/llprogressview.h
+++ b/indra/newview/llprogressview.h
@@ -44,7 +44,7 @@ class LLProgressBar;
class LLProgressView : public LLPanel
{
public:
- LLProgressView(const LLRect& rect);
+ LLProgressView();
virtual ~LLProgressView();
BOOL postBuild();
diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp
index bd46b5b56a..62c2ddfd9f 100644
--- a/indra/newview/llrecentpeople.cpp
+++ b/indra/newview/llrecentpeople.cpp
@@ -63,7 +63,7 @@ bool LLRecentPeople::contains(const LLUUID& id) const
return mPeople.find(id) != mPeople.end();
}
-void LLRecentPeople::get(std::vector<LLUUID>& result) const
+void LLRecentPeople::get(uuid_vec_t& result) const
{
result.clear();
for (recent_people_t::const_iterator pos = mPeople.begin(); pos != mPeople.end(); ++pos)
diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h
index e0f2faaec5..c718997f7e 100644
--- a/indra/newview/llrecentpeople.h
+++ b/indra/newview/llrecentpeople.h
@@ -79,7 +79,7 @@ public:
*
* @param result where to put the result.
*/
- void get(std::vector<LLUUID>& result) const;
+ void get(uuid_vec_t& result) const;
const LLDate& getDate(const LLUUID& id) const;
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index c75d90be6f..e9a80907b7 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -480,7 +480,9 @@ void LLScreenChannel::showToastsBottom()
}
toast_rect = (*it).toast->getRect();
- toast_rect.setOriginAndSize(getRect().mLeft, bottom + toast_margin, toast_rect.getWidth() ,toast_rect.getHeight());
+ toast_rect.setOriginAndSize(getRect().mRight - toast_rect.getWidth(),
+ bottom + toast_margin, toast_rect.getWidth(),
+ toast_rect.getHeight());
(*it).toast->setRect(toast_rect);
if(floater && floater->overlapsScreenChannel())
@@ -687,7 +689,10 @@ void LLNotificationsUI::LLScreenChannel::startFadingToasts()
while (it != mToastList.end())
{
ToastElem& elem = *it;
- elem.toast->startFading();
+ if (elem.toast->getVisible())
+ {
+ elem.toast->startFading();
+ }
++it;
}
}
@@ -707,9 +712,7 @@ void LLScreenChannel::hideToast(const LLUUID& notification_id)
if(mToastList.end() != it)
{
ToastElem te = *it;
- te.toast->setVisible(FALSE);
- te.toast->stopTimer();
- mToastList.erase(it);
+ te.toast->hide();
}
}
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index a88a242fbe..f35cb3516a 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -135,7 +135,7 @@ void LLScriptFloater::setNotificationId(const LLUUID& id)
void LLScriptFloater::getAllowedRect(LLRect& rect)
{
- rect = gViewerWindow->getWorldViewRectRaw();
+ rect = gViewerWindow->getWorldViewRectScaled();
}
void LLScriptFloater::createForm(const LLUUID& notification_id)
@@ -154,14 +154,17 @@ void LLScriptFloater::createForm(const LLUUID& notification_id)
}
// create new form
- mScriptForm = new LLToastNotifyPanel(notification);
+ LLRect toast_rect = getRect();
+ // LLToastNotifyPanel will fit own content in vertical direction,
+ // but it needs an initial rect to properly calculate its width
+ // Use an initial rect of the script floater to make the floater window more configurable.
+ mScriptForm = new LLToastNotifyPanel(notification, toast_rect);
addChild(mScriptForm);
// position form on floater
mScriptForm->setOrigin(0, 0);
// make floater size fit form size
- LLRect toast_rect = getRect();
LLRect panel_rect = mScriptForm->getRect();
toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, panel_rect.getWidth(), panel_rect.getHeight() + getHeaderHeight());
setShape(toast_rect);
@@ -283,7 +286,9 @@ void LLScriptFloater::dockToChiclet(bool dock)
setSavePosition(false);
setDockControl(new LLDockControl(chiclet, this, getDockTongue(),
- LLDockControl::TOP, boost::bind(&LLScriptFloater::getAllowedRect, this, _1)), dock);
+ LLDockControl::TOP, boost::bind(&LLScriptFloater::getAllowedRect, this, _1)));
+
+ setDocked(dock);
// Restore saving
setSavePosition(save);
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
index 32a915608e..7980fe1945 100644
--- a/indra/newview/llscrollingpanelparam.cpp
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -168,25 +168,25 @@ void LLScrollingPanelParam::draw()
LLPanel::draw();
// Draw the hints over the "less" and "more" buttons.
- glPushMatrix();
+ gGL.pushUIMatrix();
{
const LLRect& r = mHintMin->getRect();
F32 left = (F32)(r.mLeft + BTN_BORDER);
F32 bot = (F32)(r.mBottom + BTN_BORDER);
- glTranslatef(left, bot, 0.f);
+ gGL.translateUI(left, bot, 0.f);
mHintMin->draw();
}
- glPopMatrix();
+ gGL.popUIMatrix();
- glPushMatrix();
+ gGL.pushUIMatrix();
{
const LLRect& r = mHintMax->getRect();
F32 left = (F32)(r.mLeft + BTN_BORDER);
F32 bot = (F32)(r.mBottom + BTN_BORDER);
- glTranslatef(left, bot, 0.f);
+ gGL.translateUI(left, bot, 0.f);
mHintMax->draw();
}
- glPopMatrix();
+ gGL.popUIMatrix();
// Draw labels on top of the buttons
@@ -209,7 +209,7 @@ void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata)
if (current_weight != new_weight )
{
self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE );
- gAgent.getAvatarObject()->updateVisualParams();
+ gAgentAvatarp->updateVisualParams();
}
}
@@ -298,7 +298,7 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint )
&& new_percent < slider->getMaxValue())
{
mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, FALSE);
- gAgent.getAvatarObject()->updateVisualParams();
+ gAgentAvatarp->updateVisualParams();
slider->setValue( weightToPercent( new_weight ) );
}
@@ -344,8 +344,7 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )
F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32();
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if (avatar)
+ if (isAgentAvatarValid())
{
LLVisualParamHint* hint = self->mHintMax;
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 9540894646..d03a492cd1 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -56,6 +56,7 @@
// viewer includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewerwindow.h"
#include "lldrawable.h"
#include "llfloaterinspect.h"
@@ -1474,7 +1475,7 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)
object->sendTEUpdate();
// 1 particle effect per object
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
- effectp->setSourceObject(gAgent.getAvatarObject());
+ effectp->setSourceObject(gAgentAvatarp);
effectp->setTargetObject(object);
effectp->setDuration(LL_HUD_DUR_SHORT);
effectp->setColor(LLColor4U(gAgent.getEffectColor()));
@@ -2872,7 +2873,7 @@ bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response,
effectp->setDuration(duration);
}
- gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
// Keep track of how many objects have been deleted.
F64 obj_delete_count = LLViewerStats::getInstance()->getStat(LLViewerStats::ST_OBJECT_DELETE_COUNT);
@@ -3618,7 +3619,7 @@ void LLSelectMgr::sendAttach(U8 attachment_point)
{
LLViewerObject* attach_object = mSelectedObjects->getFirstRootObject();
- if (!attach_object || !gAgent.getAvatarObject() || mSelectedObjects->mSelectType != SELECT_TYPE_WORLD)
+ if (!attach_object || !isAgentAvatarValid() || mSelectedObjects->mSelectType != SELECT_TYPE_WORLD)
{
return;
}
@@ -3629,7 +3630,7 @@ void LLSelectMgr::sendAttach(U8 attachment_point)
BOOL build_mode = LLToolMgr::getInstance()->inEdit();
// Special case: Attach to default location for this object.
if (0 == attachment_point ||
- get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL))
+ get_if_there(gAgentAvatarp->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL))
{
sendListToRegions(
"ObjectAttach",
@@ -4391,7 +4392,7 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
msg->getStringFast(_PREHASH_ObjectData, _PREHASH_SitName, sit_name, i);
//unpack TE IDs
- std::vector<LLUUID> texture_ids;
+ uuid_vec_t texture_ids;
S32 size = msg->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_TextureID);
if (size > 0)
{
@@ -4626,8 +4627,8 @@ void LLSelectMgr::updateSilhouettes()
{
S32 num_sils_genned = 0;
- LLVector3d cameraPos = gAgent.getCameraPositionGlobal();
- F32 currentCameraZoom = gAgent.getCurrentCameraBuildOffset();
+ LLVector3d cameraPos = gAgentCamera.getCameraPositionGlobal();
+ F32 currentCameraZoom = gAgentCamera.getCurrentCameraBuildOffset();
if (!mSilhouetteImagep)
{
@@ -4648,7 +4649,7 @@ void LLSelectMgr::updateSilhouettes()
} func;
getSelection()->applyToObjects(&func);
- mLastCameraPos = gAgent.getCameraPositionGlobal();
+ mLastCameraPos = gAgentCamera.getCameraPositionGlobal();
}
std::vector<LLViewerObject*> changed_objects;
@@ -4910,22 +4911,23 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
LLGLEnable blend(GL_BLEND);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- if (for_hud && avatar)
+ if (isAgentAvatarValid() && for_hud)
{
- LLBBox hud_bbox = avatar->getHUDBBox();
+ LLBBox hud_bbox = gAgentAvatarp->getHUDBBox();
- F32 cur_zoom = gAgent.mHUDCurZoom;
+ F32 cur_zoom = gAgentCamera.mHUDCurZoom;
// set up transform to encompass bounding box of HUD
glMatrixMode(GL_PROJECTION);
- glPushMatrix();
+ gGL.pushMatrix();
glLoadIdentity();
F32 depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);
glOrtho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, depth);
glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
+ gGL.pushMatrix();
+ gGL.pushUIMatrix();
+ gGL.loadUIIdentity();
glLoadIdentity();
glLoadMatrixf(OGL_TO_CFR_ROTATION); // Load Cory's favorite reference frame
glTranslatef(-hud_bbox.getCenterLocal().mV[VX] + (depth *0.5f), 0.f, 0.f);
@@ -4934,17 +4936,18 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
if (mSelectedObjects->getNumNodes())
{
LLUUID inspect_item_id= LLUUID::null;
-#if 0
LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
- if(inspect_instance)
+ if(inspect_instance && inspect_instance->getVisible())
{
inspect_item_id = inspect_instance->getSelectedUUID();
}
-#endif
- LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel();
- if (panel_task_info)
+ else
{
- inspect_item_id = panel_task_info->getSelectedUUID();
+ LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel();
+ if (panel_task_info)
+ {
+ inspect_item_id = panel_task_info->getSelectedUUID();
+ }
}
LLUUID focus_item_id = LLViewerMediaFocus::getInstance()->getFocusedObjectID();
@@ -5019,13 +5022,14 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
}
}
- if (for_hud && avatar)
+ if (isAgentAvatarValid() && for_hud)
{
glMatrixMode(GL_PROJECTION);
- glPopMatrix();
+ gGL.popMatrix();
glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
+ gGL.popMatrix();
+ gGL.popUIMatrix();
stop_glerror();
}
@@ -5203,13 +5207,13 @@ void LLSelectNode::saveColors()
}
}
-void LLSelectNode::saveTextures(const std::vector<LLUUID>& textures)
+void LLSelectNode::saveTextures(const uuid_vec_t& textures)
{
if (mObject.notNull())
{
mSavedTextures.clear();
- for (std::vector<LLUUID>::const_iterator texture_it = textures.begin();
+ for (uuid_vec_t::const_iterator texture_it = textures.begin();
texture_it != textures.end(); ++texture_it)
{
mSavedTextures.push_back(*texture_it);
@@ -5374,7 +5378,10 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
}
glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
+ gGL.pushMatrix();
+ gGL.pushUIMatrix();
+ gGL.loadUIIdentity();
+
if (!is_hud_object)
{
glLoadIdentity();
@@ -5391,9 +5398,9 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
if (volume)
{
F32 silhouette_thickness;
- if (is_hud_object && gAgent.getAvatarObject())
+ if (isAgentAvatarValid() && is_hud_object)
{
- silhouette_thickness = LLSelectMgr::sHighlightThickness / gAgent.mHUDCurZoom;
+ silhouette_thickness = LLSelectMgr::sHighlightThickness / gAgentCamera.mHUDCurZoom;
}
else
{
@@ -5413,7 +5420,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
LLGLEnable fog(GL_FOG);
glFogi(GL_FOG_MODE, GL_LINEAR);
float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec();
- LLColor4 fogCol = color * (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal()-gAgent.getCameraPositionGlobal()).magVec()/(LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0);
+ LLColor4 fogCol = color * (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal()-gAgentCamera.getCameraPositionGlobal()).magVec()/(LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0);
glFogf(GL_FOG_START, d);
glFogf(GL_FOG_END, d*(1 + (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV())));
glFogfv(GL_FOG_COLOR, fogCol.mV);
@@ -5493,7 +5500,8 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
gGL.end();
gGL.flush();
}
- glPopMatrix();
+ gGL.popMatrix();
+ gGL.popUIMatrix();
}
//
@@ -5527,13 +5535,12 @@ void dialog_refresh_all()
LLFloaterProperties::dirtyAll();
-#if 0
LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
if(inspect_instance)
{
inspect_instance->dirty();
}
-#endif
+
LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel();
if (panel_task_info)
{
@@ -5601,20 +5608,20 @@ void LLSelectMgr::updateSelectionCenter()
{
mSelectedObjects->mSelectType = getSelectTypeForObject(object);
- if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject())
+ if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())
{
- mPauseRequest = gAgent.getAvatarObject()->requestPause();
+ mPauseRequest = gAgentAvatarp->requestPause();
}
else
{
mPauseRequest = NULL;
}
- if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && gAgent.getAvatarObject())
+ if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && isAgentAvatarValid())
{
// reset hud ZOOM
- gAgent.mHUDTargetZoom = 1.f;
- gAgent.mHUDCurZoom = 1.f;
+ gAgentCamera.mHUDTargetZoom = 1.f;
+ gAgentCamera.mHUDCurZoom = 1.f;
}
mShowSelection = FALSE;
@@ -5633,10 +5640,10 @@ void LLSelectMgr::updateSelectionCenter()
LLViewerObject* object = node->getObject();
if (!object)
continue;
- LLViewerObject *myAvatar = gAgent.getAvatarObject();
+
LLViewerObject *root = object->getRootEdit();
if (mSelectedObjects->mSelectType == SELECT_TYPE_WORLD && // not an attachment
- !root->isChild(myAvatar) && // not the object you're sitting on
+ !root->isChild(gAgentAvatarp) && // not the object you're sitting on
!object->isAvatar()) // not another avatar
{
mShowSelection = TRUE;
@@ -5706,26 +5713,26 @@ void LLSelectMgr::updatePointAt()
select_offset.setVec(pick.mObjectOffset);
select_offset.rotVec(~click_object->getRenderRotation());
- gAgent.setPointAt(POINTAT_TARGET_SELECT, click_object, select_offset);
- gAgent.setLookAt(LOOKAT_TARGET_SELECT, click_object, select_offset);
+ gAgentCamera.setPointAt(POINTAT_TARGET_SELECT, click_object, select_offset);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_SELECT, click_object, select_offset);
}
else
{
// didn't click on an object this time, revert to pointing at center of first object
- gAgent.setPointAt(POINTAT_TARGET_SELECT, mSelectedObjects->getFirstObject());
- gAgent.setLookAt(LOOKAT_TARGET_SELECT, mSelectedObjects->getFirstObject());
+ gAgentCamera.setPointAt(POINTAT_TARGET_SELECT, mSelectedObjects->getFirstObject());
+ gAgentCamera.setLookAt(LOOKAT_TARGET_SELECT, mSelectedObjects->getFirstObject());
}
}
else
{
- gAgent.setPointAt(POINTAT_TARGET_CLEAR);
- gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
+ gAgentCamera.setPointAt(POINTAT_TARGET_CLEAR);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
}
}
else
{
- gAgent.setPointAt(POINTAT_TARGET_CLEAR);
- gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
+ gAgentCamera.setPointAt(POINTAT_TARGET_CLEAR);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
}
}
@@ -5915,20 +5922,20 @@ BOOL LLSelectMgr::setForceSelection(BOOL force)
void LLSelectMgr::resetAgentHUDZoom()
{
- gAgent.mHUDTargetZoom = 1.f;
- gAgent.mHUDCurZoom = 1.f;
+ gAgentCamera.mHUDTargetZoom = 1.f;
+ gAgentCamera.mHUDCurZoom = 1.f;
}
void LLSelectMgr::getAgentHUDZoom(F32 &target_zoom, F32 &current_zoom) const
{
- target_zoom = gAgent.mHUDTargetZoom;
- current_zoom = gAgent.mHUDCurZoom;
+ target_zoom = gAgentCamera.mHUDTargetZoom;
+ current_zoom = gAgentCamera.mHUDCurZoom;
}
void LLSelectMgr::setAgentHUDZoom(F32 target_zoom, F32 current_zoom)
{
- gAgent.mHUDTargetZoom = target_zoom;
- gAgent.mHUDCurZoom = current_zoom;
+ gAgentCamera.mHUDTargetZoom = target_zoom;
+ gAgentCamera.mHUDCurZoom = current_zoom;
}
/////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index 00474827ca..d315f40ff3 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -147,7 +147,7 @@ public:
void setObject(LLViewerObject* object);
// *NOTE: invalidate stored textures and colors when # faces change
void saveColors();
- void saveTextures(const std::vector<LLUUID>& textures);
+ void saveTextures(const uuid_vec_t& textures);
void saveTextureScaleRatios();
BOOL allowOperationOnNode(PermissionBit op, U64 group_proxy_power) const;
@@ -183,7 +183,7 @@ public:
std::string mSitName;
U64 mCreationDate;
std::vector<LLColor4> mSavedColors;
- std::vector<LLUUID> mSavedTextures;
+ uuid_vec_t mSavedTextures;
std::vector<LLVector3> mTextureScaleRatios;
std::vector<LLVector3> mSilhouetteVertices; // array of vertices to render silhouette of object
std::vector<LLVector3> mSilhouetteNormals; // array of normals to render silhouette of object
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index cd4a821774..a084c93786 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -34,6 +34,7 @@
#include "llaccordionctrltab.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
#include "llinventorypanel.h"
@@ -92,7 +93,7 @@ LLSidepanelAppearance::LLSidepanelAppearance() :
LLPanel(),
mFilterSubString(LLStringUtil::null),
mFilterEditor(NULL),
- mLookInfo(NULL),
+ mOutfitEdit(NULL),
mCurrOutfitPanel(NULL)
{
}
@@ -128,10 +129,10 @@ BOOL LLSidepanelAppearance::postBuild()
mPanelOutfitsInventory = dynamic_cast<LLPanelOutfitsInventory *>(getChild<LLPanel>("panel_outfits_inventory"));
mPanelOutfitsInventory->setParent(this);
- mLookInfo = dynamic_cast<LLPanelLookInfo*>(getChild<LLPanel>("panel_look_info"));
- if (mLookInfo)
+ mOutfitEdit = dynamic_cast<LLPanelOutfitEdit*>(getChild<LLPanel>("panel_outfit_edit"));
+ if (mOutfitEdit)
{
- LLButton* back_btn = mLookInfo->getChild<LLButton>("back_btn");
+ LLButton* back_btn = mOutfitEdit->getChild<LLButton>("back_btn");
if (back_btn)
{
back_btn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onBackButtonClicked, this));
@@ -176,16 +177,14 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)
if(key.size() == 0)
return;
- toggleLookInfoPanel(TRUE);
+ toggleOutfitEditPanel(TRUE);
updateVerbs();
mLookInfoType = key["type"].asString();
- if (mLookInfoType == "look")
+ if (mLookInfoType == "edit_outfit")
{
- LLInventoryCategory *pLook = gInventory.getCategory(key["id"].asUUID());
- if (pLook)
- mLookInfo->displayLookInfo(pLook);
+ mOutfitEdit->displayCurrentOutfit();
}
}
@@ -205,7 +204,7 @@ void LLSidepanelAppearance::onFilterEdit(const std::string& search_string)
void LLSidepanelAppearance::onOpenOutfitButtonClicked()
{
- const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getBaseOutfitLink();
+ const LLViewerInventoryItem *outfit_link = LLAppearanceMgr::getInstance()->getBaseOutfitLink();
if (!outfit_link)
return;
if (!outfit_link->getIsLinkType())
@@ -218,13 +217,13 @@ void LLSidepanelAppearance::onOpenOutfitButtonClicked()
LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_tab");
if (inventory_panel)
{
- LLFolderView *folder = inventory_panel->getRootFolder();
- LLFolderViewItem *outfit_folder = folder->getItemByID(outfit_link->getLinkedUUID());
+ LLFolderView* root = inventory_panel->getRootFolder();
+ LLFolderViewItem *outfit_folder = root->getItemByID(outfit_link->getLinkedUUID());
if (outfit_folder)
{
outfit_folder->setOpen(!outfit_folder->isOpen());
- folder->setSelectionFromRoot(outfit_folder,TRUE);
- folder->scrollToShowSelection();
+ root->setSelectionFromRoot(outfit_folder,TRUE);
+ root->scrollToShowSelection();
}
}
}
@@ -234,15 +233,15 @@ void LLSidepanelAppearance::onEditAppearanceButtonClicked()
{
if (gAgentWearables.areWearablesLoaded())
{
- gAgent.changeCameraToCustomizeAvatar();
+ gAgentCamera.changeCameraToCustomizeAvatar();
}
}
void LLSidepanelAppearance::onEditButtonClicked()
{
- toggleLookInfoPanel(FALSE);
+ toggleOutfitEditPanel(FALSE);
toggleWearableEditPanel(TRUE, NULL);
- /*if (mLookInfo->getVisible())
+ /*if (mOutfitEdit->getVisible())
{
}
else
@@ -253,7 +252,7 @@ void LLSidepanelAppearance::onEditButtonClicked()
void LLSidepanelAppearance::onNewOutfitButtonClicked()
{
- if (!mLookInfo->getVisible())
+ if (!mOutfitEdit->getVisible())
{
mPanelOutfitsInventory->onSave();
}
@@ -262,22 +261,22 @@ void LLSidepanelAppearance::onNewOutfitButtonClicked()
void LLSidepanelAppearance::onBackButtonClicked()
{
- toggleLookInfoPanel(FALSE);
+ toggleOutfitEditPanel(FALSE);
}
void LLSidepanelAppearance::onEditWearBackClicked()
{
mEditWearable->saveChanges();
toggleWearableEditPanel(FALSE, NULL);
- toggleLookInfoPanel(TRUE);
+ toggleOutfitEditPanel(TRUE);
}
-void LLSidepanelAppearance::toggleLookInfoPanel(BOOL visible)
+void LLSidepanelAppearance::toggleOutfitEditPanel(BOOL visible)
{
- if (!mLookInfo)
+ if (!mOutfitEdit)
return;
- mLookInfo->setVisible(visible);
+ mOutfitEdit->setVisible(visible);
if (mPanelOutfitsInventory) mPanelOutfitsInventory->setVisible(!visible);
mFilterEditor->setVisible(!visible);
mEditBtn->setVisible(!visible);
@@ -296,14 +295,17 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *we
return;
}
+ mCurrOutfitPanel->setVisible(!visible);
+
mEditWearable->setVisible(visible);
+ mEditWearable->setWearable(wearable);
mFilterEditor->setVisible(!visible);
mPanelOutfitsInventory->setVisible(!visible);
}
void LLSidepanelAppearance::updateVerbs()
{
- bool is_look_info_visible = mLookInfo->getVisible();
+ bool is_look_info_visible = mOutfitEdit->getVisible();
if (mPanelOutfitsInventory && !is_look_info_visible)
{
@@ -318,11 +320,11 @@ void LLSidepanelAppearance::updateVerbs()
void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
{
- mOutfitDirtyTag->setVisible(LLAppearanceManager::getInstance()->isOutfitDirty());
+ mOutfitDirtyTag->setVisible(LLAppearanceMgr::getInstance()->isOutfitDirty());
if (name == "")
{
std::string outfit_name;
- if (LLAppearanceManager::getInstance()->getBaseOutfitName(outfit_name))
+ if (LLAppearanceMgr::getInstance()->getBaseOutfitName(outfit_name))
{
mCurrentLookName->setText(outfit_name);
return;
@@ -342,7 +344,7 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
void LLSidepanelAppearance::editWearable(LLWearable *wearable, void *data)
{
LLSidepanelAppearance *panel = (LLSidepanelAppearance*) data;
- panel->toggleLookInfoPanel(FALSE);
+ panel->toggleOutfitEditPanel(FALSE);
panel->toggleWearableEditPanel(TRUE, wearable);
}
@@ -352,23 +354,24 @@ void LLSidepanelAppearance::fetchInventory()
{
mNewOutfitBtn->setEnabled(false);
- LLInventoryFetchObserver::item_ref_t ids;
+ uuid_vec_t ids;
LLUUID item_id;
for(S32 type = (S32)WT_SHAPE; type < (S32)WT_COUNT; ++type)
{
- // MULTI_WEARABLE:
- item_id = gAgentWearables.getWearableItemID((EWearableType)type,0);
- if(item_id.notNull())
+ for (U32 index = 0; index < gAgentWearables.getWearableCount((EWearableType)type); ++index)
{
- ids.push_back(item_id);
+ item_id = gAgentWearables.getWearableItemID((EWearableType)type, index);
+ if(item_id.notNull())
+ {
+ ids.push_back(item_id);
+ }
}
}
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if( avatar )
+ if (isAgentAvatarValid())
{
- for (LLVOAvatar::attachment_map_t::const_iterator iter = avatar->mAttachmentPoints.begin();
- iter != avatar->mAttachmentPoints.end(); ++iter)
+ for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); ++iter)
{
LLViewerJointAttachment* attachment = iter->second;
if (!attachment) continue;
@@ -386,7 +389,7 @@ void LLSidepanelAppearance::fetchInventory()
}
LLCurrentlyWornFetchObserver *fetch_worn = new LLCurrentlyWornFetchObserver(this);
- fetch_worn->fetchItems(ids);
+ fetch_worn->fetch(ids);
// If no items to be fetched, done will never be triggered.
// TODO: Change LLInventoryFetchObserver::fetchItems to trigger done() on this condition.
if (fetch_worn->isEverythingComplete())
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
index aa2e67fd16..1d78e92a84 100644
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -36,7 +36,7 @@
#include "llinventoryobserver.h"
#include "llinventory.h"
-#include "llpanellookinfo.h"
+#include "llpaneloutfitedit.h"
class LLFilterEditor;
class LLCurrentlyWornFetchObserver;
@@ -71,12 +71,12 @@ private:
void onEditButtonClicked();
void onBackButtonClicked();
void onEditWearBackClicked();
- void toggleLookInfoPanel(BOOL visible);
+ void toggleOutfitEditPanel(BOOL visible);
void toggleWearableEditPanel(BOOL visible, LLWearable* wearable);
LLFilterEditor* mFilterEditor;
LLPanelOutfitsInventory* mPanelOutfitsInventory;
- LLPanelLookInfo* mLookInfo;
+ LLPanelOutfitEdit* mOutfitEdit;
LLPanelEditWearable* mEditWearable;
LLButton* mOpenOutfitBtn;
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 73880563d7..18e56a9c01 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -161,7 +161,7 @@ void LLSidepanelInventory::performActionOnSelection(const std::string &action)
{
return;
}
- current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getRootFolder(), panel_main_inventory->getActivePanel()->getModel(), action);
+ current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getModel(), action);
}
void LLSidepanelInventory::onWearButtonClicked()
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 0275736f6d..9b073943b4 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -40,6 +40,7 @@
#include "llbutton.h"
#include "llfloaterreg.h"
#include "llgroupactions.h"
+#include "llinventorydefines.h"
#include "llinventorymodel.h"
#include "llinventoryobserver.h"
#include "lllineeditor.h"
@@ -439,9 +440,9 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
if (item->getType() == LLAssetType::AT_OBJECT)
{
U32 flags = item->getFlags();
- slam_perm = flags & LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
- overwrite_everyone = flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
- overwrite_group = flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+ slam_perm = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM;
+ overwrite_everyone = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+ overwrite_group = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
}
std::string perm_string;
@@ -752,7 +753,7 @@ void LLSidepanelItemInfo::onCommitPermissions()
if((perm.getMaskNextOwner()!=item->getPermissions().getMaskNextOwner())
&& (item->getType() == LLAssetType::AT_OBJECT))
{
- flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
+ flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM;
}
// If everyone permissions have changed (and this is an object)
// then set the overwrite everyone permissions flag so they
@@ -760,7 +761,7 @@ void LLSidepanelItemInfo::onCommitPermissions()
if ((perm.getMaskEveryone()!=item->getPermissions().getMaskEveryone())
&& (item->getType() == LLAssetType::AT_OBJECT))
{
- flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+ flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
}
// If group permissions have changed (and this is an object)
// then set the overwrite group permissions flag so they
@@ -768,7 +769,7 @@ void LLSidepanelItemInfo::onCommitPermissions()
if ((perm.getMaskGroup()!=item->getPermissions().getMaskGroup())
&& (item->getType() == LLAssetType::AT_OBJECT))
{
- flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+ flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
}
new_item->setFlags(flags);
if(mObjectID.isNull())
@@ -880,7 +881,7 @@ void LLSidepanelItemInfo::updateSaleInfo()
if (item->getType() == LLAssetType::AT_OBJECT)
{
U32 flags = new_item->getFlags();
- flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE;
+ flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_SALE;
new_item->setFlags(flags);
}
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 0630981d7e..6ebe55e362 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -100,6 +100,8 @@ BOOL LLSidepanelTaskInfo::postBuild()
mPayBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onPayButtonClicked, this));
mBuyBtn = getChild<LLButton>("buy_btn");
mBuyBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuyButtonClicked, this));
+ mDetailsBtn = getChild<LLButton>("details_btn");
+ mDetailsBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onDetailsButtonClicked, this));
mLabelGroupName = getChild<LLNameBox>("Group Name Proxy");
@@ -1122,6 +1124,15 @@ void LLSidepanelTaskInfo::updateVerbs()
//mEditBtn->setEnabled(obj && obj->permModify());
*/
+ LLSafeHandle<LLObjectSelection> object_selection = LLSelectMgr::getInstance()->getSelection();
+ const BOOL multi_select = (object_selection->getNumNodes() > 1);
+
+ mOpenBtn->setVisible(!multi_select);
+ mPayBtn->setVisible(!multi_select);
+ mBuyBtn->setVisible(!multi_select);
+ mDetailsBtn->setVisible(multi_select);
+ mDetailsBtn->setEnabled(multi_select);
+
mOpenBtn->setEnabled(enable_object_open());
mPayBtn->setEnabled(enable_pay_object());
mBuyBtn->setEnabled(enable_buy_object());
@@ -1145,6 +1156,11 @@ void LLSidepanelTaskInfo::onBuyButtonClicked()
doClickAction(CLICK_ACTION_BUY);
}
+void LLSidepanelTaskInfo::onDetailsButtonClicked()
+{
+ LLFloaterReg::showInstance("inspect", LLSD());
+}
+
// virtual
void LLSidepanelTaskInfo::save()
{
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
index cf36c20767..e41627435f 100644
--- a/indra/newview/llsidepaneltaskinfo.h
+++ b/indra/newview/llsidepaneltaskinfo.h
@@ -109,10 +109,12 @@ protected:
void onOpenButtonClicked();
void onPayButtonClicked();
void onBuyButtonClicked();
+ void onDetailsButtonClicked();
private:
LLButton* mOpenBtn;
LLButton* mPayBtn;
LLButton* mBuyBtn;
+ LLButton* mDetailsBtn;
protected:
LLViewerObject* getObject();
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index fba1503b4a..3ec1855484 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -34,7 +34,7 @@
#include "lltextbox.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "llbottomtray.h"
#include "llsidetray.h"
#include "llviewerwindow.h"
@@ -730,7 +730,7 @@ void LLSideTray::updateSidetrayVisibility()
// set visibility of parent container based on collapsed state
if (getParent())
{
- getParent()->setVisible(!mCollapsed && !gAgent.cameraMouselook());
+ getParent()->setVisible(!mCollapsed && !gAgentCamera.cameraMouselook());
}
}
diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp
index e4773f99c5..5d20e280b5 100644
--- a/indra/newview/llslurl.cpp
+++ b/indra/newview/llslurl.cpp
@@ -36,6 +36,8 @@
#include "llweb.h"
+#include "llurlregistry.h"
+
const std::string LLSLURL::PREFIX_SL_HELP = "secondlife://app.";
const std::string LLSLURL::PREFIX_SL = "sl://";
const std::string LLSLURL::PREFIX_SECONDLIFE = "secondlife://";
@@ -95,6 +97,20 @@ bool LLSLURL::isSLURL(const std::string& url)
return false;
}
+bool LLSLURL::isValidSLURL(const std::string& url)
+{
+ std::string temp_url(url);
+ //"www." may appear in DnD- see description of PREFIX_SLURL_WWW.
+ // If it is found, we remove it because it isn't expected in regexp.
+ if (matchPrefix(url, PREFIX_SLURL_WWW))
+ {
+ size_t position = url.find("www.");
+ temp_url.erase(position,4);
+ }
+
+ return LLUrlRegistry::getInstance()->isUrl(temp_url);
+}
+
// static
bool LLSLURL::isSLURLCommand(const std::string& url)
{
diff --git a/indra/newview/llslurl.h b/indra/newview/llslurl.h
index 6a695e84f3..a79a8fc97c 100644
--- a/indra/newview/llslurl.h
+++ b/indra/newview/llslurl.h
@@ -61,6 +61,11 @@ public:
static bool isSLURL(const std::string& url);
/**
+ * Returns true if url is proven valid by regexp check from LLUrlRegistry
+ */
+ static bool isValidSLURL(const std::string& url);
+
+ /**
* Is this a special secondlife://app/ URL?
*/
static bool isSLURLCommand(const std::string& url);
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 2a57d48f16..d6e9256fee 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -3380,7 +3380,8 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset,
mVSize(0.f),
mGroup(NULL),
mFace(NULL),
- mDistance(0.f)
+ mDistance(0.f),
+ mDrawMode(LLRender::TRIANGLES)
{
mDebugColor = (rand() << 16) + rand();
if (mStart >= mVertexBuffer->getRequestedVerts() ||
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 64c2a9acbc..7896488379 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -93,6 +93,7 @@ public:
LLFace* mFace; //associated face
F32 mDistance;
LLVector3 mExtents[2];
+ U32 mDrawMode;
struct CompareTexture
{
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 717a8bda1e..4573520647 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -37,7 +37,6 @@
#include "llagent.h"
#include "llappviewer.h"
#include "llimview.h"
-#include "llmutelist.h"
#include "llsdutil.h"
#include "lluicolortable.h"
#include "llviewerobjectlist.h"
@@ -880,7 +879,7 @@ void LLLocalSpeakerMgr::updateSpeakerList()
}
// pick up non-voice speakers in chat range
- std::vector<LLUUID> avatar_ids;
+ uuid_vec_t avatar_ids;
std::vector<LLVector3d> positions;
LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, gAgent.getPositionGlobal(), CHAT_NORMAL_RADIUS);
for(U32 i=0; i<avatar_ids.size(); i++)
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
index d33c050ee4..cc06179481 100644
--- a/indra/newview/llspeakingindicatormanager.cpp
+++ b/indra/newview/llspeakingindicatormanager.cpp
@@ -65,8 +65,12 @@ public:
*
* @param speaker_id LLUUID of an avatar whose speaking indicator is registered.
* @param speaking_indicator instance of the speaking indicator to be registered.
+ * @param session_id session UUID for which indicator should be shown only.
+ * If this parameter is set registered indicator will be shown only in voice channel
+ * which has the same session id (EXT-5562).
*/
- void registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator);
+ void registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator,
+ const LLUUID& session_id = LLUUID::null);
/**
* Removes passed speaking indicator from observing.
@@ -138,15 +142,18 @@ private:
//////////////////////////////////////////////////////////////////////////
// PUBLIC SECTION
//////////////////////////////////////////////////////////////////////////
-void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator)
+void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator,
+ const LLUUID& session_id)
{
// do not exclude agent's indicators. They should be processed in the same way as others. See EXT-3889.
- LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << "|"<< speaking_indicator << LL_ENDL;
+ LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << "|"<< speaking_indicator << ", session: " << session_id << LL_ENDL;
ensureInstanceDoesNotExist(speaking_indicator);
+ speaking_indicator->setTargetSessionID(session_id);
+
speaking_indicator_value_t value_type(speaker_id, speaking_indicator);
mSpeakingIndicators.insert(value_type);
@@ -217,6 +224,13 @@ void SpeakingIndicatorManager::onChange()
void SpeakingIndicatorManager::switchSpeakerIndicators(const speaker_ids_t& speakers_uuids, BOOL switch_on)
{
+ LLVoiceChannel* voice_channel = LLVoiceChannel::getCurrentVoiceChannel();
+ LLUUID session_id;
+ if (voice_channel)
+ {
+ session_id = voice_channel->getSessionID();
+ }
+
speaker_ids_t::const_iterator it_uuid = speakers_uuids.begin();
for (; it_uuid != speakers_uuids.end(); ++it_uuid)
{
@@ -224,18 +238,36 @@ void SpeakingIndicatorManager::switchSpeakerIndicators(const speaker_ids_t& spea
indicator_range_t it_range = mSpeakingIndicators.equal_range(*it_uuid);
indicator_const_iterator it_indicator = it_range.first;
bool was_found = false;
+ bool was_switched_on = false;
for (; it_indicator != it_range.second; ++it_indicator)
{
was_found = true;
LLSpeakingIndicator* indicator = (*it_indicator).second;
- indicator->switchIndicator(switch_on);
+
+ BOOL switch_current_on = switch_on;
+
+ // we should show indicator for specified voice session only if this is current channel. EXT-5562.
+ if (switch_current_on && indicator->getTargetSessionID().notNull())
+ {
+ switch_current_on = indicator->getTargetSessionID() == session_id;
+ LL_DEBUGS("SpeakingIndicator") << "Session: " << session_id << ", target: " << indicator->getTargetSessionID() << ", the same? = " << switch_current_on << LL_ENDL;
+ }
+ was_switched_on = was_switched_on || switch_current_on;
+
+ indicator->switchIndicator(switch_current_on);
+
}
if (was_found)
{
LL_DEBUGS("SpeakingIndicator") << mSpeakingIndicators.count(*it_uuid) << " indicators where found" << LL_ENDL;
- if (switch_on)
+ if (switch_on && !was_switched_on)
+ {
+ LL_DEBUGS("SpeakingIndicator") << "but non of them where switched on" << LL_ENDL;
+ }
+
+ if (was_switched_on)
{
// store switched on indicator to be able switch it off
mSwitchedIndicatorsOn.insert(*it_uuid);
@@ -274,9 +306,10 @@ void SpeakingIndicatorManager::ensureInstanceDoesNotExist(LLSpeakingIndicator* c
/* LLSpeakingIndicatorManager namespace implementation */
/************************************************************************/
-void LLSpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator)
+void LLSpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator,
+ const LLUUID& session_id)
{
- SpeakingIndicatorManager::instance().registerSpeakingIndicator(speaker_id, speaking_indicator);
+ SpeakingIndicatorManager::instance().registerSpeakingIndicator(speaker_id, speaking_indicator, session_id);
}
void LLSpeakingIndicatorManager::unregisterSpeakingIndicator(const LLUUID& speaker_id, const LLSpeakingIndicator* const speaking_indicator)
diff --git a/indra/newview/llspeakingindicatormanager.h b/indra/newview/llspeakingindicatormanager.h
index ce0158f7d8..8d7aba1d6c 100644
--- a/indra/newview/llspeakingindicatormanager.h
+++ b/indra/newview/llspeakingindicatormanager.h
@@ -35,10 +35,28 @@
#ifndef LL_LLSPEAKINGINDICATORMANAGER_H
#define LL_LLSPEAKINGINDICATORMANAGER_H
+class SpeakingIndicatorManager;
+
class LLSpeakingIndicator
{
public:
+ virtual ~LLSpeakingIndicator(){}
virtual void switchIndicator(bool switch_on) = 0;
+
+private:
+ friend class SpeakingIndicatorManager;
+ // Accessors for target voice session UUID.
+ // They are intended to be used only from SpeakingIndicatorManager to ensure target session is
+ // the same indicator was registered with.
+ void setTargetSessionID(const LLUUID& session_id) { mTargetSessionID = session_id; }
+ const LLUUID& getTargetSessionID() { return mTargetSessionID; }
+
+ /**
+ * session UUID for which indicator should be shown only.
+ * If it is set, registered indicator will be shown only in voice channel
+ * which has the same session id (EXT-5562).
+ */
+ LLUUID mTargetSessionID;
};
// See EXT-3976.
@@ -52,8 +70,12 @@ namespace LLSpeakingIndicatorManager
*
* @param speaker_id LLUUID of an avatar whose speaker indicator is registered.
* @param speaking_indicator instance of the speaker indicator to be registered.
+ * @param session_id session UUID for which indicator should be shown only.
+ * If this parameter is set registered indicator will be shown only in voice channel
+ * which has the same session id (EXT-5562).
*/
- void registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator);
+ void registerSpeakingIndicator(const LLUUID& speaker_id, LLSpeakingIndicator* const speaking_indicator,
+ const LLUUID& session_id);
/**
* Removes passed speaking indicator from observing.
diff --git a/indra/newview/llsplitbutton.cpp b/indra/newview/llsplitbutton.cpp
index ffd9bc7624..e5323db466 100644
--- a/indra/newview/llsplitbutton.cpp
+++ b/indra/newview/llsplitbutton.cpp
@@ -165,7 +165,7 @@ void LLSplitButton::showButtons()
// register ourselves as a "top" control
// effectively putting us into a special draw layer
- gFocusMgr.setTopCtrl(this);
+ gViewerWindow->addPopup(this);
mItemsPanel->setFocus(TRUE);
@@ -182,10 +182,7 @@ void LLSplitButton::hideButtons()
mArrowBtn->setToggleState(FALSE);
setUseBoundingRect(FALSE);
- if(gFocusMgr.getTopCtrl() == this)
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ gViewerWindow->removePopup(this);
}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 83f773fadc..94a32873ec 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -62,6 +62,7 @@
#include "llimfloater.h"
#include "lllocationhistory.h"
#include "llimageworker.h"
+
#include "llloginflags.h"
#include "llmd5.h"
#include "llmemorystream.h"
@@ -88,6 +89,7 @@
#include "v3math.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llagentpicksinfo.h"
#include "llagentwearables.h"
#include "llagentpilot.h"
@@ -115,13 +117,13 @@
#include "llimagebmp.h"
#include "llinventorybridge.h"
#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llfriendcard.h"
#include "llkeyboard.h"
#include "llloginhandler.h" // gLoginHandler, SLURL support
#include "lllogininstance.h" // Host the login module.
#include "llpanellogin.h"
#include "llmutelist.h"
-#include "llpanelavatar.h"
#include "llavatarpropertiesprocessor.h"
#include "llfloaterevent.h"
#include "llpanelclassified.h"
@@ -938,6 +940,9 @@ bool idle_startup()
// Load Avatars icons cache
LLAvatarIconIDCache::getInstance()->load();
+
+ // Load media plugin cookies
+ LLViewerMedia::loadCookieFile();
//-------------------------------------------------
// Handle startup progress screen
@@ -1041,7 +1046,7 @@ bool idle_startup()
if(STATE_LOGIN_PROCESS_RESPONSE == LLStartUp::getStartupState())
{
std::ostringstream emsg;
- emsg << "Login failed.\n";
+ emsg << LLTrans::getString("LoginFailed") << "\n";
if(LLLoginInstance::getInstance()->authFailure())
{
LL_INFOS("LLStartup") << "Login failed, LLLoginInstance::getResponse(): "
@@ -1135,6 +1140,7 @@ bool idle_startup()
// Finish agent initialization. (Requires gSavedSettings, builds camera)
gAgent.init();
+ gAgentCamera.init();
set_underclothes_menu_options();
// Since we connected, save off the settings so the user doesn't have to
@@ -1173,7 +1179,7 @@ bool idle_startup()
// World initialization must be done after above window init
// User might have overridden far clip
- LLWorld::getInstance()->setLandFarClip( gAgent.mDrawDistance );
+ LLWorld::getInstance()->setLandFarClip(gAgentCamera.mDrawDistance);
// Before we create the first region, we need to set the agent's mOriginGlobal
// This is necessary because creating objects before this is set will result in a
@@ -1337,8 +1343,8 @@ bool idle_startup()
gAgent.setPositionAgent(agent_start_position_region);
gAgent.resetAxes(gAgentStartLookAt);
- gAgent.stopCameraAnimation();
- gAgent.resetCamera();
+ gAgentCamera.stopCameraAnimation();
+ gAgentCamera.resetCamera();
// Initialize global class data needed for surfaces (i.e. textures)
if (!gNoRender)
@@ -1742,7 +1748,7 @@ bool idle_startup()
{
LL_DEBUGS("AppInit") << "Gesture Manager loading " << gesture_options.size()
<< LL_ENDL;
- std::vector<LLUUID> item_ids;
+ uuid_vec_t item_ids;
for(LLSD::array_const_iterator resp_it = gesture_options.beginArray(),
end = gesture_options.endArray(); resp_it != end; ++resp_it)
{
@@ -1756,7 +1762,7 @@ bool idle_startup()
// Could schedule and delay these for later.
const BOOL no_inform_server = FALSE;
const BOOL no_deactivate_similar = FALSE;
- LLGestureManager::instance().activateGestureWithAsset(item_id, asset_id,
+ LLGestureMgr::instance().activateGestureWithAsset(item_id, asset_id,
no_inform_server,
no_deactivate_similar);
// We need to fetch the inventory items for these gestures
@@ -1765,7 +1771,7 @@ bool idle_startup()
}
}
// no need to add gesture to inventory observer, it's already made in constructor
- LLGestureManager::instance().fetchItems(item_ids);
+ LLGestureMgr::instance().fetch(item_ids);
}
}
gDisplaySwapBuffers = TRUE;
@@ -1811,15 +1817,15 @@ bool idle_startup()
if (samename)
{
// restore old camera pos
- gAgent.setFocusOnAvatar(FALSE, FALSE);
- gAgent.setCameraPosAndFocusGlobal(gSavedSettings.getVector3d("CameraPosOnLogout"), gSavedSettings.getVector3d("FocusPosOnLogout"), LLUUID::null);
+ gAgentCamera.setFocusOnAvatar(FALSE, FALSE);
+ gAgentCamera.setCameraPosAndFocusGlobal(gSavedSettings.getVector3d("CameraPosOnLogout"), gSavedSettings.getVector3d("FocusPosOnLogout"), LLUUID::null);
BOOL limit_hit = FALSE;
- gAgent.calcCameraPositionTargetGlobal(&limit_hit);
+ gAgentCamera.calcCameraPositionTargetGlobal(&limit_hit);
if (limit_hit)
{
- gAgent.setFocusOnAvatar(TRUE, FALSE);
+ gAgentCamera.setFocusOnAvatar(TRUE, FALSE);
}
- gAgent.stopCameraAnimation();
+ gAgentCamera.stopCameraAnimation();
}
}
else
@@ -1842,7 +1848,7 @@ bool idle_startup()
}
//DEV-17797. get null folder. Any items found here moved to Lost and Found
- LLInventoryModel::findLostItems();
+ LLInventoryModelBackgroundFetch::instance().findLostItems();
LLStartUp::setStartupState( STATE_PRECACHE );
timeout.reset();
@@ -1860,7 +1866,7 @@ bool idle_startup()
if (gAgent.isFirstLogin()
&& !sInitialOutfit.empty() // registration set up an outfit
&& !sInitialOutfitGender.empty() // and a gender
- && gAgent.getAvatarObject() // can't wear clothes without object
+ && isAgentAvatarValid() // can't wear clothes without object
&& !gAgent.isGenderChosen() ) // nothing already loading
{
// Start loading the wearables, textures, gestures
@@ -1868,7 +1874,7 @@ bool idle_startup()
}
// wait precache-delay and for agent's avatar or a lot longer.
- if(((timeout_frac > 1.f) && gAgent.getAvatarObject())
+ if(((timeout_frac > 1.f) && isAgentAvatarValid())
|| (timeout_frac > 3.f))
{
LLStartUp::setStartupState( STATE_WEARABLES_WAIT );
@@ -1924,8 +1930,8 @@ bool idle_startup()
if (gAgent.isFirstLogin())
{
// wait for avatar to be completely loaded
- if (gAgent.getAvatarObject()
- && gAgent.getAvatarObject()->isFullyLoaded())
+ if (isAgentAvatarValid()
+ && gAgentAvatarp->isFullyLoaded())
{
//llinfos << "avatar fully loaded" << llendl;
LLStartUp::setStartupState( STATE_CLEANUP );
@@ -2532,7 +2538,7 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
llinfos << "starting" << llendl;
// Not going through the processAgentInitialWearables path, so need to set this here.
- LLAppearanceManager::instance().setAttachmentInvLinkEnable(true);
+ LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true);
// Initiate creation of COF, since we're also bypassing that.
gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
@@ -2563,13 +2569,13 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
bool do_copy = true;
bool do_append = false;
LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);
- LLAppearanceManager::instance().wearInventoryCategory(cat, do_copy, do_append);
+ LLAppearanceMgr::instance().wearInventoryCategory(cat, do_copy, do_append);
}
// Copy gestures
LLUUID dst_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
LLPointer<LLInventoryCallback> cb(NULL);
- LLAppearanceManager *app_mgr = &(LLAppearanceManager::instance());
+ LLAppearanceMgr *app_mgr = &(LLAppearanceMgr::instance());
// - Copy gender-specific gestures.
LLUUID gestures_cat_id = findDescendentCategoryIDByName(
@@ -2578,7 +2584,7 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
if (gestures_cat_id.notNull())
{
callAfterCategoryFetch(gestures_cat_id,
- boost::bind(&LLAppearanceManager::shallowCopyCategory,
+ boost::bind(&LLAppearanceMgr::shallowCopyCategory,
app_mgr,
gestures_cat_id,
dst_id,
@@ -2592,7 +2598,7 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
if (common_gestures_cat_id.notNull())
{
callAfterCategoryFetch(common_gestures_cat_id,
- boost::bind(&LLAppearanceManager::shallowCopyCategory,
+ boost::bind(&LLAppearanceMgr::shallowCopyCategory,
app_mgr,
common_gestures_cat_id,
dst_id,
@@ -2720,6 +2726,8 @@ void LLStartUp::postStartupState()
void reset_login()
{
+ gAgentWearables.cleanup();
+ gAgentCamera.cleanup();
gAgent.cleanup();
LLWorld::getInstance()->destroyClass();
@@ -3079,6 +3087,13 @@ bool process_login_success_response()
}
}
+ // Start the process of fetching the OpenID session cookie for this user login
+ std::string openid_url = response["openid_url"];
+ if(!openid_url.empty())
+ {
+ std::string openid_token = response["openid_token"];
+ LLViewerMedia::openIDSetup(openid_url, openid_token);
+ }
bool success = false;
// JC: gesture loading done below, when we have an asset system
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index e83c882866..b660a2b8ea 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -36,6 +36,7 @@
// viewer includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llbutton.h"
#include "llcommandhandler.h"
#include "llviewercontrol.h"
@@ -239,20 +240,16 @@ BOOL LLStatusBar::postBuild()
childSetActionTextbox("stat_btn", onClickStatGraph);
- LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
-
mPanelVolumePulldown = new LLPanelVolumePulldown();
- popup_holder->addChild(mPanelVolumePulldown);
+ addChild(mPanelVolumePulldown);
+ mPanelVolumePulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
+ mPanelVolumePulldown->setVisible(FALSE);
mPanelNearByMedia = new LLPanelNearByMedia();
- popup_holder->addChild(mPanelNearByMedia);
- gViewerWindow->getRootView()->addMouseDownCallback(boost::bind(&LLStatusBar::onClickScreen, this, _1, _2));
+ addChild(mPanelNearByMedia);
mPanelNearByMedia->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
mPanelNearByMedia->setVisible(FALSE);
- mPanelVolumePulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
- mPanelVolumePulldown->setVisible(FALSE);
-
return TRUE;
}
@@ -317,7 +314,7 @@ void LLStatusBar::refresh()
childSetVisible("scriptout", false);
}
- if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK &&
+ if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK &&
((region && region->getAllowDamage()) || (parcel && parcel->getAllowDamage())))
{
// set visibility based on flashing
@@ -358,12 +355,16 @@ void LLStatusBar::refresh()
bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute();
mBtnVolume->setToggleState(mute_audio);
- // Don't show media toggle if there's no media, parcel media, and no parcel audio
- mMediaToggle->setVisible(LLViewerMedia::hasInWorldMedia() || LLViewerMedia::hasParcelMedia() || LLViewerMedia::hasParcelAudio());
+ // Disable media toggle if there's no media, parcel media, and no parcel audio
+ // (or if media is disabled)
+ bool button_enabled = (gSavedSettings.getBOOL("AudioStreamingMusic")||gSavedSettings.getBOOL("AudioStreamingMedia")) &&
+ (LLViewerMedia::hasInWorldMedia() || LLViewerMedia::hasParcelMedia() || LLViewerMedia::hasParcelAudio());
+ mMediaToggle->setEnabled(button_enabled);
// Note the "sense" of the toggle is opposite whether media is playing or not
- mMediaToggle->setValue(! (LLViewerMedia::isAnyMediaShowing() ||
+ bool any_media_playing = (LLViewerMedia::isAnyMediaShowing() ||
LLViewerMedia::isParcelMediaPlaying() ||
- LLViewerMedia::isParcelAudioPlaying()));
+ LLViewerMedia::isParcelAudioPlaying());
+ mMediaToggle->setValue(!any_media_playing);
}
void LLStatusBar::setVisibleForMouselook(bool visible)
@@ -371,6 +372,8 @@ void LLStatusBar::setVisibleForMouselook(bool visible)
mTextTime->setVisible(visible);
getChild<LLUICtrl>("buycurrency")->setVisible(visible);
getChild<LLUICtrl>("buyL")->setVisible(visible);
+ mBtnVolume->setVisible(visible);
+ mMediaToggle->setVisible(visible);
mSGBandwidth->setVisible(visible);
mSGPacketLoss->setVisible(visible);
setBackgroundVisible(visible);
@@ -444,11 +447,9 @@ void LLStatusBar::setHealth(S32 health)
{
if (mHealth > (health + gSavedSettings.getF32("UISndHealthReductionThreshold")))
{
- LLVOAvatar *me;
-
- if ((me = gAgent.getAvatarObject()))
+ if (isAgentAvatarValid())
{
- if (me->getSex() == SEX_FEMALE)
+ if (gAgentAvatarp->getSex() == SEX_FEMALE)
{
make_ui_sound("UISndHealthReductionF");
}
@@ -524,11 +525,11 @@ static void onClickScriptDebug(void*)
void LLStatusBar::onMouseEnterVolume()
{
LLButton* volbtn = getChild<LLButton>( "volume_btn" );
- LLRect vol_btn_screen_rect = volbtn->calcScreenRect();
+ LLRect vol_btn_rect = volbtn->getRect();
LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();
- volume_pulldown_rect.setLeftTopAndSize(vol_btn_screen_rect.mLeft -
- (volume_pulldown_rect.getWidth() - vol_btn_screen_rect.getWidth())/2,
- vol_btn_screen_rect.mBottom,
+ volume_pulldown_rect.setLeftTopAndSize(vol_btn_rect.mLeft -
+ (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth())/2,
+ vol_btn_rect.mBottom,
volume_pulldown_rect.getWidth(),
volume_pulldown_rect.getHeight());
@@ -536,8 +537,10 @@ void LLStatusBar::onMouseEnterVolume()
// show the master volume pull-down
- mPanelVolumePulldown->setVisible(TRUE);
+ LLUI::clearPopups();
+ LLUI::addPopup(mPanelVolumePulldown);
mPanelNearByMedia->setVisible(FALSE);
+ mPanelVolumePulldown->setVisible(TRUE);
}
void LLStatusBar::onMouseEnterNearbyMedia()
@@ -545,19 +548,22 @@ void LLStatusBar::onMouseEnterNearbyMedia()
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
LLRect nearby_media_rect = mPanelNearByMedia->getRect();
LLButton* nearby_media_btn = getChild<LLButton>( "media_toggle_btn" );
- LLRect nearby_media_btn_rect = nearby_media_btn->calcScreenRect();
+ LLRect nearby_media_btn_rect = nearby_media_btn->getRect();
nearby_media_rect.setLeftTopAndSize(nearby_media_btn_rect.mLeft -
- (nearby_media_rect.getWidth() - nearby_media_btn_rect.getWidth())/2,
- nearby_media_btn_rect.mBottom,
- nearby_media_rect.getWidth(),
- nearby_media_rect.getHeight());
+ (nearby_media_rect.getWidth() - nearby_media_btn_rect.getWidth())/2,
+ nearby_media_btn_rect.mBottom,
+ nearby_media_rect.getWidth(),
+ nearby_media_rect.getHeight());
// force onscreen
nearby_media_rect.translate(popup_holder->getRect().getWidth() - nearby_media_rect.mRight, 0);
-
+
// show the master volume pull-down
mPanelNearByMedia->setShape(nearby_media_rect);
- mPanelNearByMedia->setVisible(TRUE);
+ LLUI::clearPopups();
+ LLUI::addPopup(mPanelNearByMedia);
+
mPanelVolumePulldown->setVisible(FALSE);
+ mPanelNearByMedia->setVisible(TRUE);
}
@@ -646,18 +652,6 @@ void LLStatusBar::onClickStatGraph(void* data)
LLFloaterReg::showInstance("lagmeter");
}
-void LLStatusBar::onClickScreen(S32 x, S32 y)
-{
- if (mPanelNearByMedia->getVisible())
- {
- LLRect screen_rect = mPanelNearByMedia->calcScreenRect();
- if (!screen_rect.pointInRect(x, y))
- {
- mPanelNearByMedia->setVisible(FALSE);
- }
- }
-}
-
BOOL can_afford_transaction(S32 cost)
{
return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost)));
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index 1d479bac8c..ddb5d08e07 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -44,6 +44,7 @@
#include "llviewerobjectlist.h"
#include "llregionhandle.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llappviewer.h"
#include "llworld.h"
#include "llviewercontrol.h"
@@ -606,7 +607,7 @@ void LLSurface::moveZ(const S32 x, const S32 y, const F32 delta)
void LLSurface::updatePatchVisibilities(LLAgent &agent)
{
- LLVector3 pos_region = mRegionp->getPosRegionFromGlobal(gAgent.getCameraPositionGlobal());
+ LLVector3 pos_region = mRegionp->getPosRegionFromGlobal(gAgentCamera.getCameraPositionGlobal());
LLSurfacePatch *patchp;
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index 127b4265ca..cbb030836e 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -58,7 +58,8 @@ LLSysWellWindow::LLSysWellWindow(const LLSD& key) : LLTransientDockableFloater(N
mSysWellChiclet(NULL),
mSeparator(NULL),
NOTIFICATION_WELL_ANCHOR_NAME("notification_well_panel"),
- IM_WELL_ANCHOR_NAME("im_well_panel")
+ IM_WELL_ANCHOR_NAME("im_well_panel"),
+ mIsReshapedByUser(false)
{
mTypedItemsCount[IT_NOTIFICATION] = 0;
@@ -100,6 +101,13 @@ void LLSysWellWindow::setMinimized(BOOL minimize)
}
//---------------------------------------------------------------------------------
+void LLSysWellWindow::handleReshape(const LLRect& rect, bool by_user)
+{
+ mIsReshapedByUser |= by_user; // mark floater that it is reshaped by user
+ LLTransientDockableFloater::handleReshape(rect, by_user);
+}
+
+//---------------------------------------------------------------------------------
void LLSysWellWindow::onStartUpToastClick(S32 x, S32 y, MASK mask)
{
// just set floater visible. Screen channels will be cleared.
@@ -211,22 +219,25 @@ void LLSysWellWindow::reshapeWindow()
// it includes height from floater top to list top and from floater bottom and list bottom
static S32 parent_list_delta_height = getRect().getHeight() - mMessageList->getRect().getHeight();
- S32 notif_list_height = mMessageList->getItemsRect().getHeight() + 2 * mMessageList->getBorderWidth();
+ if (!mIsReshapedByUser) // Don't reshape Well window, if it ever was reshaped by user. See EXT-5715.
+ {
+ S32 notif_list_height = mMessageList->getItemsRect().getHeight() + 2 * mMessageList->getBorderWidth();
- LLRect curRect = getRect();
+ LLRect curRect = getRect();
- S32 new_window_height = notif_list_height + parent_list_delta_height;
+ S32 new_window_height = notif_list_height + parent_list_delta_height;
- if (new_window_height > MAX_WINDOW_HEIGHT)
- {
- new_window_height = MAX_WINDOW_HEIGHT;
- }
- S32 newY = curRect.mTop + new_window_height - curRect.getHeight();
- S32 newWidth = curRect.getWidth() < MIN_WINDOW_WIDTH ? MIN_WINDOW_WIDTH
+ if (new_window_height > MAX_WINDOW_HEIGHT)
+ {
+ new_window_height = MAX_WINDOW_HEIGHT;
+ }
+ S32 newY = curRect.mTop + new_window_height - curRect.getHeight();
+ S32 newWidth = curRect.getWidth() < MIN_WINDOW_WIDTH ? MIN_WINDOW_WIDTH
: curRect.getWidth();
- curRect.setLeftTopAndSize(curRect.mLeft, newY, newWidth, new_window_height);
- reshape(curRect.getWidth(), curRect.getHeight(), TRUE);
- setRect(curRect);
+ curRect.setLeftTopAndSize(curRect.mLeft, newY, newWidth, new_window_height);
+ reshape(curRect.getWidth(), curRect.getHeight(), TRUE);
+ setRect(curRect);
+ }
// update notification channel state
// update on a window reshape is important only when a window is visible and docked
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
index 3790aa3ea9..296bdf7482 100644
--- a/indra/newview/llsyswellwindow.h
+++ b/indra/newview/llsyswellwindow.h
@@ -70,6 +70,7 @@ public:
/*virtual*/ void setDocked(bool docked, bool pop_on_undock = true);
// override LLFloater's minimization according to EXT-1216
/*virtual*/ void setMinimized(BOOL minimize);
+ /*virtual*/ void handleReshape(const LLRect& rect, bool by_user);
void onStartUpToastClick(S32 x, S32 y, MASK mask);
@@ -121,7 +122,7 @@ protected:
typedef std::map<EItemType, S32> typed_items_count_t;
typed_items_count_t mTypedItemsCount;
-
+ bool mIsReshapedByUser;
};
/**
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 662e6dcabe..3f4dab4fea 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -284,8 +284,6 @@ void LLTexLayerSetBuffer::readBackAndUpload()
llinfos << "Baked " << mTexLayerSet->getBodyRegion() << llendl;
LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_BAKES);
- llassert( gAgent.getAvatarObject() == mTexLayerSet->getAvatar() );
-
// We won't need our caches since we're baked now. (Techically, we won't
// really be baked until this image is sent to the server and the Avatar
// Appearance message is received.)
@@ -352,7 +350,7 @@ void LLTexLayerSetBuffer::readBackAndUpload()
{
// baked_upload_data is owned by the responder and deleted after the request completes
LLBakedUploadData* baked_upload_data =
- new LLBakedUploadData(gAgent.getAvatarObject(), this->mTexLayerSet, asset_id);
+ new LLBakedUploadData(gAgentAvatarp, this->mTexLayerSet, asset_id);
mUploadID = asset_id;
// upload the image
@@ -409,12 +407,10 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
{
LLBakedUploadData* baked_upload_data = (LLBakedUploadData*)userdata;
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-
if (0 == result &&
- avatar &&
- !avatar->isDead() &&
- baked_upload_data->mAvatar == avatar && // Sanity check: only the user's avatar should be uploading textures.
+ isAgentAvatarValid() &&
+ !gAgentAvatarp->isDead() &&
+ baked_upload_data->mAvatar == gAgentAvatarp && // Sanity check: only the user's avatar should be uploading textures.
baked_upload_data->mTexLayerSet->hasComposite()
)
{
@@ -439,11 +435,11 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
if (result >= 0)
{
- LLVOAvatarDefines::ETextureIndex baked_te = avatar->getBakedTE(layerset_buffer->mTexLayerSet);
+ LLVOAvatarDefines::ETextureIndex baked_te = gAgentAvatarp->getBakedTE(layerset_buffer->mTexLayerSet);
// Update baked texture info with the new UUID
U64 now = LLFrameTimer::getTotalTime(); // Record starting time
llinfos << "Baked texture upload took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl;
- avatar->setNewBakedTexture(baked_te, uuid);
+ gAgentAvatarp->setNewBakedTexture(baked_te, uuid);
}
else
{
@@ -457,7 +453,7 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
llinfos << "Received baked texture out of date, ignored." << llendl;
}
- avatar->dirtyMesh();
+ gAgentAvatarp->dirtyMesh();
}
else
{
@@ -1130,7 +1126,8 @@ LLTexLayerInterface::LLTexLayerInterface(LLTexLayerSet* const layer_set):
}
LLTexLayerInterface::LLTexLayerInterface(const LLTexLayerInterface &layer, LLWearable *wearable):
- mTexLayerSet( layer.mTexLayerSet )
+ mTexLayerSet( layer.mTexLayerSet ),
+ mInfo(NULL)
{
// don't add visual params for cloned layers
setInfo(layer.getInfo(), wearable);
@@ -1140,11 +1137,12 @@ LLTexLayerInterface::LLTexLayerInterface(const LLTexLayerInterface &layer, LLWea
BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearable ) // This sets mInfo and calls initialization functions
{
- //llassert(mInfo == NULL); // nyx says this is probably bogus but needs investigating
- if (mInfo != NULL) // above llassert(), but softened into a warning
- {
- llwarns << "BAD STUFF! mInfo != NULL" << llendl;
- }
+ // setInfo should only be called once. Code is not robust enough to handle redefinition of a texlayer.
+ // Not a critical warning, but could be useful for debugging later issues. -Nyx
+ if (mInfo != NULL)
+ {
+ llwarns << "mInfo != NULL" << llendl;
+ }
mInfo = info;
//mID = info->mID; // No ID
@@ -1881,6 +1879,11 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height)
{
+ if(!mInfo)
+ {
+ return FALSE ;
+ }
+
BOOL success = TRUE;
updateWearableCache();
for (wearable_cache_t::const_iterator iter = mWearableCache.begin(); iter!= mWearableCache.end(); iter++)
diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp
index d55468841d..5e5d344461 100644
--- a/indra/newview/lltexlayerparams.cpp
+++ b/indra/newview/lltexlayerparams.cpp
@@ -33,7 +33,7 @@
#include "lltexlayerparams.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "llimagetga.h"
#include "lltexlayer.h"
#include "llvoavatarself.h"
@@ -180,7 +180,7 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL upload_bake)
if ((mAvatar->getSex() & getSex()) && (mAvatar->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param.
{
- if (gAgent.cameraCustomizeAvatar())
+ if (gAgentCamera.cameraCustomizeAvatar())
{
upload_bake = FALSE;
}
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 91c303c79e..651070a2ea 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -550,7 +550,7 @@ bool LLTextureCacheRemoteWorker::doWrite()
S32 cur_imagesize = 0;
// Checks if this image is already in the entry list
idx = mCache->getHeaderCacheEntry(mID, cur_imagesize);
- if (idx >= 0 && (cur_imagesize >= 0))
+ if (idx >= 0 && (cur_imagesize > 0))
{
alreadyCached = true; // already there and non empty
}
@@ -750,6 +750,8 @@ LLTextureCache::LLTextureCache(bool threaded)
LLTextureCache::~LLTextureCache()
{
+ clearDeleteList() ;
+ writeUpdatedEntries() ;
}
//////////////////////////////////////////////////////////////////////////////
@@ -757,6 +759,9 @@ LLTextureCache::~LLTextureCache()
//virtual
S32 LLTextureCache::update(U32 max_time_ms)
{
+ static LLFrameTimer timer ;
+ static const F32 MAX_TIME_INTERVAL = 300.f ; //seconds.
+
S32 res;
res = LLWorkerThread::update(max_time_ms);
@@ -792,6 +797,12 @@ S32 LLTextureCache::update(U32 max_time_ms)
responder->completed(success);
}
+ if(!res && timer.getElapsedTimeF32() > MAX_TIME_INTERVAL)
+ {
+ timer.reset() ;
+ writeUpdatedEntries() ;
+ }
+
return res;
}
@@ -835,22 +846,17 @@ bool LLTextureCache::updateTextureEntryList(const LLUUID& id, S32 bodysize)
S32 idx = openAndReadEntry(id, entry, false);
if (idx < 0)
{
- llwarns << "Failed to open entry: " << id << llendl;
- removeHeaderCacheEntry(id);
- LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
+ llwarns << "Failed to open entry: " << id << llendl;
+ removeCachedTexture(id) ;
return false;
}
else if (oldbodysize != entry.mBodySize)
{
- // TODO: change to llwarns
- llerrs << "Entry mismatch in mTextureSizeMap / mHeaderIDMap"
+ // only happens to 64 bits systems, do not know why.
+ llwarns << "Entry mismatch in mTextureSizeMap / mHeaderIDMap"
<< " idx=" << idx << " oldsize=" << oldbodysize << " entrysize=" << entry.mBodySize << llendl;
}
- entry.mBodySize = bodysize;
- writeEntryAndClose(idx, entry);
-
- mTexturesSizeTotal -= oldbodysize;
- mTexturesSizeTotal += bodysize;
+ updateEntry(idx, entry, entry.mImageSize, bodysize);
if (mTexturesSizeTotal > sCacheMaxTexturesSize)
{
@@ -991,7 +997,10 @@ LLAPRFile* LLTextureCache::openHeaderEntriesFile(bool readonly, S32 offset)
llassert_always(mHeaderAPRFile == NULL);
apr_int32_t flags = readonly ? APR_READ|APR_BINARY : APR_READ|APR_WRITE|APR_BINARY;
mHeaderAPRFile = new LLAPRFile(mHeaderEntriesFileName, flags, getLocalAPRFilePool());
- mHeaderAPRFile->seek(APR_SET, offset);
+ if(offset > 0)
+ {
+ mHeaderAPRFile->seek(APR_SET, offset);
+ }
return mHeaderAPRFile;
}
@@ -1011,6 +1020,12 @@ void LLTextureCache::readEntriesHeader()
LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
getLocalAPRFilePool());
}
+ else //create an empty entries header.
+ {
+ mHeaderEntriesInfo.mVersion = sHeaderCacheVersion ;
+ mHeaderEntriesInfo.mEntries = 0 ;
+ writeEntriesHeader() ;
+ }
}
void LLTextureCache::writeEntriesHeader()
@@ -1023,8 +1038,7 @@ void LLTextureCache::writeEntriesHeader()
}
}
-static S32 mHeaderEntriesMaxWriteIdx = 0;
-
+//mHeaderMutex is locked before calling this.
S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create)
{
S32 idx = -1;
@@ -1064,8 +1078,7 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create
if (iter3 != mHeaderIDMap.end() && iter3->second >= 0)
{
idx = iter3->second;
- mHeaderIDMap.erase(oldid);
- mTexturesSizeMap.erase(oldid);
+ removeCachedTexture(oldid) ;//remove the existing cached texture to release the entry index.
break;
}
}
@@ -1075,20 +1088,9 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create
}
if (idx >= 0)
{
- // Set the header index
- mHeaderIDMap[id] = idx;
- llassert_always(mTexturesSizeMap.erase(id) == 0);
- // Initialize the entry (will get written later)
- entry.init(id, time(NULL));
- // Update Header
- writeEntriesHeader();
- // Write Entry
- S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
- LLAPRFile* aprfile = openHeaderEntriesFile(false, offset);
- S32 bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry));
- llassert_always(bytes_written == sizeof(Entry));
- mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx);
- closeHeaderEntriesFile();
+ entry.mID = id ;
+ entry.mImageSize = -1 ; //mark it is a brand-new entry.
+ entry.mBodySize = 0 ;
}
}
}
@@ -1097,35 +1099,124 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create
// Remove this entry from the LRU if it exists
mLRU.erase(id);
// Read the entry
- S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
- LLAPRFile* aprfile = openHeaderEntriesFile(true, offset);
- S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry));
- llassert_always(bytes_read == sizeof(Entry));
- llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize);
- closeHeaderEntriesFile();
+ idx_entry_map_t::iterator iter = mUpdatedEntryMap.find(idx) ;
+ if(iter != mUpdatedEntryMap.end())
+ {
+ entry = iter->second ;
+ }
+ else
+ {
+ readEntryFromHeaderImmediately(idx, entry) ;
+ }
+ if(entry.mImageSize <= entry.mBodySize)//it happens on 64-bit systems, do not know why
+ {
+ llwarns << "corrupted entry: " << id << " entry image size: " << entry.mImageSize << " entry body size: " << entry.mBodySize << llendl ;
+
+ //erase this entry and the cached texture from the cache.
+ std::string tex_filename = getTextureFileName(id);
+ removeEntry(idx, entry, tex_filename) ;
+ mUpdatedEntryMap.erase(idx) ;
+ idx = -1 ;
+ }
}
return idx;
}
-void LLTextureCache::writeEntryAndClose(S32 idx, Entry& entry)
+//mHeaderMutex is locked before calling this.
+void LLTextureCache::writeEntryToHeaderImmediately(S32 idx, Entry& entry, bool write_header)
+{
+ LLAPRFile* aprfile ;
+ S32 bytes_written ;
+ S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+ if(write_header)
+ {
+ aprfile = openHeaderEntriesFile(false, 0);
+ bytes_written = aprfile->write((U8*)&mHeaderEntriesInfo, sizeof(EntriesInfo)) ;
+ llassert_always(bytes_written == sizeof(EntriesInfo));
+ mHeaderAPRFile->seek(APR_SET, offset);
+ }
+ else
+ {
+ aprfile = openHeaderEntriesFile(false, offset);
+ }
+ bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry));
+ llassert_always(bytes_written == sizeof(Entry));
+ closeHeaderEntriesFile();
+ mUpdatedEntryMap.erase(idx) ;
+}
+
+//mHeaderMutex is locked before calling this.
+void LLTextureCache::readEntryFromHeaderImmediately(S32 idx, Entry& entry)
{
+ S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+ LLAPRFile* aprfile = openHeaderEntriesFile(true, offset);
+ S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry));
+ llassert_always(bytes_read == sizeof(Entry));
+ closeHeaderEntriesFile();
+}
+
+//mHeaderMutex is locked before calling this.
+//update an existing entry time stamp, delay writing.
+void LLTextureCache::updateEntryTimeStamp(S32 idx, Entry& entry)
+{
+ static const U32 MAX_ENTRIES_WITHOUT_TIME_STAMP = (U32)(LLTextureCache::sCacheMaxEntries * 0.75f) ;
+
+ if(mHeaderEntriesInfo.mEntries < MAX_ENTRIES_WITHOUT_TIME_STAMP)
+ {
+ return ; //there are enough empty entry index space, no need to stamp time.
+ }
+
if (idx >= 0)
{
if (!mReadOnly)
{
- entry.mTime = time(NULL);
- llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize);
- if (entry.mBodySize > 0)
+ llassert_always(entry.mImageSize > entry.mBodySize);
+
+ entry.mTime = time(NULL);
+ mUpdatedEntryMap[idx] = entry ;
+ }
+ }
+}
+
+//mHeaderMutex is locked before calling this.
+//update an existing entry, write to header file immediately.
+void LLTextureCache::updateEntry(S32 idx, Entry& entry, S32 new_image_size, S32 new_body_size)
+{
+ llassert_always(new_image_size > -1) ;
+
+ if(new_image_size == entry.mImageSize && new_body_size == entry.mBodySize)
+ {
+ updateEntryTimeStamp(idx, entry) ; //nothing changed.
+ }
+ else if (idx >= 0)
+ {
+ if (!mReadOnly)
+ {
+ llassert_always(new_image_size > new_body_size) ;
+
+ bool update_header = false ;
+ if(entry.mImageSize < 0) //is a brand-new entry
+ {
+ mHeaderIDMap[entry.mID] = idx;
+ mTexturesSizeMap[entry.mID] = new_body_size ;
+ mTexturesSizeTotal += new_body_size ;
+
+ // Update Header
+ update_header = true ;
+ }
+ else if (entry.mBodySize != new_body_size)
{
- mTexturesSizeMap[entry.mID] = entry.mBodySize;
+ //already in mHeaderIDMap.
+ mTexturesSizeMap[entry.mID] = new_body_size ;
+ mTexturesSizeTotal -= entry.mBodySize ;
+ mTexturesSizeTotal += new_body_size ;
}
-// llinfos << "Updating TE: " << idx << ": " << id << " Size: " << entry.mBodySize << " Time: " << entry.mTime << llendl;
- S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
- LLAPRFile* aprfile = openHeaderEntriesFile(false, offset);
- S32 bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry));
- llassert_always(bytes_written == sizeof(Entry));
- mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx);
- closeHeaderEntriesFile();
+ entry.mTime = time(NULL);
+ entry.mImageSize = new_image_size ;
+ entry.mBodySize = new_body_size ;
+
+// llinfos << "Updating TE: " << idx << ": " << id << " Size: " << entry.mBodySize << " Time: " << entry.mTime << llendl;
+ writeEntryToHeaderImmediately(idx, entry, update_header) ;
}
}
}
@@ -1139,7 +1230,17 @@ U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries)
mFreeList.clear();
mTexturesSizeTotal = 0;
- LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo));
+ LLAPRFile* aprfile = NULL;
+ if(mUpdatedEntryMap.empty())
+ {
+ aprfile = openHeaderEntriesFile(true, (S32)sizeof(EntriesInfo));
+ }
+ else //update the header file first.
+ {
+ aprfile = openHeaderEntriesFile(false, 0);
+ updatedHeaderEntriesFile() ;
+ aprfile->seek(APR_SET, (S32)sizeof(EntriesInfo));
+ }
for (U32 idx=0; idx<num_entries; idx++)
{
Entry entry;
@@ -1153,19 +1254,15 @@ U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries)
}
entries.push_back(entry);
// llinfos << "ENTRY: " << entry.mTime << " TEX: " << entry.mID << " IDX: " << idx << " Size: " << entry.mImageSize << llendl;
- if (entry.mImageSize < 0)
+ if(entry.mImageSize > entry.mBodySize)
{
- mFreeList.insert(idx);
+ mHeaderIDMap[entry.mID] = idx;
+ mTexturesSizeMap[entry.mID] = entry.mBodySize;
+ mTexturesSizeTotal += entry.mBodySize;
}
else
{
- mHeaderIDMap[entry.mID] = idx;
- if (entry.mBodySize > 0)
- {
- mTexturesSizeMap[entry.mID] = entry.mBodySize;
- mTexturesSizeTotal += entry.mBodySize;
- }
- llassert_always(entry.mImageSize == 0 || entry.mImageSize > entry.mBodySize);
+ mFreeList.insert(idx);
}
}
closeHeaderEntriesFile();
@@ -1185,11 +1282,51 @@ void LLTextureCache::writeEntriesAndClose(const std::vector<Entry>& entries)
S32 bytes_written = aprfile->write((void*)(&entries[idx]), (S32)sizeof(Entry));
llassert_always(bytes_written == sizeof(Entry));
}
- mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, num_entries-1);
closeHeaderEntriesFile();
}
}
+void LLTextureCache::writeUpdatedEntries()
+{
+ lockHeaders() ;
+ if (!mReadOnly && !mUpdatedEntryMap.empty())
+ {
+ openHeaderEntriesFile(false, 0);
+ updatedHeaderEntriesFile() ;
+ closeHeaderEntriesFile();
+ }
+ unlockHeaders() ;
+}
+
+//mHeaderMutex is locked and mHeaderAPRFile is created before calling this.
+void LLTextureCache::updatedHeaderEntriesFile()
+{
+ if (!mReadOnly && !mUpdatedEntryMap.empty() && mHeaderAPRFile)
+ {
+ //entriesInfo
+ mHeaderAPRFile->seek(APR_SET, 0);
+ S32 bytes_written = mHeaderAPRFile->write((U8*)&mHeaderEntriesInfo, sizeof(EntriesInfo)) ;
+ llassert_always(bytes_written == sizeof(EntriesInfo));
+
+ //write each updated entry
+ S32 entry_size = (S32)sizeof(Entry) ;
+ S32 prev_idx = -1 ;
+ S32 delta_idx ;
+ for (idx_entry_map_t::iterator iter = mUpdatedEntryMap.begin(); iter != mUpdatedEntryMap.end(); ++iter)
+ {
+ delta_idx = iter->first - prev_idx - 1;
+ prev_idx = iter->first ;
+ if(delta_idx)
+ {
+ mHeaderAPRFile->seek(APR_CUR, delta_idx * entry_size);
+ }
+
+ bytes_written = mHeaderAPRFile->write((void*)(&iter->second), entry_size);
+ llassert_always(bytes_written == entry_size);
+ }
+ mUpdatedEntryMap.clear() ;
+ }
+}
//----------------------------------------------------------------------------
// Called from either the main thread or the worker thread
@@ -1217,12 +1354,11 @@ void LLTextureCache::readHeaderCache()
U32 empty_entries = 0;
typedef std::pair<U32, S32> lru_data_t;
std::set<lru_data_t> lru;
- std::set<LLUUID> purge_list;
+ std::set<U32> purge_list;
for (U32 i=0; i<num_entries; i++)
{
Entry& entry = entries[i];
- const LLUUID& id = entry.mID;
- if (entry.mImageSize < 0)
+ if (entry.mImageSize <= 0)
{
// This will be in the Free List, don't put it in the LRU
++empty_entries;
@@ -1235,9 +1371,8 @@ void LLTextureCache::readHeaderCache()
if (entry.mBodySize > entry.mImageSize)
{
// Shouldn't happen, failsafe only
- llwarns << "Bad entry: " << i << ": " << id << ": BodySize: " << entry.mBodySize << llendl;
- purge_list.insert(entry.mID);
- entry.mImageSize = -1; // empty/available
+ llwarns << "Bad entry: " << i << ": " << entry.mID << ": BodySize: " << entry.mBodySize << llendl;
+ purge_list.insert(i);
}
}
}
@@ -1252,14 +1387,9 @@ void LLTextureCache::readHeaderCache()
{
for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
{
- S32 idx = iter->second;
- if (entries[idx].mImageSize >= 0)
- {
- purge_list.insert(entries[idx].mID);
- entries[idx].mImageSize = -1;
- if (purge_list.size() >= entries_to_purge)
- break;
- }
+ purge_list.insert(iter->second);
+ if (purge_list.size() >= entries_to_purge)
+ break;
}
}
llassert_always(purge_list.size() >= entries_to_purge);
@@ -1269,9 +1399,7 @@ void LLTextureCache::readHeaderCache()
S32 lru_entries = (S32)((F32)sCacheMaxEntries * TEXTURE_CACHE_LRU_SIZE);
for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
{
- S32 idx = iter->second;
- const LLUUID& id = entries[idx].mID;
- mLRU.insert(id);
+ mLRU.insert(entries[iter->second].mID);
// llinfos << "LRU: " << iter->first << " : " << iter->second << llendl;
if (--lru_entries <= 0)
break;
@@ -1280,12 +1408,10 @@ void LLTextureCache::readHeaderCache()
if (purge_list.size() > 0)
{
- for (std::set<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter)
+ for (std::set<U32>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter)
{
- const LLUUID& id = *iter;
- bool res = removeHeaderCacheEntry(id); // sets entry size on disk to -1
- llassert_always(res);
- LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
+ std::string tex_filename = getTextureFileName(entries[*iter].mID);
+ removeEntry((S32)*iter, entries[*iter], tex_filename);
}
// If we removed any entries, we need to rebuild the entries list,
// write the header, and call this again
@@ -1293,13 +1419,14 @@ void LLTextureCache::readHeaderCache()
for (U32 i=0; i<num_entries; i++)
{
const Entry& entry = entries[i];
- if (entry.mImageSize >=0)
+ if (entry.mImageSize > 0)
{
new_entries.push_back(entry);
}
}
llassert_always(new_entries.size() <= sCacheMaxEntries);
mHeaderEntriesInfo.mEntries = new_entries.size();
+ writeEntriesHeader();
writeEntriesAndClose(new_entries);
mHeaderMutex.unlock(); // unlock the mutex before calling again
readHeaderCache(); // repeat with new entries file
@@ -1307,7 +1434,7 @@ void LLTextureCache::readHeaderCache()
}
else
{
- writeEntriesAndClose(entries);
+ //entries are not changed, nothing here.
}
}
}
@@ -1335,6 +1462,7 @@ void LLTextureCache::purgeAllTextures(bool purge_directories)
}
if (purge_directories)
{
+ gDirUtilp->deleteFilesInDir(mTexturesDirName,mask);
LLFile::rmdir(mTexturesDirName);
}
}
@@ -1372,7 +1500,6 @@ void LLTextureCache::purgeTextures(bool validate)
U32 num_entries = openAndReadEntries(entries);
if (!num_entries)
{
- writeEntriesAndClose(entries);
return; // nothing to purge
}
@@ -1391,6 +1518,10 @@ void LLTextureCache::purgeTextures(bool validate)
time_idx_set.insert(std::make_pair(entries[idx].mTime, idx));
// llinfos << "TIME: " << entries[idx].mTime << " TEX: " << entries[idx].mID << " IDX: " << idx << " Size: " << entries[idx].mImageSize << llendl;
}
+ else
+ {
+ llerrs << "mTexturesSizeMap / mHeaderIDMap corrupted." << llendl ;
+ }
}
}
@@ -1442,11 +1573,8 @@ void LLTextureCache::purgeTextures(bool validate)
{
purge_count++;
LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL;
- LLAPRFile::remove(filename, getLocalAPRFilePool());
+ removeEntry(idx, entries[idx], filename) ;
cache_size -= entries[idx].mBodySize;
- mTexturesSizeTotal -= entries[idx].mBodySize;
- entries[idx].mBodySize = 0;
- mTexturesSizeMap.erase(entries[idx].mID);
}
}
@@ -1501,7 +1629,7 @@ S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, S32& imagesize)
if (idx >= 0)
{
imagesize = entry.mImageSize;
- writeEntryAndClose(idx, entry); // updates time
+ updateEntryTimeStamp(idx, entry); // updates time
}
return idx;
}
@@ -1515,8 +1643,7 @@ S32 LLTextureCache::setHeaderCacheEntry(const LLUUID& id, S32 imagesize)
S32 idx = openAndReadEntry(id, entry, true);
if (idx >= 0)
{
- entry.mImageSize = imagesize;
- writeEntryAndClose(idx, entry);
+ updateEntry(idx, entry, imagesize, entry.mBodySize);
mHeaderMutex.unlock();
}
else // retry
@@ -1574,6 +1701,11 @@ bool LLTextureCache::readComplete(handle_t handle, bool abort)
{
worker = iter->second;
complete = worker->complete();
+
+ if(!complete && abort)
+ {
+ abortRequest(handle, true) ;
+ }
}
if (worker && (complete || abort))
{
@@ -1650,34 +1782,56 @@ void LLTextureCache::addCompleted(Responder* responder, bool success)
//////////////////////////////////////////////////////////////////////////////
-// Called from MAIN thread (endWork())
-// Ensure that mHeaderMutex is locked first!
-bool LLTextureCache::removeHeaderCacheEntry(const LLUUID& id)
+//called after mHeaderMutex is locked.
+void LLTextureCache::removeCachedTexture(const LLUUID& id)
{
- Entry entry;
- S32 idx = openAndReadEntry(id, entry, false);
- if (idx >= 0)
+ if(mTexturesSizeMap.find(id) != mTexturesSizeMap.end())
+ {
+ mTexturesSizeTotal -= mTexturesSizeMap[id] ;
+ mTexturesSizeMap.erase(id);
+ }
+ mHeaderIDMap.erase(id);
+ LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
+}
+
+//called after mHeaderMutex is locked.
+void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename)
+{
+ if(idx >= 0) //valid entry
{
entry.mImageSize = -1;
entry.mBodySize = 0;
- writeEntryAndClose(idx, entry);
- mFreeList.insert(idx);
- mHeaderIDMap.erase(id);
- mTexturesSizeMap.erase(id);
- return true;
+ mHeaderIDMap.erase(entry.mID);
+ mTexturesSizeMap.erase(entry.mID);
+
+ mTexturesSizeTotal -= entry.mBodySize;
+ mFreeList.insert(idx);
}
- return false;
+
+ LLAPRFile::remove(filename, getLocalAPRFilePool());
}
-void LLTextureCache::removeFromCache(const LLUUID& id)
+bool LLTextureCache::removeFromCache(const LLUUID& id)
{
//llwarns << "Removing texture from cache: " << id << llendl;
+ bool ret = false ;
if (!mReadOnly)
{
- LLMutexLock lock(&mHeaderMutex);
- removeHeaderCacheEntry(id);
- LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
+ lockHeaders() ;
+
+ Entry entry;
+ S32 idx = openAndReadEntry(id, entry, false);
+ std::string tex_filename = getTextureFileName(id);
+ removeEntry(idx, entry, tex_filename) ;
+ if (idx >= 0)
+ {
+ writeEntryToHeaderImmediately(idx, entry);
+ ret = true;
+ }
+
+ unlockHeaders() ;
}
+ return ret ;
}
//////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index 64ec881fc3..ca8815ee7e 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -68,6 +68,7 @@ private:
Entry(const LLUUID& id, S32 imagesize, S32 bodysize, U32 time) :
mID(id), mImageSize(imagesize), mBodySize(bodysize), mTime(time) {}
void init(const LLUUID& id, U32 time) { mID = id, mImageSize = 0; mBodySize = 0; mTime = time; }
+ Entry& operator=(const Entry& entry) {mID = entry.mID, mImageSize = entry.mImageSize; mBodySize = entry.mBodySize; mTime = entry.mTime; return *this;}
LLUUID mID; // 16 bytes
S32 mImageSize; // total size of image if known
S32 mBodySize; // size of body file in body cache
@@ -122,7 +123,7 @@ public:
bool writeComplete(handle_t handle, bool abort = false);
void prioritizeWrite(handle_t handle);
- void removeFromCache(const LLUUID& id);
+ bool removeFromCache(const LLUUID& id);
// For LLTextureCacheWorker::Responder
LLTextureCacheWorker* getReader(handle_t handle);
@@ -160,12 +161,18 @@ private:
void readEntriesHeader();
void writeEntriesHeader();
S32 openAndReadEntry(const LLUUID& id, Entry& entry, bool create);
- void writeEntryAndClose(S32 idx, Entry& entry);
+ void updateEntry(S32 idx, Entry& entry, S32 new_image_size, S32 new_body_size);
+ void updateEntryTimeStamp(S32 idx, Entry& entry) ;
U32 openAndReadEntries(std::vector<Entry>& entries);
void writeEntriesAndClose(const std::vector<Entry>& entries);
+ void readEntryFromHeaderImmediately(S32 idx, Entry& entry) ;
+ void writeEntryToHeaderImmediately(S32 idx, Entry& entry, bool write_header = false) ;
+ void removeEntry(S32 idx, Entry& entry, std::string& filename);
+ void removeCachedTexture(const LLUUID& id) ;
S32 getHeaderCacheEntry(const LLUUID& id, S32& imagesize);
S32 setHeaderCacheEntry(const LLUUID& id, S32 imagesize);
- bool removeHeaderCacheEntry(const LLUUID& id);
+ void writeUpdatedEntries() ;
+ void updatedHeaderEntriesFile() ;
void lockHeaders() { mHeaderMutex.lock(); }
void unlockHeaders() { mHeaderMutex.unlock(); }
@@ -204,6 +211,9 @@ private:
S64 mTexturesSizeTotal;
LLAtomic32<BOOL> mDoPurge;
+ typedef std::map<S32, Entry> idx_entry_map_t;
+ idx_entry_map_t mUpdatedEntryMap;
+
// Statics
static F32 sHeaderCacheVersion;
static U32 sCacheMaxEntries;
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 2b846d33fc..a1b3c8dabd 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -48,6 +48,7 @@
#include "llfoldervieweventlistener.h"
#include "llinventory.h"
#include "llinventoryfunctions.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llinventoryobserver.h"
#include "llinventorypanel.h"
#include "llfloaterinventory.h"
@@ -1053,7 +1054,7 @@ public:
{
// We need to find textures in all folders, so get the main
// background download going.
- gInventory.startBackgroundFetch();
+ LLInventoryModelBackgroundFetch::instance().start();
gInventory.removeObserver(this);
delete this;
}
@@ -1074,9 +1075,9 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
{
showPicker(FALSE);
//grab textures first...
- gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE));
+ LLInventoryModelBackgroundFetch::instance().start(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE));
//...then start full inventory fetch.
- gInventory.startBackgroundFetch();
+ LLInventoryModelBackgroundFetch::instance().start();
handled = TRUE;
}
diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h
index 8ca92c3d87..837f837430 100644
--- a/indra/newview/lltexturectrl.h
+++ b/indra/newview/lltexturectrl.h
@@ -183,6 +183,8 @@ public:
void setShowLoadingPlaceholder(BOOL showLoadingPlaceholder);
+ LLViewerFetchedTexture* getTexture() { return mTexturep; }
+
private:
BOOL allowDrop(LLInventoryItem* item);
BOOL doDrop(LLInventoryItem* item);
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 6c35464a51..2ea6e5936d 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -292,7 +292,10 @@ public:
const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
{
- if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+ static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog");
+ static LLCachedControl<bool> log_to_sim(gSavedSettings,"LogTextureDownloadsToSimulator");
+
+ if (log_to_viewer_log || log_to_sim)
{
mFetcher->mTextureInfo.setRequestStartTime(mID, mStartTime);
U64 timeNow = LLTimer::getTotalTime();
@@ -431,11 +434,11 @@ LLTextureFetchWorker::~LLTextureFetchWorker()
// << " Desired=" << mDesiredDiscard << llendl;
llassert_always(!haveWork());
lockWorkMutex();
- if (mCacheReadHandle != LLTextureCache::nullHandle())
+ if (mCacheReadHandle != LLTextureCache::nullHandle() && mFetcher->mTextureCache)
{
mFetcher->mTextureCache->readComplete(mCacheReadHandle, true);
}
- if (mCacheWriteHandle != LLTextureCache::nullHandle())
+ if (mCacheWriteHandle != LLTextureCache::nullHandle() && mFetcher->mTextureCache)
{
mFetcher->mTextureCache->writeComplete(mCacheWriteHandle, true);
}
@@ -491,7 +494,7 @@ U32 LLTextureFetchWorker::calcWorkPriority()
//llassert_always(mImagePriority >= 0 && mImagePriority <= LLViewerFetchedTexture::maxDecodePriority());
static const F32 PRIORITY_SCALE = (F32)LLWorkerThread::PRIORITY_LOWBITS / LLViewerFetchedTexture::maxDecodePriority();
- mWorkPriority = (U32)(mImagePriority * PRIORITY_SCALE);
+ mWorkPriority = llmin((U32)LLWorkerThread::PRIORITY_LOWBITS, (U32)(mImagePriority * PRIORITY_SCALE));
return mWorkPriority;
}
@@ -571,7 +574,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
if ((mFetcher->isQuitting() || mImagePriority < 1.0f || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED)))
{
- if (mState < WRITE_TO_CACHE)
+ if (mState < DECODE_IMAGE)
{
return true; // abort
}
@@ -715,10 +718,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
if (mState == LOAD_FROM_NETWORK)
{
- bool get_url = gSavedSettings.getBOOL("ImagePipelineUseHTTP");
- if (!mUrl.empty()) get_url = false;
+ static LLCachedControl<bool> use_http(gSavedSettings,"ImagePipelineUseHTTP");
+
// if (mHost != LLHost::invalid) get_url = false;
- if ( get_url )
+ if ( use_http && mUrl.empty())//get http url.
{
LLViewerRegion* region = NULL;
if (mHost == LLHost::invalid)
@@ -1429,6 +1432,8 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
LLTextureFetch::~LLTextureFetch()
{
+ clearDeleteList() ;
+
// ~LLQueuedThread() called here
}
@@ -1715,7 +1720,8 @@ S32 LLTextureFetch::update(U32 max_time_ms)
{
S32 res;
- mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
+ static LLCachedControl<F32> band_width(gSavedSettings,"ThrottleBandwidthKBPS");
+ mMaxBandwidth = band_width ;
res = LLWorkerThread::update(max_time_ms);
@@ -1737,6 +1743,26 @@ S32 LLTextureFetch::update(U32 max_time_ms)
return res;
}
+//called in the MAIN thread after the TextureCacheThread shuts down.
+void LLTextureFetch::shutDownTextureCacheThread()
+{
+ if(mTextureCache)
+ {
+ llassert_always(mTextureCache->isQuitting() || mTextureCache->isStopped()) ;
+ mTextureCache = NULL ;
+ }
+}
+
+//called in the MAIN thread after the ImageDecodeThread shuts down.
+void LLTextureFetch::shutDownImageDecodeThread()
+{
+ if(mImageDecodeThread)
+ {
+ llassert_always(mImageDecodeThread->isQuitting() || mImageDecodeThread->isStopped()) ;
+ mImageDecodeThread = NULL ;
+ }
+}
+
// WORKER THREAD
void LLTextureFetch::startThread()
{
@@ -1901,7 +1927,9 @@ void LLTextureFetch::sendRequestListToSimulators()
// llinfos << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard
// << " Packet: " << packet << " Priority: " << req->mImagePriority << llendl;
- if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+ static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog");
+ static LLCachedControl<bool> log_to_sim(gSavedSettings,"LogTextureDownloadsToSimulator");
+ if (log_to_viewer_log || log_to_sim)
{
mTextureInfo.setRequestStartTime(req->mID, LLTimer::getTotalTime());
mTextureInfo.setRequestOffset(req->mID, 0);
@@ -2122,7 +2150,10 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
if(packet_num >= (worker->mTotalPackets - 1))
{
- if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+ static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog");
+ static LLCachedControl<bool> log_to_sim(gSavedSettings,"LogTextureDownloadsToSimulator");
+
+ if (log_to_viewer_log || log_to_sim)
{
U64 timeNow = LLTimer::getTotalTime();
mTextureInfo.setRequestSize(id, worker->mFileSize);
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index 5213c4f488..ef2ec520bf 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -58,6 +58,8 @@ public:
~LLTextureFetch();
/*virtual*/ S32 update(U32 max_time_ms);
+ void shutDownTextureCacheThread() ; //called in the main thread after the TextureCacheThread shuts down.
+ void shutDownImageDecodeThread() ; //called in the main thread after the ImageDecodeThread shuts down.
bool createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
S32 w, S32 h, S32 c, S32 discard, bool needs_aux);
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index 98731f90f4..43913f3632 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -658,6 +658,15 @@ struct compare_decode_pair
}
};
+struct KillView
+{
+ void operator()(LLView* viewp)
+ {
+ viewp->getParent()->removeChild(viewp);
+ viewp->die();
+ }
+};
+
void LLTextureView::draw()
{
if (!mFreezeView)
@@ -665,12 +674,16 @@ void LLTextureView::draw()
// LLViewerObject *objectp;
// S32 te;
- for_each(mTextureBars.begin(), mTextureBars.end(), DeletePointer());
+ for_each(mTextureBars.begin(), mTextureBars.end(), KillView());
mTextureBars.clear();
-
- delete mGLTexMemBar;
- mGLTexMemBar = 0;
-
+
+ if (mGLTexMemBar)
+ {
+ removeChild(mGLTexMemBar);
+ mGLTexMemBar->die();
+ mGLTexMemBar = 0;
+ }
+
typedef std::multiset<decode_pair_t, compare_decode_pair > display_list_t;
display_list_t display_image_list;
@@ -683,6 +696,10 @@ void LLTextureView::draw()
iter != gTextureList.mImageList.end(); )
{
LLPointer<LLViewerFetchedTexture> imagep = *iter++;
+ if(!imagep->hasFetcher())
+ {
+ continue ;
+ }
S32 cur_discard = imagep->getDiscardLevel();
S32 desired_discard = imagep->mDesiredDiscardLevel;
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 60a89c02e4..60657d3fa7 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -41,6 +41,16 @@
using namespace LLNotificationsUI;
+/*virtual*/
+BOOL LLToastLifeTimer::tick()
+{
+ if (mEventTimer.hasExpired())
+ {
+ mToast->expire();
+ }
+ return FALSE;
+}
+
//--------------------------------------------------------------------------
LLToast::Params::Params()
: can_fade("can_fade", true),
@@ -57,7 +67,6 @@ LLToast::Params::Params()
LLToast::LLToast(const LLToast::Params& p)
: LLModalDialog(LLSD(), p.is_modal),
mPanel(p.panel),
- mToastLifetime(p.lifetime_secs),
mToastFadingTime(p.fading_time_secs),
mNotificationID(p.notif_id),
mSessionID(p.session_id),
@@ -71,6 +80,8 @@ LLToast::LLToast(const LLToast::Params& p)
mIsTip(p.is_tip),
mWrapperPanel(NULL)
{
+ mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs));
+
LLUICtrlFactory::getInstance()->buildFloater(this, "panel_toast.xml", NULL);
setCanDrag(FALSE);
@@ -105,7 +116,7 @@ BOOL LLToast::postBuild()
{
if(!mCanFade)
{
- mTimer.stop();
+ mTimer->stop();
}
if (mIsTip)
@@ -145,38 +156,10 @@ LLToast::~LLToast()
}
//--------------------------------------------------------------------------
-void LLToast::setAndStartTimer(F32 period)
-{
- if(mCanFade)
- {
- mToastLifetime = period;
- mTimer.start();
- }
-}
-
-//--------------------------------------------------------------------------
-bool LLToast::lifetimeHasExpired()
-{
- if (mTimer.getStarted())
- {
- F32 elapsed_time = mTimer.getElapsedTimeF32();
- if ((mToastLifetime - elapsed_time) <= mToastFadingTime)
- {
- setBackgroundOpaque(FALSE);
- }
- if (elapsed_time > mToastLifetime)
- {
- return true;
- }
- }
- return false;
-}
-
-//--------------------------------------------------------------------------
void LLToast::hide()
{
setVisible(FALSE);
- mTimer.stop();
+ mTimer->stop();
mIsHidden = true;
mOnFadeSignal(this);
}
@@ -222,12 +205,13 @@ void LLToast::setCanFade(bool can_fade)
{
mCanFade = can_fade;
if(!mCanFade)
- mTimer.stop();
+ mTimer->stop();
}
//--------------------------------------------------------------------------
-void LLToast::tick()
+void LLToast::expire()
{
+ // if toast has fade property - hide it
if(mCanFade)
{
hide();
@@ -263,11 +247,6 @@ void LLToast::insertPanel(LLPanel* panel)
//--------------------------------------------------------------------------
void LLToast::draw()
{
- if(lifetimeHasExpired())
- {
- tick();
- }
-
LLFloater::draw();
if(!isBackgroundVisible())
@@ -300,9 +279,9 @@ void LLToast::setVisible(BOOL show)
if(show)
{
setBackgroundOpaque(TRUE);
- if(!mTimer.getStarted() && mCanFade)
+ if(!mTimer->getStarted() && mCanFade)
{
- mTimer.start();
+ mTimer->start();
}
LLModalDialog::setFrontmost(FALSE);
}
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index 64855020a9..20198a9398 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -36,7 +36,7 @@
#include "llpanel.h"
#include "llmodaldialog.h"
-#include "lltimer.h"
+#include "lleventtimer.h"
#include "llnotificationptr.h"
#include "llviewercontrol.h"
@@ -48,12 +48,32 @@
namespace LLNotificationsUI
{
+class LLToast;
+/**
+ * Timer for toasts.
+ */
+class LLToastLifeTimer: public LLEventTimer
+{
+public:
+ LLToastLifeTimer(LLToast* toast, F32 period) : mToast(toast), LLEventTimer(period){}
+
+ /*virtual*/
+ BOOL tick();
+ void stop() { mEventTimer.stop(); }
+ void start() { mEventTimer.start(); }
+ void restart() {mEventTimer.reset(); }
+ BOOL getStarted() { return mEventTimer.getStarted(); }
+private :
+ LLToast* mToast;
+};
+
/**
* Represents toast pop-up.
* This is a parent view for all toast panels.
*/
class LLToast : public LLModalDialog
{
+ friend class LLToastLifeTimer;
public:
typedef boost::function<void (LLToast* toast)> toast_callback_t;
typedef boost::signals2::signal<void (LLToast* toast)> toast_signal_t;
@@ -107,12 +127,10 @@ public:
LLPanel* getPanel() { return mPanel; }
// enable/disable Toast's Hide button
void setHideButtonEnabled(bool enabled);
- // initialize and start Toast's timer
- void setAndStartTimer(F32 period);
//
- void resetTimer() { mTimer.start(); }
+ void resetTimer() { mTimer->start(); }
//
- void stopTimer() { mTimer.stop(); }
+ void stopTimer() { mTimer->stop(); }
//
virtual void draw();
//
@@ -176,10 +194,7 @@ private:
void handleTipToastClick(S32 x, S32 y, MASK mask);
- // check timer
- bool lifetimeHasExpired();
- // on timer finished function
- void tick();
+ void expire();
LLUUID mNotificationID;
LLUUID mSessionID;
@@ -188,8 +203,8 @@ private:
LLPanel* mWrapperPanel;
// timer counts a lifetime of a toast
- LLTimer mTimer;
- F32 mToastLifetime; // in seconds
+ std::auto_ptr<LLToastLifeTimer> mTimer;
+
F32 mToastFadingTime; // in seconds
LLPanel* mPanel;
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index c3ccb9380b..986ccdf19b 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -281,9 +281,6 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
mLineEditor->setText(edit_text_contents);
mLineEditor->setMaxTextLength(STD_STRING_STR_LEN - 1);
- // make sure all edit keys get handled properly (DEV-22396)
- mLineEditor->setHandleEditKeysDirectly(TRUE);
-
LLToastPanel::addChild(mLineEditor);
mLineEditor->setDrawAsterixes(is_password);
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index c47c017143..c9d2d404c0 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -44,6 +44,8 @@
#include "llrect.h"
#include "lltrans.h"
#include "llnotificationsutil.h"
+#include "llviewermessage.h"
+#include "llimfloater.h"
const S32 BOTTOM_PAD = VPAD * 3;
const S32 IGNORE_BTN_TOP_DELTA = 3*VPAD;//additional ignore_btn padding
@@ -53,16 +55,23 @@ S32 BUTTON_WIDTH = 90;
const LLFontGL* LLToastNotifyPanel::sFont = NULL;
const LLFontGL* LLToastNotifyPanel::sFontSmall = NULL;
-LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification) :
+LLToastNotifyPanel::button_click_signal_t LLToastNotifyPanel::sButtonClickSignal;
+
+LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification, const LLRect& rect) :
LLToastPanel(notification),
mTextBox(NULL),
mInfoPanel(NULL),
mControlPanel(NULL),
mNumOptions(0),
mNumButtons(0),
-mAddedDefaultBtn(false)
+mAddedDefaultBtn(false),
+mCloseNotificationOnDestroy(true)
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml");
+ if(rect != LLRect::null)
+ {
+ this->setShape(rect);
+ }
mInfoPanel = getChild<LLPanel>("info_panel");
mControlPanel = getChild<LLPanel>("control_panel");
BUTTON_WIDTH = gSavedSettings.getS32("ToastButtonWidth");
@@ -159,7 +168,12 @@ mAddedDefaultBtn(false)
* for a scriptdialog toast h_pad can be < 2*HPAD if we have a lot of buttons.
* In last case set default h_pad to avoid heaping of buttons
*/
- h_pad = 2*HPAD;
+ S32 button_per_row = button_panel_width / BUTTON_WIDTH;
+ h_pad = (button_panel_width % BUTTON_WIDTH) / (button_per_row - 1);// -1 because we do not need space after last button in a row
+ if(h_pad < 2*HPAD) // still not enough space between buttons ?
+ {
+ h_pad = 2*HPAD;
+ }
}
if (mIsScriptDialog)
{
@@ -184,11 +198,25 @@ mAddedDefaultBtn(false)
// we need to keep min width and max height to make visible all buttons, because width of the toast can not be changed
adjustPanelForScriptNotice(button_panel_width, button_panel_height);
updateButtonsLayout(buttons, h_pad);
+ // save buttons for later use in disableButtons()
+ mButtons.assign(buttons.begin(), buttons.end());
}
}
// adjust panel's height to the text size
mInfoPanel->setFollowsAll();
snapToMessageHeight(mTextBox, MAX_LENGTH);
+
+ if(notification->isReusable())
+ {
+ mButtonClickConnection = sButtonClickSignal.connect(
+ boost::bind(&LLToastNotifyPanel::onToastPanelButtonClicked, this, _1, _2));
+
+ if(notification->isRespondedTo())
+ {
+ // User selected an option in toast, now disable required buttons in IM window
+ disableRespondedOptions(notification);
+ }
+ }
}
void LLToastNotifyPanel::addDefaultButton()
{
@@ -224,7 +252,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
p.click_callback.function(boost::bind(&LLToastNotifyPanel::onClickButton, userdata));
p.rect.width = BUTTON_WIDTH;
p.auto_resize = false;
- p.follows.flags(FOLLOWS_RIGHT | FOLLOWS_LEFT | FOLLOWS_BOTTOM);
+ p.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
if (mIsCaution)
{
p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
@@ -256,9 +284,13 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
LLToastNotifyPanel::~LLToastNotifyPanel()
{
+ mButtonClickConnection.disconnect();
+
std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer());
- if (LLNotificationsUtil::find(mNotification->getID()) != NULL)
+ if (mCloseNotificationOnDestroy && LLNotificationsUtil::find(mNotification->getID()) != NULL)
{
+ // let reusable notification be deleted
+ mNotification->setReusable(false);
LLNotifications::getInstance()->cancel(mNotification);
}
}
@@ -333,6 +365,104 @@ void LLToastNotifyPanel::adjustPanelForTipNotice()
}
}
+typedef std::set<std::string> button_name_set_t;
+typedef std::map<std::string, button_name_set_t> disable_button_map_t;
+
+disable_button_map_t initUserGiveItemDisableButtonMap()
+{
+ // see EXT-5905 for disable rules
+
+ disable_button_map_t disable_map;
+ button_name_set_t buttons;
+
+ buttons.insert("Show");
+ disable_map.insert(std::make_pair("Show", buttons));
+
+ buttons.insert("Discard");
+ disable_map.insert(std::make_pair("Discard", buttons));
+
+ buttons.insert("Mute");
+ disable_map.insert(std::make_pair("Mute", buttons));
+
+ return disable_map;
+}
+
+disable_button_map_t initTeleportOfferedDisableButtonMap()
+{
+ disable_button_map_t disable_map;
+ button_name_set_t buttons;
+
+ buttons.insert("Teleport");
+ buttons.insert("Cancel");
+
+ disable_map.insert(std::make_pair("Teleport", buttons));
+ disable_map.insert(std::make_pair("Cancel", buttons));
+
+ return disable_map;
+}
+
+disable_button_map_t initFriendshipOfferedDisableButtonMap()
+{
+ disable_button_map_t disable_map;
+ button_name_set_t buttons;
+
+ buttons.insert("Accept");
+ buttons.insert("Decline");
+
+ disable_map.insert(std::make_pair("Accept", buttons));
+ disable_map.insert(std::make_pair("Decline", buttons));
+
+ return disable_map;
+}
+
+button_name_set_t getButtonDisableList(const std::string& notification_name, const std::string& button_name)
+{
+ static disable_button_map_t user_give_item_disable_map = initUserGiveItemDisableButtonMap();
+ static disable_button_map_t teleport_offered_disable_map = initTeleportOfferedDisableButtonMap();
+ static disable_button_map_t friendship_offered_disable_map = initFriendshipOfferedDisableButtonMap();
+
+ disable_button_map_t::const_iterator it;
+ disable_button_map_t::const_iterator it_end;
+ disable_button_map_t search_map;
+
+ if("UserGiveItem" == notification_name)
+ {
+ search_map = user_give_item_disable_map;
+ }
+ else if("TeleportOffered" == notification_name)
+ {
+ search_map = teleport_offered_disable_map;
+ }
+ else if("OfferFriendship" == notification_name)
+ {
+ search_map = friendship_offered_disable_map;
+ }
+
+ it = search_map.find(button_name);
+ it_end = search_map.end();
+
+ if(it_end != it)
+ {
+ return it->second;
+ }
+ return button_name_set_t();
+}
+
+void LLToastNotifyPanel::disableButtons(const std::string& notification_name, const std::string& selected_button)
+{
+ button_name_set_t buttons = getButtonDisableList(notification_name, selected_button);
+
+ std::vector<index_button_pair_t>::const_iterator it = mButtons.begin();
+ for ( ; it != mButtons.end(); it++)
+ {
+ LLButton* btn = it->second;
+ if(buttons.find(btn->getName()) != buttons.end())
+ {
+ btn->setEnabled(FALSE);
+ }
+ }
+}
+
// static
void LLToastNotifyPanel::onClickButton(void* data)
{
@@ -345,8 +475,95 @@ void LLToastNotifyPanel::onClickButton(void* data)
{
response[button_name] = true;
}
+
+ bool is_reusable = self->mNotification->isReusable();
+ // When we call respond(), LLOfferInfo will delete itself in inventory_offer_callback(),
+ // lets copy it while it's still valid.
+ LLOfferInfo* old_info = static_cast<LLOfferInfo*>(self->mNotification->getResponder());
+ LLOfferInfo* new_info = NULL;
+ if(is_reusable && old_info)
+ {
+ new_info = new LLOfferInfo(*old_info);
+ self->mNotification->setResponder(new_info);
+ }
+
self->mNotification->respond(response);
- // disable all buttons
- self->mControlPanel->setEnabled(FALSE);
+ if(is_reusable)
+ {
+ sButtonClickSignal(self->mNotification->getID(), button_name);
+
+ if(new_info)
+ {
+ self->mNotification->setResponseFunctor(
+ boost::bind(&LLOfferInfo::inventory_offer_callback, new_info, _1, _2));
+ }
+ }
+ else
+ {
+ // disable all buttons
+ self->mControlPanel->setEnabled(FALSE);
+ }
+}
+
+void LLToastNotifyPanel::onToastPanelButtonClicked(const LLUUID& notification_id, const std::string btn_name)
+{
+ if(mNotification->getID() == notification_id)
+ {
+ disableButtons(mNotification->getName(), btn_name);
+ }
+}
+
+void LLToastNotifyPanel::disableRespondedOptions(LLNotificationPtr& notification)
+{
+ LLSD response = notification->getResponse();
+ for (LLSD::map_const_iterator response_it = response.beginMap();
+ response_it != response.endMap(); ++response_it)
+ {
+ if (response_it->second.isBoolean() && response_it->second.asBoolean())
+ {
+ // that after multiple responses there can be many pressed buttons
+ // need to process them all
+ disableButtons(notification->getName(), response_it->first);
+ }
+ }
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+
+LLIMToastNotifyPanel::LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLUUID& session_id, const LLRect& rect /* = LLRect::null */)
+ : mSessionID(session_id), LLToastNotifyPanel(pNotification, rect)
+{
+ mTextBox->setFollowsAll();
}
+
+LLIMToastNotifyPanel::~LLIMToastNotifyPanel()
+{
+ // We shouldn't delete notification when IM floater exists
+ // since that notification will be reused by IM floater.
+ // This may happened when IM floater reloads messages, exactly when user
+ // changes layout of IM chat log(disable/enable plaintext mode).
+ // See EXT-6500
+ LLIMFloater* im_floater = LLIMFloater::findInstance(mSessionID);
+ if (im_floater != NULL && !im_floater->isDead())
+ {
+ mCloseNotificationOnDestroy = false;
+ }
+}
+
+void LLIMToastNotifyPanel::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */)
+{
+ S32 text_height = mTextBox->getTextBoundingRect().getHeight();
+ S32 widget_height = mTextBox->getRect().getHeight();
+ S32 delta = text_height - widget_height;
+ LLRect rc = getRect();
+
+ rc.setLeftTopAndSize(rc.mLeft, rc.mTop, width, height + delta);
+ height = rc.getHeight();
+ width = rc.getWidth();
+
+ LLToastPanel::reshape(width, height, called_from_parent);
+}
+
+// EOF
diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h
index e791eea469..1c68e4c6b3 100644
--- a/indra/newview/lltoastnotifypanel.h
+++ b/indra/newview/lltoastnotifypanel.h
@@ -53,10 +53,19 @@ class LLNotificationForm;
class LLToastNotifyPanel: public LLToastPanel
{
public:
- LLToastNotifyPanel(LLNotificationPtr&);
+ /**
+ * Constructor for LLToastNotifyPanel.
+ *
+ * @param pNotification a shared pointer to LLNotification
+ * @param rect an initial rectangle of the toast panel.
+ * If it is null then a loaded from xml rectangle will be used.
+ * @see LLNotification
+ */
+ LLToastNotifyPanel(LLNotificationPtr& pNotification, const LLRect& rect = LLRect::null);
virtual ~LLToastNotifyPanel();
LLPanel * getControlPanel() { return mControlPanel; }
+ void setCloseNotificationOnDestroy(bool close) { mCloseNotificationOnDestroy = close; }
protected:
LLButton* createButton(const LLSD& form_element, BOOL is_option);
@@ -68,7 +77,7 @@ protected:
};
std::vector<InstanceAndS32*> mBtnCallbackData;
-private:
+ bool mCloseNotificationOnDestroy;
typedef std::pair<int,LLButton*> index_button_pair_t;
void adjustPanelForScriptNotice(S32 max_width, S32 max_height);
@@ -77,11 +86,18 @@ private:
/*
* It lays out buttons of the notification in mControlPanel.
* Buttons will be placed from BOTTOM to TOP.
- * @param h_pad horizontal space between buttons. It is depent on number of buttons.
+ * @param h_pad horizontal space between buttons. It is depend on number of buttons.
* @param buttons vector of button to be added.
*/
void updateButtonsLayout(const std::vector<index_button_pair_t>& buttons, S32 h_pad);
+ /**
+ * Disable specific button(s) based on notification name and clicked button
+ */
+ void disableButtons(const std::string& notification_name, const std::string& selected_button);
+
+ std::vector<index_button_pair_t> mButtons;
+
// panel elements
LLTextBase* mTextBox;
LLPanel* mInfoPanel; // a panel, that contains an information
@@ -90,6 +106,21 @@ private:
// internal handler for button being clicked
static void onClickButton(void* data);
+ typedef boost::signals2::signal <void (const LLUUID& notification_id, const std::string btn_name)>
+ button_click_signal_t;
+ static button_click_signal_t sButtonClickSignal;
+ boost::signals2::connection mButtonClickConnection;
+
+ /**
+ * handle sButtonClickSignal (to disable buttons) across all panels with given notification_id
+ */
+ void onToastPanelButtonClicked(const LLUUID& notification_id, const std::string btn_name);
+
+ /**
+ * Process response data. Will disable selected options
+ */
+ void disableRespondedOptions(LLNotificationPtr& notification);
+
bool mIsTip;
bool mAddedDefaultBtn;
bool mIsScriptDialog;
@@ -103,4 +134,18 @@ private:
static const LLFontGL* sFontSmall;
};
+class LLIMToastNotifyPanel : public LLToastNotifyPanel
+{
+public:
+
+ LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLUUID& session_id, const LLRect& rect = LLRect::null);
+
+ ~LLIMToastNotifyPanel();
+
+ /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
+
+protected:
+ LLUUID mSessionID;
+};
+
#endif /* LLTOASTNOTIFYPANEL_H_ */
diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp
index fff18df442..d05bfc53e5 100644
--- a/indra/newview/lltoolcomp.cpp
+++ b/indra/newview/lltoolcomp.cpp
@@ -54,6 +54,7 @@
#include "llviewerobject.h"
#include "llviewerwindow.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llfloatertools.h"
#include "llviewercontrol.h"
@@ -784,7 +785,7 @@ BOOL LLToolCompGun::handleScrollWheel(S32 x, S32 y, S32 clicks)
{
if (clicks > 0)
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
return TRUE;
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 125c62474e..1e81e675e6 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -37,6 +37,7 @@
#include "llnotificationsutil.h"
// project headers
#include "llagent.h"
+#include "llagentcamera.h"
#include "llagentui.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
@@ -49,6 +50,8 @@
#include "llhudeffecttrail.h"
#include "llimview.h"
#include "llinventorybridge.h"
+#include "llinventorydefines.h"
+#include "llinventoryfunctions.h"
#include "llmutelist.h"
#include "llpreviewnotecard.h"
#include "llrecentpeople.h"
@@ -79,7 +82,7 @@ public:
virtual bool operator()(LLInventoryCategory* cat,
LLInventoryItem* item)
{
- if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
+ if (cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
{
return true;
}
@@ -95,8 +98,8 @@ public:
virtual bool operator()(LLInventoryCategory* cat,
LLInventoryItem* item)
{
- if(item) return true;
- if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
+ if (item) return true;
+ if (cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
{
return true;
}
@@ -123,18 +126,18 @@ bool LLDroppableItem::operator()(LLInventoryCategory* cat,
LLInventoryItem* item)
{
bool allowed = false;
- if(item)
+ if (item)
{
allowed = itemTransferCommonlyAllowed(item);
- if(allowed
+ if (allowed
&& mIsTransfer
&& !item->getPermissions().allowOperationBy(PERM_TRANSFER,
gAgent.getID()))
{
allowed = false;
}
- if(allowed && !item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (allowed && !item->getPermissions().allowCopyBy(gAgent.getID()))
{
++mCountLosing;
}
@@ -154,7 +157,7 @@ bool LLUncopyableItems::operator()(LLInventoryCategory* cat,
LLInventoryItem* item)
{
bool uncopyable = false;
- if(item)
+ if (item)
{
if (itemTransferCommonlyAllowed(item) &&
!item->getPermissions().allowCopyBy(gAgent.getID()))
@@ -179,10 +182,10 @@ bool LLDropCopyableItems::operator()(
LLInventoryItem* item)
{
bool allowed = false;
- if(item)
+ if (item)
{
allowed = itemTransferCommonlyAllowed(item);
- if(allowed &&
+ if (allowed &&
!item->getPermissions().allowCopyBy(gAgent.getID()))
{
// whoops, can't copy it - don't allow it.
@@ -211,16 +214,16 @@ bool LLGiveable::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
return true;
bool allowed = false;
- if(item)
+ if (item)
{
allowed = itemTransferCommonlyAllowed(item);
- if(allowed &&
+ if (allowed &&
!item->getPermissions().allowOperationBy(PERM_TRANSFER,
gAgent.getID()))
{
allowed = FALSE;
}
- if(allowed &&
+ if (allowed &&
!item->getPermissions().allowCopyBy(gAgent.getID()))
{
++mCountLosing;
@@ -261,16 +264,16 @@ void LLCategoryDropObserver::done()
{
gInventory.removeObserver(this);
LLViewerObject* dst_obj = gObjectList.findObject(mObjectID);
- if(dst_obj)
+ if (dst_obj)
{
// *FIX: coalesce these...
LLInventoryItem* item = NULL;
- item_ref_t::iterator it = mComplete.begin();
- item_ref_t::iterator end = mComplete.end();
+ uuid_vec_t::iterator it = mComplete.begin();
+ uuid_vec_t::iterator end = mComplete.end();
for(; it < end; ++it)
{
item = gInventory.getItem(*it);
- if(item)
+ if (item)
{
LLToolDragAndDrop::dropInventory(
dst_obj,
@@ -303,8 +306,8 @@ void LLCategoryDropDescendentsObserver::done()
{
gInventory.removeObserver(this);
- folder_ref_t::iterator it = mCompleteFolders.begin();
- folder_ref_t::iterator end = mCompleteFolders.end();
+ uuid_vec_t::iterator it = mComplete.begin();
+ uuid_vec_t::iterator end = mComplete.end();
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
for(; it != end; ++it)
@@ -317,20 +320,20 @@ void LLCategoryDropDescendentsObserver::done()
}
S32 count = items.count();
- if(count)
+ if (count)
{
std::set<LLUUID> unique_ids;
for(S32 i = 0; i < count; ++i)
{
unique_ids.insert(items.get(i)->getUUID());
}
- LLInventoryFetchObserver::item_ref_t ids;
- std::back_insert_iterator<LLInventoryFetchObserver::item_ref_t> copier(ids);
+ uuid_vec_t ids;
+ std::back_insert_iterator<uuid_vec_t> copier(ids);
std::copy(unique_ids.begin(), unique_ids.end(), copier);
LLCategoryDropObserver* dropper;
dropper = new LLCategoryDropObserver(mObjectID, mSource);
- dropper->fetchItems(ids);
- if(dropper->isEverythingComplete())
+ dropper->fetch(ids);
+ if (dropper->isEverythingComplete())
{
dropper->done();
}
@@ -410,9 +413,12 @@ void LLToolDragAndDrop::setDragStart(S32 x, S32 y)
BOOL LLToolDragAndDrop::isOverThreshold(S32 x,S32 y)
{
- const S32 MIN_MANHATTAN_DIST = 3;
- S32 manhattan_dist = llabs( x - mDragStartX ) + llabs( y - mDragStartY );
- return manhattan_dist >= MIN_MANHATTAN_DIST;
+ static LLCachedControl<S32> drag_and_drop_threshold(gSavedSettings,"DragAndDropDistanceThreshold");
+
+ S32 mouse_delta_x = x - mDragStartX;
+ S32 mouse_delta_y = y - mDragStartY;
+
+ return (mouse_delta_x * mouse_delta_x) + (mouse_delta_y * mouse_delta_y) > drag_and_drop_threshold * drag_and_drop_threshold;
}
void LLToolDragAndDrop::beginDrag(EDragAndDropType type,
@@ -421,7 +427,7 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type,
const LLUUID& source_id,
const LLUUID& object_id)
{
- if(type == DAD_NONE)
+ if (type == DAD_NONE)
{
llwarns << "Attempted to start drag without a cargo type" << llendl;
return;
@@ -437,24 +443,24 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type,
setMouseCapture( TRUE );
LLToolMgr::getInstance()->setTransientTool( this );
mCursor = UI_CURSOR_NO;
- if((mCargoTypes[0] == DAD_CATEGORY)
+ if ((mCargoTypes[0] == DAD_CATEGORY)
&& ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)))
{
LLInventoryCategory* cat = gInventory.getCategory(cargo_id);
// go ahead and fire & forget the descendents if we are not
// dragging a protected folder.
- if(cat)
+ if (cat)
{
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
LLNoPreferredTypeOrItem is_not_preferred;
- LLInventoryFetchComboObserver::folder_ref_t folder_ids;
- LLInventoryFetchComboObserver::item_ref_t item_ids;
- if(is_not_preferred(cat, NULL))
+ uuid_vec_t folder_ids;
+ uuid_vec_t item_ids;
+ if (is_not_preferred(cat, NULL))
{
folder_ids.push_back(cargo_id);
}
- gInventory.collectDescendentsIf(
+ gInventory.collectDescendentsIf (
cargo_id,
cats,
items,
@@ -471,7 +477,7 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type,
{
item_ids.push_back(items.get(i)->getUUID());
}
- if(!folder_ids.empty() || !item_ids.empty())
+ if (!folder_ids.empty() || !item_ids.empty())
{
LLCategoryFireAndForget fetcher;
fetcher.fetch(folder_ids, item_ids);
@@ -482,7 +488,7 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type,
void LLToolDragAndDrop::beginMultiDrag(
const std::vector<EDragAndDropType> types,
- const std::vector<LLUUID>& cargo_ids,
+ const uuid_vec_t& cargo_ids,
ESource source,
const LLUUID& source_id)
{
@@ -492,7 +498,7 @@ void LLToolDragAndDrop::beginMultiDrag(
std::vector<EDragAndDropType>::const_iterator types_it;
for (types_it = types.begin(); types_it != types.end(); ++types_it)
{
- if(DAD_NONE == *types_it)
+ if (DAD_NONE == *types_it)
{
llwarns << "Attempted to start drag without a cargo type" << llendl;
return;
@@ -506,7 +512,7 @@ void LLToolDragAndDrop::beginMultiDrag(
setMouseCapture( TRUE );
LLToolMgr::getInstance()->setTransientTool( this );
mCursor = UI_CURSOR_NO;
- if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))
+ if ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))
{
// find categories (i.e. inventory folders) in the cargo.
LLInventoryCategory* cat = NULL;
@@ -515,16 +521,16 @@ void LLToolDragAndDrop::beginMultiDrag(
for(S32 i = 0; i < count; ++i)
{
cat = gInventory.getCategory(cargo_ids[i]);
- if(cat)
+ if (cat)
{
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
LLNoPreferredType is_not_preferred;
- if(is_not_preferred(cat, NULL))
+ if (is_not_preferred(cat, NULL))
{
cat_ids.insert(cat->getUUID());
}
- gInventory.collectDescendentsIf(
+ gInventory.collectDescendentsIf (
cat->getUUID(),
cats,
items,
@@ -537,11 +543,11 @@ void LLToolDragAndDrop::beginMultiDrag(
}
}
}
- if(!cat_ids.empty())
+ if (!cat_ids.empty())
{
- LLInventoryFetchComboObserver::folder_ref_t folder_ids;
- LLInventoryFetchComboObserver::item_ref_t item_ids;
- std::back_insert_iterator<LLInventoryFetchDescendentsObserver::folder_ref_t> copier(folder_ids);
+ uuid_vec_t folder_ids;
+ uuid_vec_t item_ids;
+ std::back_insert_iterator<uuid_vec_t> copier(folder_ids);
std::copy(cat_ids.begin(), cat_ids.end(), copier);
LLCategoryFireAndForget fetcher;
fetcher.fetch(folder_ids, item_ids);
@@ -569,7 +575,7 @@ void LLToolDragAndDrop::onMouseCaptureLost()
BOOL LLToolDragAndDrop::handleMouseUp( S32 x, S32 y, MASK mask )
{
- if( hasMouseCapture() )
+ if (hasMouseCapture())
{
EAcceptance acceptance = ACCEPT_NO;
dragOrDrop( x, y, mask, TRUE, &acceptance );
@@ -580,7 +586,7 @@ BOOL LLToolDragAndDrop::handleMouseUp( S32 x, S32 y, MASK mask )
ECursorType LLToolDragAndDrop::acceptanceToCursor( EAcceptance acceptance )
{
- switch( acceptance )
+ switch (acceptance)
{
case ACCEPT_YES_MULTI:
if (mCargoIDs.size() > 1)
@@ -697,7 +703,7 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop,
mToolTipMsg.clear();
- if(top_view)
+ if (top_view)
{
handled = TRUE;
@@ -762,7 +768,7 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop,
}
}
- if(!handled)
+ if (!handled)
{
handled = TRUE;
@@ -820,7 +826,7 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop,
}
}
- if ( !handled )
+ if (!handled)
{
dragOrDrop3D( x, y, mask, drop, acceptance );
}
@@ -873,7 +879,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info)
if (hit_obj->isAttachment() && !hit_obj->isHUDAttachment())
{
LLVOAvatar* avatar = LLVOAvatar::findAvatarFromAttachment( hit_obj );
- if( !avatar )
+ if (!avatar)
{
mLastAccept = ACCEPT_NO;
mCursor = UI_CURSOR_NO;
@@ -885,7 +891,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info)
if (hit_obj->isAvatar())
{
- if(((LLVOAvatar*) hit_obj)->isSelf())
+ if (((LLVOAvatar*) hit_obj)->isSelf())
{
target = DT_SELF;
hit_face = -1;
@@ -959,7 +965,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info)
gViewerWindow->getWindow()->setCursor( cursor );
mLastHitPos = pick_info.mPosGlobal;
- mLastCameraPos = gAgent.getCameraPositionGlobal();
+ mLastCameraPos = gAgentCamera.getCameraPositionGlobal();
}
// static
@@ -971,7 +977,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj,
// Always succeed if....
// texture is from the library
// or already in the contents of the object
- if(SOURCE_LIBRARY == source)
+ if (SOURCE_LIBRARY == source)
{
// dropping a texture from the library always just works.
return TRUE;
@@ -999,7 +1005,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj,
if (!item) return FALSE;
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
- if(!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID()))
+ if (!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID()))
{
// Check that we can add the texture as inventory to the object
if (willObjectAcceptInventory(hit_obj,item) < ACCEPT_YES_COPY_SINGLE )
@@ -1007,20 +1013,20 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj,
return FALSE;
}
// make sure the object has the texture in it's inventory.
- if(SOURCE_AGENT == source)
+ if (SOURCE_AGENT == source)
{
// Remove the texture from local inventory. The server
// will actually remove the item from agent inventory.
gInventory.deleteObject(item->getUUID());
gInventory.notifyObservers();
}
- else if(SOURCE_WORLD == source)
+ else if (SOURCE_WORLD == source)
{
// *FIX: if the objects are in different regions, and the
// source region has crashed, you can bypass these
// permissions.
LLViewerObject* src_obj = gObjectList.findObject(src_id);
- if(src_obj)
+ if (src_obj)
{
src_obj->removeInventory(item->getUUID());
}
@@ -1035,7 +1041,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj,
// TODO: Check to see if adding the item was successful; if not, then
// we should return false here.
}
- else if(!item->getPermissions().allowOperationBy(PERM_TRANSFER,
+ else if (!item->getPermissions().allowOperationBy(PERM_TRANSFER,
gAgent.getID()))
{
// Check that we can add the texture as inventory to the object
@@ -1067,7 +1073,7 @@ void LLToolDragAndDrop::dropTextureAllFaces(LLViewerObject* hit_obj,
}
LLUUID asset_id = item->getAssetUUID();
BOOL success = handleDropTextureProtections(hit_obj, item, source, src_id);
- if(!success)
+ if (!success)
{
return;
}
@@ -1109,7 +1115,7 @@ void LLToolDragAndDrop::dropTextureOneFace(LLViewerObject* hit_obj,
}
LLUUID asset_id = item->getAssetUUID();
BOOL success = handleDropTextureProtections(hit_obj, item, source, src_id);
- if(!success)
+ if (!success)
{
return;
}
@@ -1132,32 +1138,32 @@ void LLToolDragAndDrop::dropScript(LLViewerObject* hit_obj,
{
// *HACK: In order to resolve SL-22177, we need to block drags
// from notecards and objects onto other objects.
- if((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource)
+ if ((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource)
|| (SOURCE_NOTECARD == LLToolDragAndDrop::getInstance()->mSource))
{
llwarns << "Call to LLToolDragAndDrop::dropScript() from world"
<< " or notecard." << llendl;
return;
}
- if(hit_obj && item)
+ if (hit_obj && item)
{
LLPointer<LLViewerInventoryItem> new_script = new LLViewerInventoryItem(item);
- if(!item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (!item->getPermissions().allowCopyBy(gAgent.getID()))
{
- if(SOURCE_AGENT == source)
+ if (SOURCE_AGENT == source)
{
// Remove the script from local inventory. The server
// will actually remove the item from agent inventory.
gInventory.deleteObject(item->getUUID());
gInventory.notifyObservers();
}
- else if(SOURCE_WORLD == source)
+ else if (SOURCE_WORLD == source)
{
// *FIX: if the objects are in different regions, and
// the source region has crashed, you can bypass
// these permissions.
LLViewerObject* src_obj = gObjectList.findObject(src_id);
- if(src_obj)
+ if (src_obj)
{
src_obj->removeInventory(item->getUUID());
}
@@ -1173,7 +1179,7 @@ void LLToolDragAndDrop::dropScript(LLViewerObject* hit_obj,
// VEFFECT: SetScript
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
- effectp->setSourceObject(gAgent.getAvatarObject());
+ effectp->setSourceObject(gAgentAvatarp);
effectp->setTargetObject(hit_obj);
effectp->setDuration(LL_HUD_DUR_SHORT);
effectp->setColor(LLColor4U(gAgent.getEffectColor()));
@@ -1197,7 +1203,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return;
+ if (!item || !item->isComplete()) return;
//if (regionp
// && (regionp->getRegionFlags() & REGION_FLAGS_SANDBOX))
@@ -1208,7 +1214,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
// this will remove the object from inventory after rez. Only
// bother with this check if we would not normally remove from
// inventory.
- if(!remove_from_inventory
+ if (!remove_from_inventory
&& !item->getPermissions().allowCopyBy(gAgent.getID()))
{
remove_from_inventory = TRUE;
@@ -1219,7 +1225,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
// hitting objects that were clipped by the near plane or culled
// on the viewer.
LLUUID ray_target_id;
- if( raycast_target )
+ if (raycast_target)
{
ray_target_id = raycast_target->getID();
}
@@ -1231,7 +1237,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
// Check if it's in the trash.
bool is_in_trash = false;
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
+ if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
{
is_in_trash = true;
remove_from_inventory = TRUE;
@@ -1289,7 +1295,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
pack_permissions_slam(msg, item->getFlags(), item->getPermissions());
LLUUID folder_id = item->getParentUUID();
- if((SOURCE_LIBRARY == mSource) || (is_in_trash))
+ if ((SOURCE_LIBRARY == mSource) || (is_in_trash))
{
// since it's coming from the library or trash, we want to not
// 'take' it back to the same place.
@@ -1323,7 +1329,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
gViewerWindow->getWindow()->incBusyCount();
}
- if(remove_from_inventory)
+ if (remove_from_inventory)
{
// Delete it from inventory immediately so that users cannot
// easily bypass copy protection in laggy situations. If the
@@ -1334,7 +1340,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
// VEFFECT: DropObject
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
- effectp->setSourceObject(gAgent.getAvatarObject());
+ effectp->setSourceObject(gAgentAvatarp);
effectp->setPositionGlobal(mLastHitPos);
effectp->setDuration(LL_HUD_DUR_SHORT);
effectp->setColor(LLColor4U(gAgent.getEffectColor()));
@@ -1349,7 +1355,7 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
{
// *HACK: In order to resolve SL-22177, we need to block drags
// from notecards and objects onto other objects.
- if((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource)
+ if ((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource)
|| (SOURCE_NOTECARD == LLToolDragAndDrop::getInstance()->mSource))
{
llwarns << "Call to LLToolDragAndDrop::dropInventory() from world"
@@ -1361,9 +1367,9 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
time_t creation_date = time_corrected();
new_item->setCreationDate(creation_date);
- if(!item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (!item->getPermissions().allowCopyBy(gAgent.getID()))
{
- if(SOURCE_AGENT == source)
+ if (SOURCE_AGENT == source)
{
// Remove the inventory item from local inventory. The
// server will actually remove the item from agent
@@ -1371,13 +1377,13 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
gInventory.deleteObject(item->getUUID());
gInventory.notifyObservers();
}
- else if(SOURCE_WORLD == source)
+ else if (SOURCE_WORLD == source)
{
// *FIX: if the objects are in different regions, and the
// source region has crashed, you can bypass these
// permissions.
LLViewerObject* src_obj = gObjectList.findObject(src_id);
- if(src_obj)
+ if (src_obj)
{
src_obj->removeInventory(item->getUUID());
}
@@ -1397,7 +1403,7 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
// VEFFECT: AddToInventory
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
- effectp->setSourceObject(gAgent.getAvatarObject());
+ effectp->setSourceObject(gAgentAvatarp);
effectp->setTargetObject(hit_obj);
effectp->setDuration(LL_HUD_DUR_SHORT);
effectp->setColor(LLColor4U(gAgent.getEffectColor()));
@@ -1410,11 +1416,11 @@ void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent,
{
llinfos << "LLToolDragAndDrop::giveInventory()" << llendl;
- if(!isInventoryGiveAcceptable(item))
+ if (!isInventoryGiveAcceptable(item))
{
return;
}
- if(item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (item->getPermissions().allowCopyBy(gAgent.getID()))
{
// just give it away.
LLToolDragAndDrop::commitGiveInventoryItem(to_agent, item, im_session_id);
@@ -1438,7 +1444,7 @@ bool LLToolDragAndDrop::handleCopyProtectedItem(const LLSD& notification, const
{
case 0: // "Yes"
item = gInventory.getItem(notification["payload"]["item_id"].asUUID());
- if(item)
+ if (item)
{
LLToolDragAndDrop::commitGiveInventoryItem(notification["payload"]["agent_id"].asUUID(),
item);
@@ -1465,7 +1471,7 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent,
LLInventoryItem* item,
const LLUUID& im_session_id)
{
- if(!item) return;
+ if (!item) return;
std::string name;
LLAgentUI::buildFullname(name);
LLUUID transaction_id;
@@ -1495,7 +1501,7 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent,
// VEFFECT: giveInventory
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
- effectp->setSourceObject(gAgent.getAvatarObject());
+ effectp->setSourceObject(gAgentAvatarp);
effectp->setTargetObject(gObjectList.findObject(to_agent));
effectp->setDuration(LL_HUD_DUR_SHORT);
effectp->setColor(LLColor4U(gAgent.getEffectColor()));
@@ -1503,15 +1509,38 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent,
LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY);
+ logInventoryOffer(to_agent, im_session_id);
+
+ // add buddy to recent people list
+ LLRecentPeople::instance().add(to_agent);
+}
+
+//static
+void LLToolDragAndDrop::logInventoryOffer(const LLUUID& to_agent, const LLUUID &im_session_id)
+{
+ // compute id of possible IM session with agent that has "to_agent" id
+ LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, to_agent);
// If this item was given by drag-and-drop into an IM panel, log this action in the IM panel chat.
- if (im_session_id != LLUUID::null)
+ if (im_session_id.notNull())
{
LLSD args;
gIMMgr->addSystemMessage(im_session_id, "inventory_item_offered", args);
}
-
- // add buddy to recent people list
- LLRecentPeople::instance().add(to_agent);
+ // If this item was given by drag-and-drop on avatar while IM panel was open, log this action in the IM panel chat.
+ else if (LLIMModel::getInstance()->findIMSession(session_id))
+ {
+ LLSD args;
+ gIMMgr->addSystemMessage(session_id, "inventory_item_offered", args);
+ }
+ // If this item was given by drag-and-drop on avatar while IM panel wasn't open, log this action to IM history.
+ else
+ {
+ std::string full_name;
+ if (gCacheName->getFullName(to_agent, full_name))
+ {
+ LLIMModel::instance().logToFile(full_name, LLTrans::getString("SECOND_LIFE"), im_session_id, LLTrans::getString("inventory_item_offered-im"));
+ }
+ }
}
void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
@@ -1519,21 +1548,17 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
const LLUUID& im_session_id)
{
- if(!cat) return;
+ if (!cat) return;
llinfos << "LLToolDragAndDrop::giveInventoryCategory() - "
<< cat->getUUID() << llendl;
- LLVOAvatar* my_avatar = gAgent.getAvatarObject();
- if( !my_avatar )
- {
- return;
- }
+ if (!isAgentAvatarValid()) return;
// Test out how many items are being given.
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
LLGiveable giveable;
- gInventory.collectDescendentsIf(cat->getUUID(),
+ gInventory.collectDescendentsIf (cat->getUUID(),
cats,
items,
LLInventoryModel::EXCLUDE_TRASH,
@@ -1542,31 +1567,31 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
bool complete = true;
for(S32 i = 0; i < count; ++i)
{
- if(!gInventory.isCategoryComplete(cats.get(i)->getUUID()))
+ if (!gInventory.isCategoryComplete(cats.get(i)->getUUID()))
{
complete = false;
break;
}
}
- if(!complete)
+ if (!complete)
{
LLNotificationsUtil::add("IncompleteInventory");
return;
}
count = items.count() + cats.count();
- if(count > MAX_ITEMS)
+ if (count > MAX_ITEMS)
{
LLNotificationsUtil::add("TooManyItems");
return;
}
- else if(count == 0)
+ else if (count == 0)
{
LLNotificationsUtil::add("NoItems");
return;
}
else
{
- if(0 == giveable.countNoCopy())
+ if (0 == giveable.countNoCopy())
{
LLToolDragAndDrop::commitGiveInventoryCategory(to_agent, cat, im_session_id);
}
@@ -1592,14 +1617,14 @@ bool LLToolDragAndDrop::handleCopyProtectedCategory(const LLSD& notification, co
{
case 0: // "Yes"
cat = gInventory.getCategory(notification["payload"]["folder_id"].asUUID());
- if(cat)
+ if (cat)
{
LLToolDragAndDrop::commitGiveInventoryCategory(notification["payload"]["agent_id"].asUUID(),
cat);
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
LLUncopyableItems remove;
- gInventory.collectDescendentsIf(cat->getUUID(),
+ gInventory.collectDescendentsIf (cat->getUUID(),
cats,
items,
LLInventoryModel::EXCLUDE_TRASH,
@@ -1630,7 +1655,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
const LLUUID& im_session_id)
{
- if(!cat) return;
+ if (!cat) return;
llinfos << "LLToolDragAndDrop::commitGiveInventoryCategory() - "
<< cat->getUUID() << llendl;
@@ -1641,7 +1666,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
LLGiveable giveable;
- gInventory.collectDescendentsIf(cat->getUUID(),
+ gInventory.collectDescendentsIf (cat->getUUID(),
cats,
items,
LLInventoryModel::EXCLUDE_TRASH,
@@ -1651,12 +1676,12 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
// MTUBYTES or 18 * count < 1200 => count < 1200/18 =>
// 66. I've cut it down a bit from there to give some pad.
S32 count = items.count() + cats.count();
- if(count > MAX_ITEMS)
+ if (count > MAX_ITEMS)
{
LLNotificationsUtil::add("TooManyItems");
return;
}
- else if(count == 0)
+ else if (count == 0)
{
LLNotificationsUtil::add("NoItems");
return;
@@ -1715,7 +1740,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
// VEFFECT: giveInventoryCategory
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
- effectp->setSourceObject(gAgent.getAvatarObject());
+ effectp->setSourceObject(gAgentAvatarp);
effectp->setTargetObject(gObjectList.findObject(to_agent));
effectp->setDuration(LL_HUD_DUR_SHORT);
effectp->setColor(LLColor4U(gAgent.getEffectColor()));
@@ -1723,47 +1748,38 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY);
- // If this item was given by drag-and-drop into an IM panel, log this action in the IM panel chat.
- if (im_session_id != LLUUID::null)
- {
- LLSD args;
- gIMMgr->addSystemMessage(im_session_id, "inventory_item_offered", args);
- }
+ logInventoryOffer(to_agent, im_session_id);
}
}
// static
BOOL LLToolDragAndDrop::isInventoryGiveAcceptable(LLInventoryItem* item)
{
- if(!item)
+ if (!item)
{
return FALSE;
}
- if(!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
+ if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
{
return FALSE;
}
BOOL copyable = FALSE;
- if(item->getPermissions().allowCopyBy(gAgent.getID())) copyable = TRUE;
+ if (item->getPermissions().allowCopyBy(gAgent.getID())) copyable = TRUE;
- LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject();
- if(!my_avatar)
- {
- return FALSE;
- }
+ if (!isAgentAvatarValid()) return FALSE;
BOOL acceptable = TRUE;
switch(item->getType())
{
case LLAssetType::AT_OBJECT:
- if(my_avatar->isWearingAttachment(item->getUUID()))
+ if (gAgentAvatarp->isWearingAttachment(item->getUUID()))
{
acceptable = FALSE;
}
break;
case LLAssetType::AT_BODYPART:
case LLAssetType::AT_CLOTHING:
- if(!copyable && gAgentWearables.isWearingItem(item->getUUID()))
+ if (!copyable && gAgentWearables.isWearingItem(item->getUUID()))
{
acceptable = FALSE;
}
@@ -1777,33 +1793,29 @@ BOOL LLToolDragAndDrop::isInventoryGiveAcceptable(LLInventoryItem* item)
// Static
BOOL LLToolDragAndDrop::isInventoryGroupGiveAcceptable(LLInventoryItem* item)
{
- if(!item)
+ if (!item)
{
return FALSE;
}
// These permissions are double checked in the simulator in
// LLGroupNoticeInventoryItemFetch::result().
- if(!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
+ if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
{
return FALSE;
}
- if(!item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (!item->getPermissions().allowCopyBy(gAgent.getID()))
{
return FALSE;
}
- LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject();
- if(!my_avatar)
- {
- return FALSE;
- }
+ if (!isAgentAvatarValid()) return FALSE;
BOOL acceptable = TRUE;
switch(item->getType())
{
case LLAssetType::AT_OBJECT:
- if(my_avatar->isWearingAttachment(item->getUUID()))
+ if (gAgentAvatarp->isWearingAttachment(item->getUUID()))
{
acceptable = FALSE;
}
@@ -1829,7 +1841,7 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL
// help make sure that drops that are from an object to an object
// don't have to worry about order of evaluation. Think of this
// like check for self in assignment.
- if(obj->getID() == item->getParentUUID())
+ if (obj->getID() == item->getParentUUID())
{
return ACCEPT_NO;
}
@@ -1838,19 +1850,17 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL
// gAgent.getGroupID())
// && (obj->mPermModify || obj->mFlagAllowInventoryAdd));
BOOL worn = FALSE;
- LLVOAvatarSelf* my_avatar = NULL;
switch(item->getType())
{
case LLAssetType::AT_OBJECT:
- my_avatar = gAgent.getAvatarObject();
- if(my_avatar && my_avatar->isWearingAttachment(item->getUUID()))
+ if (isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item->getUUID()))
{
worn = TRUE;
}
break;
case LLAssetType::AT_BODYPART:
case LLAssetType::AT_CLOTHING:
- if(gAgentWearables.isWearingItem(item->getUUID()))
+ if (gAgentWearables.isWearingItem(item->getUUID()))
{
worn = TRUE;
}
@@ -1861,7 +1871,7 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL
const LLPermissions& perm = item->getPermissions();
BOOL modify = (obj->permModify() || obj->flagAllowInventoryAdd());
BOOL transfer = FALSE;
- if((obj->permYouOwner() && (perm.getOwner() == gAgent.getID()))
+ if ((obj->permYouOwner() && (perm.getOwner() == gAgent.getID()))
|| perm.allowOperationBy(PERM_TRANSFER, gAgent.getID()))
{
transfer = TRUE;
@@ -1869,15 +1879,15 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL
BOOL volume = (LL_PCODE_VOLUME == obj->getPCode());
BOOL attached = obj->isAttachment();
BOOL unrestricted = ((perm.getMaskBase() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED) ? TRUE : FALSE;
- if(attached && !unrestricted)
+ if (attached && !unrestricted)
{
return ACCEPT_NO_LOCKED;
}
- else if(modify && transfer && volume && !worn)
+ else if (modify && transfer && volume && !worn)
{
return ACCEPT_YES_MULTI;
}
- else if(!modify)
+ else if (!modify)
{
return ACCEPT_NO_LOCKED;
}
@@ -1908,12 +1918,12 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
case DAD_CALLINGCARD:
{
LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data;
- if(gInventory.getItem(inv_item->getUUID())
+ if (gInventory.getItem(inv_item->getUUID())
&& LLToolDragAndDrop::isInventoryGiveAcceptable(inv_item))
{
// *TODO: get multiple object transfers working
*accept = ACCEPT_YES_COPY_SINGLE;
- if(drop)
+ if (drop)
{
LLToolDragAndDrop::giveInventory(dest_agent, inv_item, session_id);
}
@@ -1931,11 +1941,11 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
case DAD_CATEGORY:
{
LLViewerInventoryCategory* inv_cat = (LLViewerInventoryCategory*)cargo_data;
- if( gInventory.getCategory( inv_cat->getUUID() ) )
+ if (gInventory.getCategory(inv_cat->getUUID()))
{
// *TODO: get multiple object transfers working
*accept = ACCEPT_YES_COPY_SINGLE;
- if(drop)
+ if (drop)
{
LLToolDragAndDrop::giveInventoryCategory(dest_agent, inv_cat, session_id);
}
@@ -1976,7 +1986,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv(
{
lldebugs << "LLToolDragAndDrop::dad3dRezAttachmentFromInv()" << llendl;
// must be in the user's inventory
- if(mSource != SOURCE_AGENT && mSource != SOURCE_LIBRARY)
+ if (mSource != SOURCE_AGENT && mSource != SOURCE_LIBRARY)
{
return ACCEPT_NO;
}
@@ -1984,25 +1994,24 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item || !item->isComplete()) return ACCEPT_NO;
// must not be in the trash
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
+ if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
{
return ACCEPT_NO;
}
// must not be already wearing it
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if( !avatar || avatar->isWearingAttachment(item->getUUID()) )
+ if (!isAgentAvatarValid() || gAgentAvatarp->isWearingAttachment(item->getUUID()))
{
return ACCEPT_NO;
}
- if( drop )
+ if (drop)
{
- if(mSource == SOURCE_LIBRARY)
+ if (mSource == SOURCE_LIBRARY)
{
LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(0);
copy_inventory_item(
@@ -2034,10 +2043,9 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item || !item->isComplete()) return ACCEPT_NO;
- LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject();
- if( !my_avatar || my_avatar->isWearingAttachment( item->getUUID() ) )
+ if (!isAgentAvatarValid() || gAgentAvatarp->isWearingAttachment(item->getUUID()))
{
return ACCEPT_NO;
}
@@ -2062,7 +2070,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand(
// check if the item can be copied. If not, send that to the sim
// which will remove the inventory item.
- if(!item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (!item->getPermissions().allowCopyBy(gAgent.getID()))
{
accept = ACCEPT_YES_SINGLE;
remove_inventory = TRUE;
@@ -2070,13 +2078,13 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand(
// Check if it's in the trash.
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
+ if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
{
accept = ACCEPT_YES_SINGLE;
remove_inventory = TRUE;
}
- if(drop)
+ if (drop)
{
dropObject(obj, TRUE, FALSE, remove_inventory);
}
@@ -2097,24 +2105,23 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
- LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject();
- if( !my_avatar || my_avatar->isWearingAttachment( item->getUUID() ) )
+ if (!item || !item->isComplete()) return ACCEPT_NO;
+ if (!isAgentAvatarValid() || gAgentAvatarp->isWearingAttachment(item->getUUID()))
{
return ACCEPT_NO;
}
- if((mask & MASK_CONTROL))
+ if ((mask & MASK_CONTROL))
{
// *HACK: In order to resolve SL-22177, we need to block drags
// from notecards and objects onto other objects.
- if(mSource == SOURCE_NOTECARD)
+ if (mSource == SOURCE_NOTECARD)
{
return ACCEPT_NO;
}
EAcceptance rv = willObjectAcceptInventory(obj, item);
- if(drop && (ACCEPT_YES_SINGLE <= rv))
+ if (drop && (ACCEPT_YES_SINGLE <= rv))
{
dropInventory(obj, item, mSource, mSourceID);
}
@@ -2140,7 +2147,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject(
// check if the item can be copied. If not, send that to the sim
// which will remove the inventory item.
- if(!item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (!item->getPermissions().allowCopyBy(gAgent.getID()))
{
accept = ACCEPT_YES_SINGLE;
remove_inventory = TRUE;
@@ -2148,13 +2155,13 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject(
// Check if it's in the trash.
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
+ if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
{
accept = ACCEPT_YES_SINGLE;
remove_inventory = TRUE;
}
- if(drop)
+ if (drop)
{
dropObject(obj, FALSE, FALSE, remove_inventory);
}
@@ -2169,7 +2176,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezScript(
// *HACK: In order to resolve SL-22177, we need to block drags
// from notecards and objects onto other objects.
- if((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource))
+ if ((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource))
{
return ACCEPT_NO;
}
@@ -2177,9 +2184,9 @@ EAcceptance LLToolDragAndDrop::dad3dRezScript(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item || !item->isComplete()) return ACCEPT_NO;
EAcceptance rv = willObjectAcceptInventory(obj, item);
- if(drop && (ACCEPT_YES_SINGLE <= rv))
+ if (drop && (ACCEPT_YES_SINGLE <= rv))
{
// rez in the script active by default, rez in inactive if the
// control key is being held down.
@@ -2207,7 +2214,7 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject(
// *HACK: In order to resolve SL-22177, we need to block drags
// from notecards and objects onto other objects.
- if((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource))
+ if ((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource))
{
return ACCEPT_NO;
}
@@ -2215,29 +2222,29 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item || !item->isComplete()) return ACCEPT_NO;
EAcceptance rv = willObjectAcceptInventory(obj, item);
- if((mask & MASK_CONTROL))
+ if ((mask & MASK_CONTROL))
{
- if((ACCEPT_YES_SINGLE <= rv) && drop)
+ if ((ACCEPT_YES_SINGLE <= rv) && drop)
{
dropInventory(obj, item, mSource, mSourceID);
}
return rv;
}
- if(!obj->permModify())
+ if (!obj->permModify())
{
return ACCEPT_NO_LOCKED;
}
//If texture !copyable don't texture or you'll never get it back.
- if(!item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (!item->getPermissions().allowCopyBy(gAgent.getID()))
{
return ACCEPT_NO;
}
- if(drop && (ACCEPT_YES_SINGLE <= rv))
+ if (drop && (ACCEPT_YES_SINGLE <= rv))
{
- if((mask & MASK_SHIFT))
+ if ((mask & MASK_SHIFT))
{
dropTextureAllFaces(obj, item, mSource, mSourceID);
}
@@ -2248,7 +2255,7 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject(
// VEFFECT: SetTexture
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
- effectp->setSourceObject(gAgent.getAvatarObject());
+ effectp->setSourceObject(gAgentAvatarp);
effectp->setTargetObject(obj);
effectp->setDuration(LL_HUD_DUR_SHORT);
effectp->setColor(LLColor4U(gAgent.getEffectColor()));
@@ -2262,9 +2269,9 @@ EAcceptance LLToolDragAndDrop::dad3dTextureSelf(
LLViewerObject* obj, S32 face, MASK mask, BOOL drop)
{
lldebugs << "LLToolDragAndDrop::dad3dTextureAvatar()" << llendl;
- if(drop)
+ if (drop)
{
- if( !(mask & MASK_SHIFT) )
+ if (!(mask & MASK_SHIFT))
{
dropTextureOneFaceAvatar( (LLVOAvatar*)obj, face, (LLInventoryItem*)mCargoData);
}
@@ -2280,18 +2287,18 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item || !item->isComplete()) return ACCEPT_NO;
- if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
+ if (mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
{
// it's in the agent inventory
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
+ if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
{
return ACCEPT_NO;
}
- if( drop )
+ if (drop)
{
// Don't wear anything until initial wearables are loaded, can
// destroy clothing items.
@@ -2301,7 +2308,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem(
return ACCEPT_NO;
}
- if(mSource == SOURCE_LIBRARY)
+ if (mSource == SOURCE_LIBRARY)
{
// create item based on that one, and put it on if that
// was a success.
@@ -2335,21 +2342,21 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item || !item->isComplete()) return ACCEPT_NO;
- if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
+ if (mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
{
// it's in the agent inventory
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
+ if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
{
return ACCEPT_NO;
}
- if( drop )
+ if (drop)
{
LLUUID item_id;
- if(mSource == SOURCE_LIBRARY)
+ if (mSource == SOURCE_LIBRARY)
{
// create item based on that one, and put it on if that
// was a success.
@@ -2364,7 +2371,7 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture(
}
else
{
- LLGestureManager::instance().activateGesture(item->getUUID());
+ LLGestureMgr::instance().activateGesture(item->getUUID());
gInventory.updateItem(item);
gInventory.notifyObservers();
}
@@ -2384,7 +2391,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* category;
locateInventory(item, category);
- if(!category) return ACCEPT_NO;
+ if (!category) return ACCEPT_NO;
if (drop)
{
@@ -2397,26 +2404,26 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(
}
}
- if(mSource == SOURCE_AGENT)
+ if (mSource == SOURCE_AGENT)
{
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if( gInventory.isObjectDescendentOf( category->getUUID(), trash_id ) )
+ if (gInventory.isObjectDescendentOf(category->getUUID(), trash_id))
{
return ACCEPT_NO;
}
- if(drop)
+ if (drop)
{
BOOL append = ( (mask & MASK_SHIFT) ? TRUE : FALSE );
- LLAppearanceManager::instance().wearInventoryCategory(category, false, append);
+ LLAppearanceMgr::instance().wearInventoryCategory(category, false, append);
}
return ACCEPT_YES_MULTI;
}
- else if(mSource == SOURCE_LIBRARY)
+ else if (mSource == SOURCE_LIBRARY)
{
- if(drop)
+ if (drop)
{
- LLAppearanceManager::instance().wearInventoryCategory(category, true, false);
+ LLAppearanceMgr::instance().wearInventoryCategory(category, true, false);
}
return ACCEPT_YES_MULTI;
}
@@ -2435,7 +2442,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventory(
// *HACK: In order to resolve SL-22177, we need to block drags
// from notecards and objects onto other objects.
- if((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource))
+ if ((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource))
{
return ACCEPT_NO;
}
@@ -2443,7 +2450,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventory(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item || !item->isComplete()) return ACCEPT_NO;
LLViewerObject* root_object = obj;
if (obj && obj->getParent())
{
@@ -2455,7 +2462,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventory(
}
EAcceptance rv = willObjectAcceptInventory(root_object, item);
- if(root_object && drop && (ACCEPT_YES_COPY_SINGLE <= rv))
+ if (root_object && drop && (ACCEPT_YES_COPY_SINGLE <= rv))
{
dropInventory(root_object, item, mSource, mSourceID);
}
@@ -2499,7 +2506,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory(
LLDroppableItem droppable(!obj->permYouOwner());
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
- gInventory.collectDescendentsIf(cat->getUUID(),
+ gInventory.collectDescendentsIf (cat->getUUID(),
cats,
items,
LLInventoryModel::EXCLUDE_TRASH,
@@ -2528,7 +2535,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory(
{
const LLViewerInventoryCategory *cat = (*cat_iter);
rv = gInventory.isCategoryComplete(cat->getUUID()) ? ACCEPT_YES_MULTI : ACCEPT_NO;
- if(rv < ACCEPT_YES_SINGLE)
+ if (rv < ACCEPT_YES_SINGLE)
{
lldebugs << "Category " << cat->getUUID() << "is not complete." << llendl;
break;
@@ -2561,7 +2568,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory(
// If every item is accepted, send it on
if (drop && (ACCEPT_YES_COPY_SINGLE <= rv))
{
- LLInventoryFetchObserver::item_ref_t ids;
+ uuid_vec_t ids;
for (LLInventoryModel::item_array_t::const_iterator item_iter = items.begin();
item_iter != items.end();
++item_iter)
@@ -2570,8 +2577,8 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory(
ids.push_back(item->getUUID());
}
LLCategoryDropObserver* dropper = new LLCategoryDropObserver(obj->getID(), mSource);
- dropper->fetchItems(ids);
- if(dropper->isEverythingComplete())
+ dropper->fetch(ids);
+ if (dropper->isEverythingComplete())
{
dropper->done();
}
@@ -2596,27 +2603,26 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryObject(
lldebugs << "LLToolDragAndDrop::dad3dGiveInventoryObject()" << llendl;
// item has to be in agent inventory.
- if(mSource != SOURCE_AGENT) return ACCEPT_NO;
+ if (mSource != SOURCE_AGENT) return ACCEPT_NO;
// find the item now.
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
- if(!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
+ if (!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
{
// cannot give away no-transfer objects
return ACCEPT_NO;
}
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if(avatar && avatar->isWearingAttachment( item->getUUID() ) )
+ if (isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item->getUUID()))
{
// You can't give objects that are attached to you
return ACCEPT_NO;
}
- if( obj && avatar )
+ if (obj && isAgentAvatarValid())
{
- if(drop)
+ if (drop)
{
giveInventory(obj->getID(), item );
}
@@ -2633,16 +2639,16 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventory(
{
lldebugs << "LLToolDragAndDrop::dad3dGiveInventory()" << llendl;
// item has to be in agent inventory.
- if(mSource != SOURCE_AGENT) return ACCEPT_NO;
+ if (mSource != SOURCE_AGENT) return ACCEPT_NO;
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
- if(!isInventoryGiveAcceptable(item))
+ if (!item || !item->isComplete()) return ACCEPT_NO;
+ if (!isInventoryGiveAcceptable(item))
{
return ACCEPT_NO;
}
- if(drop && obj)
+ if (drop && obj)
{
giveInventory(obj->getID(), item);
}
@@ -2655,12 +2661,12 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryCategory(
LLViewerObject* obj, S32 face, MASK mask, BOOL drop)
{
lldebugs << "LLToolDragAndDrop::dad3dGiveInventoryCategory()" << llendl;
- if(drop && obj)
+ if (drop && obj)
{
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!cat) return ACCEPT_NO;
+ if (!cat) return ACCEPT_NO;
giveInventoryCategory(obj->getID(), cat);
}
// *TODO: deal with all the issues surrounding multi-object
@@ -2676,14 +2682,14 @@ EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnLand(
LLViewerInventoryItem* item = NULL;
LLViewerInventoryCategory* cat = NULL;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
+ if (!item || !item->isComplete()) return ACCEPT_NO;
- if(!gAgent.allowOperation(PERM_COPY, item->getPermissions())
+ if (!gAgent.allowOperation(PERM_COPY, item->getPermissions())
|| !item->getPermissions().allowTransferTo(LLUUID::null))
{
return ACCEPT_NO_LOCKED;
}
- if(drop)
+ if (drop)
{
dropObject(obj, TRUE, TRUE, FALSE);
}
@@ -2697,8 +2703,8 @@ EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnObject(
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
locateInventory(item, cat);
- if(!item || !item->isComplete()) return ACCEPT_NO;
- if((mask & MASK_CONTROL))
+ if (!item || !item->isComplete()) return ACCEPT_NO;
+ if ((mask & MASK_CONTROL))
{
// *HACK: In order to resolve SL-22177, we need to block drags
// from notecards and objects onto other objects.
@@ -2706,19 +2712,19 @@ EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnObject(
// *HACK: uncomment this when appropriate
//EAcceptance rv = willObjectAcceptInventory(obj, item);
- //if(drop && (ACCEPT_YES_SINGLE <= rv))
+ //if (drop && (ACCEPT_YES_SINGLE <= rv))
//{
// dropInventory(obj, item, mSource, mSourceID);
//}
//return rv;
}
- if(!item->getPermissions().allowCopyBy(gAgent.getID(),
+ if (!item->getPermissions().allowCopyBy(gAgent.getID(),
gAgent.getGroupID())
|| !item->getPermissions().allowTransferTo(LLUUID::null))
{
return ACCEPT_NO_LOCKED;
}
- if(drop)
+ if (drop)
{
dropObject(obj, FALSE, TRUE, FALSE);
}
@@ -2734,23 +2740,23 @@ EAcceptance LLToolDragAndDrop::dad3dCategoryOnLand(
LLInventoryItem* item;
LLInventoryCategory* cat;
locateInventory(item, cat);
- if(!cat) return ACCEPT_NO;
+ if (!cat) return ACCEPT_NO;
EAcceptance rv = ACCEPT_NO;
// find all the items in the category
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
LLDropCopyableItems droppable;
- gInventory.collectDescendentsIf(cat->getUUID(),
+ gInventory.collectDescendentsIf (cat->getUUID(),
cats,
items,
LLInventoryModel::EXCLUDE_TRASH,
droppable);
- if(items.count() > 0)
+ if (items.count() > 0)
{
rv = ACCEPT_YES_SINGLE;
}
- if((rv >= ACCEPT_YES_COPY_SINGLE) && drop)
+ if ((rv >= ACCEPT_YES_COPY_SINGLE) && drop)
{
createContainer(items, cat->getName());
return ACCEPT_NO;
@@ -2773,19 +2779,19 @@ EAcceptance LLToolDragAndDrop::dad3dAssetOnLand(
LLViewerInventoryItem::item_array_t items;
LLViewerInventoryItem::item_array_t copyable_items;
locateMultipleInventory(items, cats);
- if(!items.count()) return ACCEPT_NO;
+ if (!items.count()) return ACCEPT_NO;
EAcceptance rv = ACCEPT_NO;
for (S32 i = 0; i < items.count(); i++)
{
LLInventoryItem* item = items[i];
- if(item->getPermissions().allowCopyBy(gAgent.getID()))
+ if (item->getPermissions().allowCopyBy(gAgent.getID()))
{
copyable_items.put(item);
rv = ACCEPT_YES_SINGLE;
}
}
- if((rv >= ACCEPT_YES_COPY_SINGLE) && drop)
+ if ((rv >= ACCEPT_YES_COPY_SINGLE) && drop)
{
createContainer(copyable_items, NULL);
}
@@ -2800,20 +2806,20 @@ LLInventoryObject* LLToolDragAndDrop::locateInventory(
{
item = NULL;
cat = NULL;
- if(mCargoIDs.empty()) return NULL;
- if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))
+ if (mCargoIDs.empty()) return NULL;
+ if ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))
{
// The object should be in user inventory.
item = (LLViewerInventoryItem*)gInventory.getItem(mCargoIDs[mCurItemIndex]);
cat = (LLViewerInventoryCategory*)gInventory.getCategory(mCargoIDs[mCurItemIndex]);
}
- else if(mSource == SOURCE_WORLD)
+ else if (mSource == SOURCE_WORLD)
{
// This object is in some task inventory somewhere.
LLViewerObject* obj = gObjectList.findObject(mSourceID);
- if(obj)
+ if (obj)
{
- if((mCargoTypes[mCurItemIndex] == DAD_CATEGORY)
+ if ((mCargoTypes[mCurItemIndex] == DAD_CATEGORY)
|| (mCargoTypes[mCurItemIndex] == DAD_ROOT_CATEGORY))
{
cat = (LLViewerInventoryCategory*)obj->getInventoryObject(mCargoIDs[mCurItemIndex]);
@@ -2824,16 +2830,16 @@ LLInventoryObject* LLToolDragAndDrop::locateInventory(
}
}
}
- else if(mSource == SOURCE_NOTECARD)
+ else if (mSource == SOURCE_NOTECARD)
{
LLPreviewNotecard* preview = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", mSourceID);
- if(preview)
+ if (preview)
{
item = (LLViewerInventoryItem*)preview->getDragItem();
}
}
- if(item) return item;
- if(cat) return cat;
+ if (item) return item;
+ if (cat) return cat;
return NULL;
}
@@ -2841,8 +2847,8 @@ LLInventoryObject* LLToolDragAndDrop::locateInventory(
LLInventoryObject* LLToolDragAndDrop::locateMultipleInventory(LLViewerInventoryCategory::cat_array_t& cats,
LLViewerInventoryItem::item_array_t& items)
{
- if(mCargoIDs.count() == 0) return NULL;
- if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))
+ if (mCargoIDs.count() == 0) return NULL;
+ if ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))
{
// The object should be in user inventory.
for (S32 i = 0; i < mCargoIDs.count(); i++)
@@ -2859,13 +2865,13 @@ LLInventoryObject* LLToolDragAndDrop::locateMultipleInventory(LLViewerInventoryC
}
}
}
- else if(mSource == SOURCE_WORLD)
+ else if (mSource == SOURCE_WORLD)
{
// This object is in some task inventory somewhere.
LLViewerObject* obj = gObjectList.findObject(mSourceID);
- if(obj)
+ if (obj)
{
- if((mCargoType == DAD_CATEGORY)
+ if ((mCargoType == DAD_CATEGORY)
|| (mCargoType == DAD_ROOT_CATEGORY))
{
// The object should be in user inventory.
@@ -2891,17 +2897,17 @@ LLInventoryObject* LLToolDragAndDrop::locateMultipleInventory(LLViewerInventoryC
}
}
}
- else if(mSource == SOURCE_NOTECARD)
+ else if (mSource == SOURCE_NOTECARD)
{
LLPreviewNotecard* card;
card = (LLPreviewNotecard*)LLPreview::find(mSourceID);
- if(card)
+ if (card)
{
items.put((LLInventoryItem*)card->getDragItem());
}
}
- if(items.count()) return items[0];
- if(cats.count()) return cats[0];
+ if (items.count()) return items[0];
+ if (cats.count()) return cats[0];
return NULL;
}
*/
diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h
index 79b2bc32a3..85d003e5fc 100644
--- a/indra/newview/lltooldraganddrop.h
+++ b/indra/newview/lltooldraganddrop.h
@@ -81,7 +81,7 @@ public:
const LLUUID& source_id = LLUUID::null,
const LLUUID& object_id = LLUUID::null);
void beginMultiDrag(const std::vector<EDragAndDropType> types,
- const std::vector<LLUUID>& cargo_ids,
+ const uuid_vec_t& cargo_ids,
ESource source,
const LLUUID& source_id = LLUUID::null);
void endDrag();
@@ -125,7 +125,7 @@ protected:
std::vector<EDragAndDropType> mCargoTypes;
//void* mCargoData;
- std::vector<LLUUID> mCargoIDs;
+ uuid_vec_t mCargoIDs;
ESource mSource;
LLUUID mSourceID;
LLUUID mObjectID;
@@ -227,6 +227,10 @@ protected:
LLInventoryCategory* cat,
const LLUUID &im_session_id = LLUUID::null);
+ // log "Inventory item offered" to IM
+ static void logInventoryOffer(const LLUUID& to_agent,
+ const LLUUID &im_session_id = LLUUID::null);
+
public:
// helper functions
static BOOL isInventoryDropAcceptable(LLViewerObject* obj, LLInventoryItem* item) { return (ACCEPT_YES_COPY_SINGLE <= willObjectAcceptInventory(obj, item)); }
diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp
index 2320ae57df..032714cabf 100644
--- a/indra/newview/lltoolfocus.cpp
+++ b/indra/newview/lltoolfocus.cpp
@@ -42,6 +42,7 @@
// Viewer includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llbutton.h"
#include "llviewercontrol.h"
#include "lldrawable.h"
@@ -167,19 +168,17 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info)
}
}
- if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() )
+ if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() )
{
BOOL good_customize_avatar_hit = FALSE;
if( hit_obj )
{
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- if( hit_obj == avatar)
+ if (isAgentAvatarValid() && (hit_obj == gAgentAvatarp))
{
// It's you
good_customize_avatar_hit = TRUE;
}
- else
- if( hit_obj->isAttachment() && hit_obj->permYouOwner() )
+ else if (hit_obj->isAttachment() && hit_obj->permYouOwner())
{
// It's an attachment that you're wearing
good_customize_avatar_hit = TRUE;
@@ -207,23 +206,23 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info)
// ...clicked on a world object, so focus at its position
if (!hit_obj->isHUDAttachment())
{
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
- gAgent.setFocusGlobal(pick_info);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusGlobal(pick_info);
}
}
else if (!pick_info.mPosGlobal.isExactlyZero())
{
// Hit the ground
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
- gAgent.setFocusGlobal(pick_info);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusGlobal(pick_info);
}
if (!(pick_info.mKeyMask & MASK_ALT) &&
- gAgent.cameraThirdPerson() &&
+ gAgentCamera.cameraThirdPerson() &&
gViewerWindow->getLeftMouseDown() &&
!gSavedSettings.getBOOL("FreezeTime") &&
- (hit_obj == gAgent.getAvatarObject() ||
- (hit_obj && hit_obj->isAttachment() && LLVOAvatar::findAvatarFromAttachment(hit_obj)->isSelf())))
+ (hit_obj == gAgentAvatarp ||
+ (hit_obj && hit_obj->isAttachment() && LLVOAvatar::findAvatarFromAttachment(hit_obj)->isSelf())))
{
LLToolCamera::getInstance()->mMouseSteering = TRUE;
}
@@ -232,14 +231,14 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info)
LLToolCamera::getInstance()->mValidClickPoint = TRUE;
- if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() )
+ if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() )
{
- gAgent.setFocusOnAvatar(FALSE, FALSE);
+ gAgentCamera.setFocusOnAvatar(FALSE, FALSE);
- LLVector3d cam_pos = gAgent.getCameraPositionGlobal();
- cam_pos -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * gAgent.calcCustomizeAvatarUIOffset( cam_pos ));
+ LLVector3d cam_pos = gAgentCamera.getCameraPositionGlobal();
+ cam_pos -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * gAgentCamera.calcCustomizeAvatarUIOffset( cam_pos ));
- gAgent.setCameraPosAndFocusGlobal( cam_pos, pick_info.mPosGlobal, pick_info.mObjectID);
+ gAgentCamera.setCameraPosAndFocusGlobal( cam_pos, pick_info.mPosGlobal, pick_info.mObjectID);
}
}
@@ -280,10 +279,10 @@ BOOL LLToolCamera::handleMouseUp(S32 x, S32 y, MASK mask)
{
if (mValidClickPoint)
{
- if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() )
+ if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() )
{
LLCoordGL mouse_pos;
- LLVector3 focus_pos = gAgent.getPosAgentFromGlobal(gAgent.getFocusGlobal());
+ LLVector3 focus_pos = gAgent.getPosAgentFromGlobal(gAgentCamera.getFocusGlobal());
BOOL success = LLViewerCamera::getInstance()->projectPosAgentToScreen(focus_pos, mouse_pos);
if (success)
{
@@ -369,12 +368,12 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
if (dx != 0)
{
- gAgent.cameraOrbitAround( -dx * RADIANS_PER_PIXEL );
+ gAgentCamera.cameraOrbitAround( -dx * RADIANS_PER_PIXEL );
}
if (dy != 0)
{
- gAgent.cameraOrbitOver( -dy * RADIANS_PER_PIXEL );
+ gAgentCamera.cameraOrbitOver( -dy * RADIANS_PER_PIXEL );
}
gViewerWindow->moveCursorToCenter();
@@ -388,8 +387,8 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
// Pan tool
if (hasMouseCapture())
{
- LLVector3d camera_to_focus = gAgent.getCameraPositionGlobal();
- camera_to_focus -= gAgent.getFocusGlobal();
+ LLVector3d camera_to_focus = gAgentCamera.getCameraPositionGlobal();
+ camera_to_focus -= gAgentCamera.getFocusGlobal();
F32 dist = (F32) camera_to_focus.normVec();
// Fudge factor for pan
@@ -397,12 +396,12 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
if (dx != 0)
{
- gAgent.cameraPanLeft( dx * meters_per_pixel );
+ gAgentCamera.cameraPanLeft( dx * meters_per_pixel );
}
if (dy != 0)
{
- gAgent.cameraPanUp( -dy * meters_per_pixel );
+ gAgentCamera.cameraPanUp( -dy * meters_per_pixel );
}
gViewerWindow->moveCursorToCenter();
@@ -419,7 +418,7 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
if (dx != 0)
{
- gAgent.cameraOrbitAround( -dx * RADIANS_PER_PIXEL );
+ gAgentCamera.cameraOrbitAround( -dx * RADIANS_PER_PIXEL );
}
const F32 IN_FACTOR = 0.99f;
@@ -428,11 +427,11 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
{
if (mMouseSteering)
{
- gAgent.cameraOrbitOver( -dy * RADIANS_PER_PIXEL );
+ gAgentCamera.cameraOrbitOver( -dy * RADIANS_PER_PIXEL );
}
else
{
- gAgent.cameraZoomIn( pow( IN_FACTOR, dy ) );
+ gAgentCamera.cameraZoomIn( pow( IN_FACTOR, dy ) );
}
}
diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp
index d837a334f1..04d873f91b 100644
--- a/indra/newview/lltoolgrab.cpp
+++ b/indra/newview/lltoolgrab.cpp
@@ -46,6 +46,7 @@
// newview headers
#include "llagent.h"
+#include "llagentcamera.h"
#include "lldrawable.h"
#include "llfloatertools.h"
#include "llhudeffect.h"
@@ -225,7 +226,7 @@ BOOL LLToolGrab::handleObjectHit(const LLPickInfo& info)
// non-touchable objects. If it has a touch handler, we
// do grab it (so llDetectedGrab works), but movement is
// blocked on the server side. JC
- if (gAgent.cameraMouselook())
+ if (gAgentCamera.cameraMouselook())
{
mMode = GRAB_LOCKED;
}
@@ -285,8 +286,8 @@ BOOL LLToolGrab::handleObjectHit(const LLPickInfo& info)
LLVector3 local_edit_point = gAgent.getPosAgentFromGlobal(info.mPosGlobal);
local_edit_point -= edit_object->getPositionAgent();
local_edit_point = local_edit_point * ~edit_object->getRenderRotation();
- gAgent.setPointAt(POINTAT_TARGET_GRAB, edit_object, local_edit_point );
- gAgent.setLookAt(LOOKAT_TARGET_SELECT, edit_object, local_edit_point );
+ gAgentCamera.setPointAt(POINTAT_TARGET_GRAB, edit_object, local_edit_point );
+ gAgentCamera.setLookAt(LOOKAT_TARGET_SELECT, edit_object, local_edit_point );
}
// on transient grabs (clicks on world objects), kill the grab immediately
@@ -390,7 +391,7 @@ void LLToolGrab::startGrab()
// This planar drag starts at the grab point
mDragStartPointGlobal = grab_start_global;
- mDragStartFromCamera = grab_start_global - gAgent.getCameraPositionGlobal();
+ mDragStartFromCamera = grab_start_global - gAgentCamera.getCameraPositionGlobal();
LLMessageSystem *msg = gMessageSystem;
msg->newMessageFast(_PREHASH_ObjectGrab);
@@ -502,7 +503,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
mVerticalDragging = FALSE;
mDragStartPointGlobal = gViewerWindow->clickPointInWorldGlobal(x, y, objectp);
- mDragStartFromCamera = mDragStartPointGlobal - gAgent.getCameraPositionGlobal();
+ mDragStartFromCamera = mDragStartPointGlobal - gAgentCamera.getCameraPositionGlobal();
}
else if (!mVerticalDragging && (mask == MASK_VERTICAL) )
{
@@ -510,7 +511,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
mVerticalDragging = TRUE;
mDragStartPointGlobal = gViewerWindow->clickPointInWorldGlobal(x, y, objectp);
- mDragStartFromCamera = mDragStartPointGlobal - gAgent.getCameraPositionGlobal();
+ mDragStartFromCamera = mDragStartPointGlobal - gAgentCamera.getCameraPositionGlobal();
}
const F32 RADIANS_PER_PIXEL_X = 0.01f;
@@ -598,7 +599,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
// need to return offset from mGrabStartPoint
LLVector3d grab_point_global;
- grab_point_global = gAgent.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera;
+ grab_point_global = gAgentCamera.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera;
/* Snap to grid disabled for grab tool - very confusing
// Handle snapping to grid, but only when the tool is formally selected.
@@ -632,7 +633,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
grab_point_global = LLWorld::getInstance()->clipToVisibleRegions(mDragStartPointGlobal, grab_point_global);
// propagate constrained grab point back to grab offset
- mGrabHiddenOffsetFromCamera = grab_point_global - gAgent.getCameraPositionGlobal();
+ mGrabHiddenOffsetFromCamera = grab_point_global - gAgentCamera.getCameraPositionGlobal();
// Handle auto-rotation at screen edge.
LLVector3 grab_pos_agent = gAgent.getPosAgentFromGlobal( grab_point_global );
@@ -646,24 +647,24 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
// ...build mode moves camera about focus point
if (grab_center_gl.mX < ROTATE_H_MARGIN)
{
- if (gAgent.getFocusOnAvatar())
+ if (gAgentCamera.getFocusOnAvatar())
{
gAgent.yaw(rotate_angle);
}
else
{
- gAgent.cameraOrbitAround(rotate_angle);
+ gAgentCamera.cameraOrbitAround(rotate_angle);
}
}
else if (grab_center_gl.mX > gViewerWindow->getWorldViewWidthScaled() - ROTATE_H_MARGIN)
{
- if (gAgent.getFocusOnAvatar())
+ if (gAgentCamera.getFocusOnAvatar())
{
gAgent.yaw(-rotate_angle);
}
else
{
- gAgent.cameraOrbitAround(-rotate_angle);
+ gAgentCamera.cameraOrbitAround(-rotate_angle);
}
}
@@ -705,17 +706,17 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
// once we've initiated a drag, lock the camera down
if (mHasMoved)
{
- if (!gAgent.cameraMouselook() &&
+ if (!gAgentCamera.cameraMouselook() &&
!objectp->isHUDAttachment() &&
- objectp->getRoot() == gAgent.getAvatarObject()->getRoot())
+ objectp->getRoot() == gAgentAvatarp->getRoot())
{
// force focus to point in space where we were looking previously
- gAgent.setFocusGlobal(gAgent.calcFocusPositionTargetGlobal(), LLUUID::null);
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusGlobal(gAgentCamera.calcFocusPositionTargetGlobal(), LLUUID::null);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
}
else
{
- gAgent.clearFocusObject();
+ gAgentCamera.clearFocusObject();
}
}
@@ -814,7 +815,7 @@ void LLToolGrab::handleHoverNonPhysical(S32 x, S32 y, MASK mask)
}
// need to return offset from mGrabStartPoint
- LLVector3d grab_point_global = gAgent.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera;
+ LLVector3d grab_point_global = gAgentCamera.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera;
grab_pos_region = objectp->getRegion()->getPosRegionFromGlobal( grab_point_global );
}
@@ -872,8 +873,8 @@ void LLToolGrab::handleHoverNonPhysical(S32 x, S32 y, MASK mask)
LLVector3 local_edit_point = pick.mIntersection;
local_edit_point -= objectp->getPositionAgent();
local_edit_point = local_edit_point * ~objectp->getRenderRotation();
- gAgent.setPointAt(POINTAT_TARGET_GRAB, objectp, local_edit_point );
- gAgent.setLookAt(LOOKAT_TARGET_SELECT, objectp, local_edit_point );
+ gAgentCamera.setPointAt(POINTAT_TARGET_GRAB, objectp, local_edit_point );
+ gAgentCamera.setLookAt(LOOKAT_TARGET_SELECT, objectp, local_edit_point );
}
@@ -892,7 +893,7 @@ void LLToolGrab::handleHoverInactive(S32 x, S32 y, MASK mask)
// Only works in fullscreen
if (gSavedSettings.getBOOL("WindowFullScreen"))
{
- if (gAgent.cameraThirdPerson() )
+ if (gAgentCamera.cameraThirdPerson() )
{
if (x == 0)
{
@@ -994,7 +995,7 @@ void LLToolGrab::onMouseCaptureLost()
return;
}
// First, fix cursor placement
- if( !gAgent.cameraMouselook()
+ if( !gAgentCamera.cameraMouselook()
&& (GRAB_ACTIVE_CENTER == mMode))
{
if (objectp->isHUDAttachment())
@@ -1035,8 +1036,8 @@ void LLToolGrab::onMouseCaptureLost()
mGrabPick.mObjectID.setNull();
LLSelectMgr::getInstance()->updateSelectionCenter();
- gAgent.setPointAt(POINTAT_TARGET_CLEAR);
- gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
+ gAgentCamera.setPointAt(POINTAT_TARGET_CLEAR);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
dialog_refresh_all();
}
@@ -1128,7 +1129,7 @@ LLVector3d LLToolGrab::getGrabPointGlobal()
case GRAB_ACTIVE_CENTER:
case GRAB_NONPHYSICAL:
case GRAB_LOCKED:
- return gAgent.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera;
+ return gAgentCamera.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera;
case GRAB_NOOBJECT:
case GRAB_INACTIVE:
diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp
index a441d653c7..c815f1e96a 100644
--- a/indra/newview/lltoolgun.cpp
+++ b/indra/newview/lltoolgun.cpp
@@ -36,6 +36,7 @@
#include "llviewerwindow.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "llsky.h"
#include "llappviewer.h"
@@ -83,7 +84,7 @@ BOOL LLToolGun::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)
{
- if( gAgent.cameraMouselook() && mIsSelected )
+ if( gAgentCamera.cameraMouselook() && mIsSelected )
{
const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f;
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
index fd12163fd3..a8696c22ef 100644
--- a/indra/newview/lltoolmgr.cpp
+++ b/indra/newview/lltoolmgr.cpp
@@ -56,6 +56,7 @@
#include "lltoolobjpicker.h"
#include "lltoolpipette.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "llviewerjoystick.h"
#include "llviewermenu.h"
@@ -262,7 +263,7 @@ void LLToolMgr::toggleBuildMode()
else
{
// manually disable edit mode, but do not affect the camera
- gAgent.resetView(false);
+ gAgentCamera.resetView(false);
LLFloaterReg::hideInstance("build");
gViewerWindow->showCursor();
}
@@ -271,7 +272,7 @@ void LLToolMgr::toggleBuildMode()
}
else
{
- ECameraMode camMode = gAgent.getCameraMode();
+ ECameraMode camMode = gAgentCamera.getCameraMode();
if (CAMERA_MODE_MOUSELOOK == camMode || CAMERA_MODE_CUSTOMIZE_AVATAR == camMode)
{
// pull the user out of mouselook or appearance mode when entering build mode
@@ -286,13 +287,13 @@ void LLToolMgr::toggleBuildMode()
handle_toggle_flycam();
}
- if (gAgent.getFocusOnAvatar())
+ if (gAgentCamera.getFocusOnAvatar())
{
// zoom in if we're looking at the avatar
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
- gAgent.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis()));
- gAgent.cameraZoomIn(0.666f);
- gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD );
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis()));
+ gAgentCamera.cameraZoomIn(0.666f);
+ gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
}
}
@@ -303,7 +304,7 @@ void LLToolMgr::toggleBuildMode()
// Could be first use
//LLFirstUse::useBuild();
- gAgent.resetView(false);
+ gAgentCamera.resetView(false);
// avoid spurious avatar movements
LLViewerJoystick::getInstance()->setNeedsReset();
@@ -317,7 +318,7 @@ bool LLToolMgr::inBuildMode()
// cameraMouselook() actually starts returning true. Also, appearance edit
// sets build mode to true, so let's exclude that.
bool b=(inEdit()
- && !gAgent.cameraMouselook()
+ && !gAgentCamera.cameraMouselook()
&& mCurrentToolset != gFaceEditToolset);
return b;
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
index 4fb75f7a49..969049ee65 100644
--- a/indra/newview/lltoolmorph.cpp
+++ b/indra/newview/lltoolmorph.cpp
@@ -139,22 +139,20 @@ void LLVisualParamHint::requestHintUpdates( LLVisualParamHint* exception1, LLVis
BOOL LLVisualParamHint::needsRender()
{
- return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgent.getAvatarObject()->mAppearanceAnimating && mAllowsUpdates;
+ return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgentAvatarp->mAppearanceAnimating && mAllowsUpdates;
}
void LLVisualParamHint::preRender(BOOL clear_depth)
{
- LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
-
mLastParamWeight = mVisualParam->getWeight();
mVisualParam->setWeight(mVisualParamWeight, FALSE);
- avatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE);
- avatarp->setVisualParamWeight("Blink_Left", 0.f);
- avatarp->setVisualParamWeight("Blink_Right", 0.f);
- avatarp->updateComposites();
- avatarp->updateVisualParams();
- avatarp->updateGeometry(avatarp->mDrawable);
- avatarp->updateLOD();
+ gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE);
+ gAgentAvatarp->setVisualParamWeight("Blink_Left", 0.f);
+ gAgentAvatarp->setVisualParamWeight("Blink_Right", 0.f);
+ gAgentAvatarp->updateComposites();
+ gAgentAvatarp->updateVisualParams();
+ gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable);
+ gAgentAvatarp->updateLOD();
LLViewerDynamicTexture::preRender(clear_depth);
}
@@ -165,15 +163,17 @@ void LLVisualParamHint::preRender(BOOL clear_depth)
BOOL LLVisualParamHint::render()
{
LLVisualParamReset::sDirty = TRUE;
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
+
+ gGL.pushUIMatrix();
+ gGL.loadUIIdentity();
glMatrixMode(GL_PROJECTION);
- glPushMatrix();
+ gGL.pushMatrix();
glLoadIdentity();
glOrtho(0.0f, mFullWidth, 0.0f, mFullHeight, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
+ gGL.pushMatrix();
glLoadIdentity();
LLGLSUIDefault gls_ui;
@@ -181,10 +181,10 @@ BOOL LLVisualParamHint::render()
mBackgroundp->draw(0, 0, mFullWidth, mFullHeight);
glMatrixMode(GL_PROJECTION);
- glPopMatrix();
+ gGL.popMatrix();
glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
+ gGL.popMatrix();
mNeedsUpdate = FALSE;
mIsVisible = TRUE;
@@ -193,7 +193,7 @@ BOOL LLVisualParamHint::render()
const std::string& cam_target_mesh_name = mVisualParam->getCameraTargetName();
if( !cam_target_mesh_name.empty() )
{
- cam_target_joint = (LLViewerJointMesh*)avatarp->getJoint( cam_target_mesh_name );
+ cam_target_joint = (LLViewerJointMesh*)gAgentAvatarp->getJoint( cam_target_mesh_name );
}
if( !cam_target_joint )
{
@@ -201,11 +201,11 @@ BOOL LLVisualParamHint::render()
}
if( !cam_target_joint )
{
- cam_target_joint = (LLViewerJointMesh*)avatarp->getJoint("mHead");
+ cam_target_joint = (LLViewerJointMesh*)gAgentAvatarp->getJoint("mHead");
}
LLQuaternion avatar_rotation;
- LLJoint* root_joint = avatarp->getRootJoint();
+ LLJoint* root_joint = gAgentAvatarp->getRootJoint();
if( root_joint )
{
avatar_rotation = root_joint->getWorldRotation();
@@ -233,20 +233,21 @@ BOOL LLVisualParamHint::render()
LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, FALSE);
- if (avatarp->mDrawable.notNull())
+ if (gAgentAvatarp->mDrawable.notNull())
{
- LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool();
+ LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)gAgentAvatarp->mDrawable->getFace(0)->getPool();
LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE);
gGL.setAlphaRejectSettings(LLRender::CF_ALWAYS);
gGL.setSceneBlendType(LLRender::BT_REPLACE);
- avatarPoolp->renderAvatars(avatarp); // renders only one avatar
+ avatarPoolp->renderAvatars(gAgentAvatarp); // renders only one avatar
gGL.setSceneBlendType(LLRender::BT_ALPHA);
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
- avatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight);
+ gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight);
mVisualParam->setWeight(mLastParamWeight, FALSE);
gGL.color4f(1,1,1,1);
mGLTexturep->setGLTextureCreated(true);
+ gGL.popUIMatrix();
return TRUE;
}
@@ -293,10 +294,9 @@ BOOL LLVisualParamReset::render()
{
if (sDirty)
{
- LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
- avatarp->updateComposites();
- avatarp->updateVisualParams();
- avatarp->updateGeometry(avatarp->mDrawable);
+ gAgentAvatarp->updateComposites();
+ gAgentAvatarp->updateVisualParams();
+ gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable);
sDirty = FALSE;
}
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index fb78b6a415..84c463495b 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -39,6 +39,7 @@
#include "llparcel.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "llfocusmgr.h"
//#include "llfirstuse.h"
@@ -204,15 +205,15 @@ BOOL LLToolPie::pickLeftMouseDownCallback()
// touch behavior down below...
break;
case CLICK_ACTION_SIT:
-
- if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->isSitting())) // agent not already sitting
{
- handle_object_sit_or_stand();
- // put focus in world when sitting on an object
- gFocusMgr.setKeyboardFocus(NULL);
- return TRUE;
- } // else nothing (fall through to touch)
-
+ if (isAgentAvatarValid() && !gAgentAvatarp->isSitting()) // agent not already sitting
+ {
+ handle_object_sit_or_stand();
+ // put focus in world when sitting on an object
+ gFocusMgr.setKeyboardFocus(NULL);
+ return TRUE;
+ } // else nothing (fall through to touch)
+ }
case CLICK_ACTION_PAY:
if ((object && object->flagTakesMoney())
|| (parent && parent->flagTakesMoney()))
@@ -263,7 +264,7 @@ BOOL LLToolPie::pickLeftMouseDownCallback()
if (object)
{
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
LLBBox bbox = object->getBoundingBoxAgent() ;
F32 angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getAspect() > 1.f ? LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect() : LLViewerCamera::getInstance()->getView());
@@ -273,7 +274,7 @@ BOOL LLToolPie::pickLeftMouseDownCallback()
obj_to_cam.normVec();
LLVector3d object_center_global = gAgent.getPosGlobalFromAgent(bbox.getCenterAgent());
- gAgent.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance),
+ gAgentCamera.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance),
object_center_global,
mPick.mObjectID );
}
@@ -329,14 +330,14 @@ BOOL LLToolPie::pickLeftMouseDownCallback()
}
object = (LLViewerObject*)object->getParent();
}
- if (object && object == gAgent.getAvatarObject())
+ if (object && object == gAgentAvatarp)
{
// we left clicked on avatar, switch to focus mode
LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
gViewerWindow->hideCursor();
LLToolCamera::getInstance()->setMouseCapture(TRUE);
LLToolCamera::getInstance()->pickCallback(mPick);
- gAgent.setFocusOnAvatar(TRUE, TRUE);
+ gAgentCamera.setFocusOnAvatar(TRUE, TRUE);
return TRUE;
}
@@ -410,26 +411,28 @@ ECursorType cursor_from_object(LLViewerObject* object)
switch(click_action)
{
case CLICK_ACTION_SIT:
- if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->isSitting())) // not already sitting?
{
- cursor = UI_CURSOR_HAND;
+ if (isAgentAvatarValid() && !gAgentAvatarp->isSitting()) // not already sitting?
+ {
+ cursor = UI_CURSOR_TOOLSIT;
+ }
}
break;
case CLICK_ACTION_BUY:
- cursor = UI_CURSOR_HAND;
+ cursor = UI_CURSOR_TOOLBUY;
break;
case CLICK_ACTION_OPEN:
// Open always opens the parent.
if (parent && parent->allowOpen())
{
- cursor = UI_CURSOR_HAND;
+ cursor = UI_CURSOR_TOOLOPEN;
}
break;
case CLICK_ACTION_PAY:
if ((object && object->flagTakesMoney())
|| (parent && parent->flagTakesMoney()))
{
- cursor = UI_CURSOR_HAND;
+ cursor = UI_CURSOR_TOOLBUY;
}
break;
case CLICK_ACTION_ZOOM:
@@ -496,6 +499,8 @@ void LLToolPie::selectionPropertiesReceived()
BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE);
+ // perform a separate pick that detects transparent objects since they respond to 1-click actions
+ LLPickInfo click_action_pick = gViewerWindow->pickImmediate(x, y, TRUE);
// Show screen-space highlight glow effect
bool show_highlight = false;
@@ -507,10 +512,11 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
parent = object->getRootEdit();
}
- if (object && useClickAction(mask, object, parent))
+ LLViewerObject* click_action_object = click_action_pick.getObject();
+ if (click_action_object && useClickAction(mask, click_action_object, click_action_object->getRootEdit()))
{
show_highlight = true;
- ECursorType cursor = cursor_from_object(object);
+ ECursorType cursor = cursor_from_object(click_action_object);
gViewerWindow->setCursor(cursor);
lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
}
@@ -592,7 +598,7 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
mGrabMouseButtonDown = FALSE;
LLToolMgr::getInstance()->clearTransientTool();
- gAgent.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on
+ gAgentCamera.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on
return LLTool::handleMouseUp(x, y, mask);
}
@@ -901,6 +907,16 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
|| !existing_inspector->getVisible()
|| existing_inspector->getKey()["object_id"].asUUID() != hover_object->getID()))
{
+
+ // Add price to tooltip for items on sale
+ bool for_sale = for_sale_selection(nodep);
+ if(for_sale)
+ {
+ LLStringUtil::format_map_t args;
+ args["[PRICE]"] = llformat ("%d", nodep->mSaleInfo.getSalePrice());
+ tooltip_msg.append(LLTrans::getString("TooltipPrice", args) );
+ }
+
if (nodep->mName.empty())
{
tooltip_msg.append(LLTrans::getString("TooltipNoName"));
@@ -931,7 +947,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
if (media_impl.notNull() && (media_impl->hasMedia()))
{
is_media_displaying = true;
- LLStringUtil::format_map_t args;
+ //LLStringUtil::format_map_t args;
media_plugin = media_impl->getMediaPlugin();
if(media_plugin)
@@ -955,10 +971,13 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
}
}
- // Avoid showing tip over media that's displaying
+
+ // Avoid showing tip over media that's displaying unless it's for sale
// also check the primary node since sometimes it can have an action even though
// the root node doesn't
- bool needs_tip = !is_media_displaying &&
+
+ bool needs_tip = (!is_media_displaying ||
+ for_sale) &&
(has_media ||
needs_tooltip(nodep) ||
needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode()));
diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp
index 612bcc03bd..91f01f0b36 100644
--- a/indra/newview/lltoolplacer.cpp
+++ b/indra/newview/lltoolplacer.cpp
@@ -56,11 +56,13 @@
#include "llvolumemessage.h"
#include "llhudmanager.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llaudioengine.h"
#include "llhudeffecttrail.h"
#include "llviewerobjectlist.h"
#include "llviewercamera.h"
#include "llviewerstats.h"
+#include "llvoavatarself.h"
// linden library headers
#include "llprimitive.h"
@@ -120,7 +122,7 @@ BOOL LLToolPlacer::raycastForNewObjPos( S32 x, S32 y, LLViewerObject** hit_obj,
}
// Make sure the surface isn't too far away.
- LLVector3d ray_start_global = gAgent.getCameraPositionGlobal();
+ LLVector3d ray_start_global = gAgentCamera.getCameraPositionGlobal();
F32 dist_to_surface_sq = (F32)((surface_pos_global - ray_start_global).magVecSquared());
if( dist_to_surface_sq > (max_dist_from_camera * max_dist_from_camera) )
{
@@ -432,7 +434,7 @@ BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics )
// VEFFECT: AddObject
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE);
- effectp->setSourceObject((LLViewerObject*)gAgent.getAvatarObject());
+ effectp->setSourceObject((LLViewerObject*)gAgentAvatarp);
effectp->setPositionGlobal(regionp->getPosGlobalFromRegion(ray_end_region));
effectp->setDuration(LL_HUD_DUR_SHORT);
effectp->setColor(LLColor4U(gAgent.getEffectColor()));
diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp
index 97e2865179..2065ba1791 100644
--- a/indra/newview/lltoolselect.cpp
+++ b/indra/newview/lltoolselect.cpp
@@ -35,6 +35,7 @@
#include "lltoolselect.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "lldrawable.h"
#include "llmanip.h"
@@ -167,9 +168,9 @@ LLObjectSelectionHandle LLToolSelect::handleObjectSelection(const LLPickInfo& pi
LLSelectMgr::getInstance()->setAgentHUDZoom(target_zoom, current_zoom);
}
- if (!gAgent.getFocusOnAvatar() && // if camera not glued to avatar
- LLVOAvatar::findAvatarFromAttachment(object) != gAgent.getAvatarObject() && // and it's not one of your attachments
- object != gAgent.getAvatarObject()) // and it's not you
+ if (!gAgentCamera.getFocusOnAvatar() && // if camera not glued to avatar
+ LLVOAvatar::findAvatarFromAttachment(object) != gAgentAvatarp && // and it's not one of your attachments
+ object != gAgentAvatarp) // and it's not you
{
// have avatar turn to face the selected object(s)
LLVector3d selection_center = LLSelectMgr::getInstance()->getSelectionCenterGlobal();
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 407cc23d0d..cc074287c4 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -39,6 +39,7 @@
#include "llgl.h"
#include "llrender.h"
#include "llinventory.h"
+#include "llinventorydefines.h"
#include "llpointer.h"
#include "llstring.h"
#include "lluuid.h"
@@ -50,6 +51,7 @@
#include "llappviewer.h"
#include "lltracker.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llcallingcard.h"
#include "llfloaterworldmap.h"
#include "llhudtext.h"
@@ -480,14 +482,14 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
const std::string& label )
{
sCheesyBeacon = gSavedSettings.getBOOL("CheesyBeacon");
- LLVector3d to_vec = pos_global - gAgent.getCameraPositionGlobal();
+ LLVector3d to_vec = pos_global - gAgentCamera.getCameraPositionGlobal();
F32 dist = (F32)to_vec.magVec();
F32 color_frac = 1.f;
if (dist > 0.99f * LLViewerCamera::getInstance()->getFar())
{
color_frac = 0.4f;
- // pos_global = gAgent.getCameraPositionGlobal() + 0.99f*(LLViewerCamera::getInstance()->getFar()/dist)*to_vec;
+ // pos_global = gAgentCamera.getCameraPositionGlobal() + 0.99f*(LLViewerCamera::getInstance()->getFar()/dist)*to_vec;
}
else
{
@@ -741,10 +743,10 @@ void LLTracker::setLandmarkVisited()
LLInventoryItem* i = gInventory.getItem( mTrackedLandmarkItemID );
LLViewerInventoryItem* item = (LLViewerInventoryItem*)i;
if ( item
- && !(item->getFlags()&LLInventoryItem::II_FLAGS_LANDMARK_VISITED))
+ && !(item->getFlags()&LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED))
{
U32 flags = item->getFlags();
- flags |= LLInventoryItem::II_FLAGS_LANDMARK_VISITED;
+ flags |= LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED;
item->setFlags(flags);
LLMessageSystem* msg = gMessageSystem;
msg->newMessage("ChangeInventoryItemFlags");
@@ -797,7 +799,7 @@ void LLTracker::cacheLandmarkPosition()
mLandmarkHasBeenVisited = FALSE;
LLInventoryItem* item = gInventory.getItem(mTrackedLandmarkItemID);
if ( item
- && item->getFlags()&LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
+ && item->getFlags()&LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED)
{
mLandmarkHasBeenVisited = TRUE;
}
diff --git a/indra/newview/lluploaddialog.cpp b/indra/newview/lluploaddialog.cpp
index 577b5952e5..22c7d670f8 100644
--- a/indra/newview/lluploaddialog.cpp
+++ b/indra/newview/lluploaddialog.cpp
@@ -91,7 +91,7 @@ LLUploadDialog::LLUploadDialog( const std::string& msg)
setMessage(msg);
// The dialog view is a root view
- gFocusMgr.setTopCtrl( this );
+ gViewerWindow->addPopup(this);
}
void LLUploadDialog::setMessage( const std::string& msg)
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index 0b6bd4b401..b88069cd48 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -180,6 +180,16 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, bool right_mous
return false;
}
+ std::string sim_string = LLSLURL::stripProtocol(url);
+ std::string region_name;
+ S32 x = 128;
+ S32 y = 128;
+ S32 z = 0;
+ if (! LLURLSimString::parse(sim_string, &region_name, &x, &y, &z))
+ {
+ return false;
+ }
+
// Before we're logged in, need to update the startup screen
// to tell the user where they are going.
if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
@@ -194,22 +204,15 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, bool right_mous
return true;
}
- std::string sim_string = LLSLURL::stripProtocol(url);
- std::string region_name;
- S32 x = 128;
- S32 y = 128;
- S32 z = 0;
- LLURLSimString::parse(sim_string, &region_name, &x, &y, &z);
-
// LLFloaterURLDisplay functionality moved to LLPanelPlaces in Side Tray.
//LLFloaterURLDisplay* url_displayp = LLFloaterReg::getTypedInstance<LLFloaterURLDisplay>("preview_url",LLSD());
//if(url_displayp) url_displayp->setName(region_name);
// Request a region handle by name
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
- LLURLDispatcherImpl::regionNameCallback,
- url,
- false); // don't teleport
+ LLURLDispatcherImpl::regionNameCallback,
+ url,
+ false); // don't teleport
return true;
}
@@ -221,34 +224,11 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const std::strin
S32 x = 128;
S32 y = 128;
S32 z = 0;
- LLURLSimString::parse(sim_string, &region_name, &x, &y, &z);
-
- LLVector3 local_pos;
- local_pos.mV[VX] = (F32)x;
- local_pos.mV[VY] = (F32)y;
- local_pos.mV[VZ] = (F32)z;
-
- // determine whether the point is in this region
- if ((x >= 0) && (x < REGION_WIDTH_UNITS) &&
- (y >= 0) && (y < REGION_WIDTH_UNITS))
+ if (LLURLSimString::parse(sim_string, &region_name, &x, &y, &z))
{
- // if so, we're done
regionHandleCallback(region_handle, url, snapshot_id, teleport);
}
-
- else
- {
- // otherwise find the new region from the location
-
- // add the position to get the new region
- LLVector3d global_pos = from_region_handle(region_handle) + LLVector3d(local_pos);
-
- U64 new_region_handle = to_region_handle(global_pos);
- LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle,
- LLURLDispatcherImpl::regionHandleCallback,
- url, teleport);
- }
}
/* static */
@@ -261,17 +241,9 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const std::str
S32 z = 0;
LLURLSimString::parse(sim_string, &region_name, &x, &y, &z);
- // remap x and y to local coordinates
- S32 local_x = x % REGION_WIDTH_UNITS;
- S32 local_y = y % REGION_WIDTH_UNITS;
- if (local_x < 0)
- local_x += REGION_WIDTH_UNITS;
- if (local_y < 0)
- local_y += REGION_WIDTH_UNITS;
-
LLVector3 local_pos;
- local_pos.mV[VX] = (F32)local_x;
- local_pos.mV[VY] = (F32)local_y;
+ local_pos.mV[VX] = (F32)x;
+ local_pos.mV[VY] = (F32)y;
local_pos.mV[VZ] = (F32)z;
LLVector3d global_pos = from_region_handle(region_handle);
diff --git a/indra/newview/llurllineeditorctrl.cpp b/indra/newview/llurllineeditorctrl.cpp
index 258c3ddd75..1d2687a8c2 100644
--- a/indra/newview/llurllineeditorctrl.cpp
+++ b/indra/newview/llurllineeditorctrl.cpp
@@ -72,7 +72,7 @@ void LLURLLineEditor::cut()
if( need_to_rollback )
{
rollback.doRollback( this );
- reportBadKeystroke();
+ LLUI::reportBadKeystroke();
}
else
if( mKeystrokeCallback )
@@ -96,8 +96,3 @@ void LLURLLineEditor::copyEscapedURLToClipboard()
gClipboard.copyFromString( text_to_copy );
}
-// Makes UISndBadKeystroke sound
-void LLURLLineEditor::reportBadKeystroke()
-{
- make_ui_sound("UISndBadKeystroke");
-}
diff --git a/indra/newview/llurllineeditorctrl.h b/indra/newview/llurllineeditorctrl.h
index 618f29dfbf..ebe417e855 100644
--- a/indra/newview/llurllineeditorctrl.h
+++ b/indra/newview/llurllineeditorctrl.h
@@ -55,8 +55,6 @@ protected:
private:
// util function to escape selected text and copy it to clipboard
void copyEscapedURLToClipboard();
- // send a beep signal if keystroke is bad. As it is private at LLLineEditor we need own function
- void reportBadKeystroke();
// Helper class to do rollback if needed
class LLURLLineEditorRollback
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index 1d935f5ab8..2661c9f32b 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -34,6 +34,7 @@
#include "llaudioengine.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llappviewer.h"
#include "llvieweraudio.h"
#include "llviewercamera.h"
@@ -51,7 +52,7 @@ void init_audio()
llwarns << "Failed to create an appropriate Audio Engine" << llendl;
return;
}
- LLVector3d lpos_global = gAgent.getCameraPositionGlobal();
+ LLVector3d lpos_global = gAgentCamera.getCameraPositionGlobal();
LLVector3 lpos_global_f;
lpos_global_f.setVec(lpos_global);
@@ -180,7 +181,7 @@ void audio_update_listener()
if (gAudiop)
{
// update listener position because agent has moved
- LLVector3d lpos_global = gAgent.getCameraPositionGlobal();
+ LLVector3d lpos_global = gAgentCamera.getCameraPositionGlobal();
LLVector3 lpos_global_f;
lpos_global_f.setVec(lpos_global);
@@ -203,7 +204,7 @@ void audio_update_wind(bool force_update)
if (region)
{
static F32 last_camera_water_height = -1000.f;
- LLVector3 camera_pos = gAgent.getCameraPositionAgent();
+ LLVector3 camera_pos = gAgentCamera.getCameraPositionAgent();
F32 camera_water_height = camera_pos.mV[VZ] - region->getWaterHeight();
//
diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp
index bd4f172907..aa82c216d9 100644
--- a/indra/newview/llviewercamera.cpp
+++ b/indra/newview/llviewercamera.cpp
@@ -37,6 +37,7 @@
// Viewer includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
@@ -338,7 +339,12 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
{
// make a tiny little viewport
// anything drawn into this viewport will be "selected"
- GLint* viewport = (GLint*) gGLViewport;
+
+ GLint viewport[4];
+ viewport[0] = gViewerWindow->getWorldViewRectRaw().mLeft;
+ viewport[1] = gViewerWindow->getWorldViewRectRaw().mBottom;
+ viewport[2] = gViewerWindow->getWorldViewRectRaw().getWidth();
+ viewport[3] = gViewerWindow->getWorldViewRectRaw().getHeight();
proj_mat = gl_pick_matrix(x+width/2.f, y_from_bot+height/2.f, (GLfloat) width, (GLfloat) height, viewport);
@@ -349,7 +355,7 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
}
else
{
- z_far = gAgent.mDrawDistance;
+ z_far = gAgentCamera.mDrawDistance;
}
}
else
@@ -405,6 +411,9 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
if (for_selection && (width > 1 || height > 1))
{
+ // NB: as of this writing, i believe the code below is broken (doesn't take into account the world view, assumes entire window)
+ // however, it is also unused (the GL matricies are used for selection, (see LLCamera::sphereInFrustum())) and so i'm not
+ // comfortable hacking on it.
calculateFrustumPlanesFromWindow((F32)(x - width / 2) / (F32)gViewerWindow->getWindowWidthScaled() - 0.5f,
(F32)(y_from_bot - height / 2) / (F32)gViewerWindow->getWindowHeightScaled() - 0.5f,
(F32)(x + width / 2) / (F32)gViewerWindow->getWindowWidthScaled() - 0.5f,
diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp
index 8de87eb602..320456e1e2 100644
--- a/indra/newview/llviewerchat.cpp
+++ b/indra/newview/llviewerchat.cpp
@@ -37,6 +37,7 @@
#include "llagent.h" // gAgent
#include "lluicolortable.h"
#include "llviewercontrol.h" // gSavedSettings
+#include "llinstantmessage.h" //SYSTEM_FROM
// LLViewerChat
@@ -55,7 +56,7 @@ void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color)
r_color = LLUIColorTable::instance().getColor("SystemChatColor");
break;
case CHAT_SOURCE_AGENT:
- if (chat.mFromID.isNull())
+ if (chat.mFromID.isNull() || SYSTEM_FROM == chat.mFromName)
{
r_color = LLUIColorTable::instance().getColor("SystemChatColor");
}
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 64eabe65cf..6f037177fa 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -41,6 +41,7 @@
// For Listeners
#include "llaudioengine.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llconsole.h"
#include "lldrawpoolterrain.h"
#include "llflexibleobject.h"
@@ -73,6 +74,7 @@
#include "llnavigationbar.h"
#include "llfloatertools.h"
#include "llpaneloutfitsinventory.h"
+#include "llpanellogin.h"
#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
BOOL gHackGodmode = FALSE;
@@ -102,7 +104,7 @@ static bool handleRenderAvatarMouselookChanged(const LLSD& newvalue)
static bool handleRenderFarClipChanged(const LLSD& newvalue)
{
F32 draw_distance = (F32) newvalue.asReal();
- gAgent.mDrawDistance = draw_distance;
+ gAgentCamera.mDrawDistance = draw_distance;
LLWorld::getInstance()->setLandFarClip(draw_distance);
return true;
}
@@ -411,10 +413,8 @@ bool handleHighResSnapshotChanged(const LLSD& newvalue)
bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
{
- if(gVoiceClient)
- {
- gVoiceClient->updateSettings();
- }
+ if(LLVoiceClient::getInstance())
+ LLVoiceClient::getInstance()->updateSettings();
return true;
}
@@ -442,6 +442,12 @@ bool handleVelocityInterpolate(const LLSD& newvalue)
return true;
}
+bool handleForceShowGrid(const LLSD& newvalue)
+{
+ LLPanelLogin::refreshLocation( false );
+ return true;
+}
+
bool toggle_agent_pause(const LLSD& newvalue)
{
if ( newvalue.asBoolean() )
@@ -510,6 +516,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _2));
gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _2));
gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _2));
+ gSavedSettings.getControl("RenderUseTriStrips")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
gSavedSettings.getControl("RenderAnimateTrees")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
@@ -646,6 +653,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2));
gSavedSettings.getControl("ShowDebugAppearanceEditor")->getSignal()->connect(boost::bind(&toggle_show_appearance_editor, _2));
gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));
+ gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2));
}
#if TEST_CACHED_CONTROL
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 6c1c1d1096..823466e33e 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -38,6 +38,7 @@
#include "llrender.h"
#include "llglheaders.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "llcoord.h"
#include "llcriticaldamp.h"
@@ -174,8 +175,8 @@ void display_update_camera()
// Cut draw distance in half when customizing avatar,
// but on the viewer only.
- F32 final_far = gAgent.mDrawDistance;
- if (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode())
+ F32 final_far = gAgentCamera.mDrawDistance;
+ if (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode())
{
final_far *= 0.5f;
}
@@ -344,9 +345,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
const F32 TELEPORT_ARRIVAL_DELAY = 2.f; // Time to preload the world before raising the curtain after we've actually already arrived.
S32 attach_count = 0;
- if (gAgent.getAvatarObject())
+ if (isAgentAvatarValid())
{
- attach_count = gAgent.getAvatarObject()->getAttachmentCount();
+ attach_count = gAgentAvatarp->getAttachmentCount();
}
F32 teleport_save_time = TELEPORT_EXPIRY + TELEPORT_EXPIRY_PER_ATTACHMENT * attach_count;
F32 teleport_elapsed = gTeleportDisplayTimer.getElapsedTimeF32();
@@ -393,7 +394,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gAgent.setTeleportMessage(
LLAgent::sTeleportProgressMessages["arriving"]);
gTextureList.mForceResetTextureStats = TRUE;
- gAgent.resetView(TRUE, TRUE);
+ gAgentCamera.resetView(TRUE, TRUE);
break;
case LLAgent::TELEPORT_ARRIVING:
@@ -920,9 +921,9 @@ void render_hud_attachments()
glh::matrix4f current_mod = glh_get_current_modelview();
// clamp target zoom level to reasonable values
- gAgent.mHUDTargetZoom = llclamp(gAgent.mHUDTargetZoom, 0.1f, 1.f);
+ gAgentCamera.mHUDTargetZoom = llclamp(gAgentCamera.mHUDTargetZoom, 0.1f, 1.f);
// smoothly interpolate current zoom level
- gAgent.mHUDCurZoom = lerp(gAgent.mHUDCurZoom, gAgent.mHUDTargetZoom, LLCriticalDamp::getInterpolant(0.03f));
+ gAgentCamera.mHUDCurZoom = lerp(gAgentCamera.mHUDCurZoom, gAgentCamera.mHUDTargetZoom, LLCriticalDamp::getInterpolant(0.03f));
if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices())
{
@@ -1031,11 +1032,10 @@ LLRect get_whole_screen_region()
bool get_hud_matrices(const LLRect& screen_region, glh::matrix4f &proj, glh::matrix4f &model)
{
- LLVOAvatar* my_avatarp = gAgent.getAvatarObject();
- if (my_avatarp && my_avatarp->hasHUDAttachment())
+ if (isAgentAvatarValid() && gAgentAvatarp->hasHUDAttachment())
{
- F32 zoom_level = gAgent.mHUDCurZoom;
- LLBBox hud_bbox = my_avatarp->getHUDBBox();
+ F32 zoom_level = gAgentCamera.mHUDCurZoom;
+ LLBBox hud_bbox = gAgentAvatarp->getHUDBBox();
F32 hud_depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);
proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth);
@@ -1299,14 +1299,14 @@ void render_ui_2d()
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
// render outline for HUD
- if (gAgent.getAvatarObject() && gAgent.mHUDCurZoom < 0.98f)
+ if (isAgentAvatarValid() && gAgentCamera.mHUDCurZoom < 0.98f)
{
glPushMatrix();
S32 half_width = (gViewerWindow->getWorldViewWidthScaled() / 2);
S32 half_height = (gViewerWindow->getWorldViewHeightScaled() / 2);
glScalef(LLUI::sGLScaleFactor.mV[0], LLUI::sGLScaleFactor.mV[1], 1.f);
glTranslatef((F32)half_width, (F32)half_height, 0.f);
- F32 zoom = gAgent.mHUDCurZoom;
+ F32 zoom = gAgentCamera.mHUDCurZoom;
glScalef(zoom,zoom,1.f);
gGL.color4fv(LLColor4::white.mV);
gl_rect_2d(-half_width, half_height, half_width, -half_height, FALSE);
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 8370c98470..65e9d8971a 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -117,6 +117,7 @@
#include "llmoveview.h"
#include "llnearbychat.h"
#include "llpanelblockedlist.h"
+#include "llpanelclassified.h"
#include "llpreviewanim.h"
#include "llpreviewgesture.h"
#include "llpreviewnotecard.h"
@@ -219,6 +220,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("preview_sound", "floater_preview_sound.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewSound>, "preview");
LLFloaterReg::add("preview_texture", "floater_preview_texture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewTexture>, "preview");
LLFloaterReg::add("properties", "floater_inventory_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProperties>);
+ LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
LLFloaterReg::add("telehubs", "floater_telehub.xml",&LLFloaterReg::build<LLFloaterTelehub>);
LLFloaterReg::add("test_inspectors", "floater_test_inspectors.xml",
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index b69eaa4853..8a891b1462 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -39,15 +39,20 @@
#include "indra_constants.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewerfoldertype.h"
#include "llfolderview.h"
#include "llviewercontrol.h"
#include "llconsole.h"
+#include "llinventorydefines.h"
+#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
#include "llgesturemgr.h"
#include "llsidetray.h"
#include "llinventorybridge.h"
+#include "llinventorypanel.h"
#include "llfloaterinventory.h"
#include "llviewerassettype.h"
@@ -100,7 +105,7 @@ public:
const std::string verb = params[1].asString();
if (verb == "select")
{
- std::vector<LLUUID> items_to_open;
+ uuid_vec_t items_to_open;
items_to_open.push_back(inventory_id);
//inventory_handler is just a stub, because we don't know from who this offer
open_inventory_offer(items_to_open, "inventory_handler");
@@ -511,7 +516,7 @@ void LLViewerInventoryCategory::removeFromServer( void )
gAgent.sendReliableMessage();
}
-bool LLViewerInventoryCategory::fetchDescendents()
+bool LLViewerInventoryCategory::fetch()
{
if((VERSION_UNKNOWN == mVersion)
&& mDescendentsRequested.hasExpired()) //Expired check prevents multiple downloads.
@@ -525,7 +530,7 @@ bool LLViewerInventoryCategory::fetchDescendents()
// 2 = folders by date
// Need to mask off anything but the first bit.
// This comes from LLInventoryFilter from llfolderview.h
- U32 sort_order = gSavedSettings.getU32("InventorySortOrder") & 0x1;
+ U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1;
// *NOTE: For bug EXT-2879, originally commented out
// gAgent.getRegion()->getCapability in order to use the old
@@ -536,7 +541,7 @@ bool LLViewerInventoryCategory::fetchDescendents()
std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
if (!url.empty()) //Capability found. Build up LLSD and use it.
{
- gInventory.startBackgroundFetch(mUUID);
+ LLInventoryModelBackgroundFetch::instance().start(mUUID);
}
else
{ //Deprecated, but if we don't have a capability, use the old system.
@@ -789,8 +794,8 @@ void WearOnAvatarCallback::fire(const LLUUID& inv_item)
void ModifiedCOFCallback::fire(const LLUUID& inv_item)
{
- LLAppearanceManager::instance().updateAppearanceFromCOF();
- if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() )
+ LLAppearanceMgr::instance().updateAppearanceFromCOF();
+ if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() )
{
// If we're in appearance editing mode, the current tab may need to be refreshed
if (gFloaterCustomize)
@@ -825,7 +830,7 @@ void ActivateGestureCallback::fire(const LLUUID& inv_item)
if (inv_item.isNull())
return;
- LLGestureManager::instance().activateGesture(inv_item);
+ LLGestureMgr::instance().activateGesture(inv_item);
}
void CreateGestureCallback::fire(const LLUUID& inv_item)
@@ -833,7 +838,7 @@ void CreateGestureCallback::fire(const LLUUID& inv_item)
if (inv_item.isNull())
return;
- LLGestureManager::instance().activateGesture(inv_item);
+ LLGestureMgr::instance().activateGesture(inv_item);
LLViewerInventoryItem* item = gInventory.getItem(inv_item);
if (!item) return;
@@ -1070,7 +1075,7 @@ const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably
const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not)
// ! REFACTOR ! Really need to refactor this so that it's not a bunch of if-then statements...
-void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid)
+void menu_create_inventory_item(LLFolderView* root, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid)
{
std::string type_name = userdata.asString();
@@ -1094,7 +1099,7 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co
LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null);
gInventory.notifyObservers();
- folder->setSelectionByID(category, TRUE);
+ root->setSelectionByID(category, TRUE);
}
else if ("lsl" == type_name)
{
@@ -1139,7 +1144,7 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co
llwarns << "Can't create unrecognized type " << type_name << llendl;
}
}
- folder->setNeedsAutoRename(TRUE);
+ root->setNeedsAutoRename(TRUE);
}
LLAssetType::EType LLViewerInventoryItem::getType() const
@@ -1165,6 +1170,40 @@ const LLUUID& LLViewerInventoryItem::getAssetUUID() const
return LLInventoryItem::getAssetUUID();
}
+const LLUUID& LLViewerInventoryItem::getProtectedAssetUUID() const
+{
+ if (const LLViewerInventoryItem *linked_item = getLinkedItem())
+ {
+ return linked_item->getProtectedAssetUUID();
+ }
+
+ // check for conditions under which we may return a visible UUID to the user
+ bool item_is_fullperm = getIsFullPerm();
+ bool agent_is_godlike = gAgent.isGodlikeWithoutAdminMenuFakery();
+ if (item_is_fullperm || agent_is_godlike)
+ {
+ return LLInventoryItem::getAssetUUID();
+ }
+
+ return LLUUID::null;
+}
+
+const bool LLViewerInventoryItem::getIsFullPerm() const
+{
+ LLPermissions item_permissions = getPermissions();
+
+ // modify-ok & copy-ok & transfer-ok
+ return ( item_permissions.allowOperationBy(PERM_MODIFY,
+ gAgent.getID(),
+ gAgent.getGroupID()) &&
+ item_permissions.allowOperationBy(PERM_COPY,
+ gAgent.getID(),
+ gAgent.getGroupID()) &&
+ item_permissions.allowOperationBy(PERM_TRANSFER,
+ gAgent.getID(),
+ gAgent.getGroupID()) );
+}
+
const std::string& LLViewerInventoryItem::getName() const
{
if (const LLViewerInventoryItem *linked_item = getLinkedItem())
@@ -1440,7 +1479,7 @@ EWearableType LLViewerInventoryItem::getWearableType() const
llwarns << "item is not a wearable" << llendl;
return WT_INVALID;
}
- return EWearableType(getFlags() & LLInventoryItem::II_FLAGS_WEARABLES_MASK);
+ return EWearableType(getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK);
}
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index c24f76c87a..2db88c2ff8 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -63,10 +63,12 @@ protected:
public:
virtual LLAssetType::EType getType() const;
virtual const LLUUID& getAssetUUID() const;
+ virtual const LLUUID& getProtectedAssetUUID() const; // returns LLUUID::null if current agent does not have permission to expose this asset's UUID to the user
virtual const std::string& getName() const;
virtual S32 getSortField() const;
virtual void setSortField(S32 sortField);
virtual const LLPermissions& getPermissions() const;
+ virtual const bool getIsFullPerm() const; // 'fullperm' in the popular sense: modify-ok & copy-ok & transfer-ok, no special god rules applied
virtual const LLUUID& getCreatorUUID() const;
virtual const std::string& getDescription() const;
virtual const LLSaleInfo& getSaleInfo() const;
@@ -210,7 +212,7 @@ public:
void setVersion(S32 version) { mVersion = version; }
// Returns true if a fetch was issued.
- bool fetchDescendents();
+ bool fetch();
// used to help make cacheing more robust - for example, if
// someone is getting 4 packets but logs out after 3. the viewer
@@ -354,7 +356,7 @@ void copy_inventory_from_notecard(const LLUUID& object_id,
U32 callback_id = 0);
-void menu_create_inventory_item(LLFolderView* folder,
+void menu_create_inventory_item(LLFolderView* root,
LLFolderBridge* bridge,
const LLSD& userdata,
const LLUUID& default_parent_uuid = LLUUID::null);
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index 1a67fc0966..7225aa1523 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -626,7 +626,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)
mFace->mVertexBuffer->drawRange(LLRender::TRIANGLES, start, end, count, offset);
glPopMatrix();
}
- gPipeline.addTrianglesDrawn(count/3);
+ gPipeline.addTrianglesDrawn(count);
triangle_count += count;
diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp
index b593fbfb00..b758f6c701 100644
--- a/indra/newview/llviewerjoystick.cpp
+++ b/indra/newview/llviewerjoystick.cpp
@@ -43,6 +43,7 @@
#include "llselectmgr.h"
#include "llviewermenu.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llfocusmgr.h"
@@ -106,7 +107,7 @@ void LLViewerJoystick::setOverrideCamera(bool val)
if (mOverrideCamera)
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
}
@@ -432,7 +433,7 @@ void LLViewerJoystick::agentPitch(F32 pitch_inc)
void LLViewerJoystick::agentYaw(F32 yaw_inc)
{
// Cannot steer some vehicles in mouselook if the script grabs the controls
- if (gAgent.cameraMouselook() && !gSavedSettings.getBOOL("JoystickMouselookYaw"))
+ if (gAgentCamera.cameraMouselook() && !gSavedSettings.getBOOL("JoystickMouselookYaw"))
{
gAgent.rotate(-yaw_inc, gAgent.getReferenceUpVector());
}
@@ -1005,7 +1006,7 @@ bool LLViewerJoystick::toggleFlycam()
if (!mOverrideCamera)
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME)
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
index f757155b94..dd7390a907 100644
--- a/indra/newview/llviewerkeyboard.cpp
+++ b/indra/newview/llviewerkeyboard.cpp
@@ -36,6 +36,7 @@
#include "llviewerkeyboard.h"
#include "llmath.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llnearbychatbar.h"
#include "llviewercontrol.h"
#include "llfocusmgr.h"
@@ -279,22 +280,22 @@ F32 get_orbit_rate()
void camera_spin_around_ccw( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setOrbitLeftKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitLeftKey( get_orbit_rate() );
}
void camera_spin_around_cw( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setOrbitRightKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitRightKey( get_orbit_rate() );
}
void camera_spin_around_ccw_sitting( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- if (gAgent.rotateGrabbed() || gAgent.sitCameraEnabled())
+ if (gAgent.rotateGrabbed() || gAgentCamera.sitCameraEnabled())
{
//send keystrokes, but do not change camera
agent_turn_right(s);
@@ -302,7 +303,7 @@ void camera_spin_around_ccw_sitting( EKeystate s )
else
{
//change camera but do not send keystrokes
- gAgent.setOrbitLeftKey( get_orbit_rate() );
+ gAgentCamera.setOrbitLeftKey( get_orbit_rate() );
}
}
@@ -310,7 +311,7 @@ void camera_spin_around_ccw_sitting( EKeystate s )
void camera_spin_around_cw_sitting( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- if (gAgent.rotateGrabbed() || gAgent.sitCameraEnabled())
+ if (gAgent.rotateGrabbed() || gAgentCamera.sitCameraEnabled())
{
//send keystrokes, but do not change camera
agent_turn_left(s);
@@ -318,7 +319,7 @@ void camera_spin_around_cw_sitting( EKeystate s )
else
{
//change camera but do not send keystrokes
- gAgent.setOrbitRightKey( get_orbit_rate() );
+ gAgentCamera.setOrbitRightKey( get_orbit_rate() );
}
}
@@ -326,22 +327,22 @@ void camera_spin_around_cw_sitting( EKeystate s )
void camera_spin_over( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setOrbitUpKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitUpKey( get_orbit_rate() );
}
void camera_spin_under( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setOrbitDownKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitDownKey( get_orbit_rate() );
}
void camera_spin_over_sitting( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- if (gAgent.upGrabbed() || gAgent.sitCameraEnabled())
+ if (gAgent.upGrabbed() || gAgentCamera.sitCameraEnabled())
{
//send keystrokes, but do not change camera
agent_jump(s);
@@ -349,7 +350,7 @@ void camera_spin_over_sitting( EKeystate s )
else
{
//change camera but do not send keystrokes
- gAgent.setOrbitUpKey( get_orbit_rate() );
+ gAgentCamera.setOrbitUpKey( get_orbit_rate() );
}
}
@@ -357,7 +358,7 @@ void camera_spin_over_sitting( EKeystate s )
void camera_spin_under_sitting( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- if (gAgent.downGrabbed() || gAgent.sitCameraEnabled())
+ if (gAgent.downGrabbed() || gAgentCamera.sitCameraEnabled())
{
//send keystrokes, but do not change camera
agent_push_down(s);
@@ -365,35 +366,35 @@ void camera_spin_under_sitting( EKeystate s )
else
{
//change camera but do not send keystrokes
- gAgent.setOrbitDownKey( get_orbit_rate() );
+ gAgentCamera.setOrbitDownKey( get_orbit_rate() );
}
}
void camera_move_forward( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setOrbitInKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitInKey( get_orbit_rate() );
}
void camera_move_backward( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setOrbitOutKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitOutKey( get_orbit_rate() );
}
void camera_move_forward_sitting( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- if (gAgent.forwardGrabbed() || gAgent.sitCameraEnabled())
+ if (gAgent.forwardGrabbed() || gAgentCamera.sitCameraEnabled())
{
agent_push_forward(s);
}
else
{
- gAgent.setOrbitInKey( get_orbit_rate() );
+ gAgentCamera.setOrbitInKey( get_orbit_rate() );
}
}
@@ -402,70 +403,70 @@ void camera_move_backward_sitting( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- if (gAgent.backwardGrabbed() || gAgent.sitCameraEnabled())
+ if (gAgent.backwardGrabbed() || gAgentCamera.sitCameraEnabled())
{
agent_push_backward(s);
}
else
{
- gAgent.setOrbitOutKey( get_orbit_rate() );
+ gAgentCamera.setOrbitOutKey( get_orbit_rate() );
}
}
void camera_pan_up( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setPanUpKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanUpKey( get_orbit_rate() );
}
void camera_pan_down( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setPanDownKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanDownKey( get_orbit_rate() );
}
void camera_pan_left( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setPanLeftKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanLeftKey( get_orbit_rate() );
}
void camera_pan_right( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setPanRightKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanRightKey( get_orbit_rate() );
}
void camera_pan_in( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setPanInKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanInKey( get_orbit_rate() );
}
void camera_pan_out( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setPanOutKey( get_orbit_rate() );
+ gAgentCamera.unlockView();
+ gAgentCamera.setPanOutKey( get_orbit_rate() );
}
void camera_move_forward_fast( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setOrbitInKey(2.5f);
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitInKey(2.5f);
}
void camera_move_backward_fast( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
- gAgent.unlockView();
- gAgent.setOrbitOutKey(2.5f);
+ gAgentCamera.unlockView();
+ gAgentCamera.setOrbitOutKey(2.5f);
}
@@ -473,7 +474,7 @@ void edit_avatar_spin_ccw( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
gMorphView->setCameraDrivenByKeys( TRUE );
- gAgent.setOrbitLeftKey( get_orbit_rate() );
+ gAgentCamera.setOrbitLeftKey( get_orbit_rate() );
//gMorphView->orbitLeft( get_orbit_rate() );
}
@@ -482,7 +483,7 @@ void edit_avatar_spin_cw( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
gMorphView->setCameraDrivenByKeys( TRUE );
- gAgent.setOrbitRightKey( get_orbit_rate() );
+ gAgentCamera.setOrbitRightKey( get_orbit_rate() );
//gMorphView->orbitRight( get_orbit_rate() );
}
@@ -490,7 +491,7 @@ void edit_avatar_spin_over( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
gMorphView->setCameraDrivenByKeys( TRUE );
- gAgent.setOrbitUpKey( get_orbit_rate() );
+ gAgentCamera.setOrbitUpKey( get_orbit_rate() );
//gMorphView->orbitUp( get_orbit_rate() );
}
@@ -499,7 +500,7 @@ void edit_avatar_spin_under( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
gMorphView->setCameraDrivenByKeys( TRUE );
- gAgent.setOrbitDownKey( get_orbit_rate() );
+ gAgentCamera.setOrbitDownKey( get_orbit_rate() );
//gMorphView->orbitDown( get_orbit_rate() );
}
@@ -507,7 +508,7 @@ void edit_avatar_move_forward( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
gMorphView->setCameraDrivenByKeys( TRUE );
- gAgent.setOrbitInKey( get_orbit_rate() );
+ gAgentCamera.setOrbitInKey( get_orbit_rate() );
//gMorphView->orbitIn();
}
@@ -516,7 +517,7 @@ void edit_avatar_move_backward( EKeystate s )
{
if( KEYSTATE_UP == s ) return;
gMorphView->setCameraDrivenByKeys( TRUE );
- gAgent.setOrbitOutKey( get_orbit_rate() );
+ gAgentCamera.setOrbitOutKey( get_orbit_rate() );
//gMorphView->orbitOut();
}
@@ -868,7 +869,7 @@ S32 LLViewerKeyboard::loadBindings(const std::string& filename)
EKeyboardMode LLViewerKeyboard::getMode()
{
- if ( gAgent.cameraMouselook() )
+ if ( gAgentCamera.cameraMouselook() )
{
return MODE_FIRST_PERSON;
}
@@ -876,7 +877,7 @@ EKeyboardMode LLViewerKeyboard::getMode()
{
return MODE_EDIT_AVATAR;
}
- else if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting())
+ else if (isAgentAvatarValid() && gAgentAvatarp->isSitting())
{
return MODE_SITTING;
}
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 395467dffb..170eb7ae86 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -45,11 +45,13 @@
#include "llviewertexturelist.h"
#include "llvovolume.h"
#include "llpluginclassmedia.h"
+#include "llplugincookiestore.h"
#include "llviewerwindow.h"
#include "llfocusmgr.h"
#include "llcallbacklist.h"
#include "llparcel.h"
#include "llaudioengine.h" // for gAudiop
+#include "llurldispatcher.h"
#include "llvoavatar.h"
#include "llvoavatarself.h"
#include "llviewerregion.h"
@@ -255,6 +257,43 @@ public:
LLViewerMediaImpl *mMediaImpl;
bool mInitialized;
};
+
+class LLViewerMediaOpenIDResponder : public LLHTTPClient::Responder
+{
+LOG_CLASS(LLViewerMediaOpenIDResponder);
+public:
+ LLViewerMediaOpenIDResponder( )
+ {
+ }
+
+ ~LLViewerMediaOpenIDResponder()
+ {
+ }
+
+ /* virtual */ void completedHeader(U32 status, const std::string& reason, const LLSD& content)
+ {
+ LL_DEBUGS("MediaAuth") << "status = " << status << ", reason = " << reason << LL_ENDL;
+ LL_DEBUGS("MediaAuth") << content << LL_ENDL;
+ std::string cookie = content["set-cookie"].asString();
+
+ LLViewerMedia::openIDCookieResponse(cookie);
+ }
+
+ /* virtual */ void completedRaw(
+ U32 status,
+ const std::string& reason,
+ const LLChannelDescriptors& channels,
+ const LLIOPipe::buffer_ptr_t& buffer)
+ {
+ // This is just here to disable the default behavior (attempting to parse the response as llsd).
+ // We don't care about the content of the response, only the set-cookie header.
+ }
+
+};
+
+LLPluginCookieStore *LLViewerMedia::sCookieStore = NULL;
+LLURL LLViewerMedia::sOpenIDURL;
+std::string LLViewerMedia::sOpenIDCookie;
static LLViewerMedia::impl_list sViewerMediaImplList;
static LLViewerMedia::impl_id_map sViewerMediaTextureIDMap;
static LLTimer sMediaCreateTimer;
@@ -263,6 +302,8 @@ static F32 sGlobalVolume = 1.0f;
static F64 sLowestLoadableImplInterest = 0.0f;
static bool sAnyMediaShowing = false;
static boost::signals2::connection sTeleportFinishConnection;
+static std::string sUpdatedCookies;
+static const char *PLUGIN_COOKIE_FILE_NAME = "plugin_cookies.txt";
//////////////////////////////////////////////////////////////////////////////////////////
static void add_media_impl(LLViewerMediaImpl* media)
@@ -398,7 +439,6 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
media_impl->setHomeURL(media_entry->getHomeURL());
media_impl->mMediaAutoPlay = media_entry->getAutoPlay();
media_impl->mMediaEntryURL = media_entry->getCurrentURL();
-
if(media_impl->isAutoPlayable())
{
needs_navigate = true;
@@ -697,12 +737,19 @@ static bool proximity_comparitor(const LLViewerMediaImpl* i1, const LLViewerMedi
void LLViewerMedia::updateMedia(void *dummy_arg)
{
sAnyMediaShowing = false;
+ sUpdatedCookies = getCookieStore()->getChangedCookies();
+ if(!sUpdatedCookies.empty())
+ {
+ lldebugs << "updated cookies will be sent to all loaded plugins: " << llendl;
+ lldebugs << sUpdatedCookies << llendl;
+ }
+
impl_list::iterator iter = sViewerMediaImplList.begin();
impl_list::iterator end = sViewerMediaImplList.end();
- for(; iter != end; iter++)
+ for(; iter != end;)
{
- LLViewerMediaImpl* pimpl = *iter;
+ LLViewerMediaImpl* pimpl = *iter++;
pimpl->update();
pimpl->calculateInterest();
}
@@ -722,6 +769,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
std::vector<LLViewerMediaImpl*> proximity_order;
bool inworld_media_enabled = gSavedSettings.getBOOL("AudioStreamingMedia");
+ bool inworld_audio_enabled = gSavedSettings.getBOOL("AudioStreamingMusic");
U32 max_instances = gSavedSettings.getU32("PluginInstancesTotal");
U32 max_normal = gSavedSettings.getU32("PluginInstancesNormal");
U32 max_low = gSavedSettings.getU32("PluginInstancesLow");
@@ -849,7 +897,14 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
new_priority = LLPluginClassMedia::PRIORITY_UNLOADED;
}
}
-
+ // update the audio stream here as well
+ if( !inworld_audio_enabled)
+ {
+ if(LLViewerMedia::isParcelAudioPlaying() && gAudiop && LLViewerMedia::hasParcelAudio())
+ {
+ gAudiop->stopInternetStream();
+ }
+ }
pimpl->setPriority(new_priority);
if(pimpl->getUsedInUI())
@@ -944,7 +999,10 @@ void LLViewerMedia::setAllMediaEnabled(bool val)
LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
}
- if (!LLViewerMedia::isParcelAudioPlaying() && gAudiop && LLViewerMedia::hasParcelAudio())
+ if (gSavedSettings.getBOOL("AudioStreamingMusic") &&
+ !LLViewerMedia::isParcelAudioPlaying() &&
+ gAudiop &&
+ LLViewerMedia::hasParcelAudio())
{
gAudiop->startInternetStream(LLViewerMedia::getParcelAudioURL());
}
@@ -970,9 +1028,316 @@ bool LLViewerMedia::isParcelAudioPlaying()
return (LLViewerMedia::hasParcelAudio() && gAudiop && LLAudioEngine::AUDIO_PLAYING == gAudiop->isInternetStreamPlaying());
}
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::clearAllCookies()
+{
+ // Clear all cookies for all plugins
+ impl_list::iterator iter = sViewerMediaImplList.begin();
+ impl_list::iterator end = sViewerMediaImplList.end();
+ for (; iter != end; iter++)
+ {
+ LLViewerMediaImpl* pimpl = *iter;
+ if(pimpl->mMediaSource)
+ {
+ pimpl->mMediaSource->clear_cookies();
+ }
+ }
+
+ // Clear all cookies from the cookie store
+ getCookieStore()->setAllCookies("");
+
+ // FIXME: this may not be sufficient, since the on-disk cookie file won't get written until some browser instance exits cleanly.
+ // It also won't clear cookies for other accounts, or for any account if we're not logged in, and won't do anything at all if there are no webkit plugins loaded.
+ // Until such time as we can centralize cookie storage, the following hack should cover these cases:
+
+ // HACK: Look for cookie files in all possible places and delete them.
+ // NOTE: this assumes knowledge of what happens inside the webkit plugin (it's what adds 'browser_profile' to the path and names the cookie file)
+
+ // Places that cookie files can be:
+ // <getOSUserAppDir>/browser_profile/cookies
+ // <getOSUserAppDir>/first_last/browser_profile/cookies (note that there may be any number of these!)
+ // <getOSUserAppDir>/first_last/plugin_cookies.txt (note that there may be any number of these!)
+
+ std::string base_dir = gDirUtilp->getOSUserAppDir() + gDirUtilp->getDirDelimiter();
+ std::string target;
+ std::string filename;
+
+ lldebugs << "base dir = " << base_dir << llendl;
+
+ // The non-logged-in version is easy
+ target = base_dir;
+ target += "browser_profile";
+ target += gDirUtilp->getDirDelimiter();
+ target += "cookies";
+ lldebugs << "target = " << target << llendl;
+ if(LLFile::isfile(target))
+ {
+ LLFile::remove(target);
+ }
+
+ // the hard part: iterate over all user directories and delete the cookie file from each one
+ while(gDirUtilp->getNextFileInDir(base_dir, "*_*", filename, false))
+ {
+ target = base_dir;
+ target += filename;
+ target += gDirUtilp->getDirDelimiter();
+ target += "browser_profile";
+ target += gDirUtilp->getDirDelimiter();
+ target += "cookies";
+ lldebugs << "target = " << target << llendl;
+ if(LLFile::isfile(target))
+ {
+ LLFile::remove(target);
+ }
+
+ // Other accounts may have new-style cookie files too -- delete them as well
+ target = base_dir;
+ target += filename;
+ target += gDirUtilp->getDirDelimiter();
+ target += PLUGIN_COOKIE_FILE_NAME;
+ lldebugs << "target = " << target << llendl;
+ if(LLFile::isfile(target))
+ {
+ LLFile::remove(target);
+ }
+ }
+
+ // If we have an OpenID cookie, re-add it to the cookie store.
+ setOpenIDCookie();
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::clearAllCaches()
+{
+ // Clear all plugins' caches
+ impl_list::iterator iter = sViewerMediaImplList.begin();
+ impl_list::iterator end = sViewerMediaImplList.end();
+ for (; iter != end; iter++)
+ {
+ LLViewerMediaImpl* pimpl = *iter;
+ pimpl->clearCache();
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::setCookiesEnabled(bool enabled)
+{
+ // Set the "cookies enabled" flag for all loaded plugins
+ impl_list::iterator iter = sViewerMediaImplList.begin();
+ impl_list::iterator end = sViewerMediaImplList.end();
+ for (; iter != end; iter++)
+ {
+ LLViewerMediaImpl* pimpl = *iter;
+ if(pimpl->mMediaSource)
+ {
+ pimpl->mMediaSource->enable_cookies(enabled);
+ }
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::setProxyConfig(bool enable, const std::string &host, int port)
+{
+ // Set the proxy config for all loaded plugins
+ impl_list::iterator iter = sViewerMediaImplList.begin();
+ impl_list::iterator end = sViewerMediaImplList.end();
+ for (; iter != end; iter++)
+ {
+ LLViewerMediaImpl* pimpl = *iter;
+ if(pimpl->mMediaSource)
+ {
+ pimpl->mMediaSource->proxy_setup(enable, host, port);
+ }
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+LLPluginCookieStore *LLViewerMedia::getCookieStore()
+{
+ if(sCookieStore == NULL)
+ {
+ sCookieStore = new LLPluginCookieStore;
+ }
+
+ return sCookieStore;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::loadCookieFile()
+{
+ // build filename for each user
+ std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PLUGIN_COOKIE_FILE_NAME);
+
+ if (resolved_filename.empty())
+ {
+ llinfos << "can't get path to plugin cookie file - probably not logged in yet." << llendl;
+ return;
+ }
+
+ // open the file for reading
+ llifstream file(resolved_filename);
+ if (!file.is_open())
+ {
+ llwarns << "can't load plugin cookies from file \"" << PLUGIN_COOKIE_FILE_NAME << "\"" << llendl;
+ return;
+ }
+
+ getCookieStore()->readAllCookies(file, true);
+
+ file.close();
+
+ // send the clear_cookies message to all loaded plugins
+ impl_list::iterator iter = sViewerMediaImplList.begin();
+ impl_list::iterator end = sViewerMediaImplList.end();
+ for (; iter != end; iter++)
+ {
+ LLViewerMediaImpl* pimpl = *iter;
+ if(pimpl->mMediaSource)
+ {
+ pimpl->mMediaSource->clear_cookies();
+ }
+ }
+
+ // If we have an OpenID cookie, re-add it to the cookie store.
+ setOpenIDCookie();
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::saveCookieFile()
+{
+ // build filename for each user
+ std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PLUGIN_COOKIE_FILE_NAME);
+
+ if (resolved_filename.empty())
+ {
+ llinfos << "can't get path to plugin cookie file - probably not logged in yet." << llendl;
+ return;
+ }
+
+ // open a file for writing
+ llofstream file (resolved_filename);
+ if (!file.is_open())
+ {
+ llwarns << "can't open plugin cookie file \"" << PLUGIN_COOKIE_FILE_NAME << "\" for writing" << llendl;
+ return;
+ }
+
+ getCookieStore()->writePersistentCookies(file);
+
+ file.close();
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::addCookie(const std::string &name, const std::string &value, const std::string &domain, const LLDate &expires, const std::string &path, bool secure)
+{
+ std::stringstream cookie;
+
+ cookie << name << "=" << LLPluginCookieStore::quoteString(value);
+
+ if(expires.notNull())
+ {
+ cookie << "; expires=" << expires.asRFC1123();
+ }
+
+ cookie << "; domain=" << domain;
+
+ cookie << "; path=" << path;
+
+ if(secure)
+ {
+ cookie << "; secure";
+ }
+
+ getCookieStore()->setCookies(cookie.str());
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::addSessionCookie(const std::string &name, const std::string &value, const std::string &domain, const std::string &path, bool secure)
+{
+ // A session cookie just has a NULL date.
+ addCookie(name, value, domain, LLDate(), path, secure);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::removeCookie(const std::string &name, const std::string &domain, const std::string &path )
+{
+ // To remove a cookie, add one with the same name, domain, and path that expires in the past.
+
+ addCookie(name, "", domain, LLDate(LLDate::now().secondsSinceEpoch() - 1.0), path);
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::setOpenIDCookie()
+{
+ if(!sOpenIDCookie.empty())
+ {
+ getCookieStore()->setCookiesFromHost(sOpenIDCookie, sOpenIDURL.mAuthority);
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::openIDSetup(const std::string &openid_url, const std::string &openid_token)
+{
+ LL_DEBUGS("MediaAuth") << "url = \"" << openid_url << "\", token = \"" << openid_token << "\"" << LL_ENDL;
+
+ // post the token to the url
+ // the responder will need to extract the cookie(s).
+
+ // Save the OpenID URL for later -- we may need the host when adding the cookie.
+ sOpenIDURL.init(openid_url.c_str());
+
+ // We shouldn't ever do this twice, but just in case this code gets repurposed later, clear existing cookies.
+ sOpenIDCookie.clear();
+
+ LLSD headers = LLSD::emptyMap();
+ // Keep LLHTTPClient from adding an "Accept: application/llsd+xml" header
+ headers["Accept"] = "*/*";
+ // and use the expected content-type for a post, instead of the LLHTTPClient::postRaw() default of "application/octet-stream"
+ headers["Content-Type"] = "application/x-www-form-urlencoded";
+
+ // postRaw() takes ownership of the buffer and releases it later, so we need to allocate a new buffer here.
+ size_t size = openid_token.size();
+ U8 *data = new U8[size];
+ memcpy(data, openid_token.data(), size);
+
+ LLHTTPClient::postRaw(
+ openid_url,
+ data,
+ size,
+ new LLViewerMediaOpenIDResponder(),
+ headers);
+
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::openIDCookieResponse(const std::string &cookie)
+{
+ LL_DEBUGS("MediaAuth") << "Cookie received: \"" << cookie << "\"" << LL_ENDL;
+
+ sOpenIDCookie += cookie;
+
+ setOpenIDCookie();
+}
+
bool LLViewerMedia::hasInWorldMedia()
{
- if (! gSavedSettings.getBOOL("AudioStreamingMedia")) return false;
if (sInWorldMediaDisabled) return false;
impl_list::iterator iter = sViewerMediaImplList.begin();
impl_list::iterator end = sViewerMediaImplList.end();
@@ -1080,7 +1445,8 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id,
mBackgroundColor(LLColor4::white),
mNavigateSuspended(false),
mNavigateSuspendedDeferred(false),
- mIsUpdated(false)
+ mIsUpdated(false),
+ mTrustedBrowser(false)
{
// Set up the mute list observer if it hasn't been set up already.
@@ -1107,11 +1473,6 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id,
//////////////////////////////////////////////////////////////////////////////////////////
LLViewerMediaImpl::~LLViewerMediaImpl()
{
- if( gEditMenuHandler == this )
- {
- gEditMenuHandler = NULL;
- }
-
destroyMediaSource();
LLViewerMediaTexture::removeMediaImplFromTexture(mTextureId) ;
@@ -1171,7 +1532,10 @@ void LLViewerMediaImpl::createMediaSource()
}
else if(! mMimeType.empty())
{
- initializeMedia(mMimeType);
+ if (!initializeMedia(mMimeType))
+ {
+ LL_WARNS("Media") << "Failed to initialize media for mime type " << mMimeType << LL_ENDL;
+ }
}
}
@@ -1219,6 +1583,19 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
std::string user_data_path = gDirUtilp->getOSUserAppDir();
user_data_path += gDirUtilp->getDirDelimiter();
+ // Fix for EXT-5960 - make browser profile specific to user (cache, cookies etc.)
+ // If the linden username returned is blank, that can only mean we are
+ // at the login page displaying login Web page or Web browser test via Develop menu.
+ // In this case we just use whatever gDirUtilp->getOSUserAppDir() gives us (this
+ // is what we always used before this change)
+ std::string linden_user_dir = gDirUtilp->getLindenUserDir();
+ if ( ! linden_user_dir.empty() )
+ {
+ // gDirUtilp->getLindenUserDir() is whole path, not just Linden name
+ user_data_path = linden_user_dir;
+ user_data_path += gDirUtilp->getDirDelimiter();
+ };
+
// See if the plugin executable exists
llstat s;
if(LLFile::stat(launcher_name, &s))
@@ -1233,7 +1610,22 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
{
LLPluginClassMedia* media_source = new LLPluginClassMedia(owner);
media_source->setSize(default_width, default_height);
- if (media_source->init(launcher_name, plugin_name, gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins"), user_data_path))
+ media_source->setUserDataPath(user_data_path);
+ media_source->setLanguageCode(LLUI::getLanguage());
+
+ // collect 'cookies enabled' setting from prefs and send to embedded browser
+ bool cookies_enabled = gSavedSettings.getBOOL( "CookiesEnabled" );
+ media_source->enable_cookies( cookies_enabled );
+
+ // collect 'plugins enabled' setting from prefs and send to embedded browser
+ bool plugins_enabled = gSavedSettings.getBOOL( "BrowserPluginsEnabled" );
+ media_source->setPluginsEnabled( plugins_enabled );
+
+ // collect 'javascript enabled' setting from prefs and send to embedded browser
+ bool javascript_enabled = gSavedSettings.getBOOL( "BrowserJavascriptEnabled" );
+ media_source->setJavascriptEnabled( javascript_enabled );
+
+ if (media_source->init(launcher_name, plugin_name, gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins")))
{
return media_source;
}
@@ -1294,12 +1686,25 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type)
media_source->focus(mHasFocus);
media_source->setBackgroundColor(mBackgroundColor);
+ media_source->proxy_setup(gSavedSettings.getBOOL("BrowserProxyEnabled"), gSavedSettings.getString("BrowserProxyAddress"), gSavedSettings.getS32("BrowserProxyPort"));
+
if(mClearCache)
{
mClearCache = false;
media_source->clear_cache();
}
+ // TODO: Only send cookies to plugins that need them
+ // Ideally, the plugin should tell us whether it handles cookies or not -- either via the init response or through a separate message.
+ // Due to the ordering of messages, it's possible we wouldn't get that information back in time to send cookies before sending a navigate message,
+ // which could cause odd race conditions.
+ std::string all_cookies = LLViewerMedia::getCookieStore()->getAllCookies();
+ lldebugs << "setting cookies: " << all_cookies << llendl;
+ if(!all_cookies.empty())
+ {
+ media_source->set_cookies(all_cookies);
+ }
+
mMediaSource = media_source;
updateVolume();
@@ -1997,6 +2402,16 @@ void LLViewerMediaImpl::update()
}
}
}
+ else
+ {
+ // If we didn't just create the impl, it may need to get cookie updates.
+ if(!sUpdatedCookies.empty())
+ {
+ // TODO: Only send cookies to plugins that need them
+ mMediaSource->set_cookies(sUpdatedCookies);
+ }
+ }
+
if(mMediaSource == NULL)
{
@@ -2330,6 +2745,14 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
{
switch(event)
{
+ case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
+ {
+ LL_DEBUGS("Media") << "MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is: " << plugin->getClickURL() << LL_ENDL;
+ std::string url = plugin->getClickURL();
+ LLURLDispatcher::dispatch(url, NULL, mTrustedBrowser);
+
+ }
+ break;
case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:
{
// The plugin failed to load properly. Make sure the timer doesn't retry.
@@ -2451,6 +2874,13 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
////////////////////////////////////////////////////////////////////////////////
// virtual
+void LLViewerMediaImpl::handleCookieSet(LLPluginClassMedia* self, const std::string &cookie)
+{
+ LLViewerMedia::getCookieStore()->setCookies(cookie);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// virtual
void
LLViewerMediaImpl::cut()
{
@@ -2538,7 +2968,13 @@ void LLViewerMediaImpl::calculateInterest()
if(!mObjectList.empty())
{
// Just use the first object in the list. We could go through the list and find the closest object, but this should work well enough.
- LLVector3d global_delta = gAgent.getPositionGlobal() - (*mObjectList.begin())->getPositionGlobal();
+ std::list< LLVOVolume* >::iterator iter = mObjectList.begin() ;
+ LLVOVolume* objp = *iter ;
+ llassert_always(objp != NULL) ;
+
+ LLVector3d obj_global = objp->getPositionGlobal() ;
+ LLVector3d agent_global = gAgent.getPositionGlobal() ;
+ LLVector3d global_delta = agent_global - obj_global ;
mProximityDistance = global_delta.magVecSquared(); // use distance-squared because it's cheaper and sorts the same.
}
@@ -2862,7 +3298,7 @@ bool LLViewerMediaImpl::isObjectAttachedToAnotherAvatar(LLVOVolume *obj)
if (NULL != object)
{
LLVOAvatar *avatar = object->asAvatar();
- if (NULL != avatar && avatar != gAgent.getAvatarObject())
+ if ((NULL != avatar) && (avatar != gAgentAvatarp))
{
result = true;
break;
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 9dbffa78b3..e829d7a5b4 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -44,12 +44,15 @@
#include "llpluginclassmedia.h"
#include "v4color.h"
+#include "llurl.h"
+
class LLViewerMediaImpl;
class LLUUID;
class LLViewerMediaTexture;
class LLMediaEntry;
class LLVOVolume;
class LLMimeDiscoveryResponder;
+class LLPluginCookieStore;
typedef LLPointer<LLViewerMediaImpl> viewer_media_t;
///////////////////////////////////////////////////////////////////////////////
@@ -133,8 +136,35 @@ public:
static bool isParcelMediaPlaying();
static bool isParcelAudioPlaying();
+ // Clear all cookies for all plugins
+ static void clearAllCookies();
+
+ // Clear all plugins' caches
+ static void clearAllCaches();
+
+ // Set the "cookies enabled" flag for all loaded plugins
+ static void setCookiesEnabled(bool enabled);
+
+ // Set the proxy config for all loaded plugins
+ static void setProxyConfig(bool enable, const std::string &host, int port);
+
+ static LLPluginCookieStore *getCookieStore();
+ static void loadCookieFile();
+ static void saveCookieFile();
+ static void addCookie(const std::string &name, const std::string &value, const std::string &domain, const LLDate &expires, const std::string &path = std::string("/"), bool secure = false );
+ static void addSessionCookie(const std::string &name, const std::string &value, const std::string &domain, const std::string &path = std::string("/"), bool secure = false );
+ static void removeCookie(const std::string &name, const std::string &domain, const std::string &path = std::string("/") );
+
+ static void openIDSetup(const std::string &openid_url, const std::string &openid_token);
+ static void openIDCookieResponse(const std::string &cookie);
+
private:
+ static void setOpenIDCookie();
static void onTeleportFinished();
+
+ static LLPluginCookieStore *sCookieStore;
+ static LLURL sOpenIDURL;
+ static std::string sOpenIDCookie;
};
// Implementation functions not exported into header file
@@ -282,6 +312,7 @@ public:
// Inherited from LLPluginClassMediaOwner
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent);
+ /*virtual*/ void handleCookieSet(LLPluginClassMedia* self, const std::string &cookie);
// LLEditMenuHandler overrides
/*virtual*/ void cut();
@@ -322,6 +353,9 @@ public:
void setLowPrioritySizeLimit(int size);
void setTextureID(LLUUID id = LLUUID::null);
+
+ bool isTrustedBrowser() { return mTrustedBrowser; }
+ void setTrustedBrowser(bool trusted) { mTrustedBrowser = trusted; }
typedef enum
{
@@ -405,6 +439,7 @@ private:
LLColor4 mBackgroundColor;
bool mNavigateSuspended;
bool mNavigateSuspendedDeferred;
+ bool mTrustedBrowser;
private:
BOOL mIsUpdated ;
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index 88e7cfec86..c1e851350b 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -38,6 +38,7 @@
#include "llpanelprimmediacontrols.h"
#include "llpluginclassmedia.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "lltoolpie.h"
#include "llviewercamera.h"
#include "llviewermedia.h"
@@ -126,7 +127,7 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
if(face_auto_zoom && ! parcel->getMediaPreventCameraZoom())
{
// Zoom in on this face
- mMediaControls.get()->resetZoomLevel();
+ mMediaControls.get()->resetZoomLevel(false);
mMediaControls.get()->nextZoomLevel();
}
else
@@ -201,7 +202,7 @@ void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal,
{
if (object)
{
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
LLBBox bbox = object->getBoundingBoxAgent();
LLVector3d center = gAgent.getPosGlobalFromAgent(bbox.getCenterAgent());
@@ -260,7 +261,7 @@ void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal,
// orientation with respect to the face. In other words, if before zoom
// the media appears "upside down" from the camera, after zooming it will
// still be upside down, but at least it will not flip.
- LLVector3d cur_camera_pos = LLVector3d(gAgent.getCameraPositionGlobal());
+ LLVector3d cur_camera_pos = LLVector3d(gAgentCamera.getCameraPositionGlobal());
LLVector3d delta = (cur_camera_pos - camera_pos);
F64 len = delta.length();
delta.normalize();
@@ -271,18 +272,18 @@ void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal,
// If we are not allowing zooming out and the old camera position is closer to
// the center then the new intended camera position, don't move camera and return
if (zoom_in_only &&
- (dist_vec_squared(gAgent.getCameraPositionGlobal(), target_pos) < dist_vec_squared(camera_pos, target_pos)))
+ (dist_vec_squared(gAgentCamera.getCameraPositionGlobal(), target_pos) < dist_vec_squared(camera_pos, target_pos)))
{
return;
}
- gAgent.setCameraPosAndFocusGlobal(camera_pos, target_pos, object->getID() );
+ gAgentCamera.setCameraPosAndFocusGlobal(camera_pos, target_pos, object->getID() );
}
else
{
// If we have no object, focus back on the avatar.
- gAgent.setFocusOnAvatar(TRUE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE);
}
}
void LLViewerMediaFocus::onFocusReceived()
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 02bde51fb6..64967466fb 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -42,6 +42,7 @@
// newview includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llagentpilot.h"
#include "llbottomtray.h"
@@ -72,6 +73,8 @@
#include "llhudmanager.h"
#include "llimview.h"
#include "llinventorybridge.h"
+#include "llinventorydefines.h"
+#include "llinventoryfunctions.h"
#include "llpanellogin.h"
#include "llpanelblockedlist.h"
#include "llmenucommands.h"
@@ -86,6 +89,7 @@
#include "lltoolmgr.h"
#include "lltoolpie.h"
#include "lltoolselectland.h"
+#include "lltrans.h"
#include "llviewergenericmessage.h"
#include "llviewerhelp.h"
#include "llviewermenufile.h" // init_menu_file()
@@ -103,6 +107,7 @@
#include "llfloatercamera.h"
#include "lluilistener.h"
#include "llappearancemgr.h"
+#include "lltrans.h"
using namespace LLVOAvatarDefines;
@@ -132,6 +137,7 @@ extern BOOL gDebugWindowProc;
LLMenuBarGL *gMenuBarView = NULL;
LLViewerMenuHolderGL *gMenuHolder = NULL;
LLMenuGL *gPopupMenuView = NULL;
+LLMenuGL *gEditMenu = NULL;
LLMenuBarGL *gLoginMenuBarView = NULL;
// Pie menus
@@ -379,8 +385,10 @@ void init_menus()
///
/// Context menus
///
+
const widget_registry_t& registry =
LLViewerMenuHolderGL::child_registry_t::instance();
+ gEditMenu = LLUICtrlFactory::createFromFile<LLMenuGL>("menu_edit.xml", gMenuHolder, registry);
gMenuAvatarSelf = LLUICtrlFactory::createFromFile<LLContextMenu>(
"menu_avatar_self.xml", gMenuHolder, registry);
gMenuAvatarOther = LLUICtrlFactory::createFromFile<LLContextMenu>(
@@ -434,7 +442,8 @@ void init_menus()
gMenuBarView->setRect(LLRect(0, top, 0, top - MENU_BAR_HEIGHT));
gMenuBarView->setBackgroundColor( color );
- gMenuHolder->addChild(gMenuBarView);
+ LLView* menu_bar_holder = gViewerWindow->getRootView()->getChildView("menu_bar_holder");
+ menu_bar_holder->addChild(gMenuBarView);
gViewerWindow->setMenuBackgroundColor(false,
LLViewerLogin::getInstance()->isInProductionGrid());
@@ -469,9 +478,10 @@ void init_menus()
gLoginMenuBarView = LLUICtrlFactory::getInstance()->createFromFile<LLMenuBarGL>("menu_login.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
gLoginMenuBarView->arrangeAndClear();
LLRect menuBarRect = gLoginMenuBarView->getRect();
- gLoginMenuBarView->setRect(LLRect(menuBarRect.mLeft, menuBarRect.mTop, gViewerWindow->getRootView()->getRect().getWidth() - menuBarRect.mLeft, menuBarRect.mBottom));
+ menuBarRect.setLeftTopAndSize(0, menu_bar_holder->getRect().getHeight(), menuBarRect.getWidth(), menuBarRect.getHeight());
+ gLoginMenuBarView->setRect(menuBarRect);
gLoginMenuBarView->setBackgroundColor( color );
- gMenuHolder->addChild(gLoginMenuBarView);
+ menu_bar_holder->addChild(gLoginMenuBarView);
// tooltips are on top of EVERYTHING, including menus
gViewerWindow->getRootView()->sendChildToFront(gToolTipView);
@@ -1796,9 +1806,10 @@ class LLAdvancedDebugAvatarTextures : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
-#ifndef LL_RELEASE_FOR_DOWNLOAD
- handle_debug_avatar_textures(NULL);
-#endif
+ if (gAgent.isGodlike())
+ {
+ handle_debug_avatar_textures(NULL);
+ }
return true;
}
};
@@ -2478,18 +2489,18 @@ class LLObjectBuild : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") )
+ if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") )
{
// zoom in if we're looking at the avatar
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
- gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick());
- gAgent.cameraZoomIn(0.666f);
- gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD );
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
+ gAgentCamera.cameraZoomIn(0.666f);
+ gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
gViewerWindow->moveCursorToCenter();
}
else if ( gSavedSettings.getBOOL("EditCameraMovement") )
{
- gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick());
+ gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
gViewerWindow->moveCursorToCenter();
}
@@ -2507,7 +2518,7 @@ void handle_object_edit()
{
LLViewerParcelMgr::getInstance()->deselectLand();
- if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit())
+ if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit())
{
LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
@@ -2515,19 +2526,19 @@ void handle_object_edit()
{
// always freeze camera in space, even if camera doesn't move
// so, for example, follow cam scripts can't affect you when in build mode
- gAgent.setFocusGlobal(gAgent.calcFocusPositionTargetGlobal(), LLUUID::null);
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusGlobal(gAgentCamera.calcFocusPositionTargetGlobal(), LLUUID::null);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
}
else
{
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
LLViewerObject* selected_objectp = selection->getFirstRootObject();
if (selected_objectp)
{
// zoom in on object center instead of where we clicked, as we need to see the manipulator handles
- gAgent.setFocusGlobal(selected_objectp->getPositionGlobal(), selected_objectp->getID());
- gAgent.cameraZoomIn(0.666f);
- gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD );
+ gAgentCamera.setFocusGlobal(selected_objectp->getPositionGlobal(), selected_objectp->getID());
+ gAgentCamera.cameraZoomIn(0.666f);
+ gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
gViewerWindow->moveCursorToCenter();
}
}
@@ -2572,19 +2583,19 @@ class LLLandBuild : public view_listener_t
{
LLViewerParcelMgr::getInstance()->deselectLand();
- if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") )
+ if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") )
{
// zoom in if we're looking at the avatar
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
- gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick());
- gAgent.cameraZoomIn(0.666f);
- gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD );
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
+ gAgentCamera.cameraZoomIn(0.666f);
+ gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
gViewerWindow->moveCursorToCenter();
}
else if ( gSavedSettings.getBOOL("EditCameraMovement") )
{
// otherwise just move focus
- gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick());
+ gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
gViewerWindow->moveCursorToCenter();
}
@@ -2687,11 +2698,10 @@ class LLSelfEnableRemoveAllAttachments : public view_listener_t
bool handleEvent(const LLSD& userdata)
{
bool new_value = false;
- if (gAgent.getAvatarObject())
+ if (isAgentAvatarValid())
{
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
- iter != avatarp->mAttachmentPoints.end(); )
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
@@ -2819,14 +2829,14 @@ bool handle_go_to()
LLViewerParcelMgr::getInstance()->deselectLand();
- if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera"))
+ if (isAgentAvatarValid() && !gSavedSettings.getBOOL("AutoPilotLocksCamera"))
{
- gAgent.setFocusGlobal(gAgent.getFocusTargetGlobal(), gAgent.getAvatarObject()->getID());
+ gAgentCamera.setFocusGlobal(gAgentCamera.getFocusTargetGlobal(), gAgentAvatarp->getID());
}
else
{
// Snap camera back to behind avatar
- gAgent.setFocusOnAvatar(TRUE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE);
}
// Could be first use
@@ -3272,7 +3282,9 @@ void handle_buy_object(LLSaleInfo sale_info)
if (price > 0 && price > gStatusBar->getBalance())
{
- LLFloaterBuyCurrency::buyCurrency("This object costs", price);
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", price);
+ LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_object_costs", args), price);
return;
}
@@ -3358,7 +3370,7 @@ class LLSelfStandUp : public view_listener_t
bool enable_standup_self()
{
- bool new_value = gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting();
+ bool new_value = isAgentAvatarValid() && gAgentAvatarp->isSitting();
return new_value;
}
@@ -3687,9 +3699,9 @@ class LLLandSit : public view_listener_t
LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal;
LLQuaternion target_rot;
- if (gAgent.getAvatarObject())
+ if (isAgentAvatarValid())
{
- target_rot = gAgent.getAvatarObject()->getRotation();
+ target_rot = gAgentAvatarp->getRotation();
}
else
{
@@ -3711,14 +3723,14 @@ void reset_view_final( BOOL proceed );
void handle_reset_view()
{
- if( (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode()) && gFloaterCustomize )
+ if( (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode()) && gFloaterCustomize )
{
// Show dialog box if needed.
gFloaterCustomize->askToSaveIfDirty( reset_view_final );
}
else
{
- gAgent.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
+ gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
reset_view_final( TRUE );
LLFloaterCamera::resetCameraMode();
}
@@ -3741,15 +3753,15 @@ void reset_view_final( BOOL proceed )
return;
}
- gAgent.resetView(TRUE, TRUE);
- gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
+ gAgentCamera.resetView(TRUE, TRUE);
+ gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
}
class LLViewLookAtLastChatter : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- gAgent.lookAtLastChat();
+ gAgentCamera.lookAtLastChat();
return true;
}
};
@@ -3758,13 +3770,13 @@ class LLViewMouselook : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- if (!gAgent.cameraMouselook())
+ if (!gAgentCamera.cameraMouselook())
{
- gAgent.changeCameraToMouselook();
+ gAgentCamera.changeCameraToMouselook();
}
else
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
return true;
}
@@ -3852,15 +3864,15 @@ BOOL enable_deed_object_to_group(void*)
* No longer able to support viewer side manipulations in this way
*
void god_force_inv_owner_permissive(LLViewerObject* object,
- InventoryObjectList* inventory,
+ LLInventoryObject::object_list_t* inventory,
S32 serial_num,
void*)
{
typedef std::vector<LLPointer<LLViewerInventoryItem> > item_array_t;
item_array_t items;
- InventoryObjectList::const_iterator inv_it = inventory->begin();
- InventoryObjectList::const_iterator inv_end = inventory->end();
+ LLInventoryObject::object_list_t::const_iterator inv_it = inventory->begin();
+ LLInventoryObject::object_list_t::const_iterator inv_end = inventory->end();
for ( ; inv_it != inv_end; ++inv_it)
{
if(((*inv_it)->getType() != LLAssetType::AT_CATEGORY))
@@ -3983,9 +3995,9 @@ void handle_god_request_avatar_geometry(void *)
void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
{
- if(gAgent.cameraMouselook())
+ if(gAgentCamera.cameraMouselook())
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
//gInventoryView->setPanelOpen(TRUE);
@@ -4402,8 +4414,10 @@ void handle_buy_or_take()
}
else
{
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", total_price);
LLFloaterBuyCurrency::buyCurrency(
- "Buying this costs", total_price);
+ LLTrans::getString("BuyingCosts", args), total_price);
}
}
else
@@ -4422,35 +4436,22 @@ bool visible_take_object()
return !is_selection_buy_not_take() && enable_take();
}
+bool tools_visible_buy_object()
+{
+ return is_selection_buy_not_take();
+}
+
+bool tools_visible_take_object()
+{
+ return !is_selection_buy_not_take();
+}
+
class LLToolsEnableBuyOrTake : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
bool is_buy = is_selection_buy_not_take();
bool new_value = is_buy ? enable_buy_object() : enable_take();
-
- // Update label
- std::string label;
- std::string buy_text;
- std::string take_text;
- std::string param = userdata.asString();
- std::string::size_type offset = param.find(",");
- if (offset != param.npos)
- {
- buy_text = param.substr(0, offset);
- take_text = param.substr(offset+1);
- }
- if (is_buy)
- {
- label = buy_text;
- }
- else
- {
- label = take_text;
- }
- gMenuHolder->childSetText("Pie Object Take", label);
- gMenuHolder->childSetText("Menu Object Take", label);
-
return new_value;
}
};
@@ -4591,13 +4592,9 @@ BOOL sitting_on_selection()
}
// Need to determine if avatar is sitting on this object
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- if (!avatar)
- {
- return FALSE;
- }
+ if (!isAgentAvatarValid()) return FALSE;
- return (avatar->isSitting() && avatar->getRoot() == root_object);
+ return (gAgentAvatarp->isSitting() && gAgentAvatarp->getRoot() == root_object);
}
class LLToolsSaveToInventory : public view_listener_t
@@ -5039,7 +5036,7 @@ class LLViewEnableLastChatter : public view_listener_t
bool handleEvent(const LLSD& userdata)
{
// *TODO: add check that last chatter is in range
- bool new_value = (gAgent.cameraThirdPerson() && gAgent.getLastChatter().notNull());
+ bool new_value = (gAgentCamera.cameraThirdPerson() && gAgent.getLastChatter().notNull());
return new_value;
}
};
@@ -5153,7 +5150,7 @@ void print_agent_nvpairs(void*)
llinfos << "Can't find agent object" << llendl;
}
- llinfos << "Camera at " << gAgent.getCameraPositionGlobal() << llendl;
+ llinfos << "Camera at " << gAgentCamera.getCameraPositionGlobal() << llendl;
}
void show_debug_menus()
@@ -5190,10 +5187,6 @@ void toggle_debug_menus(void*)
{
BOOL visible = ! gSavedSettings.getBOOL("UseDebugMenus");
gSavedSettings.setBOOL("UseDebugMenus", visible);
- if(visible)
- {
- //LLFirstUse::useDebugMenus();
- }
show_debug_menus();
}
@@ -5338,13 +5331,23 @@ class LLWorldCreateLandmark : public view_listener_t
}
};
+class LLWorldPlaceProfile : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "agent"));
+
+ return true;
+ }
+};
+
void handle_look_at_selection(const LLSD& param)
{
const F32 PADDING_FACTOR = 1.75f;
BOOL zoom = (param.asString() == "zoom");
if (!LLSelectMgr::getInstance()->getSelection()->isEmpty())
{
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
LLBBox selection_bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();
F32 angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getAspect() > 1.f ? LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect() : LLViewerCamera::getInstance()->getView());
@@ -5361,17 +5364,17 @@ void handle_look_at_selection(const LLSD& param)
if (zoom)
{
// Make sure we are not increasing the distance between the camera and object
- LLVector3d orig_distance = gAgent.getCameraPositionGlobal() - LLSelectMgr::getInstance()->getSelectionCenterGlobal();
+ LLVector3d orig_distance = gAgentCamera.getCameraPositionGlobal() - LLSelectMgr::getInstance()->getSelectionCenterGlobal();
distance = llmin(distance, (F32) orig_distance.length());
- gAgent.setCameraPosAndFocusGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance),
+ gAgentCamera.setCameraPosAndFocusGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance),
LLSelectMgr::getInstance()->getSelectionCenterGlobal(),
object_id );
}
else
{
- gAgent.setFocusGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal(), object_id );
+ gAgentCamera.setFocusGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal(), object_id );
}
}
}
@@ -5384,7 +5387,7 @@ void handle_zoom_to_object(LLUUID object_id)
if (object)
{
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
LLBBox bbox = object->getBoundingBoxAgent() ;
F32 angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getAspect() > 1.f ? LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect() : LLViewerCamera::getInstance()->getView());
@@ -5396,7 +5399,7 @@ void handle_zoom_to_object(LLUUID object_id)
LLVector3d object_center_global = gAgent.getPosGlobalFromAgent(bbox.getCenterAgent());
- gAgent.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance),
+ gAgentCamera.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance),
object_center_global,
object_id );
}
@@ -5514,6 +5517,37 @@ bool enable_pay_object()
return false;
}
+bool visible_object_stand_up()
+{
+ // 'Object Stand Up' menu item is visible when agent is sitting on selection
+ return sitting_on_selection();
+}
+
+bool visible_object_sit()
+{
+ // 'Object Sit' menu item is visible when agent is not sitting on selection
+ bool is_sit_visible = !sitting_on_selection();
+ if (is_sit_visible)
+ {
+ LLMenuItemGL* sit_menu_item = gMenuHolder->getChild<LLMenuItemGL>("Object Sit");
+ // Init default 'Object Sit' menu item label
+ static const LLStringExplicit sit_text(sit_menu_item->getLabel());
+ // Update label
+ std::string label;
+ LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
+ if (node && node->mValid && !node->mSitName.empty())
+ {
+ label.assign(node->mSitName);
+ }
+ else
+ {
+ label = sit_text;
+ }
+ sit_menu_item->setLabel(label);
+ }
+ return is_sit_visible;
+}
+
class LLObjectEnableSitOrStand : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -5528,34 +5562,6 @@ class LLObjectEnableSitOrStand : public view_listener_t
new_value = true;
}
}
- // Update label
- std::string label;
- std::string sit_text;
- std::string stand_text;
- std::string param = userdata.asString();
- std::string::size_type offset = param.find(",");
- if (offset != param.npos)
- {
- sit_text = param.substr(0, offset);
- stand_text = param.substr(offset+1);
- }
- if (sitting_on_selection())
- {
- label = stand_text;
- }
- else
- {
- LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
- if (node && node->mValid && !node->mSitName.empty())
- {
- label.assign(node->mSitName);
- }
- else
- {
- label = sit_text;
- }
- }
- gMenuHolder->childSetText("Object Sit", label);
return new_value;
}
@@ -5591,7 +5597,7 @@ void handle_customize_avatar()
{
if (gAgentWearables.areWearablesLoaded())
{
- gAgent.changeCameraToCustomizeAvatar();
+ gAgentCamera.changeCameraToCustomizeAvatar();
}
}
@@ -5777,18 +5783,18 @@ class LLLandEdit : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- if (gAgent.getFocusOnAvatar() && gSavedSettings.getBOOL("EditCameraMovement") )
+ if (gAgentCamera.getFocusOnAvatar() && gSavedSettings.getBOOL("EditCameraMovement") )
{
// zoom in if we're looking at the avatar
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
- gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick());
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
+ gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
- gAgent.cameraOrbitOver( F_PI * 0.25f );
+ gAgentCamera.cameraOrbitOver( F_PI * 0.25f );
gViewerWindow->moveCursorToCenter();
}
else if ( gSavedSettings.getBOOL("EditCameraMovement") )
{
- gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick());
+ gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
gViewerWindow->moveCursorToCenter();
}
@@ -5847,7 +5853,7 @@ private:
S32 index = userdata.asInteger();
LLViewerJointAttachment* attachment_point = NULL;
if (index > 0)
- attachment_point = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL);
+ attachment_point = get_if_there(gAgentAvatarp->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL);
confirm_replace_attachment(0, attachment_point);
}
return true;
@@ -5868,8 +5874,8 @@ void near_attach_object(BOOL success, void *user_data)
U8 attachment_id = 0;
if (attachment)
{
- for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin();
- iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter)
+ for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); ++iter)
{
if (iter->second == attachment)
{
@@ -5914,7 +5920,7 @@ void confirm_replace_attachment(S32 option, void* user_data)
walkToSpot -= delta;
gAgent.startAutoPilotGlobal(gAgent.getPosGlobalFromAgent(walkToSpot), "Attach", NULL, near_attach_object, user_data, stop_distance);
- gAgent.clearFocusObject();
+ gAgentCamera.clearFocusObject();
}
}
}
@@ -5994,7 +6000,7 @@ class LLAttachmentDetachFromPoint : public view_listener_t
{
bool handleEvent(const LLSD& user_data)
{
- const LLViewerJointAttachment *attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, user_data.asInteger(), (LLViewerJointAttachment*)NULL);
+ const LLViewerJointAttachment *attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, user_data.asInteger(), (LLViewerJointAttachment*)NULL);
if (attachment->getNumObjects() > 0)
{
gMessageSystem->newMessage("ObjectDetach");
@@ -6022,7 +6028,7 @@ static bool onEnableAttachmentLabel(LLUICtrl* ctrl, const LLSD& data)
LLMenuItemGL* menu = dynamic_cast<LLMenuItemGL*>(ctrl);
if (menu)
{
- const LLViewerJointAttachment *attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, data["index"].asInteger(), (LLViewerJointAttachment*)NULL);
+ const LLViewerJointAttachment *attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, data["index"].asInteger(), (LLViewerJointAttachment*)NULL);
if (attachment)
{
label = data["label"].asString();
@@ -6140,7 +6146,7 @@ class LLAttachmentEnableDrop : public view_listener_t
if (object && LLSelectMgr::getInstance()->getSelection()->contains(object,SELECT_ALL_TES ))
{
S32 attachmentID = ATTACHMENT_ID_FROM_STATE(object->getState());
- attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, attachmentID, (LLViewerJointAttachment*)NULL);
+ attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, attachmentID, (LLViewerJointAttachment*)NULL);
if (attachment)
{
@@ -6158,11 +6164,11 @@ class LLAttachmentEnableDrop : public view_listener_t
// if a fetch is already out there (being sent from a slow sim)
// we refetch and there are 2 fetches
LLWornItemFetchedObserver* wornItemFetched = new LLWornItemFetchedObserver();
- LLInventoryFetchObserver::item_ref_t items; //add item to the inventory item to be fetched
+ uuid_vec_t items; //add item to the inventory item to be fetched
items.push_back((*attachment_iter)->getItemID());
- wornItemFetched->fetchItems(items);
+ wornItemFetched->fetch(items);
gInventory.addObserver(wornItemFetched);
}
}
@@ -6272,8 +6278,8 @@ class LLAttachmentPointFilled : public view_listener_t
bool handleEvent(const LLSD& user_data)
{
bool enable = false;
- LLVOAvatar::attachment_map_t::iterator found_it = gAgent.getAvatarObject()->mAttachmentPoints.find(user_data.asInteger());
- if (found_it != gAgent.getAvatarObject()->mAttachmentPoints.end())
+ LLVOAvatar::attachment_map_t::iterator found_it = gAgentAvatarp->mAttachmentPoints.find(user_data.asInteger());
+ if (found_it != gAgentAvatarp->mAttachmentPoints.end())
{
enable = found_it->second->getNumObjects() > 0;
}
@@ -6469,13 +6475,13 @@ void handle_selected_texture_info(void*)
void handle_test_male(void*)
{
- LLAppearanceManager::instance().wearOutfitByName("Male Shape & Outfit");
+ LLAppearanceMgr::instance().wearOutfitByName("Male Shape & Outfit");
//gGestureList.requestResetFromServer( TRUE );
}
void handle_test_female(void*)
{
- LLAppearanceManager::instance().wearOutfitByName("Female Shape & Outfit");
+ LLAppearanceMgr::instance().wearOutfitByName("Female Shape & Outfit");
//gGestureList.requestResetFromServer( FALSE );
}
@@ -6490,15 +6496,10 @@ void handle_toggle_pg(void*)
void handle_dump_attachments(void*)
{
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- if( !avatar )
- {
- llinfos << "NO AVATAR" << llendl;
- return;
- }
+ if(!isAgentAvatarValid()) return;
- for (LLVOAvatar::attachment_map_t::iterator iter = avatar->mAttachmentPoints.begin();
- iter != avatar->mAttachmentPoints.end(); )
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
@@ -6760,7 +6761,7 @@ class LLViewEnableMouselook : public view_listener_t
{
// You can't go directly from customize avatar to mouselook.
// TODO: write code with appropriate dialogs to handle this transition.
- bool new_value = (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() && !gSavedSettings.getBOOL("FreezeTime"));
+ bool new_value = (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && !gSavedSettings.getBOOL("FreezeTime"));
return new_value;
}
};
@@ -6918,7 +6919,7 @@ void reload_vertex_shader(void *)
void handle_dump_avatar_local_textures(void*)
{
- gAgent.getAvatarObject()->dumpLocalTextures();
+ gAgentAvatarp->dumpLocalTextures();
}
void handle_dump_timers()
@@ -6938,86 +6939,83 @@ void handle_debug_avatar_textures(void*)
void handle_grab_texture(void* data)
{
ETextureIndex tex_index = (ETextureIndex)((intptr_t)data);
- const LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if ( avatar )
- {
- // MULTI-WEARABLE: change to support an index
- const LLUUID& asset_id = avatar->grabLocalTexture(tex_index, 0);
- LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl;
- LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE;
- LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE;
- const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type));
- if(folder_id.notNull())
- {
- std::string name = "Unknown";
- const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(tex_index);
- if (texture_dict->mIsBakedTexture)
- {
- EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
- name = "Baked " + LLVOAvatarDictionary::getInstance()->getBakedTexture(baked_index)->mNameCapitalized;
- }
- name += " Texture";
-
- LLUUID item_id;
- item_id.generate();
- LLPermissions perm;
- perm.init(gAgentID,
- gAgentID,
- LLUUID::null,
- LLUUID::null);
- U32 next_owner_perm = PERM_MOVE | PERM_TRANSFER;
- perm.initMasks(PERM_ALL,
- PERM_ALL,
- PERM_NONE,
- PERM_NONE,
- next_owner_perm);
- time_t creation_date_now = time_corrected();
- LLPointer<LLViewerInventoryItem> item
- = new LLViewerInventoryItem(item_id,
- folder_id,
- perm,
- asset_id,
- asset_type,
- inv_type,
- name,
- LLStringUtil::null,
- LLSaleInfo::DEFAULT,
- LLInventoryItem::II_FLAGS_NONE,
- creation_date_now);
-
- item->updateServer(TRUE);
- gInventory.updateItem(item);
- gInventory.notifyObservers();
-
- // Show the preview panel for textures to let
- // user know that the image is now in inventory.
- LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel();
- if(active_panel)
- {
- LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
-
- active_panel->setSelection(item_id, TAKE_FOCUS_NO);
- active_panel->openSelected();
- //LLFloaterInventory::dumpSelectionInformation((void*)view);
- // restore keyboard focus
- gFocusMgr.setKeyboardFocus(focus_ctrl);
- }
- }
- else
- {
- llwarns << "Can't find a folder to put it in" << llendl;
+ if (!isAgentAvatarValid()) return;
+
+ // MULTI-WEARABLE: change to support an index
+ const LLUUID& asset_id = gAgentAvatarp->grabLocalTexture(tex_index, 0);
+ LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl;
+ LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE;
+ LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE;
+ const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type));
+ if(folder_id.notNull())
+ {
+ std::string name = "Unknown";
+ const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(tex_index);
+ if (texture_dict->mIsBakedTexture)
+ {
+ EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
+ name = "Baked " + LLVOAvatarDictionary::getInstance()->getBakedTexture(baked_index)->mNameCapitalized;
+ }
+ name += " Texture";
+
+ LLUUID item_id;
+ item_id.generate();
+ LLPermissions perm;
+ perm.init(gAgentID,
+ gAgentID,
+ LLUUID::null,
+ LLUUID::null);
+ U32 next_owner_perm = PERM_MOVE | PERM_TRANSFER;
+ perm.initMasks(PERM_ALL,
+ PERM_ALL,
+ PERM_NONE,
+ PERM_NONE,
+ next_owner_perm);
+ time_t creation_date_now = time_corrected();
+ LLPointer<LLViewerInventoryItem> item
+ = new LLViewerInventoryItem(item_id,
+ folder_id,
+ perm,
+ asset_id,
+ asset_type,
+ inv_type,
+ name,
+ LLStringUtil::null,
+ LLSaleInfo::DEFAULT,
+ LLInventoryItemFlags::II_FLAGS_NONE,
+ creation_date_now);
+
+ item->updateServer(TRUE);
+ gInventory.updateItem(item);
+ gInventory.notifyObservers();
+
+ // Show the preview panel for textures to let
+ // user know that the image is now in inventory.
+ LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel();
+ if(active_panel)
+ {
+ LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
+
+ active_panel->setSelection(item_id, TAKE_FOCUS_NO);
+ active_panel->openSelected();
+ //LLFloaterInventory::dumpSelectionInformation((void*)view);
+ // restore keyboard focus
+ gFocusMgr.setKeyboardFocus(focus_ctrl);
}
}
+ else
+ {
+ llwarns << "Can't find a folder to put it in" << llendl;
+ }
}
BOOL enable_grab_texture(void* data)
{
ETextureIndex index = (ETextureIndex)((intptr_t)data);
- const LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if ( avatar )
+ if (isAgentAvatarValid())
{
// MULTI-WEARABLE:
- return avatar->canGrabLocalTexture(index,0);
+ return gAgentAvatarp->canGrabLocalTexture(index,0);
}
return FALSE;
}
@@ -7056,7 +7054,7 @@ LLVOAvatar* find_avatar_from_object( const LLUUID& object_id )
void handle_disconnect_viewer(void *)
{
- LLAppViewer::instance()->forceDisconnect("Testing viewer disconnect");
+ LLAppViewer::instance()->forceDisconnect(LLTrans::getString("TestingDisconnect"));
}
void force_error_breakpoint(void *)
@@ -7228,12 +7226,11 @@ void handle_buy_currency_test(void*)
void handle_rebake_textures(void*)
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if (!avatar) return;
+ if (!isAgentAvatarValid()) return;
// Slam pending upload count to "unstick" things
bool slam_for_debug = true;
- avatar->forceBakeAllTextures(slam_for_debug);
+ gAgentAvatarp->forceBakeAllTextures(slam_for_debug);
}
void toggle_visibility(void* user_data)
@@ -7753,6 +7750,7 @@ void initialize_menus()
commit.add("World.Chat", boost::bind(&handle_chat, (void*)NULL));
view_listener_t::addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun");
view_listener_t::addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark");
+ view_listener_t::addMenu(new LLWorldPlaceProfile(), "World.PlaceProfile");
view_listener_t::addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation");
view_listener_t::addMenu(new LLWorldTeleportHome(), "World.TeleportHome");
view_listener_t::addMenu(new LLWorldSetAway(), "World.SetAway");
@@ -7802,12 +7800,11 @@ void initialize_menus()
view_listener_t::addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink");
view_listener_t::addMenu(new LLToolsEnableBuyOrTake(), "Tools.EnableBuyOrTake");
enable.add("Tools.EnableTakeCopy", boost::bind(&enable_object_take_copy));
+ enable.add("Tools.VisibleBuyObject", boost::bind(&tools_visible_buy_object));
+ enable.add("Tools.VisibleTakeObject", boost::bind(&tools_visible_take_object));
view_listener_t::addMenu(new LLToolsEnableSaveToInventory(), "Tools.EnableSaveToInventory");
view_listener_t::addMenu(new LLToolsEnableSaveToObjectInventory(), "Tools.EnableSaveToObjectInventory");
- /*view_listener_t::addMenu(new LLToolsVisibleBuyObject(), "Tools.VisibleBuyObject");
- view_listener_t::addMenu(new LLToolsVisibleTakeObject(), "Tools.VisibleTakeObject");*/
-
// Help menu
// most items use the ShowFloater method
@@ -8030,6 +8027,9 @@ void initialize_menus()
enable.add("Object.EnableDelete", boost::bind(&enable_object_delete));
enable.add("Object.EnableWear", boost::bind(&object_selected_and_point_valid));
+ enable.add("Object.StandUpVisible", boost::bind(&visible_object_stand_up));
+ enable.add("Object.SitVisible", boost::bind(&visible_object_sit));
+
view_listener_t::addMenu(new LLObjectEnableReturn(), "Object.EnableReturn");
view_listener_t::addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse");
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index d3c34f0de4..d72ea00077 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -157,6 +157,7 @@ extern const std::string SAVE_INTO_INVENTORY;
extern LLMenuBarGL* gMenuBarView;
//extern LLView* gMenuBarHolder;
+extern LLMenuGL* gEditMenu;
extern LLMenuGL* gPopupMenuView;
extern LLViewerMenuHolderGL* gMenuHolder;
extern LLMenuBarGL* gLoginMenuBarView;
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 84b270f8cc..c415d89e9c 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -36,6 +36,7 @@
// project includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "llfilepicker.h"
#include "llfloaterreg.h"
#include "llfloaterbuycurrency.h"
@@ -140,9 +141,9 @@ std::string build_extensions_string(LLFilePicker::ELoadFilter filter)
**/
const std::string upload_pick(void* data)
{
- if( gAgent.cameraMouselook() )
+ if( gAgentCamera.cameraMouselook() )
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
// This doesn't seem necessary. JC
// display();
}
@@ -289,9 +290,9 @@ class LLFileUploadBulk : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- if( gAgent.cameraMouselook() )
+ if( gAgentCamera.cameraMouselook() )
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
// TODO:
@@ -317,13 +318,11 @@ class LLFileUploadBulk : public view_listener_t
LLStringUtil::trim(asset_name);
std::string display_name = LLStringUtil::null;
- LLAssetStorage::LLStoreAssetCallback callback = NULL;
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
- void *userdata = NULL;
- upload_new_resource(filename, asset_name, asset_name, 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
+ upload_new_resource(filename, asset_name, asset_name, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
display_name,
- callback, expected_upload_cost, userdata);
+ NULL, expected_upload_cost);
// *NOTE: Ew, we don't iterate over the file list here,
// we handle the next files in upload_done_callback()
@@ -411,7 +410,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
{
gViewerWindow->playSnapshotAnimAndSound();
- LLImageBase::setSizeOverride(TRUE);
LLPointer<LLImageFormatted> formatted;
switch(LLFloaterSnapshot::ESnapshotFormat(gSavedSettings.getS32("SnapshotFormat")))
{
@@ -426,12 +424,12 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
break;
default:
llwarns << "Unknown Local Snapshot format" << llendl;
- LLImageBase::setSizeOverride(FALSE);
return true;
}
+ formatted->enableOverSize() ;
formatted->encode(raw, 0);
- LLImageBase::setSizeOverride(FALSE);
+ formatted->disableOverSize() ;
gViewerWindow->saveImageNumbered(formatted);
}
return true;
@@ -480,16 +478,15 @@ void handle_compress_image(void*)
}
void upload_new_resource(const std::string& src_filename, std::string name,
- std::string desc, S32 compression_info,
+ std::string desc,
LLFolderType::EType destination_folder_type,
LLInventoryType::EType inv_type,
U32 next_owner_perms,
U32 group_perms,
U32 everyone_perms,
const std::string& display_name,
- LLAssetStorage::LLStoreAssetCallback callback,
- S32 expected_upload_cost,
- void *userdata)
+ boost::function<void(const LLUUID& uuid)> callback,
+ S32 expected_upload_cost)
{
// Generate the temporary UUID.
std::string filename = gDirUtilp->getTempFilename();
@@ -771,9 +768,9 @@ void upload_new_resource(const std::string& src_filename, std::string name,
{
t_disp_name = src_filename;
}
- upload_new_resource(tid, asset_type, name, desc, compression_info, // tid
+ upload_new_resource(tid, asset_type, name, desc,
destination_folder_type, inv_type, next_owner_perms, group_perms, everyone_perms,
- display_name, callback, expected_upload_cost, userdata);
+ display_name, callback, expected_upload_cost);
}
else
{
@@ -811,10 +808,10 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
if(!(can_afford_transaction(expected_upload_cost)))
{
- LLFloaterBuyCurrency::buyCurrency(
- llformat(LLTrans::getString("UploadingCosts").c_str(),
- data->mAssetInfo.getName().c_str()),
- expected_upload_cost);
+ LLStringUtil::format_map_t args;
+ args["NAME"] = data->mAssetInfo.getName();
+ args["AMOUNT"] = llformat("%d", expected_upload_cost);
+ LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("UploadingCosts", args), expected_upload_cost);
is_balance_sufficient = FALSE;
}
else if(region)
@@ -892,30 +889,28 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt
LLStringUtil::trim(asset_name);
std::string display_name = LLStringUtil::null;
- LLAssetStorage::LLStoreAssetCallback callback = NULL;
- void *userdata = NULL;
upload_new_resource(next_file, asset_name, asset_name, // file
- 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
+ LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
PERM_NONE, PERM_NONE, PERM_NONE,
display_name,
- callback,
- expected_upload_cost, // assuming next in a group of uploads is of roughly the same type, i.e. same upload cost
- userdata);
+ NULL,
+ expected_upload_cost); // assuming next in a group of uploads is of roughly the same type, i.e. same upload cost
+
}
}
-void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type,
+void upload_new_resource(const LLTransactionID &tid,
+ LLAssetType::EType asset_type,
std::string name,
- std::string desc, S32 compression_info,
+ std::string desc,
LLFolderType::EType destination_folder_type,
LLInventoryType::EType inv_type,
U32 next_owner_perms,
U32 group_perms,
U32 everyone_perms,
const std::string& display_name,
- LLAssetStorage::LLStoreAssetCallback callback,
- S32 expected_upload_cost,
- void *userdata)
+ boost::function<void(const LLUUID& uuid)> callback,
+ S32 expected_upload_cost)
{
if(gDisconnected)
{
@@ -959,76 +954,26 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty
upload_message.append(display_name);
LLUploadDialog::modalUploadDialog(upload_message);
- llinfos << "*** Uploading: " << llendl;
- llinfos << "Type: " << LLAssetType::lookup(asset_type) << llendl;
- llinfos << "UUID: " << uuid << llendl;
- llinfos << "Name: " << name << llendl;
- llinfos << "Desc: " << desc << llendl;
- llinfos << "Expected Upload Cost: " << expected_upload_cost << llendl;
- lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl;
- lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl;
std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory");
- if (!url.empty())
- {
- llinfos << "New Agent Inventory via capability" << llendl;
- LLSD body;
- body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type);
- body["asset_type"] = LLAssetType::lookup(asset_type);
- body["inventory_type"] = LLInventoryType::lookup(inv_type);
- body["name"] = name;
- body["description"] = desc;
- body["next_owner_mask"] = LLSD::Integer(next_owner_perms);
- body["group_mask"] = LLSD::Integer(group_perms);
- body["everyone_mask"] = LLSD::Integer(everyone_perms);
- body["expected_upload_cost"] = LLSD::Integer(expected_upload_cost);
-
- //std::ostringstream llsdxml;
- //LLSDSerialize::toPrettyXML(body, llsdxml);
- //llinfos << "posting body to capability: " << llsdxml.str() << llendl;
-
- LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type));
+
+ if (url.empty()) {
+ llwarns << "Could not get NewFileAgentInventory capability" << llendl;
+ return;
}
- else
- {
- llinfos << "NewAgentInventory capability not found, new agent inventory via asset system." << llendl;
- // check for adequate funds
- // TODO: do this check on the sim
- if (LLAssetType::AT_SOUND == asset_type ||
- LLAssetType::AT_TEXTURE == asset_type ||
- LLAssetType::AT_ANIMATION == asset_type)
- {
- S32 balance = gStatusBar->getBalance();
- if (balance < expected_upload_cost)
- {
- // insufficient funds, bail on this upload
- LLFloaterBuyCurrency::buyCurrency("Uploading costs", expected_upload_cost);
- return;
- }
- }
- LLResourceData* data = new LLResourceData;
- data->mAssetInfo.mTransactionID = tid;
- data->mAssetInfo.mUuid = uuid;
- data->mAssetInfo.mType = asset_type;
- data->mAssetInfo.mCreatorID = gAgentID;
- data->mInventoryType = inv_type;
- data->mNextOwnerPerm = next_owner_perms;
- data->mExpectedUploadCost = expected_upload_cost;
- data->mUserData = userdata;
- data->mAssetInfo.setName(name);
- data->mAssetInfo.setDescription(desc);
- data->mPreferredLocation = destination_folder_type;
-
- LLAssetStorage::LLStoreAssetCallback asset_callback = &upload_done_callback;
- if (callback)
- {
- asset_callback = callback;
- }
- gAssetStorage->storeAssetData(data->mAssetInfo.mTransactionID, data->mAssetInfo.mType,
- asset_callback,
- (void*)data,
- FALSE);
- }
+ llinfos << "New Agent Inventory via capability" << llendl;
+ LLSD body;
+ body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type);
+ body["asset_type"] = LLAssetType::lookup(asset_type);
+ body["inventory_type"] = LLInventoryType::lookup(inv_type);
+ body["name"] = name;
+ body["description"] = desc;
+ body["next_owner_mask"] = LLSD::Integer(next_owner_perms);
+ body["group_mask"] = LLSD::Integer(group_perms);
+ body["everyone_mask"] = LLSD::Integer(everyone_perms);
+ body["expected_upload_cost"] = LLSD::Integer(expected_upload_cost);
+
+ LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type, callback));
}
void init_menu_file()
diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h
index 1e6d13f1c6..33f8243ac0 100644
--- a/indra/newview/llviewermenufile.h
+++ b/indra/newview/llviewermenufile.h
@@ -34,41 +34,35 @@
#define LLVIEWERMENUFILE_H
#include "llfoldertype.h"
-#include "llassetstorage.h"
#include "llinventorytype.h"
class LLTransactionID;
-
void init_menu_file();
void upload_new_resource(const std::string& src_filename,
std::string name,
std::string desc,
- S32 compression_info,
LLFolderType::EType destination_folder_type,
LLInventoryType::EType inv_type,
U32 next_owner_perms,
U32 group_perms,
U32 everyone_perms,
const std::string& display_name,
- LLAssetStorage::LLStoreAssetCallback callback,
- S32 expected_upload_cost,
- void *userdata);
+ boost::function<void(const LLUUID& uuid)> callback,
+ S32 expected_upload_cost);
void upload_new_resource(const LLTransactionID &tid,
LLAssetType::EType type,
std::string name,
std::string desc,
- S32 compression_info,
LLFolderType::EType destination_folder_type,
LLInventoryType::EType inv_type,
U32 next_owner_perms,
U32 group_perms,
U32 everyone_perms,
const std::string& display_name,
- LLAssetStorage::LLStoreAssetCallback callback,
- S32 expected_upload_cost,
- void *userdata);
+ boost::function<void(const LLUUID& uuid)> callback,
+ S32 expected_upload_cost);
#endif
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index b36f58f8ff..c542459cdb 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -41,6 +41,7 @@
#include "lleventtimer.h"
#include "llfloaterreg.h"
#include "llfollowcamparams.h"
+#include "llinventorydefines.h"
#include "llregionhandle.h"
#include "llsdserialize.h"
#include "llteleportflags.h"
@@ -51,6 +52,7 @@
#include "mean_collision_data.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llcallingcard.h"
//#include "llfirstuse.h"
#include "llfloaterbuycurrency.h"
@@ -62,6 +64,7 @@
#include "llfloaterpreference.h"
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
+#include "llinventoryfunctions.h"
#include "llinventoryobserver.h"
#include "llinventorypanel.h"
#include "llnearbychat.h"
@@ -105,6 +108,7 @@
#include "llpanelplaceprofile.h"
#include <boost/algorithm/string/split.hpp> //
+#include <boost/regex.hpp>
#if LL_WINDOWS // For Windows specific error handler
#include "llwindebug.h" // For the invalid message handler
@@ -207,6 +211,7 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
LLNotificationsUtil::add("FriendshipDeclinedByMe",
notification["substitutions"], payload);
}
+ // fall-through
case 2: // Send IM - decline and start IM session
{
// decline
@@ -271,7 +276,9 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_
}
else
{
- LLFloaterBuyCurrency::buyCurrency("Giving", amount);
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", amount);
+ LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("giving", args), amount);
}
}
@@ -865,9 +872,9 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
}
}
-void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name)
+void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
{
- for (std::vector<LLUUID>::const_iterator item_iter = items.begin();
+ for (uuid_vec_t::const_iterator item_iter = items.begin();
item_iter != items.end();
++item_iter)
{
@@ -1080,6 +1087,21 @@ LLOfferInfo::LLOfferInfo(const LLSD& sd)
mHost = LLHost(sd["sender"].asString());
}
+LLOfferInfo::LLOfferInfo(const LLOfferInfo& info)
+{
+ mIM = info.mIM;
+ mFromID = info.mFromID;
+ mFromGroup = info.mFromGroup;
+ mFromObject = info.mFromObject;
+ mTransactionID = info.mTransactionID;
+ mFolderID = info.mFolderID;
+ mObjectID = info.mObjectID;
+ mType = info.mType;
+ mFromName = info.mFromName;
+ mDesc = info.mDesc;
+ mHost = info.mHost;
+}
+
LLSD LLOfferInfo::asLLSD()
{
LLSD sd;
@@ -1182,10 +1204,10 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
// This is an offer from an agent. In this case, the back
// end has already copied the items into your inventory,
// so we can fetch it out of our inventory.
- LLInventoryFetchObserver::item_ref_t items;
+ uuid_vec_t items;
items.push_back(mObjectID);
LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(from_string);
- open_agent_offer->fetchItems(items);
+ open_agent_offer->fetch(items);
if(catp || (itemp && itemp->isComplete()))
{
open_agent_offer->done();
@@ -1243,8 +1265,8 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
// Disabled logging to old chat floater to fix crash in group notices - EXT-4149
// LLFloaterChat::addChatHistory(chat);
- LLInventoryFetchComboObserver::folder_ref_t folders;
- LLInventoryFetchComboObserver::item_ref_t items;
+ uuid_vec_t folders;
+ uuid_vec_t items;
items.push_back(mObjectID);
LLDiscardAgentOffer* discard_agent_offer;
discard_agent_offer = new LLDiscardAgentOffer(mFolderID, mObjectID);
@@ -1499,7 +1521,9 @@ void inventory_offer_handler(LLOfferInfo* info)
std::string typestr = ll_safe_string(LLAssetType::lookupHumanReadable(info->mType));
if (!typestr.empty())
{
- args["OBJECTTYPE"] = typestr;
+ // human readable matches string name from strings.xml
+ // lets get asset type localized name
+ args["OBJECTTYPE"] = LLTrans::getString(typestr);
}
else
{
@@ -1569,15 +1593,19 @@ void inventory_offer_handler(LLOfferInfo* info)
}
else // Agent -> Agent Inventory Offer
{
+ p.responder = info;
// Note: sets inventory_offer_callback as the callback
+ // *TODO fix memory leak
+ // inventory_offer_callback() is not invoked if user received notification and
+ // closes viewer(without responding the notification)
p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, info, _1, _2));
p.name = "UserGiveItem";
// Prefetch the item into your local inventory.
- LLInventoryFetchObserver::item_ref_t items;
+ uuid_vec_t items;
items.push_back(info->mObjectID);
LLInventoryFetchObserver* fetch_item = new LLInventoryFetchObserver();
- fetch_item->fetchItems(items);
+ fetch_item->fetch(items);
if(fetch_item->isEverythingComplete())
{
fetch_item->done();
@@ -1658,6 +1686,18 @@ bool inspect_remote_object_callback(const LLSD& notification, const LLSD& respon
}
static LLNotificationFunctorRegistration inspect_remote_object_callback_reg("ServerObjectMessage", inspect_remote_object_callback);
+class LLPostponedServerObjectNotification: public LLPostponedNotification
+{
+protected:
+ /* virtual */
+ void modifyNotificationParams()
+ {
+ LLSD payload = mParams.payload;
+ payload["SESSION_NAME"] = mName;
+ mParams.payload = payload;
+ }
+};
+
void process_improved_im(LLMessageSystem *msg, void **user_data)
{
if (gNoRender)
@@ -1727,17 +1767,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
std::string separator_string(": ");
LLSD args;
+ LLSD payload;
switch(dialog)
{
case IM_CONSOLE_AND_CHAT_HISTORY:
- // These are used for system messages, hence don't need the name,
- // as it is always "Second Life".
// *TODO: Translate
args["MESSAGE"] = message;
-
- // Note: don't put the message in the IM history, even though was sent
- // via the IM mechanism.
- LLNotificationsUtil::add("SystemMessageTip",args);
+ payload["SESSION_NAME"] = name;
+ payload["from_id"] = from_id;
+ LLNotificationsUtil::add("IMSystemMessageTip",args, payload);
break;
case IM_NOTHING_SPECIAL:
@@ -1960,7 +1998,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// For requested notices, we don't want to send the popups.
if (dialog != IM_GROUP_NOTICE_REQUESTED)
{
- LLSD payload;
payload["subject"] = subj;
payload["message"] = mes;
payload["sender_name"] = name;
@@ -2084,10 +2121,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
if (is_muted)
{
// Prefetch the offered item so that it can be discarded by the appropriate observer. (EXT-4331)
- LLInventoryFetchObserver::item_ref_t items;
+ uuid_vec_t items;
items.push_back(info->mObjectID);
LLInventoryFetchObserver* fetch_item = new LLInventoryFetchObserver();
- fetch_item->fetchItems(items);
+ fetch_item->fetch(items);
delete fetch_item;
// Same as closing window
@@ -2196,7 +2233,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
if(SYSTEM_FROM == name)
{
// System's UUID is NULL (fixes EXT-4766)
- chat.mFromID = from_id = LLUUID::null;
+ chat.mFromID = LLUUID::null;
}
LLSD query_string;
@@ -2242,13 +2279,16 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
payload["slurl"] = location;
payload["name"] = name;
std::string session_name;
- gCacheName->getFullName(from_id, session_name);
- payload["SESSION_NAME"] = session_name;
if (from_group)
{
payload["group_owned"] = "true";
}
- LLNotificationsUtil::add("ServerObjectMessage", substitutions, payload);
+
+ LLNotification::Params params("ServerObjectMessage");
+ params.substitutions = substitutions;
+ params.payload = payload;
+
+ LLPostponedNotification::add<LLPostponedServerObjectNotification>(params, from_id, false);
}
break;
case IM_FROM_TASK_AS_ALERT:
@@ -2291,7 +2331,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
{
LLSD args;
// *TODO: Translate -> [FIRST] [LAST] (maybe)
- args["NAME"] = name;
+ args["NAME_SLURL"] = LLSLURL::buildCommand("agent", from_id, "about");
args["MESSAGE"] = message;
LLSD payload;
payload["from_id"] = from_id;
@@ -2357,7 +2397,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
}
else
{
- args["[NAME]"] = name;
+ args["NAME_SLURL"] = LLSLURL::buildCommand("agent", from_id, "about");
if(message.empty())
{
//support for frienship offers from clients before July 2008
@@ -2818,8 +2858,8 @@ public:
LLInventoryModel::cat_array_t land_cats;
LLInventoryModel::item_array_t land_items;
- folder_ref_t::iterator it = mCompleteFolders.begin();
- folder_ref_t::iterator end = mCompleteFolders.end();
+ uuid_vec_t::iterator it = mComplete.begin();
+ uuid_vec_t::iterator end = mComplete.end();
for(; it != end; ++it)
{
gInventory.collectDescendentsIf(
@@ -2880,7 +2920,7 @@ BOOL LLPostTeleportNotifiers::tick()
if ( gAgent.getTeleportState() == LLAgent::TELEPORT_NONE )
{
// get callingcards and landmarks available to the user arriving.
- LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+ uuid_vec_t folders;
const LLUUID callingcard_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
if(callingcard_id.notNull())
folders.push_back(callingcard_id);
@@ -2890,7 +2930,7 @@ BOOL LLPostTeleportNotifiers::tick()
if(!folders.empty())
{
LLFetchInWelcomeArea* fetcher = new LLFetchInWelcomeArea;
- fetcher->fetchDescendents(folders);
+ fetcher->fetch(folders);
if(fetcher->isEverythingComplete())
{
fetcher->done();
@@ -2920,6 +2960,9 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
return;
}
+
+ // Teleport is finished; it can't be cancelled now.
+ gViewerWindow->setProgressCancelButtonVisible(FALSE);
// Do teleport effect for where you're leaving
// VEFFECT: TeleportStart
@@ -2965,18 +3008,18 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
/*
// send camera update to new region
- gAgent.updateCamera();
+ gAgentCamera.updateCamera();
// likewise make sure the camera is behind the avatar
- gAgent.resetView(TRUE);
+ gAgentCamera.resetView(TRUE);
LLVector3 shift_vector = regionp->getPosRegionFromGlobal(gAgent.getRegion()->getOriginGlobal());
gAgent.setRegion(regionp);
gObjectList.shiftObjects(shift_vector);
- if (gAgent.getAvatarObject())
+ if (isAgentAvatarValid())
{
- gAgent.getAvatarObject()->clearChatText();
- gAgent.slamLookAt(look_at);
+ gAgentAvatarp->clearChatText();
+ gAgentCamera.slamLookAt(look_at);
}
gAgent.setPositionAgent(pos);
gAssetStorage->setUpstream(sim);
@@ -3055,8 +3098,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
std::string version_channel;
msg->getString("SimData", "ChannelVersion", version_channel);
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (!avatarp)
+ if (!isAgentAvatarValid())
{
// Could happen if you were immediately god-teleported away on login,
// maybe other cases. Continue, but warn.
@@ -3077,7 +3119,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
<< x << ":" << y
<< " current pos " << gAgent.getPositionGlobal()
<< LL_ENDL;
- LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region.");
+ LLAppViewer::instance()->forceDisconnect(LLTrans::getString("SentToInvalidRegion"));
return;
}
@@ -3100,9 +3142,9 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
if( is_teleport )
{
// Force the camera back onto the agent, don't animate.
- gAgent.setFocusOnAvatar(TRUE, FALSE);
- gAgent.slamLookAt(look_at);
- gAgent.updateCamera();
+ gAgentCamera.setFocusOnAvatar(TRUE, FALSE);
+ gAgentCamera.slamLookAt(look_at);
+ gAgentCamera.updateCamera();
gAgent.setTeleportState( LLAgent::TELEPORT_START_ARRIVAL );
@@ -3110,18 +3152,22 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
// know what you look like.
gAgent.sendAgentSetAppearance();
- if (avatarp)
+ if (isAgentAvatarValid())
{
// Chat the "back" SLURL. (DEV-4907)
+ LLSD substitution = LLSD().with("[T_SLURL]", gAgent.getTeleportSourceSLURL());
+ std::string completed_from = LLAgent::sTeleportProgressMessages["completed_from"];
+ LLStringUtil::format(completed_from, substitution);
+
LLSD args;
- args["MESSAGE"] = "Teleport completed from " + gAgent.getTeleportSourceSLURL();
+ args["MESSAGE"] = completed_from;
LLNotificationsUtil::add("SystemMessageTip", args);
// Set the new position
- avatarp->setPositionAgent(agent_pos);
- avatarp->clearChat();
- avatarp->slamPosition();
+ gAgentAvatarp->setPositionAgent(agent_pos);
+ gAgentAvatarp->clearChat();
+ gAgentAvatarp->slamPosition();
}
}
else
@@ -3147,7 +3193,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
global_agent_pos[1] += y;
look_at = (LLVector3)beacon_pos - global_agent_pos;
look_at.normVec();
- gAgent.slamLookAt(look_at);
+ gAgentCamera.slamLookAt(look_at);
}
}
@@ -3181,9 +3227,9 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
gAgent.clearBusy();
}
- if (avatarp)
+ if (isAgentAvatarValid())
{
- avatarp->mFootPlane.clearVec();
+ gAgentAvatarp->mFootPlane.clearVec();
}
// send walk-vs-run status
@@ -3324,7 +3370,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
LLQuaternion body_rotation = gAgent.getFrameAgent().getQuaternion();
LLQuaternion head_rotation = gAgent.getHeadRotation();
- camera_pos_agent = gAgent.getCameraPositionAgent();
+ camera_pos_agent = gAgentCamera.getCameraPositionAgent();
render_state = gAgent.getRenderState();
@@ -3447,7 +3493,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
msg->addVector3Fast(_PREHASH_CameraAtAxis, LLViewerCamera::getInstance()->getAtAxis());
msg->addVector3Fast(_PREHASH_CameraLeftAxis, LLViewerCamera::getInstance()->getLeftAxis());
msg->addVector3Fast(_PREHASH_CameraUpAxis, LLViewerCamera::getInstance()->getUpAxis());
- msg->addF32Fast(_PREHASH_Far, gAgent.mDrawDistance);
+ msg->addF32Fast(_PREHASH_Far, gAgentCamera.mDrawDistance);
msg->addU32Fast(_PREHASH_ControlFlags, control_flags);
@@ -4084,7 +4130,7 @@ void process_avatar_appearance(LLMessageSystem *mesgsys, void **user_data)
mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid);
LLVOAvatar* avatarp = (LLVOAvatar *)gObjectList.findObject(uuid);
- if( avatarp )
+ if (avatarp)
{
avatarp->processAvatarAppearance( mesgsys );
}
@@ -4099,7 +4145,7 @@ void process_camera_constraint(LLMessageSystem *mesgsys, void **user_data)
LLVector4 cameraCollidePlane;
mesgsys->getVector4Fast(_PREHASH_CameraCollidePlane, _PREHASH_Plane, cameraCollidePlane);
- gAgent.setCameraCollidePlane(cameraCollidePlane);
+ gAgentCamera.setCameraCollidePlane(cameraCollidePlane);
}
void near_sit_object(BOOL success, void *data)
@@ -4132,20 +4178,18 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
BOOL force_mouselook;
mesgsys->getBOOLFast(_PREHASH_SitTransform, _PREHASH_ForceMouselook, force_mouselook);
- LLVOAvatar* avatar = gAgent.getAvatarObject();
-
- if (avatar && dist_vec_squared(camera_eye, camera_at) > 0.0001f)
+ if (isAgentAvatarValid() && dist_vec_squared(camera_eye, camera_at) > 0.0001f)
{
- gAgent.setSitCamera(sitObjectID, camera_eye, camera_at);
+ gAgentCamera.setSitCamera(sitObjectID, camera_eye, camera_at);
}
- gAgent.setForceMouselook(force_mouselook);
+ gAgentCamera.setForceMouselook(force_mouselook);
LLViewerObject* object = gObjectList.findObject(sitObjectID);
if (object)
{
LLVector3 sit_spot = object->getPositionAgent() + (sitPosition * object->getRotation());
- if (!use_autopilot || (avatar && avatar->isSitting() && avatar->getRoot() == object->getRoot()))
+ if (!use_autopilot || isAgentAvatarValid() && gAgentAvatarp->isSitting() && gAgentAvatarp->getRoot() == object->getRoot())
{
//we're already sitting on this object, so don't autopilot
}
@@ -4453,27 +4497,102 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
// have missed something during an event.
// *TODO: Translate
LLSD args;
- args["MESSAGE"] = desc;
+
// this is a marker to retrieve avatar name from server message:
// "<avatar name> paid you L$"
const std::string marker = "paid you L$";
+ args["MESSAGE"] = desc;
+
// extract avatar name from system message
- std::string name = desc.substr(0, desc.find(marker, 0));
+ S32 marker_pos = desc.find(marker, 0);
+
+ std::string base_name = desc.substr(0, marker_pos);
+
+ std::string name = base_name;
LLStringUtil::trim(name);
// if name extracted and name cache contains avatar id send loggable notification
LLUUID from_id;
if(name.size() > 0 && gCacheName->getUUID(name, from_id))
{
+ //description always comes not localized. lets fix this
+
+ //ammount paid
+ std::string ammount = desc.substr(marker_pos + marker.length(),desc.length() - marker.length() - marker_pos);
+
+ //reform description
+ LLStringUtil::format_map_t str_args;
+ str_args["NAME"] = base_name;
+ str_args["AMOUNT"] = ammount;
+ std::string new_description = LLTrans::getString("paid_you_ldollars", str_args);
+
+
+ args["MESSAGE"] = new_description;
args["NAME"] = name;
LLSD payload;
payload["from_id"] = from_id;
LLNotificationsUtil::add("PaymentRecived", args, payload);
}
+ //AD *HACK: Parsing incoming string to localize messages that come from server! EXT-5986
+ // It's only a temporarily and ineffective measure. It doesn't affect performance much
+ // because we get here only for specific type of messages, but anyway it is not right to do it!
+ // *TODO: Server-side changes should be made and this code removed.
else
{
+ if(desc.find("You paid")==0)
+ {
+ // Regular expression for message parsing- change it in case of server-side changes.
+ // Each set of parenthesis will later be used to find arguments of message we generate
+ // in the end of this if- (.*) gives us name of money receiver, (\\d+)-amount of money we pay
+ // and ([^$]*)- reason of payment
+ boost::regex expr("You paid (?:.{0}|(.*) )L\\$(\\d+)\\s?([^$]*)\\.");
+ boost::match_results <std::string::const_iterator> matches;
+ if(boost::regex_match(desc, matches, expr))
+ {
+ // Name of full localizable notification string
+ // there are three types of this string- with name of receiver and reason of payment,
+ // without name and without reason (but not simultaneously)
+ // example of string without name - You paid L$100 to create a group.
+ // example of string without reason - You paid Smdby Linden L$100.
+ // example of string with reason and name - You paid Smbdy Linden L$100 for a land access pass.
+ std::string line = "you_paid_ldollars_no_name";
+
+ // arguments of string which will be in notification
+ LLStringUtil::format_map_t str_args;
+
+ // extracting amount of money paid (without L$ symbols). It is always present.
+ str_args["[AMOUNT]"] = std::string(matches[2]);
+
+ // extracting name of person/group you are paying (it may be absent)
+ std::string name = std::string(matches[1]);
+ if(!name.empty())
+ {
+ str_args["[NAME]"] = name;
+ line = "you_paid_ldollars";
+ }
+
+ // extracting reason of payment (it may be absent)
+ std::string reason = std::string(matches[3]);
+ if (reason.empty())
+ {
+ line = "you_paid_ldollars_no_reason";
+ }
+ else
+ {
+ std::string localized_reason;
+ // if we haven't found localized string for reason of payment leave it as it was
+ str_args["[REASON]"] = LLTrans::findString(localized_reason, reason) ? localized_reason : reason;
+ }
+
+ // forming final message string by retrieving localized version from xml
+ // and applying previously found arguments
+ line = LLTrans::getString(line, str_args);
+ args["MESSAGE"] = line;
+ }
+ }
+
LLNotificationsUtil::add("SystemMessage", args);
}
@@ -5110,14 +5229,14 @@ void process_derez_container(LLMessageSystem *msg, void**)
}
void container_inventory_arrived(LLViewerObject* object,
- InventoryObjectList* inventory,
+ LLInventoryObject::object_list_t* inventory,
S32 serial_num,
void* data)
{
LL_DEBUGS("Messaging") << "container_inventory_arrived()" << LL_ENDL;
- if( gAgent.cameraMouselook() )
+ if( gAgentCamera.cameraMouselook() )
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel();
@@ -5130,8 +5249,8 @@ void container_inventory_arrived(LLViewerObject* object,
LLFolderType::FT_NONE,
LLTrans::getString("AcquiredItems"));
- InventoryObjectList::const_iterator it = inventory->begin();
- InventoryObjectList::const_iterator end = inventory->end();
+ LLInventoryObject::object_list_t::const_iterator it = inventory->begin();
+ LLInventoryObject::object_list_t::const_iterator end = inventory->end();
for ( ; it != end; ++it)
{
if ((*it)->getType() != LLAssetType::AT_CATEGORY)
@@ -5167,7 +5286,7 @@ void container_inventory_arrived(LLViewerObject* object,
{
// we're going to get one fake root category as well as the
// one actual object
- InventoryObjectList::iterator it = inventory->begin();
+ LLInventoryObject::object_list_t::iterator it = inventory->begin();
if ((*it)->getType() == LLAssetType::AT_CATEGORY)
{
@@ -5342,13 +5461,13 @@ void process_teleport_local(LLMessageSystem *msg,void**)
}
gAgent.setPositionAgent(pos);
- gAgent.slamLookAt(look_at);
+ gAgentCamera.slamLookAt(look_at);
// likewise make sure the camera is behind the avatar
- gAgent.resetView(TRUE, TRUE);
+ gAgentCamera.resetView(TRUE, TRUE);
// send camera update to new region
- gAgent.updateCamera();
+ gAgentCamera.updateCamera();
send_agent_update(TRUE, TRUE);
@@ -5460,6 +5579,8 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
args["TO_NAME"] = target_name;
LLSD payload;
+
+ //*TODO please rewrite all keys to the same case, lower or upper
payload["from_id"] = target_id;
payload["SESSION_NAME"] = target_name;
payload["SUPPRESS_TOAST"] = true;
@@ -5480,8 +5601,12 @@ void handle_lure(const LLUUID& invitee)
}
// Prompt for a message to the invited user.
-void handle_lure(const std::vector<LLUUID>& ids)
+void handle_lure(const uuid_vec_t& ids)
{
+ if (ids.empty()) return;
+
+ if (!gAgent.getRegion()) return;
+
LLSD edit_args;
edit_args["REGION"] = gAgent.getRegion()->getName();
diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h
index 7dd629dcfd..4015cca77b 100644
--- a/indra/newview/llviewermessage.h
+++ b/indra/newview/llviewermessage.h
@@ -129,7 +129,7 @@ void process_frozen_message(LLMessageSystem* msg, void**);
void process_derez_container(LLMessageSystem *msg, void**);
void container_inventory_arrived(LLViewerObject* object,
- std::list<LLPointer<LLInventoryObject> >* inventory, //InventoryObjectList
+ std::list<LLPointer<LLInventoryObject> >* inventory, //LLInventoryObject::object_list_t
S32 serial_num,
void* data);
@@ -157,7 +157,7 @@ void send_group_notice(const LLUUID& group_id,
const LLInventoryItem* item);
void handle_lure(const LLUUID& invitee);
-void handle_lure(const std::vector<LLUUID>& ids);
+void handle_lure(const uuid_vec_t& ids);
// always from gAgent and
// routes through the gAgent's current simulator
@@ -201,7 +201,7 @@ void invalid_message_callback(LLMessageSystem*, void*, EMessageException);
void process_initiate_download(LLMessageSystem* msg, void**);
void start_new_inventory_observer();
-void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name);
+void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name);
// Returns true if item is not in certain "quiet" folder which don't need UI
// notification (e.g. trash, cof, lost-and-found) and agent is not AFK, false otherwise.
@@ -215,6 +215,8 @@ struct LLOfferInfo
mIM(IM_NOTHING_SPECIAL), mType(LLAssetType::AT_NONE) {};
LLOfferInfo(const LLSD& sd);
+ LLOfferInfo(const LLOfferInfo& info);
+
void forceResponse(InventoryOfferResponse response);
EInstantMessage mIM;
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index d0afa9d9de..bb7933c10e 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -46,6 +46,7 @@
#include "llfontgl.h"
#include "llframetimer.h"
#include "llinventory.h"
+#include "llinventorydefines.h"
#include "llmaterialtable.h"
#include "llmutelist.h"
#include "llnamevalue.h"
@@ -60,6 +61,7 @@
#include "llaudiosourcevo.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llbbox.h"
#include "llbox.h"
#include "llcylinder.h"
@@ -133,7 +135,15 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
{
if (id == gAgentID)
{
- res = new LLVOAvatarSelf(id, pcode, regionp);
+ if (!gAgentAvatarp)
+ {
+ gAgentAvatarp = new LLVOAvatarSelf(id, pcode, regionp);
+ }
+ else
+ {
+ gAgentAvatarp->updateRegion(regionp);
+ }
+ res = gAgentAvatarp;
}
else
{
@@ -222,7 +232,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
mClickAction(0),
mAttachmentItemID(LLUUID::null)
{
- if(!is_global)
+ if (!is_global)
{
llassert(mRegionp);
}
@@ -234,7 +244,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
mPositionRegion = LLVector3(0.f, 0.f, 0.f);
- if(!is_global)
+ if (!is_global && mRegionp)
{
mPositionAgent = mRegionp->getOriginAgent();
}
@@ -376,11 +386,10 @@ void LLViewerObject::markDead()
if (flagAnimSource())
{
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (avatarp && !avatarp->isDead())
+ if (isAgentAvatarValid())
{
// stop motions associated with this object
- avatarp->stopMotionFromSource(mID);
+ gAgentAvatarp->stopMotionFromSource(mID);
}
}
@@ -2001,6 +2010,9 @@ BOOL LLViewerObject::isActive() const
BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
{
+ static LLFastTimer::DeclareTimer ftm("Viewer Object");
+ LLFastTimer t(ftm);
+
if (mDead)
{
// It's dead. Don't update it.
@@ -2166,8 +2178,8 @@ void LLViewerObject::deleteInventoryItem(const LLUUID& item_id)
{
if(mInventory)
{
- InventoryObjectList::iterator it = mInventory->begin();
- InventoryObjectList::iterator end = mInventory->end();
+ LLInventoryObject::object_list_t::iterator it = mInventory->begin();
+ LLInventoryObject::object_list_t::iterator end = mInventory->end();
for( ; it != end; ++it )
{
if((*it)->getUUID() == item_id)
@@ -2477,7 +2489,7 @@ void LLViewerObject::processTaskInv(LLMessageSystem* msg, void** user_data)
}
else
{
- object->mInventory = new InventoryObjectList();
+ object->mInventory = new LLInventoryObject::object_list_t();
}
LLPointer<LLInventoryObject> obj;
obj = new LLInventoryObject(object->mID, LLUUID::null,
@@ -2533,7 +2545,7 @@ void LLViewerObject::loadTaskInvFile(const std::string& filename)
}
else
{
- mInventory = new InventoryObjectList;
+ mInventory = new LLInventoryObject::object_list_t;
}
while(ifs.good())
{
@@ -2666,8 +2678,8 @@ LLInventoryObject* LLViewerObject::getInventoryObject(const LLUUID& item_id)
LLInventoryObject* rv = NULL;
if(mInventory)
{
- InventoryObjectList::iterator it = mInventory->begin();
- InventoryObjectList::iterator end = mInventory->end();
+ LLInventoryObject::object_list_t::iterator it = mInventory->begin();
+ LLInventoryObject::object_list_t::iterator end = mInventory->end();
for ( ; it != end; ++it)
{
if((*it)->getUUID() == item_id)
@@ -2680,12 +2692,12 @@ LLInventoryObject* LLViewerObject::getInventoryObject(const LLUUID& item_id)
return rv;
}
-void LLViewerObject::getInventoryContents(InventoryObjectList& objects)
+void LLViewerObject::getInventoryContents(LLInventoryObject::object_list_t& objects)
{
if(mInventory)
{
- InventoryObjectList::iterator it = mInventory->begin();
- InventoryObjectList::iterator end = mInventory->end();
+ LLInventoryObject::object_list_t::iterator it = mInventory->begin();
+ LLInventoryObject::object_list_t::iterator end = mInventory->end();
for( ; it != end; ++it)
{
if ((*it)->getType() != LLAssetType::AT_CATEGORY)
@@ -2715,8 +2727,8 @@ LLViewerInventoryItem* LLViewerObject::getInventoryItemByAsset(const LLUUID& ass
{
LLViewerInventoryItem* item = NULL;
- InventoryObjectList::iterator it = mInventory->begin();
- InventoryObjectList::iterator end = mInventory->end();
+ LLInventoryObject::object_list_t::iterator it = mInventory->begin();
+ LLInventoryObject::object_list_t::iterator end = mInventory->end();
for( ; it != end; ++it)
{
LLInventoryObject* obj = *it;
@@ -2754,7 +2766,7 @@ void LLViewerObject::setPixelAreaAndAngle(LLAgent &agent)
return;
}
- LLVector3 viewer_pos_agent = agent.getCameraPositionAgent();
+ LLVector3 viewer_pos_agent = gAgentCamera.getCameraPositionAgent();
LLVector3 pos_agent = getRenderPosition();
F32 dx = viewer_pos_agent.mV[VX] - pos_agent.mV[VX];
@@ -4026,7 +4038,8 @@ LLBBox LLViewerObject::getBoundingBoxAgent() const
avatar_parent = (LLViewerObject*)root_edit->getParent();
}
- if (avatar_parent && avatar_parent->isAvatar() && root_edit && root_edit->mDrawable.notNull())
+ if (avatar_parent && avatar_parent->isAvatar() &&
+ root_edit && root_edit->mDrawable.notNull() && root_edit->mDrawable->getXform()->getParent())
{
LLXform* parent_xform = root_edit->mDrawable->getXform()->getParent();
position_agent = (getPositionEdit() * parent_xform->getWorldRotation()) + parent_xform->getWorldPosition();
@@ -4077,8 +4090,8 @@ S32 LLViewerObject::countInventoryContents(LLAssetType::EType type)
S32 count = 0;
if( mInventory )
{
- InventoryObjectList::const_iterator it = mInventory->begin();
- InventoryObjectList::const_iterator end = mInventory->end();
+ LLInventoryObject::object_list_t::const_iterator it = mInventory->begin();
+ LLInventoryObject::object_list_t::const_iterator end = mInventory->end();
for( ; it != end ; ++it )
{
if( (*it)->getType() == type )
@@ -4915,7 +4928,6 @@ void LLViewerObject::setIncludeInSearch(bool include_in_search)
void LLViewerObject::setRegion(LLViewerRegion *regionp)
{
- llassert(regionp);
mLatestRecvPacketID = 0;
mRegionp = regionp;
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 266c40d493..be83fb7ef8 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -88,7 +88,7 @@ typedef enum e_object_update_type
// callback typedef for inventory
typedef void (*inventory_callback)(LLViewerObject*,
- InventoryObjectList*,
+ LLInventoryObject::object_list_t*,
S32 serial_num,
void*);
@@ -409,7 +409,7 @@ public:
void updateInventory(LLViewerInventoryItem* item, U8 key, bool is_new);
void updateInventoryLocal(LLInventoryItem* item, U8 key); // Update without messaging.
LLInventoryObject* getInventoryObject(const LLUUID& item_id);
- void getInventoryContents(InventoryObjectList& objects);
+ void getInventoryContents(LLInventoryObject::object_list_t& objects);
LLInventoryObject* getInventoryRoot();
LLViewerInventoryItem* getInventoryItemByAsset(const LLUUID& asset_id);
S16 getInventorySerial() const { return mInventorySerialNum; }
@@ -629,7 +629,7 @@ protected:
F32 mPixelArea; // Apparent area in pixels
// This is the object's inventory from the viewer's perspective.
- InventoryObjectList* mInventory;
+ LLInventoryObject::object_list_t* mInventory;
class LLInventoryCallbackInfo
{
public:
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 96828ee1b6..752aeaaab0 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -47,6 +47,7 @@
#include "llviewerwindow.h"
#include "llnetmap.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "pipeline.h"
#include "llspatialpartition.h"
#include "lltooltip.h"
@@ -93,7 +94,7 @@ extern LLPipeline gPipeline;
// Statics for object lookup tables.
U32 LLViewerObjectList::sSimulatorMachineIndex = 1; // Not zero deliberately, to speed up index check.
-LLMap<U64, U32> LLViewerObjectList::sIPAndPortToIndex;
+std::map<U64, U32> LLViewerObjectList::sIPAndPortToIndex;
std::map<U64, LLUUID> LLViewerObjectList::sIndexAndLocalIDToUUID;
LLViewerObjectList::LLViewerObjectList()
@@ -288,7 +289,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
LLMemType mt(LLMemType::MTYPE_OBJECT_PROCESS_UPDATE);
LLFastTimer t(FTM_PROCESS_OBJECTS);
- LLVector3d camera_global = gAgent.getCameraPositionGlobal();
+ LLVector3d camera_global = gAgentCamera.getCameraPositionGlobal();
LLViewerObject *objectp;
S32 num_objects;
U32 local_id;
@@ -473,7 +474,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
if (objectp->getRegion() != regionp)
{ // Object changed region, so update it
- objectp->setRegion(regionp);
objectp->updateRegion(regionp); // for LLVOAvatar
}
}
@@ -571,10 +571,9 @@ void LLViewerObjectList::processCachedObjectUpdate(LLMessageSystem *mesgsys,
void LLViewerObjectList::dirtyAllObjectInventory()
{
- S32 count = mObjects.count();
- for(S32 i = 0; i < count; ++i)
+ for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
- mObjects[i]->dirtyInventory();
+ (*iter)->dirtyInventory();
}
}
@@ -587,14 +586,14 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
S32 num_updates, max_value;
if (NUM_BINS - 1 == mCurBin)
{
- num_updates = mObjects.count() - mCurLazyUpdateIndex;
- max_value = mObjects.count();
+ num_updates = (S32) mObjects.size() - mCurLazyUpdateIndex;
+ max_value = (S32) mObjects.size();
gTextureList.setUpdateStats(TRUE);
}
else
{
- num_updates = (mObjects.count() / NUM_BINS) + 1;
- max_value = llmin(mObjects.count(), mCurLazyUpdateIndex + num_updates);
+ num_updates = ((S32) mObjects.size() / NUM_BINS) + 1;
+ max_value = llmin((S32) mObjects.size(), mCurLazyUpdateIndex + num_updates);
}
@@ -615,7 +614,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
}
// Focused
- objectp = gAgent.getFocusObject();
+ objectp = gAgentCamera.getFocusObject();
if (objectp)
{
objectp->boostTexturePriority();
@@ -647,7 +646,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
}
mCurLazyUpdateIndex = max_value;
- if (mCurLazyUpdateIndex == mObjects.count())
+ if (mCurLazyUpdateIndex == mObjects.size())
{
mCurLazyUpdateIndex = 0;
}
@@ -694,20 +693,26 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
// Make a copy of the list in case something in idleUpdate() messes with it
std::vector<LLViewerObject*> idle_list;
- idle_list.reserve( mActiveObjects.size() );
+
+ static LLFastTimer::DeclareTimer idle_copy("Idle Copy");
- for (std::set<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin();
- active_iter != mActiveObjects.end(); active_iter++)
{
- objectp = *active_iter;
- if (objectp)
+ LLFastTimer t(idle_copy);
+ idle_list.reserve( mActiveObjects.size() );
+
+ for (std::set<LLPointer<LLViewerObject> >::iterator active_iter = mActiveObjects.begin();
+ active_iter != mActiveObjects.end(); active_iter++)
{
- idle_list.push_back( objectp );
- }
- else
- { // There shouldn't be any NULL pointers in the list, but they have caused
- // crashes before. This may be idleUpdate() messing with the list.
- llwarns << "LLViewerObjectList::update has a NULL objectp" << llendl;
+ objectp = *active_iter;
+ if (objectp)
+ {
+ idle_list.push_back( objectp );
+ }
+ else
+ { // There shouldn't be any NULL pointers in the list, but they have caused
+ // crashes before. This may be idleUpdate() messing with the list.
+ llwarns << "LLViewerObjectList::update has a NULL objectp" << llendl;
+ }
}
}
@@ -807,7 +812,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
}
*/
- LLViewerStats::getInstance()->mNumObjectsStat.addValue(mObjects.count());
+ LLViewerStats::getInstance()->mNumObjectsStat.addValue((S32) mObjects.size());
LLViewerStats::getInstance()->mNumActiveObjectsStat.addValue(num_active_objects);
LLViewerStats::getInstance()->mNumSizeCulledStat.addValue(mNumSizeCulled);
LLViewerStats::getInstance()->mNumVisCulledStat.addValue(mNumVisCulled);
@@ -815,9 +820,9 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
void LLViewerObjectList::clearDebugText()
{
- for (S32 i = 0; i < mObjects.count(); i++)
+ for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
- mObjects[i]->setDebugText("");
+ (*iter)->setDebugText("");
}
}
@@ -856,7 +861,7 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp)
if (objectp->isOnMap())
{
- mMapObjects.removeObj(objectp);
+ removeFromMap(objectp);
}
// Don't clean up mObject references, these will be cleaned up more efficiently later!
@@ -889,6 +894,13 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep)
BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
{
+ // Don't ever kill gAgentAvatarp, just mark it as null region instead.
+ if (objectp == gAgentAvatarp)
+ {
+ objectp->setRegion(NULL);
+ return FALSE;
+ }
+
// When we're killing objects, all we do is mark them as dead.
// We clean up the dead objects later.
@@ -913,10 +925,10 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
{
LLViewerObject *objectp;
- S32 i;
- for (i = 0; i < mObjects.count(); i++)
+
+ for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
- objectp = mObjects[i];
+ objectp = *iter;
if (objectp->mRegionp == regionp)
{
@@ -933,19 +945,19 @@ void LLViewerObjectList::killAllObjects()
// Used only on global destruction.
LLViewerObject *objectp;
- for (S32 i = 0; i < mObjects.count(); i++)
+ for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
- objectp = mObjects[i];
-
+ objectp = *iter;
killObject(objectp);
- llassert(objectp->isDead());
+ // Object must be dead, or it's the LLVOAvatarSelf which never dies.
+ llassert((objectp == gAgentAvatarp) || objectp->isDead());
}
cleanDeadObjects(FALSE);
if(!mObjects.empty())
{
- llwarns << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.count() << llendl;
+ llwarns << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.size() << llendl;
mObjects.clear();
}
@@ -970,16 +982,15 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
return;
}
- S32 i = 0;
S32 num_removed = 0;
LLViewerObject *objectp;
- while (i < mObjects.count())
+ for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); )
{
// Scan for all of the dead objects and remove any "global" references to them.
- objectp = mObjects[i];
+ objectp = *iter;
if (objectp->isDead())
{
- mObjects.remove(i);
+ iter = mObjects.erase(iter);
num_removed++;
if (num_removed == mNumDeadObjects)
@@ -990,8 +1001,7 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
}
else
{
- // iterate, this isn't a dead object.
- i++;
+ ++iter;
}
}
@@ -1041,12 +1051,11 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)
}
LLViewerObject *objectp;
- S32 i;
- for (i = 0; i < mObjects.count(); i++)
+ for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
- objectp = getObject(i);
+ objectp = *iter;
// There could be dead objects on the object list, so don't update stuff if the object is dead.
- if (objectp)
+ if (!objectp->isDead())
{
objectp->updatePositionCaches();
@@ -1076,9 +1085,9 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
F32 max_radius = gSavedSettings.getF32("MiniMapPrimMaxRadius");
- for (S32 i = 0; i < mMapObjects.count(); i++)
+ for (vobj_list_t::iterator iter = mMapObjects.begin(); iter != mMapObjects.end(); ++iter)
{
- LLViewerObject* objectp = mMapObjects[i];
+ LLViewerObject* objectp = *iter;
if (!objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment())
{
continue;
@@ -1144,21 +1153,14 @@ void LLViewerObjectList::renderObjectBounds(const LLVector3 &center)
{
}
-void LLViewerObjectList::renderObjectsForSelect(LLCamera &camera, const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent)
-{
- generatePickList(camera);
- renderPickList(screen_rect, pick_parcel_wall, render_transparent);
-}
-
void LLViewerObjectList::generatePickList(LLCamera &camera)
{
LLViewerObject *objectp;
S32 i;
// Reset all of the GL names to zero.
- for (i = 0; i < mObjects.count(); i++)
+ for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
- objectp = mObjects[i];
- objectp->mGLName = 0;
+ (*iter)->mGLName = 0;
}
mSelectPickList.clear();
@@ -1215,11 +1217,10 @@ void LLViewerObjectList::generatePickList(LLCamera &camera)
}
// add all hud objects to pick list
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (avatarp)
+ if (isAgentAvatarValid())
{
- for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
- iter != avatarp->mAttachmentPoints.end(); )
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
@@ -1287,7 +1288,7 @@ void LLViewerObjectList::renderPickList(const LLRect& screen_rect, BOOL pick_par
gViewerWindow->renderSelections( TRUE, pick_parcel_wall, FALSE );
//fix for DEV-19335. Don't pick hud objects when customizing avatar (camera mode doesn't play nice with nametags).
- if (!gAgent.cameraCustomizeAvatar())
+ if (!gAgentCamera.cameraCustomizeAvatar())
{
// render pickable ui elements, like names, etc.
LLHUDObject::renderAllForSelect();
@@ -1321,17 +1322,19 @@ void LLViewerObjectList::addDebugBeacon(const LLVector3 &pos_agent,
const LLColor4 &text_color,
S32 line_width)
{
- LLDebugBeacon *beaconp = mDebugBeacons.reserve_block(1);
- beaconp->mPositionAgent = pos_agent;
- beaconp->mString = string;
- beaconp->mColor = color;
- beaconp->mTextColor = text_color;
- beaconp->mLineWidth = line_width;
+ LLDebugBeacon beacon;
+ beacon.mPositionAgent = pos_agent;
+ beacon.mString = string;
+ beacon.mColor = color;
+ beacon.mTextColor = text_color;
+ beacon.mLineWidth = line_width;
+
+ mDebugBeacons.push_back(beacon);
}
void LLViewerObjectList::resetObjectBeacons()
{
- mDebugBeacons.reset();
+ mDebugBeacons.clear();
}
LLViewerObject *LLViewerObjectList::createObjectViewer(const LLPCode pcode, LLViewerRegion *regionp)
@@ -1349,7 +1352,7 @@ LLViewerObject *LLViewerObjectList::createObjectViewer(const LLPCode pcode, LLVi
mUUIDObjectMap[fullid] = objectp;
- mObjects.put(objectp);
+ mObjects.push_back(objectp);
updateActive(objectp);
@@ -1388,7 +1391,7 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe
gMessageSystem->getSenderIP(),
gMessageSystem->getSenderPort());
- mObjects.put(objectp);
+ mObjects.push_back(objectp);
updateActive(objectp);
@@ -1411,11 +1414,11 @@ LLViewerObject *LLViewerObjectList::replaceObject(const LLUUID &id, const LLPCod
S32 LLViewerObjectList::findReferences(LLDrawable *drawablep) const
{
LLViewerObject *objectp;
- S32 i;
S32 num_refs = 0;
- for (i = 0; i < mObjects.count(); i++)
+
+ for (vobj_list_t::const_iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
- objectp = mObjects[i];
+ objectp = *iter;
if (objectp->mDrawable.notNull())
{
num_refs += objectp->mDrawable->findReferences(drawablep);
@@ -1460,15 +1463,15 @@ void LLViewerObjectList::orphanize(LLViewerObject *childp, U32 parent_id, U32 ip
// Unknown parent, add to orpaned child list
U64 parent_info = getIndex(parent_id, ip, port);
- if (-1 == mOrphanParents.find(parent_info))
+ if (std::find(mOrphanParents.begin(), mOrphanParents.end(), parent_info) == mOrphanParents.end())
{
- mOrphanParents.put(parent_info);
+ mOrphanParents.push_back(parent_info);
}
LLViewerObjectList::OrphanInfo oi(parent_info, childp->mID);
- if (-1 == mOrphanChildren.find(oi))
+ if (std::find(mOrphanChildren.begin(), mOrphanChildren.end(), oi) == mOrphanChildren.end())
{
- mOrphanChildren.put(oi);
+ mOrphanChildren.push_back(oi);
mNumOrphans++;
}
}
@@ -1491,28 +1494,29 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
// See if we are a parent of an orphan.
// Note: This code is fairly inefficient but it should happen very rarely.
// It can be sped up if this is somehow a performance issue...
- if (0 == mOrphanParents.count())
+ if (mOrphanParents.empty())
{
// no known orphan parents
return;
}
- if (-1 == mOrphanParents.find(getIndex(objectp->mLocalID, ip, port)))
+ if (std::find(mOrphanParents.begin(), mOrphanParents.end(), getIndex(objectp->mLocalID, ip, port)) == mOrphanParents.end())
{
// did not find objectp in OrphanParent list
return;
}
- S32 i;
U64 parent_info = getIndex(objectp->mLocalID, ip, port);
BOOL orphans_found = FALSE;
// Iterate through the orphan list, and set parents of matching children.
- for (i = 0; i < mOrphanChildren.count(); i++)
- {
- if (mOrphanChildren[i].mParentInfo != parent_info)
+
+ for (std::vector<OrphanInfo>::iterator iter = mOrphanChildren.begin(); iter != mOrphanChildren.end(); )
+ {
+ if (iter->mParentInfo != parent_info)
{
+ ++iter;
continue;
}
- LLViewerObject *childp = findObject(mOrphanChildren[i].mChildInfo);
+ LLViewerObject *childp = findObject(iter->mChildInfo);
if (childp)
{
if (childp == objectp)
@@ -1546,29 +1550,35 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
objectp->addChild(childp);
orphans_found = TRUE;
+ ++iter;
}
else
{
llinfos << "Missing orphan child, removing from list" << llendl;
- mOrphanChildren.remove(i);
- i--;
+
+ iter = mOrphanChildren.erase(iter);
}
}
// Remove orphan parent and children from lists now that they've been found
- mOrphanParents.remove(mOrphanParents.find(parent_info));
-
- i = 0;
- while (i < mOrphanChildren.count())
{
- if (mOrphanChildren[i].mParentInfo == parent_info)
+ std::vector<U64>::iterator iter = std::find(mOrphanParents.begin(), mOrphanParents.end(), parent_info);
+ if (iter != mOrphanParents.end())
+ {
+ mOrphanParents.erase(iter);
+ }
+ }
+
+ for (std::vector<OrphanInfo>::iterator iter = mOrphanChildren.begin(); iter != mOrphanChildren.end(); )
+ {
+ if (iter->mParentInfo == parent_info)
{
- mOrphanChildren.remove(i);
+ iter = mOrphanChildren.erase(iter);
mNumOrphans--;
}
else
{
- i++;
+ ++iter;
}
}
diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h
index 2858081dc9..706966deae 100644
--- a/indra/newview/llviewerobjectlist.h
+++ b/indra/newview/llviewerobjectlist.h
@@ -38,8 +38,6 @@
// common includes
#include "llstat.h"
-#include "lldarrayptr.h"
-#include "llmap.h" // *TODO: switch to std::map
#include "llstring.h"
// project includes
@@ -50,7 +48,7 @@ class LLNetMap;
class LLDebugBeacon;
const U32 CLOSE_BIN_SIZE = 10;
-const U32 NUM_BINS = 16;
+const U32 NUM_BINS = 128;
// GL name = position in object list + GL_NAME_INDEX_OFFSET so that
// we can have special numbers like zero.
@@ -111,13 +109,12 @@ public:
void updateAvatarVisibility();
// Selection related stuff
- void renderObjectsForSelect(LLCamera &camera, const LLRect& screen_rect, BOOL pick_parcel_wall = FALSE, BOOL render_transparent = TRUE);
void generatePickList(LLCamera &camera);
void renderPickList(const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent);
LLViewerObject *getSelectedObject(const U32 object_id);
- inline S32 getNumObjects() { return mObjects.count(); }
+ inline S32 getNumObjects() { return (S32) mObjects.size(); }
void addToMap(LLViewerObject *objectp);
void removeFromMap(LLViewerObject *objectp);
@@ -131,7 +128,7 @@ public:
S32 findReferences(LLDrawable *drawablep) const; // Find references to drawable in all objects, and return value.
- S32 getOrphanParentCount() const { return mOrphanParents.count(); }
+ S32 getOrphanParentCount() const { return (S32) mOrphanParents.size(); }
S32 getOrphanCount() const { return mNumOrphans; }
void orphanize(LLViewerObject *childp, U32 parent_id, U32 ip, U32 port);
void findOrphans(LLViewerObject* objectp, U32 ip, U32 port);
@@ -179,26 +176,28 @@ public:
S32 mNumUnknownKills;
S32 mNumDeadObjects;
protected:
- LLDynamicArray<U64> mOrphanParents; // LocalID/ip,port of orphaned objects
- LLDynamicArray<OrphanInfo> mOrphanChildren; // UUID's of orphaned objects
+ std::vector<U64> mOrphanParents; // LocalID/ip,port of orphaned objects
+ std::vector<OrphanInfo> mOrphanChildren; // UUID's of orphaned objects
S32 mNumOrphans;
- LLDynamicArrayPtr<LLPointer<LLViewerObject>, 256> mObjects;
+ typedef std::vector<LLPointer<LLViewerObject> > vobj_list_t;
+
+ vobj_list_t mObjects;
std::set<LLPointer<LLViewerObject> > mActiveObjects;
- LLDynamicArrayPtr<LLPointer<LLViewerObject> > mMapObjects;
+ vobj_list_t mMapObjects;
typedef std::map<LLUUID, LLPointer<LLViewerObject> > vo_map;
vo_map mDeadObjects; // Need to keep multiple entries per UUID
std::map<LLUUID, LLPointer<LLViewerObject> > mUUIDObjectMap;
- LLDynamicArray<LLDebugBeacon> mDebugBeacons;
+ std::vector<LLDebugBeacon> mDebugBeacons;
S32 mCurLazyUpdateIndex;
static U32 sSimulatorMachineIndex;
- static LLMap<U64, U32> sIPAndPortToIndex;
+ static std::map<U64, U32> sIPAndPortToIndex;
static std::map<U64, LLUUID> sIndexAndLocalIDToUUID;
@@ -264,12 +263,16 @@ inline LLViewerObject *LLViewerObjectList::getObject(const S32 index)
inline void LLViewerObjectList::addToMap(LLViewerObject *objectp)
{
- mMapObjects.put(objectp);
+ mMapObjects.push_back(objectp);
}
inline void LLViewerObjectList::removeFromMap(LLViewerObject *objectp)
{
- mMapObjects.removeObj(objectp);
+ std::vector<LLPointer<LLViewerObject> >::iterator iter = std::find(mMapObjects.begin(), mMapObjects.end(), objectp);
+ if (iter != mMapObjects.end())
+ {
+ mMapObjects.erase(iter);
+ }
}
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 2c5c0a37e8..b967436df6 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -210,25 +210,29 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
// A new impl will be created below.
}
}
-
- if(!sMediaImpl)
+
+ // Don't ever try to play if the media type is set to "none/none"
+ if(stricmp(mime_type.c_str(), "none/none") != 0)
{
- LL_DEBUGS("Media") << "new media impl with mime type " << mime_type << ", url " << media_url << LL_ENDL;
-
- // There is no media impl, make a new one
- sMediaImpl = LLViewerMedia::newMediaImpl(
- placeholder_texture_id,
- media_width,
- media_height,
- media_auto_scale,
- media_loop);
- sMediaImpl->setIsParcelMedia(true);
- sMediaImpl->navigateTo(media_url, mime_type, true);
- }
+ if(!sMediaImpl)
+ {
+ LL_DEBUGS("Media") << "new media impl with mime type " << mime_type << ", url " << media_url << LL_ENDL;
+
+ // There is no media impl, make a new one
+ sMediaImpl = LLViewerMedia::newMediaImpl(
+ placeholder_texture_id,
+ media_width,
+ media_height,
+ media_auto_scale,
+ media_loop);
+ sMediaImpl->setIsParcelMedia(true);
+ sMediaImpl->navigateTo(media_url, mime_type, true);
+ }
- //LLFirstUse::useMedia();
+ //LLFirstUse::useMedia();
- LLViewerParcelMediaAutoPlay::playStarted();
+ LLViewerParcelMediaAutoPlay::playStarted();
+ }
}
// static
@@ -312,11 +316,14 @@ std::string LLViewerParcelMedia::getURL()
if(sMediaImpl.notNull())
url = sMediaImpl->getMediaURL();
- if (url.empty())
- url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaCurrentURL();
-
- if (url.empty())
- url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaURL();
+ if(stricmp(LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaType().c_str(), "none/none") != 0)
+ {
+ if (url.empty())
+ url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaCurrentURL();
+
+ if (url.empty())
+ url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaURL();
+ }
return url;
}
diff --git a/indra/newview/llviewerparcelmediaautoplay.cpp b/indra/newview/llviewerparcelmediaautoplay.cpp
index ad2723b66b..f55d6d89c4 100644
--- a/indra/newview/llviewerparcelmediaautoplay.cpp
+++ b/indra/newview/llviewerparcelmediaautoplay.cpp
@@ -86,6 +86,7 @@ BOOL LLViewerParcelMediaAutoPlay::tick()
LLParcel *this_parcel = NULL;
LLViewerRegion *this_region = NULL;
std::string this_media_url;
+ std::string this_media_type;
LLUUID this_media_texture_id;
S32 this_parcel_id = 0;
LLUUID this_region_id;
@@ -101,7 +102,9 @@ BOOL LLViewerParcelMediaAutoPlay::tick()
if (this_parcel)
{
- this_media_url = std::string(this_parcel->getMediaURL());
+ this_media_url = this_parcel->getMediaURL();
+
+ this_media_type = this_parcel->getMediaType();
this_media_texture_id = this_parcel->getMediaID();
@@ -118,14 +121,15 @@ BOOL LLViewerParcelMediaAutoPlay::tick()
mLastRegionID = this_region_id;
}
- mTimeInParcel += mPeriod; // increase mTimeInParcel by the amount of time between ticks
+ mTimeInParcel += mPeriod; // increase mTimeInParcel by the amount of time between ticks
- if ((!mPlayed) && // if we've never played
- (mTimeInParcel > AUTOPLAY_TIME) && // and if we've been here for so many seconds
- (this_media_url.size() != 0) && // and if the parcel has media
- (LLViewerParcelMedia::sMediaImpl.isNull())) // and if the media is not already playing
+ if ((!mPlayed) && // if we've never played
+ (mTimeInParcel > AUTOPLAY_TIME) && // and if we've been here for so many seconds
+ (!this_media_url.empty()) && // and if the parcel has media
+ (stricmp(this_media_type.c_str(), "none/none") != 0) &&
+ (LLViewerParcelMedia::sMediaImpl.isNull())) // and if the media is not already playing
{
- if (this_media_texture_id.notNull()) // and if the media texture is good
+ if (this_media_texture_id.notNull()) // and if the media texture is good
{
LLViewerMediaTexture *image = LLViewerTextureManager::getMediaTexture(this_media_texture_id, FALSE) ;
diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp
index 9de1ef7190..2d17ea7bcd 100644
--- a/indra/newview/llviewerparceloverlay.cpp
+++ b/indra/newview/llviewerparceloverlay.cpp
@@ -43,11 +43,11 @@
#include "v2math.h"
// newview includes
+#include "llagentcamera.h"
#include "llviewertexture.h"
#include "llviewercontrol.h"
#include "llsurface.h"
#include "llviewerregion.h"
-#include "llagent.h"
#include "llviewercamera.h"
#include "llviewertexturelist.h"
#include "llselectmgr.h"
@@ -760,7 +760,7 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
LLGLDepthTest mDepthTest(GL_TRUE);
// Find camera height off the ground (not from zero)
- F32 ground_height_at_camera = land.resolveHeightGlobal( gAgent.getCameraPositionGlobal() );
+ F32 ground_height_at_camera = land.resolveHeightGlobal( gAgentCamera.getCameraPositionGlobal() );
F32 camera_z = LLViewerCamera::getInstance()->getOrigin().mV[VZ];
F32 camera_height = camera_z - ground_height_at_camera;
@@ -791,7 +791,7 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
const S32 vertex_per_edge = 3 + 2 * (GRID_STEP-1) + 3;
// Stomp the camera into two dimensions
- LLVector3 camera_region = mRegion->getPosRegionFromGlobal( gAgent.getCameraPositionGlobal() );
+ LLVector3 camera_region = mRegion->getPosRegionFromGlobal( gAgentCamera.getCameraPositionGlobal() );
// Set up a cull plane 2 * PARCEL_GRID_STEP_METERS behind
// the camera. The cull plane normal is the camera's at axis.
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 77d2d493bd..07d4ac664f 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -47,8 +47,10 @@
#include "v4math.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llcallingcard.h"
#include "llcaphttpsender.h"
+#include "llcommandhandler.h"
#include "lldir.h"
#include "lleventpoll.h"
#include "llfloatergodtools.h"
@@ -58,6 +60,7 @@
#include "llsdutil.h"
#include "llstartup.h"
#include "lltrans.h"
+#include "llurldispatcher.h"
#include "llviewerobjectlist.h"
#include "llviewerparceloverlay.h"
#include "llvlmanager.h"
@@ -82,6 +85,45 @@ extern BOOL gNoRender;
const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region
const S16 MAX_MAP_DIST = 10;
+// support for secondlife:///app/region/{REGION} SLapps
+// N.B. this is defined to work exactly like the classic secondlife://{REGION}
+// However, the later syntax cannot support spaces in the region name because
+// spaces (and %20 chars) are illegal in the hostname of an http URL. Some
+// browsers let you get away with this, but some do not (such as Qt's Webkit).
+// Hence we introduced the newer secondlife:///app/region alternative.
+class LLRegionHandler : public LLCommandHandler
+{
+public:
+ // requests will be throttled from a non-trusted browser
+ LLRegionHandler() : LLCommandHandler("region", UNTRUSTED_THROTTLE) {}
+
+ bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ {
+ // make sure that we at least have a region name
+ int num_params = params.size();
+ if (num_params < 1)
+ {
+ return false;
+ }
+
+ // build a secondlife://{PLACE} SLurl from this SLapp
+ std::string url = "secondlife://";
+ for (int i = 0; i < num_params; i++)
+ {
+ if (i > 0)
+ {
+ url += "/";
+ }
+ url += params[i].asString();
+ }
+
+ // Process the SLapp as if it was a secondlife://{PLACE} SLurl
+ LLURLDispatcher::dispatch(url, web, true);
+ return true;
+ }
+};
+LLRegionHandler gRegionHandler;
+
class BaseCapabilitiesComplete : public LLHTTPClient::Responder
{
LOG_CLASS(BaseCapabilitiesComplete);
@@ -778,7 +820,7 @@ void LLViewerRegion::calculateCenterGlobal()
void LLViewerRegion::calculateCameraDistance()
{
- mCameraDistanceSquared = (F32)(gAgent.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared();
+ mCameraDistanceSquared = (F32)(gAgentCamera.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared();
}
std::ostream& operator<<(std::ostream &s, const LLViewerRegion &region)
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 8059f866ba..b7c265be59 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -52,6 +52,7 @@
#include "llsurface.h"
#include "llvlmanager.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewercontrol.h"
#include "llfloatertools.h"
#include "lldebugview.h"
@@ -577,11 +578,11 @@ void update_statistics(U32 frame_count)
// make sure we have a valid time delta for this frame
if (gFrameIntervalSeconds > 0.f)
{
- if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK)
+ if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
{
LLViewerStats::getInstance()->incStat(LLViewerStats::ST_MOUSELOOK_SECONDS, gFrameIntervalSeconds);
}
- else if (gAgent.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR)
+ else if (gAgentCamera.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR)
{
LLViewerStats::getInstance()->incStat(LLViewerStats::ST_AVATAR_EDIT_SECONDS, gFrameIntervalSeconds);
}
@@ -827,7 +828,11 @@ void send_stats()
S32 window_height = gViewerWindow->getWindowHeightRaw();
S32 window_size = (window_width * window_height) / 1024;
misc["string_1"] = llformat("%d", window_size);
- // misc["string_2"] =
+ if (gDebugTimers.find(0) != gDebugTimers.end() && gFrameTimeSeconds > 0)
+ {
+ misc["string_2"] = llformat("Texture Time: %.2f, Total Time: %.2f", gDebugTimers[0].getElapsedTimeF32(), gFrameTimeSeconds);
+ }
+
// misc["int_1"] = LLSD::Integer(gSavedSettings.getU32("RenderQualityPerformance")); // Steve: 1.21
// misc["int_2"] = LLSD::Integer(gFrameStalls); // Steve: 1.21
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index ea8af223c3..59efae4cb2 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -40,8 +40,8 @@
#include "llfloaterreg.h"
#include "llfloaterworldmap.h"
#include "llfocusmgr.h"
-#include "llinventory.h"
#include "llinventorybridge.h"
+#include "llinventorydefines.h"
#include "llinventorymodel.h"
#include "lllandmark.h"
#include "lllandmarkactions.h"
@@ -524,7 +524,10 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const
break;
case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; break;
case LLAssetType::AT_CLOTHING: img_name = "Inv_Clothing"; break;
- case LLAssetType::AT_OBJECT: img_name = "Inv_Object"; break;
+ case LLAssetType::AT_OBJECT:
+ img_name = LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags() ?
+ "Inv_Object_Multi" : "Inv_Object";
+ break;
case LLAssetType::AT_CALLINGCARD: img_name = "Inv_CallingCard"; break;
case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break;
case LLAssetType::AT_NOTECARD: img_name = "Inv_Notecard"; break;
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 6add8a7e92..af0dcd8e35 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -82,7 +82,7 @@ LLTexturePipelineTester* LLViewerTextureManager::sTesterp = NULL ;
S32 LLViewerTexture::sImageCount = 0;
S32 LLViewerTexture::sRawCount = 0;
S32 LLViewerTexture::sAuxCount = 0;
-LLTimer LLViewerTexture::sEvaluationTimer;
+LLFrameTimer LLViewerTexture::sEvaluationTimer;
F32 LLViewerTexture::sDesiredDiscardBias = 0.f;
F32 LLViewerTexture::sDesiredDiscardScale = 1.1f;
S32 LLViewerTexture::sBoundTextureMemoryInBytes = 0;
@@ -102,7 +102,7 @@ F32 LLViewerTexture::sCurrentTime = 0.0f ;
BOOL LLViewerTexture::sUseTextureAtlas = FALSE ;
const F32 desired_discard_bias_min = -2.0f; // -max number of levels to improve image quality by
-const F32 desired_discard_bias_max = 1.5f; // max number of levels to reduce image quality by
+const F32 desired_discard_bias_max = (F32)MAX_DISCARD_LEVEL; // max number of levels to reduce image quality by
const F64 log_2 = log(2.0);
//----------------------------------------------------------------------------------------------
@@ -369,7 +369,7 @@ S32 LLViewerTexture::getCategoryFromIndex(S32 index)
}
// tuning params
-const F32 discard_bias_delta = .05f;
+const F32 discard_bias_delta = .25f;
const F32 discard_delta_time = 0.5f;
const S32 min_non_tex_system_mem = (128<<20); // 128 MB
// non-const (used externally
@@ -1257,20 +1257,30 @@ void LLViewerFetchedTexture::destroyTexture()
mFullyLoaded = FALSE ;
}
-//
-//do not change the discard level of the loaded texture image.
-BOOL LLViewerFetchedTexture::keepReuestedDiscardLevel()
+void LLViewerFetchedTexture::addToCreateTexture()
{
- if (!mLoadedCallbackList.empty())
+ bool force_update = false ;
+ if (getComponents() != mRawImage->getComponents())
{
- return TRUE ;
- }
+ // We've changed the number of components, so we need to move any
+ // objects using this pool to a different pool.
+ mComponents = mRawImage->getComponents();
+ mGLTexturep->setComponents(mComponents) ;
+ force_update = true ;
- return FALSE ;
-}
+ for(U32 i = 0 ; i < mNumFaces ; i++)
+ {
+ mFaceList[i]->dirtyTexture() ;
+ }
+
+ //discard the cached raw image and the saved raw image
+ mCachedRawImageReady = FALSE ;
+ mCachedRawDiscardLevel = -1 ;
+ mCachedRawImage = NULL ;
+ mSavedRawDiscardLevel = -1 ;
+ mSavedRawImage = NULL ;
+ }
-void LLViewerFetchedTexture::addToCreateTexture()
-{
if(isForSculptOnly())
{
//just update some variables, not to create a real GL texture.
@@ -1278,6 +1288,11 @@ void LLViewerFetchedTexture::addToCreateTexture()
mNeedsCreateTexture = FALSE ;
destroyRawImage();
}
+ else if(!force_update && getDiscardLevel() > -1 && getDiscardLevel() <= mRawDiscardLevel)
+ {
+ mNeedsCreateTexture = FALSE ;
+ destroyRawImage();
+ }
else
{
#if 1
@@ -1286,7 +1301,7 @@ void LLViewerFetchedTexture::addToCreateTexture()
//so do not scale down the over qualified image.
//Note: scaling down image is expensensive. Do it only when very necessary.
//
- if(mRequestedDiscardLevel <= mDesiredDiscardLevel && !keepReuestedDiscardLevel())
+ if(mRequestedDiscardLevel <= mDesiredDiscardLevel && !mForceToSaveRawImage)
{
S32 w = mFullWidth >> mRawDiscardLevel;
S32 h = mFullHeight >> mRawDiscardLevel;
@@ -1399,24 +1414,7 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
setActive() ;
}
- //
- // Iterate through the list of image loading callbacks to see
- // what sort of data they need.
- //
- // *TODO: Fix image callback code
- BOOL imageraw_callbacks = FALSE;
- for(callback_list_t::iterator iter = mLoadedCallbackList.begin();
- iter != mLoadedCallbackList.end(); )
- {
- LLLoadedCallbackEntry *entryp = *iter++;
- if (entryp->mNeedsImageRaw)
- {
- imageraw_callbacks = TRUE;
- break;
- }
- }
-
- if (!imageraw_callbacks)
+ if (!mForceToSaveRawImage)
{
mNeedsAux = FALSE;
destroyRawImage();
@@ -1503,21 +1501,16 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
}
#endif
- if(mFullyLoaded)//already loaded for static texture
- {
- return -4.0f ; //alreay fetched
- }
-
if (mNeedsCreateTexture)
{
return mDecodePriority; // no change while waiting to create
}
- if(mForceToSaveRawImage)
+ if(mFullyLoaded && !mForceToSaveRawImage)//already loaded for static texture
{
- return maxDecodePriority() ;
+ return -4.0f ; //alreay fetched
}
-
- S32 cur_discard = getDiscardLevel();
+
+ S32 cur_discard = getCurrentDiscardLevelForFetching();
bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel));
F32 pixel_priority = fsqrtf(mMaxVirtualSize);
@@ -1553,8 +1546,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
}
else
{
- // Leave the priority as-is
- return mDecodePriority;
+ priority = -1.f; //stop fetching
}
}
else if (cur_discard < 0)
@@ -1586,12 +1578,12 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
}
else if (!isJustBound() && mCachedRawImageReady)
{
- //if(mBoostLevel < BOOST_HIGH)
- //{
- // // We haven't rendered this in a while, de-prioritize it
- // desired_discard += 2;
- //}
- //else
+ if(mBoostLevel < BOOST_HIGH)
+ {
+ // We haven't rendered this in a while, de-prioritize it
+ desired_discard += 2;
+ }
+ else
{
// We haven't rendered this in the last half second, and we have a cached raw image, leave the desired discard as-is
desired_discard = cur_discard;
@@ -1599,7 +1591,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
}
S32 ddiscard = cur_discard - desired_discard;
- ddiscard = llclamp(ddiscard, 0, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY);
+ ddiscard = llclamp(ddiscard, -1, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY);
priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR;
}
@@ -1642,11 +1634,8 @@ F32 LLViewerFetchedTexture::maxDecodePriority()
void LLViewerFetchedTexture::setDecodePriority(F32 priority)
{
- //llassert(!mInImageList); // firing a lot, figure out why
- if (mInImageList) // above llassert() softened to a warning
- {
- llwarns << "BAD STUFF! mInImageList" << llendl;
- }
+ llassert(!mInImageList);
+
mDecodePriority = priority;
}
@@ -1666,6 +1655,11 @@ void LLViewerFetchedTexture::updateVirtualSize()
addTextureStats(0.f, FALSE) ;//reset
}
+ if(mForceToSaveRawImage)
+ {
+ setAdditionalDecodePriority(0.75f) ; //boost the fetching priority
+ }
+
for(U32 i = 0 ; i < mNumFaces ; i++)
{
LLFace* facep = mFaceList[i] ;
@@ -1680,6 +1674,24 @@ void LLViewerFetchedTexture::updateVirtualSize()
reorganizeVolumeList();
}
+S32 LLViewerFetchedTexture::getCurrentDiscardLevelForFetching()
+{
+ S32 current_discard = getDiscardLevel() ;
+ if(mForceToSaveRawImage)
+ {
+ if(mSavedRawDiscardLevel < 0 || current_discard < 0)
+ {
+ current_discard = -1 ;
+ }
+ else
+ {
+ current_discard = llmax(current_discard, mSavedRawDiscardLevel) ;
+ }
+ }
+
+ return current_discard ;
+}
+
bool LLViewerFetchedTexture::updateFetch()
{
static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled");
@@ -1716,7 +1728,7 @@ bool LLViewerFetchedTexture::updateFetch()
return false; // process any raw image data in callbacks before replacing
}
- S32 current_discard = getDiscardLevel() ;
+ S32 current_discard = getCurrentDiscardLevelForFetching() ;
S32 desired_discard = getDesiredDiscardLevel();
F32 decode_priority = getDecodePriority();
decode_priority = llmax(decode_priority, 0.0f);
@@ -1726,14 +1738,6 @@ bool LLViewerFetchedTexture::updateFetch()
// Sets mRawDiscardLevel, mRawImage, mAuxRawImage
S32 fetch_discard = current_discard;
- if(mForceToSaveRawImage)
- {
- if(fetch_discard >= 0)
- {
- fetch_discard = llmax(fetch_discard, mSavedRawDiscardLevel) ;
- }
- }
-
if (mRawImage.notNull()) sRawCount--;
if (mAuxRawImage.notNull()) sAuxCount--;
bool finished = LLAppViewer::getTextureFetch()->getRequestFinished(getID(), fetch_discard, mRawImage, mAuxRawImage);
@@ -1761,18 +1765,6 @@ bool LLViewerFetchedTexture::updateFetch()
if ((mRawImage->getDataSize() > 0 && mRawDiscardLevel >= 0) &&
(current_discard < 0 || mRawDiscardLevel < current_discard))
{
- if (getComponents() != mRawImage->getComponents())
- {
- // We've changed the number of components, so we need to move any
- // objects using this pool to a different pool.
- mComponents = mRawImage->getComponents();
- mGLTexturep->setComponents(mComponents) ;
-
- for(U32 i = 0 ; i < mNumFaces ; i++)
- {
- mFaceList[i]->dirtyTexture() ;
- }
- }
mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
mFullHeight = mRawImage->getHeight() << mRawDiscardLevel;
@@ -1838,18 +1830,6 @@ bool LLViewerFetchedTexture::updateFetch()
}
}
- if (!mDontDiscard)
- {
- if (mBoostLevel == 0)
- {
- desired_discard = llmax(desired_discard, current_discard-1);
- }
- else
- {
- desired_discard = llmax(desired_discard, current_discard-2);
- }
- }
-
bool make_request = true;
if (decode_priority <= 0)
{
@@ -1867,8 +1847,20 @@ bool LLViewerFetchedTexture::updateFetch()
//{
// make_request = false;
//}
- else
+
+ if(make_request)
{
+ //load the texture progressively.
+ S32 delta_level = (mBoostLevel > LLViewerTexture::BOOST_NONE) ? 2 : 1 ;
+ if(current_discard < 0)
+ {
+ desired_discard = llmax(desired_discard, getMaxDiscardLevel() - delta_level);
+ }
+ else
+ {
+ desired_discard = llmax(desired_discard, current_discard - delta_level);
+ }
+
if (mIsFetching)
{
if (mRequestedDiscardLevel <= desired_discard)
@@ -1888,7 +1880,7 @@ bool LLViewerFetchedTexture::updateFetch()
if (make_request)
{
S32 w=0, h=0, c=0;
- if (current_discard >= 0)
+ if (getDiscardLevel() >= 0)
{
w = mGLTexturep->getWidth(0);
h = mGLTexturep->getHeight(0);
@@ -1929,73 +1921,6 @@ bool LLViewerFetchedTexture::updateFetch()
return mIsFetching ? true : false;
}
-//
-//force to fetch a new raw image for this texture
-//
-BOOL LLViewerFetchedTexture::forceFetch()
-{
- if(!mForceToSaveRawImage)
- {
- return false ;
- }
- //if(mDesiredSavedRawDiscardLevel < getDiscardLevel())
- {
- //no need to force fetching. normal fetching flow will do the work.
- //return false ;
- }
- //if (mNeedsCreateTexture)
- {
- // We may be fetching still (e.g. waiting on write)
- // but don't check until we've processed the raw data we have
- //return false;
- }
- if(mIsFetching)
- {
- return false ;
- }
- if (mIsMissingAsset)
- {
- mForceToSaveRawImage = false ;
- llassert_always(!mHasFetcher);
- return false; // skip
- }
- if (!mLoadedCallbackList.empty() && mRawImage.notNull())
- {
- return false; // process any raw image data in callbacks before replacing
- }
- if(mRawImage.notNull() && mRawDiscardLevel <= mDesiredSavedRawDiscardLevel)
- {
- return false ; // mRawImage is enough
- }
-
- S32 desired_discard = mDesiredSavedRawDiscardLevel ;
- S32 current_discard = getDiscardLevel();
-
- bool fetch_request_created = false;
- S32 w=0, h=0, c=0;
- if (current_discard >= 0)
- {
- w = getWidth(0);
- h = getHeight(0);
- c = getComponents();
- }
- setDecodePriority(maxDecodePriority()) ;
- fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), getDecodePriority(),
- w, h, c, desired_discard, needsAux());
-
- if (fetch_request_created)
- {
- mHasFetcher = TRUE;
- mIsFetching = TRUE;
- mRequestedDiscardLevel = desired_discard ;
-
- mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority,
- mFetchPriority, mFetchDeltaTime, mRequestDeltaTime);
- }
-
- return mIsFetching ? true : false;
-}
-
void LLViewerFetchedTexture::setIsMissingAsset()
{
if (mUrl.empty())
@@ -2037,6 +1962,10 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call
LLLoadedCallbackEntry* entryp = new LLLoadedCallbackEntry(loaded_callback, discard_level, keep_imageraw, userdata);
mLoadedCallbackList.push_back(entryp);
mNeedsAux |= needs_aux;
+ if(keep_imageraw)
+ {
+ forceToSaveRawImage(discard_level) ;
+ }
if (mNeedsAux && mAuxRawImage.isNull() && getDiscardLevel() >= 0)
{
// We need aux data, but we've already loaded the image, and it didn't have any
@@ -2285,8 +2214,15 @@ LLImageRaw* LLViewerFetchedTexture::reloadRawImage(S8 discard_level)
if(mSavedRawDiscardLevel >= 0 && mSavedRawDiscardLevel <= discard_level)
{
- mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ;
- mRawImage->copy(getSavedRawImage()) ;
+ if(mSavedRawDiscardLevel != discard_level)
+ {
+ mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ;
+ mRawImage->copy(getSavedRawImage()) ;
+ }
+ else
+ {
+ mRawImage = getSavedRawImage() ;
+ }
mRawDiscardLevel = discard_level ;
}
else
@@ -2296,13 +2232,18 @@ LLImageRaw* LLViewerFetchedTexture::reloadRawImage(S8 discard_level)
{
mRawImage = mCachedRawImage ;
mRawDiscardLevel = mCachedRawDiscardLevel;
-
- forceToSaveRawImage(discard_level) ;
}
else //cached raw image is good enough, copy it.
{
- mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ;
- mRawImage->copy(mCachedRawImage) ;
+ if(mCachedRawDiscardLevel != discard_level)
+ {
+ mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ;
+ mRawImage->copy(mCachedRawImage) ;
+ }
+ else
+ {
+ mRawImage = mCachedRawImage ;
+ }
mRawDiscardLevel = discard_level ;
}
}
@@ -2320,22 +2261,20 @@ void LLViewerFetchedTexture::destroyRawImage()
{
sRawCount--;
- if(mForceToSaveRawImage)
+ if(mIsRawImageValid)
{
- saveRawImage() ;
- }
- setCachedRawImage() ;
+ if(mForceToSaveRawImage)
+ {
+ saveRawImage() ;
+ }
+ setCachedRawImage() ;
+ }
}
mRawImage = NULL;
mAuxRawImage = NULL;
mIsRawImageValid = FALSE;
mRawDiscardLevel = INVALID_DISCARD_LEVEL;
-
- if(mForceToSaveRawImage)
- {
- forceFetch() ;
- }
}
//use the mCachedRawImage to (re)generate the gl texture.
@@ -2448,7 +2387,7 @@ void LLViewerFetchedTexture::checkCachedRawSculptImage()
void LLViewerFetchedTexture::saveRawImage()
{
- if(mRawImage.isNull() || mSavedRawDiscardLevel == mRawDiscardLevel)
+ if(mRawImage.isNull() || mRawImage == mSavedRawImage || (mSavedRawDiscardLevel >= 0 && mSavedRawDiscardLevel <= mRawDiscardLevel))
{
return ;
}
@@ -2466,12 +2405,22 @@ void LLViewerFetchedTexture::saveRawImage()
void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard)
{
- if(!mForceToSaveRawImage && (mDesiredSavedRawDiscardLevel < 0 || mDesiredSavedRawDiscardLevel > desired_discard))
+ if(!mForceToSaveRawImage || mDesiredSavedRawDiscardLevel < 0 || mDesiredSavedRawDiscardLevel > desired_discard)
{
mForceToSaveRawImage = TRUE ;
mDesiredSavedRawDiscardLevel = desired_discard ;
- forceFetch() ;
+ //copy from the cached raw image if exists.
+ if(mCachedRawImage.notNull() && mRawImage.isNull() )
+ {
+ mRawImage = mCachedRawImage ;
+ mRawDiscardLevel = mCachedRawDiscardLevel ;
+
+ saveRawImage() ;
+
+ mRawImage = NULL ;
+ mRawDiscardLevel = INVALID_DISCARD_LEVEL ;
+ }
}
}
void LLViewerFetchedTexture::destroySavedRawImage()
@@ -2794,7 +2743,7 @@ void LLViewerLODTexture::processTextureStats()
mCalculatedDiscardLevel = discard_level;
}
}
- if (mBoostLevel < LLViewerTexture::BOOST_HIGH)
+ if (mBoostLevel < LLViewerTexture::BOOST_SCULPTED)
{
discard_level += sDesiredDiscardBias;
discard_level *= sDesiredDiscardScale; // scale
@@ -2820,8 +2769,7 @@ void LLViewerLODTexture::processTextureStats()
//
S32 current_discard = getDiscardLevel();
- if ((sDesiredDiscardBias > 0.0f) &&
- (current_discard >= 0 && mDesiredDiscardLevel >= current_discard))
+ if (sDesiredDiscardBias > 0.0f && mBoostLevel < LLViewerTexture::BOOST_SCULPTED && current_discard >= 0)
{
// Limit the amount of GL memory bound each frame
if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale &&
@@ -2838,6 +2786,11 @@ void LLViewerLODTexture::processTextureStats()
}
}
}
+
+ if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0)
+ {
+ mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S8)mDesiredSavedRawDiscardLevel) ;
+ }
}
void LLViewerLODTexture::scaleDown()
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 79db754072..a09a711cc7 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -300,7 +300,7 @@ public:
static S32 sImageCount;
static S32 sRawCount;
static S32 sAuxCount;
- static LLTimer sEvaluationTimer;
+ static LLFrameTimer sEvaluationTimer;
static F32 sDesiredDiscardBias;
static F32 sDesiredDiscardScale;
static S32 sBoundTextureMemoryInBytes;
@@ -424,7 +424,6 @@ public:
LLImageRaw* reloadRawImage(S8 discard_level) ;
void destroyRawImage();
- /*virtual*/ void setCachedRawImage(S32 discard_level, LLImageRaw* imageraw) ;
const std::string& getUrl() const {return mUrl;}
//---------------
@@ -449,23 +448,24 @@ public:
BOOL isCachedRawImageReady() const {return mCachedRawImageReady ;}
BOOL isRawImageValid()const { return mIsRawImageValid ; }
void forceToSaveRawImage(S32 desired_discard = 0) ;
+ /*virtual*/ void setCachedRawImage(S32 discard_level, LLImageRaw* imageraw) ;
void destroySavedRawImage() ;
LLImageRaw* getSavedRawImage() ;
BOOL hasSavedRawImage() const ;
F32 getElapsedLastReferencedSavedRawImageTime() const ;
BOOL isFullyLoaded() const;
+ BOOL hasFetcher() const { return mHasFetcher;}
protected:
/*virtual*/ void switchToCachedImage();
+ S32 getCurrentDiscardLevelForFetching() ;
private:
void init(bool firstinit) ;
void cleanup() ;
void saveRawImage() ;
- BOOL forceFetch() ;
void setCachedRawImage() ;
- BOOL keepReuestedDiscardLevel();
//for atlas
void resetFaceAtlas() ;
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index ee934ab9c5..d8918bdb73 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -502,10 +502,11 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
{
llerrs << "LLViewerTextureList::addImageToList - Image already in list" << llendl;
}
- if ((mImageList.insert(image)).second != true)
+ if((mImageList.insert(image)).second != true)
{
- llwarns << "BAD STUFF! (mImageList.insert(image)).second != true" << llendl;
+ llerrs << "Error happens when insert image to mImageList!" << llendl ;
}
+
image->setInImageList(TRUE) ;
}
@@ -522,10 +523,11 @@ void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
}
llerrs << "LLViewerTextureList::removeImageFromList - Image not in list" << llendl;
}
- if (mImageList.erase(image) != 1)
- {
- llwarns << "BAD STUFF! mImageList.erase(image) != 1" << llendl;
- }
+ if(mImageList.erase(image) != 1)
+ {
+ llerrs << "Error happens when remove image from mImageList!" << llendl ;
+ }
+
image->setInImageList(FALSE) ;
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 1669ce6312..ae3f680cbf 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -44,6 +44,8 @@
#include <fstream>
#include <algorithm>
+#include "llagent.h"
+#include "llagentcamera.h"
#include "llfloaterreg.h"
#include "llpanellogin.h"
#include "llviewerkeyboard.h"
@@ -131,6 +133,7 @@
#include "llmorphview.h"
#include "llmoveview.h"
#include "llnavigationbar.h"
+#include "llpopupview.h"
#include "llpreviewtexture.h"
#include "llprogressview.h"
#include "llresmgr.h"
@@ -362,9 +365,9 @@ public:
agent_center_text = llformat("AgentCenter %f %f %f",
(F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
- if (gAgent.getAvatarObject())
+ if (isAgentAvatarValid())
{
- tvector = gAgent.getPosGlobalFromAgent(gAgent.getAvatarObject()->mRoot.getWorldPosition());
+ tvector = gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot.getWorldPosition());
agent_root_center_text = llformat("AgentRootCenter %f %f %f",
(F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
}
@@ -382,7 +385,7 @@ public:
agent_left_text = llformat("AgentLeftAxis %f %f %f",
(F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
- tvector = gAgent.getCameraPositionGlobal();
+ tvector = gAgentCamera.getCameraPositionGlobal();
camera_center_text = llformat("CameraCenter %f %f %f",
(F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
@@ -486,6 +489,10 @@ public:
}
ypos += y_inc;
+ addText(xpos, ypos, llformat("UI Verts/Calls: %d/%d", LLRender::sUIVerts, LLRender::sUICalls));
+ LLRender::sUICalls = LLRender::sUIVerts = 0;
+ ypos += y_inc;
+
addText(xpos,ypos, llformat("%d/%d Nodes visible", gPipeline.mNumVisibleNodes, LLSpatialGroup::sNodeCount));
ypos += y_inc;
@@ -686,30 +693,23 @@ BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK
}
// Topmost view gets a chance before the hierarchy
- LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
- if (top_ctrl)
- {
- S32 local_x, local_y;
- top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
- if (down)
- {
- if (top_ctrl->pointInView(local_x, local_y))
- {
- return top_ctrl->handleAnyMouseClick(local_x, local_y, mask, clicktype, down) ;
- }
- else
- {
- gFocusMgr.setTopCtrl(NULL);
- }
- }
- else
- {
- if (top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask))
- {
- return TRUE;
- }
- }
- }
+ //LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ //if (top_ctrl)
+ //{
+ // S32 local_x, local_y;
+ // top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
+ // if (top_ctrl->pointInView(local_x, local_y))
+ // {
+ // return top_ctrl->handleAnyMouseClick(local_x, local_y, mask, clicktype, down) ;
+ // }
+ // else
+ // {
+ // if (down)
+ // {
+ // gFocusMgr.setTopCtrl(NULL);
+ // }
+ // }
+ //}
// Give the UI views a chance to process the click
if( mRootView->handleAnyMouseClick(x, y, mask, clicktype, down) )
@@ -778,7 +778,7 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
// *HACK: this should be rolled into the composite tool logic, not
// hardcoded at the top level.
- if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance())
+ if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance())
{
// If the current tool didn't process the click, we should show
// the pie menu. This can be done by passing the event to the pie
@@ -826,8 +826,10 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi
if (slurl_dnd_enabled)
{
+
// special case SLURLs
- if ( LLSLURL::isSLURL( data ) )
+ // isValidSLURL() call was added here to make sure that dragged SLURL is valid (EXT-4964)
+ if ( LLSLURL::isSLURL( data ) && LLSLURL::isValidSLURL( data ) )
{
if (drop)
{
@@ -1124,7 +1126,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
{
// if we're in world, show a progress bar to hide reloading of textures
llinfos << "Restoring GL during activate" << llendl;
- restoreGL("Restoring...");
+ restoreGL(LLTrans::getString("ProgressRestoring"));
}
else
{
@@ -1151,9 +1153,9 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
}
// SL-53351: Make sure we're not in mouselook when minimised, to prevent control issues
- if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK)
+ if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
send_agent_pause();
@@ -1171,7 +1173,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
BOOL LLViewerWindow::handleActivateApp(LLWindow *window, BOOL activating)
{
- //if (!activating) gAgent.changeCameraToDefault();
+ //if (!activating) gAgentCamera.changeCameraToDefault();
LLViewerJoystick::getInstance()->setNeedsReset(true);
return FALSE;
@@ -1351,7 +1353,8 @@ LLViewerWindow::LLViewerWindow(
mStatesDirty(false),
mIsFullscreenChecked(false),
mCurrResolutionIndex(0),
- mViewerWindowListener(new LLViewerWindowListener(this))
+ mViewerWindowListener(new LLViewerWindowListener(this)),
+ mProgressView(NULL)
{
LLNotificationChannel::buildChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert"));
LLNotificationChannel::buildChannel("VW_alertmodal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal"));
@@ -1384,7 +1387,7 @@ LLViewerWindow::LLViewerWindow(
if (NULL == mWindow)
{
- LLSplashScreen::update("Shutting down...");
+ LLSplashScreen::update(LLTrans::getString("ShuttingDown"));
#if LL_LINUX || LL_SOLARIS
llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information."
<< llendl;
@@ -1553,11 +1556,13 @@ void LLViewerWindow::initBase()
mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle();
mNonSideTrayView = main_view->getChildView("non_side_tray_view")->getHandle();
mFloaterViewHolder = main_view->getChildView("floater_view_holder")->getHandle();
+ mPopupView = main_view->getChild<LLPopupView>("popup_holder");
// Constrain floaters to inside the menu and status bar regions.
gFloaterView = main_view->getChild<LLFloaterView>("Floater View");
gSnapshotFloaterView = main_view->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
+
// Console
llassert( !gConsole );
LLConsole::Params cp;
@@ -1586,8 +1591,7 @@ void LLViewerWindow::initBase()
gToolTipView = getRootView()->getChild<LLToolTipView>("tooltip view");
// Add the progress bar view (startup view), which overrides everything
- mProgressView = new LLProgressView(full_window);
- getRootView()->addChild(mProgressView);
+ mProgressView = getRootView()->getChild<LLProgressView>("progress_view");
setShowProgress(FALSE);
setProgressCancelButtonVisible(FALSE);
@@ -1606,8 +1610,8 @@ void LLViewerWindow::initWorldUI()
gIMMgr = LLIMMgr::getInstance();
- getRootView()->sendChildToFront(gFloaterView);
- getRootView()->sendChildToFront(gSnapshotFloaterView);
+ //getRootView()->sendChildToFront(gFloaterView);
+ //getRootView()->sendChildToFront(gSnapshotFloaterView);
// new bottom panel
LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container");
@@ -2004,21 +2008,24 @@ void LLViewerWindow::drawDebugText()
{
gGL.color4f(1,1,1,1);
gGL.pushMatrix();
+ gGL.pushUIMatrix();
{
// scale view by UI global scale factor and aspect ratio correction factor
- glScalef(mDisplayScale.mV[VX], mDisplayScale.mV[VY], 1.f);
+ gGL.scaleUI(mDisplayScale.mV[VX], mDisplayScale.mV[VY], 1.f);
mDebugText->draw();
}
+ gGL.popUIMatrix();
gGL.popMatrix();
+
gGL.flush();
}
void LLViewerWindow::draw()
{
-#if LL_DEBUG
+//#if LL_DEBUG
LLView::sIsDrawing = TRUE;
-#endif
+//#endif
stop_glerror();
LLUI::setLineWidth(1.f);
@@ -2057,9 +2064,11 @@ void LLViewerWindow::draw()
// No translation needed, this view is glued to 0,0
gGL.pushMatrix();
+ LLUI::pushMatrix();
{
+
// scale view by UI global scale factor and aspect ratio correction factor
- glScalef(mDisplayScale.mV[VX], mDisplayScale.mV[VY], 1.f);
+ gGL.scaleUI(mDisplayScale.mV[VX], mDisplayScale.mV[VY], 1.f);
LLVector2 old_scale_factor = LLUI::sGLScaleFactor;
// apply camera zoom transform (for high res screenshots)
@@ -2081,7 +2090,7 @@ void LLViewerWindow::draw()
// Draw tool specific overlay on world
LLToolMgr::getInstance()->getCurrentTool()->draw();
- if( gAgent.cameraMouselook() )
+ if( gAgentCamera.cameraMouselook() || LLFloaterCamera::inFreeCameraMode() )
{
drawMouselookInstructions();
stop_glerror();
@@ -2125,22 +2134,25 @@ void LLViewerWindow::draw()
LLUI::sGLScaleFactor = old_scale_factor;
}
+ LLUI::popMatrix();
gGL.popMatrix();
-#if LL_DEBUG
+//#if LL_DEBUG
LLView::sIsDrawing = FALSE;
-#endif
+//#endif
}
// Takes a single keydown event, usually when UI is visible
BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
{
+ // hide tooltips on keypress
+ LLToolTipMgr::instance().blockToolTips();
+
if (gFocusMgr.getKeyboardFocus()
&& !(mask & (MASK_CONTROL | MASK_ALT))
&& !gFocusMgr.getKeystrokesOnly())
{
// We have keyboard focus, and it's not an accelerator
-
if (key < 0x80)
{
// Not a special key, so likely (we hope) to generate a character. Let it fall through to character handler first.
@@ -2148,68 +2160,49 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
}
}
- // hide tooltips on keypress
- LLToolTipMgr::instance().blockToolTips();
-
- // Explicit hack for debug menu.
- if ((MASK_ALT & mask) &&
- (MASK_CONTROL & mask) &&
- ('D' == key || 'd' == key))
+ // let menus handle navigation keys for navigation
+ if ((gMenuBarView && gMenuBarView->handleKey(key, mask, TRUE))
+ ||(gLoginMenuBarView && gLoginMenuBarView->handleKey(key, mask, TRUE))
+ ||(gMenuHolder && gMenuHolder->handleKey(key, mask, TRUE)))
{
- toggle_debug_menus(NULL);
+ return TRUE;
}
- // Explicit hack for debug menu.
- if ((mask == (MASK_SHIFT | MASK_CONTROL)) &&
- ('G' == key || 'g' == key))
+ // give menus a chance to handle modified (Ctrl, Alt) shortcut keys before current focus
+ // as long as focus isn't locked
+ if (mask & (MASK_CONTROL | MASK_ALT) && !gFocusMgr.focusLocked())
{
- if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP) //on splash page
+ if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask))
+ ||(gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask)))
{
- BOOL visible = ! gSavedSettings.getBOOL("ForceShowGrid");
- gSavedSettings.setBOOL("ForceShowGrid", visible);
-
- // Initialize visibility (and don't force visibility - use prefs)
- LLPanelLogin::refreshLocation( false );
+ return TRUE;
}
}
- // Debugging view for unified notifications: CTRL-SHIFT-5
- // *FIXME: Having this special-cased right here (just so this can be invoked from the login screen) sucks.
- if ((MASK_SHIFT & mask)
- && (!(MASK_ALT & mask))
- && (MASK_CONTROL & mask)
- && ('5' == key))
+ // give floaters first chance to handle TAB key
+ // so frontmost floater gets focus
+ // if nothing has focus, go to first or last UI element as appropriate
+ if (key == KEY_TAB && (mask & MASK_CONTROL || gFocusMgr.getKeyboardFocus() == NULL))
{
- //LLFloaterNotificationConsole::showInstance();
- LLFloaterReg::showInstance("notifications_console");
- return TRUE;
- }
-
- // handle escape key
- //if (key == KEY_ESCAPE && mask == MASK_NONE)
- //{
+ if (gMenuHolder) gMenuHolder->hideMenus();
- // *TODO: get this to play well with mouselook and hidden
- // cursor modes, etc, and re-enable.
- //if (gFocusMgr.getMouseCapture())
- //{
- // gFocusMgr.setMouseCapture(NULL);
- // return TRUE;
- //}
- //}
+ // if CTRL-tabbing (and not just TAB with no focus), go into window cycle mode
+ gFloaterView->setCycleMode((mask & MASK_CONTROL) != 0);
- // let menus handle navigation keys
- if (gMenuBarView && gMenuBarView->handleKey(key, mask, TRUE))
- {
- return TRUE;
- }
- // let menus handle navigation keys
- if (gLoginMenuBarView && gLoginMenuBarView->handleKey(key, mask, TRUE))
- {
+ // do CTRL-TAB and CTRL-SHIFT-TAB logic
+ if (mask & MASK_SHIFT)
+ {
+ mRootView->focusPrevRoot();
+ }
+ else
+ {
+ mRootView->focusNextRoot();
+ }
return TRUE;
}
- //some of context menus use this container, let context menu handle navigation keys
- if(gMenuHolder && gMenuHolder->handleKey(key, mask, TRUE))
+
+ // hidden edit menu for cut/copy/paste
+ if (gEditMenu && gEditMenu->handleAcceleratorKey(key, mask))
{
return TRUE;
}
@@ -2262,7 +2255,7 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
}
// Try for a new-format gesture
- if (LLGestureManager::instance().triggerGesture(key, mask))
+ if (LLGestureMgr::instance().triggerGesture(key, mask))
{
return TRUE;
}
@@ -2274,50 +2267,10 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
return TRUE;
}
- // Topmost view gets a chance before the hierarchy
- // *FIX: get rid of this?
- //LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
- //if (top_ctrl)
- //{
- // if( top_ctrl->handleKey( key, mask, TRUE ) )
- // {
- // return TRUE;
- // }
- //}
- // give floaters first chance to handle TAB key
- // so frontmost floater gets focus
- if (key == KEY_TAB)
- {
- // if nothing has focus, go to first or last UI element as appropriate
- if (mask & MASK_CONTROL || gFocusMgr.getKeyboardFocus() == NULL)
- {
- if (gMenuHolder) gMenuHolder->hideMenus();
-
- // if CTRL-tabbing (and not just TAB with no focus), go into window cycle mode
- gFloaterView->setCycleMode((mask & MASK_CONTROL) != 0);
-
- // do CTRL-TAB and CTRL-SHIFT-TAB logic
- if (mask & MASK_SHIFT)
- {
- mRootView->focusPrevRoot();
- }
- else
- {
- mRootView->focusNextRoot();
- }
- return TRUE;
- }
- }
-
- // give menus a chance to handle keys
- if (gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask))
- {
- return TRUE;
- }
-
- // give menus a chance to handle keys
- if (gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask))
+ // give menus a chance to handle unmodified accelerator keys
+ if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask))
+ ||(gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask)))
{
return TRUE;
}
@@ -2416,11 +2369,35 @@ void LLViewerWindow::handleScrollWheel(S32 clicks)
// Zoom the camera in and out behavior
if(top_ctrl == 0 && getWorldViewRectScaled().pointInRect(mCurrentMousePoint.mX, mCurrentMousePoint.mY) )
- gAgent.handleScrollWheel(clicks);
+ gAgentCamera.handleScrollWheel(clicks);
return;
}
+void LLViewerWindow::addPopup(LLView* popup)
+{
+ if (mPopupView)
+ {
+ mPopupView->addPopup(popup);
+ }
+}
+
+void LLViewerWindow::removePopup(LLView* popup)
+{
+ if (mPopupView)
+ {
+ mPopupView->removePopup(popup);
+ }
+}
+
+void LLViewerWindow::clearPopups()
+{
+ if (mPopupView)
+ {
+ mPopupView->clearPopups();
+ }
+}
+
void LLViewerWindow::moveCursorToCenter()
{
if (! gSavedSettings.getBOOL("DisableMouseWarp"))
@@ -2477,6 +2454,9 @@ void append_xui_tooltip(LLView* viewp, LLToolTip::Params& params)
// event processing.
void LLViewerWindow::updateUI()
{
+ static LLFastTimer::DeclareTimer ftm("Update UI");
+ LLFastTimer t(ftm);
+
static std::string last_handle_msg;
LLConsole::updateClass();
@@ -2546,6 +2526,33 @@ void LLViewerWindow::updateUI()
}
// aggregate visible views that contain mouse cursor in display order
+ LLPopupView::popup_list_t popups = mPopupView->getCurrentPopups();
+
+ for(LLPopupView::popup_list_t::iterator popup_it = popups.begin(); popup_it != popups.end(); ++popup_it)
+ {
+ LLView* popup = popup_it->get();
+ if (popup && popup->calcScreenBoundingRect().pointInRect(x, y))
+ {
+ // iterator over contents of top_ctrl, and throw into mouse_hover_set
+ for (LLView::tree_iterator_t it = popup->beginTreeDFS();
+ it != popup->endTreeDFS();
+ ++it)
+ {
+ LLView* viewp = *it;
+ if (viewp->getVisible()
+ && viewp->calcScreenBoundingRect().pointInRect(x, y))
+ {
+ // we have a view that contains the mouse, add it to the set
+ mouse_hover_set.insert(viewp->getHandle());
+ }
+ else
+ {
+ // skip this view and all of its children
+ it.skipDescendants();
+ }
+ }
+ }
+ }
// while the top_ctrl contains the mouse cursor, only it and its descendants will receive onMouseEnter events
if (top_ctrl && top_ctrl->calcScreenBoundingRect().pointInRect(x, y))
@@ -3008,17 +3015,16 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window)
if (mWorldViewRectRaw != new_world_rect)
{
- LLRect old_world_rect = mWorldViewRectRaw;
mWorldViewRectRaw = new_world_rect;
gResizeScreenTexture = TRUE;
LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRectRaw.getHeight() );
LLViewerCamera::getInstance()->setAspect( getWorldViewAspectRatio() );
+ LLRect old_world_rect_scaled = mWorldViewRectScaled;
mWorldViewRectScaled = calcScaledRect(mWorldViewRectRaw, mDisplayScale);
// sending a signal with a new WorldView rect
- old_world_rect = calcScaledRect(old_world_rect, mDisplayScale);
- mOnWorldViewRectUpdated(old_world_rect, mWorldViewRectScaled);
+ mOnWorldViewRectUpdated(old_world_rect_scaled, mWorldViewRectScaled);
}
}
@@ -3058,7 +3064,6 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point)
// Must be called after displayObjects is called, which sets the mGLName parameter
// NOTE: This function gets called 3 times:
// render_ui_3d: FALSE, FALSE, TRUE
-// renderObjectsForSelect: TRUE, pick_parcel_wall, FALSE
// render_hud_elements: FALSE, FALSE, FALSE
void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, BOOL for_hud )
{
@@ -3088,7 +3093,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
// setup HUD render
if (selection->getSelectType() == SELECT_TYPE_HUD && LLSelectMgr::getInstance()->getSelection()->getObjectCount())
{
- LLBBox hud_bbox = gAgent.getAvatarObject()->getHUDBBox();
+ LLBBox hud_bbox = gAgentAvatarp->getHUDBBox();
// set up transform to encompass bounding box of HUD
glMatrixMode(GL_PROJECTION);
@@ -3115,7 +3120,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
glPushMatrix();
if (selection->getSelectType() == SELECT_TYPE_HUD)
{
- F32 zoom = gAgent.mHUDCurZoom;
+ F32 zoom = gAgentCamera.mHUDCurZoom;
glScalef(zoom, zoom, zoom);
}
@@ -3234,7 +3239,7 @@ LLVector3d LLViewerWindow::clickPointInWorldGlobal(S32 x, S32 y_from_bot, LLView
// world at the location of the mouse click
LLVector3 mouse_direction_global = mouseDirectionGlobal( x, y_from_bot );
- LLVector3d relative_object = clicked_object->getPositionGlobal() - gAgent.getCameraPositionGlobal();
+ LLVector3d relative_object = clicked_object->getPositionGlobal() - gAgentCamera.getCameraPositionGlobal();
// make mouse vector as long as object vector, so it touchs a point near
// where the user clicked on the object
@@ -3243,7 +3248,7 @@ LLVector3d LLViewerWindow::clickPointInWorldGlobal(S32 x, S32 y_from_bot, LLView
LLVector3d new_pos;
new_pos.setVec(mouse_direction_global);
// transform mouse vector back to world coords
- new_pos += gAgent.getCameraPositionGlobal();
+ new_pos += gAgentCamera.getCameraPositionGlobal();
return new_pos;
}
@@ -3510,7 +3515,7 @@ LLVector3 LLViewerWindow::mousePointHUD(const S32 x, const S32 y) const
F32 hud_x = -((F32)x - center_x) / height;
F32 hud_y = ((F32)y - center_y) / height;
- return LLVector3(0.f, hud_x/gAgent.mHUDCurZoom, hud_y/gAgent.mHUDCurZoom);
+ return LLVector3(0.f, hud_x/gAgentCamera.mHUDCurZoom, hud_y/gAgentCamera.mHUDCurZoom);
}
// Returns unit vector relative to camera in camera space
@@ -3557,7 +3562,7 @@ BOOL LLViewerWindow::mousePointOnPlaneGlobal(LLVector3d& point, const S32 x, con
LLVector3d plane_normal_global_d;
plane_normal_global_d.setVec(plane_normal_global);
F64 plane_mouse_dot = (plane_normal_global_d * mouse_direction_global_d);
- LLVector3d plane_origin_camera_rel = plane_point_global - gAgent.getCameraPositionGlobal();
+ LLVector3d plane_origin_camera_rel = plane_point_global - gAgentCamera.getCameraPositionGlobal();
F64 mouse_look_at_scale = (plane_normal_global_d * plane_origin_camera_rel)
/ plane_mouse_dot;
if (llabs(plane_mouse_dot) < 0.00001)
@@ -3571,7 +3576,7 @@ BOOL LLViewerWindow::mousePointOnPlaneGlobal(LLVector3d& point, const S32 x, con
mouse_look_at_scale = plane_origin_camera_rel.magVec() / (plane_origin_dir * mouse_direction_global_d);
}
- point = gAgent.getCameraPositionGlobal() + mouse_look_at_scale * mouse_direction_global_d;
+ point = gAgentCamera.getCameraPositionGlobal() + mouse_look_at_scale * mouse_direction_global_d;
return mouse_look_at_scale > 0.0;
}
@@ -3589,12 +3594,12 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d
const F32 SECOND_PASS_STEP = 0.1f; // meters
LLVector3d camera_pos_global;
- camera_pos_global = gAgent.getCameraPositionGlobal();
+ camera_pos_global = gAgentCamera.getCameraPositionGlobal();
LLVector3d probe_point_global;
LLVector3 probe_point_region;
// walk forwards to find the point
- for (mouse_dir_scale = FIRST_PASS_STEP; mouse_dir_scale < gAgent.mDrawDistance; mouse_dir_scale += FIRST_PASS_STEP)
+ for (mouse_dir_scale = FIRST_PASS_STEP; mouse_dir_scale < gAgentCamera.mDrawDistance; mouse_dir_scale += FIRST_PASS_STEP)
{
LLVector3d mouse_direction_global_d;
mouse_direction_global_d.setVec(mouse_direction_global * mouse_dir_scale);
@@ -4698,7 +4703,7 @@ void LLViewerWindow::restartDisplay(BOOL show_progress_bar)
stopGL();
if (show_progress_bar)
{
- restoreGL("Changing Resolution...");
+ restoreGL(LLTrans::getString("ProgressChangingResolution"));
}
else
{
@@ -4785,7 +4790,7 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size,
llinfos << "Restoring GL during resolution change" << llendl;
if (show_progress_bar)
{
- restoreGL("Changing Resolution...");
+ restoreGL(LLTrans::getString("ProgressChangingResolution"));
}
else
{
@@ -4979,9 +4984,9 @@ bool LLViewerWindow::onAlert(const LLSD& notify)
// If we're in mouselook, the mouse is hidden and so the user can't click
// the dialog buttons. In that case, change to First Person instead.
- if( gAgent.cameraMouselook() )
+ if( gAgentCamera.cameraMouselook() )
{
- gAgent.changeCameraToDefault();
+ gAgentCamera.changeCameraToDefault();
}
return false;
}
@@ -5093,7 +5098,7 @@ void LLPickInfo::fetchResults()
{
mPickType = PICK_OBJECT;
}
- mObjectOffset = gAgent.calcFocusOffset(objectp, intersection, mPickPt.mX, mPickPt.mY);
+ mObjectOffset = gAgentCamera.calcFocusOffset(objectp, intersection, mPickPt.mX, mPickPt.mY);
mObjectID = objectp->mID;
mObjectFace = (te_offset == NO_FACE) ? -1 : (S32)te_offset;
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index bfce65f2ba..410445d97f 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -69,6 +69,7 @@ class LLHUDIcon;
class LLWindow;
class LLRootView;
class LLViewerWindowListener;
+class LLPopupView;
#define PICK_HALF_WIDTH 5
#define PICK_DIAMETER (2 * PICK_HALF_WIDTH + 1)
@@ -300,6 +301,11 @@ public:
BOOL handleKey(KEY key, MASK mask);
void handleScrollWheel (S32 clicks);
+ // add and remove views from "popup" layer
+ void addPopup(LLView* popup);
+ void removePopup(LLView* popup);
+ void clearPopups();
+
// Hide normal UI when a logon fails, re-show everything when logon is attempted again
void setNormalControlsVisible( BOOL visible );
void setMenuBackgroundColor(bool god_mode = false, bool dev_grid = false);
@@ -458,6 +464,7 @@ protected:
LLHandle<LLView> mWorldViewPlaceholder; // widget that spans the portion of screen dedicated to rendering the 3d world
LLHandle<LLView> mNonSideTrayView; // parent of world view + bottom bar, etc...everything but the side tray
LLHandle<LLView> mFloaterViewHolder; // container for floater_view
+ LLPopupView* mPopupView; // container for transient popups
class LLDebugText* mDebugText; // Internal class for debug text
@@ -477,7 +484,7 @@ protected:
private:
// Object temporarily hovered over while dragging
LLPointer<LLViewerObject> mDragHoveredObject;
-};
+};
void toggle_flying(void*);
void toggle_first_person();
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 72b9c6df98..af833db9c3 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -48,6 +48,7 @@
#include "sound_ids.h"
#include "llagent.h" // Get state values from here
+#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llanimationstates.h"
#include "llavatarpropertiesprocessor.h"
@@ -754,11 +755,6 @@ LLVOAvatar::~LLVOAvatar()
{
lldebugs << "LLVOAvatar Destructor (0x" << this << ") id:" << mID << llendl;
- if (isSelf())
- {
- gAgent.setAvatarObject(NULL);
- }
-
mRoot.removeAllChildren();
deleteAndClearArray(mSkeleton);
@@ -885,7 +881,7 @@ BOOL LLVOAvatar::areAllNearbyInstancesBaked(S32& grey_avatars)
// static
void LLVOAvatar::dumpBakedStatus()
{
- LLVector3d camera_pos_global = gAgent.getCameraPositionGlobal();
+ LLVector3d camera_pos_global = gAgentCamera.getCameraPositionGlobal();
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
iter != LLCharacter::sInstances.end(); ++iter)
@@ -964,15 +960,14 @@ void LLVOAvatar::dumpBakedStatus()
//static
void LLVOAvatar::restoreGL()
{
- LLVOAvatar* self = gAgent.getAvatarObject();
- if (!self)
- return;
- self->setCompositeUpdatesEnabled(TRUE);
- for (U32 i = 0; i < self->mBakedTextureDatas.size(); i++)
+ if (!isAgentAvatarValid()) return;
+
+ gAgentAvatarp->setCompositeUpdatesEnabled(TRUE);
+ for (U32 i = 0; i < gAgentAvatarp->mBakedTextureDatas.size(); i++)
{
- self->invalidateComposite(self->mBakedTextureDatas[i].mTexLayerSet, FALSE);
+ gAgentAvatarp->invalidateComposite(gAgentAvatarp->mBakedTextureDatas[i].mTexLayerSet, FALSE);
}
- self->updateMeshTextures();
+ gAgentAvatarp->updateMeshTextures();
}
//static
@@ -2084,7 +2079,7 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,
if(retval & LLViewerObject::INVALID_UPDATE)
{
- if(this == gAgent.getAvatarObject())
+ if (isSelf())
{
//tell sim to cancel this update
gAgent.teleportViaLocation(gAgent.getPositionGlobal());
@@ -2225,7 +2220,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled)
{
// disable voice visualizer when in mouselook
- mVoiceVisualizer->setVoiceEnabled( voice_enabled && !(isSelf() && gAgent.cameraMouselook()) );
+ mVoiceVisualizer->setVoiceEnabled( voice_enabled && !(isSelf() && gAgentCamera.cameraMouselook()) );
if ( voice_enabled )
{
//----------------------------------------------------------------
@@ -2253,7 +2248,7 @@ void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled)
else { llinfos << "oops - CurrentGesticulationLevel can be only 0, 1, or 2" << llendl; }
// this is the call that Karl S. created for triggering gestures from within the code.
- LLGestureManager::instance().triggerAndReviseString( gestureString );
+ LLGestureMgr::instance().triggerAndReviseString( gestureString );
}
}
@@ -2546,7 +2541,7 @@ void LLVOAvatar::idleUpdateLoadingEffect()
llinfos << "self isFullyLoaded, first_fully_visible" << llendl;
first_fully_visible = false;
- LLAppearanceManager::instance().onFirstFullyVisible();
+ LLAppearanceMgr::instance().onFirstFullyVisible();
}
}
if (isFullyLoaded())
@@ -2671,7 +2666,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
if (isSelf())
{
render_name = render_name
- && !gAgent.cameraMouselook()
+ && !gAgentCamera.cameraMouselook()
&& (visible_chat || (gSavedSettings.getBOOL("RenderNameShowSelf")
&& gSavedSettings.getS32("AvatarNameTagMode") ));
}
@@ -2934,14 +2929,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
}
else
{
- if (gSavedSettings.getBOOL("SmallAvatarNames"))
- {
- mNameText->setFont(LLFontGL::getFontSansSerif());
- }
- else
- {
- mNameText->setFont(LLFontGL::getFontSansSerifBig());
- }
+ mNameText->setFont(LLFontGL::getFontSansSerif());
mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_CENTER);
mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
mNameText->setVisibleOffScreen(FALSE);
@@ -3235,7 +3223,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
}
}
LLVector3 fwdDir = lerp(primDir, velDir, clamp_rescale(speed, 0.5f, 2.0f, 0.0f, 1.0f));
- if (isSelf() && gAgent.cameraMouselook())
+ if (isSelf() && gAgentCamera.cameraMouselook())
{
// make sure fwdDir stays in same general direction as primdir
if (gAgent.getFlying())
@@ -3266,7 +3254,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
// When moving very slow, the pelvis is allowed to deviate from the
// forward direction to allow it to hold it's position while the torso
// and head turn. Once in motion, it must conform however.
- BOOL self_in_mouselook = isSelf() && gAgent.cameraMouselook();
+ 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);
@@ -5206,7 +5194,7 @@ BOOL LLVOAvatar::updateJointLODs()
{
if (isSelf())
{
- if(gAgent.cameraCustomizeAvatar() || gAgent.cameraMouselook())
+ if(gAgentCamera.cameraCustomizeAvatar() || gAgentCamera.cameraMouselook())
{
mAdjustedPixelArea = MAX_PIXEL_AREA;
}
@@ -5352,7 +5340,7 @@ void LLVOAvatar::updateShadowFaces()
// Render sprite
sprite.setNormal(normal);
- if (isSelf() && gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK)
+ if (isSelf() && gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
{
sprite.setColor(0.f, 0.f, 0.f, 0.f);
}
@@ -5385,7 +5373,7 @@ void LLVOAvatar::updateShadowFaces()
// Render sprite
sprite.setNormal(normal);
- if (isSelf() && gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK)
+ if (isSelf() && gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
{
sprite.setColor(0.f, 0.f, 0.f, 0.f);
}
@@ -5440,7 +5428,7 @@ BOOL LLVOAvatar::setParent(LLViewerObject* parent)
ret = LLViewerObject::setParent(parent);
if (isSelf())
{
- gAgent.resetCamera();
+ gAgentCamera.resetCamera();
}
}
else
@@ -5619,21 +5607,23 @@ void LLVOAvatar::sitDown(BOOL bSitting)
//-----------------------------------------------------------------------------
void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)
{
+ sitDown(TRUE);
+
if (isSelf())
{
// Might be first sit
//LLFirstUse::useSit();
gAgent.setFlying(FALSE);
- gAgent.setThirdPersonHeadOffset(LLVector3::zero);
+ gAgentCamera.setThirdPersonHeadOffset(LLVector3::zero);
//interpolate to new camera position
- gAgent.startCameraAnimation();
+ gAgentCamera.startCameraAnimation();
// make sure we are not trying to autopilot
gAgent.stopAutoPilot();
- gAgent.setupSitCamera();
- if (gAgent.getForceMouselook())
+ gAgentCamera.setupSitCamera();
+ if (gAgentCamera.getForceMouselook())
{
- gAgent.changeCameraToMouselook();
+ gAgentCamera.changeCameraToMouselook();
}
}
@@ -5651,7 +5641,6 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)
mDrawable->mXform.setRotation(mDrawable->getWorldRotation() * inv_obj_rot);
gPipeline.markMoved(mDrawable, TRUE);
- sitDown(TRUE);
mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject
mRoot.setPosition(getPosition());
mRoot.updateWorldMatrixChildren();
@@ -5720,9 +5709,9 @@ void LLVOAvatar::getOffObject()
//reset orientation
// mRoot.setRotation(avWorldRot);
- gAgent.setThirdPersonHeadOffset(LLVector3(0.f, 0.f, 1.f));
+ gAgentCamera.setThirdPersonHeadOffset(LLVector3(0.f, 0.f, 1.f));
- gAgent.setSitCamera(LLUUID::null);
+ gAgentCamera.setSitCamera(LLUUID::null);
}
}
@@ -5785,11 +5774,6 @@ void LLVOAvatar::invalidateAll()
{
}
-// virtual
-void LLVOAvatar::setCompositeUpdatesEnabled( BOOL b )
-{
-}
-
void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL upload_bake )
{
if (global_color == mTexSkinColor)
@@ -5942,7 +5926,7 @@ void LLVOAvatar::updateMeshTextures()
}
}
- const BOOL self_customizing = isSelf() && gAgent.cameraCustomizeAvatar(); // During face edit mode, we don't use baked textures
+ const BOOL self_customizing = isSelf() && gAgentCamera.cameraCustomizeAvatar(); // During face edit mode, we don't use baked textures
const BOOL other_culled = !isSelf() && mCulled;
std::vector<BOOL> is_layer_baked;
@@ -6863,8 +6847,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
// static
void LLVOAvatar::dumpArchetypeXML( void* )
{
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- LLAPRFile outfile ;
+ LLAPRFile outfile;
outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,"new archetype.xml"), LL_APR_WB );
apr_file_t* file = outfile.getFileHandle() ;
if (!file)
@@ -6882,7 +6865,7 @@ void LLVOAvatar::dumpArchetypeXML( void* )
const std::string& wearable_name = LLWearableDictionary::getTypeName((EWearableType)type);
apr_file_printf( file, "\n\t\t<!-- wearable: %s -->\n", wearable_name.c_str() );
- for (LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam())
+ for (LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam())
{
LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;
if( (viewer_param->getWearableType() == type) &&
@@ -6898,7 +6881,7 @@ void LLVOAvatar::dumpArchetypeXML( void* )
if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex)te) == type)
{
// MULTIPLE_WEARABLES: extend to multiple wearables?
- LLViewerTexture* te_image = avatar->getImage((ETextureIndex)te, 0);
+ LLViewerTexture* te_image = ((LLVOAvatar *)(gAgentAvatarp))->getImage((ETextureIndex)te, 0);
if( te_image )
{
std::string uuid_str;
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index b5f0ec7176..d5485413f4 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -526,7 +526,9 @@ protected:
public:
virtual void invalidateComposite(LLTexLayerSet* layerset, BOOL upload_result);
virtual void invalidateAll();
- virtual void setCompositeUpdatesEnabled(BOOL b);
+ virtual void setCompositeUpdatesEnabled(bool b) {}
+ virtual void setCompositeUpdatesEnabled(U32 index, bool b) {}
+ virtual bool isCompositeUpdateEnabled(U32 index) { return false; }
//--------------------------------------------------------------------
// Static texture/mesh/baked dictionary
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 00998b300a..c15dbeb8c6 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -44,9 +44,11 @@
#include "pipeline.h"
#include "llagent.h" // Get state values from here
+#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
+#include "llinventoryfunctions.h"
#include "llselectmgr.h"
#include "lltoolgrab.h" // for needsRenderBeam
#include "lltoolmgr.h" // for needsRenderBeam
@@ -66,6 +68,14 @@
#include <boost/lexical_cast.hpp>
+LLVOAvatarSelf *gAgentAvatarp = NULL;
+BOOL isAgentAvatarValid()
+{
+ return (gAgentAvatarp &&
+ (gAgentAvatarp->getRegion() != NULL) &&
+ (!gAgentAvatarp->isDead()));
+}
+
using namespace LLVOAvatarDefines;
/*********************************************************************************
@@ -77,14 +87,14 @@ using namespace LLVOAvatarDefines;
struct LocalTextureData
{
LocalTextureData() :
- mIsBakedReady(FALSE),
+ mIsBakedReady(false),
mDiscard(MAX_DISCARD_LEVEL+1),
mImage(NULL),
mWearableID(IMG_DEFAULT_AVATAR),
mTexEntry(NULL)
{}
LLPointer<LLViewerFetchedTexture> mImage;
- BOOL mIsBakedReady;
+ bool mIsBakedReady;
S32 mDiscard;
LLUUID mWearableID; // UUID of the wearable that this texture belongs to, not of the image itself
LLTextureEntry *mTexEntry;
@@ -132,7 +142,6 @@ LLVOAvatarSelf::LLVOAvatarSelf(const LLUUID& id,
mLastRegionHandle(0),
mRegionCrossingCount(0)
{
- gAgent.setAvatarObject(this);
gAgentWearables.setAvatarObject(this);
lldebugs << "Marking avatar as self " << id << llendl;
@@ -211,6 +220,8 @@ BOOL LLVOAvatarSelf::buildSkeletonSelf(const LLVOAvatarSkeletonInfo *info)
LLVector3 scale(1.f, aspect, 1.f);
mScreenp->setScale(scale);
mScreenp->setWorldPosition(LLVector3::zero);
+ // need to update screen agressively when sidebar opens/closes, for example
+ mScreenp->mUpdateXform = TRUE;
return TRUE;
}
@@ -487,7 +498,7 @@ BOOL LLVOAvatarSelf::buildMenus()
{
LLMenuItemCallGL::Params item_params;
item_params.name = attachment->getName();
- item_params.label = attachment->getName();
+ item_params.label = LLTrans::getString(attachment->getName());
item_params.on_click.function_name = "Object.AttachToAvatar";
item_params.on_click.parameter = attach_index;
item_params.on_enable.function_name = "Object.EnableWear";
@@ -508,16 +519,17 @@ BOOL LLVOAvatarSelf::buildMenus()
return TRUE;
}
+void LLVOAvatarSelf::cleanup()
+{
+ markDead();
+ delete mScreenp;
+ mScreenp = NULL;
+ mRegionp = NULL;
+}
+
LLVOAvatarSelf::~LLVOAvatarSelf()
{
- // gAgents pointer might have been set to a different Avatar Self, don't get rid of it if so.
- if (gAgent.getAvatarObject() == this)
- {
- gAgent.setAvatarObject(NULL);
- gAgentWearables.setAvatarObject(NULL);
- }
- delete mScreenp;
- mScreenp = NULL;
+ cleanup();
}
/**
@@ -608,6 +620,17 @@ BOOL LLVOAvatarSelf::updateCharacter(LLAgent &agent)
}
// virtual
+BOOL LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
+{
+ if (!isAgentAvatarValid())
+ {
+ return TRUE;
+ }
+ LLVOAvatar::idleUpdate(agent, world, time);
+ return TRUE;
+}
+
+// virtual
LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)
{
if (mScreenp)
@@ -618,7 +641,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)
return LLVOAvatar::getJoint(name);
}
-/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake )
+// virtual
+BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake )
{
if (!which_param)
{
@@ -628,7 +652,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)
return setParamWeight(param,weight,upload_bake);
}
-/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake )
+// virtual
+BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake )
{
if (!param_name)
{
@@ -638,7 +663,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)
return setParamWeight(param,weight,upload_bake);
}
-/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake )
+// virtual
+BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake )
{
LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(index);
return setParamWeight(param,weight,upload_bake);
@@ -763,6 +789,7 @@ void LLVOAvatarSelf::removeMissingBakedTextures()
{
for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
{
+ mBakedTextureDatas[i].mTexLayerSet->setUpdatesEnabled(TRUE);
invalidateComposite(mBakedTextureDatas[i].mTexLayerSet, FALSE);
}
updateMeshTextures();
@@ -773,7 +800,8 @@ void LLVOAvatarSelf::removeMissingBakedTextures()
//virtual
void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
{
- if (regionp->getHandle() != mLastRegionHandle)
+ setRegion(regionp);
+ if (!regionp || (regionp->getHandle() != mLastRegionHandle))
{
if (mLastRegionHandle != 0)
{
@@ -787,7 +815,10 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
max = llmax(delta, max);
LLViewerStats::getInstance()->setStat(LLViewerStats::ST_CROSSING_MAX, max);
}
- mLastRegionHandle = regionp->getHandle();
+ if (regionp)
+ {
+ mLastRegionHandle = regionp->getHandle();
+ }
}
mRegionCrossingTimer.reset();
}
@@ -816,10 +847,10 @@ void LLVOAvatarSelf::idleUpdateTractorBeam()
{
LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- if (gAgent.mPointAt.notNull())
+ if (gAgentCamera.mPointAt.notNull())
{
// get point from pointat effect
- mBeam->setPositionGlobal(gAgent.mPointAt->getPointAtPosGlobal());
+ mBeam->setPositionGlobal(gAgentCamera.mPointAt->getPointAtPosGlobal());
mBeam->triggerLocal();
}
else if (selection->getFirstRootObject() &&
@@ -870,7 +901,7 @@ void LLVOAvatarSelf::restoreMeshData()
//llinfos << "Restoring" << llendl;
mMeshValid = TRUE;
updateJointLODs();
- updateAttachmentVisibility(gAgent.getCameraMode());
+ updateAttachmentVisibility(gAgentCamera.getCameraMode());
// force mesh update as LOD might not have changed to trigger this
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_GEOMETRY, TRUE);
@@ -935,7 +966,7 @@ void LLVOAvatarSelf::wearableUpdated( EWearableType type, BOOL upload_result )
// if we're editing our appearance, ensure that we're not using baked textures
// The baked texture for alpha masks is set explicitly when you hit "save"
- if (gAgent.cameraCustomizeAvatar())
+ if (gAgentCamera.cameraCustomizeAvatar())
{
setNewBakedTexture(index,IMG_DEFAULT_AVATAR);
}
@@ -950,6 +981,7 @@ void LLVOAvatarSelf::wearableUpdated( EWearableType type, BOOL upload_result )
{
if (mBakedTextureDatas[index].mTexLayerSet)
{
+ mBakedTextureDatas[index].mTexLayerSet->setUpdatesEnabled(true);
invalidateComposite(mBakedTextureDatas[index].mTexLayerSet, upload_result);
}
break;
@@ -1023,7 +1055,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
return 0;
}
- updateAttachmentVisibility(gAgent.getCameraMode());
+ updateAttachmentVisibility(gAgentCamera.getCameraMode());
// Then make sure the inventory is in sync with the avatar.
@@ -1031,7 +1063,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
if (attachment->isObjectAttached(viewer_object))
{
const LLUUID& attachment_id = viewer_object->getItemID();
- LLAppearanceManager::instance().registerAttachment(attachment_id);
+ LLAppearanceMgr::instance().registerAttachment(attachment_id);
}
return attachment;
@@ -1064,13 +1096,13 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
// Make sure the inventory is in sync with the avatar.
// Update COF contents, don't trigger appearance update.
- if (gAgent.getAvatarObject() == NULL)
+ if (!isAgentAvatarValid())
{
llinfos << "removeItemLinks skipped, avatar is under destruction" << llendl;
}
else
{
- LLAppearanceManager::instance().unregisterAttachment(attachment_id);
+ LLAppearanceMgr::instance().unregisterAttachment(attachment_id);
}
return TRUE;
@@ -1111,11 +1143,11 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr
discard_level < local_tex_obj->getDiscard())
{
local_tex_obj->setDiscard(discard_level);
- if (!gAgent.cameraCustomizeAvatar())
+ if (!gAgentCamera.cameraCustomizeAvatar())
{
requestLayerSetUpdate(index);
}
- else if (gAgent.cameraCustomizeAvatar())
+ else if (gAgentCamera.cameraCustomizeAvatar())
{
LLVisualParamHint::requestHintUpdates();
}
@@ -1290,19 +1322,23 @@ BOOL LLVOAvatarSelf::isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32
}
//-----------------------------------------------------------------------------
-// virtual
// requestLayerSetUploads()
//-----------------------------------------------------------------------------
void LLVOAvatarSelf::requestLayerSetUploads()
{
for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
{
- ETextureIndex tex_index = mBakedTextureDatas[i].mTextureIndex;
- BOOL layer_baked = isTextureDefined(tex_index, gAgentWearables.getWearableCount(tex_index));
- if (!layer_baked && mBakedTextureDatas[i].mTexLayerSet)
- {
- mBakedTextureDatas[i].mTexLayerSet->requestUpload();
- }
+ requestLayerSetUpload((EBakedTextureIndex)i);
+ }
+}
+
+void LLVOAvatarSelf::requestLayerSetUpload(LLVOAvatarDefines::EBakedTextureIndex i)
+{
+ ETextureIndex tex_index = mBakedTextureDatas[i].mTextureIndex;
+ bool layer_baked = isTextureDefined(tex_index, gAgentWearables.getWearableCount(tex_index));
+ if (!layer_baked && mBakedTextureDatas[i].mTexLayerSet)
+ {
+ mBakedTextureDatas[i].mTexLayerSet->requestUpload();
}
}
@@ -1358,17 +1394,31 @@ void LLVOAvatarSelf::invalidateAll()
//-----------------------------------------------------------------------------
// setCompositeUpdatesEnabled()
//-----------------------------------------------------------------------------
-void LLVOAvatarSelf::setCompositeUpdatesEnabled( BOOL b )
+void LLVOAvatarSelf::setCompositeUpdatesEnabled( bool b )
{
for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
{
- if (mBakedTextureDatas[i].mTexLayerSet )
- {
- mBakedTextureDatas[i].mTexLayerSet->setUpdatesEnabled( b );
- }
+ setCompositeUpdatesEnabled(i, b);
+ }
+}
+
+void LLVOAvatarSelf::setCompositeUpdatesEnabled(U32 index, bool b)
+{
+ if (mBakedTextureDatas[index].mTexLayerSet )
+ {
+ mBakedTextureDatas[index].mTexLayerSet->setUpdatesEnabled( b );
}
}
+bool LLVOAvatarSelf::isCompositeUpdateEnabled(U32 index)
+{
+ if (mBakedTextureDatas[index].mTexLayerSet)
+ {
+ return mBakedTextureDatas[index].mTexLayerSet->getUpdatesEnabled();
+ }
+ return false;
+}
+
void LLVOAvatarSelf::setupComposites()
{
for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
@@ -1501,11 +1551,11 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te
if (tex_discard >= 0 && tex_discard <= desired_discard)
{
local_tex_obj->setDiscard(tex_discard);
- if (isSelf() && !gAgent.cameraCustomizeAvatar())
+ if (isSelf() && !gAgentCamera.cameraCustomizeAvatar())
{
requestLayerSetUpdate(type);
}
- else if (isSelf() && gAgent.cameraCustomizeAvatar())
+ else if (isSelf() && gAgentCamera.cameraCustomizeAvatar())
{
LLVisualParamHint::requestHintUpdates();
}
@@ -1645,7 +1695,7 @@ void LLVOAvatarSelf::onLocalTextureLoaded(BOOL success, LLViewerFetchedTexture *
void LLVOAvatarSelf::dumpTotalLocalTextureByteCount()
{
S32 gl_bytes = 0;
- gAgent.getAvatarObject()->getLocalTextureByteCount(&gl_bytes);
+ gAgentAvatarp->getLocalTextureByteCount(&gl_bytes);
llinfos << "Total Avatar LocTex GL:" << (gl_bytes/1024) << "KB" << llendl;
}
@@ -1653,8 +1703,11 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded()
{
BOOL loading = FALSE;
- // do we have a shape?
- if (visualParamWeightsAreDefault())
+ // do we have our body parts?
+ if (gAgentWearables.getWearableCount(WT_SHAPE) == 0 ||
+ gAgentWearables.getWearableCount(WT_HAIR) == 0 ||
+ gAgentWearables.getWearableCount(WT_EYES) == 0 ||
+ gAgentWearables.getWearableCount(WT_SKIN) == 0)
{
loading = TRUE;
}
@@ -1718,7 +1771,7 @@ BOOL LLVOAvatarSelf::canGrabLocalTexture(ETextureIndex type, U32 index) const
return FALSE;
}
- if (gAgent.isGodlike())
+ if (gAgent.isGodlikeWithoutAdminMenuFakery())
return TRUE;
// Check permissions of textures that show up in the
@@ -1759,14 +1812,8 @@ BOOL LLVOAvatarSelf::canGrabLocalTexture(ETextureIndex type, U32 index) const
// search for full permissions version
for (S32 i = 0; i < items.count(); i++)
{
- LLInventoryItem* itemp = items[i];
- LLPermissions item_permissions = itemp->getPermissions();
- if ( item_permissions.allowOperationBy(
- PERM_MODIFY, gAgent.getID(), gAgent.getGroupID()) &&
- item_permissions.allowOperationBy(
- PERM_COPY, gAgent.getID(), gAgent.getGroupID()) &&
- item_permissions.allowOperationBy(
- PERM_TRANSFER, gAgent.getID(), gAgent.getGroupID()) )
+ LLViewerInventoryItem* itemp = items[i];
+ if (itemp->getIsFullPerm())
{
can_grab = TRUE;
break;
@@ -1905,9 +1952,7 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**)
{
LLUUID texture_id;
msg->getUUID("TextureData", "TextureID", texture_id);
-
- LLVOAvatarSelf* self = gAgent.getAvatarObject();
- if (!self) return;
+ if (!isAgentAvatarValid()) return;
// If this is a texture corresponding to one of our baked entries,
// just rebake that layer set.
@@ -1924,13 +1969,13 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**)
const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second;
if (texture_dict->mIsBakedTexture)
{
- if (texture_id == self->getTEImage(index)->getID())
+ if (texture_id == gAgentAvatarp->getTEImage(index)->getID())
{
- LLTexLayerSet* layer_set = self->getLayerSet(index);
+ LLTexLayerSet* layer_set = gAgentAvatarp->getLayerSet(index);
if (layer_set)
{
llinfos << "TAT: rebake - matched entry " << (S32)index << llendl;
- self->invalidateComposite(layer_set, TRUE);
+ gAgentAvatarp->invalidateComposite(layer_set, TRUE);
found = TRUE;
LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_REBAKES);
}
@@ -1941,12 +1986,12 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**)
// If texture not found, rebake all entries.
if (!found)
{
- self->forceBakeAllTextures();
+ gAgentAvatarp->forceBakeAllTextures();
}
else
{
// Not sure if this is necessary, but forceBakeAllTextures() does it.
- self->updateMeshTextures();
+ gAgentAvatarp->updateMeshTextures();
}
}
@@ -2026,10 +2071,9 @@ void LLVOAvatarSelf::onCustomizeStart()
// static
void LLVOAvatarSelf::onCustomizeEnd()
{
- LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();
- if (avatarp)
+ if (isAgentAvatarValid())
{
- avatarp->invalidateAll();
+ gAgentAvatarp->invalidateAll();
}
}
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index dc70996f0b..4856e82275 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -55,7 +55,8 @@ public:
LLVOAvatarSelf(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
virtual ~LLVOAvatarSelf();
virtual void markDead();
- virtual void initInstance(); // Called after construction to initialize the class.
+ virtual void initInstance(); // Called after construction to initialize the class.
+ void cleanup();
protected:
/*virtual*/ BOOL loadAvatar();
BOOL loadAvatarSelf();
@@ -77,6 +78,7 @@ protected:
//--------------------------------------------------------------------
public:
/*virtual*/ void updateRegion(LLViewerRegion *regionp);
+ /*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
//--------------------------------------------------------------------
// LLCharacter interface and related
@@ -122,12 +124,10 @@ public:
public:
/*virtual*/ BOOL updateIsFullyLoaded();
private:
- BOOL mIsBaked; // are the stored baked textures up to date?
//--------------------------------------------------------------------
// Region state
//--------------------------------------------------------------------
-private:
U64 mLastRegionHandle;
LLFrameTimer mRegionCrossingTimer;
S32 mRegionCrossingCount;
@@ -222,6 +222,7 @@ protected:
//--------------------------------------------------------------------
public:
void requestLayerSetUploads();
+ void requestLayerSetUpload(LLVOAvatarDefines::EBakedTextureIndex i);
void requestLayerSetUpdate(LLVOAvatarDefines::ETextureIndex i);
LLTexLayerSet* getLayerSet(LLVOAvatarDefines::ETextureIndex index) const;
@@ -231,7 +232,9 @@ public:
public:
/* virtual */ void invalidateComposite(LLTexLayerSet* layerset, BOOL upload_result);
/* virtual */ void invalidateAll();
- /* virtual */ void setCompositeUpdatesEnabled(BOOL b); // only works for self
+ /* virtual */ void setCompositeUpdatesEnabled(bool b); // only works for self
+ /* virtual */ void setCompositeUpdatesEnabled(U32 index, bool b);
+ /* virtual */ bool isCompositeUpdateEnabled(U32 index);
void setupComposites();
void updateComposites();
@@ -330,4 +333,8 @@ public:
};
+extern LLVOAvatarSelf *gAgentAvatarp;
+
+BOOL isAgentAvatarValid();
+
#endif // LL_VO_AVATARSELF_H
diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp
index 177cb16c50..5153cef709 100644
--- a/indra/newview/llvoclouds.cpp
+++ b/indra/newview/llvoclouds.cpp
@@ -77,9 +77,11 @@ BOOL LLVOClouds::isActive() const
return TRUE;
}
-
BOOL LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
{
+ static LLFastTimer::DeclareTimer ftm("Idle Clouds");
+ LLFastTimer t(ftm);
+
if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
{
return TRUE;
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
index e311f07912..a82afbeb76 100644
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -37,7 +37,7 @@
#include "imageids.h"
#include "llviewercontrol.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "llnotificationsutil.h"
#include "lldrawable.h"
#include "llface.h"
@@ -306,7 +306,7 @@ BOOL LLVOGrass::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
void LLVOGrass::setPixelAreaAndAngle(LLAgent &agent)
{
// This should be the camera's center, as soon as we move to all region-local.
- LLVector3 relative_position = getPositionAgent() - agent.getCameraPositionAgent();
+ LLVector3 relative_position = getPositionAgent() - gAgentCamera.getCameraPositionAgent();
F32 range = relative_position.length();
F32 max_scale = getMaxScale();
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 5502744882..4ea4d9c16e 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -60,6 +60,7 @@
#include "llappviewer.h" // for gDisconnected, gDisableVoice
#include "llmutelist.h" // to check for muted avatars
#include "llagent.h"
+#include "llvoavatarself.h"
#include "llcachename.h"
#include "llimview.h" // for LLIMMgr
#include "llparcel.h"
@@ -86,6 +87,12 @@
static bool sConnectingToAgni = false;
F32 LLVoiceClient::OVERDRIVEN_POWER_LEVEL = 0.7f;
+const F32 LLVoiceClient::VOLUME_MIN = 0.f;
+const F32 LLVoiceClient::VOLUME_DEFAULT = 0.5f;
+const F32 LLVoiceClient::VOLUME_MAX = 1.0f;
+
+const F32 VOLUME_SCALE_VIVOX = 0.01f;
+
const F32 SPEAKING_TIMEOUT = 1.f;
const int VOICE_MAJOR_VERSION = 1;
@@ -102,6 +109,13 @@ const F32 UPDATE_THROTTLE_SECONDS = 0.1f;
const F32 LOGIN_RETRY_SECONDS = 10.0f;
const int MAX_LOGIN_RETRIES = 12;
+// Defines the maximum number of times(in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine()
+// which is treated as normal. If this number is exceeded we suspect there is a problem with connection
+// to voice server (EXT-4313). When voice works correctly, there is from 1 to 15 times. 50 was chosen
+// to make sure we don't make mistake when slight connection problems happen- situation when connection to server is
+// blocked is VERY rare and it's better to sacrifice response time in this situation for the sake of stability.
+const int MAX_NORMAL_JOINING_SPATIAL_NUM = 50;
+
static void setUUIDFromStringHash(LLUUID &uuid, const std::string &str)
{
LLMD5 md5_uuid;
@@ -1157,24 +1171,28 @@ class LLSpeakerVolumeStorage : public LLSingleton<LLSpeakerVolumeStorage>
public:
/**
- * Sets internal voluem level for specified user.
+ * Stores volume level for specified user.
*
- * @param[in] speaker_id - LLUUID of user to store volume level for
- * @param[in] volume - external (vivox) volume level to be stored for user.
+ * @param[in] speaker_id - LLUUID of user to store volume level for.
+ * @param[in] volume - volume level to be stored for user.
*/
void storeSpeakerVolume(const LLUUID& speaker_id, F32 volume);
/**
- * Gets stored external (vivox) volume level for specified speaker and
- * transforms it into internal (viewer) level.
+ * Gets stored volume level for specified speaker
*
- * If specified user is not found -1 will be returned.
- * Internal level is calculated as: internal = 400 * external^2
- * Maps 0.0 to 1.0 to internal values 0-400
+ * @param[in] speaker_id - LLUUID of user to retrieve volume level for.
+ * @param[out] volume - set to stored volume if found, otherwise unmodified.
+ * @return - true if a stored volume is found.
+ */
+ bool getSpeakerVolume(const LLUUID& speaker_id, F32& volume);
+
+ /**
+ * Removes stored volume level for specified user.
*
- * @param[in] speaker_id - LLUUID of user to get his volume level
+ * @param[in] speaker_id - LLUUID of user to remove.
*/
- S32 getSpeakerVolume(const LLUUID& speaker_id);
+ void removeSpeakerVolume(const LLUUID& speaker_id);
private:
friend class LLSingleton<LLSpeakerVolumeStorage>;
@@ -1186,6 +1204,9 @@ private:
void load();
void save();
+ static F32 transformFromLegacyVolume(F32 volume_in);
+ static F32 transformToLegacyVolume(F32 volume_in);
+
typedef std::map<LLUUID, F32> speaker_data_map_t;
speaker_data_map_t mSpeakersData;
};
@@ -1204,23 +1225,85 @@ LLSpeakerVolumeStorage::~LLSpeakerVolumeStorage()
void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, F32 volume)
{
- mSpeakersData[speaker_id] = volume;
+ if ((volume >= LLVoiceClient::VOLUME_MIN) && (volume <= LLVoiceClient::VOLUME_MAX))
+ {
+ mSpeakersData[speaker_id] = volume;
+
+ // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging.
+ // LL_DEBUGS("Voice") << "Stored volume = " << volume << " for " << id << LL_ENDL;
+ }
+ else
+ {
+ LL_WARNS("Voice") << "Attempted to store out of range volume " << volume << " for " << speaker_id << LL_ENDL;
+ llassert(0);
+ }
}
-S32 LLSpeakerVolumeStorage::getSpeakerVolume(const LLUUID& speaker_id)
+bool LLSpeakerVolumeStorage::getSpeakerVolume(const LLUUID& speaker_id, F32& volume)
{
- // Return value of -1 indicates no level is stored for this speaker
- S32 ret_val = -1;
speaker_data_map_t::const_iterator it = mSpeakersData.find(speaker_id);
if (it != mSpeakersData.end())
{
- F32 f_val = it->second;
- // volume can amplify by as much as 4x!
- S32 ivol = (S32)(400.f * f_val * f_val);
- ret_val = llclamp(ivol, 0, 400);
+ volume = it->second;
+
+ // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging.
+ // LL_DEBUGS("Voice") << "Retrieved stored volume = " << volume << " for " << id << LL_ENDL;
+
+ return true;
+ }
+
+ return false;
+}
+
+void LLSpeakerVolumeStorage::removeSpeakerVolume(const LLUUID& speaker_id)
+{
+ mSpeakersData.erase(speaker_id);
+
+ // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging.
+ // LL_DEBUGS("Voice") << "Removing stored volume for " << id << LL_ENDL;
+}
+
+/* static */ F32 LLSpeakerVolumeStorage::transformFromLegacyVolume(F32 volume_in)
+{
+ // Convert to linear-logarithmic [0.0..1.0] with 0.5 = 0dB
+ // from legacy characteristic composed of two square-curves
+ // that intersect at volume_in = 0.5, volume_out = 0.56
+
+ F32 volume_out = 0.f;
+ volume_in = llclamp(volume_in, 0.f, 1.0f);
+
+ if (volume_in <= 0.5f)
+ {
+ volume_out = volume_in * volume_in * 4.f * 0.56f;
}
- return ret_val;
+ else
+ {
+ volume_out = (1.f - 0.56f) * (4.f * volume_in * volume_in - 1.f) / 3.f + 0.56f;
+ }
+
+ return volume_out;
+}
+
+/* static */ F32 LLSpeakerVolumeStorage::transformToLegacyVolume(F32 volume_in)
+{
+ // Convert from linear-logarithmic [0.0..1.0] with 0.5 = 0dB
+ // to legacy characteristic composed of two square-curves
+ // that intersect at volume_in = 0.56, volume_out = 0.5
+
+ F32 volume_out = 0.f;
+ volume_in = llclamp(volume_in, 0.f, 1.0f);
+
+ if (volume_in <= 0.56f)
+ {
+ volume_out = sqrt(volume_in / (4.f * 0.56f));
+ }
+ else
+ {
+ volume_out = sqrt((3.f * (volume_in - 0.56f) / (1.f - 0.56f) + 1.f) / 4.f);
+ }
+
+ return volume_out;
}
void LLSpeakerVolumeStorage::load()
@@ -1228,6 +1311,8 @@ void LLSpeakerVolumeStorage::load()
// load per-resident voice volume information
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SETTINGS_FILE_NAME);
+ LL_INFOS("Voice") << "Loading stored speaker volumes from: " << filename << LL_ENDL;
+
LLSD settings_llsd;
llifstream file;
file.open(filename);
@@ -1239,7 +1324,10 @@ void LLSpeakerVolumeStorage::load()
for (LLSD::map_const_iterator iter = settings_llsd.beginMap();
iter != settings_llsd.endMap(); ++iter)
{
- mSpeakersData.insert(std::make_pair(LLUUID(iter->first), (F32)iter->second.asReal()));
+ // Maintain compatibility with 1.23 non-linear saved volume levels
+ F32 volume = transformFromLegacyVolume((F32)iter->second.asReal());
+
+ storeSpeakerVolume(LLUUID(iter->first), volume);
}
}
@@ -1254,9 +1342,14 @@ void LLSpeakerVolumeStorage::save()
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SETTINGS_FILE_NAME);
LLSD settings_llsd;
+ LL_INFOS("Voice") << "Saving stored speaker volumes to: " << filename << LL_ENDL;
+
for(speaker_data_map_t::const_iterator iter = mSpeakersData.begin(); iter != mSpeakersData.end(); ++iter)
{
- settings_llsd[iter->first.asString()] = iter->second;
+ // Maintain compatibility with 1.23 non-linear saved volume levels
+ F32 volume = transformToLegacyVolume(iter->second);
+
+ settings_llsd[iter->first.asString()] = volume;
}
llofstream file;
@@ -1274,6 +1367,7 @@ LLVoiceClient::LLVoiceClient() :
mRelogRequested(false),
mConnected(false),
mPump(NULL),
+ mSpatialJoiningNum(0),
mTuningMode(false),
mTuningEnergy(0.0f),
@@ -2289,6 +2383,8 @@ void LLVoiceClient::stateMachine()
//MARK: stateNoChannel
case stateNoChannel:
+
+ mSpatialJoiningNum = 0;
// Do this here as well as inside sendPositionalUpdate().
// Otherwise, if you log in but don't join a proximal channel (such as when your login location has voice disabled), your friends list won't sync.
sendFriendsListUpdates();
@@ -2345,6 +2441,23 @@ void LLVoiceClient::stateMachine()
//MARK: stateJoiningSession
case stateJoiningSession: // waiting for session handle
+
+ // If this is true we have problem with connection to voice server (EXT-4313).
+ // See descriptions of mSpatialJoiningNum and MAX_NORMAL_JOINING_SPATIAL_NUM.
+ if(mSpatialJoiningNum == MAX_NORMAL_JOINING_SPATIAL_NUM)
+ {
+ // Notify observers to let them know there is problem with voice
+ notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED);
+ llwarns << "There seems to be problem with connection to voice server. Disabling voice chat abilities." << llendl;
+ }
+
+ // Increase mSpatialJoiningNum only for spatial sessions- it's normal to reach this case for
+ // example for p2p many times while waiting for response, so it can't be used to detect errors
+ if(mAudioSession && mAudioSession->mIsSpatial)
+ {
+ mSpatialJoiningNum++;
+ }
+
// joinedAudioSession() will transition from here to stateSessionJoined.
if(!mVoiceEnabled)
{
@@ -2368,6 +2481,8 @@ void LLVoiceClient::stateMachine()
//MARK: stateSessionJoined
case stateSessionJoined: // session handle received
+
+ mSpatialJoiningNum = 0;
// It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4
// before continuing from this state. They can happen in either order, and if I don't wait for both, things can get stuck.
// For now, the SessionGroup.AddSession response handler sets mSessionHandle and the SessionStateChangeEvent handler transitions to stateSessionJoined.
@@ -2456,9 +2571,10 @@ void LLVoiceClient::stateMachine()
enforceTether();
}
- // Send an update if the ptt state has changed (which shouldn't be able to happen that often -- the user can only click so fast)
- // or every 10hz, whichever is sooner.
- if((mAudioSession && mAudioSession->mVolumeDirty) || mPTTDirty || mSpeakerVolumeDirty || mUpdateTimer.hasExpired())
+ // Send an update only if the ptt or mute state has changed (which shouldn't be able to happen that often
+ // -- the user can only click so fast) or every 10hz, whichever is sooner.
+ // Sending for every volume update causes an excessive flood of messages whenever a volume slider is dragged.
+ if((mAudioSession && mAudioSession->mMuteDirty) || mPTTDirty || mUpdateTimer.hasExpired())
{
mUpdateTimer.setTimerExpirySec(UPDATE_THROTTLE_SECONDS);
sendPositionalUpdate();
@@ -3488,38 +3604,26 @@ void LLVoiceClient::sendPositionalUpdate(void)
stream << "</Request>\n\n\n";
}
- if(mAudioSession && mAudioSession->mVolumeDirty)
+ if(mAudioSession && (mAudioSession->mVolumeDirty || mAudioSession->mMuteDirty))
{
participantMap::iterator iter = mAudioSession->mParticipantsByURI.begin();
mAudioSession->mVolumeDirty = false;
+ mAudioSession->mMuteDirty = false;
for(; iter != mAudioSession->mParticipantsByURI.end(); iter++)
{
participantState *p = iter->second;
-
+
if(p->mVolumeDirty)
{
// Can't set volume/mute for yourself
if(!p->mIsSelf)
{
- int volume = 56; // nominal default value
+ // scale from the range 0.0-1.0 to vivox volume in the range 0-100
+ S32 volume = llround(p->mVolume / VOLUME_SCALE_VIVOX);
+
bool mute = p->mOnMuteList;
-
- if(p->mUserVolume != -1)
- {
- // scale from user volume in the range 0-400 (with 100 as "normal") to vivox volume in the range 0-100 (with 56 as "normal")
- if(p->mUserVolume < 100)
- volume = (p->mUserVolume * 56) / 100;
- else
- volume = (((p->mUserVolume - 100) * (100 - 56)) / 300) + 56;
- }
- else if(p->mVolume != -1)
- {
- // Use the previously reported internal volume (comes in with a ParticipantUpdatedEvent)
- volume = p->mVolume;
- }
-
if(mute)
{
@@ -3527,10 +3631,16 @@ void LLVoiceClient::sendPositionalUpdate(void)
// If we want the user to be muted, set their volume to 0 as well.
// This isn't perfect, but it will at least reduce their volume to a minimum.
volume = 0;
+
+ // Mark the current volume level as set to prevent incoming events
+ // changing it to 0, so that we can return to it when unmuting.
+ p->mVolumeSet = true;
}
-
+
if(volume == 0)
+ {
mute = true;
+ }
LL_DEBUGS("Voice") << "Setting volume/mute for avatar " << p->mAvatarID << " to " << volume << (mute?"/true":"/false") << LL_ENDL;
@@ -4670,9 +4780,14 @@ void LLVoiceClient::participantUpdatedEvent(
{
participant->mPower = 0.0f;
}
- participant->mVolume = volume;
-
+ // Ignore incoming volume level if it has been explicitly set, or there
+ // is a volume or mute change pending.
+ if ( !participant->mVolumeSet && !participant->mVolumeDirty)
+ {
+ participant->mVolume = (F32)volume * VOLUME_SCALE_VIVOX;
+ }
+
// *HACK: mantipov: added while working on EXT-3544
/*
Sometimes LLVoiceClient::participantUpdatedEvent callback is called BEFORE
@@ -5056,7 +5171,7 @@ void LLVoiceClient::muteListChanged()
// Check to see if this participant is on the mute list already
if(p->updateMuteState())
- mAudioSession->mVolumeDirty = true;
+ mAudioSession->mMuteDirty = true;
}
}
}
@@ -5079,10 +5194,10 @@ LLVoiceClient::participantState::participantState(const std::string &uri) :
mIsModeratorMuted(false),
mLastSpokeTimestamp(0.f),
mPower(0.f),
- mVolume(-1),
- mOnMuteList(false),
- mUserVolume(-1),
- mVolumeDirty(false),
+ mVolume(VOLUME_DEFAULT),
+ mOnMuteList(false),
+ mVolumeSet(false),
+ mVolumeDirty(false),
mAvatarIDValid(false),
mIsSelf(false)
{
@@ -5131,7 +5246,7 @@ LLVoiceClient::participantState *LLVoiceClient::sessionState::addParticipant(con
result->mAvatarID = id;
if(result->updateMuteState())
- mVolumeDirty = true;
+ mMuteDirty = true;
}
else
{
@@ -5143,8 +5258,7 @@ LLVoiceClient::participantState *LLVoiceClient::sessionState::addParticipant(con
mParticipantsByUUID.insert(participantUUIDMap::value_type(&(result->mAvatarID), result));
- result->mUserVolume = LLSpeakerVolumeStorage::getInstance()->getSpeakerVolume(result->mAvatarID);
- if (result->mUserVolume != -1)
+ if (LLSpeakerVolumeStorage::getInstance()->getSpeakerVolume(result->mAvatarID, result->mVolume))
{
result->mVolumeDirty = true;
mVolumeDirty = true;
@@ -5935,12 +6049,10 @@ void LLVoiceClient::enforceTether(void)
void LLVoiceClient::updatePosition(void)
{
-
if(gVoiceClient)
{
- LLVOAvatar *agent = gAgent.getAvatarObject();
LLViewerRegion *region = gAgent.getRegion();
- if(region && agent)
+ if(region && isAgentAvatarValid())
{
LLMatrix3 rot;
LLVector3d pos;
@@ -5958,9 +6070,9 @@ void LLVoiceClient::updatePosition(void)
rot); // rotation matrix
// Send the current avatar position to the voice code
- rot = agent->getRootJoint()->getWorldRotation().getMatrix3();
+ rot = gAgentAvatarp->getRootJoint()->getWorldRotation().getMatrix3();
- pos = agent->getPositionGlobal();
+ pos = gAgentAvatarp->getPositionGlobal();
// TODO: Can we get the head offset from outside the LLVOAvatar?
// pos += LLVector3d(mHeadOffset);
pos += LLVector3d(0.f, 0.f, 1.f);
@@ -6093,7 +6205,9 @@ bool LLVoiceClient::voiceEnabled()
bool LLVoiceClient::voiceWorking()
{
//Added stateSessionTerminated state to avoid problems with call in parcels with disabled voice (EXT-4758)
- return (stateLoggedIn <= mState) && (mState <= stateSessionTerminated);
+ // Condition with joining spatial num was added to take into account possible problems with connection to voice
+ // server(EXT-4313). See bug descriptions and comments for MAX_NORMAL_JOINING_SPATIAL_NUM for more info.
+ return (mSpatialJoiningNum < MAX_NORMAL_JOINING_SPATIAL_NUM) && (stateLoggedIn <= mState) && (mState <= stateSessionTerminated);
}
void LLVoiceClient::setLipSyncEnabled(BOOL enabled)
@@ -6342,51 +6456,21 @@ BOOL LLVoiceClient::getOnMuteList(const LLUUID& id)
return result;
}
-// External accessiors. Maps 0.0 to 1.0 to internal values 0-400 with .5 == 100
-// internal = 400 * external^2
+// External accessors.
F32 LLVoiceClient::getUserVolume(const LLUUID& id)
{
- F32 result = 0.0f;
+ // Minimum volume will be returned for users with voice disabled
+ F32 result = VOLUME_MIN;
participantState *participant = findParticipantByID(id);
if(participant)
{
- S32 ires = 100; // nominal default volume
-
- if(participant->mIsSelf)
- {
- // Always make it look like the user's own volume is set at the default.
- }
- else if(participant->mUserVolume != -1)
- {
- // Use the internal volume
- ires = participant->mUserVolume;
-
- // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging.
-// LL_DEBUGS("Voice") << "mapping from mUserVolume " << ires << LL_ENDL;
- }
- else if(participant->mVolume != -1)
- {
- // Map backwards from vivox volume
-
- // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging.
-// LL_DEBUGS("Voice") << "mapping from mVolume " << participant->mVolume << LL_ENDL;
+ result = participant->mVolume;
- if(participant->mVolume < 56)
- {
- ires = (participant->mVolume * 100) / 56;
- }
- else
- {
- ires = (((participant->mVolume - 56) * 300) / (100 - 56)) + 100;
- }
- }
- result = sqrtf(((F32)ires) / 400.f);
+ // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging.
+ // LL_DEBUGS("Voice") << "mVolume = " << result << " for " << id << LL_ENDL;
}
- // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging.
-// LL_DEBUGS("Voice") << "returning " << result << LL_ENDL;
-
return result;
}
@@ -6395,16 +6479,23 @@ void LLVoiceClient::setUserVolume(const LLUUID& id, F32 volume)
if(mAudioSession)
{
participantState *participant = findParticipantByID(id);
- if (participant)
+ if (participant && !participant->mIsSelf)
{
- // store this volume setting for future sessions
- LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, volume);
+ if (!is_approx_equal(volume, VOLUME_DEFAULT))
+ {
+ // Store this volume setting for future sessions if it has been
+ // changed from the default
+ LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, volume);
+ }
+ else
+ {
+ // Remove stored volume setting if it is returned to the default
+ LLSpeakerVolumeStorage::getInstance()->removeSpeakerVolume(id);
+ }
- // volume can amplify by as much as 4x!
- S32 ivol = (S32)(400.f * volume * volume);
- participant->mUserVolume = llclamp(ivol, 0, 400);
- participant->mVolumeDirty = TRUE;
- mAudioSession->mVolumeDirty = TRUE;
+ participant->mVolume = llclamp(volume, VOLUME_MIN, VOLUME_MAX);
+ participant->mVolumeDirty = true;
+ mAudioSession->mVolumeDirty = true;
}
}
}
@@ -6545,6 +6636,7 @@ LLVoiceClient::sessionState::sessionState() :
mVoiceEnabled(false),
mReconnect(false),
mVolumeDirty(false),
+ mMuteDirty(false),
mParticipantsChanged(false)
{
}
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 05e9dcc896..0df4e4bb3b 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -101,6 +101,10 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
static F32 OVERDRIVEN_POWER_LEVEL;
+ static const F32 VOLUME_MIN;
+ static const F32 VOLUME_DEFAULT;
+ static const F32 VOLUME_MAX;
+
void updateSettings(); // call after loading settings and whenever they change
void getCaptureDevicesSendMessage();
@@ -269,7 +273,7 @@ static void updatePosition(void);
public:
participantState(const std::string &uri);
- bool updateMuteState();
+ bool updateMuteState(); // true if mute state has changed
bool isAvatar();
std::string mURI;
@@ -279,13 +283,13 @@ static void updatePosition(void);
LLFrameTimer mSpeakingTimeout;
F32 mLastSpokeTimestamp;
F32 mPower;
- int mVolume;
+ F32 mVolume;
std::string mGroupID;
- int mUserVolume;
bool mPTT;
bool mIsSpeaking;
bool mIsModeratorMuted;
bool mOnMuteList; // true if this avatar is on the user's mute list (and should be muted)
+ bool mVolumeSet; // true if incoming volume messages should not change the volume
bool mVolumeDirty; // true if this participant needs a volume command sent (either mOnMuteList or mUserVolume has changed)
bool mAvatarIDValid;
bool mIsSelf;
@@ -349,6 +353,7 @@ static void updatePosition(void);
// Set to true when the mute state of someone in the participant list changes.
// The code will have to walk the list to find the changed participant(s).
bool mVolumeDirty;
+ bool mMuteDirty;
bool mParticipantsChanged;
participantMap mParticipantsByURI;
@@ -620,6 +625,10 @@ static void updatePosition(void);
state mState;
bool mSessionTerminateRequested;
bool mRelogRequested;
+ // Number of times (in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine().
+ // The larger it is the greater is possibility there is a problem with connection to voice server.
+ // Introduced while fixing EXT-4313.
+ int mSpatialJoiningNum;
void setState(state inState);
state getState(void) { return mState; };
diff --git a/indra/newview/llvoinventorylistener.h b/indra/newview/llvoinventorylistener.h
index 335e867fca..1531e6e339 100644
--- a/indra/newview/llvoinventorylistener.h
+++ b/indra/newview/llvoinventorylistener.h
@@ -42,7 +42,7 @@ class LLVOInventoryListener
{
public:
virtual void inventoryChanged(LLViewerObject* object,
- InventoryObjectList* inventory,
+ LLInventoryObject::object_list_t* inventory,
S32 serial_num,
void* user_data) = 0;
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
index 139d2fbd88..3ba4ecad0c 100644
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -40,7 +40,7 @@
#include "message.h"
#include "v2math.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "lldrawable.h"
#include "llface.h"
#include "llsky.h"
@@ -136,7 +136,7 @@ F32 LLVOPartGroup::getPartSize(S32 idx)
LLVector3 LLVOPartGroup::getCameraPosition() const
{
- return gAgent.getCameraPositionAgent();
+ return gAgentCamera.getCameraPositionAgent();
}
static LLFastTimer::DeclareTimer FTM_UPDATE_PARTICLES("Update Particles");
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index 0550ed770b..d73850cb49 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -41,6 +41,7 @@
#include "timing.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "lldrawable.h"
#include "llface.h"
#include "llcubemap.h"
@@ -357,7 +358,7 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
mFace[i] = NULL;
}
- mCameraPosAgent = gAgent.getCameraPositionAgent();
+ mCameraPosAgent = gAgentCamera.getCameraPositionAgent();
mAtmHeight = ATM_HEIGHT;
mEarthCenter = LLVector3(mCameraPosAgent.mV[0], mCameraPosAgent.mV[1], -EARTH_RADIUS);
@@ -2034,7 +2035,7 @@ void LLVOSky::updateFog(const F32 distance)
const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f;
// LLWorld::getInstance()->getWaterHeight();
- F32 camera_height = gAgent.getCameraPositionAgent().mV[2];
+ F32 camera_height = gAgentCamera.getCameraPositionAgent().mV[2];
F32 near_clip_height = LLViewerCamera::getInstance()->getAtAxis().mV[VZ] * LLViewerCamera::getInstance()->getNear();
camera_height += near_clip_height;
diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp
index 75beab519e..428ef20006 100644
--- a/indra/newview/llvotextbubble.cpp
+++ b/indra/newview/llvotextbubble.cpp
@@ -84,6 +84,9 @@ BOOL LLVOTextBubble::isActive() const
BOOL LLVOTextBubble::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
{
+ static LLFastTimer::DeclareTimer ftm("Text Bubble");
+ LLFastTimer t(ftm);
+
F32 dt = mUpdateTimer.getElapsedTimeF32();
// Die after a few seconds.
if (dt > 1.5f)
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 24f1c4bd24..b89c0cd638 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -44,7 +44,7 @@
#include "material_codes.h"
#include "object_flags.h"
-#include "llagent.h"
+#include "llagentcamera.h"
#include "lldrawable.h"
#include "llface.h"
#include "llviewercamera.h"
@@ -444,7 +444,7 @@ void LLVOTree::setPixelAreaAndAngle(LLAgent &agent)
// Re-calculate mPixelArea accurately
// This should be the camera's center, as soon as we move to all region-local.
- LLVector3 relative_position = getPositionAgent() - agent.getCameraPositionAgent();
+ LLVector3 relative_position = getPositionAgent() - gAgentCamera.getCameraPositionAgent();
F32 range = relative_position.length(); // ugh, square root
F32 max_scale = mBillboardScale * getMaxScale();
@@ -1141,7 +1141,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD
glLoadMatrixf((F32*) scale_mat.mMatrix);
glDrawElements(GL_TRIANGLES, sLODIndexCount[trunk_LOD], GL_UNSIGNED_SHORT, indicesp + sLODIndexOffset[trunk_LOD]);
- gPipeline.addTrianglesDrawn(LEAF_INDICES/3);
+ gPipeline.addTrianglesDrawn(LEAF_INDICES);
stop_glerror();
ret += sLODIndexCount[trunk_LOD];
}
@@ -1191,7 +1191,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD
glLoadMatrixf((F32*) scale_mat.mMatrix);
glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp);
- gPipeline.addTrianglesDrawn(LEAF_INDICES/3);
+ gPipeline.addTrianglesDrawn(LEAF_INDICES);
stop_glerror();
ret += LEAF_INDICES;
}
@@ -1216,7 +1216,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD
glLoadMatrixf((F32*) scale_mat.mMatrix);
glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp);
- gPipeline.addTrianglesDrawn(LEAF_INDICES/3);
+ gPipeline.addTrianglesDrawn(LEAF_INDICES);
stop_glerror();
ret += LEAF_INDICES;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 14bedaa49c..6b052b8e99 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -369,7 +369,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
S32 res2 = unpackTEMessage(*dp);
if (TEM_INVALID == res2)
{
- // Well, crap, there's something bogus in the data that we're unpacking.
+ // There's something bogus in the data that we're unpacking.
dp->dumpBufferToLog();
llwarns << "Flushing cache files" << llendl;
std::string mask;
@@ -603,6 +603,9 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
{
LLViewerObject::idleUpdate(agent, world, time);
+ static LLFastTimer::DeclareTimer ftm("Volume");
+ LLFastTimer t(ftm);
+
if (mDead || mDrawable.isNull())
{
return TRUE;
@@ -624,6 +627,18 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
mVolumeImpl->doIdleUpdate(agent, world, time);
}
+ const S32 MAX_ACTIVE_OBJECT_QUIET_FRAMES = 40;
+
+ if (mDrawable->isActive())
+ {
+ if (mDrawable->isRoot() &&
+ mDrawable->mQuietCount++ > MAX_ACTIVE_OBJECT_QUIET_FRAMES &&
+ (!mDrawable->getParent() || !mDrawable->getParent()->isActive()))
+ {
+ mDrawable->makeStatic();
+ }
+ }
+
return TRUE;
}
@@ -947,8 +962,11 @@ void LLVOVolume::updateSculptTexture()
if (isSculpted())
{
LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT);
- LLUUID id = sculpt_params->getSculptTexture();
- mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
+ LLUUID id = sculpt_params->getSculptTexture();
+ if (id.notNull())
+ {
+ mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
+ }
}
else
{
@@ -1073,7 +1091,7 @@ BOOL LLVOVolume::calcLOD()
S32 cur_detail = 0;
F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length();
- F32 distance = llmin(mDrawable->mDistanceWRTCamera, MAX_LOD_DISTANCE);
+ F32 distance = mDrawable->mDistanceWRTCamera; //llmin(mDrawable->mDistanceWRTCamera, MAX_LOD_DISTANCE);
distance *= sDistanceFactor;
F32 rampDist = LLVOVolume::sLODFactor * 2;
@@ -1397,7 +1415,7 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)
return res;
}
- dirtySpatialGroup();
+ dirtySpatialGroup(drawable->isState(LLDrawable::IN_REBUILD_Q1));
BOOL compiled = FALSE;
@@ -1500,7 +1518,14 @@ void LLVOVolume::updateFaceSize(S32 idx)
else
{
const LLVolumeFace& vol_face = getVolume()->getVolumeFace(idx);
- facep->setSize(vol_face.mVertices.size(), vol_face.mIndices.size());
+ if (LLPipeline::sUseTriStrips)
+ {
+ facep->setSize(vol_face.mVertices.size(), vol_face.mTriStrip.size());
+ }
+ else
+ {
+ facep->setSize(vol_face.mVertices.size(), vol_face.mIndices.size());
+ }
}
}
@@ -3250,6 +3275,11 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
draw_info->mExtents[0] = facep->mExtents[0];
draw_info->mExtents[1] = facep->mExtents[1];
validate_draw_info(*draw_info);
+
+ if (LLPipeline::sUseTriStrips)
+ {
+ draw_info->mDrawMode = LLRender::TRIANGLE_STRIP;
+ }
}
}
@@ -3334,7 +3364,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
drawablep->updateFaceSize(i);
LLFace* facep = drawablep->getFace(i);
- if (cur_total > max_total)
+ if (cur_total > max_total || facep->getIndicesCount() <= 0 || facep->getGeomCount() <= 0)
{
facep->mVertexBuffer = NULL;
facep->mLastVertexBuffer = NULL;
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index 0272a2ab34..1749ccef94 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -519,7 +519,7 @@ void LLVOWLSky::drawDome(void)
LLRender::TRIANGLE_STRIP,
0, strips_segment->getRequestedVerts()-1, strips_segment->getRequestedIndices(),
0);
- gPipeline.addTrianglesDrawn(strips_segment->getRequestedIndices() - 2);
+ gPipeline.addTrianglesDrawn(strips_segment->getRequestedIndices(), LLRender::TRIANGLE_STRIP);
}
#else
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 8be8f494da..436cd478b4 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -54,6 +54,7 @@
#include "llviewercontrol.h"
#include "lldrawpoolwater.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llviewerregion.h"
#include "llwlparammanager.h"
@@ -434,7 +435,7 @@ F32 LLWaterParamManager::getFogDensity(void)
// modify if we're underwater
const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f;
- F32 camera_height = gAgent.getCameraPositionAgent().mV[2];
+ F32 camera_height = gAgentCamera.getCameraPositionAgent().mV[2];
if(camera_height <= water_height)
{
// raise it to the underwater fog density modifier
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index acfbc23f62..63f99273fe 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -56,6 +56,32 @@ using namespace LLVOAvatarDefines;
// static
S32 LLWearable::sCurrentDefinitionVersion = 1;
+// support class - remove for 2.1 (hackity hack hack)
+class LLOverrideBakedTextureUpdate
+{
+public:
+ LLOverrideBakedTextureUpdate(bool temp_state)
+ {
+ U32 num_bakes = (U32) LLVOAvatarDefines::BAKED_NUM_INDICES;
+ for( U32 index = 0; index < num_bakes; ++index )
+ {
+ composite_enabled[index] = gAgentAvatarp->isCompositeUpdateEnabled(index);
+ }
+ gAgentAvatarp->setCompositeUpdatesEnabled(temp_state);
+ }
+
+ ~LLOverrideBakedTextureUpdate()
+ {
+ U32 num_bakes = (U32)LLVOAvatarDefines::BAKED_NUM_INDICES;
+ for( U32 index = 0; index < num_bakes; ++index )
+ {
+ gAgentAvatarp->setCompositeUpdatesEnabled(index, composite_enabled[index]);
+ }
+ }
+private:
+ bool composite_enabled[LLVOAvatarDefines::BAKED_NUM_INDICES];
+};
+
// Private local functions
static std::string terse_F32_to_string(F32 f);
static std::string asset_id_to_filename(const LLUUID &asset_id);
@@ -176,10 +202,9 @@ BOOL LLWearable::exportFile(LLFILE* file) const
void LLWearable::createVisualParams()
{
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- for (LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam();
+ for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam();
param;
- param = (LLViewerVisualParam*) avatar->getNextVisualParam())
+ param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam())
{
if (param->getWearableType() == mType)
{
@@ -199,7 +224,7 @@ void LLWearable::createVisualParams()
param->resetDrivenParams();
if(!param->linkDrivenParams(boost::bind(wearable_function,(LLWearable*)this, _1), false))
{
- if( !param->linkDrivenParams(boost::bind(avatar_function,(LLVOAvatarSelf*)avatar,_1 ), true))
+ if( !param->linkDrivenParams(boost::bind(avatar_function,gAgentAvatarp,_1 ), true))
{
llwarns << "could not link driven params for wearable " << getName() << " id: " << param->getID() << llendl;
continue;
@@ -216,6 +241,10 @@ BOOL LLWearable::importFile( LLFILE* file )
char text_buffer[2048]; /* Flawfinder: ignore */
S32 fields_read = 0;
+ // suppress texlayerset updates while wearables are being imported. Layersets will be updated
+ // when the wearables are "worn", not loaded. Note state will be restored when this object is destroyed.
+ LLOverrideBakedTextureUpdate stop_bakes(false);
+
// read header and version
fields_read = fscanf( file, "LLWearable version %d\n", &mDefinitionVersion );
if( fields_read != 1 )
@@ -431,12 +460,7 @@ BOOL LLWearable::importFile( LLFILE* file )
// since this wearable was created.
BOOL LLWearable::isOldVersion() const
{
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- llassert( avatar );
- if( !avatar )
- {
- return FALSE;
- }
+ if (!isAgentAvatarValid()) return FALSE;
if( LLWearable::sCurrentDefinitionVersion < mDefinitionVersion )
{
@@ -450,9 +474,9 @@ BOOL LLWearable::isOldVersion() const
}
S32 param_count = 0;
- for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam();
+ for( LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam();
param;
- param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
+ param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam() )
{
if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
{
@@ -498,17 +522,11 @@ BOOL LLWearable::isOldVersion() const
// only if those values are the same as the defaults.
BOOL LLWearable::isDirty() const
{
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- llassert( avatar );
- if( !avatar )
- {
- return FALSE;
- }
-
+ if (!isAgentAvatarValid()) return FALSE;
- for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam();
+ for( LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam();
param;
- param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
+ param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam() )
{
if( (param->getWearableType() == mType)
&& (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE )
@@ -569,14 +587,9 @@ BOOL LLWearable::isDirty() const
void LLWearable::setParamsToDefaults()
{
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- llassert( avatar );
- if( !avatar )
- {
- return;
- }
+ if (!isAgentAvatarValid()) return;
- for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
+ for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() )
{
if( (((LLViewerVisualParam*)param)->getWearableType() == mType ) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
{
@@ -612,18 +625,12 @@ void LLWearable::setTexturesToDefaults()
// Updates the user's avatar's appearance
void LLWearable::writeToAvatar()
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- llassert( avatar );
- if( !avatar )
- {
- llerrs << "could not get avatar object to write to for wearable " << this->getName() << llendl;
- return;
- }
+ if (!isAgentAvatarValid()) return;
- ESex old_sex = avatar->getSex();
+ ESex old_sex = gAgentAvatarp->getSex();
// Pull params
- for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
+ for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() )
{
// cross-wearable parameters are not authoritative, as they are driven by a different wearable. So don't copy the values to the
// avatar object if cross wearable. Cross wearable params get their values from the avatar, they shouldn't write the other way.
@@ -632,7 +639,7 @@ void LLWearable::writeToAvatar()
S32 param_id = param->getID();
F32 weight = getVisualParamWeight(param_id);
- avatar->setVisualParamWeight( param_id, weight, FALSE );
+ gAgentAvatarp->setVisualParamWeight( param_id, weight, FALSE );
}
}
@@ -653,14 +660,14 @@ void LLWearable::writeToAvatar()
}
LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE );
// MULTI-WEARABLE: replace hard-coded 0
- avatar->setLocalTextureTE(te, image, 0);
+ gAgentAvatarp->setLocalTextureTE(te, image, 0);
}
}
- ESex new_sex = avatar->getSex();
+ ESex new_sex = gAgentAvatarp->getSex();
if( old_sex != new_sex )
{
- avatar->updateSexDependentLayerSets( FALSE );
+ gAgentAvatarp->updateSexDependentLayerSets( FALSE );
}
// if( upload_bake )
@@ -674,12 +681,7 @@ void LLWearable::writeToAvatar()
// static
void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- llassert( avatar );
- if( !avatar )
- {
- return;
- }
+ if (!isAgentAvatarValid()) return;
// You can't just remove body parts.
if( (type == WT_SHAPE) ||
@@ -691,12 +693,12 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )
}
// Pull params
- for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
+ for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() )
{
if( (((LLViewerVisualParam*)param)->getWearableType() == type) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
{
S32 param_id = param->getID();
- avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake );
+ gAgentAvatarp->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake );
}
}
@@ -705,8 +707,8 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )
gFloaterCustomize->setWearable(type, NULL, PERM_ALL, TRUE);
}
- avatar->updateVisualParams();
- avatar->wearableUpdated(type, TRUE);
+ gAgentAvatarp->updateVisualParams();
+ gAgentAvatarp->wearableUpdated(type, TRUE);
// if( upload_bake )
// {
@@ -718,12 +720,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )
// Definition version is current: removes obsolete enties and creates default values for new ones.
void LLWearable::copyDataFrom(const LLWearable* src)
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- llassert( avatar );
- if( !avatar )
- {
- return;
- }
+ if (!isAgentAvatarValid()) return;
mDefinitionVersion = LLWearable::sCurrentDefinitionVersion;
@@ -736,9 +733,9 @@ void LLWearable::copyDataFrom(const LLWearable* src)
mSavedVisualParamMap.clear();
// Deep copy of mVisualParamMap (copies only those params that are current, filling in defaults where needed)
- for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam();
+ for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam();
param;
- param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
+ param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam() )
{
if( (param->getWearableType() == mType) )
{
@@ -750,7 +747,7 @@ void LLWearable::copyDataFrom(const LLWearable* src)
destroyTextures();
// Deep copy of mTEMap (copies only those tes that are current, filling in defaults where needed)
- for( S32 te = 0; te < TEX_NUM_INDICES; te++ )
+ for (S32 te = 0; te < TEX_NUM_INDICES; te++)
{
if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex) te) == mType)
{
@@ -843,14 +840,12 @@ void LLWearable::addVisualParam(LLVisualParam *param)
void LLWearable::setVisualParams()
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
-
for (visual_param_index_map_t::const_iterator iter = mVisualParamIndexMap.begin(); iter != mVisualParamIndexMap.end(); iter++)
{
S32 id = iter->first;
LLVisualParam *wearable_param = iter->second;
F32 value = wearable_param->getWeight();
- avatar->setVisualParamWeight(id, value, FALSE);
+ gAgentAvatarp->setVisualParamWeight(id, value, FALSE);
}
}
@@ -991,9 +986,8 @@ BOOL LLWearable::isOnTop() const
void LLWearable::createLayers(S32 te)
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- LLTexLayerSet *layer_set = avatar->getLayerSet((ETextureIndex)te);
- if( layer_set )
+ LLTexLayerSet *layer_set = gAgentAvatarp->getLayerSet((ETextureIndex)te);
+ if (layer_set)
{
layer_set->cloneTemplates(mTEMap[te], (ETextureIndex)te, this);
}
@@ -1090,10 +1084,9 @@ void LLWearable::destroyTextures()
void LLWearable::pullCrossWearableValues()
{
// scan through all of the avatar's visual parameters
- LLVOAvatar* avatar = gAgent.getAvatarObject();
- for (LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam();
+ for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam();
param;
- param = (LLViewerVisualParam*) avatar->getNextVisualParam())
+ param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam())
{
if( param )
{
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index d6a9837b86..b2de31218b 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -235,8 +235,9 @@ LLWearable* LLWearableList::createNewWearable( EWearableType type )
LLWearable *wearable = generateNewWearable();
wearable->setType( type );
- std::string name = "New ";
- name.append( wearable->getTypeLabel() );
+ LLSD item_name = LLSD().with("[WEARABLE_ITEM]", wearable->getTypeLabel());
+ std::string name = LLTrans::getString("NewWearable");
+ LLStringUtil::format(name, item_name);
wearable->setName( name );
LLPermissions perm;
diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h
index cf1a9bddff..5e564ba953 100644
--- a/indra/newview/llwearablelist.h
+++ b/indra/newview/llwearablelist.h
@@ -39,6 +39,12 @@
#include "llassetstorage.h"
// Globally constructed; be careful that there's no dependency with gAgent.
+/*
+ BUG: mList's system of mapping between assetIDs and wearables is flawed
+ since LLWearable* has an associated itemID, and you can have multiple
+ inventory items pointing to the same asset (i.e. more than one ItemID
+ per assetID). EXT-6252
+*/
class LLWearableList : public LLSingleton<LLWearableList>
{
public:
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 3385b75c65..1a64f9d881 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -103,8 +103,18 @@ void LLWeb::loadURLInternal(const std::string &url)
// static
void LLWeb::loadURLExternal(const std::string& url)
{
+ loadURLExternal(url, true);
+}
+
+
+// static
+void LLWeb::loadURLExternal(const std::string& url, bool async)
+{
std::string escaped_url = escapeURL(url);
- gViewerWindow->getWindow()->spawnWebBrowser(escaped_url);
+ if (gViewerWindow)
+ {
+ gViewerWindow->getWindow()->spawnWebBrowser(escaped_url, async);
+ }
}
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index f4666c9280..1119b80bb4 100644
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -54,8 +54,10 @@ public:
static void loadURL(const char* url) { loadURL( ll_safe_string(url) ); }
/// Load the given url in the Second Life internal web browser
static void loadURLInternal(const std::string &url);
- /// Load the given url in the operating system's web browser
+ /// Load the given url in the operating system's web browser, async if we want to return immediately
+ /// before browser has spawned
static void loadURLExternal(const std::string& url);
+ static void loadURLExternal(const std::string& url, bool async);
/// Returns escaped url (eg, " " to "%20") - used by all loadURL methods
static std::string escapeURL(const std::string& url);
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 118d7f8d08..0b63f5efbd 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -45,6 +45,7 @@
#include "llhttpnode.h"
#include "llregionhandle.h"
#include "llsurface.h"
+#include "lltrans.h"
#include "llviewercamera.h"
#include "llviewertexture.h"
#include "llviewertexturelist.h"
@@ -258,7 +259,7 @@ void LLWorld::removeRegion(const LLHost &host)
llwarns << "gFrameTimeSeconds " << gFrameTimeSeconds << llendl;
llwarns << "Disabling region " << regionp->getName() << " that agent is in!" << llendl;
- LLAppViewer::instance()->forceDisconnect("You have been disconnected from the region you were in.");
+ LLAppViewer::instance()->forceDisconnect(LLTrans::getString("YouHaveBeenDisconnected"));
return;
}
@@ -657,6 +658,9 @@ void LLWorld::updateParticles()
void LLWorld::updateClouds(const F32 dt)
{
+ static LLFastTimer::DeclareTimer ftm("World Clouds");
+ LLFastTimer t(ftm);
+
if (gSavedSettings.getBOOL("FreezeTime") ||
!gSavedSettings.getBOOL("SkyUseClassicClouds"))
{
@@ -1205,7 +1209,7 @@ static LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3
return pos_global;
}
-void LLWorld::getAvatars(std::vector<LLUUID>* avatar_ids, std::vector<LLVector3d>* positions, const LLVector3d& relative_to, F32 radius) const
+void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positions, const LLVector3d& relative_to, F32 radius) const
{
if(avatar_ids != NULL)
{
diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h
index 48025c700b..502f7b0320 100644
--- a/indra/newview/llworld.h
+++ b/indra/newview/llworld.h
@@ -158,7 +158,7 @@ public:
// All arguments are optional. Given containers will be emptied and then filled.
// Not supplying origin or radius input returns data on all avatars in the known regions.
void getAvatars(
- std::vector<LLUUID>* avatar_ids = NULL,
+ uuid_vec_t* avatar_ids = NULL,
std::vector<LLVector3d>* positions = NULL,
const LLVector3d& relative_to = LLVector3d(), F32 radius = FLT_MAX) const;
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
index 7e37727b86..e4e677eb64 100644
--- a/indra/newview/llworldmap.h
+++ b/indra/newview/llworldmap.h
@@ -123,6 +123,7 @@ public:
bool isName(const std::string& name) const;
bool isDown() { return (mAccess == SIM_ACCESS_DOWN); }
bool isPG() { return (mAccess <= SIM_ACCESS_PG); }
+ bool isAdult() { return (mAccess == SIM_ACCESS_ADULT); }
// Debug only
void dump() const; // Print the region info to the standard output
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 5edf72d4ae..0c37bb6eb1 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -44,7 +44,9 @@
#include "lltooltip.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llcallingcard.h"
+#include "llcommandhandler.h"
#include "llviewercontrol.h"
#include "llfloatermap.h"
#include "llfloaterworldmap.h"
@@ -310,7 +312,7 @@ void LLWorldMapView::draw()
const S32 height = getRect().getHeight();
const F32 half_width = F32(width) / 2.0f;
const F32 half_height = F32(height) / 2.0f;
- LLVector3d camera_global = gAgent.getCameraPositionGlobal();
+ LLVector3d camera_global = gAgentCamera.getCameraPositionGlobal();
S32 level = LLWorldMipmap::scaleToLevel(sMapScale);
@@ -884,35 +886,43 @@ void LLWorldMapView::drawFrustum()
F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 );
F32 half_width_pixels = half_width_meters * meters_to_pixels;
- F32 ctr_x = getRect().getWidth() * 0.5f + sPanX;
- F32 ctr_y = getRect().getHeight() * 0.5f + sPanY;
+ F32 ctr_x = getLocalRect().getWidth() * 0.5f + sPanX;
+ F32 ctr_y = getLocalRect().getHeight() * 0.5f + sPanY;
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// Since we don't rotate the map, we have to rotate the frustum.
gGL.pushMatrix();
+ {
gGL.translatef( ctr_x, ctr_y, 0 );
- glRotatef( atan2( LLViewerCamera::getInstance()->getAtAxis().mV[VX], LLViewerCamera::getInstance()->getAtAxis().mV[VY] ) * RAD_TO_DEG, 0.f, 0.f, -1.f);
// Draw triangle with more alpha in far pixels to make it
// fade out in distance.
gGL.begin( LLRender::TRIANGLES );
+ {
+ LLVector2 cam_lookat(LLViewerCamera::instance().getAtAxis().mV[VX], LLViewerCamera::instance().getAtAxis().mV[VY]);
+ LLVector2 cam_left(LLViewerCamera::instance().getLeftAxis().mV[VX], LLViewerCamera::instance().getLeftAxis().mV[VY]);
+
gGL.color4f(1.f, 1.f, 1.f, 0.25f);
gGL.vertex2f( 0, 0 );
gGL.color4f(1.f, 1.f, 1.f, 0.02f);
- gGL.vertex2f( -half_width_pixels, far_clip_pixels );
+
+ LLVector2 vert = cam_lookat * far_clip_pixels + cam_left * half_width_pixels;
+ gGL.vertex2f(vert.mV[VX], vert.mV[VY]);
- gGL.color4f(1.f, 1.f, 1.f, 0.02f);
- gGL.vertex2f( half_width_pixels, far_clip_pixels );
+ vert = cam_lookat * far_clip_pixels - cam_left * half_width_pixels;
+ gGL.vertex2f(vert.mV[VX], vert.mV[VY]);
+ }
gGL.end();
+ }
gGL.popMatrix();
}
LLVector3 LLWorldMapView::globalPosToView( const LLVector3d& global_pos )
{
- LLVector3d relative_pos_global = global_pos - gAgent.getCameraPositionGlobal();
+ LLVector3d relative_pos_global = global_pos - gAgentCamera.getCameraPositionGlobal();
LLVector3 pos_local;
pos_local.setVec(relative_pos_global); // convert to floats from doubles
@@ -1005,7 +1015,7 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y )
LLVector3d pos_global;
pos_global.setVec( pos_local );
- pos_global += gAgent.getCameraPositionGlobal();
+ pos_global += gAgentCamera.getCameraPositionGlobal();
if(gAgent.isGodlike())
{
pos_global.mdV[VZ] = GODLY_TELEPORT_HEIGHT; // Godly height should always be 200.
@@ -1637,7 +1647,7 @@ void LLWorldMapView::updateVisibleBlocks()
// Load the blocks visible in the current World Map view
// Get the World Map view coordinates and boundaries
- LLVector3d camera_global = gAgent.getCameraPositionGlobal();
+ LLVector3d camera_global = gAgentCamera.getCameraPositionGlobal();
const S32 width = getRect().getWidth();
const S32 height = getRect().getHeight();
const F32 half_width = F32(width) / 2.0f;
@@ -1726,7 +1736,10 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
id.toString(uuid_str);
uuid_str = uuid_str.substr(28);
sscanf(uuid_str.c_str(), "%X", &event_id);
- LLFloaterReg::showInstance("search", LLSD().with("category", "events").with("id", event_id));
+ // Invoke the event details floater if someone is clicking on an event.
+ LLSD params(LLSD::emptyArray());
+ params.append(event_id);
+ LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, true);
break;
}
case MAP_ITEM_LAND_FOR_SALE:
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index c19be37e75..5884cdd1c3 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -252,8 +252,10 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this);
- mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, LLCurl::getSSLVerify());
+ BOOL verifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert");
mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, LLCurl::getSSLVerify() ? 2 : 0);
+ mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, verifySSLCert);
+ mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, verifySSLCert ? 2 : 0);
// Be a little impatient about establishing connections.
mCurlRequest->setopt(CURLOPT_CONNECTTIMEOUT, 40L);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 57e75ddf30..4ca251af3e 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -56,6 +56,7 @@
// newview includes
#include "llagent.h"
+#include "llagentcamera.h"
#include "lldrawable.h"
#include "lldrawpoolalpha.h"
#include "lldrawpoolavatar.h"
@@ -116,7 +117,6 @@ const F32 BACKLIGHT_DAY_MAGNITUDE_AVATAR = 0.2f;
const F32 BACKLIGHT_NIGHT_MAGNITUDE_AVATAR = 0.1f;
const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;
const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f;
-const S32 MAX_ACTIVE_OBJECT_QUIET_FRAMES = 40;
const S32 MAX_OFFSCREEN_GEOMETRY_CHANGES_PER_FRAME = 10;
const U32 REFLECTION_MAP_RES = 128;
@@ -271,6 +271,7 @@ BOOL LLPipeline::sDelayVBUpdate = TRUE;
BOOL LLPipeline::sFastAlpha = TRUE;
BOOL LLPipeline::sDisableShaders = FALSE;
BOOL LLPipeline::sRenderBump = TRUE;
+BOOL LLPipeline::sUseTriStrips = TRUE;
BOOL LLPipeline::sUseFarClip = TRUE;
BOOL LLPipeline::sShadowRender = FALSE;
BOOL LLPipeline::sWaterReflections = FALSE;
@@ -359,6 +360,7 @@ void LLPipeline::init()
sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD");
sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
+ sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");
sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights");
sRenderAttachedParticles = gSavedSettings.getBOOL("RenderAttachedParticles");
@@ -1410,38 +1412,26 @@ void LLPipeline::updateMove()
assertInitialized();
- for (LLDrawable::drawable_set_t::iterator iter = mRetexturedList.begin();
- iter != mRetexturedList.end(); ++iter)
{
- LLDrawable* drawablep = *iter;
- if (drawablep && !drawablep->isDead())
- {
- drawablep->updateTexture();
- }
- }
- mRetexturedList.clear();
-
- updateMovedList(mMovedList);
+ static LLFastTimer::DeclareTimer ftm("Retexture");
+ LLFastTimer t(ftm);
- for (LLDrawable::drawable_set_t::iterator iter = mActiveQ.begin();
- iter != mActiveQ.end(); )
- {
- LLDrawable::drawable_set_t::iterator curiter = iter++;
- LLDrawable* drawablep = *curiter;
- if (drawablep && !drawablep->isDead())
+ for (LLDrawable::drawable_set_t::iterator iter = mRetexturedList.begin();
+ iter != mRetexturedList.end(); ++iter)
{
- if (drawablep->isRoot() &&
- drawablep->mQuietCount++ > MAX_ACTIVE_OBJECT_QUIET_FRAMES &&
- (!drawablep->getParent() || !drawablep->getParent()->isActive()))
+ LLDrawable* drawablep = *iter;
+ if (drawablep && !drawablep->isDead())
{
- drawablep->makeStatic(); // removes drawable and its children from mActiveQ
- iter = mActiveQ.upper_bound(drawablep); // next valid entry
+ drawablep->updateTexture();
}
}
- else
- {
- mActiveQ.erase(curiter);
- }
+ mRetexturedList.clear();
+ }
+
+ {
+ static LLFastTimer::DeclareTimer ftm("Moved List");
+ LLFastTimer t(ftm);
+ updateMovedList(mMovedList);
}
//balance octrees
@@ -3055,12 +3045,6 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
}
}
- if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PICKING))
- {
- LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderForSelect");
- gObjectList.renderObjectsForSelect(camera, gViewerWindow->getWindowRectScaled());
- }
- else
{
LLFastTimer t(FTM_POOLS);
@@ -3509,9 +3493,19 @@ void LLPipeline::renderGeomShadow(LLCamera& camera)
}
-void LLPipeline::addTrianglesDrawn(S32 count)
+void LLPipeline::addTrianglesDrawn(S32 index_count, U32 render_type)
{
assertInitialized();
+ S32 count = 0;
+ if (render_type == LLRender::TRIANGLE_STRIP)
+ {
+ count = index_count-2;
+ }
+ else
+ {
+ count = index_count/3;
+ }
+
mTrianglesDrawn += count;
mBatchCount++;
mMaxBatchSize = llmax(mMaxBatchSize, count);
@@ -3862,15 +3856,14 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects, BOOL render
}
// pick HUD objects
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
- if (avatarp && sShowHUDAttachments)
+ if (isAgentAvatarValid() && sShowHUDAttachments)
{
glh::matrix4f save_proj(glh_get_current_projection());
glh::matrix4f save_model(glh_get_current_modelview());
setup_hud_matrices(screen_rect);
- for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
- iter != avatarp->mAttachmentPoints.end(); )
+ for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
+ iter != gAgentAvatarp->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
@@ -3970,9 +3963,9 @@ void LLPipeline::rebuildPools()
max_count--;
}
- if (gAgent.getAvatarObject())
+ if (isAgentAvatarValid())
{
- gAgent.getAvatarObject()->rebuildHUD();
+ gAgentAvatarp->rebuildHUD();
}
}
@@ -4368,7 +4361,7 @@ void LLPipeline::calcNearbyLights(LLCamera& camera)
// mNearbyLight (and all light_set_t's) are sorted such that
// begin() == the closest light and rbegin() == the farthest light
const S32 MAX_LOCAL_LIGHTS = 6;
-// LLVector3 cam_pos = gAgent.getCameraPositionAgent();
+// LLVector3 cam_pos = gAgentCamera.getCameraPositionAgent();
LLVector3 cam_pos = LLViewerJoystick::getInstance()->getOverrideCamera() ?
camera.getOrigin() :
gAgent.getPositionAgent();
@@ -4604,8 +4597,8 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
glLightfv(gllight, GL_SPECULAR, LLColor4::black.mV);
}
- if (gAgent.getAvatarObject() &&
- gAgent.getAvatarObject()->mSpecialRenderMode == 3)
+ if (isAgentAvatarValid() &&
+ gAgentAvatarp->mSpecialRenderMode == 3)
{
LLColor4 light_color = LLColor4::white;
light_color.mV[3] = 0.0f;
@@ -4714,15 +4707,13 @@ void LLPipeline::enableLightsDynamic()
glColor4f(0.f, 0.f, 0.f, 1.f); // no local lighting by default
}
- LLVOAvatar* avatarp = gAgent.getAvatarObject();
-
- if (avatarp && getLightingDetail() <= 0)
+ if (isAgentAvatarValid() && getLightingDetail() <= 0)
{
- if (avatarp->mSpecialRenderMode == 0) // normal
+ if (gAgentAvatarp->mSpecialRenderMode == 0) // normal
{
gPipeline.enableLightsAvatar();
}
- else if (avatarp->mSpecialRenderMode >= 1) // anim preview
+ else if (gAgentAvatarp->mSpecialRenderMode >= 1) // anim preview
{
gPipeline.enableLightsAvatarEdit(LLColor4(0.7f, 0.6f, 0.3f, 1.f));
}
@@ -4792,10 +4783,6 @@ void LLPipeline::findReferences(LLDrawable *drawablep)
llinfos << "In mRetexturedList" << llendl;
}
- if (mActiveQ.find(drawablep) != mActiveQ.end())
- {
- llinfos << "In mActiveQ" << llendl;
- }
if (std::find(mBuildQ1.begin(), mBuildQ1.end(), drawablep) != mBuildQ1.end())
{
llinfos << "In mBuildQ1" << llendl;
@@ -4952,19 +4939,6 @@ void LLPipeline::setLight(LLDrawable *drawablep, BOOL is_light)
}
}
-void LLPipeline::setActive(LLDrawable *drawablep, BOOL active)
-{
- assertInitialized();
- if (active)
- {
- mActiveQ.insert(drawablep);
- }
- else
- {
- mActiveQ.erase(drawablep);
- }
-}
-
//static
void LLPipeline::toggleRenderType(U32 type)
{
@@ -5380,6 +5354,7 @@ void LLPipeline::resetVertexBuffers(LLDrawable* drawable)
void LLPipeline::resetVertexBuffers()
{
sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
+ sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
@@ -7123,15 +7098,15 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
{
if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate)
{
- LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
- if (gAgent.getCameraAnimating() || gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK)
+ BOOL skip_avatar_update = FALSE;
+ if (gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)
{
- avatar = NULL;
+ skip_avatar_update = TRUE;
}
- if (avatar)
+ if (!skip_avatar_update)
{
- avatar->updateAttachmentVisibility(CAMERA_MODE_THIRD_PERSON);
+ gAgentAvatarp->updateAttachmentVisibility(CAMERA_MODE_THIRD_PERSON);
}
LLVertexBuffer::unbind();
@@ -7355,9 +7330,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
LLGLState::checkTextureChannels();
LLGLState::checkClientArrays();
- if (avatar)
+ if (!skip_avatar_update)
{
- avatar->updateAttachmentVisibility(gAgent.getCameraMode());
+ gAgentAvatarp->updateAttachmentVisibility(gAgentCamera.getCameraMode());
}
}
}
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 711d40b138..6aecc23aac 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -270,15 +270,14 @@ public:
void shiftObjects(const LLVector3 &offset);
void setLight(LLDrawable *drawablep, BOOL is_light);
- void setActive(LLDrawable *drawablep, BOOL active);
-
+
BOOL hasRenderBatches(const U32 type) const;
LLCullResult::drawinfo_list_t::iterator beginRenderMap(U32 type);
LLCullResult::drawinfo_list_t::iterator endRenderMap(U32 type);
LLCullResult::sg_list_t::iterator beginAlphaGroups();
LLCullResult::sg_list_t::iterator endAlphaGroups();
- void addTrianglesDrawn(S32 count);
+ void addTrianglesDrawn(S32 index_count, U32 render_type = LLRender::TRIANGLES);
BOOL hasRenderType(const U32 type) const { return (type && (mRenderTypeMask & (1<<type))) ? TRUE : FALSE; }
BOOL hasRenderDebugFeatureMask(const U32 mask) const { return (mRenderDebugFeatureMask & mask) ? TRUE : FALSE; }
BOOL hasRenderDebugMask(const U32 mask) const { return (mRenderDebugMask & mask) ? TRUE : FALSE; }
@@ -448,7 +447,7 @@ public:
static BOOL sFastAlpha;
static BOOL sDisableShaders; // if TRUE, rendering will be done without shaders
static BOOL sRenderBump;
- static BOOL sUseFBO;
+ static BOOL sUseTriStrips;
static BOOL sUseFarClip;
static BOOL sShadowRender;
static BOOL sWaterReflections;
@@ -589,8 +588,6 @@ protected:
LLViewerObject::vobj_list_t mCreateQ;
- LLDrawable::drawable_set_t mActiveQ;
-
LLDrawable::drawable_set_t mRetexturedList;
class HighlightItem
diff --git a/indra/newview/res-sdl/ll_icon.BMP b/indra/newview/res-sdl/ll_icon.BMP
index 4a44aafbfa..6f9366df41 100644
--- a/indra/newview/res-sdl/ll_icon.BMP
+++ b/indra/newview/res-sdl/ll_icon.BMP
Binary files differ
diff --git a/indra/newview/res-sdl/toolbuy.BMP b/indra/newview/res-sdl/toolbuy.BMP
new file mode 100644
index 0000000000..07e9273721
--- /dev/null
+++ b/indra/newview/res-sdl/toolbuy.BMP
Binary files differ
diff --git a/indra/newview/res-sdl/toolopen.BMP b/indra/newview/res-sdl/toolopen.BMP
new file mode 100644
index 0000000000..5b87979304
--- /dev/null
+++ b/indra/newview/res-sdl/toolopen.BMP
Binary files differ
diff --git a/indra/newview/res-sdl/toolsit.BMP b/indra/newview/res-sdl/toolsit.BMP
new file mode 100644
index 0000000000..8ce59ae97a
--- /dev/null
+++ b/indra/newview/res-sdl/toolsit.BMP
Binary files differ
diff --git a/indra/newview/res/ll_icon.ico b/indra/newview/res/ll_icon.ico
index c35a3fa3a3..87985b9285 100644
--- a/indra/newview/res/ll_icon.ico
+++ b/indra/newview/res/ll_icon.ico
Binary files differ
diff --git a/indra/newview/res/ll_icon.png b/indra/newview/res/ll_icon.png
index 414b703111..ae573b3874 100644
--- a/indra/newview/res/ll_icon.png
+++ b/indra/newview/res/ll_icon.png
Binary files differ
diff --git a/indra/newview/res/toolbuy.cur b/indra/newview/res/toolbuy.cur
new file mode 100644
index 0000000000..7fd552a78e
--- /dev/null
+++ b/indra/newview/res/toolbuy.cur
Binary files differ
diff --git a/indra/newview/res/toolopen.cur b/indra/newview/res/toolopen.cur
new file mode 100644
index 0000000000..1562f5bc95
--- /dev/null
+++ b/indra/newview/res/toolopen.cur
Binary files differ
diff --git a/indra/newview/res/toolsit.cur b/indra/newview/res/toolsit.cur
new file mode 100644
index 0000000000..a1f99cfe6d
--- /dev/null
+++ b/indra/newview/res/toolsit.cur
Binary files differ
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 38291e45c9..ecdcacec46 100644
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -2,19 +2,12 @@
//
#include "resource.h"
-#ifdef IDC_STATIC
-#undef IDC_STATIC
-#endif
-#define IDC_STATIC (-1)
-#include "winresrc.h"
-
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
-// Commented out because it only compiles if you have MFC installed.
-//#include "winres.h"
+#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
@@ -34,18 +27,18 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// TEXTINCLUDE
//
-1 TEXTINCLUDE
+1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
-2 TEXTINCLUDE
+2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
-3 TEXTINCLUDE
+3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
@@ -84,9 +77,8 @@ END
//
#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
+GUIDELINES DESIGNINFO
BEGIN
-
"SPLASHSCREEN", DIALOG
BEGIN
LEFTMARGIN, 7
@@ -127,6 +119,9 @@ TOOLPIPETTE CURSOR "toolpipette.cur"
TOOLPLAY CURSOR "toolplay.cur"
TOOLPAUSE CURSOR "toolpause.cur"
TOOLMEDIAOPEN CURSOR "toolmediaopen.cur"
+TOOLOPEN CURSOR "toolopen.cur"
+TOOLSIT CURSOR "toolsit.cur"
+TOOLBUY CURSOR "toolbuy.cur"
/////////////////////////////////////////////////////////////////////////////
//
@@ -134,8 +129,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur"
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,0,0,200030
- PRODUCTVERSION 2,0,0,200030
+ FILEVERSION 2,0,0,203110
+ PRODUCTVERSION 2,0,0,203110
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -152,12 +147,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Linden Lab"
VALUE "FileDescription", "Second Life"
- VALUE "FileVersion", "2.0.0.200030"
+ VALUE "FileVersion", "2.0.0.203110"
VALUE "InternalName", "Second Life"
VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc."
VALUE "OriginalFilename", "SecondLife.exe"
VALUE "ProductName", "Second Life"
- VALUE "ProductVersion", "2.0.0.200030"
+ VALUE "ProductVersion", "2.0.0.203110"
END
END
BLOCK "VarFileInfo"
@@ -166,12 +161,6 @@ BEGIN
END
END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/secondlife.icns b/indra/newview/secondlife.icns
index ceb6036e0e..4560d4bb24 100644
--- a/indra/newview/secondlife.icns
+++ b/indra/newview/secondlife.icns
Binary files differ
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 45050de044..99603530d8 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -61,7 +61,7 @@
value="0.26 0.345 0.263 1" />
<color
name="Red"
- value="0.729 0 0.121 1" />
+ value="1 0 0 1" />
<color
name="Blue"
value="0 0 1 1" />
@@ -197,7 +197,7 @@
value="0.5 0.5 0.5 1" />
<color
name="ColorPaletteEntry03"
- value="0.3344 0.5456 0.5159 1" />
+ value="0.5 0 0 1" />
<color
name="ColorPaletteEntry04"
value="0.5 0.5 0 1" />
@@ -239,7 +239,7 @@
reference="LtYellow" />
<color
name="ColorPaletteEntry17"
- reference="LtGreen" />
+ reference="White" />
<color
name="ColorPaletteEntry18"
reference="LtGray" />
@@ -248,7 +248,7 @@
reference="Red" />
<color
name="ColorPaletteEntry20"
- reference=".5 .5 1 0" />
+ reference="Yellow" />
<color
name="ColorPaletteEntry21"
reference="Green" />
@@ -344,7 +344,7 @@
value="0.92 0.92 1 0.78" />
<color
name="GridlineColor"
- reference="Red" />
+ reference="White" />
<color
name="GridlineShadowColor"
value="0 0 0 0.31" />
@@ -392,7 +392,7 @@
reference="Yellow" />
<color
name="HighlightInspectColor"
- value="1 0.5 0 1" />
+ value="1 0 1 1" />
<color
name="HighlightParentColor"
value="0.67 0.83 0.96 1" />
@@ -421,6 +421,9 @@
name="InventoryItemSuffixColor"
reference="White_25" />
<color
+ name="InventoryItemLibraryColor"
+ reference="EmphasisColor" />
+ <color
name="InventorySearchStatusColor"
reference="EmphasisColor" />
<color
@@ -524,7 +527,7 @@
reference="Unused?" />
<color
name="NetMapBackgroundColor"
- value="0 0 0 0.3" />
+ value="0 0 0 0" />
<color
name="NetMapGroupOwnAboveWater"
reference="Purple" />
@@ -731,7 +734,10 @@
<color
name="ChatToastAgentNameColor"
reference="EmphasisColor" />
- <color
+ <color
name="ColorSwatchBorderColor"
value="0.45098 0.517647 0.607843 1"/>
+ <color
+ name="ChatTimestampColor"
+ reference="White" />
</colors>
diff --git a/indra/newview/skins/default/textures/arrow_down.tga b/indra/newview/skins/default/textures/arrow_down.tga
deleted file mode 100644
index 81dc9d3b6c..0000000000
--- a/indra/newview/skins/default/textures/arrow_down.tga
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png
deleted file mode 100644
index 4d4f1e1bee..0000000000
--- a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png b/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png
new file mode 100644
index 0000000000..11f4871ad8
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_1.png b/indra/newview/skins/default/textures/icons/Progress_1.png
deleted file mode 100644
index 58b56003c4..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_1.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_10.png b/indra/newview/skins/default/textures/icons/Progress_10.png
deleted file mode 100644
index 07fe0be8a3..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_10.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_11.png b/indra/newview/skins/default/textures/icons/Progress_11.png
deleted file mode 100644
index 215d68cc46..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_11.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_12.png b/indra/newview/skins/default/textures/icons/Progress_12.png
deleted file mode 100644
index d755588621..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_12.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_2.png b/indra/newview/skins/default/textures/icons/Progress_2.png
deleted file mode 100644
index 6640ee227b..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_2.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_3.png b/indra/newview/skins/default/textures/icons/Progress_3.png
deleted file mode 100644
index 5decbe977e..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_3.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_4.png b/indra/newview/skins/default/textures/icons/Progress_4.png
deleted file mode 100644
index 56e81c17aa..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_4.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_5.png b/indra/newview/skins/default/textures/icons/Progress_5.png
deleted file mode 100644
index a89bf2ac62..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_5.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_6.png b/indra/newview/skins/default/textures/icons/Progress_6.png
deleted file mode 100644
index 233c479540..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_6.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_7.png b/indra/newview/skins/default/textures/icons/Progress_7.png
deleted file mode 100644
index 631d7a6819..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_7.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_8.png b/indra/newview/skins/default/textures/icons/Progress_8.png
deleted file mode 100644
index ac0e3f13f7..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_8.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Progress_9.png b/indra/newview/skins/default/textures/icons/Progress_9.png
deleted file mode 100644
index 17fb4a0335..0000000000
--- a/indra/newview/skins/default/textures/icons/Progress_9.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/SL_Logo.png b/indra/newview/skins/default/textures/icons/SL_Logo.png
index c9fbde987a..8342d7cfee 100644
--- a/indra/newview/skins/default/textures/icons/SL_Logo.png
+++ b/indra/newview/skins/default/textures/icons/SL_Logo.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/unknown_icon.png b/indra/newview/skins/default/textures/icons/unknown_icon.png
new file mode 100644
index 0000000000..8441d86596
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/unknown_icon.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/locked_image.j2c b/indra/newview/skins/default/textures/locked_image.j2c
deleted file mode 100644
index 9e8998d675..0000000000
--- a/indra/newview/skins/default/textures/locked_image.j2c
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/map_infohub.tga b/indra/newview/skins/default/textures/map_infohub.tga
deleted file mode 100644
index 545b8e532c..0000000000
--- a/indra/newview/skins/default/textures/map_infohub.tga
+++ /dev/null
Binary files differ
diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png
index 41cb88628a..0b3f252ccf 100644
--- a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png
+++ b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png
index a02675502a..5c4c150bed 100644
--- a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png
+++ b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png
index 1e7d7beafa..421f5e1705 100644
--- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png
+++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png
index a70d3abbbf..293aeef5e6 100644
--- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png
+++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index f200566c0e..41bcc62220 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -1,4 +1,4 @@
-<!--
+<!--
This file contains metadata about how to load, display, and scale textures for rendering in the UI.
Images do *NOT* have to appear in this file in order to use them as textures in the UI...simply refer
to them by filename (relative to textures directory).
@@ -46,13 +46,9 @@ with the same filename but different name
<texture name="AddItem_Press" file_name="icons/AddItem_Press.png" preload="false" />
<texture name="Arrow_Left_Off" file_name="navbar/Arrow_Left_Off.png" preload="true" />
- <texture name="Arrow_Left_Press" file_name="navbar/Arrow_Left_Press.png" preload="true" />
<texture name="Arrow_Right_Off" file_name="navbar/Arrow_Right_Off.png" preload="true" />
- <texture name="Arrow_Right_Press" file_name="navbar/Arrow_Right_Press.png" preload="true" />
<!--
- <texture name="Arrow_Left" file_name="widgets/Arrow_Left.png" preload="true" />
- <texture name="Arrow_Right" file_name="widgets/Arrow_Right.png" preload="true" />
-->
<texture name="Arrow_Small_Up" file_name="widgets/Arrow_Small_Up.png" preload="true" />
@@ -64,49 +60,28 @@ with the same filename but different name
<texture name="AudioMute_Off" file_name="icons/AudioMute_Off.png" preload="false" />
<texture name="AudioMute_Over" file_name="icons/AudioMute_Over.png" preload="false" />
- <texture name="AudioMute_Press" file_name="icons/AudioMute_Press.png" preload="false" />
<texture name="Audio_Off" file_name="icons/Audio_Off.png" preload="false" />
- <texture name="Audio_Over" file_name="icons/Audio_Over.png" preload="false" />
<texture name="Audio_Press" file_name="icons/Audio_Press.png" preload="false" />
<texture name="Avaline_Icon" file_name="icons/avaline_default_icon.jpg" preload="true" />
- <texture name="BackArrow_Disabled" file_name="icons/BackArrow_Disabled.png" preload="false" />
<texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" />
- <texture name="BackArrow_Press" file_name="icons/BackArrow_Press.png" preload="false" />
<texture name="Blank" file_name="Blank.png" preload="false" />
- <texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" />
- <texture name="BottomTray_Scroll_Right" file_name="navbar/Arrow_Right_Off.png" preload="false" />
- <texture name="BottomTray_Scroll_Left" file_name="navbar/Arrow_Left_Off.png" preload="false" />
- <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
- <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
+ <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
- <texture name="Cam_Avatar_Disabled" file_name="bottomtray/Cam_Avatar_Disabled.png" preload="false" />
- <texture name="Cam_Avatar_Over" file_name="bottomtray/Cam_Avatar_Over.png" preload="false" />
<texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="false" />
- <texture name="Cam_Avatar_Press" file_name="bottomtray/Cam_Avatar_Press.png" preload="false" />
- <texture name="Cam_FreeCam_Disabled" file_name="bottomtray/Cam_FreeCam_Disabled.png" preload="false" />
<texture name="Cam_FreeCam_Off" file_name="bottomtray/Cam_FreeCam_Off.png" preload="false" />
- <texture name="Cam_FreeCam_Over" file_name="bottomtray/Cam_FreeCam_Over.png" preload="false" />
- <texture name="Cam_FreeCam_Press" file_name="bottomtray/Cam_FreeCam_Press.png" preload="false" />
- <texture name="Cam_Orbit_Disabled" file_name="bottomtray/Cam_Orbit_Disabled.png" preload="false" />
<texture name="Cam_Orbit_Off" file_name="bottomtray/Cam_Orbit_Off.png" preload="false" />
- <texture name="Cam_Orbit_Over" file_name="bottomtray/Cam_Orbit_Over.png" preload="false" />
- <texture name="Cam_Orbit_Press" file_name="bottomtray/Cam_Orbit_Press.png" preload="false" />
- <texture name="Cam_Pan_Disabled" file_name="bottomtray/Cam_Pan_Disabled.png" preload="false" />
<texture name="Cam_Pan_Off" file_name="bottomtray/Cam_Pan_Off.png" preload="false" />
- <texture name="Cam_Pan_Over" file_name="bottomtray/CCam_Pan_Over.png" preload="false" />
- <texture name="Cam_Pan_Press" file_name="bottomtray/Cam_Pan_Press.png" preload="false" />
<texture name="Cam_Preset_Back_Off" file_name="bottomtray/Cam_Preset_Back_Off.png" preload="false" />
<texture name="Cam_Preset_Back_On" file_name="bottomtray/Cam_Preset_Back_On.png" preload="false" />
<texture name="Cam_Preset_Eye_Off" file_name="bottomtray/Cam_Preset_Eye_Off.png" preload="false" />
- <texture name="Cam_Preset_Eye_On" file_name="bottomtray/Cam_Preset_Eye_On.png" preload="false" />
<texture name="Cam_Preset_Front_Off" file_name="bottomtray/Cam_Preset_Front_Off.png" preload="false" />
<texture name="Cam_Preset_Front_On" file_name="bottomtray/Cam_Preset_Front_On.png" preload="false" />
<texture name="Cam_Preset_Side_Off" file_name="bottomtray/Cam_Preset_Side_Off.png" preload="false" />
@@ -116,8 +91,6 @@ with the same filename but different name
<texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" />
<texture name="Cam_Tracking_In" file_name="bottomtray/Cam_Tracking_In.png" preload="false" />
<texture name="Cam_Tracking_Out" file_name="bottomtray/Cam_Tracking_Out.png" preload="false" />
- <texture name="CameraView_Off" file_name="bottomtray/CameraView_Off.png" preload="false" />
- <texture name="CameraView_Over" file_name="bottomtray/CameraView_Over.png" preload="false" />
<texture name="Checkbox_Off_Disabled" file_name="widgets/Checkbox_Disabled.png" preload="true" />
<texture name="Checkbox_On_Disabled" file_name="widgets/Checkbox_On_Disabled.png" preload="true" />
@@ -127,8 +100,6 @@ with the same filename but different name
<texture name="Checkbox_Press" file_name="widgets/Checkbox_Press.png" preload="true" />
<texture name="ComboButton_Disabled" file_name="widgets/ComboButton_Disabled.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
- <texture name="ComboButton_Over" file_name="widgets/ComboButton_Over.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
- <texture name="ComboButton_Press" file_name="widgets/ComboButton_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_UpSelected" file_name="widgets/ComboButton_UpSelected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_Up_On_Selected" file_name="widgets/ComboButton_Up_On_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
@@ -136,25 +107,18 @@ with the same filename but different name
<texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="Container" file_name="containers/Container.png" preload="false" />
- <texture name="DisclosureArrow_Closed_Off" file_name="widgets/DisclosureArrow_Closed_Off.png" preload="true" />
- <texture name="DisclosureArrow_Closed_Press" file_name="widgets/DisclosureArrow_Closed_Press.png" preload="true" />
<texture name="DisclosureArrow_Opened_Off" file_name="widgets/DisclosureArrow_Opened_Off.png" preload="true" />
- <texture name="DisclosureArrow_Opened_Press" file_name="widgets/DisclosureArrow_Opened_Press.png" preload="true" />
<texture name="DownArrow" file_name="bottomtray/DownArrow.png" preload="false" />
<texture name="DropDown_Disabled" file_name="widgets/DropDown_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />
- <texture name="DropDown_Over" file_name="widgets/DropDown_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />
<texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />
- <texture name="DropDown_Selected" file_name="widgets/DropDown_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />
<texture name="DropDown_On" file_name="widgets/DropDown_On.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />
<texture name="DropDown_Off" file_name="widgets/DropDown_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />
<texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" />
<texture name="ExternalBrowser_Off" file_name="icons/ExternalBrowser_Off.png" preload="false" />
- <texture name="ExternalBrowser_Over" file_name="icons/ExternalBrowser_Over.png" preload="false" />
- <texture name="ExternalBrowser_Press" file_name="icons/ExternalBrowser_Press.png" preload="false" />
<texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" />
<texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
@@ -162,8 +126,6 @@ with the same filename but different name
<texture name="Favorite_Star_Over" file_name="navbar/Favorite_Star_Over.png" preload="false" />
<texture name="Favorite_Link_Over" file_name="navbar/Favorite_Link_Over.png" preload="false" />
- <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" />
- <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" />
<texture name="Flag" file_name="navbar/Flag.png" preload="false" />
@@ -174,22 +136,16 @@ with the same filename but different name
<texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" />
<texture name="icon_group.tga" file_name="icons/Generic_Group.png" preload="false" />
- <texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" />
- <texture name="Generic_Object_Medium" file_name="icons/Generic_Object_Medium.png" preload="false" />
<texture name="Generic_Object_Small" file_name="icons/Generic_Object_Small.png" preload="false" />
- <texture name="Generic_Object_Large" file_name="icons/Generic_Object_Large.png" preload="false" />
<texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />
<texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" />
<texture name="Health" file_name="icons/Health.png" preload="false" />
- <texture name="Help_Off" file_name="navbar/Help_Off.png" preload="false" />
<texture name="Help_Press" file_name="navbar/Help_Press.png" preload="false" />
- <texture name="History_Arrow" file_name="navbar/History_Arrow.png" preload="true" />
<texture name="Home_Off" file_name="navbar/Home_Off.png" preload="false" />
- <texture name="Home_Press" file_name="navbar/Home_Press.png" preload="false" />
<texture name="Icon_Close_Foreground" file_name="windows/Icon_Close_Foreground.png" preload="true" />
<texture name="Icon_Close_Press" file_name="windows/Icon_Close_Press.png" preload="true" />
@@ -206,7 +162,6 @@ with the same filename but different name
<texture name="Icon_Help_Foreground" file_name="windows/Icon_Help_Foreground.png" preload="true" />
<texture name="Icon_Help_Press" file_name="windows/Icon_Help_Press.png" preload="true" />
- <texture name="Icon_Info" file_name="windows/Icon_Info.png" preload="false" />
<texture name="Icon_Minimize_Foreground" file_name="windows/Icon_Minimize_Foreground.png" preload="true" />
<texture name="Icon_Minimize_Press" file_name="windows/Icon_Minimize_Press.png" preload="true" />
@@ -225,13 +180,11 @@ with the same filename but different name
<texture name="Inspector_Hover" file_name="windows/Inspector_Hover.png" preload="false" />
<texture name="Inspector_I" file_name="windows/Inspector_I.png" preload="false" />
- <texture name="Inv_Acessories" file_name="icons/Inv_Accessories.png" preload="false" />
<texture name="Inv_Alpha" file_name="icons/Inv_Alpha.png" preload="false" />
<texture name="Inv_Animation" file_name="icons/Inv_Animation.png" preload="false" />
<texture name="Inv_BodyShape" file_name="icons/Inv_BodyShape.png" preload="false" />
<texture name="Inv_CallingCard" file_name="icons/Inv_CallingCard.png" preload="false" />
<texture name="Inv_Clothing" file_name="icons/Inv_Clothing.png" preload="false" />
- <texture name="Inv_DangerousScript" file_name="icons/Inv_DangerousScript.png" preload="false" />
<texture name="Inv_Eye" file_name="icons/Inv_Eye.png" preload="false" />
<texture name="Inv_FolderClosed" file_name="icons/Inv_FolderClosed.png" preload="false" />
<texture name="Inv_FolderOpen" file_name="icons/Inv_FolderOpen.png" preload="false" />
@@ -239,7 +192,6 @@ with the same filename but different name
<texture name="Inv_Gloves" file_name="icons/Inv_Gloves.png" preload="false" />
<texture name="Inv_Hair" file_name="icons/Inv_Hair.png" preload="false" />
<texture name="Inv_LinkItem" file_name="icons/Inv_LinkItem.png" preload="false" />
- <texture name="Inv_LinkItem_Broken" file_name="icons/Inv_LinkItem_Broken.png" preload="false" />
<texture name="Inv_LinkFolder" file_name="icons/Inv_LinkFolder.png" preload="false" />
<texture name="Inv_Jacket" file_name="icons/Inv_Jacket.png" preload="false" />
<texture name="Inv_LookFolderOpen" file_name="icons/Inv_LookFolderOpen.png" preload="false" />
@@ -247,6 +199,7 @@ with the same filename but different name
<texture name="Inv_Landmark" file_name="icons/Inv_Landmark.png" preload="false" />
<texture name="Inv_Notecard" file_name="icons/Inv_Notecard.png" preload="false" />
<texture name="Inv_Object" file_name="icons/Inv_Object.png" preload="false" />
+ <texture name="Inv_Object_Multi" file_name="icons/Inv_Object_Multi.png" preload="false" />
<texture name="Inv_Pants" file_name="icons/Inv_Pants.png" preload="false" />
<texture name="Inv_Script" file_name="icons/Inv_Script.png" preload="false" />
<texture name="Inv_Shirt" file_name="icons/Inv_Shirt.png" preload="false" />
@@ -258,7 +211,6 @@ with the same filename but different name
<texture name="Inv_Sound" file_name="icons/Inv_Sound.png" preload="false" />
<texture name="Inv_Tattoo" file_name="icons/Inv_Tattoo.png" preload="false" />
<texture name="Inv_Texture" file_name="icons/Inv_Texture.png" preload="false" />
- <texture name="Inv_Trash" file_name="icons/Inv_Trash.png" preload="false" />
<texture name="Inv_Underpants" file_name="icons/Inv_Underpants.png" preload="false" />
<texture name="Inv_Undershirt" file_name="icons/Inv_Undershirt.png" preload="false" />
@@ -271,9 +223,7 @@ with the same filename but different name
<texture name="Lock" file_name="icons/Lock.png" preload="false" />
<texture name="Lock2" file_name="navbar/Lock.png" preload="false" />
- <texture name="Login_Pod" file_name="windows/Login_Pod.png" preload="true" />
- <texture name="Microphone_Mute" file_name="icons/Microphone_Mute.png" preload="false" />
<texture name="Microphone_On" file_name="icons/Microphone_On.png" preload="false" />
<texture name="MinusItem_Disabled" file_name="icons/MinusItem_Disabled.png" preload="false" />
@@ -282,18 +232,9 @@ with the same filename but different name
<texture name="menu_separator" file_name="navbar/FileMenu_Divider.png" scale.left="4" scale.top="166" scale.right="0" scale.bottom="0" />
- <texture name="Move_Fly_Disabled" file_name="bottomtray/Move_Fly_Disabled.png" preload="false" />
<texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" />
- <texture name="Move_Fly_Over" file_name="bottomtray/Move_Fly_Over.png" preload="false" />
- <texture name="Move_Fly_Press" file_name="bottomtray/Move_Fly_Press.png" preload="false" />
- <texture name="Move_Run_Disabled" file_name="bottomtray/Move_Run_Disabled.png" preload="false" />
<texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" />
- <texture name="Move_Run_Over" file_name="bottomtray/Move_Run_Over.png" preload="false" />
- <texture name="Move_Run_Press" file_name="bottomtray/Move_Run_Press.png" preload="false" />
- <texture name="Move_Walk_Disabled" file_name="bottomtray/Move_Walk_Disabled.png" preload="false" />
<texture name="Move_Walk_Off" file_name="bottomtray/Move_Walk_Off.png" preload="false" />
- <texture name="Move_Walk_Over" file_name="bottomtray/Move_Walk_Over.png" preload="false" />
- <texture name="Move_Walk_Press" file_name="bottomtray/Move_Walk_Press.png" preload="false" />
<texture name="Movement_Backward_Off" file_name="bottomtray/Movement_Backward_Off.png" preload="false" />
<texture name="Movement_Backward_On" file_name="bottomtray/Movement_Backward_On.png" preload="false" />
<texture name="Movement_Down_Off" file_name="bottomtray/Movement_Down_Off.png" preload="false" />
@@ -310,10 +251,6 @@ with the same filename but different name
<texture name="NavBar_BG_NoFav" file_name="navbar/NavBar_BG_NoFav.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="NavBar_BG" file_name="navbar/NavBar_BG.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
- <texture name="NearbyVoice_Lvl1" file_name="bottomtray/NearbyVoice_Lvl1.png" preload="false" />
- <texture name="NearbyVoice_Lvl2" file_name="bottomtray/NearbyVoice_Lvl2.png" preload="false" />
- <texture name="NearbyVoice_Lvl3" file_name="bottomtray/NearbyVoice_Lvl3.png" preload="false" />
- <texture name="NearbyVoice_On" file_name="bottomtray/NearbyVoice_On.png" preload="false" />
<texture name="Notices_Unread" file_name="bottomtray/Notices_Unread.png" preload="true" />
@@ -355,27 +292,15 @@ with the same filename but different name
<texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" />
<texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" />
- <texture name="Overhead_Arrow_L" file_name="world/Overhead_Arrow_L.png" preload="false" />
- <texture name="Overhead_Arrow_M" file_name="world/Overhead_Arrow_M.png" preload="false" />
- <texture name="Overhead_Arrow_S" file_name="world/Overhead_Arrow_S.png" preload="false" />
- <texture name="Overhead_L" file_name="world/Overhead_L.png" preload="false" />
- <texture name="Overhead_M" file_name="world/Overhead_M.png" preload="false" />
- <texture name="Overhead_S" file_name="world/Overhead_S.png" preload="false" />
- <texture name="Parcel_Evry_Color" file_name="icons/Parcel_Evry_Color.png" preload="false" />
<texture name="Parcel_Exp_Color" file_name="icons/Parcel_Exp_Color.png" preload="false" />
- <texture name="Parcel_M_Color" file_name="icons/Parcel_M_Color.png" preload="false" />
<texture name="Parcel_Build_Dark" file_name="icons/Parcel_Build_Dark.png" preload="false" />
<texture name="Parcel_BuildNo_Dark" file_name="icons/Parcel_BuildNo_Dark.png" preload="false" />
<texture name="Parcel_Damage_Dark" file_name="icons/Parcel_Damage_Dark.png" preload="false" />
<texture name="Parcel_DamageNo_Dark" file_name="icons/Parcel_DamageNo_Dark.png" preload="false" />
- <texture name="Parcel_Evry_Dark" file_name="icons/Parcel_Evry_Dark.png" preload="false" />
- <texture name="Parcel_Exp_Dark" file_name="icons/Parcel_Exp_Dark.png" preload="false" />
<texture name="Parcel_Fly_Dark" file_name="icons/Parcel_Fly_Dark.png" preload="false" />
<texture name="Parcel_FlyNo_Dark" file_name="icons/Parcel_FlyNo_Dark.png" preload="false" />
- <texture name="Parcel_ForSale_Dark" file_name="icons/Parcel_ForSale_Dark.png" preload="false" />
- <texture name="Parcel_ForSaleNo_Dark" file_name="icons/Parcel_ForSaleNo_Dark.png" preload="false" />
<texture name="Parcel_Health_Dark" file_name="icons/Parcel_Health_Dark.png" preload="false" />
<texture name="Parcel_M_Dark" file_name="icons/Parcel_M_Dark.png" preload="false" />
<texture name="Parcel_PG_Dark" file_name="icons/Parcel_PG_Dark.png" preload="false" />
@@ -387,22 +312,13 @@ with the same filename but different name
<texture name="Parcel_Voice_Dark" file_name="icons/Parcel_Voice_Dark.png" preload="false" />
<texture name="Parcel_VoiceNo_Dark" file_name="icons/Parcel_VoiceNo_Dark.png" preload="false" />
- <texture name="Parcel_Build_Light" file_name="icons/Parcel_Build_Light.png" preload="false" />
<texture name="Parcel_BuildNo_Light" file_name="icons/Parcel_BuildNo_Light.png" preload="false" />
- <texture name="Parcel_Damage_Light" file_name="icons/Parcel_Damage_Light.png" preload="false" />
- <texture name="Parcel_DamageNo_Light" file_name="icons/Parcel_DamageNo_Light.png" preload="false" />
- <texture name="Parcel_Evry_Light" file_name="icons/Parcel_Evry_Light.png" preload="false" />
- <texture name="Parcel_Exp_Light" file_name="icons/Parcel_Exp_Light.png" preload="false" />
- <texture name="Parcel_Fly_Light" file_name="icons/Parcel_Fly_Light.png" preload="false" />
<texture name="Parcel_FlyNo_Light" file_name="icons/Parcel_FlyNo_Light.png" preload="false" />
<texture name="Parcel_ForSale_Light" file_name="icons/Parcel_ForSale_Light.png" preload="false" />
- <texture name="Parcel_ForSaleNo_Light" file_name="icons/Parcel_ForSaleNo_Light.png" preload="false" />
<texture name="Parcel_M_Light" file_name="icons/Parcel_M_Light.png" preload="false" />
<texture name="Parcel_PG_Light" file_name="icons/Parcel_PG_Light.png" preload="false" />
- <texture name="Parcel_Push_Light" file_name="icons/Parcel_Push_Light.png" preload="false" />
<texture name="Parcel_PushNo_Light" file_name="icons/Parcel_PushNo_Light.png" preload="false" />
<texture name="Parcel_R_Light" file_name="icons/Parcel_R_Light.png" preload="false" />
- <texture name="Parcel_Scripts_Light" file_name="icons/Parcel_Scripts_Light.png" preload="false" />
<texture name="Parcel_ScriptsNo_Light" file_name="icons/Parcel_ScriptsNo_Dark.png" preload="false" />
<texture name="Parcel_Voice_Light" file_name="icons/Parcel_Voice_Light.png" preload="false" />
<texture name="Parcel_VoiceNo_Light" file_name="icons/Parcel_VoiceNo_Light.png" preload="false" />
@@ -414,18 +330,6 @@ with the same filename but different name
<texture name="Play_Over" file_name="icons/Play_Over.png" preload="false" />
<texture name="Play_Press" file_name="icons/Play_Press.png" preload="false" />
- <texture name="Progress_1" file_name="icons/Progress_1.png" preload="false" />
- <texture name="Progress_2" file_name="icons/Progress_2.png" preload="false" />
- <texture name="Progress_3" file_name="icons/Progress_3.png" preload="false" />
- <texture name="Progress_4" file_name="icons/Progress_4.png" preload="false" />
- <texture name="Progress_5" file_name="icons/Progress_5.png" preload="false" />
- <texture name="Progress_6" file_name="icons/Progress_6.png" preload="false" />
- <texture name="Progress_7" file_name="icons/Progress_7.png" preload="false" />
- <texture name="Progress_8" file_name="icons/Progress_8.png" preload="false" />
- <texture name="Progress_9" file_name="icons/Progress_9.png" preload="false" />
- <texture name="Progress_10" file_name="icons/Progress_10.png" preload="false" />
- <texture name="Progress_11" file_name="icons/Progress_11.png" preload="false" />
- <texture name="Progress_12" file_name="icons/Progress_12.png" preload="false" />
<texture name="ProgressBar" file_name="widgets/ProgressBar.png" preload="true" scale.left="4" scale.top="10" scale.right="48" scale.bottom="2" />
<texture name="ProgressTrack" file_name="widgets/ProgressTrack.png" preload="true" scale.left="4" scale.top="13" scale.right="148" scale.bottom="2" />
@@ -434,7 +338,6 @@ with the same filename but different name
<texture name="PushButton_Off" file_name="widgets/PushButton_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_On" file_name="widgets/PushButton_On.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_On_Selected" file_name="widgets/PushButton_On_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
- <texture name="PushButton_On_Disabled" file_name="widgets/PushButton_On_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Press" file_name="widgets/PushButton_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Selected" file_name="widgets/PushButton_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Selected_Press" file_name="widgets/PushButton_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
@@ -447,12 +350,8 @@ with the same filename but different name
<texture name="RadioButton_Disabled" file_name="widgets/RadioButton_Disabled.png" preload="true" />
<texture name="RadioButton_On_Disabled" file_name="widgets/RadioButton_On_Disabled.png" preload="true" />
- <texture name="Rec_Off" file_name="icons/Rec_Off.png" preload="false" />
- <texture name="Rec_On" file_name="icons/Rec_On.png" preload="false" />
- <texture name="Refresh_Disabled" file_name="icons/Refresh_Disabled.png" preload="false" />
<texture name="Refresh_Off" file_name="icons/Refresh_Off.png" preload="false" />
- <texture name="Refresh_Press" file_name="icons/Refresh_Press.png" preload="false" />
<texture name="Resize_Corner" file_name="windows/Resize_Corner.png" preload="true" />
@@ -469,11 +368,6 @@ with the same filename but different name
<texture name="ScrollTrack_Vert" file_name="widgets/ScrollTrack_Vert.png" preload="true" scale.left="2" scale.top="40" scale.bottom="13" scale.right="0" />
<texture name="ScrollTrack_Horiz" file_name="widgets/ScrollTrack_Horiz.png" preload="true" scale.left="4" scale.top="0" scale.bottom="0" scale.right="2" />
- <texture name="ScrubberThumb_Disabled" file_name="widgets/ScrubberThumb_Disabled.png" preload="false" />
- <texture name="ScrubberThumb_Focus" file_name="widgets/ScrubberThumb_Focus.png" preload="false" />
- <texture name="ScrubberThumb_Off" file_name="widgets/ScrubberThumb_Off.png" preload="false" />
- <texture name="ScrubberThumb_Over" file_name="widgets/ScrubberThumb_Over.png" preload="false" />
- <texture name="ScrubberThumb_Press" file_name="widgets/ScrubberThumb_Press.png" preload="false" />
<texture name="Search" file_name="navbar/Search.png" preload="false" />
@@ -486,8 +380,6 @@ with the same filename but different name
<texture name="SegmentedBtn_Left_Selected_Press" file_name="widgets/SegmentedBtn_Left_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Left_Selected_Disabled" file_name="widgets/SegmentedBtn_Left_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
- <texture name="SegmentedBtn_Middle_Off" file_name="widgets/SegmentedBtn_Middle_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
- <texture name="SegmentedBtn_Middle_Press" file_name="widgets/SegmentedBtn_Middle_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Middle_Disabled" file_name="widgets/SegmentedBtn_Middle_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Middle_Selected" file_name="widgets/SegmentedBtn_Middle_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Middle_Selected_Press" file_name="widgets/SegmentedBtn_Middle_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
@@ -502,11 +394,7 @@ with the same filename but different name
<texture name="SegmentedBtn_Right_Selected_Disabled" file_name="widgets/SegmentedBtn_Right_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SkipBackward_Off" file_name="icons/SkipBackward_Off.png" preload="false" />
- <texture name="SkipBackward_Over" file_name="icons/SkipBackward_Over.png" preload="false" />
- <texture name="SkipBackward_Press" file_name="icons/SkipBackward_Press.png" preload="false" />
<texture name="SkipForward_Off" file_name="icons/SkipForward_Off.png" preload="false" />
- <texture name="SkipForward_Over" file_name="icons/SkipForward_Over.png" preload="false" />
- <texture name="SkipForward_Press" file_name="icons/SkipForward_Press.png" preload="false" />
<texture name="SliderTrack_Horiz" file_name="widgets/SliderTrack_Horiz.png" scale.left="4" scale.top="4" scale.right="100" scale.bottom="2" />
<texture name="SliderTrack_Vert" file_name="widgets/SliderTrack_Vert.png" scale.left="2" scale.top="100" scale.right="4" scale.bottom="4" />
@@ -516,65 +404,38 @@ with the same filename but different name
<texture name="SL_Logo" file_name="icons/SL_Logo.png" preload="true" />
<texture name="OBJECT_Icon" file_name="icons/object_icon.png" preload="true" />
+ <texture name="Unknown_Icon" file_name="icons/unknown_icon.png" preload="true" />
<texture name="Snapshot_Off" file_name="bottomtray/Snapshot_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
- <texture name="Snapshot_Over" file_name="bottomtray/Snapshot_Over.png" preload="false" />
- <texture name="Snapshot_Press" file_name="bottomtray/Snapshot_Press.png" preload="false" />
<texture name="startup_logo" file_name="windows/startup_logo.png" preload="true" />
- <texture name="Stepper_Down_Disabled" file_name="widgets/Stepper_Down_Disabled.png" preload="false" />
<texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" />
<texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="false" />
- <texture name="Stepper_Up_Disabled" file_name="widgets/Stepper_Up_Disabled.png" preload="false" />
<texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="false" />
<texture name="Stepper_Up_Press" file_name="widgets/Stepper_Up_Press.png" preload="false" />
<texture name="Stop_Off" file_name="icons/Stop_Off.png" preload="false" />
- <texture name="Stop_Over" file_name="icons/Stop_Over.png" preload="false" />
- <texture name="Stop_Press" file_name="icons/Stop_Press.png" preload="false" />
<texture name="StopReload_Off" file_name="icons/StopReload_Off.png" preload="false" />
<texture name="StopReload_Over" file_name="icons/StopReload_Over.png" preload="false" />
- <texture name="StopReload_Press" file_name="icons/StopReload_Press.png" preload="false" />
- <texture name="TabIcon_Appearance_Large" file_name="taskpanel/TabIcon_Appearance_Large.png" preload="false" />
<texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" />
- <texture name="TabIcon_Appearance_Over" file_name="taskpanel/TabIcon_Appearance_Over.png" preload="false" />
<texture name="TabIcon_Appearance_Selected" file_name="taskpanel/TabIcon_Appearance_Selected.png" preload="false" />
<texture name="TabIcon_Close_Off" file_name="taskpanel/TabIcon_Close_Off.png" preload="false" />
- <texture name="TabIcon_Close_Over" file_name="taskpanel/TabIcon_Close_Over.png" preload="false" />
- <texture name="TabIcon_Inventory_Large" file_name="taskpanel/TabIcon_Inventory_Large.png" preload="false" />
- <texture name="TabIcon_Inventory_Off" file_name="taskpanel/TabIcon_Inventory_Off.png" preload="false" />
- <texture name="TabIcon_Inventory_Over" file_name="taskpanel/TabIcon_Inventory_Over.png" preload="false" />
- <texture name="TabIcon_Inventory_Selected" file_name="taskpanel/TabIcon_Inventory_Selected.png" preload="false" />
- <texture name="TabIcon_Home_Large" file_name="taskpanel/TabIcon_Home_Large.png" preload="false" />
<texture name="TabIcon_Home_Off" file_name="taskpanel/TabIcon_Home_Off.png" preload="false" />
- <texture name="TabIcon_Home_Over" file_name="taskpanel/TabIcon_Home_Over.png" preload="false" />
<texture name="TabIcon_Home_Selected" file_name="taskpanel/TabIcon_Home_Selected.png" preload="false" />
- <texture name="TabIcon_Me_Large" file_name="taskpanel/TabIcon_Me_Large.png" preload="false" />
<texture name="TabIcon_Me_Off" file_name="taskpanel/TabIcon_Me_Off.png" preload="false" />
- <texture name="TabIcon_Me_Over" file_name="taskpanel/TabIcon_Me_Over.png" preload="false" />
<texture name="TabIcon_Me_Selected" file_name="taskpanel/TabIcon_Me_Selected.png" preload="false" />
<texture name="TabIcon_Open_Off" file_name="taskpanel/TabIcon_Open_Off.png" preload="false" />
- <texture name="TabIcon_Open_Over" file_name="taskpanel/TabIcon_Open_Over.png" preload="false" />
- <texture name="TabIcon_People_Large" file_name="taskpanel/TabIcon_People_Large.png" preload="false" />
<texture name="TabIcon_People_Off" file_name="taskpanel/TabIcon_People_Off.png" preload="false" />
- <texture name="TabIcon_People_Over" file_name="taskpanel/TabIcon_People_Over.png" preload="false" />
<texture name="TabIcon_People_Selected" file_name="taskpanel/TabIcon_People_Selected.png" preload="false" />
<texture name="TabIcon_Places_Large" file_name="taskpanel/TabIcon_Places_Large.png" preload="false" />
<texture name="TabIcon_Places_Off" file_name="taskpanel/TabIcon_Places_Off.png" preload="false" />
- <texture name="TabIcon_Places_Over" file_name="taskpanel/TabIcon_Places_Over.png" preload="false" />
<texture name="TabIcon_Places_Selected" file_name="taskpanel/TabIcon_Places_Selected.png" preload="false" />
- <texture name="TabIcon_Things_Large" file_name="taskpanel/TabIcon_Things_Large.png" preload="false" />
<texture name="TabIcon_Things_Off" file_name="taskpanel/TabIcon_Things_Off.png" preload="false" />
- <texture name="TabIcon_Things_Over" file_name="taskpanel/TabIcon_Things_Over.png" preload="false" />
<texture name="TabIcon_Things_Selected" file_name="taskpanel/TabIcon_Things_Selected.png" preload="false" />
- <texture name="TabTop_Divider" file_name="containers/TabTop_Divider.png" preload="false" />
- <texture name="TabTop_Left_Press" file_name="containers/TabTop_Left_Press.png" preload="false" />
- <texture name="TabTop_Middle_Press" file_name="containers/TabTop_Middle_Press.png" preload="false" />
<texture name="TabTop_Right_Off" file_name="containers/TabTop_Right_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" />
- <texture name="TabTop_Right_Press" file_name="containers/TabTop_Right_Press.png" preload="false" />
<texture name="TabTop_Right_Selected" file_name="containers/TabTop_Right_Selected.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" />
<texture name="TabTop_Middle_Off" file_name="containers/TabTop_Middle_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="120" scale.bottom="9" />
<texture name="TabTop_Middle_Selected" file_name="containers/TabTop_Middle_Selected.png" preload="false" scale.left="8" scale.top="8" scale.right="96" scale.bottom="9" />
@@ -583,8 +444,6 @@ with the same filename but different name
<texture name="TaskPanel_Tab_Off" file_name="taskpanel/TaskPanel_Tab_Off.png" preload="false" scale.left="4" scale.top="29" scale.right="36" scale.bottom="4" />
<texture name="TaskPanel_Tab_Selected" file_name="taskpanel/TaskPanel_Tab_Selected.png" preload="false" scale.left="5" scale.top="30" scale.right="36" scale.bottom="5" />
- <texture name="TaskPanel_BG" file_name="taskpanel/TaskPanel_BG.png" preload="false" scale.left="4" scale.top="146" scale.right="146" scale.bottom="4" />
- <texture name="TaskPanel_Tab_Unselected" file_name="taskpanel/TaskPanel_Tab_Over.png" preload="false" scale.left="5" scale.top="30" scale.right="36" scale.bottom="5" />
<texture name="TextField_Search_Disabled" file_name="widgets/TextField_Search_Disabled.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
<texture name="TextField_Off" file_name="widgets/TextField_Off.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
@@ -593,7 +452,6 @@ with the same filename but different name
<texture name="TextField_Disabled" file_name="widgets/TextField_Disabled.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
<texture name="TextField_Active" file_name="widgets/TextField_Active.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
- <texture name="TimeBasedMediaBackground" file_name="windows/TimeBasedMediaBackground.png" preload="false" />
<texture name="Toast_CloseBtn" file_name="windows/Toast_CloseBtn.png" preload="true" />
<texture name="Toast_Background" file_name="windows/Toast_Background.png" preload="true"
@@ -602,25 +460,19 @@ with the same filename but different name
scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" />
<texture name="Tool_Create" file_name="build/Tool_Create.png" preload="false" />
- <texture name="Tool_Create_Selected" file_name="build/Tool_Create_Selected.png" preload="false" />
<texture name="Tool_Dozer" file_name="build/Tool_Dozer.png" preload="false" />
- <texture name="Tool_Dozer_Selected" file_name="build/Tool_Dozer_Selected.png" preload="false" />
<texture name="Tool_Face" file_name="build/Tool_Face.png" preload="false" />
- <texture name="Tool_Face_Selected" file_name="build/Tool_Face_Selected.png" preload="false" />
<texture name="Tool_Grab" file_name="build/Tool_Grab.png" preload="false" />
- <texture name="Tool_Grab_Selected" file_name="build/Tool_Grab_Selected.png" preload="false" />
<texture name="Tool_Zoom" file_name="build/Tool_Zoom.png" preload="false" />
- <texture name="Tool_Zoom_Selected" file_name="build/Tool_Zoom_Selected.png" preload="false" />
- <texture name="Toolbar_Divider" file_name="containers/Toolbar_Divider.png" preload="false" />
<texture name="Toolbar_Left_Off" file_name="containers/Toolbar_Left_Off.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" />
- <texture name="Toolbar_Left_Press" file_name="containers/Toolbar_Left_Press.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" />
+ <texture name="Toolbar_Left_Over" file_name="containers/Toolbar_Left_Over.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" />
<texture name="Toolbar_Left_Selected" file_name="containers/Toolbar_Left_Selected.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" />
<texture name="Toolbar_Middle_Off" file_name="containers/Toolbar_Middle_Off.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" />
- <texture name="Toolbar_Middle_Press" file_name="containers/Toolbar_Middle_Press.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" />
+ <texture name="Toolbar_Middle_Over" file_name="containers/Toolbar_Middle_Over.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" />
<texture name="Toolbar_Middle_Selected" file_name="containers/Toolbar_Middle_Selected.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" />
<texture name="Toolbar_Right_Off" file_name="containers/Toolbar_Right_Off.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" />
- <texture name="Toolbar_Right_Press" file_name="containers/Toolbar_Right_Press.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" />
+ <texture name="Toolbar_Right_Over" file_name="containers/Toolbar_Right_Over.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" />
<texture name="Toolbar_Right_Selected" file_name="containers/Toolbar_Right_Selected.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" />
<texture name="Tooltip" file_name="widgets/Tooltip.png" preload="true" scale.left="2" scale.top="16" scale.right="100" scale.bottom="3" />
@@ -630,7 +482,6 @@ with the same filename but different name
<texture name="TrashItem_Press" file_name="icons/TrashItem_Press.png" preload="false" />
<texture name="Unread_Chiclet" file_name="bottomtray/Unread_Chiclet.png" preload="false" />
- <texture name="Unread_Msg" file_name="bottomtray/Unread_Msg.png" preload="false" />
<texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />
<texture name="Volume_Background" file_name="windows/Volume_Background.png" preload="false"
@@ -645,10 +496,7 @@ with the same filename but different name
<texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
- <texture name="WebBasedMediaBackground" file_name="windows/WebBasedMediaBackground.png" preload="false" />
- <texture name="Widget_DownArrow" file_name="icons/Widget_DownArrow.png" preload="true" />
- <texture name="Widget_UpArrow" file_name="icons/Widget_UpArrow.png" preload="true" />
<texture name="Window_Background" file_name="windows/Window_Background.png" preload="true"
scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" />
@@ -662,17 +510,7 @@ with the same filename but different name
<texture name="YouAreHere_Badge" file_name="icons/YouAreHere_Badge.png" preload="false" />
<texture name="Zoom_Off" file_name="icons/Zoom_Off.png" preload="false" />
- <texture name="Zoom_Over" file_name="icons/Zoom_Over.png" preload="false" />
- <texture name="Zoom_Press" file_name="icons/Zoom_Press.png" preload="false" />
<texture name="UnZoom_Off" file_name="icons/UnZoom_Off.png" preload="false" />
- <texture name="UnZoom_Over" file_name="icons/UnZoom_Over.png" preload="false" />
- <texture name="UnZoom_Press" file_name="icons/UnZoom_Press.png" preload="false" />
- <texture name="PowerOn_Off" file_name="icons/PowerOn_Off.png" preload="false" />
- <texture name="PowerOn_Over" file_name="icons/PowerOn_Over.png" preload="false" />
- <texture name="PowerOn_Press" file_name="icons/PowerOn_Press.png" preload="false" />
- <texture name="PowerOff_Off" file_name="icons/PowerOff_Off.png" preload="false" />
- <texture name="PowerOff_Over" file_name="icons/PowerOff_Over.png" preload="false" />
- <texture name="PowerOff_Press" file_name="icons/PowerOff_Press.png" preload="false" />
<texture name="pixiesmall.j2c" use_mips="true" />
<texture name="script_error.j2c" use_mips="true" />
@@ -682,7 +520,6 @@ with the same filename but different name
<texture name="transparent.j2c" use_mips="true" />
<!--WARNING OLD ART BELOW *do not use*-->
- <texture name="icn_chatbar.tga" />
<texture name="icn_media_web.tga" preload="true" />
<texture name="icn_media_movie.tga" preload="true" />
<texture name="icn_speaker-muted_dark.tga" />
@@ -712,8 +549,6 @@ with the same filename but different name
<texture name="icn_label_media.tga" />
<texture name="icn_rounded-text-field.tga" scale.left="14" scale.bottom="16" scale.top="16" scale.right="114" />
- <texture name="toggle_button_off" file_name="toggle_button_off.png" preload="true" />
- <texture name="toggle_button_selected" file_name="toggle_button_selected.png" preload="true" />
<texture name="color_swatch_alpha.tga" preload="true" />
<texture name="button_anim_pause.tga" />
@@ -723,15 +558,11 @@ with the same filename but different name
<texture name="crosshairs.tga" />
<texture name="direction_arrow.tga" file_name="world/BeaconArrow.png" />
- <texture name="icon_auction.tga" />
<texture name="icon_avatar_offline.tga" />
<texture name="icon_avatar_online.tga" />
<texture name="icon_day_cycle.tga" />
<texture name="icon_diurnal.tga" />
- <texture name="icon_event.tga" />
- <texture name="icon_event_mature.tga" />
<texture name="icon_for_sale.tga" />
- <texture name="icon_place_for_sale.tga" />
<texture name="icon_top_pick.tga" />
<texture name="lag_status_critical.tga" />
@@ -742,7 +573,6 @@ with the same filename but different name
<texture name="map_avatar_16.tga" />
<texture name="map_avatar_8.tga" />
- <texture name="map_avatar_you_8.tga" />
<texture name="map_event.tga" />
<texture name="map_event_mature.tga" />
<texture name="map_home.tga" />
@@ -751,15 +581,10 @@ with the same filename but different name
<texture name="map_track_16.tga" />
<texture name="notify_caution_icon.tga" />
- <texture name="notify_next.png" preload="true" />
- <texture name="notify_box_icon.tga" />
<texture name="icn_active-speakers-dot-lvl0.tga" />
<texture name="icn_active-speakers-dot-lvl1.tga" />
<texture name="icn_active-speakers-dot-lvl2.tga" />
- <texture name="icn_active-speakers-typing1.tga" />
- <texture name="icn_active-speakers-typing2.tga" />
- <texture name="icn_active-speakers-typing3.tga" />
<texture name="icn_voice_ptt-off.tga" />
<texture name="icn_voice_ptt-on.tga" />
@@ -775,5 +600,4 @@ with the same filename but different name
<texture name="default_profile_picture.j2c" />
<texture name="locked_image.j2c" />
- <texture name="media_floater_border_16.png" scale_top="12" scale_left="4" scale_bottom="4" scale_right="12" />
</textures>
diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Background.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Background.png
index db74b93afd..93d62a8d4f 100644
--- a/indra/newview/skins/default/textures/windows/Icon_Gear_Background.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Gear_Background.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png
index 1032e45f7e..b2b2a77a88 100644
--- a/indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Over.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Over.png
index 01dbde102b..67bd399358 100644
--- a/indra/newview/skins/default/textures/windows/Icon_Gear_Over.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Gear_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Press.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Press.png
index 6614bdd165..6fc3744d6b 100644
--- a/indra/newview/skins/default/textures/windows/Icon_Gear_Press.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Gear_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml
index eb63b5c975..91db3c6b1c 100644
--- a/indra/newview/skins/default/xui/da/floater_about.xml
+++ b/indra/newview/skins/default/xui/da/floater_about.xml
@@ -8,7 +8,7 @@
Bygget med [COMPILER] version [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Du er ved [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] i [REGION] lokaliseret på [HOSTNAME] ([HOSTIP])
+ Du er ved [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] i regionen [REGION] lokaliseret ved &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
[SERVER_VERSION]
[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]]
</floater.string>
@@ -43,13 +43,9 @@ Vivox Version: [VIVOX_VERSION]
</panel>
<panel label="Tak til" name="credits_panel">
<text_editor name="credits_editor">
- Second Life er gjort muligt for dig af Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl and many others.
+ Second Life er gjort muligt for dig af Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les og mange flere.
-Tak til følgende beboerne for at bidrage til at sikre, at dette er den bedste version til dato: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-
-I get by with a little help from my friends. --Richard Starkey
+Tak til følgende beboere for at sikre at denne klient er den bedste version indtil nu: (under udarbejdelse)
</text_editor>
</panel>
<panel label="Licenser" name="licenses_panel">
diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml
index b4af427538..fd1fe4aa19 100644
--- a/indra/newview/skins/default/xui/da/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/da/floater_about_land.xml
@@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterland" title="OM LAND">
+ <floater.string name="maturity_icon_general">
+ &quot;Parcel_PG_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_moderate">
+ &quot;Parcel_M_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_adult">
+ &quot;Parcel_R_Dark&quot;
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] minutter
</floater.string>
@@ -15,7 +24,7 @@
<tab_container name="landtab">
<panel label="GENERELT" name="land_general_panel">
<panel.string name="new users only">
- Kun nye brugere
+ Kun nye beboere
</panel.string>
<panel.string name="anyone">
Alle
@@ -81,9 +90,12 @@ Gå til &apos;Verden&apos; &gt; &apos;Om land&apos; eller vælg en anden parcel
<text name="Group:">
Gruppe:
</text>
- <button label="Vælg..." label_selected="Vælg..." name="Set..."/>
+ <text name="GroupText">
+ Leyla Linden
+ </text>
+ <button label="Vælg" name="Set..."/>
<check_box label="Tillad dedikering til gruppe" name="check deed" tool_tip="En gruppe administrator kan dedikere denne jord til gruppen, så det vil blive støttet af gruppen&apos;s jord tildeling."/>
- <button label="Dedikér..." label_selected="Dedikér..." name="Deed..." tool_tip="Du kan kun dedikere jord, hvis du er en administrator i den valgte gruppe."/>
+ <button label="Dedikér" name="Deed..." tool_tip="Du kan kun dedikere jord, hvis du er en administrator i den valgte gruppe."/>
<check_box label="Ejer bidrager ved dedikering" name="check contrib" tool_tip="Når land dedikeres til gruppe, kan den tidligere bidrage med nok land til at dække krav."/>
<text name="For Sale:">
Til salg:
@@ -94,7 +106,7 @@ Gå til &apos;Verden&apos; &gt; &apos;Om land&apos; eller vælg en anden parcel
<text name="For Sale: Price L$[PRICE].">
Pris: L$[PRICE] (L$[PRICE_PER_SQM]/m²).
</text>
- <button label="Sælg land..." label_selected="Sælg land..." name="Sell Land..."/>
+ <button label="Sælg land" name="Sell Land..."/>
<text name="For sale to">
Til salg til: [BUYER]
</text>
@@ -123,12 +135,13 @@ Gå til &apos;Verden&apos; &gt; &apos;Om land&apos; eller vælg en anden parcel
<text name="DwellText">
0
</text>
- <button label="Køb land..." label_selected="Køb land..." name="Buy Land..."/>
- <button label="Køb til gruppe..." label_selected="Køb til gruppe..." name="Buy For Group..."/>
- <button label="Køb adgang..." label_selected="Køb adgang..." name="Buy Pass..." tool_tip="Giver adgang til midlertidig adgang til dette område."/>
- <button label="Efterlad land..." label_selected="Efterlad land..." name="Abandon Land..."/>
- <button label="Kræv tilbage..." label_selected="Kræv tilbage..." name="Reclaim Land..."/>
- <button label="Linden salg..." label_selected="Linden salg..." name="Linden Sale..." tool_tip="Land skal være ejet, indholdsrating sat og ikke allerede på auktion."/>
+ <button label="Køb land" name="Buy Land..."/>
+ <button label="Script Info" name="Scripts..."/>
+ <button label="Køb til gruppe" name="Buy For Group..."/>
+ <button label="Køb adgang" name="Buy Pass..." tool_tip="Giver adgang til midlertidig adgang til dette område."/>
+ <button label="Efterlad land" name="Abandon Land..."/>
+ <button label="Kræv tilbage" name="Reclaim Land..."/>
+ <button label="Linden salg" name="Linden Sale..." tool_tip="Land skal være ejet, indholdsrating sat og ikke allerede på auktion."/>
</panel>
<panel label="REGLER" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -227,7 +240,7 @@ Gå til &apos;Verden&apos; &gt; &apos;Om land&apos; eller vælg en anden parcel
[COUNT]
</text>
<button label="Vis" label_selected="Vis" name="ShowOwner"/>
- <button label="Returnér..." label_selected="Returnér..." name="ReturnOwner..." tool_tip="Returnér objekter til deres ejere."/>
+ <button label="Returnér" name="ReturnOwner..." tool_tip="Returnér objekter til deres ejere."/>
<text name="Set to group:">
Sat til gruppe:
</text>
@@ -235,7 +248,7 @@ Gå til &apos;Verden&apos; &gt; &apos;Om land&apos; eller vælg en anden parcel
[COUNT]
</text>
<button label="Vis" label_selected="Vis" name="ShowGroup"/>
- <button label="Returnér..." label_selected="Returnér..." name="ReturnGroup..." tool_tip="Returnér objekter til deres ejere."/>
+ <button label="Returnér" name="ReturnGroup..." tool_tip="Returnér objekter til deres ejere."/>
<text name="Owned by others:">
Ejet af andre:
</text>
@@ -243,7 +256,7 @@ Gå til &apos;Verden&apos; &gt; &apos;Om land&apos; eller vælg en anden parcel
[COUNT]
</text>
<button label="Vis" label_selected="Vis" name="ShowOther"/>
- <button label="Returnér..." label_selected="Returnér..." name="ReturnOther..." tool_tip="Returnér objekter til deres ejere."/>
+ <button label="Returnér" name="ReturnOther..." tool_tip="Returnér objekter til deres ejere."/>
<text name="Selected / sat upon:">
Valgt/siddet på:
</text>
@@ -257,7 +270,7 @@ Gå til &apos;Verden&apos; &gt; &apos;Om land&apos; eller vælg en anden parcel
Objekt ejere:
</text>
<button label="Gentegn liste" label_selected="Gentegn liste" name="Refresh List" tool_tip="Refresh Object List"/>
- <button label="Returnér objekter..." label_selected="Returnér objekter..." name="Return objects..."/>
+ <button label="Returnér objekter" name="Return objects..."/>
<name_list name="owner list">
<name_list.columns label="Type" name="type"/>
<name_list.columns label="Navn" name="name"/>
@@ -377,12 +390,9 @@ Kun større parceller kan vises i søgning.
</text>
<combo_box name="media type" tool_tip="Specificer om URL-adressen er til en film, hjemmeside eller et andet medie."/>
<text left="4" name="at URL:">
- Medie URL:
- </text>
- <button label="Vælg..." label_selected="Vælg..." name="set_media_url"/>
- <text name="CurrentURL:">
- Nuværende side:
+ Hjemmeside:
</text>
+ <button label="Vælg" name="set_media_url"/>
<check_box label="Skjul medie URL" name="hide_media_url" tool_tip="Klik her for at skjule medie adressen så det kun er dig og evt. parcel gruppens ejer/administratorer der kan se den."/>
<text left="4" name="Description:">
Beskrivelse:
@@ -393,8 +403,8 @@ Kun større parceller kan vises i søgning.
</text>
<texture_picker label="" name="media texture" tool_tip="Klik for at vælge billede"/>
<text name="replace_texture_help">
- (Objekter der har denne tekstur vil vise filmen eller
-web-siden, efter du klikker på play knappen.)
+ Objekter der har denne tekstur vil vise filmen eller web-siden, efter du klikker på play knappen. Vælg
+ Objects using this texture will show the movie or web page after you click the play arrow. Select the thumbnail for at vælge anden tekstur.
</text>
<check_box label="Auto skalér" name="media_auto_scale" tool_tip="Vælg denne mulighed for at skalere indholdet for dette parcel automatisk. Det kan være lidt langsommere og have lavere kvalitet, men ingen anden tekstur skalering eller tilpasning vil være nødvendigt."/>
<text name="media_size" tool_tip="Størrelse for rendering af Web medie, benyt 0 for standard." width="105">
@@ -411,13 +421,18 @@ web-siden, efter du klikker på play knappen.)
<check_box label="Gentag afspil" name="media_loop" tool_tip="Gentager automatisk medie, når det er færdigt med at spille starter det automatisk forfra."/>
</panel>
<panel label="LYD" name="land_audio_panel">
+ <check_box label="Skjul URL" name="hide_music_url" tool_tip="Ved at vælge her, vil musik URL skjules for alle ikke autoriserede brugere der læser denne parcels information."/>
<check_box label="Tillad stemmer" name="parcel_enable_voice_channel"/>
<check_box label="Tillad stemmer (håndteret af estate)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="Begræns stemme chat til denne parcel" name="parcel_enable_voice_channel_local"/>
</panel>
<panel label="ADGANG" name="land_access_panel">
<panel.string name="access_estate_defined">
(Defineret via estate)
</panel.string>
+ <panel.string name="allow_public_access">
+ Tillad adgang for alle ([MATURITY])
+ </panel.string>
<panel.string name="estate_override">
En eller flere af disse valg er indstillet på estate niveau
</panel.string>
@@ -428,8 +443,8 @@ web-siden, efter du klikker på play knappen.)
<text name="Only Allow">
Blokér adgang for::
</text>
- <check_box label="Beboere der ikke har givet betalings oplysninger til Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Blokér beboere der ikke har afgivet identifikationsoplysninger."/>
- <check_box label="Alders verifikation [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Blokér beboere der ikke har verificeret deres alder. Se support.secondlife.com for mere information."/>
+ <check_box label="Beboere der ikke har givet betalings oplysninger til Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Blokér for uidentificerede beboere."/>
+ <check_box label="Alders verifikation [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Blokér for beboere som ikke er alders-verificerede. Se [SUPPORT_SITE] for mere information."/>
<check_box label="Tillad adgang til gruppen: [GROUP]" name="GroupCheck" tool_tip="Vælg gruppe under fanen &apos;generelt&apos;."/>
<check_box label="Sælg adgang til:" name="PassCheck" tool_tip="Tillader midlertidig adgang til denne parcel"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/da/floater_animation_preview.xml b/indra/newview/skins/default/xui/da/floater_animation_preview.xml
index 47e02f0704..fdbfd737ba 100644
--- a/indra/newview/skins/default/xui/da/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/da/floater_animation_preview.xml
@@ -106,6 +106,9 @@ Maksimal animations længde er [MAX_LENGTH] sekunder.
<floater.string name="E_ST_NO_XLT_EMOTE">
kan ikke læse &quot;emote&quot; navn.
</floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ Incorrect root joint name, use &quot;hip&quot;.
+ </floater.string>
<text name="name_label">
Navn:
</text>
diff --git a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
index 1111c5e18b..e405a1beb8 100644
--- a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
@@ -7,26 +7,37 @@
Blandede teksturer
</text>
<button label="Drop" label_selected="Dump" name="Dump"/>
- <texture_picker label="HÃ¥r" name="hair_grain"/>
- <texture_picker label="Alpha - hår" name="hair_alpha"/>
- <texture_picker label="Makeup" name="head_bodypaint"/>
- <texture_picker label="Alpha - hoved" name="head_alpha"/>
- <texture_picker label="Tatovering hovede" name="head_tattoo"/>
- <texture_picker label="Øje" name="eyes_iris"/>
- <texture_picker label="Alpha - øjne" name="eyes_alpha"/>
- <texture_picker label="Bodypaint - overkrop" name="upper_bodypaint"/>
- <texture_picker label="Undertrøje" name="upper_undershirt"/>
- <texture_picker label="Handsker" name="upper_gloves"/>
- <texture_picker label="Trøje" name="upper_shirt"/>
- <texture_picker label="Øvre jakke" name="upper_jacket"/>
- <texture_picker label="Alpha - øvre" name="upper_alpha"/>
- <texture_picker label="Øvre tatovering" name="upper_tattoo"/>
- <texture_picker label="Bodypaint - underkrop" name="lower_bodypaint"/>
- <texture_picker label="Undertøj" name="lower_underpants"/>
- <texture_picker label="Strømper" name="lower_socks"/>
- <texture_picker label="Sko" name="lower_shoes"/>
- <texture_picker label="Bukser" name="lower_pants"/>
- <texture_picker label="Jakke" name="lower_jacket"/>
- <texture_picker label="Alpha - nedre" name="lower_alpha"/>
- <texture_picker label="Nedre tatovering" name="lower_tattoo"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <texture_picker label="HÃ¥r" name="hair-baked"/>
+ <texture_picker label="HÃ¥r" name="hair_grain"/>
+ <texture_picker label="Alpha - hår" name="hair_alpha"/>
+ <texture_picker label="Hoved" name="head-baked"/>
+ <texture_picker label="Makeup" name="head_bodypaint"/>
+ <texture_picker label="Alpha - hoved" name="head_alpha"/>
+ <texture_picker label="Tatovering - hoved" name="head_tattoo"/>
+ <texture_picker label="Eyes" name="eyes-baked"/>
+ <texture_picker label="Øje" name="eyes_iris"/>
+ <texture_picker label="Alpha - øjne" name="eyes_alpha"/>
+ <texture_picker label="Overkrop" name="upper-baked"/>
+ <texture_picker label="Bodypaint - overkrop" name="upper_bodypaint"/>
+ <texture_picker label="Undertrøje" name="upper_undershirt"/>
+ <texture_picker label="Handsker" name="upper_gloves"/>
+ <texture_picker label="Trøje" name="upper_shirt"/>
+ <texture_picker label="Jakke - foroven" name="upper_jacket"/>
+ <texture_picker label="Alpha - øvre" name="upper_alpha"/>
+ <texture_picker label="Tatovering - øvre" name="upper_tattoo"/>
+ <texture_picker label="Ben" name="lower-baked"/>
+ <texture_picker label="Bodypaint - ben" name="lower_bodypaint"/>
+ <texture_picker label="Underbukser" name="lower_underpants"/>
+ <texture_picker label="Strømper" name="lower_socks"/>
+ <texture_picker label="Sko" name="lower_shoes"/>
+ <texture_picker label="Bukser" name="lower_pants"/>
+ <texture_picker label="Jakke" name="lower_jacket"/>
+ <texture_picker label="Alpha - nedre" name="lower_alpha"/>
+ <texture_picker label="Tatovering - nedre" name="lower_tattoo"/>
+ <texture_picker label="Nederdel" name="skirt-baked"/>
+ <texture_picker label="Nederdel" name="skirt"/>
+ </panel>
+ </scroll_container>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml
index d67d859e7b..8049b072ce 100644
--- a/indra/newview/skins/default/xui/da/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/da/floater_beacons.xml
@@ -2,7 +2,7 @@
<floater name="beacons" title="PEJLELYS">
<panel name="beacons_panel">
<text name="label_show">
- Vis:
+ Vis :
</text>
<check_box label="Pejlelys" name="beacons"/>
<check_box label="Fremhævninger" name="highlights"/>
diff --git a/indra/newview/skins/default/xui/da/floater_build_options.xml b/indra/newview/skins/default/xui/da/floater_build_options.xml
index 9196f19b78..d3c3ac1899 100644
--- a/indra/newview/skins/default/xui/da/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_build_options.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="GITTER VALG">
- <spinner label="Gitter enheder (meter)" label_width="136" name="GridResolution" width="200"/>
- <spinner label="Gitter rækkevidde (meter)" label_width="136" name="GridDrawSize" width="200"/>
+ <spinner label="Enheder (meter)" label_width="136" name="GridResolution" width="200"/>
+ <spinner label="Rækkevidde (meter)" label_width="136" name="GridDrawSize" width="200"/>
<check_box label="Aktivér låsning til underenheder" name="GridSubUnit"/>
<check_box label="Vis &apos;cross-sections&apos;" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Gitter synlighed">
diff --git a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
index 0dd1a4f6ba..58a1c1b73e 100644
--- a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
@@ -49,6 +49,6 @@
<check_box label="Redigere" name="next_owner_modify"/>
<check_box label="Kopiére" name="next_owner_copy"/>
<check_box initial_value="true" label="Overfør" name="next_owner_transfer" tool_tip="Næste ejer kan sælge eller forære dette objekt væk"/>
- <button label="Ok" name="apply"/>
+ <button label="OK" name="apply"/>
<button label="Annullér" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
index 18ee0e0597..ec6ac5b2a8 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
@@ -37,7 +37,7 @@
Estimerer...
</text>
<text name="buy_action">
- [NAME] L$ [PRICE]
+ [ACTION]
</text>
<text name="total_label">
Min nye beholdning vil være
@@ -46,7 +46,7 @@
L$ [AMT]
</text>
<text name="currency_links">
- [http://www.secondlife.com/ payment method] | [http://www.secondlife.com/ currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate]
+ [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate]
</text>
<text name="exchange_rate_note">
Indtast beløbet for at se nyeste valutakurs.
diff --git a/indra/newview/skins/default/xui/da/floater_buy_land.xml b/indra/newview/skins/default/xui/da/floater_buy_land.xml
index 987ad6585f..970491b41f 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_land.xml
@@ -1,5 +1,134 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="buy land" title="KØB LAND">
+ <floater.string name="can_resell">
+ Kan videresælges.
+ </floater.string>
+ <floater.string name="can_not_resell">
+ Kan ikke videresælges.
+ </floater.string>
+ <floater.string name="can_change">
+ Kan samles eller opdeles.
+ </floater.string>
+ <floater.string name="can_not_change">
+ Kan ikke samles eller opdeles.
+ </floater.string>
+ <floater.string name="cant_buy_for_group">
+ Du har ikke tilladelse til at købe land for din aktive gruppe.
+ </floater.string>
+ <floater.string name="no_land_selected">
+ Intet land er valgt.
+ </floater.string>
+ <floater.string name="multiple_parcels_selected">
+ Flere forskellige parceller er valgt.
+Prøv at vælge et mindre område.
+ </floater.string>
+ <floater.string name="no_permission">
+ Du har ikke tilladelse til at købe jord for din aktive gruppe.
+ </floater.string>
+ <floater.string name="parcel_not_for_sale">
+ Det udvalgte parcel er ikke til salg.
+ </floater.string>
+ <floater.string name="group_already_owns">
+ Gruppen ejer allerede parcellet.
+ </floater.string>
+ <floater.string name="you_already_own">
+ Du ejer allerede parcellet.
+ </floater.string>
+ <floater.string name="set_to_sell_to_other">
+ Det udvalgte parcel er sat til salg til en anden.
+ </floater.string>
+ <floater.string name="no_public_land">
+ Det valgte område har ingen offentlige arealer.
+ </floater.string>
+ <floater.string name="not_owned_by_you">
+ Land ejet af en anden beboer valgt.
+Prøv at vælge et mindre område.
+ </floater.string>
+ <floater.string name="processing">
+ Forarbejder dit køb...
+
+(Dette kan tage et minut eller to.)
+ </floater.string>
+ <floater.string name="fetching_error">
+ Der er sket en fejl under hentning af jord købs oplysninger.
+ </floater.string>
+ <floater.string name="buying_will">
+ Køb af dette areal vil:
+ </floater.string>
+ <floater.string name="buying_for_group">
+ Køb af dette areal vil:
+ </floater.string>
+ <floater.string name="cannot_buy_now">
+ Kan ikke købe nu:
+ </floater.string>
+ <floater.string name="not_for_sale">
+ Ikke til salg:
+ </floater.string>
+ <floater.string name="none_needed">
+ ikke nødvendigt
+ </floater.string>
+ <floater.string name="must_upgrade">
+ Din konto skal være opgraderet for at eje jord.
+ </floater.string>
+ <floater.string name="cant_own_land">
+ Din konto kan eje jord.
+ </floater.string>
+ <floater.string name="land_holdings">
+ Du ejer [BUYER] m² land.
+ </floater.string>
+ <floater.string name="pay_to_for_land">
+ Betal L$ [AMOUNT] til [SELLER] for dette stykke jord
+ </floater.string>
+ <floater.string name="buy_for_US">
+ Køb L$ [AMOUNT] for ca. [LOCAL_AMOUNT],
+ </floater.string>
+ <floater.string name="parcel_meters">
+ Denne parcel er på [AMOUNT] m²
+ </floater.string>
+ <floater.string name="premium_land">
+ Dette stykke jord er premium, og vil tælle som [AMOUNT] m².
+ </floater.string>
+ <floater.string name="discounted_land">
+ Dette stykke jord er på tilbud, og vil tælle som [AMOUNT] m².
+ </floater.string>
+ <floater.string name="meters_supports_object">
+ [AMOUNT] m²
+kan indeholde [AMOUNT2] objekter
+ </floater.string>
+ <floater.string name="sold_with_objects">
+ solgt med objekter
+ </floater.string>
+ <floater.string name="sold_without_objects">
+ objekter ikke inkluderet
+ </floater.string>
+ <floater.string name="info_price_string">
+ L$ [PRICE]
+(L$ [PRICE_PER_SQM]/m²)
+[SOLD_WITH_OBJECTS]
+ </floater.string>
+ <floater.string name="insufficient_land_credits">
+ Gruppen [GROUP] skal bruge nok tildelt jord brugs
+kredit for at dække dette parcel før købet vil blive
+gennemført.
+ </floater.string>
+ <floater.string name="have_enough_lindens">
+ Du har L$ [AMOUNT], hvilket er nok til at købe denne jord.
+ </floater.string>
+ <floater.string name="not_enough_lindens">
+ Du har kun L$ [AMOUNT], og har brug for yderligere L$ [AMOUNT2].
+ </floater.string>
+ <floater.string name="balance_left">
+ Efter købet, vil du have L$ [AMOUNT] tilbage.
+ </floater.string>
+ <floater.string name="balance_needed">
+ Du skal købe mindst L$ [AMOUNT] for at have råd til denne jord.
+ </floater.string>
+ <floater.string name="no_parcel_selected">
+ (intet parcel er valgt)
+ </floater.string>
+ <floater.string name="icon_PG" value="Parcel_PG_Dark"/>
+ <floater.string name="icon_M" value="Parcel_M_Dark"/>
+ <floater.string name="icon_R" value="Parcel_R_Dark"/>
<text name="region_name_label">
Region:
</text>
@@ -107,133 +236,4 @@ Denne parcel er på 512 m².
<check_box label="Fjern [AMOUNT] m² af bidrag fra gruppe." name="remove_contribution"/>
<button label="Køb" name="buy_btn"/>
<button label="Annullér" name="cancel_btn"/>
- <string name="can_resell">
- Kan videresælges.
- </string>
- <string name="can_not_resell">
- Kan ikke videresælges.
- </string>
- <string name="can_change">
- Kan samles eller opdeles.
- </string>
- <string name="can_not_change">
- Kan ikke samles eller opdeles.
- </string>
- <string name="cant_buy_for_group">
- Du har ikke tilladelse til at købe land for din aktive gruppe.
- </string>
- <string name="no_land_selected">
- Intet land er valgt.
- </string>
- <string name="multiple_parcels_selected">
- Flere forskellige parceller er valgt.
-Prøv at vælge et mindre område.
- </string>
- <string name="no_permission">
- Du har ikke tilladelse til at købe jord for din aktive gruppe.
- </string>
- <string name="parcel_not_for_sale">
- Det udvalgte parcel er ikke til salg.
- </string>
- <string name="group_already_owns">
- Gruppen ejer allerede parcellet.
- </string>
- <string name="you_already_own">
- Du ejer allerede parcellet.
- </string>
- <string name="set_to_sell_to_other">
- Det udvalgte parcel er sat til salg til en anden.
- </string>
- <string name="no_public_land">
- Det valgte område har ingen offentlige arealer.
- </string>
- <string name="not_owned_by_you">
- Jord, der ejes af en anden bruger er valgt.
-Prøv at vælge et mindre område.
- </string>
- <string name="processing">
- Forarbejder dit køb...
-
-(Dette kan tage et minut eller to.)
- </string>
- <string name="fetching_error">
- Der er sket en fejl under hentning af jord købs oplysninger.
- </string>
- <string name="buying_will">
- Køb af dette areal vil:
- </string>
- <string name="buying_for_group">
- Køb af dette areal vil:
- </string>
- <string name="cannot_buy_now">
- Kan ikke købe nu:
- </string>
- <string name="not_for_sale">
- Ikke til salg:
- </string>
- <string name="none_needed">
- ikke nødvendigt
- </string>
- <string name="must_upgrade">
- Din konto skal være opgraderet for at eje jord.
- </string>
- <string name="cant_own_land">
- Din konto kan eje jord.
- </string>
- <string name="land_holdings">
- Du ejer [BUYER] m² land.
- </string>
- <string name="pay_to_for_land">
- Betal L$ [AMOUNT] til [SELLER] for dette stykke jord
- </string>
- <string name="buy_for_US">
- Køb L$ [AMOUNT] for ca. [LOCAL_AMOUNT],
- </string>
- <string name="parcel_meters">
- Denne parcel er på [AMOUNT] m²
- </string>
- <string name="premium_land">
- Dette stykke jord er premium, og vil tælle som [AMOUNT] m².
- </string>
- <string name="discounted_land">
- Dette stykke jord er på tilbud, og vil tælle som [AMOUNT] m².
- </string>
- <string name="meters_supports_object">
- [AMOUNT] m²
-kan indeholde [AMOUNT2] objekter
- </string>
- <string name="sold_with_objects">
- solgt med objekter
- </string>
- <string name="sold_without_objects">
- objekter ikke inkluderet
- </string>
- <string name="info_price_string">
- L$ [PRICE]
-(L$ [PRICE_PER_SQM]/m²)
-[SOLD_WITH_OBJECTS]
- </string>
- <string name="insufficient_land_credits">
- Gruppen [GROUP] skal bruge nok tildelt jord brugs
-kredit for at dække dette parcel før købet vil blive
-gennemført.
- </string>
- <string name="have_enough_lindens">
- Du har L$ [AMOUNT], hvilket er nok til at købe denne jord.
- </string>
- <string name="not_enough_lindens">
- Du har kun L$ [AMOUNT], og har brug for yderligere L$ [AMOUNT2].
- </string>
- <string name="balance_left">
- Efter købet, vil du have L$ [AMOUNT] tilbage.
- </string>
- <string name="balance_needed">
- Du skal købe mindst L$ [AMOUNT] for at have råd til denne jord.
- </string>
- <string name="no_parcel_selected">
- (intet parcel er valgt)
- </string>
- <string name="buy_currency">
- Køb L$ [LINDENS] for omkring US$ [USD]
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_camera.xml b/indra/newview/skins/default/xui/da/floater_camera.xml
index 2596559609..37e3307960 100644
--- a/indra/newview/skins/default/xui/da/floater_camera.xml
+++ b/indra/newview/skins/default/xui/da/floater_camera.xml
@@ -9,6 +9,18 @@
<floater.string name="move_tooltip">
Flyt kamera op og ned, til venstre og højre
</floater.string>
+ <floater.string name="orbit_mode_title">
+ Kredsløb
+ </floater.string>
+ <floater.string name="pan_mode_title">
+ Panorér
+ </floater.string>
+ <floater.string name="avatar_view_mode_title">
+ Forvalg
+ </floater.string>
+ <floater.string name="free_mode_title">
+ Se objekt
+ </floater.string>
<panel name="controls">
<joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, til venstre og højre"/>
<panel name="zoom" tool_tip="Zoom kamera mod fokus">
@@ -25,7 +37,7 @@
<panel name="buttons">
<button label="" name="orbit_btn" tool_tip="Rotér kamera"/>
<button label="" name="pan_btn" tool_tip="Panorér kamera"/>
- <button label="" name="avatarview_btn" tool_tip="Se som avatar"/>
+ <button label="" name="avatarview_btn" tool_tip="Forvalg"/>
<button label="" name="freecamera_btn" tool_tip="Se objekt"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_color_picker.xml b/indra/newview/skins/default/xui/da/floater_color_picker.xml
index 514b2c4331..f744b06277 100644
--- a/indra/newview/skins/default/xui/da/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/da/floater_color_picker.xml
@@ -21,7 +21,7 @@
<check_box label="Benyt nu" name="apply_immediate"/>
<button label="" label_selected="" name="color_pipette"/>
<button label="Annullér" label_selected="Annullér" name="cancel_btn"/>
- <button label="Ok" label_selected="Ok" name="select_btn"/>
+ <button label="OK" label_selected="OK" name="select_btn"/>
<text name="Current color:">
Nuværende Farve:
</text>
diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml
index 379302ef6a..b8b4b03277 100644
--- a/indra/newview/skins/default/xui/da/floater_customize.xml
+++ b/indra/newview/skins/default/xui/da/floater_customize.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater customize" title="UDSEENDE" width="509">
<tab_container name="customize tab container" width="507">
- <placeholder label="Krops Dele" name="body_parts_placeholder"/>
+ <text label="Krops Dele" name="body_parts_placeholder">
+ Kropsdele
+ </text>
<panel label="Kropsbygning" name="Shape">
<button label="Annullér" label_selected="Annullér" name="Revert"/>
<button label="Krop" label_selected="Krop" name="Body"/>
@@ -14,8 +16,8 @@
<button label="Overkrop" label_selected="Overkrop" name="Torso"/>
<button label="Ben" label_selected="Ben" name="Legs"/>
<radio_group name="sex radio">
- <radio_item label="Kvinde" name="radio"/>
- <radio_item label="Mand" name="radio2"/>
+ <radio_item label="Kvinde" name="radio" value="0"/>
+ <radio_item label="Mand" name="radio2" value="1"/>
</radio_group>
<text name="title">
[DESC]
@@ -33,9 +35,7 @@
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Vælg en ny krop ved at trække en sådan fra din beholdning
-over på din avatar. Du kan også oprette en fra bunden
-og bagefter &apos;tage den på&apos;.
+ Vælg en ny kropsbygning ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
</text>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
@@ -68,9 +68,7 @@ og bagefter &apos;tage den på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag en ny hud på ved at trække en sådan fra din beholdning
-over på din avatar. Du kan også oprette en hud fra bunden
-og bagefter &apos;tage den på&apos;.
+ Vælg en ny hud ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
</text>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
@@ -107,9 +105,7 @@ og bagefter &apos;tage den på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag et ny hår på ved at trække et fra din beholdning
-over på din avatar. Du kan også oprette et nyt hår fra bunden
-og bagefter &apos;tage det på&apos;.
+ Vælg et nyt hår ved at trække et sådant fra din beholdning over på din avatar. Du kan også oprette et fra bunden og bagefter &apos;tage det på&apos;.
</text>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
@@ -140,9 +136,7 @@ og bagefter &apos;tage det på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag et ny sæt øjne på ved at trække et sæt fra din beholdning
-over på din avatar. Du kan også oprette et nyt sæt øjne fra bunden
-og bagefter &apos;tage dem på&apos;.
+ Vælg et nyt sæt øjne ved at trække et sådant par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
</text>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
@@ -156,12 +150,14 @@ og bagefter &apos;tage dem på&apos;.
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
<button label="Annullér" label_selected="Annullér" name="Revert"/>
</panel>
- <placeholder label="Tøje" name="clothes_placeholder"/>
+ <text label="Tøje" name="clothes_placeholder">
+ Tøj
+ </text>
<panel label="Trøje" name="Shirt">
<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav ny trøje" label_selected="Lav ny trøje" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
+ <button label="Lav ny trøje" label_selected="Lav ny trøje" name="Create New"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
<button label="Annullér" label_selected="Annullér" name="Revert"/>
@@ -181,8 +177,7 @@ og bagefter &apos;tage dem på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag en ny Tøje på ved at trække en fra din beholdning over på din avatar.
-Du kan også oprette en ny Tøje fra bunden og bagefter &apos;tage den på&apos;.
+ Vælg en ny trøje ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
</text>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
@@ -194,8 +189,8 @@ Du kan også oprette en ny Tøje fra bunden og bagefter &apos;tage den på&apos;
<panel label="Bukser" name="Pants">
<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav nye bukser" label_selected="Lav nye bukser" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
+ <button label="Lav nye bukser" label_selected="Lav nye bukser" name="Create New"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
<button label="Annullér" label_selected="Annullér" name="Revert"/>
@@ -215,9 +210,7 @@ Du kan også oprette en ny Tøje fra bunden og bagefter &apos;tage den på&apos;
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag nyr bukser på ved at trække dem fra din beholdning over på
-din avatar. Du kan også oprette ny bukser fra bunden og bagefter
-&apos;tage dem på&apos;.
+ Vælg et nyt par bukser ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
</text>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
@@ -243,10 +236,9 @@ din avatar. Du kan også oprette ny bukser fra bunden og bagefter
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag et ny par sko på ved at trække dem fra din beholdning
-over på din avatar. Du kan også oprette et nyt par sko fra bunden
-og bagefter &apos;tage dem på&apos;.
+ Vælg et nyt par sko ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
</text>
+ <button label="Lav nye sko" label_selected="Lav nye sko" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
</text>
@@ -255,7 +247,6 @@ og bagefter &apos;tage dem på&apos;.
</text>
<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav nye sko" label_selected="Lav nye sko" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
@@ -278,10 +269,9 @@ og bagefter &apos;tage dem på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag et ny par Strømper på ved at trække dem fra din beholdning
-over på din avatar. Du kan også oprette et nyt par Strømper fra bunden
-og bagefter &apos;tage dem på&apos;.
+ Vælg et nyt par sokker ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
</text>
+ <button label="Lav nye strømper" label_selected="Lav nye strømper" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
</text>
@@ -290,7 +280,6 @@ og bagefter &apos;tage dem på&apos;.
</text>
<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav nye strømper" label_selected="Lav nye strømper" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
@@ -313,9 +302,9 @@ og bagefter &apos;tage dem på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag en ny jakke på ved at trække en fra din beholdning over på din avatar.
-Du kan også oprette en ny jakke fra bunden og bagefter &apos;tage den på&apos;.
+ Vælg en ny jakke ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
</text>
+ <button label="Lav ny jakke" label_selected="Lav ny jakke" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
</text>
@@ -325,7 +314,6 @@ Du kan også oprette en ny jakke fra bunden og bagefter &apos;tage den på&apos;
<texture_picker label="Stof øverst" name="Upper Fabric" tool_tip="Klik for at vælge et billede"/>
<texture_picker label="Stof nederst" name="Lower Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav ny jakke" label_selected="Lav ny jakke" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
@@ -348,10 +336,9 @@ Du kan også oprette en ny jakke fra bunden og bagefter &apos;tage den på&apos;
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag nye handsker på ved at trække et par fra din beholdning over på
-din avatar. Du kan også oprette nye handsker fra bunden
-og bagefter &apos;tage dem på&apos;.
+ Vælg et sæt nye handsker ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
</text>
+ <button label="Lav nye handsker" label_selected="Lav nye handsker" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
</text>
@@ -360,7 +347,6 @@ og bagefter &apos;tage dem på&apos;.
</text>
<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav nye handsker" label_selected="Lav nye handsker" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
@@ -383,10 +369,9 @@ og bagefter &apos;tage dem på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag en ny undertrøje på ved at trække en fra din beholdning over på
-din avatar. Du kan også oprette en ny undertrøje fra bunden
-og bagefter &apos;tage den på&apos;.
+ Vælg en ny undertrøje ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
</text>
+ <button label="Lav ny undertrøje" label_selected="Lav ny undertrøje" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
</text>
@@ -395,7 +380,6 @@ og bagefter &apos;tage den på&apos;.
</text>
<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav ny undertrøje" label_selected="Lav ny undertrøje" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
@@ -418,10 +402,9 @@ og bagefter &apos;tage den på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag nye underbukser på ved at trække dem fra din beholdning over på
-din avatar. Du kan også oprette en par nye underbukser fra bunden
-og bagefter &apos;tage dem på&apos;.
+ Vælg et nyt par underbukser ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
</text>
+ <button label="Lav nye underbukser" label_selected="Lav nye underbukser" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
</text>
@@ -430,7 +413,6 @@ og bagefter &apos;tage dem på&apos;.
</text>
<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav nye underbukser" label_selected="Lav nye underbukser" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
@@ -453,10 +435,9 @@ og bagefter &apos;tage dem på&apos;.
Fundet i [PATH]
</text>
<text name="not worn instructions">
- Tag en ny nederdel på ved at trække en fra din beholdning over på
-din avatar. Du kan også oprette en ny nederdel fra bunden
-og bagefter &apos;tage den på&apos;.
+ Vælg en ny nederdel ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
</text>
+ <button label="Lav ny nederdel" label_selected="Lav ny nederdel" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at redigere denne del.
</text>
@@ -465,13 +446,12 @@ og bagefter &apos;tage den på&apos;.
</text>
<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
- <button label="Lav ny nederdel" label_selected="Lav ny nederdel" name="Create New"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
<button label="Annullér" label_selected="Annullér" name="Revert"/>
</panel>
- <panel label="Alpha" name="Alpha">
+ <panel label="Tatovering" name="Tattoo">
<text name="title">
[DESC]
</text>
@@ -488,27 +468,24 @@ og bagefter &apos;tage den på&apos;.
Placeret i [PATH]
</text>
<text name="not worn instructions">
- Brug en ny &quot;alpha mask&quot; ved at trække en fra din beholding til din avatar.
-Alternativt kan du lave en fra bunden og bære denne.
+ Vælg en ny tatovering ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
</text>
+ <button label="lav ny tatovering" label_selected="Lav ny tatovering" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at ændre denne.
</text>
<text name="Item Action Label">
- Alpha:
+ Tatovering:
</text>
- <texture_picker label="Alpha - nedre" name="Lower Alpha" tool_tip="Klik for at vælge et billede"/>
- <texture_picker label="Øvre alpha" name="Upper Alpha" tool_tip="Klik for at vælge et billede"/>
- <texture_picker label="Alpha - hoved" name="Head Alpha" tool_tip="Klik for at vælge et billede"/>
- <texture_picker label="Alpha - øjne" name="Eye Alpha" tool_tip="Klik for at vælge et billede"/>
- <texture_picker label="Alpha - hår" name="Hair Alpha" tool_tip="Klik for at vælge et billede"/>
- <button label="Lav ny &quot;Alpha&quot;" label_selected="Lav ny &quot;Alpha&quot;" name="Create New"/>
+ <texture_picker label="Tatovering - hovede" name="Head Tattoo" tool_tip="Klik for at vælge et billede"/>
+ <texture_picker label="Øvre tatovering" name="Upper Tattoo" tool_tip="Klik for at vælge et billede"/>
+ <texture_picker label="Nedre tatovering" name="Lower Tattoo" tool_tip="Klik for at vælge et billede"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
<button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/>
</panel>
- <panel label="Tatovering" name="Tattoo">
+ <panel label="Alpha" name="Alpha">
<text name="title">
[DESC]
</text>
@@ -525,19 +502,20 @@ Alternativt kan du lave en fra bunden og bære denne.
Placeret i [PATH]
</text>
<text name="not worn instructions">
- Brug en ny tatovering ved at trække en fra din beholding til din avatar.
-Alternativt kan du lave en fra bunden og bære denne.
+ Vælg en ny &apos;alpha maske&apos; ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
</text>
+ <button label="Lav ny &quot;Alpha&quot;" label_selected="Lav ny &quot;Alpha&quot;" name="Create New"/>
<text name="no modify instructions">
Du har ikke rettigheder til at ændre denne.
</text>
<text name="Item Action Label">
- Tatovering:
+ Alpha:
</text>
- <texture_picker label="Tatovering - hovede" name="Head Tattoo" tool_tip="Klik for at vælge et billede"/>
- <texture_picker label="Øvre tatovering" name="Upper Tattoo" tool_tip="Klik for at vælge et billede"/>
- <texture_picker label="Nedre tatovering" name="Lower Tattoo" tool_tip="Klik for at vælge et billede"/>
- <button label="lav ny tatovering" label_selected="Lav ny tatovering" name="Create New"/>
+ <texture_picker label="Alpha - nedre" name="Lower Alpha" tool_tip="Klik for at vælge et billede"/>
+ <texture_picker label="Øvre alpha" name="Upper Alpha" tool_tip="Klik for at vælge et billede"/>
+ <texture_picker label="Alpha - hoved" name="Head Alpha" tool_tip="Klik for at vælge et billede"/>
+ <texture_picker label="Alpha - øjne" name="Eye Alpha" tool_tip="Klik for at vælge et billede"/>
+ <texture_picker label="Alpha - hår" name="Hair Alpha" tool_tip="Klik for at vælge et billede"/>
<button label="Tag af" label_selected="Tag af" name="Take Off"/>
<button label="Gem" label_selected="Gem" name="Save"/>
<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
@@ -545,6 +523,7 @@ Alternativt kan du lave en fra bunden og bære denne.
</panel>
</tab_container>
<scroll_container left="212" name="panel_container"/>
+ <button label="Script info" label_selected="Script info" name="script_info" tool_tip="Vis scripts vedhæftet på din avatar"/>
<button label="Lav sæt" label_selected="Lav sæt" name="make_outfit_btn"/>
<button label="Annullér" label_selected="Annullér" name="Cancel"/>
<button label="OK" label_selected="OK" name="Ok"/>
diff --git a/indra/newview/skins/default/xui/da/floater_event.xml b/indra/newview/skins/default/xui/da/floater_event.xml
new file mode 100644
index 0000000000..1816144b45
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_event.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Event" name="Event" title="EVENT DETALJER">
+ <floater.string name="none">
+ ingen
+ </floater.string>
+ <floater.string name="notify">
+ Meddel
+ </floater.string>
+ <floater.string name="dont_notify">
+ Meddel ikke
+ </floater.string>
+ <floater.string name="moderate">
+ Moderat
+ </floater.string>
+ <floater.string name="adult">
+ Voksent
+ </floater.string>
+ <floater.string name="general">
+ Generelt
+ </floater.string>
+ <floater.string name="unknown">
+ Ukendt
+ </floater.string>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <text name="event_name">
+ Event uden navn.
+ </text>
+ <text name="event_category">
+ (ingen kategori)
+ </text>
+ <text name="event_runby_label">
+ Afholdt af:
+ </text>
+ <text initial_value="(henter)" name="event_runby"/>
+ <text name="event_date_label">
+ Dato:
+ </text>
+ <text name="event_date">
+ 10/10/2010
+ </text>
+ <text name="event_duration_label">
+ Varighed:
+ </text>
+ <text name="event_duration">
+ 1 time
+ </text>
+ <text name="event_covercharge_label">
+ Pris:
+ </text>
+ <text name="event_cover">
+ Gratis
+ </text>
+ <text name="event_location_label">
+ Lokation:
+ </text>
+ <text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
+ <text name="rating_label" value="Rating:"/>
+ <text name="rating_value" value="ukendt"/>
+ <expandable_text name="event_desc">
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </expandable_text>
+ </layout_panel>
+ <layout_panel name="button_panel">
+ <button name="create_event_btn" tool_tip="Opret event"/>
+ <button name="god_delete_event_btn" tool_tip="Slet event"/>
+ <button label="Giv besked" name="notify_btn"/>
+ <button label="Teleport" name="teleport_btn"/>
+ <button label="Kort" name="map_btn"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_god_tools.xml b/indra/newview/skins/default/xui/da/floater_god_tools.xml
new file mode 100644
index 0000000000..6b7f9ef209
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_god_tools.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="GOD TOOLS">
+ <tab_container name="GodTools Tabs">
+ <panel label="Grid" name="grid">
+ <button label="Spark alle beboere" label_selected="Spark alle beboere" name="Kick all users"/>
+ </panel>
+ <panel label="Region" name="region">
+ <check_box label="Reset Home On Teleport" name="check reset home" tool_tip="Når beboere teleporterer væk, så sæt deres hjemmeadresse til deres destinations position."/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_help_browser.xml b/indra/newview/skins/default/xui/da/floater_help_browser.xml
index fc52796344..4eba4aee1f 100644
--- a/indra/newview/skins/default/xui/da/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/da/floater_help_browser.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_help_browser" title="HJÆLP">
+ <floater.string name="loading_text">
+ Henter...
+ </floater.string>
<layout_stack name="stack1">
- <layout_panel name="external_controls">
- <button label="Ã…ben i min web browser" name="open_browser"/>
- </layout_panel>
+ <layout_panel name="external_controls"/>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_im.xml b/indra/newview/skins/default/xui/da/floater_im.xml
index 519a70d1d9..776bc9ab13 100644
--- a/indra/newview/skins/default/xui/da/floater_im.xml
+++ b/indra/newview/skins/default/xui/da/floater_im.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="Personlig samtale (IM)">
<string name="only_user_message">
- Du er den eneste deltager i denne samtale
+ Du er den eneste beboer i denne session.
</string>
<string name="offline_message">
[FIRST] [LAST] er ikke logget på.
@@ -10,7 +10,7 @@
Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat.
</string>
<string name="muted_message">
- Du har blokeret denne beboer. Hvis du sender besked vil denne blokering fjernes.
+ Du har blokeret denne beboer. Hvis du sender en besked til beboeren vil dette automatisk medføre fjernelse af blokeringen
</string>
<string name="generic_request_error">
Kunne ikke etablere forbindelse, prøv igen senere
@@ -31,7 +31,7 @@
Du er blevet &quot;blokeret&quot;.
</string>
<string name="add_session_event">
- Ikke muligt at tilføge brugere til samtale med [RECIPIENT].
+ Kunne ikke tilføje beboere til chat session med [RECIPIENT].
</string>
<string name="message_session_event">
Ikke muligt at sende din besked til samtalen med [RECIPIENT].
diff --git a/indra/newview/skins/default/xui/da/floater_im_container.xml b/indra/newview/skins/default/xui/da/floater_im_container.xml
index da6f877f56..28b2f7f7eb 100644
--- a/indra/newview/skins/default/xui/da/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/da/floater_im_container.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="Personlige beskeder"/>
+<multi_floater name="floater_im_box" title="SAMTALER"/>
diff --git a/indra/newview/skins/default/xui/da/floater_incoming_call.xml b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
index 3a1ef2e47d..2349174db2 100644
--- a/indra/newview/skins/default/xui/da/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="incoming call" title="UKENDT PERSON KALDER OP">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
<floater.string name="localchat">
Stemme chat nærved
</floater.string>
@@ -12,6 +15,9 @@
<floater.string name="VoiceInviteAdHoc">
har sluttet sig til stemme chat opkald med en konference chat.
</floater.string>
+ <floater.string name="VoiceInviteGroup">
+ deltager nu i Stemme chat opkald med denne gruppe [GROUP].
+ </floater.string>
<text name="question">
Ønsker du at forlade [CURRENT_CHAT] og slutte dig til denne stemme chat?
</text>
diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml
index d80051fb84..3a4b0fbd6b 100644
--- a/indra/newview/skins/default/xui/da/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/da/floater_inventory.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="BEHOLDNING">
+<floater name="Inventory" title="MIN BEHOLDNING">
<floater.string name="Title">
- Beholdning
+ MIN BEHOLDNING
</floater.string>
<floater.string name="TitleFetching">
- Beholdning (henter [ITEM_COUNT] genstande...) [FILTER]
+ MIN BEHOLDNING (Henter [ITEM_COUNT] genstande...) [FILTER]
</floater.string>
<floater.string name="TitleCompleted">
- Beholdning ([ITEM_COUNT] genstande) [FILTER]
+ MIN BEHOLDNING ([ITEM_COUNT] genstande) [FILTER]
</floater.string>
<floater.string name="Fetched">
Hentet
diff --git a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
index 4079ff9f38..0cc13fd736 100644
--- a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
@@ -7,7 +7,7 @@
Kører
</floater.string>
<floater.string name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<button label="Nulstil" label_selected="Reset" name="Reset"/>
<check_box initial_value="true" label="Kører" name="running"/>
diff --git a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
index 2b008f133c..2594d6bb9d 100644
--- a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="LSL WIKI">
+<floater name="script ed float" title="LSL REFERENCE">
<check_box label="Følg markøreren" name="lock_check"/>
<combo_box label="LÃ¥s" left_delta="114" name="history_combo" width="70"/>
<button label="Tilbage" name="back_btn"/>
diff --git a/indra/newview/skins/default/xui/da/floater_map.xml b/indra/newview/skins/default/xui/da/floater_map.xml
index f618548908..82897d545a 100644
--- a/indra/newview/skins/default/xui/da/floater_map.xml
+++ b/indra/newview/skins/default/xui/da/floater_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
+<floater name="Map" title="Mini-kort">
<floater.string name="mini_map_north">
N
</floater.string>
diff --git a/indra/newview/skins/default/xui/da/floater_media_browser.xml b/indra/newview/skins/default/xui/da/floater_media_browser.xml
index 47667973ba..d3028c32f9 100644
--- a/indra/newview/skins/default/xui/da/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/da/floater_media_browser.xml
@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_about" title="MEDIE VÆLGER">
<layout_stack name="stack1">
<layout_panel name="nav_controls">
- <button label="Tilbage" name="back" />
- <button label="Frem" name="forward" />
- <button label="Opdater" name="reload" />
- <button label="GÃ¥ til" name="go" />
+ <button label="Tilbage" name="back"/>
+ <button label="Frem" name="forward"/>
+ <button label="Opdater" name="reload"/>
+ <button label="GÃ¥ til" name="go"/>
</layout_panel>
<layout_panel name="parcel_owner_controls">
- <button label="Send nuværende URL til parcel" name="assign" />
+ <button label="Send denne side til parcel" name="assign"/>
</layout_panel>
<layout_panel name="external_controls">
- <button label="Ã…ben i min browser" name="open_browser" />
- <check_box label="Ã…ben altid i min browser" name="open_always" />
- <button label="Luk" name="close" />
+ <button label="Ã…ben i min browser" name="open_browser"/>
+ <check_box label="Ã…ben altid i min browser" name="open_always"/>
+ <button label="Luk" name="close"/>
</layout_panel>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_moveview.xml b/indra/newview/skins/default/xui/da/floater_moveview.xml
index b00dc6bf4d..8385924bda 100644
--- a/indra/newview/skins/default/xui/da/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/da/floater_moveview.xml
@@ -18,12 +18,20 @@
<string name="fly_back_tooltip">
Flyv baglæns (Tryk på Ned piletast eller S)
</string>
+ <string name="walk_title">
+ GÃ¥
+ </string>
+ <string name="run_title">
+ Løb
+ </string>
+ <string name="fly_title">
+ Flyv
+ </string>
<panel name="panel_actions">
- <button label="" label_selected="" name="turn left btn" tool_tip="xxx
- Drej til venstre (Tryk på venstre piletast eller A)"/>
+ <button label="" label_selected="" name="turn left btn" tool_tip="xxx Drej til venstre (Tryk på venstre piletast eller A)"/>
<button label="" label_selected="" name="turn right btn" tool_tip="Drej til højre (Tryk på højre piletast eller D)"/>
- <button label="" label_selected="" name="move up btn" tool_tip="Flyv op, Tryk på &quot;E&quot;"/>
- <button label="" label_selected="" name="move down btn" tool_tip="Flyv ned, Tryk på &quot;C&quot;"/>
+ <button label="" label_selected="" name="move up btn" tool_tip="Flyv op, tryk E"/>
+ <button label="" label_selected="" name="move down btn" tool_tip="Flyv ned, tryk C"/>
<joystick_turn name="forward btn" tool_tip="Gå frem (Tryk på Op piletast eller W)"/>
<joystick_turn name="backward btn" tool_tip="Gå tilbage (Tryk på Ned piletast eller S)"/>
</panel>
@@ -31,6 +39,5 @@
<button label="" name="mode_walk_btn" tool_tip="GÃ¥ tilstand"/>
<button label="" name="mode_run_btn" tool_tip="Løbe tilstand"/>
<button label="" name="mode_fly_btn" tool_tip="Flyve tilstand"/>
- <button label="Stop flyvning" name="stop_fly_btn" tool_tip="Stop flyvning"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml
new file mode 100644
index 0000000000..0bcb96b151
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="modal container" title="Gem sæt">
+ <button label="Gem" label_selected="Gem" name="Save"/>
+ <button label="Annullér" label_selected="Annullér" name="Cancel"/>
+ <text name="Save item as:">
+ Gem hvad jeg har på som et nyt sæt:
+ </text>
+ <line_editor name="name ed">
+ [DESC] (ny)
+ </line_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_outgoing_call.xml b/indra/newview/skins/default/xui/da/floater_outgoing_call.xml
index 5c98d9855f..ef4e22dd8f 100644
--- a/indra/newview/skins/default/xui/da/floater_outgoing_call.xml
+++ b/indra/newview/skins/default/xui/da/floater_outgoing_call.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="outgoing call" title="KALDER">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
<floater.string name="localchat">
Stemme chat nærved
</floater.string>
@@ -21,6 +24,15 @@
<text name="noanswer">
Intet svar. Prøv igen senere.
</text>
+ <text name="nearby">
+ Du er blevet koblet af fra [VOICE_CHANNEL_NAME]. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_other">
+ [VOICE_CHANNEL_NAME] har afsluttet opkaldet. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_agent">
+ Du har afsluttet opkaldet. [RECONNECT_NEARBY]
+ </text>
<text name="leaving">
Forlader [CURRENT_CHAT].
</text>
diff --git a/indra/newview/skins/default/xui/da/floater_pay_object.xml b/indra/newview/skins/default/xui/da/floater_pay_object.xml
index f74e097da2..368d678681 100644
--- a/indra/newview/skins/default/xui/da/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/da/floater_pay_object.xml
@@ -15,7 +15,7 @@
</text>
<icon name="icon_object" tool_tip="Objekter"/>
<text name="object_name_text">
- ...
+ Mit fantastiske objekt med et virkeligt langt navn
</text>
<button label="L$1" label_selected="L$1" name="fastpay 1"/>
<button label="L$5" label_selected="L$5" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/da/floater_preferences.xml b/indra/newview/skins/default/xui/da/floater_preferences.xml
index f0fe3472d0..a53586eaaf 100644
--- a/indra/newview/skins/default/xui/da/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/da/floater_preferences.xml
@@ -6,7 +6,7 @@
<panel label="Generelt" name="general"/>
<panel label="Grafik" name="display"/>
<panel label="Privatliv" name="im"/>
- <panel label="Sound" name="audio"/>
+ <panel label="Lyd &amp; medier" name="audio"/>
<panel label="Chat" name="chat"/>
<panel label="Beskeder" name="msgs"/>
<panel label="Opsætning" name="input"/>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture.xml
index bfa3c150a9..f49fd8c99a 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_gesture.xml
@@ -24,6 +24,9 @@
<floater.string name="Title">
Bevægelse: [NAME]
</floater.string>
+ <text name="name_text">
+ Navn:
+ </text>
<text name="desc_label">
Beskrivelse:
</text>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
index 2ebec4462f..e600a774ec 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview notecard" title="NOTE:">
<floater.string name="no_object">
- Kunne ikke finde objekt der indeholder denne note.
+ Kunne ikke finde objekt som indeholder denne note.
</floater.string>
<floater.string name="not_allowed">
Du har ikke rettigheder til at se denne note.
diff --git a/indra/newview/skins/default/xui/da/floater_preview_texture.xml b/indra/newview/skins/default/xui/da/floater_preview_texture.xml
index ab7ddbcc72..48cf53f563 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_texture.xml
@@ -12,6 +12,9 @@
<text name="dimensions">
[WIDTH]px x [HEIGHT]px
</text>
+ <text name="aspect_ratio">
+ Vis aspekt forhold
+ </text>
<combo_box name="combo_aspect_ratio" tool_tip="Forhåndsvisning med et bestemt billedformat">
<combo_item name="Unconstrained">
Ikke låst
@@ -38,7 +41,7 @@
2:1
</combo_item>
</combo_box>
- <button label="OK" name="keep"/>
- <button label="Annullér" name="discard"/>
+ <button label="OK" name="Keep"/>
+ <button label="Kassér" name="Discard"/>
<button label="Gem som" name="save_tex_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_publish_classified.xml b/indra/newview/skins/default/xui/da/floater_publish_classified.xml
new file mode 100644
index 0000000000..220042f015
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_publish_classified.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="publish_classified" title="Publicerer annoncer">
+ <text name="explanation_text">
+ Din annonce vil blive vist i en uge fra den dato den publiceres.
+
+Husk, annonceomkostninger kan ikke refunderes.
+ </text>
+ <spinner label="Pris for annonce:" name="price_for_listing" tool_tip="Pris for optagelse af annonce." value="50"/>
+ <text name="l$_text" value="L$"/>
+ <text name="more_info_text">
+ Mere info (link til hjælp om annoncer)
+ </text>
+ <button label="Publicér" name="publish_btn"/>
+ <button label="Annullér" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_report_abuse.xml b/indra/newview/skins/default/xui/da/floater_report_abuse.xml
index 9ef17a3cbb..07978792b9 100644
--- a/indra/newview/skins/default/xui/da/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/da/floater_report_abuse.xml
@@ -42,7 +42,7 @@
<combo_box.item label="Vælg kategori" name="Select_category"/>
<combo_box.item label="Alder &gt; Falsk alder" name="Age__Age_play"/>
<combo_box.item label="Alder &gt; Voksen beboer på Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
- <combo_box.item label="Alder &gt; Mindreårig beboer udenfor Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+ <combo_box.item label="Alder &gt; Mindreårig beboer uden for Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Overfald &gt; Kamp sandkasse / Usikkert område" name="Assault__Combat_sandbox___unsafe_area"/>
<combo_box.item label="Overfald &gt; Sikkert område" name="Assault__Safe_area"/>
<combo_box.item label="Overfald &gt; Sandkasse til våbentest" name="Assault__Weapons_testing_sandbox"/>
diff --git a/indra/newview/skins/default/xui/da/floater_script_limits.xml b/indra/newview/skins/default/xui/da/floater_script_limits.xml
new file mode 100644
index 0000000000..a7f86a782a
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_script_limits.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="scriptlimits" title="SCRIPT INFORMATION"/>
diff --git a/indra/newview/skins/default/xui/da/floater_script_preview.xml b/indra/newview/skins/default/xui/da/floater_script_preview.xml
index 1e8d869716..1aacab6915 100644
--- a/indra/newview/skins/default/xui/da/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_preview.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview lsl text" title="SCRIPT: ROTATIONS SCRIPT">
<floater.string name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<text name="desc txt">
Beskrivelse:
diff --git a/indra/newview/skins/default/xui/da/floater_select_key.xml b/indra/newview/skins/default/xui/da/floater_select_key.xml
index fe0d31c6c3..9f7aad5e03 100644
--- a/indra/newview/skins/default/xui/da/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/da/floater_select_key.xml
@@ -2,6 +2,6 @@
<floater name="modal container" title="">
<button label="Annullér" label_selected="Annullér" name="Cancel"/>
<text name="Save item as:">
- Tryk på en taste for at sætte din &quot;Tale&quot; knap udløser.
+ Tryk en taste for at angive trigger til at tale.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_settings_debug.xml b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
index 41cf100d94..016e5af378 100644
--- a/indra/newview/skins/default/xui/da/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="DEBUG INDSTILLINGER">
- <combo_box name="boolean_combo">
- <combo_box.item label="SANDT" name="TRUE"/>
- <combo_box.item label="FALSK" name="FALSE"/>
- </combo_box>
+ <radio_group name="boolean_combo">
+ <radio_item label="SANDT" name="TRUE" value="sand"/>
+ <radio_item label="FALSK" name="FALSE" value=""/>
+ </radio_group>
<color_swatch label="Farve" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
<spinner label="x" name="val_spinner_2"/>
diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml
index 5e8c64e21f..6140055d74 100644
--- a/indra/newview/skins/default/xui/da/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml
@@ -4,12 +4,12 @@
Hvor skal foto hen?
</text>
<radio_group label="Snapshot type" name="snapshot_type_radio">
- <radio_item label="Send via e-mail" name="postcard"/>
- <radio_item label="Gem i din beholdning (L$[AMOUNT])" name="texture"/>
- <radio_item label="Gem på din computer" name="local"/>
+ <radio_item label="Email" name="postcard"/>
+ <radio_item label="Min beholdning (L$[AMOUNT])" name="texture"/>
+ <radio_item label="Gem på min computer" name="local"/>
</radio_group>
<text name="file_size_label">
- Fil størrelse: [SIZE] KB
+ [SIZE] KB
</text>
<button label="Tag nyt foto" name="new_snapshot_btn"/>
<button label="Send" name="send_btn"/>
@@ -19,8 +19,8 @@
<flyout_button_item label="Gem som..." name="saveas_item"/>
</flyout_button>
<button label="Annullér" name="discard_btn"/>
- <button label="Mere &gt;&gt;" name="more_btn" tool_tip="Avancerede muligheder"/>
- <button label="&lt;&lt; Mindre" name="less_btn" tool_tip="Avancerede muligheder"/>
+ <button label="Mere" name="more_btn" tool_tip="Avancerede muligheder"/>
+ <button label="Mindre" name="less_btn" tool_tip="Avancerede muligheder"/>
<text name="type_label2">
Størrelse
</text>
@@ -59,7 +59,7 @@
<spinner label="Bredde" label_width="41" name="snapshot_width" width="101"/>
<spinner label="Højde" label_width="32" left="117" name="snapshot_height" width="92"/>
<check_box label="Fasthold proportioner" name="keep_aspect_check"/>
- <slider label="Billed-kvalitet" name="image_quality_slider"/>
+ <slider label="Billedkvalitet" name="image_quality_slider"/>
<text name="layer_type_label">
Benyt:
</text>
@@ -68,10 +68,10 @@
<combo_box.item label="Dybde" name="Depth"/>
<combo_box.item label="Materinger" name="ObjectMattes"/>
</combo_box>
- <check_box label="Vis brugerflade på foto" name="ui_check"/>
- <check_box label="Vis HUD objekter på foto" name="hud_check"/>
+ <check_box label="Snitflade" name="ui_check"/>
+ <check_box label="HUDs" name="hud_check"/>
<check_box label="Luk ikke vindue ved gemning" name="keep_open_check"/>
- <check_box label="Frys billede og vis" name="freeze_frame_check"/>
+ <check_box label="Fastfrys (fuldt billede)" name="freeze_frame_check"/>
<check_box label="Auto-opdater" name="auto_snapshot_check"/>
<string name="unknown">
ukendt
diff --git a/indra/newview/skins/default/xui/da/floater_sys_well.xml b/indra/newview/skins/default/xui/da/floater_sys_well.xml
index b5cecf93e9..f203c2504f 100644
--- a/indra/newview/skins/default/xui/da/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/da/floater_sys_well.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="sys_well_window" title="BESKEDER">
<string name="title_im_well_window">
- IM SESSIONER
+ SAMTALER
</string>
<string name="title_notification_well_window">
BESKEDER
diff --git a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
index 00b49a9df9..fbc7fe2319 100644
--- a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
@@ -17,7 +17,7 @@
<check_box label="Benyt ny" name="apply_immediate_check"/>
<button label="" label_selected="" name="Pipette"/>
<button label="Annullér" label_selected="Annullér" name="Cancel"/>
- <button label="Ok" label_selected="Ok" name="Select"/>
+ <button label="OK" label_selected="OK" name="Select"/>
<string name="pick title">
Vælg:
</string>
diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml
index 77459aca67..a39a7e8698 100644
--- a/indra/newview/skins/default/xui/da/floater_tools.xml
+++ b/indra/newview/skins/default/xui/da/floater_tools.xml
@@ -63,7 +63,7 @@
<radio_item label="Stræk (Ctrl+Shift)" name="radio stretch"/>
<radio_item label="Vælg overflade" name="radio select face"/>
</radio_group>
- <check_box label="Redigér sammenlænkede dele" name="checkbox edit linked parts"/>
+ <check_box label="Redigér lænkede" name="checkbox edit linked parts"/>
<text name="RenderingCost" tool_tip="Hvis beregnede rendering omkostninger for dette objekt">
þ: [COUNT]
</text>
@@ -184,12 +184,12 @@
Klik for at:
</text>
<combo_box name="clickaction">
- <combo_box.item label="Rør (Standard)" name="Touch/grab(default)"/>
- <combo_box.item label="Sid på objekt" name="Sitonobject"/>
- <combo_box.item label="Køb objekt" name="Buyobject"/>
- <combo_box.item label="Betal objekt" name="Payobject"/>
- <combo_box.item label="Ã…ben" name="Open"/>
- <combo_box.item label="Zoom" name="Zoom"/>
+ <combo_box.item label="Røre (Standard)" name="Touch/grab(default)"/>
+ <combo_box.item label="Sidde på objekt" name="Sitonobject"/>
+ <combo_box.item label="Købe objekt" name="Buyobject"/>
+ <combo_box.item label="Betale objekt" name="Payobject"/>
+ <combo_box.item label="Ã…bne" name="Open"/>
+ <combo_box.item label="Zoome" name="Zoom"/>
</combo_box>
<check_box label="Til salg:" name="checkbox for sale"/>
<combo_box name="sale type">
@@ -206,14 +206,14 @@
<text name="Anyone can:">
Enhver:
</text>
- <check_box label="Flyt" name="checkbox allow everyone move"/>
- <check_box label="Kopi" name="checkbox allow everyone copy"/>
+ <check_box label="Flytte" name="checkbox allow everyone move"/>
+ <check_box label="Kopiere" name="checkbox allow everyone copy"/>
<text name="Next owner can:">
Næste ejer:
</text>
<check_box label="Redigére" name="checkbox next owner can modify"/>
- <check_box label="Kopiére" left_delta="80" name="checkbox next owner can copy"/>
- <check_box label="Sælge/give væk" left_delta="67" name="checkbox next owner can transfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/>
+ <check_box label="Kopiére" name="checkbox next owner can copy"/>
+ <check_box label="Sælge/give væk" name="checkbox next owner can transfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/>
<text name="B:">
B:
</text>
@@ -417,21 +417,21 @@
<combo_box.item label="Ingen" name="None"/>
<combo_box.item label="Lysintensitet" name="Brightness"/>
<combo_box.item label="Mørke" name="Darkness"/>
- <combo_box.item label="træårer" name="woodgrain"/>
- <combo_box.item label="bark" name="bark"/>
- <combo_box.item label="mursten" name="bricks"/>
- <combo_box.item label="tern" name="checker"/>
- <combo_box.item label="beton" name="concrete"/>
- <combo_box.item label="rustik flise" name="crustytile"/>
+ <combo_box.item label="Træårer" name="woodgrain"/>
+ <combo_box.item label="Bark" name="bark"/>
+ <combo_box.item label="Mursten" name="bricks"/>
+ <combo_box.item label="Tern" name="checker"/>
+ <combo_box.item label="Beton" name="concrete"/>
+ <combo_box.item label="Rustik flise" name="crustytile"/>
<combo_box.item label="Skåret sten" name="cutstone"/>
- <combo_box.item label="plader" name="discs"/>
- <combo_box.item label="grus" name="gravel"/>
- <combo_box.item label="petriskål" name="petridish"/>
- <combo_box.item label="udvendig beklædning" name="siding"/>
- <combo_box.item label="stenflise" name="stonetile"/>
- <combo_box.item label="puds" name="stucco"/>
- <combo_box.item label="rør" name="suction"/>
- <combo_box.item label="væv" name="weave"/>
+ <combo_box.item label="Plader" name="discs"/>
+ <combo_box.item label="Grus" name="gravel"/>
+ <combo_box.item label="Petriskål" name="petridish"/>
+ <combo_box.item label="Udvendig beklædning" name="siding"/>
+ <combo_box.item label="Stenflise" name="stonetile"/>
+ <combo_box.item label="Puds" name="stucco"/>
+ <combo_box.item label="Rør" name="suction"/>
+ <combo_box.item label="Væv" name="weave"/>
</combo_box>
<text name="tex scale">
Gentagelser på overflade
@@ -440,8 +440,8 @@
<check_box label="Vend" name="checkbox flip s"/>
<spinner label="Lodret (V)" name="TexScaleV"/>
<check_box label="Vend" name="checkbox flip t"/>
- <spinner label="RotationËš" left="125" name="TexRot" width="55"/>
- <spinner label="Gentagelser pr. meter" left="125" name="rptctrl" width="55"/>
+ <spinner label="RotationËš"/>
+ <spinner label="Gentagelser pr. m."/>
<button label="Gem" label_selected="Gem" left_delta="62" name="button apply"/>
<text name="tex offset">
Tekstur offset
@@ -488,7 +488,7 @@ Grå = Offentligt ejet"/>
<button label="Opdel" label_selected="Opdel" name="button subdivide land"/>
<button label="Saml" label_selected="Saml" name="button join land"/>
<text name="label_parcel_trans">
- Transaktioner for land
+ Transaktioner - land
</text>
<button label="Køb land" label_selected="Køb land" name="button buy land"/>
<button label="Efterlad land" label_selected="Efterlad land" name="button abandon land"/>
diff --git a/indra/newview/skins/default/xui/da/floater_top_objects.xml b/indra/newview/skins/default/xui/da/floater_top_objects.xml
index 3f19350e30..86c24d2c19 100644
--- a/indra/newview/skins/default/xui/da/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/da/floater_top_objects.xml
@@ -1,15 +1,40 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="top_objects" title="Top objekter">
+ <floater.string name="top_scripts_title">
+ Mest krævende scripts
+ </floater.string>
+ <floater.string name="top_scripts_text">
+ [COUNT] scripts bruger ialt [TIME] ms
+ </floater.string>
+ <floater.string name="scripts_score_label">
+ Tid
+ </floater.string>
+ <floater.string name="scripts_mono_time_label">
+ Mono tid
+ </floater.string>
+ <floater.string name="top_colliders_title">
+ Mest kolliderende
+ </floater.string>
+ <floater.string name="top_colliders_text">
+ Top [COUNT] genstande der potentielt har mange kollisioner
+ </floater.string>
+ <floater.string name="colliders_score_label">
+ Point
+ </floater.string>
+ <floater.string name="none_descriptor">
+ Ingen fundet
+ </floater.string>
<text name="title_text">
Henter...
</text>
<scroll_list name="objects_list">
- <column label="Point" name="score"/>
- <column label="Navn" name="name"/>
- <column label="Ejer" name="owner"/>
- <column label="Lokation" name="location"/>
- <column label="Tid" name="time"/>
- <column label="Mono tid" name="mono_time"/>
+ <scroll_list.columns label="Point" name="score"/>
+ <scroll_list.columns label="Navn" name="name"/>
+ <scroll_list.columns label="Ejer" name="owner"/>
+ <scroll_list.columns label="Lokation" name="location"/>
+ <scroll_list.columns label="Tid" name="time"/>
+ <scroll_list.columns label="Mono tid" name="mono_time"/>
+ <scroll_list.columns label="URL&apos;er" name="URLs"/>
</scroll_list>
<text name="id_text">
Objekt ID:
@@ -23,33 +48,9 @@
Ejer:
</text>
<button label="Filter" name="filter_owner_btn"/>
+ <button label="Genopfrisk" name="refresh_btn"/>
<button label="Returnér valgte" name="return_selected_btn"/>
<button label="Returnér alle" name="return_all_btn"/>
<button label="Afbryd valgte" name="disable_selected_btn"/>
<button label="Afbryd alle" name="disable_all_btn"/>
- <button label="Genopfrisk" name="refresh_btn"/>
- <string name="top_scripts_title">
- Mest krævende scripts
- </string>
- <string name="top_scripts_text">
- [COUNT] scripts bruger ialt [TIME] ms
- </string>
- <string name="scripts_score_label">
- Tid
- </string>
- <string name="scripts_mono_time_label">
- Mono tid
- </string>
- <string name="top_colliders_title">
- Mest kolliderende
- </string>
- <string name="top_colliders_text">
- Top [COUNT] genstande der potentielt har mange kollisioner
- </string>
- <string name="colliders_score_label">
- Point
- </string>
- <string name="none_descriptor">
- Ingen fundet
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_tos.xml b/indra/newview/skins/default/xui/da/floater_tos.xml
index 77906f0f46..c87fe8162f 100644
--- a/indra/newview/skins/default/xui/da/floater_tos.xml
+++ b/indra/newview/skins/default/xui/da/floater_tos.xml
@@ -2,9 +2,9 @@
<floater name="modal container" title="">
<button label="Fortsæt" label_selected="Fortsæt" name="Continue"/>
<button label="Annullér" label_selected="Annullér" name="Cancel"/>
- <check_box label="Jeg accepterer vilkårene for brug af tjenesten" name="agree_chk"/>
+ <check_box label="Jeg er enig med &quot;Terms of Service and Privacy Policy&quot;" name="agree_chk"/>
<text name="tos_heading">
- Læs venligst de almindelige bestemmelser og vilkår igennem, for at fortsætte til [SECOND LIFE] skal du acceptere vilkårene.
+ Læs venligst følgende &quot;Terms of Service and Privacy Policy&quot; grundigt. For at fortsætte med at logge på [SECOND_LIFE], skal du acceptere aftale.
</text>
<text_editor name="tos_text">
TOS_TEXT
diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
index 8651851233..05e9eb6cdd 100644
--- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
@@ -13,13 +13,14 @@
Opkald med [NAME]
</string>
<string name="no_one_near">
- Ingen nær
+ Ingen i nærheden har aktiveret stemmer
</string>
- <panel name="control_panel">
- <layout_stack>
- <layout_panel name="leave_btn_panel">
- <button label="Forlad opkald" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="my_call_stack">
+ <layout_panel name="my_panel">
+ <text name="user_text" value="Min avatar:"/>
+ </layout_panel>
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Forlad opkald" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml
index 103feaa879..aedd1b442c 100644
--- a/indra/newview/skins/default/xui/da/floater_water.xml
+++ b/indra/newview/skins/default/xui/da/floater_water.xml
@@ -7,7 +7,7 @@
<button label="Gem" label_selected="Gem" name="WaterSavePreset"/>
<button label="Slet" label_selected="Slet" name="WaterDeletePreset"/>
<tab_container name="Water Tabs">
- <panel label="Opsætning" name="Settings">
+ <panel label="INDSTILLINGER" name="Settings">
<text name="BHText">
Vandtåge farve
</text>
@@ -65,7 +65,7 @@
<button label="?" name="WaterBlurMultiplierHelp"/>
<slider label="" name="WaterBlurMult"/>
</panel>
- <panel label="Billede" name="Waves">
+ <panel label="BILLEDE" name="Waves">
<text name="BHText">
Retning for store bølger
</text>
diff --git a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml
index a70db6a6f1..17d5b9c205 100644
--- a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="modal container" title="">
- <button label="Gem" label_selected="Gem" name="Save" />
- <button label="Annullér" label_selected="Annullér" name="Cancel" />
+ <button label="Gem" label_selected="Gem" name="Save"/>
+ <button label="Annullér" label_selected="Annullér" name="Cancel"/>
<text name="Save item as:">
- Gem ting som::
+ Gem genstand i min beholdning som:
</text>
<line_editor name="name ed">
Ny [DESC]
diff --git a/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml
index d2f618579d..443e84b64a 100644
--- a/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml
+++ b/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="whitelist_entry">
+<floater name="whitelist_entry" title="GODKENDTE SIDER">
<text name="media_label">
Indtast en URL eller et URL mønster for at tilføje til listen med godkendte domæner
</text>
diff --git a/indra/newview/skins/default/xui/da/floater_windlight_options.xml b/indra/newview/skins/default/xui/da/floater_windlight_options.xml
index 4786609b53..65f3f67a70 100644
--- a/indra/newview/skins/default/xui/da/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_windlight_options.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="WindLight floater" title="AVANCERET OPSÆTNING FOR HIMMEL">
<text name="KeyFramePresetsText">
Faste indstillinger:
</text>
- <button label="Ny" label_selected="Ny" name="WLNewPreset" />
- <button label="Gem" label_selected="Gem" name="WLSavePreset" />
- <button label="Slet" label_selected="Slet" name="WLDeletePreset" />
- <button label="Dags cyklus" label_selected="Dags cyklus" name="WLDayCycleMenuButton" />
+ <button label="Ny" label_selected="Ny" name="WLNewPreset"/>
+ <button label="Gem" label_selected="Gem" name="WLSavePreset"/>
+ <button label="Slet" label_selected="Slet" name="WLDeletePreset"/>
+ <button label="Dags cyklus" label_selected="Dags cyklus" name="WLDayCycleMenuButton"/>
<tab_container name="WindLight Tabs">
- <panel label="Atmosfære" name="Atmosphere">
+ <panel label="ATMOSFÆRE" name="Atmosphere">
<text name="BHText">
Blå - horisont
</text>
- <button label="?" name="WLBlueHorizonHelp" />
+ <button label="?" name="WLBlueHorizonHelp"/>
<text name="BHText2">
R
</text>
@@ -25,19 +25,19 @@
<text name="BHText5">
I
</text>
- <slider label="" name="WLBlueHorizonR" />
- <slider label="" name="WLBlueHorizonG" />
- <slider label="" name="WLBlueHorizonB" />
- <slider label="" name="WLBlueHorizonI" />
+ <slider label="" name="WLBlueHorizonR"/>
+ <slider label="" name="WLBlueHorizonG"/>
+ <slider label="" name="WLBlueHorizonB"/>
+ <slider label="" name="WLBlueHorizonI"/>
<text name="BDensText">
Dis - horisont
</text>
- <button label="?" name="WLHazeHorizonHelp" />
- <slider label="" name="WLHazeHorizon" />
+ <button label="?" name="WLHazeHorizonHelp"/>
+ <slider label="" name="WLHazeHorizon"/>
<text name="BDensText2">
Blå - tæthed
</text>
- <button label="?" name="WLBlueDensityHelp" />
+ <button label="?" name="WLBlueDensityHelp"/>
<text name="BHText6">
R
</text>
@@ -50,36 +50,36 @@
<text name="BHText9">
I
</text>
- <slider label="" name="WLBlueDensityR" />
- <slider label="" name="WLBlueDensityG" />
- <slider label="" name="WLBlueDensityB" />
- <slider label="" name="WLBlueDensityI" />
+ <slider label="" name="WLBlueDensityR"/>
+ <slider label="" name="WLBlueDensityG"/>
+ <slider label="" name="WLBlueDensityB"/>
+ <slider label="" name="WLBlueDensityI"/>
<text name="HDText">
Dis - intensitet
</text>
- <button label="?" name="WLHazeDensityHelp" />
- <slider label="" name="WLHazeDensity" />
+ <button label="?" name="WLHazeDensityHelp"/>
+ <slider label="" name="WLHazeDensity"/>
<text name="DensMultText">
Densitet faktor
</text>
- <button label="?" name="WLDensityMultHelp" />
- <slider label="" name="WLDensityMult" />
+ <button label="?" name="WLDensityMultHelp"/>
+ <slider label="" name="WLDensityMult"/>
<text name="WLDistanceMultText">
Distance faktor
</text>
- <button label="?" name="WLDistanceMultHelp" />
- <slider label="" name="WLDistanceMult" />
+ <button label="?" name="WLDistanceMultHelp"/>
+ <slider label="" name="WLDistanceMult"/>
<text name="MaxAltText">
Maximum højde
</text>
- <button label="?" name="WLMaxAltitudeHelp" />
- <slider label="" name="WLMaxAltitude" />
+ <button label="?" name="WLMaxAltitudeHelp"/>
+ <slider label="" name="WLMaxAltitude"/>
</panel>
- <panel label="Lys" name="Lighting">
+ <panel label="LYS" name="Lighting">
<text name="SLCText">
Sol/MÃ¥ne farve
</text>
- <button label="?" name="WLSunlightColorHelp" />
+ <button label="?" name="WLSunlightColorHelp"/>
<text name="BHText">
R
</text>
@@ -92,19 +92,19 @@
<text name="BHText4">
I
</text>
- <slider label="" name="WLSunlightR" />
- <slider label="" name="WLSunlightG" />
- <slider label="" name="WLSunlightB" />
- <slider label="" name="WLSunlightI" />
+ <slider label="" name="WLSunlightR"/>
+ <slider label="" name="WLSunlightG"/>
+ <slider label="" name="WLSunlightB"/>
+ <slider label="" name="WLSunlightI"/>
<text name="TODText">
Sol/MÃ¥ne position
</text>
- <button label="?" name="WLTimeOfDayHelp" />
- <slider label="" name="WLSunAngle" />
+ <button label="?" name="WLTimeOfDayHelp"/>
+ <slider label="" name="WLSunAngle"/>
<text name="WLAmbientText">
Omgivende
</text>
- <button label="?" name="WLAmbientHelp" />
+ <button label="?" name="WLAmbientHelp"/>
<text name="BHText5">
R
</text>
@@ -117,37 +117,37 @@
<text name="BHText8">
I
</text>
- <slider label="" name="WLAmbientR" />
- <slider label="" name="WLAmbientG" />
- <slider label="" name="WLAmbientB" />
- <slider label="" name="WLAmbientI" />
+ <slider label="" name="WLAmbientR"/>
+ <slider label="" name="WLAmbientG"/>
+ <slider label="" name="WLAmbientB"/>
+ <slider label="" name="WLAmbientI"/>
<text name="WLEastAngleText">
Øst vinkel
</text>
- <button label="?" name="WLEastAngleHelp" />
- <slider label="" name="WLEastAngle" />
+ <button label="?" name="WLEastAngleHelp"/>
+ <slider label="" name="WLEastAngle"/>
<text name="SunGlowText">
Sol glød
</text>
- <button label="?" name="WLSunGlowHelp" />
- <slider label="Fokus " name="WLGlowB" />
- <slider label="Størr. " name="WLGlowR" />
+ <button label="?" name="WLSunGlowHelp"/>
+ <slider label="Fokus " name="WLGlowB"/>
+ <slider label="Størr. " name="WLGlowR"/>
<text name="SceneGammaText">
Lysintensitet (gamma)
</text>
- <button label="?" name="WLSceneGammaHelp" />
- <slider label="" name="WLGamma" />
+ <button label="?" name="WLSceneGammaHelp"/>
+ <slider label="" name="WLGamma"/>
<text name="WLStarText">
Stjerne intensitet
</text>
- <button label="?" name="WLStarBrightnessHelp" />
- <slider label="" name="WLStarAlpha" />
+ <button label="?" name="WLStarBrightnessHelp"/>
+ <slider label="" name="WLStarAlpha"/>
</panel>
- <panel label="Skyer" name="Clouds">
+ <panel label="SKYER" name="Clouds">
<text name="WLCloudColorText">
Farve på skyer
</text>
- <button label="?" name="WLCloudColorHelp" />
+ <button label="?" name="WLCloudColorHelp"/>
<text name="BHText">
R
</text>
@@ -160,14 +160,14 @@
<text name="BHText4">
I
</text>
- <slider label="" name="WLCloudColorR" />
- <slider label="" name="WLCloudColorG" />
- <slider label="" name="WLCloudColorB" />
- <slider label="" name="WLCloudColorI" />
+ <slider label="" name="WLCloudColorR"/>
+ <slider label="" name="WLCloudColorG"/>
+ <slider label="" name="WLCloudColorB"/>
+ <slider label="" name="WLCloudColorI"/>
<text name="WLCloudColorText2">
Skyer XY/Tæthed
</text>
- <button label="?" name="WLCloudDensityHelp" />
+ <button label="?" name="WLCloudDensityHelp"/>
<text name="BHText5">
X
</text>
@@ -177,23 +177,23 @@
<text name="BHText7">
T
</text>
- <slider label="" name="WLCloudX" />
- <slider label="" name="WLCloudY" />
- <slider label="" name="WLCloudDensity" />
+ <slider label="" name="WLCloudX"/>
+ <slider label="" name="WLCloudY"/>
+ <slider label="" name="WLCloudDensity"/>
<text name="WLCloudCoverageText">
Skydække
</text>
- <button label="?" name="WLCloudCoverageHelp" />
- <slider label="" name="WLCloudCoverage" />
+ <button label="?" name="WLCloudCoverageHelp"/>
+ <slider label="" name="WLCloudCoverage"/>
<text name="WLCloudScaleText">
Skystørrelse
</text>
- <button label="?" name="WLCloudScaleHelp" />
- <slider label="" name="WLCloudScale" />
+ <button label="?" name="WLCloudScaleHelp"/>
+ <slider label="" name="WLCloudScale"/>
<text name="WLCloudDetailText">
Sky detaljer(XY/tæthed)
</text>
- <button label="?" name="WLCloudDetailHelp" />
+ <button label="?" name="WLCloudDetailHelp"/>
<text name="BHText8">
X
</text>
@@ -203,23 +203,23 @@
<text name="BHText10">
T
</text>
- <slider label="" name="WLCloudDetailX" />
- <slider label="" name="WLCloudDetailY" />
- <slider label="" name="WLCloudDetailDensity" />
+ <slider label="" name="WLCloudDetailX"/>
+ <slider label="" name="WLCloudDetailY"/>
+ <slider label="" name="WLCloudDetailDensity"/>
<text name="WLCloudScrollXText">
Sky drift X
</text>
- <button label="?" name="WLCloudScrollXHelp" />
- <check_box label="LÃ¥s" name="WLCloudLockX" />
- <slider label="" name="WLCloudScrollX" />
+ <button label="?" name="WLCloudScrollXHelp"/>
+ <check_box label="LÃ¥s" name="WLCloudLockX"/>
+ <slider label="" name="WLCloudScrollX"/>
<text name="WLCloudScrollYText">
Sky drift Y
</text>
- <button label="?" name="WLCloudScrollYHelp" />
- <check_box label="LÃ¥s" name="WLCloudLockY" />
- <slider label="" name="WLCloudScrollY" />
- <check_box label="Benyt simple skyer" name="DrawClassicClouds" />
- <button label="?" name="WLClassicCloudsHelp" />
+ <button label="?" name="WLCloudScrollYHelp"/>
+ <check_box label="LÃ¥s" name="WLCloudLockY"/>
+ <slider label="" name="WLCloudScrollY"/>
+ <check_box label="Benyt simple skyer" name="DrawClassicClouds"/>
+ <button label="?" name="WLClassicCloudsHelp"/>
</panel>
</tab_container>
<string name="WLDefaultSkyNames">
diff --git a/indra/newview/skins/default/xui/da/floater_window_size.xml b/indra/newview/skins/default/xui/da/floater_window_size.xml
new file mode 100644
index 0000000000..db8ead21bd
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_window_size.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="window_size" title="VINDUE STØRRELSE">
+ <string name="resolution_format">
+ [RES_X] x [RES_Y]
+ </string>
+ <text name="windowsize_text">
+ Sæt størrelse på vindue:
+ </text>
+ <combo_box name="window_size_combo" tool_tip="bredde x højde">
+ <combo_box.item label="1000 x 700 (standard)" name="item0"/>
+ <combo_box.item label="1024 x 768" name="item1"/>
+ <combo_box.item label="1280 x 720 (720p)" name="item2"/>
+ <combo_box.item label="1920 x 1080 (1080p)" name="item3"/>
+ </combo_box>
+ <button label="Sæt" name="set_btn"/>
+ <button label="Annullér" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_world_map.xml b/indra/newview/skins/default/xui/da/floater_world_map.xml
index 137e8509a4..898d291f1c 100644
--- a/indra/newview/skins/default/xui/da/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/da/floater_world_map.xml
@@ -5,65 +5,66 @@
Forklaring
</text>
</panel>
- <panel>
- <button label="Vis min position" label_selected="Vis min position" name="Show My Location" tool_tip="Centrér kort om min avatars position"/>
- <text name="person_label">
+ <panel name="layout_panel_2">
+ <button name="Show My Location" tool_tip="Centrer kortet på din avatars lokation"/>
+ <text name="me_label">
Mig
</text>
- <check_box label="Beboer" name="people_chk"/>
- <check_box label="Infohub" name="infohub_chk"/>
+ <text name="person_label">
+ Person
+ </text>
<text name="infohub_label">
Infohub
</text>
- <check_box label="Land til salg" name="land_for_sale_chk"/>
<text name="land_sale_label">
Land til salg
</text>
+ <text name="by_owner_label">
+ efter ejer
+ </text>
<text name="auction_label">
- af ejer
+ land auktion
</text>
- <button label="Tag hjem" label_selected="Tag hjem" name="Go Home" tool_tip="Teleportér til min hjemmelokation"/>
+ <button name="Go Home" tool_tip="Teleportér til min hjemmelokation"/>
<text name="Home_label">
Hjem
</text>
<text name="events_label">
Events:
</text>
- <check_box label="PG" name="event_chk"/>
- <check_box initial_value="true" label="Mature" name="event_mature_chk"/>
+ <text name="pg_label">
+ Generelt
+ </text>
+ <check_box initial_value="sandt" name="event_mature_chk"/>
<text name="mature_label">
- Mature
+ Moderat
+ </text>
+ <text name="adult_label">
+ Voksent
</text>
- <check_box label="Adult" name="event_adult_chk"/>
</panel>
- <panel>
+ <panel name="layout_panel_3">
<text name="find_on_map_label">
Find på kort
</text>
</panel>
- <panel>
- <combo_box label="Venner online" name="friend combo" tool_tip="Vis venner på kort">
- <combo_box.item label="Mine venner online" name="item1"/>
+ <panel name="layout_panel_4">
+ <combo_box label="Venner online" name="friend combo" tool_tip="Vis venner på kortet">
+ <combo_box.item label="Mine venner som er online" name="item1"/>
</combo_box>
<combo_box label="Mine landemærker" name="landmark combo" tool_tip="Landemærke der skal vises på kort">
<combo_box.item label="Mine landemærker" name="item1"/>
</combo_box>
- <search_editor label="Regioner efter navn" name="location" tool_tip="Skriv navnet på en region"/>
- <button label="Find" name="DoSearch" tool_tip="Søg efter en region"/>
- <scroll_list name="search_results">
- <scroll_list.columns label="" name="icon"/>
- <scroll_list.columns label="" name="sim_name"/>
- </scroll_list>
- <button label="Teleport" label_selected="Teleport" name="Teleport" tool_tip="Teleportér til den valgte lokation"/>
- <button label="Kopiér SLurl" name="copy_slurl" tool_tip="Kopierer denne lokation som SLurl der kan bruges på web."/>
- <button label="Vis selektion" label_selected="Vis destination" name="Show Destination" tool_tip="Centrér kortet på valgte lokation"/>
+ <search_editor label="Regioner efter navn" name="location" tool_tip="Indtast navn på en region"/>
+ <button label="Find" name="DoSearch" tool_tip="Led efter region"/>
+ <button name="Clear" tool_tip="Fjern søgelinier og nulstil kort"/>
+ <button label="Teleport" name="Teleport" tool_tip="Teleportér til valgte sted"/>
+ <button label="Kopiér SLurl" name="copy_slurl" tool_tip="Kopierer nuværende lokation som SLurl der kan sendes på web."/>
+ <button label="Vis valgte" name="Show Destination" tool_tip="Centrér kortet på valgte lokation"/>
</panel>
- <panel>
+ <panel name="layout_panel_5">
<text name="zoom_label">
Zoom
</text>
</panel>
- <panel>
- <slider label="Zoom" name="zoom slider"/>
- </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/da/inspect_avatar.xml b/indra/newview/skins/default/xui/da/inspect_avatar.xml
index 1b85544303..d4bc0813e5 100644
--- a/indra/newview/skins/default/xui/da/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/da/inspect_avatar.xml
@@ -13,7 +13,7 @@
<slider name="volume_slider" tool_tip="Stemme lydstyrke" value="0.5"/>
<button label="Tilføj ven" name="add_friend_btn"/>
<button label="IM" name="im_btn"/>
- <button label="Mere" name="view_profile_btn"/>
+ <button label="Profil" name="view_profile_btn"/>
<panel name="moderator_panel">
<button label="Slå stemme-chat fra" name="disable_voice"/>
<button label="Slå stemme-chat til" name="enable_voice"/>
diff --git a/indra/newview/skins/default/xui/da/language_settings.xml b/indra/newview/skins/default/xui/da/language_settings.xml
index 71418d446a..fa8a788605 100644
--- a/indra/newview/skins/default/xui/da/language_settings.xml
+++ b/indra/newview/skins/default/xui/da/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">danish</string>
+ <string name="DarwinLocale">da_DK.UTF-8</string>
+ <string name="LinuxLocale">da_DK.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/da/menu_avatar_self.xml b/indra/newview/skins/default/xui/da/menu_avatar_self.xml
index 29620fca27..6a6831c2e3 100644
--- a/indra/newview/skins/default/xui/da/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/da/menu_avatar_self.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Self Pie">
<menu_item_call label="Stå op" name="Stand Up"/>
- <context_menu label="Tag af &gt;" name="Take Off &gt;">
- <context_menu label="Tøj &gt;" name="Clothes &gt;">
+ <context_menu label="Tag af â–¶" name="Take Off &gt;">
+ <context_menu label="Tøj ▶" name="Clothes &gt;">
<menu_item_call label="Trøje" name="Shirt"/>
<menu_item_call label="Bukser" name="Pants"/>
<menu_item_call label="Nederdel" name="Skirt"/>
@@ -16,8 +16,8 @@
<menu_item_call label="Alpha" name="Self Alpha"/>
<menu_item_call label="Alt tøj" name="All Clothes"/>
</context_menu>
- <context_menu label="HUD &gt;" name="Object Detach HUD"/>
- <context_menu label="Tag af &gt;" name="Object Detach"/>
+ <context_menu label="HUD â–¶" name="Object Detach HUD"/>
+ <context_menu label="Tag af â–¶" name="Object Detach"/>
<menu_item_call label="Tag alt af" name="Detach All"/>
</context_menu>
<menu_item_call label="Udseende" name="Appearance..."/>
diff --git a/indra/newview/skins/default/xui/da/menu_im_well_button.xml b/indra/newview/skins/default/xui/da/menu_im_well_button.xml
new file mode 100644
index 0000000000..4889230919
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+ <menu_item_call label="Luk alle" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml
index 5b8089bfe0..7434f2c3a2 100644
--- a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml
@@ -7,6 +7,7 @@
<menu_item_call label="Teleportér" name="teleport"/>
<menu_item_call label="Invitér til gruppe" name="invite_to_group"/>
<menu_item_call label="Blokér" name="block"/>
+ <menu_item_call label="Fjern blokering" name="unblock"/>
<menu_item_call label="Rapportér" name="report"/>
<menu_item_call label="Frys" name="freeze"/>
<menu_item_call label="Smid ud" name="eject"/>
@@ -14,4 +15,5 @@
<menu_item_call label="Find på kort" name="find_on_map"/>
<menu_item_call label="Zoom ind" name="zoom_in"/>
<menu_item_call label="Betal" name="pay"/>
+ <menu_item_call label="Del" name="share"/>
</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml
index 376af507d0..cdfcad9b1c 100644
--- a/indra/newview/skins/default/xui/da/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/da/menu_inventory.xml
@@ -46,9 +46,10 @@
<menu_item_call label="Teleport" name="Landmark Open"/>
<menu_item_call label="Ã¥ben" name="Animation Open"/>
<menu_item_call label="Ã¥ben" name="Sound Open"/>
+ <menu_item_call label="Erstat påklædning" name="Replace Outfit"/>
+ <menu_item_call label="Tilføj til påklædning" name="Add To Outfit"/>
<menu_item_call label="Slet ting" name="Purge Item"/>
<menu_item_call label="Genskab ting" name="Restore Item"/>
- <menu_item_call label="GÃ¥ til link" name="Goto Link"/>
<menu_item_call label="Ã¥ben" name="Open"/>
<menu_item_call label="Egenskaber" name="Properties"/>
<menu_item_call label="Omdøb" name="Rename"/>
@@ -57,13 +58,11 @@
<menu_item_call label="Indsæt" name="Paste"/>
<menu_item_call label="Sæt ind som link" name="Paste As Link"/>
<menu_item_call label="Slet" name="Delete"/>
- <menu_item_call label="Tag ting af" name="Take Off Items"/>
- <menu_item_call label="Tilføj til påklædning" name="Add To Outfit"/>
- <menu_item_call label="Erstat påklædning" name="Replace Outfit"/>
+ <menu_item_call label="Slet systemfolder" name="Delete System Folder"/>
<menu_item_call label="start konference chat" name="Conference Chat Folder"/>
<menu_item_call label="Afspil" name="Sound Play"/>
<menu_item_call label="Om landemærke" name="About Landmark"/>
- <menu_item_call label="Afspil offentligt" name="Animation Play"/>
+ <menu_item_call label="Afspil i verden" name="Animation Play"/>
<menu_item_call label="Afspil lokalt" name="Animation Audition"/>
<menu_item_call label="Send privat besked (IM)" name="Send Instant Message"/>
<menu_item_call label="Tilbyd teleport..." name="Offer Teleport..."/>
diff --git a/indra/newview/skins/default/xui/da/menu_login.xml b/indra/newview/skins/default/xui/da/menu_login.xml
index 0942f1b807..7fc7d43c20 100644
--- a/indra/newview/skins/default/xui/da/menu_login.xml
+++ b/indra/newview/skins/default/xui/da/menu_login.xml
@@ -21,8 +21,8 @@
</menu>
<menu_item_call label="Vis debug opsætning" name="Debug Settings"/>
<menu_item_call label="UI/farve opsætning" name="UI/Color Settings"/>
- <menu_item_call label="Vis sidebakke" name="Show Side Tray"/>
<menu label="UI tests" name="UI Tests"/>
+ <menu_item_call label="Sæt vinduesstørrelse" name="Set Window Size..."/>
<menu_item_call label="Vis betingelser" name="TOS"/>
<menu_item_call label="Vis vigtig besked" name="Critical"/>
<menu_item_call label="Test i web browser" name="Web Browser Test"/>
diff --git a/indra/newview/skins/default/xui/da/menu_mini_map.xml b/indra/newview/skins/default/xui/da/menu_mini_map.xml
index 667638c529..38486cdecb 100644
--- a/indra/newview/skins/default/xui/da/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/da/menu_mini_map.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
+<menu name="Popup">
<menu_item_call label="Zoom tæt" name="Zoom Close"/>
<menu_item_call label="Zoom mellem" name="Zoom Medium"/>
<menu_item_call label="Zoom langt" name="Zoom Far"/>
<menu_item_check label="Rotér kort" name="Rotate Map"/>
- <menu_item_call label="Stop Tracking" name="Stop Tracking"/>
+ <menu_item_call label="Fjern ref." name="Stop Tracking"/>
<menu_item_call label="Verdenskort" name="World Map"/>
</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_notification_well_button.xml b/indra/newview/skins/default/xui/da/menu_notification_well_button.xml
new file mode 100644
index 0000000000..40b35b5fdd
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+ <menu_item_call label="Luk alle" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_object.xml b/indra/newview/skins/default/xui/da/menu_object.xml
index 0714b67ec3..c98a07e140 100644
--- a/indra/newview/skins/default/xui/da/menu_object.xml
+++ b/indra/newview/skins/default/xui/da/menu_object.xml
@@ -5,19 +5,22 @@
<menu_item_call label="Byg" name="Build"/>
<menu_item_call label="Ã…ben" name="Open"/>
<menu_item_call label="Sid her" name="Object Sit"/>
+ <menu_item_call label="Stå op" name="Object Stand Up"/>
<menu_item_call label="Objekt profil" name="Object Inspect"/>
- <context_menu label="Sæt på &gt;" name="Put On">
+ <menu_item_call label="Zoom In" name="Zoom In"/>
+ <context_menu label="Tag på ▶" name="Put On">
<menu_item_call label="Tag på" name="Wear"/>
- <context_menu label="Vedhæft &gt;" name="Object Attach"/>
- <context_menu label="Vedhæft HUD &gt;" name="Object Attach HUD"/>
+ <context_menu label="Vedhæft ▶" name="Object Attach"/>
+ <context_menu label="Vedhæft HUD ▶" name="Object Attach HUD"/>
</context_menu>
- <context_menu label="Fjern &gt;" name="Remove">
- <menu_item_call label="Tag" name="Pie Object Take"/>
+ <context_menu label="Fjern â–¶" name="Remove">
<menu_item_call label="Rapportér misbrug" name="Report Abuse..."/>
<menu_item_call label="Blokér" name="Object Mute"/>
<menu_item_call label="Returnér" name="Return..."/>
<menu_item_call label="Slet" name="Delete"/>
</context_menu>
+ <menu_item_call label="Køb" name="Pie Object Bye"/>
+ <menu_item_call label="Tag" name="Pie Object Take"/>
<menu_item_call label="Tag kopi" name="Take Copy"/>
<menu_item_call label="Betal" name="Pay..."/>
<menu_item_call label="Køb" name="Buy..."/>
diff --git a/indra/newview/skins/default/xui/da/menu_participant_list.xml b/indra/newview/skins/default/xui/da/menu_participant_list.xml
index 44a016026c..c2595dcb3d 100644
--- a/indra/newview/skins/default/xui/da/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/da/menu_participant_list.xml
@@ -1,16 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Participant List Context Menu">
+ <menu_item_check label="Sortér efter navn" name="SortByName"/>
+ <menu_item_check label="Sortér efter nylige talere" name="SortByRecentSpeakers"/>
<menu_item_call label="Profil" name="View Profile"/>
<menu_item_call label="Tilføj ven" name="Add Friend"/>
<menu_item_call label="Send besked" name="IM"/>
<menu_item_call label="Opkald" name="Call"/>
<menu_item_call label="Del" name="Share"/>
<menu_item_call label="Betal" name="Pay"/>
- <menu_item_check label="Blokér/Fjern blokering" name="Block/Unblock"/>
- <menu_item_check label="Sluk for tekst" name="MuteText"/>
- <menu_item_check label="Tillad tekst chat" name="AllowTextChat"/>
- <menu_item_call label="Sluk for denne deltager" name="ModerateVoiceMuteSelected"/>
- <menu_item_call label="Sluk for alle andre" name="ModerateVoiceMuteOthers"/>
- <menu_item_call label="Ã…ben for denne deltager" name="ModerateVoiceUnMuteSelected"/>
- <menu_item_call label="Ã…ben for alle andre" name="ModerateVoiceUnMuteOthers"/>
+ <menu_item_check label="Blokér stemme" name="Block/Unblock"/>
+ <menu_item_check label="Blokér tekst" name="MuteText"/>
+ <context_menu label="Moderator muligheder &gt;" name="Moderator Options">
+ <menu_item_check label="Tillad tekst chat" name="AllowTextChat"/>
+ <menu_item_call label="Sluk for denne deltager" name="ModerateVoiceMuteSelected"/>
+ <menu_item_call label="Sluk for alle andre" name="ModerateVoiceMuteOthers"/>
+ <menu_item_call label="Fjern slukning for denne deltager" name="ModerateVoiceUnMuteSelected"/>
+ <menu_item_call label="Fjern slukning for alle andre" name="ModerateVoiceUnMuteOthers"/>
+ </context_menu>
</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_people_groups.xml b/indra/newview/skins/default/xui/da/menu_people_groups.xml
new file mode 100644
index 0000000000..841f58b619
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+ <menu_item_call label="Se info" name="View Info"/>
+ <menu_item_call label="Chat" name="Chat"/>
+ <menu_item_call label="Opkald" name="Call"/>
+ <menu_item_call label="Aktivér" name="Activate"/>
+ <menu_item_call label="Forlad" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby.xml b/indra/newview/skins/default/xui/da/menu_people_nearby.xml
index 224190149b..5470c32761 100644
--- a/indra/newview/skins/default/xui/da/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/da/menu_people_nearby.xml
@@ -2,9 +2,12 @@
<context_menu name="Avatar Context Menu">
<menu_item_call label="Profil" name="View Profile"/>
<menu_item_call label="Tilføj ven" name="Add Friend"/>
+ <menu_item_call label="Fjern ven" name="Remove Friend"/>
<menu_item_call label="Besked" name="IM"/>
<menu_item_call label="Opkald" name="Call"/>
+ <menu_item_call label="Kort" name="Map"/>
<menu_item_call label="Del" name="Share"/>
<menu_item_call label="Betal" name="Pay"/>
<menu_item_check label="Blokér/Fjern blokering" name="Block/Unblock"/>
+ <menu_item_call label="Tilbyd teleport" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml
index 92c6d2c960..08b7136b97 100644
--- a/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Multi-Selected People Context Menu">
<menu_item_call label="Tilføj venner" name="Add Friends"/>
+ <menu_item_call label="Fjern venner" name="Remove Friend"/>
<menu_item_call label="Besked" name="IM"/>
<menu_item_call label="Opkald" name="Call"/>
<menu_item_call label="Del" name="Share"/>
diff --git a/indra/newview/skins/default/xui/da/menu_profile_overflow.xml b/indra/newview/skins/default/xui/da/menu_profile_overflow.xml
index 58fbc62643..6745007c99 100644
--- a/indra/newview/skins/default/xui/da/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/da/menu_profile_overflow.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="profile_overflow_menu">
+ <menu_item_call label="Kort" name="show_on_map"/>
<menu_item_call label="Betal" name="pay"/>
<menu_item_call label="Del" name="share"/>
+ <menu_item_call label="Blokér" name="block"/>
+ <menu_item_call label="Fjern blokering" name="unblock"/>
+ <menu_item_call label="Spark" name="kick"/>
+ <menu_item_call label="Frys" name="freeze"/>
+ <menu_item_call label="Fjern frys" name="unfreeze"/>
+ <menu_item_call label="Kundeservicemedarbejder (CSR)" name="csr"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index ec0631d54f..7e7d1b190a 100644
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -7,8 +7,8 @@
<menu_item_call label="Profil" name="Profile"/>
<menu_item_call label="Udseende" name="Appearance"/>
<menu_item_check label="Beholdning" name="Inventory"/>
- <menu_item_call label="Vis beholdning i sidebakke" name="ShowSidetrayInventory"/>
- <menu_item_call label="Mine bevægelser" name="Gestures"/>
+ <menu_item_check label="Min beholdning" name="ShowSidetrayInventory"/>
+ <menu_item_check label="Mine bevægelser" name="Gestures"/>
<menu label="Min status" name="Status">
<menu_item_call label="Væk" name="Set Away"/>
<menu_item_call label="Optaget" name="Set Busy"/>
@@ -22,35 +22,36 @@
<menu_item_call label="Grupper" name="My Groups"/>
<menu_item_check label="Chat i nærheden" name="Nearby Chat"/>
<menu_item_call label="Personer tæt på" name="Active Speakers"/>
- <menu_item_check label="Media i nærheden" name="Nearby Media"/>
</menu>
<menu label="Verden" name="World">
- <menu_item_check label="Flyt" name="Movement Controls"/>
- <menu_item_check label="Vis" name="Camera Controls"/>
- <menu_item_call label="Om land" name="About Land"/>
- <menu_item_call label="Region/Estate" name="Region/Estate"/>
- <menu_item_call label="Køb land" name="Buy Land"/>
+ <menu_item_check label="Mini-kort" name="Mini-Map"/>
+ <menu_item_check label="Verdenskort" name="World Map"/>
+ <menu_item_call label="Foto" name="Take Snapshot"/>
+ <menu_item_call label="Opret landemærke for dette sted" name="Create Landmark Here"/>
+ <menu label="Profil for sted" name="Land">
+ <menu_item_call label="Om land" name="About Land"/>
+ <menu_item_call label="Region/Estate" name="Region/Estate"/>
+ </menu>
+ <menu_item_call label="Køb dette land" name="Buy Land"/>
<menu_item_call label="Mit land" name="My Land"/>
- <menu label="Vis" name="Land">
- <menu_item_check label="Ban Lines" name="Ban Lines"/>
+ <menu label="Vis" name="LandShow">
+ <menu_item_check label="Bevægelses kontrol" name="Movement Controls"/>
+ <menu_item_check label="Kontroller" name="Camera Controls"/>
+ <menu_item_check label="&apos;Ingen adgang&apos; markering" name="Ban Lines"/>
<menu_item_check label="Pejlelys" name="beacons"/>
<menu_item_check label="Parcel skel" name="Property Lines"/>
- <menu_item_check label="Land-ejere" name="Land Owners"/>
- </menu>
- <menu label="Landemærker" name="Landmarks">
- <menu_item_call label="Opret landemærke her" name="Create Landmark Here"/>
- <menu_item_call label="Sæt hjem til her" name="Set Home to Here"/>
+ <menu_item_check label="Grundejere" name="Land Owners"/>
+ <menu_item_check label="Koordinater" name="Coordinates"/>
+ <menu_item_check label="Parcel egenskaber" name="Parcel Properties"/>
</menu>
- <menu_item_call label="Hjem" name="Teleport Home"/>
- <menu_item_check label="Mini-kort" name="Mini-Map"/>
- <menu_item_check label="Verdenskort" name="World Map"/>
- <menu_item_call label="Foto" name="Take Snapshot"/>
+ <menu_item_call label="Teleport hjem" name="Teleport Home"/>
+ <menu_item_call label="Sæt dette sted som &apos;Hjem&apos;" name="Set Home to Here"/>
<menu label="Sol" name="Environment Settings">
<menu_item_call label="Solopgang" name="Sunrise"/>
<menu_item_call label="Middag" name="Noon"/>
<menu_item_call label="Solnedgang" name="Sunset"/>
<menu_item_call label="Midnat" name="Midnight"/>
- <menu_item_call label="Benyt tid fra estate" name="Revert to Region Default"/>
+ <menu_item_call label="Estate tid" name="Revert to Region Default"/>
<menu_item_call label="Redigering af omgivelser" name="Environment Editor"/>
</menu>
</menu>
@@ -74,66 +75,60 @@
<menu_item_call label="Vælg alt" name="Select All"/>
<menu_item_call label="Fravælg" name="Deselect"/>
</menu>
- <menu_item_call label="Sammenkæde" name="Link"/>
+ <menu_item_call label="Sammenkæd" name="Link"/>
<menu_item_call label="Adskil" name="Unlink"/>
+ <menu_item_check label="Redigér sammekædede objekter" name="Edit Linked Parts"/>
<menu_item_call label="Fokusér på valgte" name="Focus on Selection"/>
<menu_item_call label="Zoom til valgte" name="Zoom to Selection"/>
<menu label="Objekt" name="Object">
- <menu_item_call label="Køb" name="Menu Object Take"/>
+ <menu_item_call label="Køb" name="Menu Object Buy"/>
+ <menu_item_call label="Tag" name="Menu Object Take"/>
<menu_item_call label="Tag kopi" name="Take Copy"/>
<menu_item_call label="Opdatér ændringer til beholdning" name="Save Object Back to My Inventory"/>
<menu_item_call label="Opdater ændringer i indhold til objekt" name="Save Object Back to Object Contents"/>
</menu>
<menu label="Scripts" name="Scripts">
- <menu_item_call label="Rekompilér scripts (Mono)" name="Mono"/>
+ <menu_item_call label="Genoversæt scripts (Mono)" name="Mono"/>
<menu_item_call label="Genoversæt scripts (LSL)" name="LSL"/>
<menu_item_call label="Genstart scripts" name="Reset Scripts"/>
- <menu_item_call label="sæt scripts til &quot;Running&quot;" name="Set Scripts to Running"/>
+ <menu_item_call label="Sæt scripts til &quot;Running&quot;" name="Set Scripts to Running"/>
<menu_item_call label="Sæt scripts til &quot;Not Running&quot;" name="Set Scripts to Not Running"/>
</menu>
<menu label="Valg" name="Options">
- <menu_item_check label="Redigér sammenlænkede dele" name="Edit Linked Parts"/>
<menu_item_call label="Sæt standard rettigheder" name="perm prefs"/>
<menu_item_check label="Vis avancerede rettigheder" name="DebugPermissions"/>
- <menu label="Selektion" name="Selection">
- <menu_item_check label="Vælg kun egne objekter" name="Select Only My Objects"/>
- <menu_item_check label="Vælg kun flytbare objekter" name="Select Only Movable Objects"/>
- <menu_item_check label="Vælg ved at omkrandse" name="Select By Surrounding"/>
- </menu>
- <menu label="Vis" name="Show">
- <menu_item_check label="Vis skjult selektion" name="Show Hidden Selection"/>
- <menu_item_check label="Vis lys-radius for valgte" name="Show Light Radius for Selection"/>
- <menu_item_check label="Vis udvælgelses stråle" name="Show Selection Beam"/>
- </menu>
- <menu label="Gitter" name="Grid">
- <menu_item_check label="Ret ind til gitter" name="Snap to Grid"/>
- <menu_item_call label="Ret XY for objekt ind til gitter" name="Snap Object XY to Grid"/>
- <menu_item_call label="Benyt valgte som grundlag for gitter" name="Use Selection for Grid"/>
- <menu_item_call label="Gitter valg" name="Grid Options"/>
- </menu>
+ <menu_item_check label="Vælg kun egne objekter" name="Select Only My Objects"/>
+ <menu_item_check label="Vis kun flytbare objekter" name="Select Only Movable Objects"/>
+ <menu_item_check label="Vælg ved at omkrandse" name="Select By Surrounding"/>
+ <menu_item_check label="Vis skjulte objekter" name="Show Hidden Selection"/>
+ <menu_item_check label="Vis lys-radius for valgte" name="Show Light Radius for Selection"/>
+ <menu_item_check label="Vis pejlelys for valgte" name="Show Selection Beam"/>
+ <menu_item_check label="Ret ind til gitter" name="Snap to Grid"/>
+ <menu_item_call label="Ret XY for objekt ind til gitter" name="Snap Object XY to Grid"/>
+ <menu_item_call label="Benyt valgte som grundlag for gitter" name="Use Selection for Grid"/>
+ <menu_item_call label="Gitter indstillinger" name="Grid Options"/>
</menu>
<menu label="Vis lænkede dele" name="Select Linked Parts">
<menu_item_call label="Vælg næste del" name="Select Next Part"/>
<menu_item_call label="Vælg forrige del" name="Select Previous Part"/>
- <menu_item_call label="Inkludér næste valg" name="Include Next Part"/>
+ <menu_item_call label="Inkludér næste del" name="Include Next Part"/>
<menu_item_call label="Inkludér forrige del" name="Include Previous Part"/>
</menu>
</menu>
<menu label="Hjælp" name="Help">
<menu_item_call label="[SECOND_LIFE] Help" name="Second Life Help"/>
- <menu_item_call label="Tutorial" name="Tutorial"/>
<menu_item_call label="Rapporter misbrug" name="Report Abuse"/>
<menu_item_call label="Rapportér fejl" name="Report Bug"/>
</menu>
<menu label="Avanceret" name="Advanced">
- <menu_item_check label="Sæt til &quot;væk&quot; efter 30 minutter" name="Go Away/AFK When Idle"/>
<menu_item_call label="Stop animering af min avatar" name="Stop Animating My Avatar"/>
<menu_item_call label="Gendan teksturer" name="Rebake Texture"/>
<menu_item_call label="Sæt UI størrelse til standard" name="Set UI Size to Default"/>
+ <menu_item_call label="Vælg vinduesstørrelse..." name="Set Window Size..."/>
<menu_item_check label="Begræns valg afstand" name="Limit Select Distance"/>
<menu_item_check label="Fjern kamerabegrænsninger" name="Disable Camera Distance"/>
<menu_item_check label="Højopløsningsfoto" name="HighResSnapshot"/>
- <menu_item_check label="Lydløse foto&apos;s til disk" name="QuietSnapshotsToDisk"/>
+ <menu_item_check label="Lydløse fotos til disk" name="QuietSnapshotsToDisk"/>
<menu_item_check label="Komprimér fotos til disk" name="CompressSnapshotsToDisk"/>
<menu label="Værktøjer til ydelse" name="Performance Tools">
<menu_item_call label="Lag meter" name="Lag Meter"/>
@@ -154,7 +149,7 @@
<menu_item_check label="Alpha" name="Alpha"/>
<menu_item_check label="Træer" name="Tree"/>
<menu_item_check label="Avatarer" name="Character"/>
- <menu_item_check label="SurfacePath" name="SurfacePath"/>
+ <menu_item_check label="Overflade" name="SurfacePath"/>
<menu_item_check label="Himmel" name="Sky"/>
<menu_item_check label="Vand" name="Water"/>
<menu_item_check label="Jord" name="Ground"/>
@@ -173,11 +168,11 @@
<menu_item_check label="TÃ¥ge" name="Fog"/>
<menu_item_check label="Fleksible objekter" name="Flexible Objects"/>
</menu>
- <menu_item_check label="Kør flere tråde" name="Run Multiple Threads"/>
+ <menu_item_check label="Kør flere 'threats'" name="Run Multiple Threads"/>
<menu_item_call label="Tøm gruppe cache" name="ClearGroupCache"/>
<menu_item_check label="Muse udjævning" name="Mouse Smoothing"/>
- <menu_item_check label="Vis IM&apos;s i lokal chat" name="IMInChat"/>
<menu label="Shortcuts" name="Shortcuts">
+ <menu_item_call label="Billede (L$[COST])..." name="Upload Image"/>
<menu_item_check label="Søg" name="Search"/>
<menu_item_call label="Frigør taster" name="Release Keys"/>
<menu_item_call label="Sæt UI størrelse til standard" name="Set UI Size to Default"/>
@@ -217,6 +212,7 @@
<menu_item_call label="Vis Regionsinfo i debug-konsol" name="Region Info to Debug Console"/>
<menu_item_check label="Kamera" name="Camera"/>
<menu_item_check label="Vind" name="Wind"/>
+ <menu_item_check label="Badge" name="Badge"/>
</menu>
<menu label="Vis info" name="Display Info">
<menu_item_check label="Vis tid" name="Show Time"/>
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 42eac1be7a..30e19ee901 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -11,18 +11,29 @@
</global>
<template name="okbutton">
<form>
- <button name="OK" text="$yestext"/>
+ <button name="OK_okbutton" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okignore">
+ <form>
+ <button name="OK_okignore" text="$yestext"/>
</form>
</template>
- <template name="okignore"/>
<template name="okcancelbuttons">
<form>
- <button name="Cancel" text="$notext"/>
+ <button name="OK_okcancelbuttons" text="$yestext"/>
+ <button name="Cancel_okcancelbuttons" text="$notext"/>
+ </form>
+ </template>
+ <template name="okcancelignore">
+ <form>
+ <button name="OK_okcancelignore" text="$yestext"/>
+ <button name="Cancel_okcancelignore" text="$notext"/>
</form>
</template>
- <template name="okcancelignore"/>
<template name="okhelpbuttons">
<form>
+ <button name="OK_okhelpbuttons" text="$yestext"/>
<button name="Help" text="$helptext"/>
</form>
</template>
@@ -30,6 +41,7 @@
<form>
<button name="Yes" text="$yestext"/>
<button name="No" text="$notext"/>
+ <button name="Cancel_yesnocancelbuttons" text="$canceltext"/>
</form>
</template>
<notification functor="GenericAcknowledge" label="Ukendt notificeringsbesked" name="MissingAlert">
@@ -93,13 +105,17 @@ Vælg kun en genstand, og prøv igen.
Gem alle ændringer til tøj/krops dele?
<usetemplate canceltext="Annullér" name="yesnocancelbuttons" notext="Gem Ikke" yestext="Gem Alt"/>
</notification>
+ <notification name="FriendsAndGroupsOnly">
+ &apos;Ikke-venner&apos; vil ikke vide, at du har valgt at ignorere deres opkald og personlige beskeder (IM)
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="GrantModifyRights">
- At give redigerings rettigheder til en anden beboer, giver dem mulighed for at ændre, slette eller tage alle genstande, du måtte have i verden. Vær meget forsigtig når uddeler denne tilladelse.
+ At give redigerings rettigheder til en anden beboer, giver dem mulighed for at ændre, slette eller tage ALLE genstande, du måtte have i verden. Vær MEGET forsigtig når uddeler denne tilladelse.
Ønsker du at ændre rettigheder for [FIRST_NAME] [LAST_NAME]?
<usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/>
</notification>
<notification name="GrantModifyRightsMultiple">
- At give redigerings rettigheder til en anden beboer, giver dem mulighed for at ændre, slette eller tage alle genstande, du måtte have i verden. Vær meget forsigtig når uddeler denne tilladelse.
+ At give redigerings rettigheder til en anden beboer, giver dem mulighed for at ændre, slette eller tage ALLE genstande, du måtte have i verden. Vær MEGET forsigtig når uddeler denne tilladelse.
Ønsker du at ændre rettigheder for de valgte beboere?
<usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/>
</notification>
@@ -142,8 +158,15 @@ Ethvert medlem i en rolle med denne evne kan tildele sig selv -- og et andet med
Add this Ability to &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/>
</notification>
- <notification name="ClickUnimplemented">
- Beklager, ikke implementeret endnu.
+ <notification name="AttachmentDrop">
+ Du er ved at smide et vedhæng.
+ Er du sikker på at du vil fortsætte?
+ <usetemplate ignoretext="Bekræft før vedhæng smides" name="okcancelignore" notext="Nej" yestext="Ja"/>
+ </notification>
+ <notification name="JoinGroupNoCost">
+ Du melder dig ind i gruppen [NAME].
+Ønsker du at fortsætte?
+ <usetemplate name="okcancelbuttons" notext="Annullér" yestext="Bliv medlem"/>
</notification>
<notification name="JoinGroupCannotAfford">
Tilmelding til denne gruppe koster L$[COST].
@@ -197,19 +220,15 @@ Jo mere du betaler, jo højere oppe på listen vises annoncen, og den vil også
Er du sikker på at du vil fortsætte?
<usetemplate ignoretext="Bekræft før jeg slette media i et objekt" name="okcancelignore" notext="Nej" yestext="Ja"/>
</notification>
- <notification name="ResetShowNextTimeDialogs">
- Vil du gerne genaktivere alle disse popups, som du tidligere har bedt om ikke at få vist?
- <usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/>
- </notification>
- <notification name="SkipShowNextTimeDialogs">
- Vil du deaktivere alle popups som kan undværes?
- <usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/>
+ <notification name="ClassifiedInsufficientFunds">
+ Ikke nok penge til at oprette annonce.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CacheWillClear">
Cache vil blive tømt ved næste genstart af [APP_NAME].
</notification>
<notification name="CacheWillBeMoved">
- Cache vil blive flyttet ved næste genstart af [APP_NAME].
+ Cache vil blive fjernet ved næste genstart af [APP_NAME].
Note: This will clear the cache.
</notification>
<notification name="ChangeConnectionPort">
@@ -224,11 +243,14 @@ Indtast venligst navn på region i Start lokation feltet eller vælg &quot;Min s
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="UnsupportedHardware">
+ Din computer opfylder ikke minimumskravene til [APP_NAME]. Du kan risikere nedsat hastighed. Desværre kan [SUPPORT_SITE] ikke tilbyde teknisk support til konfigurationer der ikke er understøttet.
+
+Besøg [_URL] for yderligere information?
<usetemplate ignoretext="Din computer hardware understøttes ikke" name="okcancelignore" notext="No" yestext="Yes"/>
</notification>
<notification name="UnknownGPU">
- Dit system har et grafikkort som er ukendt for [APP_NAME] lige nu.
-Dette er tilfældet med nyt hardware som endnu ikke er blevet testet med [APP_NAME]. [APP_NAME] vil sandsynligvis kunne køre normalt, men det kan være nødvendigt at justere opsætningen af grafik.
+ Dit system indeholder et grafikkort som [APP_NAME] ikke kan genkende.
+Dette skyldes ofte nyt hardware som endnu ikke er blevet testet med [APP_NAME]. Kortet vil sandsynligvis virke fint, med det kan være nødvendigt at justere grafik opsætningen.
(Mig &gt; Indstillinger &gt; Grafik).
<form name="form">
<ignore name="ignore" text="Dit grafikkort kunne ikke identificeres"/>
@@ -260,9 +282,17 @@ Gå til [_URL] for information om køb af L$?
<notification name="LandmarkCreated">
Du har tilføjet &quot;[LANDMARK_NAME]&quot; til din [FOLDER_NAME] mappe.
</notification>
+ <notification name="LandmarkAlreadyExists">
+ Du har allerede et landemærke for denne lokation.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="CannotOpenScriptObjectNoMod">
Ikke muligt at åbne script i objekt uden &apos;Redigére&apos; rettigheder.
</notification>
+ <notification name="CouldNotTeleportReason">
+ Teleport fejlede.
+[REASON]
+ </notification>
<notification name="invalid_tport">
Der opstod et problem ved din teleport. Det kan være nødvendigt at logge ind igen, før du kan teleporte.
Hvis du bliver ved med at få denne fejl, check venligst [SUPPORT_SITE].
@@ -305,6 +335,10 @@ Prøv evt. igen om lidt.
<notification name="no_inventory_host">
Beholdningssystemet er ikke tilgængelig lige nu.
</notification>
+ <notification name="ForceOwnerAuctionWarning">
+ Denne parcel er sat på auktion. Gennemtving ejerskab vil annullere denne auktion og måske irritere nogen beboere hvis bud allerede er afgivet.
+Gennemtving ejerskab?
+ </notification>
<notification name="CannotBuyLandNoRegion">
Ikke i stand til at købe land:
Kan ikke finde region som dette land er i.
@@ -316,13 +350,6 @@ Kan ikke finde region som dette land er i.
Land kunne ikke dedikeres:
Kunne ikke finde den region land ligger i.
</notification>
- <notification name="ParcelCanPlayMedia">
- Dette sted kan afspille &apos;streaming media&apos;.
-&apos;Streaming media&apos; kræver en hurtig internet opkobling.
-
-Afspil altid &apos;streaming media&apos; når det er tilgængeligt?
-(Du kan ændre dette valg senere under Indstillinger &gt; Privatliv.)
- </notification>
<notification name="CannotReleaseLandRegionNotFound">
Kunne ikke efterlade land:
Kan ikke finde den region landet ligger i.
@@ -340,9 +367,8 @@ Kan ikke finde den region landet ligger i.
Dette er typisk en midlertidig fejl. Venligst rediger og gem igen om et par minutter.
</notification>
<notification name="YouHaveBeenLoggedOut">
- Du er blevet logget af [SECOND_LIFE]:
+ Du er blevet logget af [SECOND_LIFE]
[MESSAGE]
-Du kan stadig se igangværende samtaler (IM) og chat ved at klikke på &apos;Se IM &amp; chat. Ellers klik på &apos;Afslut&apos; for at lukke [APP_NAME] med det samme.
<usetemplate name="okcancelbuttons" notext="Afslut" yestext="Se PB &amp; Chat"/>
</notification>
<notification label="Tilføj ven" name="AddFriend">
@@ -365,6 +391,9 @@ Tilbyd venskab til [NAME]?
<button name="Cancel" text="Annullér"/>
</form>
</notification>
+ <notification name="ErrorMessage">
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="AvatarMovedDesired">
Den ønskede lokation er ikke tilgængelig lige nu.
Du er blevet flyttet til en region in nærheden.
@@ -496,6 +525,10 @@ Download til dit Program bibliotek?
<notification name="ReturnToOwner">
<usetemplate ignoretext="Bekræft før objekter returneres til deres ejere" name="okcancelignore" notext="Cancel" yestext="OK"/>
</notification>
+ <notification name="ConfirmKick">
+ Er du SIKKER på at du vil sparke alle beboere ud?
+ <usetemplate name="okcancelbuttons" notext="Cancel" yestext="Spark alle beboere ud"/>
+ </notification>
<notification name="MuteLinden">
Beklager, men du kan ikke blokere en Linden.
</notification>
@@ -511,9 +544,21 @@ Chat og personlige beskeder vil blive skjult. Personlige beskeder vil få din &a
<usetemplate ignoretext="Jeg skrifter min status til &apos;optaget" name="okignore" yestext="OK"/>
</notification>
<notification name="JoinedTooManyGroupsMember">
- Du har nået det maksimale antal grupper. Du skal forlade en anden gruppe for at kunne være med i denne - eller afvis tilbudet.
-[NAME] har inviteret dig til at være medlem af en gruppe.
-[INVITE]
+ Du er oppe på det maksimale antal grupper. Forlad venligst en anden gruppe inden du melder dig ind i denne, eller afvis tilbuddet.
+[NAME] har inviteret dig til en gruppe.
+ </notification>
+ <notification name="JoinedTooManyGroups">
+ Du er oppe på det maksimale antal grupper. Forlad venligst en gruppe inden du melder dig ind i enndnu en gruppe eller opretter en ny.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="KickUser">
+ Spark beboere ud med hvilken besked?
+ </notification>
+ <notification name="FreezeUser">
+ Frys beboeren med hvilken besked?
+ </notification>
+ <notification name="UnFreezeUser">
+ Fjern frysning af beboeren med hvilken besked?
</notification>
<notification name="OfferTeleport">
<form name="form">
@@ -524,7 +569,11 @@ Chat og personlige beskeder vil blive skjult. Personlige beskeder vil få din &a
<button name="Cancel" text="Annullér"/>
</form>
</notification>
+ <notification name="OfferTeleportFromGod">
+ Tilkald beboer til din lokation?
+ </notification>
<notification name="TeleportFromLandmark">
+ Er du sikker på at du vil teleportere til &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
<usetemplate ignoretext="Bekræft at jeg vil teleportere til et landemærke" name="okcancelignore" notext="Cancel" yestext="Teleport"/>
</notification>
<notification name="TeleportToPick">
@@ -535,6 +584,13 @@ Chat og personlige beskeder vil blive skjult. Personlige beskeder vil få din &a
Teleport til [CLASSIFIED]?
<usetemplate ignoretext="Bekræft at du ønsker at teleportere til lokation in annoncer" name="okcancelignore" notext="Annullér" yestext="Teleport"/>
</notification>
+ <notification label="Change Linden Estate" name="ChangeLindenEstate">
+ Du er i færd med at ændre et Linden ejet estate (mainland, teeen grid, orientation etc.).
+
+Dette er EKSTREMT FARLIGT da det kan ændre beboernes oplevelse fundamentalt. På mainland vil dette betyde ændring af tusinder af regioner og få spaceserveren til at kløjs i det.
+
+Fortsæt?
+ </notification>
<notification name="RegionEntryAccessBlocked">
Du har ikke adgang til denne region på grund af din valgte indholdsrating. Dette kan skyldes manglende validering af din alder.
@@ -626,6 +682,12 @@ Du kan klikke på &apos;Ændre præference&apos; for at ændre din indholdsratin
Indeholder denne gruppe &apos;Mature&apos; indhold?
<usetemplate canceltext="Annullér" name="yesnocancelbuttons" notext="Nej" yestext="Ja"/>
</notification>
+ <notification label="Changed Region Maturity" name="RegionMaturityChange">
+ Ratingen for denne region er ændret.
+Det kan tage noget tid inden ændringen slår igennem på kortet.
+
+For at få adgang til voksen regioner, skal beboere være alders-checket, enten via aldersverifikation eller betalingsverifikation.
+ </notification>
<notification label="Voice Version Mismatch" name="VoiceVersionMismatch">
Denne version af [APP_NAME] er ikke kompatibel med stemme chat funktionen i denne region. For at kunne få stemme chat til at fungere skal du opdatere [APP_NAME].
</notification>
@@ -649,9 +711,9 @@ Du kan klikke på &apos;Ændre præference&apos; for at ændre din indholdsratin
<usetemplate ignoretext="Bekræft før jeg afslutter" name="okcancelignore" notext="Afslut ikke" yestext="Quit"/>
</notification>
<notification name="HelpReportAbuseEmailLL">
- Benyt dette værktøj til at rapportere Use this tool to report krænkelser af [http://secondlife.com/corporate/tos.php Terms of Service] og [http://secondlife.com/corporate/cs.php Community Standards].
+ Benyt dette værktøj til at rapportere krænkninger af [http://secondlife.com/corporate/tos.php Terms of Service] og [http://secondlife.com/corporate/cs.php Community Standards].
-Alle indrapporterede krænkelser er undersøgt og and afgjort. Du kan se løsning ved at læse [http://secondlife.com/support/incidentreport.php Incident Report].
+Alle rapporter om krænkninger vil blive undersøgt og behandlet.
</notification>
<notification name="HelpReportAbuseContainsCopyright">
Kære beboer,
@@ -792,8 +854,7 @@ Henvis til dette fra en hjemmeside for at give andre nem adgang til denne lokati
Bevægelsen [NAME] mangler i databasen.
</notification>
<notification name="UnableToLoadGesture">
- Ikke muligt at indlæse gestus [NAME].
-Prøv venligst igen.
+ Kunne ikke indlæse læse bevægelse [NAME].
</notification>
<notification name="LandmarkMissing">
Landmærke mangler i databasen.
@@ -885,10 +946,9 @@ Click on any landmark to select it, then click &apos;Teleport&apos; at the botto
(You can also double-click on the landmark, or right-click it and choose &apos;Teleport&apos;.)
</notification>
<notification name="TeleportToPerson">
- Du kan kontakte beboere som f.eks. &apos;[NAME]&apos; ved at åbne &apos;Personer&apos; panelet til højre på skærmen.
-Vælg beboeren fra listen og klik så på &apos;IM&apos; i bunden af panelet.
-(Du kan også dobbelt-klikke på navnet i listen eller højreklikke og vælge &apos;IM&apos;)
-(You can also double-click on their name in the list, or right-click and choose &apos;IM&apos;).
+ Du kan kontakte beboere som &apos;[NAME]&apos; ved at åbne Personer panelet til højre på skærmen.
+Vælg beboeren fra listen og klik så &apos;IM&apos; i bundet af panelet.
+(Du kan også dobbelt-klikke på navnet i listen, eller højre-klikke og vælge &apos;IM&apos;).
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Kan ikke vælge land på tværs af grænser.
@@ -959,7 +1019,7 @@ Prøv venligst at geninstallere plugin eller kontakt leverandøren hvis probleme
Genstandene på det valgte stykke land der er ejet af [FIRST] [LAST] er blevet returneret til hans eller hendes beholdning.
</notification>
<notification name="OtherObjectsReturned2">
- Genstandene på det valgte stykke land der er ejet af beboeren &apos;[NAME]&apos; er blevet returneret til deres ejere.
+ Objekterne i den valgte parcel, ejet af beboeren &apos;[NAME]&apos;, er blevet returneret til deres ejer.
</notification>
<notification name="GroupObjectsReturned">
Genstandene på det valgte stykke land, delt med gruppen [GROUPNAME], er blevet returneret til deres ejeres beholdninger.
@@ -971,7 +1031,7 @@ Genstande, der ikke kan overføres og som er dedikeret til gruppen, er blevet sl
</notification>
<notification name="ServerObjectMessage">
Besked fra [NAME]:
-[MSG]
+&lt;nolink&gt;[MSG]&lt;/nolink&gt;
</notification>
<notification name="NotSafe">
Dette land er åbnet for &apos;skade&apos;.
@@ -1080,7 +1140,7 @@ Prøv igen om lidt.
No valid parcel could be found.
</notification>
<notification name="ObjectGiveItem">
- Et objekt med navnet [OBJECTFROMNAME], ejet af [NAME_SLURL], har givet dig [OBJECTTYPE]:
+ Et objekt med navnet [OBJECTFROMNAME] ejet af [NAME_SLURL] har givet dig denne/dette [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Behold"/>
@@ -1089,7 +1149,7 @@ Prøv igen om lidt.
</form>
</notification>
<notification name="ObjectGiveItemUnknownUser">
- Et objekt med navnet [OBJECTFROMNAME], ejet af en ukendt beboer, har givet dig [OBJECTTYPE]:
+ Et objekt med navnet [OBJECTFROMNAME] ejet af (en ukendt beboer) har givet dig denne/dette [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Behold"/>
@@ -1098,12 +1158,12 @@ Prøv igen om lidt.
</form>
</notification>
<notification name="UserGiveItem">
- [NAME_SLURL] har givet dig [OBJECTTYPE]:
+ [NAME_SLURL] har givet dig denne/dette [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
- <button name="Keep" text="Behold"/>
<button name="Show" text="Vis"/>
<button name="Discard" text="Smid væk"/>
+ <button name="Mute" text="Blokér"/>
</form>
</notification>
<notification name="GodMessage">
@@ -1128,6 +1188,9 @@ Prøv igen om lidt.
<button name="Cancel" text="Annullér"/>
</form>
</notification>
+ <notification name="TeleportOfferSent">
+ Tilbud om teleport sendt til [TO_NAME]
+ </notification>
<notification name="GotoURL">
[MESSAGE]
[URL]
@@ -1154,9 +1217,15 @@ Som standard vil du kunne se andres onlinestatus.
<notification name="FriendshipDeclined">
[NAME] afviste dit tilbud om venskab.
</notification>
+ <notification name="FriendshipAcceptedByMe">
+ Tilbud om venskab accepteret.
+ </notification>
+ <notification name="FriendshipDeclinedByMe">
+ Tilbud om venskab afvist.
+ </notification>
<notification name="OfferCallingCard">
- [FIRST] [LAST] tilbyder vedkommendes visitkort.
-Dette vil tilføje et bogmærke i din beholdning, så du hurtigt kan sende en personlig besked (IM) til denne beboer.
+ [FIRST] [LAST] tilbyder dig et visitkort.
+Dette vil lave et bogmørke i din beholding, så du hurtigt kan sende en IM til denne beboer.
<form name="form">
<button name="Accept" text="Acceptér"/>
<button name="Decline" text="Afvis"/>
@@ -1227,22 +1296,6 @@ Tillad denne anmodning?
<button name="Ignore" text="Ignorér"/>
</form>
</notification>
- <notification name="ScriptToast">
- [FIRST] [LAST]&apos;s &apos;[TITLE]&apos; ønsker bruger-input.
- <form name="form">
- <button name="Open" text="Ã…ben dialog"/>
- <button name="Ignore" text="Ignorér"/>
- <button name="Block" text="Blokér"/>
- </form>
- </notification>
- <notification name="FirstBalanceIncrease">
- Du har netop modtaget [AMOUNT] L$.
-Din balance vises øverst til højre.
- </notification>
- <notification name="FirstBalanceDecrease">
- Du har netop betalt [AMOUNT] L$.
-Din balance vises øverst til højre.
- </notification>
<notification name="BuyLindenDollarSuccess">
Tak for din betaling!
@@ -1250,58 +1303,17 @@ Din L$ balance vil blive opdateret når transaktionen er gennemført. Ved transa
Status for din betaling kan ses i din &apos;Transaction History&apos; side på din [http://secondlife.com/account/ Dashboard]
</notification>
- <notification name="FirstSit">
- Du sidder ned.
-Benyt piletasterne (eller AWSD) til at se rundt.
-Klik på &apos;Stå op&apos; tasten for at rejse dig.
- </notification>
- <notification name="FirstMap">
- Klik og træk på kortet for at se rundt.
-Dobbelt-klik for at teleportere.
-Benyt kontrollerne til højre for at finde ting og se forskellige baggrunde.
- </notification>
- <notification name="FirstBuild">
- Du har åbnet bygge værktøjer. Alle objekter du ser omkring dig er lavet via disse værktøjer.
- </notification>
- <notification name="FirstTeleport">
- Du kan kun teleportere til bestemte områder i denne region. Pilen peger på din specifikke destination. Klik på pilen for at fjerne den.
- </notification>
<notification name="FirstOverrideKeys">
Dine bevælgelsestaster bliver nu håndteret af et objekt.
Brug piletasterne eller AWSD for at se, hvad de gør.
Nogle genstande (som skydevåben) kræver at du går ind i musevisning for at bruge dem.
Tryk på &apos;M&apos; for at gåre det.
</notification>
- <notification name="FirstAppearance">
- Du redigerer dit udseende.
-Benyt piletasterne til at se rundt.
-Når du er færdig, tryk på &apos;Gem alt&apos;.
- </notification>
- <notification name="FirstInventory">
- Dette er din beholdning, som indeholder de genstande du ejer.
-
-* For at tage noget på, træk det over på dig selv.
-* For at &apos;rezze&apos; noget, træk det over på jorden.
-* For at læse en note, dobbelt-klik på den.
- </notification>
<notification name="FirstSandbox">
Dette er et sandkasse område. Her kan beboere lære ast bygge.
De ting du bygger vil blive slettet senere, så glem ikke at højre-klikke og vælge &quot;Tag&quot; for at tage en kopi af din kreation til din beholdning.
</notification>
- <notification name="FirstFlexible">
- Dette objekt er fleksibelt/blødt. Sådanne objekter skal være &apos;uden masse&apos; og ikke fysiske.
- </notification>
- <notification name="FirstDebugMenus">
- Du har åbnet menuen &apos;Avanceret&apos;.
-
-For at slå denne menu fra og til,
- Windows: Ctrl+Alt+D
- Mac: &#8997;&#8984;D
- </notification>
- <notification name="FirstSculptedPrim">
- Du redigerer en &apos;Sculpted prim&apos;. Sådanne objekter kræver en speciel tekstur for at definere faconen.
- </notification>
<notification name="MaxListSelectMessage">
Du må kun vælge op til [MAX_SELECT] genstande på denne liste.
</notification>
@@ -1408,6 +1420,10 @@ De vil blive blokeret nogle få sekunder af sikkerhedsmæssige årsager.
<button name="respondbutton" text="Svar"/>
</form>
</notification>
+ <notification name="ConfirmCloseAll">
+ Er du sikker på at du vil lukke alle personlige samtaler (IM)?
+ <usetemplate ignoretext="Bekræft før du lukker alle IMer" name="okcancelignore" notext="Annullér" yestext="OK"/>
+ </notification>
<notification name="AttachmentSaved">
Vedhæng er blevet gemt.
</notification>
diff --git a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml
index ab2e7a6e31..1953fad31f 100644
--- a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml
@@ -1,8 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <panel name="panel_call_buttons">
- <button label="Opkald" name="call_btn"/>
- <button label="Forlad samtale" name="end_call_btn"/>
- <button label="Stemmekontroller" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="vertical_stack">
+ <layout_panel name="call_btn_panel">
+ <button label="Opkald" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Forlad opkald" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Stemmekontroller" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml
index a9d5ba73ac..56332c00e6 100644
--- a/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml
@@ -22,4 +22,5 @@
[COUNT]Ã¥
</string>
<text name="avatar_name" value="Ukendt"/>
+ <button name="profile_btn" tool_tip="Vis profil"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml
index 986a4131de..4f5041ad54 100644
--- a/indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="block_list_panel">
<text name="title_text">
- Blokérede avatarer
+ Blokerede
</text>
- <scroll_list name="blocked" tool_tip="Vis liste over blokerede avatarer"/>
+ <scroll_list name="blocked" tool_tip="Liste med beboerer der p.t. er blokeret"/>
<button label="Blokér beboer..." label_selected="Blokér beboer..." name="Block resident..." tool_tip="Vælg en beboer der skal blokeres"/>
<button label="Blokér objekt via navn..." label_selected="Blokér objekt via navn..." name="Block object by name..."/>
- <button label="Fjern blokering" label_selected="Fjern blokering" name="Unblock" tool_tip="Fjern beboer fra liste med blokeringer"/>
+ <button label="Fjern blokering" label_selected="Fjern blokering" name="Unblock" tool_tip="Fjerm en beboer fra blokeringslisten"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray.xml b/indra/newview/skins/default/xui/da/panel_bottomtray.xml
index 2085840bb5..4a038e89ba 100644
--- a/indra/newview/skins/default/xui/da/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/da/panel_bottomtray.xml
@@ -7,8 +7,13 @@
Skjuler/viser stemme kontrol panel
</string>
<layout_stack name="toolbar_stack">
+ <layout_panel name="speak_panel">
+ <talk_button name="talk">
+ <speak_button label="Tal" label_selected="Tal" name="speak_btn"/>
+ </talk_button>
+ </layout_panel>
<layout_panel name="gesture_panel">
- <gesture_combo_box label="Bevægelse" name="Gesture" tool_tip="Skjuler/viser bevægelser"/>
+ <gesture_combo_list label="Bevægelse" name="Gesture" tool_tip="Skjuler/viser bevægelser"/>
</layout_panel>
<layout_panel name="movement_panel">
<button label="Flyt" name="movement_btn" tool_tip="Vis/skjul bevægelseskontroller"/>
@@ -19,5 +24,15 @@
<layout_panel name="snapshot_panel">
<button label="" name="snapshots" tool_tip="Tag foto"/>
</layout_panel>
+ <layout_panel name="im_well_panel">
+ <chiclet_im_well name="im_well">
+ <button name="Unread IM messages" tool_tip="Konversationer"/>
+ </chiclet_im_well>
+ </layout_panel>
+ <layout_panel name="notification_well_panel">
+ <chiclet_notification name="notification_well">
+ <button name="Unread" tool_tip="Notifikationer"/>
+ </chiclet_notification>
+ </layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml
new file mode 100644
index 0000000000..bd31253ca4
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray_lite">
+ <layout_stack name="toolbar_stack_lite">
+ <layout_panel name="gesture_panel">
+ <gesture_combo_list label="Bevægelse" name="Gesture" tool_tip="Vis/skjul bevægelser"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_classified_info.xml b/indra/newview/skins/default/xui/da/panel_classified_info.xml
index a9cce7bf45..28f8936457 100644
--- a/indra/newview/skins/default/xui/da/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/da/panel_classified_info.xml
@@ -1,17 +1,48 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_classified_info">
+ <panel.string name="l$_price">
+ L$[PRICE]
+ </panel.string>
+ <panel.string name="click_through_text_fmt">
+ [TELEPORT] teleport, [MAP] kort, [PROFILE] profil
+ </panel.string>
+ <panel.string name="date_fmt">
+ [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
+ </panel.string>
+ <panel.string name="auto_renew_on">
+ Aktiv
+ </panel.string>
+ <panel.string name="auto_renew_off">
+ Ikke aktiv
+ </panel.string>
<text name="title" value="Annonce info"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <text name="classified_name" value="[name]"/>
- <text name="classified_location" value="[loading...]"/>
- <text name="content_type" value="[content type]"/>
- <text name="category" value="[category]"/>
- <check_box label="Forny automatisk hver uge" name="auto_renew"/>
- <text name="price_for_listing" tool_tip="Pris for optagelse.">
- L$[PRICE]
- </text>
- <text name="classified_desc" value="[description]"/>
+ <text_editor name="classified_name" value="[name]"/>
+ <text name="classified_location_label" value="Sted:"/>
+ <text_editor name="classified_location" value="[loading...]"/>
+ <text name="content_type_label" value="Indholdsype:"/>
+ <text_editor name="content_type" value="[content type]"/>
+ <text name="category_label" value="Kategori:"/>
+ <text_editor name="category" value="[category]"/>
+ <text name="creation_date_label" value="Oprettet d.:"/>
+ <text_editor name="creation_date" tool_tip="Oprettet d." value="[date]"/>
+ <text name="price_for_listing_label" value="Pris for optagelse i lister:"/>
+ <text_editor name="price_for_listing" tool_tip="Pris for optagelse." value="[price]"/>
+ <layout_stack name="descr_stack">
+ <layout_panel name="clickthrough_layout_panel">
+ <text name="click_through_label" value="Klik:"/>
+ <text_editor name="click_through_text" tool_tip="Klik gennem data" value="[clicks]"/>
+ </layout_panel>
+ <layout_panel name="price_layout_panel">
+ <text name="auto_renew_label" value="Forny automatisk:"/>
+ <text name="auto_renew" value="Aktiv"/>
+ </layout_panel>
+ <layout_panel name="descr_layout_panel">
+ <text name="classified_desc_label" value="Beskrivelse:"/>
+ <text_editor name="classified_desc" value="[description]"/>
+ </layout_panel>
+ </layout_stack>
</panel>
</scroll_container>
<panel name="buttons">
diff --git a/indra/newview/skins/default/xui/da/panel_edit_classified.xml b/indra/newview/skins/default/xui/da/panel_edit_classified.xml
index 18689105ae..7fb2f930fa 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_classified.xml
@@ -3,12 +3,20 @@
<panel.string name="location_notice">
(vil blive opdateret efter gemning)
</panel.string>
+ <string name="publish_label">
+ Publicér
+ </string>
+ <string name="save_label">
+ Gem
+ </string>
<text name="title">
Rediger annonce
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <icon label="" name="edit_icon" tool_tip="Klik for at forstørre billede"/>
+ <panel name="snapshot_panel">
+ <icon label="" name="edit_icon" tool_tip="Klik for at vælge et billede"/>
+ </panel>
<text name="Name:">
Titel:
</text>
@@ -22,12 +30,19 @@
henter...
</text>
<button label="Sæt til nuværende lokation" name="set_to_curr_location_btn"/>
+ <text name="category_label" value="Kategori:"/>
+ <text name="content_type_label" value="Indholdstype:"/>
+ <icons_combo_box label="Generelt" name="content_type">
+ <icons_combo_box.item label="Moderat" name="mature_ci" value="Voksent"/>
+ <icons_combo_box.item label="Generelt" name="pg_ci" value="PG"/>
+ </icons_combo_box>
+ <text name="price_for_listing_label" value="Pris for optagelse:"/>
<spinner label="L$" name="price_for_listing" tool_tip="Pris for optagelse." value="50"/>
<check_box label="Forny automatisk hver uge" name="auto_renew"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Gem" name="save_changes_btn"/>
+ <button label="[LABEL]" name="save_changes_btn"/>
<button label="Annullér" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_pick.xml b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
index 41db2be5e8..dcc4e7a4b6 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Redigér Pick" name="panel_edit_pick">
+ <panel.string name="location_notice">
+ (vil blive opdateret ved gemning)
+ </panel.string>
<text name="title">
Redigér favorit
</text>
@@ -22,7 +25,7 @@
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Gem [WHAT]" name="save_changes_btn"/>
+ <button label="Gem favorit Pick" name="save_changes_btn"/>
<button label="Annullér" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_profile.xml b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
index d3cfdbba52..85461e23a7 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
@@ -35,9 +35,12 @@
</text>
<check_box label="Vis mig i søgeresultater" name="show_in_search_checkbox"/>
<text name="title_acc_status_text" value="Min konto:"/>
+ <text_editor name="acc_status_text" value="Beboer. Ingen betalingsinfo."/>
<text name="my_account_link" value="[[URL] Go to My Dashboard]"/>
- <text name="acc_status_text" value="Beboer. Ingen betalingsinfo."/>
<text name="title_partner_text" value="Min partner:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(henter)" name="partner_text"/>
+ </panel>
<text name="partner_edit_link" value="[[URL] Edit]"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_friends.xml b/indra/newview/skins/default/xui/da/panel_friends.xml
index a41eaf20c1..a1a25bdc77 100644
--- a/indra/newview/skins/default/xui/da/panel_friends.xml
+++ b/indra/newview/skins/default/xui/da/panel_friends.xml
@@ -16,5 +16,5 @@
<button label="Teleport" name="offer_teleport_btn" tool_tip="Tilbyd denne ven at blive teleporteret til din nuværende position"/>
<button label="Betal" name="pay_btn" tool_tip="Giv Linden dollars (L$) til denne ven"/>
<button label="Fjern" name="remove_btn" tool_tip="Fjern denne beboer fra din venneliste"/>
- <button label="Tilføj" name="add_btn" tool_tip="Tilbyd venskab til denne beboer"/>
+ <button label="Tilføj" name="add_btn" tool_tip="Tilbyd venskab til en beboer"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml b/indra/newview/skins/default/xui/da/panel_group_control_panel.xml
index 1db2db45af..26fe4f6ebe 100644
--- a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_control_panel.xml
@@ -1,9 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <button label="Group Profile" name="group_info_btn"/>
- <panel name="panel_call_buttons">
- <button label="Opkaldsgruppe" name="call_btn"/>
- <button label="Forlad samtale" name="end_call_btn"/>
- <button label="Kontroller for åben stemmechat" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="vertical_stack">
+ <layout_panel name="group_info_btn_panel">
+ <button label="Gruppe profil" name="group_info_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Opkald gruppe" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Forlad opkald" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Ã…ben stemmekontroller" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_general.xml b/indra/newview/skins/default/xui/da/panel_group_general.xml
index ec957e6094..becb5ab70a 100644
--- a/indra/newview/skins/default/xui/da/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_general.xml
@@ -9,20 +9,38 @@
<panel.string name="incomplete_member_data_str">
Henter medlemsinformationer
</panel.string>
+ <panel name="group_info_top">
+ <texture_picker label="" name="insignia" tool_tip="Klik for at vælge et billede"/>
+ <text name="prepend_founded_by">
+ Grundlagt af:
+ </text>
+ <name_box initial_value="(henter)" name="founder_name"/>
+ <text name="join_cost_text">
+ Gratis
+ </text>
+ <button label="TILMELD NU!" name="btn_join"/>
+ </panel>
<text_editor name="charter">
Gruppens formål
</text_editor>
<name_list name="visible_members">
<name_list.columns label="Medlem" name="name"/>
<name_list.columns label="Titel" name="title"/>
+ <name_list.columns label="Status" name="status"/>
</name_list>
+ <text name="my_group_settngs_label">
+ MeMig
+ </text>
<text name="active_title_label">
- Min titel
+ Min titel:
</text>
<combo_box name="active_title" tool_tip="Angiver den titel der vises i din avatars navnefelt, når denne gruppe er aktiv"/>
<check_box label="Modtag gruppeinformationer" name="receive_notices" tool_tip="Angiver om du vil modtage informationer fra denne gruppe. Fjern markeringen i boksen hvis gruppen spammer dig."/>
<check_box label="Vis gruppen i min profil" name="list_groups_in_profile" tool_tip="Angiver om du vil vise denne gruppe i dine profilinformationer"/>
<panel name="preferences_container">
+ <text name="group_settngs_label">
+ Gruppe
+ </text>
<check_box label="Ã…ben tilmelding" name="open_enrollement" tool_tip="Angiver om denne gruppe tillader nye medlemmer at tilmelde sig, uden de er inviteret."/>
<check_box label="Tilmeldingsgebyr" name="check_enrollment_fee" tool_tip="Angiver om der kræves et gebyr, for at tilmelde sig gruppen"/>
<spinner label="L$" left_delta="130" name="spin_enrollment_fee" tool_tip="Nye medlemmer skal betale dette gebyr for at tilmelde sig gruppen, når &quot;Tilmeldingsgebyr&quot; er valgt." width="60"/>
diff --git a/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml
index 9940ebbd4d..a7aa842439 100644
--- a/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Gruppe info" name="GroupInfo">
+<panel label="Gruppe profil" name="GroupInfo">
<panel.string name="default_needs_apply_text">
- Der er ændringer på denne fane der ikke er gemt
+ Der er ændringer der ikke er gemt
</panel.string>
<panel.string name="want_apply_text">
Ønsker du at gemme disse ændringer?
@@ -12,25 +12,24 @@
<panel.string name="group_join_free">
Gratis
</panel.string>
- <text name="group_name" value="(Henter...)"/>
- <line_editor label="Indtast dit nye gruppenavn her" name="group_name_editor"/>
- <texture_picker label="" name="insignia" tool_tip="Klik for at vælge bilede"/>
- <text name="prepend_founded_by">
- Grundlægger:
- </text>
- <name_box initial_value="(finder)" name="founder_name"/>
- <text name="join_cost_text">
- Gratis
- </text>
- <button label="MELD IND NU!" name="btn_join"/>
- <accordion name="groups_accordion">
- <accordion_tab name="group_general_tab" title="Generelt"/>
- <accordion_tab name="group_roles_tab" title="Roller"/>
- <accordion_tab name="group_notices_tab" title="Beskeder"/>
- <accordion_tab name="group_land_tab" title="Land/Aktiver"/>
- </accordion>
- <panel name="button_row">
- <button label="Lav" label_selected="Ny gruppe" name="btn_create"/>
- <button label="Gem" label_selected="Gem" name="btn_apply"/>
+ <panel name="group_info_top">
+ <text name="group_name" value="(Henter...)"/>
+ <line_editor label="Indtast nyt gruppenavn her" name="group_name_editor"/>
</panel>
+ <layout_stack name="layout">
+ <layout_panel name="group_accordions">
+ <accordion name="groups_accordion">
+ <accordion_tab name="group_general_tab" title="Generelt"/>
+ <accordion_tab name="group_roles_tab" title="Roller"/>
+ <accordion_tab name="group_notices_tab" title="Noter"/>
+ <accordion_tab name="group_land_tab" title="Land/Aktiver"/>
+ </accordion>
+ </layout_panel>
+ <layout_panel name="button_row">
+ <button label="Chat" name="btn_chat"/>
+ <button label="Gruppeopkald" name="btn_call" tool_tip="Opkald til denne gruppe"/>
+ <button label="Gem" label_selected="Save" name="btn_apply"/>
+ <button label="Opret gruppe" name="btn_create" tool_tip="Opret en ny gruppe"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_invite.xml b/indra/newview/skins/default/xui/da/panel_group_invite.xml
index 1e00642c29..49daf6c9f2 100644
--- a/indra/newview/skins/default/xui/da/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_invite.xml
@@ -7,17 +7,14 @@
(indlæser...)
</panel.string>
<panel.string name="already_in_group">
- Nogen af avatarerne var allerede i gruppen og blev ikke inviteret
+ Nogle af de beboere du vælger er allerede i gruppen, så de får ikke tilsendt en invitation.
</panel.string>
<text name="help_text">
- Du kan invitere flere beboere ad
-gangen til at blive medlem af din
-gruppe. Klik &apos;Åben personvælger&apos; for
-at begynde.
+ Du kan invitere flere beboere ad gangen til at blive medlem af din gruppe. Klik &apos;Åben personvælger&apos; for at begynde.
</text>
<button bottom_delta="-30" label="Åben personvælger" name="add_button"/>
- <name_list name="invitee_list" tool_tip="Hold Ctrl knappen nede og klik på beboer navne for at vælge flere"/>
- <button label="Fjern valgte fra listen" name="remove_button" tool_tip="Fjern beboere valgt ovenfor fra invitationslisten"/>
+ <name_list name="invitee_list" tool_tip="Hold Ctrl-tasten nede og klik på beboere for at vælge flere."/>
+ <button label="Fjern valgte fra listen" name="remove_button" tool_tip="Fjerner beboere, der er valgt på ovenstående invitationsliste."/>
<text name="role_text">
Vælg hvilken rolle, du vil tildele dem:
</text>
diff --git a/indra/newview/skins/default/xui/da/panel_group_land_money.xml b/indra/newview/skins/default/xui/da/panel_group_land_money.xml
index c73d7c807d..9b0267529c 100644
--- a/indra/newview/skins/default/xui/da/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_land_money.xml
@@ -1,65 +1,62 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Land &amp; L$" name="land_money_tab">
- <string name="help_text">
+ <panel.string name="help_text">
En advarsel vises indtil Total land i brug er mindre end eller lig med det totale bidrag.
- </string>
- <button label="?" name="help_button"/>
- <string name="cant_view_group_land_text">
+ </panel.string>
+ <panel.string name="cant_view_group_land_text">
Du har ikke tilladelse til at se gruppeejet land.
- </string>
- <string name="cant_view_group_accounting_text">
+ </panel.string>
+ <panel.string name="cant_view_group_accounting_text">
Du har ikke tilladelse til at se gruppens økonomiinformationer.
- </string>
- <string name="loading_txt">
+ </panel.string>
+ <panel.string name="loading_txt">
Indlæser...
- </string>
- <text name="group_land_heading">
- Gruppeejet land
- </text>
- <scroll_list name="group_parcel_list">
- <column label="Parcel" name="name"/>
- <column label="Region" name="location"/>
- <column label="Type" name="type"/>
- <column label="Område" name="area"/>
- <column label="" name="hidden"/>
- </scroll_list>
- <button label="Kort" label_selected="Kort" name="map_button"/>
- <text name="total_contributed_land_label">
- Totalt bidrag:
- </text>
- <text name="total_contributed_land_value">
- [AREA] m²
- </text>
- <text name="total_land_in_use_label">
- Totalt land i brug:
- </text>
- <text name="total_land_in_use_value">
- [AREA] m²
- </text>
- <text name="land_available_label">
- Ledigt land:
- </text>
- <text name="land_available_value">
- [AREA] m²
- </text>
- <text name="your_contribution_label">
- Dit bidrag:
- </text>
- <string name="land_contrib_error">
+ </panel.string>
+ <panel.string name="land_contrib_error">
Ikke muligt at lave dit bidrag til landet
- </string>
- <text name="your_contribution_units">
- m²
- </text>
- <text name="your_contribution_max_value">
- ([AMOUNT] maks.)
- </text>
- <text name="group_over_limit_text">
- Gruppemedlemmer må bidrag med mere, for at understøtte med det land der bliver brugt
- </text>
- <text name="group_money_heading">
- Gruppe L$
- </text>
+ </panel.string>
+ <panel name="layout_panel_landmoney">
+ <scroll_list name="group_parcel_list">
+ <scroll_list.columns label="Parcel" name="name"/>
+ <scroll_list.columns label="Region" name="location"/>
+ <scroll_list.columns label="Type" name="type"/>
+ <scroll_list.columns label="Areal" name="area"/>
+ </scroll_list>
+ <text name="total_contributed_land_label">
+ Totalt bidrag:
+ </text>
+ <text name="total_contributed_land_value">
+ [AREA] m²
+ </text>
+ <button label="Kort" label_selected="Kort" name="map_button"/>
+ <text name="total_land_in_use_label">
+ Totalt land i brug:
+ </text>
+ <text name="total_land_in_use_value">
+ [AREA] m²
+ </text>
+ <text name="land_available_label">
+ Land tilgængelgt:
+ </text>
+ <text name="land_available_value">
+ [AREA] m²
+ </text>
+ <text name="your_contribution_label">
+ Dit bidrag:
+ </text>
+ <text name="your_contribution_units">
+ m²
+ </text>
+ <text name="your_contribution_max_value">
+ ([BELØB] maks.)
+ </text>
+ <text name="group_over_limit_text">
+ Der kræves flere penge for at supportere det land der er i brug
+ </text>
+ <text name="group_money_heading">
+ Gruppe L$
+ </text>
+ </panel>
<tab_container name="group_money_tab_container">
<panel label="PLANLÆGNING" name="group_money_planning_tab">
<text_editor name="group_money_planning_text">
diff --git a/indra/newview/skins/default/xui/da/panel_group_list_item.xml b/indra/newview/skins/default/xui/da/panel_group_list_item.xml
index bfffdccc5e..e77e548340 100644
--- a/indra/newview/skins/default/xui/da/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_list_item.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="group_list_item">
<text name="group_name" value="Ukendt"/>
+ <button name="profile_btn" tool_tip="Se profil"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_notices.xml b/indra/newview/skins/default/xui/da/panel_group_notices.xml
index ec503c37dc..7046ac4d7c 100644
--- a/indra/newview/skins/default/xui/da/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_notices.xml
@@ -42,7 +42,7 @@ Maksimum er 200 pr. gruppe pr. dag
<text name="string">
Træk og slip en gensand for at vedhæfte den:
</text>
- <button label="Fjern" label_selected="Fjern bilag" name="remove_attachment"/>
+ <button label="Fjern" label_selected="Fjern bilag" name="remove_attachment" tool_tip="Fjern vedhæng fra din note"/>
<button label="Send" label_selected="Send" name="send_notice"/>
<group_drop_target name="drop_target" tool_tip="Træk en genstand fra din beholdning til dette felt for at sende den med denne besked. Du skal have rettigheder til at kopiere og overdrage denne genstand for at kunne vedhæfte den."/>
</panel>
@@ -59,6 +59,6 @@ Maksimum er 200 pr. gruppe pr. dag
<text name="lbl4">
Besked:
</text>
- <button label="Ã…ben bilag" label_selected="Ã¥ben bilag" name="open_attachment"/>
+ <button label="Åben vedhæng" label_selected="åben bilag" name="open_attachment"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_notify.xml b/indra/newview/skins/default/xui/da/panel_group_notify.xml
index 43a84298e2..8a684ca031 100644
--- a/indra/newview/skins/default/xui/da/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_notify.xml
@@ -4,5 +4,5 @@
<text name="title" value="Afsender navn / Gruppe navn"/>
</panel>
<text name="attachment" value="Bilag"/>
- <button label="Ok" name="btn_ok"/>
+ <button label="OK" name="btn_ok"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_roles.xml b/indra/newview/skins/default/xui/da/panel_group_roles.xml
index 74bea831fb..3ab3dd8bf8 100644
--- a/indra/newview/skins/default/xui/da/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_roles.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Medlemmer &amp; roller" name="roles_tab">
<panel.string name="default_needs_apply_text">
- Der er ændringer her, der ikke er gemt.
+ Der er ændringer som ikke er gemt
</panel.string>
<panel.string name="want_apply_text">
Vil du gemme disse ændringer?
@@ -58,7 +58,7 @@ ting i denne gruppe. Der er en bred vifte af rettigheder.
</tab_container>
<panel name="members_footer">
<text name="static">
- Medlemmer
+ Tildelte roller
</text>
<scroll_list name="member_assigned_roles">
<scroll_list.columns label="" name="checkbox"/>
diff --git a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml b/indra/newview/skins/default/xui/da/panel_im_control_panel.xml
index 0384652e5d..be9bfab1f6 100644
--- a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/da/panel_im_control_panel.xml
@@ -1,13 +1,29 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Ukendt"/>
- <button label="Profil" name="view_profile_btn"/>
- <button label="Tilføj ven" name="add_friend_btn"/>
- <button label="Teleportér" name="teleport_btn"/>
- <button label="Del" name="share_btn"/>
- <panel name="panel_call_buttons">
- <button label="Opkald" name="call_btn"/>
- <button label="Læg på" name="end_call_btn"/>
- <button label="Stemme opsætning" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="button_stack">
+ <layout_panel name="view_profile_btn_panel">
+ <button label="Profil" name="view_profile_btn"/>
+ </layout_panel>
+ <layout_panel name="add_friend_btn_panel">
+ <button label="Tilføj ven" name="add_friend_btn"/>
+ </layout_panel>
+ <layout_panel name="teleport_btn_panel">
+ <button label="Teleport" name="teleport_btn" tool_tip="Tilbyd teleport til denne person"/>
+ </layout_panel>
+ <layout_panel name="share_btn_panel">
+ <button label="Del" name="share_btn"/>
+ </layout_panel>
+ <layout_panel name="pay_btn_panel">
+ <button label="Betal" name="pay_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Opkald" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Forlad opkald" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Stemme kontroller" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_landmark_info.xml b/indra/newview/skins/default/xui/da/panel_landmark_info.xml
index 202a4d4664..8503a41763 100644
--- a/indra/newview/skins/default/xui/da/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/da/panel_landmark_info.xml
@@ -18,6 +18,7 @@
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</string>
+ <button name="back_btn" tool_tip="Tilbage"/>
<text name="title" value="Sted profil"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
diff --git a/indra/newview/skins/default/xui/da/panel_landmarks.xml b/indra/newview/skins/default/xui/da/panel_landmarks.xml
index 47487832cb..9a0a2fb207 100644
--- a/indra/newview/skins/default/xui/da/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/da/panel_landmarks.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Landmarks">
<accordion name="landmarks_accordion">
- <accordion_tab name="tab_favorites" title="Favorites bjælke"/>
- <accordion_tab name="tab_landmarks" title="Landemærker"/>
+ <accordion_tab name="tab_favorites" title="Favoritter"/>
+ <accordion_tab name="tab_landmarks" title="Mine landmærker"/>
<accordion_tab name="tab_inventory" title="Min beholdning"/>
<accordion_tab name="tab_library" title="Bibliotek"/>
</accordion>
diff --git a/indra/newview/skins/default/xui/da/panel_login.xml b/indra/newview/skins/default/xui/da/panel_login.xml
index c8c275d84d..9276ff3a09 100644
--- a/indra/newview/skins/default/xui/da/panel_login.xml
+++ b/indra/newview/skins/default/xui/da/panel_login.xml
@@ -13,7 +13,7 @@
</text>
<line_editor label="Fornavn" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/>
<line_editor label="Efternavn" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/>
- <check_box label="Husk" name="remember_check"/>
+ <check_box label="Husk password" name="remember_check"/>
<text name="start_location_text">
Start ved:
</text>
diff --git a/indra/newview/skins/default/xui/da/panel_main_inventory.xml b/indra/newview/skins/default/xui/da/panel_main_inventory.xml
index ac3a2844db..16bd22c21a 100644
--- a/indra/newview/skins/default/xui/da/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/da/panel_main_inventory.xml
@@ -1,18 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Ting" name="main inventory panel">
- <panel.string name="Title">
- Ting
+ <panel.string name="ItemcountFetching">
+ Henter [ITEM_COUNT] Genstande... [FILTER]
</panel.string>
- <filter_editor label="Filter" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="Alle ting" name="All Items"/>
- <inventory_panel label="Nye ting" name="Recent Items"/>
- </tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Vis flere valgmuligheder"/>
- <button name="add_btn" tool_tip="Opret ny genstand"/>
- <dnd_button name="trash_btn" tool_tip="Fjern valgt genstand"/>
- </panel>
+ <panel.string name="ItemcountCompleted">
+ [ITEM_COUNT] Genstande [FILTER]
+ </panel.string>
+ <text name="ItemcountText">
+ Genstande:
+ </text>
<menu_bar name="Inventory Menu">
<menu label="Filer" name="File">
<menu_item_call label="Ã…ben" name="Open"/>
@@ -61,4 +57,14 @@
<menu_item_check label="System-mapper i toppen" name="System Folders To Top"/>
</menu>
</menu_bar>
+ <filter_editor label="Filter" name="inventory search editor"/>
+ <tab_container name="inventory filter tabs">
+ <inventory_panel label="Alle ting" name="All Items"/>
+ <inventory_panel label="Nye ting" name="Recent Items"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Vis flere valgmuligheder"/>
+ <button name="add_btn" tool_tip="Opret ny genstand"/>
+ <dnd_button name="trash_btn" tool_tip="Fjern valgt genstand"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_me.xml b/indra/newview/skins/default/xui/da/panel_me.xml
index 2cfd358d13..f98ced5f91 100644
--- a/indra/newview/skins/default/xui/da/panel_me.xml
+++ b/indra/newview/skins/default/xui/da/panel_me.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Min profil" name="panel_me">
<tab_container name="tabs">
- <panel label="PROFIL" name="panel_profile"/>
- <panel label="FAVORITTER" name="panel_picks"/>
+ <panel label="MIN PROFIL" name="panel_profile"/>
+ <panel label="MINE FAVORITTER" name="panel_picks"/>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_general.xml b/indra/newview/skins/default/xui/da/panel_media_settings_general.xml
index 7f1581888d..48f08b9dfd 100644
--- a/indra/newview/skins/default/xui/da/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/da/panel_media_settings_general.xml
@@ -4,16 +4,16 @@
Hjemmeside:
</text>
<text name="home_fails_whitelist_label">
- (Denne side optræder ikke i godkendte sider)
+ (Siden er ikke på listen med godkendte sider)
</text>
- <line_editor name="home_url" tool_tip="Hjemmesiden for kilden til dette media"/>
+ <line_editor name="home_url" tool_tip="Hjemmesiden for kilden til dette medie"/>
<text name="preview_label">
Vis
</text>
<text name="current_url_label">
Nuværende side:
</text>
- <text name="current_url" tool_tip="Den nuværende hjemmeside for kilden til dette media" value=""/>
+ <text name="current_url" tool_tip="Nuværende side for kilden til dett medie" value=""/>
<button label="Nulstil" name="current_url_reset_btn"/>
<check_box initial_value="false" label="Gentag afspil" name="auto_loop"/>
<check_box initial_value="false" label="Første klik medfører interaktion" name="first_click_interact"/>
diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_security.xml b/indra/newview/skins/default/xui/da/panel_media_settings_security.xml
index ee341f9142..278fe0eeea 100644
--- a/indra/newview/skins/default/xui/da/panel_media_settings_security.xml
+++ b/indra/newview/skins/default/xui/da/panel_media_settings_security.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sikkerhed" name="Media Settings Security">
- <check_box initial_value="false" label="Tillad kun adgang til specifikke URL&apos;er (via &quot;prefix&quot;)" name="whitelist_enable"/>
+ <check_box initial_value="false" label="Tillad kun adgang til angivne URL mønstre" name="whitelist_enable"/>
<text name="home_url_fails_some_items_in_whitelist">
- Opslag som hjemmesiden fejler ved er markeret:
+ Angivelser som hjemmesiden fejler imod er markeret:
</text>
<button label="Tilføj" name="whitelist_add"/>
<button label="Slet" name="whitelist_del"/>
<text name="home_url_fails_whitelist">
- Advarsel: Hjemmesiden angive i &quot;Generelt&quot; fanen er ikke indeholdt i godkendte sider. Den er slået fra, indtil en gyldig værdi er tilføjet.
+ Advarsel: hjemmesiden specificeret i Generelt fanen opfylder ikke krav på listen med godkendte URL. Den er de-aktiveret indtil en gyldig hjemmeside er tilføjet.
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_my_profile.xml b/indra/newview/skins/default/xui/da/panel_my_profile.xml
index 1dffc73239..7eb3c9f4e5 100644
--- a/indra/newview/skins/default/xui/da/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_my_profile.xml
@@ -1,37 +1,35 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Profil" name="panel_profile">
<string name="no_partner_text" value="Ingen"/>
+ <string name="no_group_text" value="Ingen"/>
<string name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <panel name="second_life_image_panel">
- <icon label="" name="2nd_life_edit_icon" tool_tip="Klik på Rediger Profil knappen nedenfor for at ændre billede"/>
- </panel>
- <panel name="first_life_image_panel">
- <icon label="" name="real_world_edit_icon" tool_tip="Klik på Rediger Profil knappen nedenfor for at ændre billede"/>
- <text name="title_rw_descr_text" value="RL:"/>
- </panel>
- <text name="me_homepage_text">
- Web:
- </text>
- <text name="title_member_text" value="Medlem siden:"/>
- <text name="title_acc_status_text" value="Konto:"/>
- <text name="acc_status_text" value="Beboer. Ingen betalingsinfo"/>
- <text name="title_partner_text" value="Partner:"/>
- <text name="title_groups_text" value="Grupper:"/>
- </panel>
- </scroll_container>
- <panel name="profile_buttons_panel">
- <button label="Tilføj ven" name="add_friend"/>
- <button label="IM" name="im"/>
- <button label="Opkald" name="call"/>
- <button label="Kort" name="show_on_map_btn"/>
- <button label="Teleportér" name="teleport"/>
- </panel>
- <panel name="profile_me_buttons_panel">
- <button label="Rediger profil" name="edit_profile_btn" tool_tip="Redigér personlig information"/>
- <button label="Ændre udseende" name="edit_appearance_btn" tool_tip="Ændre dit udseende: fysiske data, tøj m.v."/>
- </panel>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <panel name="second_life_image_panel">
+ <icon label="" name="2nd_life_edit_icon" tool_tip="Klik på Redigér profil knappen forneden for at ændre billede"/>
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <icon label="" name="real_world_edit_icon" tool_tip="Klik på Redigér profil knappen forneden for at ændre billede"/>
+ <text name="title_rw_descr_text" value="Real World:"/>
+ </panel>
+ <text name="title_member_text" value="Beboer siden:"/>
+ <text name="title_acc_status_text" value="Konto status:"/>
+ <text name="title_partner_text" value="Partner:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(henter)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Grupper:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Redigér profil" name="edit_profile_btn" tool_tip="Redigér din personlige information"/>
+ <button label="Rediger udseende" name="edit_appearance_btn" tool_tip="Opret/tilret dit udseende: fysiske data, tøj m.v."/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_navigation_bar.xml b/indra/newview/skins/default/xui/da/panel_navigation_bar.xml
index 465bc75a1b..2ee87433a4 100644
--- a/indra/newview/skins/default/xui/da/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/da/panel_navigation_bar.xml
@@ -1,15 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="navigation_bar">
<panel name="navigation_panel">
- <button name="back_btn" tool_tip="GÃ¥ tilbage til min forrige lokation"/>
- <button name="forward_btn" tool_tip="GÃ¥ en lokation fremad"/>
+ <pull_button name="back_btn" tool_tip="GÃ¥ tilbage til min forrige lokation"/>
+ <pull_button name="forward_btn" tool_tip="GÃ¥ en lokation fremad"/>
<button name="home_btn" tool_tip="Teleport til min hjemme lokation"/>
<location_input label="Lokation" name="location_combo"/>
<search_combo_box label="Søg" name="search_combo_box" tool_tip="Søg">
<combo_editor label="Søg [SECOND_LIFE]" name="search_combo_editor"/>
</search_combo_box>
</panel>
- <favorites_bar name="favorite">
+ <favorites_bar name="favorite" tool_tip="Træk landemærker hertil for at få hurtig adgang til dine favoritsteder i Second Life!">
+ <label name="favorites_bar_label" tool_tip="Træk landemærker hertil for at få hurtig adgang til dine favoritsteder i Second Life!">
+ Favoritter
+ </label>
<chevron_button name="&gt;&gt;" tool_tip="Søg mere af mine favoritter"/>
</favorites_bar>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml
index 2aa7ed7c6c..949cbcbd7b 100644
--- a/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml
@@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="chat_bar">
- <string name="min_width">
- 192
- </string>
- <string name="max_width">
- 320
- </string>
<line_editor label="Klik her for at chatte." name="chat_box" tool_tip="Tryk på enter for at tale, Ctrl-Enter for at råbe."/>
<button name="show_nearby_chat" tool_tip="Viser/skjuler log for chat nærved"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_nearby_media.xml b/indra/newview/skins/default/xui/da/panel_nearby_media.xml
new file mode 100644
index 0000000000..7a8b5a6389
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_nearby_media.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="nearby_media">
+ <string name="empty_item_text">
+ &lt;tom&gt;
+ </string>
+ <string name="parcel_media_name">
+ Streaming Media dette sted
+ </string>
+ <string name="parcel_audio_name">
+ Streaming Audio dette sted
+ </string>
+ <string name="playing_suffix">
+ (afspilles)
+ </string>
+ <panel name="minimized_controls">
+ <button label="Stop alt" name="all_nearby_media_disable_btn" tool_tip="Stop al media tæt på"/>
+ <button label="Start alt" name="all_nearby_media_enable_btn" tool_tip="Tænd al media tæt på"/>
+ <button name="open_prefs_btn" tool_tip="Vis media preferencer"/>
+ <button label="Mere &gt;&gt;" label_selected="Mindre &lt;&lt;" name="more_less_btn" tool_tip="Avanceret opsætning"/>
+ </panel>
+ <panel name="nearby_media_panel">
+ <text name="nearby_media">
+ Media i nærheden
+ </text>
+ <text name="show">
+ Vis:
+ </text>
+ <combo_box name="show_combo">
+ <combo_box.item label="Overalt" name="All"/>
+ <combo_box.item label="PÃ¥ dette sted" name="WithinParcel"/>
+ <combo_box.item label="Udenfor dette sted" name="OutsideParcel"/>
+ <combo_box.item label="PÃ¥ andre avatarer" name="OnOthers"/>
+ </combo_box>
+ <scroll_list name="media_list">
+ <scroll_list.columns label="I nærheden" name="media_proximity"/>
+ <scroll_list.columns label="Synligt" name="media_visibility"/>
+ <scroll_list.columns label="Klasse" name="media_class"/>
+ <scroll_list.columns label="Navn" name="media_name"/>
+ <scroll_list.columns label="Debug" name="media_debug"/>
+ </scroll_list>
+ <panel name="media_controls_panel">
+ <layout_stack name="media_controls">
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Stop valgte medie"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Afspil valgte medie"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Pause valgte medie"/>
+ </layout_panel>
+ <layout_panel name="volume_slider_ctrl">
+ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volumen for valgte medie"/>
+ </layout_panel>
+ <layout_panel name="mute">
+ <button name="mute_btn" tool_tip="Sluk for lyd for valgte medie"/>
+ </layout_panel>
+ <layout_panel name="zoom">
+ <button name="zoom_btn" tool_tip="Zoom ind til valgte medie"/>
+ </layout_panel>
+ <layout_panel name="unzoom">
+ <button name="unzoom_btn" tool_tip="Zoom tilbage fra valgte medie"/>
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_notes.xml b/indra/newview/skins/default/xui/da/panel_notes.xml
index f8d911b9e5..5b3a2d0906 100644
--- a/indra/newview/skins/default/xui/da/panel_notes.xml
+++ b/indra/newview/skins/default/xui/da/panel_notes.xml
@@ -13,10 +13,10 @@
</scroll_container>
</panel>
<panel name="notes_buttons_panel">
- <button label="Tilføj" name="add_friend" tool_tip="Tilbyd venskab til beboeren"/>
+ <button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboer"/>
<button label="IM" name="im" tool_tip="Ã…ben session med personlig besked (IM)"/>
<button label="Kald" name="call" tool_tip="Opkald til denne beboer"/>
- <button label="Kort" name="show_on_map_btn" tool_tip="Vis beboeren på kortet"/>
+ <button label="Kort" name="show_on_map_btn" tool_tip="Vis beboer på kort"/>
<button label="Teleport" name="teleport" tool_tip="Tilbyd teleport"/>
</panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/da/panel_online_status.xml b/indra/newview/skins/default/xui/da/panel_online_status.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_online_status.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/da/panel_online_status_toast.xml b/indra/newview/skins/default/xui/da/panel_online_status_toast.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_online_status_toast.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
index 7d6401283e..df00cfb2eb 100644
--- a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
@@ -1,7 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="Outfits">
- <accordion name="outfits_accordion">
- <accordion_tab name="tab_cof" title="Nuværende sæt"/>
- <accordion_tab name="tab_outfits" title="Mine sæt"/>
- </accordion>
+<panel label="Ting" name="Outfits">
+ <tab_container name="appearance_tabs">
+ <inventory_panel label="MINE SÆT" name="outfitslist_tab"/>
+ <inventory_panel label="HAR PÃ…" name="cof_tab"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Vis flere muligheder"/>
+ <dnd_button name="trash_btn" tool_tip="Fjern valgte genstand"/>
+ <button label="Gem sæt" name="make_outfit_btn" tool_tip="Gem udseende som nyt sæt"/>
+ <button label="Tag på" name="wear_btn" tool_tip="Tag valgte sæt på"/>
+ <button label="M" name="look_edit_btn"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml
index a6a796f612..7b6469023b 100644
--- a/indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml
@@ -4,6 +4,6 @@
<menu_item_call label="Tilføj til nuværende sæt" name="add"/>
<menu_item_call label="Fjern fra nuværende sæt" name="remove"/>
<menu_item_call label="Omdøb" name="rename"/>
- <menu_item_call label="Fjern" name="remove_link"/>
- <menu_item_call label="Slet" name="delete"/>
+ <menu_item_call label="Fjern link" name="remove_link"/>
+ <menu_item_call label="Slet sæt" name="delete"/>
</menu>
diff --git a/indra/newview/skins/default/xui/da/panel_people.xml b/indra/newview/skins/default/xui/da/panel_people.xml
index 07b7f60810..93aac7d08b 100644
--- a/indra/newview/skins/default/xui/da/panel_people.xml
+++ b/indra/newview/skins/default/xui/da/panel_people.xml
@@ -5,29 +5,34 @@
<string name="no_one_near" value="Ingen tæt på"/>
<string name="no_friends_online" value="Ingen venner online"/>
<string name="no_friends" value="Ingen venner"/>
- <string name="no_groups" value="Ingen grupper"/>
<string name="people_filter_label" value="Filtrér personer"/>
<string name="groups_filter_label" value="Filtrér grupper"/>
+ <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Try finding the group in search?]"/>
+ <string name="no_groups_msg" value="[secondlife:///app/search/groups Try searching for some groups to join.]"/>
<filter_editor label="Filtrér" name="filter_input"/>
<tab_container name="tabs">
<panel label="TÆT PÅ" name="nearby_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="nearby_view_sort_btn" tool_tip="Valg"/>
- <button name="add_friend_btn" tool_tip="Tilføjer valgte beboere til din venneliste"/>
+ <button name="add_friend_btn" tool_tip="Tilføj valgte beboer til din venneliste"/>
</panel>
</panel>
- <panel label="VENNER" name="friends_panel">
+ <panel label="MINE VENNER" name="friends_panel">
<accordion name="friends_accordion">
<accordion_tab name="tab_online" title="Online"/>
<accordion_tab name="tab_all" title="Alle"/>
</accordion>
<panel label="bottom_panel" name="bottom_panel">
<button name="friends_viewsort_btn" tool_tip="Valg"/>
- <button name="add_btn" tool_tip="Tilbyd venskab til beboer"/>
+ <button name="add_btn" tool_tip="Tilbyd venskab til en beboer"/>
<button name="del_btn" tool_tip="Fjern valgte person fra din venneliste"/>
</panel>
+ <text name="no_friends_msg">
+ For at tilføje venner prøv [secondlife:///app/search/people global search] eller klik på en bruger for at tilføje dem som ven.
+Hvis du leder efter beboere at være sammen med, [secondlife:///app/worldmap prøv kortet].
+ </text>
</panel>
- <panel label="GRUPPER" name="groups_panel">
+ <panel label="MINE GRUPPER" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="groups_viewsort_btn" tool_tip="Valg"/>
<button name="plus_btn" tool_tip="Bliv medlem af gruppe/Opret ny gruppe"/>
@@ -37,17 +42,18 @@
<panel label="NYLIGE" name="recent_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="recent_viewsort_btn" tool_tip="Valg"/>
- <button name="add_friend_btn" tool_tip="Tilføj valgte person til din venneliste"/>
+ <button name="add_friend_btn" tool_tip="Tilføj valgte beboer til din venneliste"/>
</panel>
</panel>
</tab_container>
<panel name="button_bar">
- <button label="Profil" name="view_profile_btn" tool_tip="Vis billede, grupper og anden information om beboer"/>
+ <button label="Profil" name="view_profile_btn" tool_tip="Vis billede, gruppe og anden information om beboer"/>
<button label="IM" name="im_btn" tool_tip="Chat privat med denne person"/>
<button label="Opkald" name="call_btn" tool_tip="Opkald til denne beboer"/>
<button label="Del" name="share_btn"/>
<button label="Teleport" name="teleport_btn" tool_tip="Tilbyd teleport"/>
<button label="Group profil" name="group_info_btn" tool_tip="Vis gruppe information"/>
<button label="Gruppe chat" name="chat_btn" tool_tip="Ã…ben chat session"/>
+ <button label="Gruppe opkald" name="group_call_btn" tool_tip="Opkald til denne gruppe"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_place_profile.xml b/indra/newview/skins/default/xui/da/panel_place_profile.xml
index 24316fea14..05ef22328f 100644
--- a/indra/newview/skins/default/xui/da/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_place_profile.xml
@@ -6,7 +6,7 @@
<string name="available" value="ledig"/>
<string name="allocated" value="fordelt"/>
<string name="title_place" value="Sted profil"/>
- <string name="title_teleport_history" value="Teleport historik sted"/>
+ <string name="title_teleport_history" value="Teleport historik"/>
<string name="not_available" value="(N\A)"/>
<string name="unknown" value="(ukendt)"/>
<string name="public" value="(offentlig)"/>
@@ -41,6 +41,7 @@
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</string>
+ <button name="back_btn" tool_tip="Tilbage"/>
<text name="title" value="Sted profil"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
@@ -48,16 +49,16 @@
<text name="maturity_value" value="ukendt"/>
<accordion name="advanced_info_accordion">
<accordion_tab name="parcel_characteristics_tab" title="Parcel">
- <panel>
+ <panel name="parcel_characteristics_panel">
<text name="rating_label" value="Rating:"/>
<text name="rating_value" value="ukendt"/>
- <text name="voice_label" value="Stem:"/>
+ <text name="voice_label" value="Stemme:"/>
<text name="voice_value" value="Til"/>
- <text name="fly_label" value="Flyve:"/>
+ <text name="fly_label" value="Flyv:"/>
<text name="fly_value" value="Til"/>
<text name="push_label" value="Skub:"/>
<text name="push_value" value="Fra"/>
- <text name="build_label" value="Byg:"/>
+ <text name="build_label" value="Bygge:"/>
<text name="build_value" value="Til"/>
<text name="scripts_label" value="Scripts:"/>
<text name="scripts_value" value="Til"/>
@@ -67,17 +68,24 @@
</panel>
</accordion_tab>
<accordion_tab name="region_information_tab" title="Region">
- <panel>
+ <panel name="region_information_panel">
<text name="region_name_label" value="Region:"/>
+ <text name="region_name" value="Mooseland"/>
<text name="region_type_label" value="Type:"/>
+ <text name="region_type" value="Moose"/>
<text name="region_rating_label" value="Rating:"/>
+ <text name="region_rating" value="Voksent"/>
<text name="region_owner_label" value="Ejer:"/>
+ <text name="region_owner" value="moose Van Moose"/>
<text name="region_group_label" value="Gruppe:"/>
+ <text name="region_group">
+ The Mighty Moose of mooseville soundvillemoose
+ </text>
<button label="Region/Estate" name="region_info_btn"/>
</panel>
</accordion_tab>
<accordion_tab name="estate_information_tab" title="Estate">
- <panel>
+ <panel name="estate_information_panel">
<text name="estate_name_label" value="Estate:"/>
<text name="estate_rating_label" value="Rating:"/>
<text name="estate_owner_label" value="Ejer:"/>
@@ -85,14 +93,14 @@
</panel>
</accordion_tab>
<accordion_tab name="sales_tab" title="Til salg">
- <panel>
+ <panel name="sales_panel">
<text name="sales_price_label" value="Pris:"/>
<text name="area_label" value="Areal:"/>
<text name="traffic_label" value="Trafik:"/>
<text name="primitives_label" value="Prims:"/>
<text name="parcel_scripts_label" value="Scripts:"/>
- <text name="terraform_limits_label" value="Terraform begrænsninger:"/>
- <text name="subdivide_label" value="Mulighed for at Opdele/samle:"/>
+ <text name="terraform_limits_label" value="Begræns terrænredigering:"/>
+ <text name="subdivide_label" value="Opdel/saml mulighed:"/>
<text name="resale_label" value="Mulighed for videresalg:"/>
<text name="sale_to_label" value="Til salg til:"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml
index 052bf749cb..3ac4ebaae9 100644
--- a/indra/newview/skins/default/xui/da/panel_places.xml
+++ b/indra/newview/skins/default/xui/da/panel_places.xml
@@ -2,13 +2,14 @@
<panel label="Steder" name="places panel">
<string name="landmarks_tab_title" value="MINE LANDEMÆRKER"/>
<string name="teleport_history_tab_title" value="TELEPORT HISTORIK"/>
- <filter_editor label="Filtrér steder" name="Filter"/>
+ <filter_editor label="Filtrér mine steder" name="Filter"/>
<panel name="button_panel">
- <button label="Teleportér" name="teleport_btn"/>
+ <button label="Teleportér" name="teleport_btn" tool_tip="Teleportér til det valgte område"/>
<button label="Kort" name="map_btn"/>
- <button label="Redigér" name="edit_btn"/>
- <button label="Luk" name="close_btn"/>
- <button label="Annullér" name="cancel_btn"/>
+ <button label="Redigér" name="edit_btn" tool_tip="Redigér landemærke information"/>
+ <button label="â–¼" name="overflow_btn" tool_tip="Vise flere valgmuligheder"/>
<button label="Gem" name="save_btn"/>
+ <button label="Annullér" name="cancel_btn"/>
+ <button label="Luk" name="close_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
index 87b749b4eb..1570960745 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
@@ -1,27 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
-<panel name="advanced">
- <panel.string name="resolution_format">
- [RES_X] x [RES_Y]
- </panel.string>
+<panel label="Avanceret" name="advanced">
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
- <check_box label="Talebobler" name="bubble_text_chat"/>
- <color_swatch name="background" tool_tip="Vælg farve for talebobler"/>
- <slider label="Gennemsigtighed" name="bubble_chat_opacity"/>
- <text name="AspectRatioLabel1" tool_tip="bredde / højde">
- Format
- </text>
- <combo_box name="aspect_ratio" tool_tip="bredde/ højde">
- <combo_box.item label="4:3 (Standard CRT)" name="item1"/>
- <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
- <combo_box.item label="8:5 (Widescreen)" name="item3"/>
- <combo_box.item label="16:9 (Widescreen)" name="item4"/>
- </combo_box>
- <check_box label="Registrér automatisk" name="aspect_auto_detect"/>
- <text name="heading1">
- Kamera:
- </text>
+ <panel.string name="middle_mouse">
+ Midterste mus
+ </panel.string>
<slider label="Synsvinkel" name="camera_fov"/>
<slider label="Distance" name="camera_offset_scale"/>
<text name="heading2">
@@ -29,20 +13,20 @@
</text>
<check_box label="Byg/Redigér" name="edit_camera_movement" tool_tip="Benyt automatisk kamera positionering ved start og slut af editerings modus"/>
<check_box label="Udseende" name="appearance_camera_movement" tool_tip="Benyt automatisk kamera positionering ved redigering"/>
- <text name="heading3">
- Avatarer:
- </text>
<check_box label="Vis avatar i førsteperson" name="first_person_avatar_visible"/>
<check_box label="Piletaster bruges altid til bevægelse" name="arrow_keys_move_avatar_check"/>
<check_box label="Tast-tast-hold for at løbe" name="tap_tap_hold_to_run"/>
<check_box label="Bevæg avatarlæber når der tales" name="enable_lip_sync"/>
- <check_box label="Vis scriptfejl" name="show_script_errors"/>
+ <check_box label="Talebobler" name="bubble_text_chat"/>
+ <slider label="Synlighed" name="bubble_chat_opacity"/>
+ <color_swatch name="background" tool_tip="Vælg farve for talebobler"/>
+ <check_box label="Vis script fejl i:" name="show_script_errors"/>
<radio_group name="show_location">
- <radio_item label="I chat" name="0"/>
- <radio_item label="I et vindue" name="1"/>
+ <radio_item label="Chat" name="0"/>
+ <radio_item label="Separat vindue" name="1"/>
</radio_group>
- <check_box label="Knap til aktivering af mikrofon:" name="push_to_talk_toggle_check" tool_tip="I walkie-talkie-modus sendes stemme kun når knappen er trykket ned, ellers vil tryk på knap tænde og slukke mikrofon."/>
+ <check_box label="Knap til aktiverering af mikrofon:" name="push_to_talk_toggle_check" tool_tip="I walkie-talkie-modus sendes stemme kun når knappen er trykket ned, ellers vil tryk på knap tænde og slukke mikrofon."/>
<line_editor label="Brug walkie-talkie modus" name="modifier_combo"/>
<button label="Angiv taste" name="set_voice_hotkey_button"/>
- <button label="Midterste museknap" name="set_voice_middlemouse_button"/>
+ <button label="Midterste museknap" name="set_voice_middlemouse_button" tool_tip="Nulstil til midterste musetaste"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/da/panel_preferences_alerts.xml
index 4791033757..7caa17d514 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_alerts.xml
@@ -4,11 +4,11 @@
Vis mig når:
</text>
<check_box label="Når jeg bruger eller får L$" name="notify_money_change_checkbox"/>
- <check_box label="Når mine venner logger af eller på" name="friends_online_notify_checkbox"/>
+ <check_box label="Når mine venner logger på eller af" name="friends_online_notify_checkbox"/>
<text name="show_label">
- Vis altid disse beskeder:
+ Vis altid:
</text>
<text name="dont_show_label">
- Vis aldrig disse beskeder:
+ Vis aldrig:
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
index 609512bc1b..df97193598 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Tekst chat" name="chat">
+ <text name="font_size">
+ Skriftstørrelse:
+ </text>
<radio_group name="chat_font_size">
- <radio_item label="Lille" name="radio"/>
- <radio_item label="Mellem" name="radio2"/>
- <radio_item label="Stor" name="radio3"/>
+ <radio_item label="Lille" name="radio" value="0"/>
+ <radio_item label="Mellem" name="radio2" value="1"/>
+ <radio_item label="Stor" name="radio3" value="2"/>
</radio_group>
+ <text name="font_colors">
+ Skriftfarve:
+ </text>
<color_swatch label="Dig" name="user"/>
<text name="text_box1">
Dig
@@ -39,8 +45,14 @@
</text>
<check_box initial_value="true" label="Afspil skrive animation ved chat" name="play_typing_animation"/>
<check_box label="Send e-mail til mig når jeg modtager IM og er offline" name="send_im_to_email"/>
- <radio_group name="chat_window" tool_tip="Vis dine personlige beskeder i separate vinduer eller i ét vindue med mange faner (ændring kræver genstart)">
- <radio_item label="Flere vinduer" name="radio"/>
- <radio_item label="Et vindue" name="radio2"/>
+ <text name="show_ims_in_label">
+ Vis IM&apos;er i:
+ </text>
+ <text name="requires_restart_label">
+ (kræver genstart)
+ </text>
+ <radio_group name="chat_window" tool_tip="Vise dine personlige beskeder i separate vinduer, eller i ét vindue med flere faner (Kræver genstart)">
+ <radio_item label="Separate vinduer" name="radio" value="0"/>
+ <radio_item label="Faner" name="radio2" value="1"/>
</radio_group>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_general.xml b/indra/newview/skins/default/xui/da/panel_preferences_general.xml
index e17ccca4a1..e70cb48262 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_general.xml
@@ -23,7 +23,7 @@
<text name="maturity_desired_textbox"/>
<combo_box name="maturity_desired_combobox">
<combo_box.item label="PG, Mature og Adult" name="Desired_Adult"/>
- <combo_box.item label="PG and Mature" name="Desired_Mature"/>
+ <combo_box.item label="PG og Mature" name="Desired_Mature"/>
<combo_box.item label="PG" name="Desired_PG"/>
</combo_box>
<text name="start_location_textbox">
@@ -38,9 +38,9 @@
Navneskilte:
</text>
<radio_group name="Name_Tag_Preference">
- <radio_item label="Skjul" name="radio"/>
- <radio_item label="Vis" name="radio2"/>
- <radio_item label="Vis et øjeblik" name="radio3"/>
+ <radio_item label="Skjul" name="radio" value="0"/>
+ <radio_item label="Vis" name="radio2" value="1"/>
+ <radio_item label="Vis et øjeblik" name="radio3" value="2"/>
</radio_group>
<check_box label="Vis mit navn" name="show_my_name_checkbox1"/>
<check_box initial_value="true" label="Små avatar navne" name="small_avatar_names_checkbox"/>
@@ -48,14 +48,17 @@
<text name="effects_color_textbox">
Farve til mine effekter:
</text>
- <color_swatch label="" name="effect_color_swatch" tool_tip="Klik for at åbne farvevælger"/>
<text name="title_afk_text">
Tid inden &quot;væk&quot;:
</text>
- <spinner label="Tid før inaktiv:" name="afk_timeout_spinner"/>
- <text name="seconds_textbox">
- sekunder
- </text>
+ <color_swatch label="" name="effect_color_swatch" tool_tip="Klik for at åbne farvevælger"/>
+ <combo_box label="Timeout før &apos;væk&apos;:" name="afk">
+ <combo_box.item label="2 minutter" name="item0"/>
+ <combo_box.item label="5 minutter" name="item1"/>
+ <combo_box.item label="10 minutter" name="item2"/>
+ <combo_box.item label="30 minutter" name="item3"/>
+ <combo_box.item label="aldrig" name="item4"/>
+ </combo_box>
<text name="text_box3">
Optaget autosvar:
</text>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml
index bb1cacc773..07e3aec72a 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml
@@ -88,8 +88,8 @@
Lys detaljer:
</text>
<radio_group name="LightingDetailRadio">
- <radio_item label="Kun sol og måne" name="SunMoon"/>
- <radio_item label="Lys i nærheden" name="LocalLights"/>
+ <radio_item label="Kun sol og måne" name="SunMoon" value="0"/>
+ <radio_item label="Lys i nærheden" name="LocalLights" value="1"/>
</radio_group>
<text name="TerrainDetailText">
Terræn detaljer:
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml
index c382b222ea..cdb407dbad 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml
@@ -3,7 +3,7 @@
<panel.string name="log_in_to_change">
log på for at ændre
</panel.string>
- <button label="Nulstil historik" name="clear_cache"/>
+ <button label="Nulstil historik" name="clear_cache" tool_tip="Fjern login billede, sidste lokation, teleport historik, samt web og tekstur cache"/>
<text name="cache_size_label_l">
(Lokationer, billeder, web, søge historik)
</text>
@@ -11,7 +11,6 @@
<check_box label="Kun venner og grupper kan sende besked til mig" name="voice_call_friends_only_check"/>
<check_box label="Slå mikrofon fra når opkald slutter" name="auto_disengage_mic_check"/>
<check_box label="Acceptér cookies" name="cookies_enabled"/>
- <check_box label="Tillad media autoplay" name="autoplay_enabled"/>
<text name="Logs:">
Logs:
</text>
@@ -19,7 +18,7 @@
<check_box label="Gem en log med private beskeder (IM) på min computer" name="log_instant_messages"/>
<check_box label="Tilføj tidsstempel" name="show_timestamps_check_im"/>
<text name="log_path_desc">
- Placering af logfiler
+ Placering af logfiler:
</text>
<button label="Ændre sti" label_selected="Ændre sti" left="150" name="log_path_button"/>
<button label="Liste med blokeringer" name="block_list"/>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml
index 2dd0b71d8f..8202c78947 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Input og kamera" name="Input panel">
+<panel label="Opsætning" name="Input panel">
<button label="Andre enheder" name="joystick_setup_button"/>
<text name="Mouselook:">
Første person:
@@ -18,29 +18,32 @@
kbps
</text>
<check_box label="Speciel port" name="connection_port_enabled"/>
- <spinner label="Port nummer:" name="web_proxy_port"/>
+ <spinner label="Port nummer:" name="connection_port"/>
<text name="cache_size_label_l">
Cache størrelse
</text>
<text name="text_box5">
MB
</text>
- <button label="Vælg" label_selected="Vælg" name="set_cache"/>
- <button label="Nulstil" label_selected="Gem" name="reset_cache"/>
<text name="Cache location">
- Cache lokation
+ Cache placering:
</text>
+ <button label="Vælg" label_selected="Vælg" name="set_cache"/>
+ <button label="Nulstil" label_selected="Nulstil" name="reset_cache"/>
<text name="Web:">
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Benyt den indbyggede browser" name="internal" tool_tip="Brug den indbyggede web browser til hjælp, web links m.v. Denne browser åbner et nyt vindue i [APP_NAME]."/>
- <radio_item label="Brug min normale browser (IE, Firefox)" name="external" tool_tip="Brug systemets standard web browser til hjælp, web links, m.v. Ikke anbefalet hvis du kører i fuld-skærm."/>
+ <radio_item label="Benyt min browser(IE, Firefox, Safari)" name="external" tool_tip="Brug systemets standard web browser til hjælp, web links, m.v. Ikke anbefalet hvis du kører i fuld-skærm." value="1"/>
+ <radio_item label="Benyt den indbyggede browser" name="internal" tool_tip="Brug den indbyggede web browser til hjælp, web links m.v. Denne browser åbner et nyt vindue i [APP_NAME]." value=""/>
</radio_group>
- <check_box initial_value="false" label="Web proxy" name="web_proxy_enabled"/>
- <line_editor name="web_proxy_editor" tool_tip="Angiv navn eller IP addresse på den proxy du ønsker at anvende"/>
- <button label="Vælg" label_selected="Vælg" name="set_proxy"/>
+ <check_box initial_value="sand" label="Aktivér plugins" name="browser_plugins_enabled"/>
+ <check_box initial_value="sand" label="Acceptér cookies" name="cookies_enabled"/>
+ <check_box initial_value="sand" label="Aktivér Javascript" name="browser_javascript_enabled"/>
+ <check_box initial_value="false" label="Aktivér web proxy" name="web_proxy_enabled"/>
<text name="Proxy location">
- Proxy placering
+ Proxy placering:
</text>
+ <line_editor name="web_proxy_editor" tool_tip="Angiv navn eller IP addresse på den proxy du ønsker at anvende"/>
+ <spinner label="Port nummer:" name="web_proxy_port"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml
index ce77018f72..856f978ebd 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml
@@ -1,14 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Lyde" name="Preference Media panel">
<slider label="Generel" name="System Volume"/>
- <check_box initial_value="true" label="Sluk lyd når vinduet er minimeret" name="mute_when_minimized"/>
- <slider label="Omgivelser" name="Wind Volume"/>
+ <check_box initial_value="true" label="Sluk lyd når minimeret" name="mute_when_minimized"/>
<slider label="Knapper" name="UI Volume"/>
- <slider label="Media" name="Media Volume"/>
- <slider label="Effekter" name="SFX Volume"/>
+ <slider label="Omgivelser" name="Wind Volume"/>
+ <slider label="Lyd effekter" name="SFX Volume"/>
<slider label="Musik" name="Music Volume"/>
- <check_box label="Tale" name="enable_voice_check"/>
- <slider label="Tale" name="Voice Volume"/>
+ <check_box label="Aktiveret" name="music_enabled"/>
+ <slider label="Media" name="Media Volume"/>
+ <check_box label="Aktiveret" name="enable_media"/>
+ <slider label="Stemme chat" name="Voice Volume"/>
+ <check_box label="Aktiveret" name="enable_voice_check"/>
+ <check_box label="Tillad media at afspilles automatisk" name="media_auto_play_btn" tool_tip="Vælg dette for at media afspille automatisk hvis det ønsker det" value="sandt"/>
+ <check_box label="Afspil media vedhæftet andre avatarer" name="media_show_on_others_btn" tool_tip="Deaktiver dette for at skjule vedhæftet media for avatarer i nærheden" value="sandt"/>
+ <text name="voice_chat_settings">
+ Stemme chat opsætning
+ </text>
<text name="Listen from">
Hør stemmer fra:
</text>
diff --git a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
index 987ba2a3f8..d3b3c7e21e 100644
--- a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
@@ -1,6 +1,47 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="MediaControls">
+ <string name="min_width">
+ 300
+ </string>
+ <string name="min_height">
+ 75
+ </string>
+ <string name="zoom_medium_padding">
+ 1.1
+ </string>
+ <string name="top_world_view_avoid_zone">
+ 50
+ </string>
+ <layout_stack name="progress_indicator_area">
+ <panel name="media_progress_indicator">
+ <progress_bar name="media_progress_bar" tool_tip="Medie hentes"/>
+ </panel>
+ </layout_stack>
<layout_stack name="media_controls">
+ <layout_panel name="back">
+ <button name="back_btn" tool_tip="Navigér tilbage"/>
+ </layout_panel>
+ <layout_panel name="fwd">
+ <button name="fwd_btn" tool_tip="Navigér frem"/>
+ </layout_panel>
+ <layout_panel name="home">
+ <button name="home_btn" tool_tip="Hjemmeside"/>
+ </layout_panel>
+ <layout_panel name="media_stop">
+ <button name="media_stop_btn" tool_tip="Stop medie"/>
+ </layout_panel>
+ <layout_panel name="reload">
+ <button name="reload_btn" tool_tip="Indlæs igen"/>
+ </layout_panel>
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Stop indlæsning"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Afspil medie"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Pause medie"/>
+ </layout_panel>
<layout_panel name="media_address">
<line_editor name="media_address_url" tool_tip="Media URL"/>
<layout_stack name="media_address_url_icons">
@@ -15,14 +56,24 @@
<layout_panel name="media_play_position">
<slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Filmafspilning fremskridt"/>
</layout_panel>
+ <layout_panel name="skip_back">
+ <button name="skip_back_btn" tool_tip="GÃ¥ tilbage"/>
+ </layout_panel>
+ <layout_panel name="skip_forward">
+ <button name="skip_forward_btn" tool_tip="GÃ¥ frem"/>
+ </layout_panel>
<layout_panel name="media_volume">
<button name="media_mute_button" tool_tip="Sluk for dette media"/>
<slider name="volume_slider" tool_tip="Media lydstyrke"/>
</layout_panel>
- </layout_stack>
- <layout_stack>
- <panel name="media_progress_indicator">
- <progress_bar name="media_progress_bar" tool_tip="Media hentes"/>
- </panel>
+ <layout_panel name="zoom_frame">
+ <button name="zoom_frame_btn" tool_tip="Zoom til medie"/>
+ </layout_panel>
+ <layout_panel name="close">
+ <button name="close_btn" tool_tip="Zoom tilbage"/>
+ </layout_panel>
+ <layout_panel name="new_window">
+ <button name="new_window_btn" tool_tip="Ã…ben URL i browser"/>
+ </layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_profile.xml b/indra/newview/skins/default/xui/da/panel_profile.xml
index ef7110ffcf..c5bfc3ae80 100644
--- a/indra/newview/skins/default/xui/da/panel_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_profile.xml
@@ -1,37 +1,41 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Profil" name="panel_profile">
<string name="no_partner_text" value="Ingen"/>
+ <string name="no_group_text" value="Ingen"/>
<string name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <panel name="second_life_image_panel">
- <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
- </panel>
- <panel name="first_life_image_panel">
- <text name="title_rw_descr_text" value="Real world:"/>
- </panel>
- <text name="me_homepage_text">
- Hjemmeside:
- </text>
- <text name="title_member_text" value="Medlem siden:"/>
- <text name="title_acc_status_text" value="Konto status:"/>
- <text name="acc_status_text" value="Beboer. Ingen betalingsinfo"/>
- <text name="title_partner_text" value="Partner:"/>
- <text name="title_groups_text" value="Grupper:"/>
- </panel>
- </scroll_container>
- <panel name="profile_buttons_panel">
- <button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til denne beboer"/>
- <button label="IM" name="im" tool_tip="Skriv en personlig besked (IM)"/>
- <button label="Opkald" name="call" tool_tip="Opkald til denne beboer"/>
- <button label="Map" name="show_on_map_btn" tool_tip="Show the resident on the map"/>
- <button label="Tilbyd teleport" name="teleport" tool_tip="Tilbyd en teleport til denne beboer"/>
- <button label="â–¼" name="overflow_btn" tool_tip="Betal penge til eller del beholdning med denne beboer"/>
- </panel>
- <panel name="profile_me_buttons_panel">
- <button label="Redigér profil" name="edit_profile_btn"/>
- <button label="Redigér udseende" name="edit_appearance_btn"/>
- </panel>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="profile_scroll_panel">
+ <panel name="second_life_image_panel">
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <text name="title_rw_descr_text" value="Real World:"/>
+ </panel>
+ <text name="title_member_text" value="Beboer siden:"/>
+ <text name="title_acc_status_text" value="Konto status:"/>
+ <text name="title_partner_text" value="Partner:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(henter)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Grupper:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_buttons_panel">
+ <button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboeren"/>
+ <button label="IM" name="im" tool_tip="Ã…ben session med personlige beskeder (IM)"/>
+ <button label="Opkald" name="call" tool_tip="Opkald til denne beboer"/>
+ <button label="Kort" name="show_on_map_btn" tool_tip="Vis beboeren på kortet"/>
+ <button label="Teleport" name="teleport" tool_tip="Tilbyd teleport"/>
+ <button label="â–¼" name="overflow_btn" tool_tip="Betal penge til eller del beholdning med beboeren"/>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Redigér profil" name="edit_profile_btn" tool_tip="Redigér din personlige information"/>
+ <button label="Redigér udseende" name="edit_appearance_btn" tool_tip="Opret/redigér dit udseende: fysiske data, tøj m.v."/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_region_covenant.xml b/indra/newview/skins/default/xui/da/panel_region_covenant.xml
index 0e8ab7556f..4b9c7539ea 100644
--- a/indra/newview/skins/default/xui/da/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/da/panel_region_covenant.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Covenant" name="Covenant">
+<panel label="Regler" name="Covenant">
<text name="estate_section_lbl">
Estate
</text>
@@ -27,7 +27,7 @@
Ændringer i regler vil blive vist i alle parceller til denne estate.
</text>
<text name="covenant_instructions">
- Træk og slip en note for at ændre regler for denne estate.
+ Træk og slip et notecard her for at ændre regler for denne estate.
</text>
<text name="region_section_lbl">
Region
diff --git a/indra/newview/skins/default/xui/da/panel_region_estate.xml b/indra/newview/skins/default/xui/da/panel_region_estate.xml
index d726fedfe9..65948ce481 100644
--- a/indra/newview/skins/default/xui/da/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/da/panel_region_estate.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Estate" name="Estate">
<text name="estate_help_text">
- Ændringer i dette afsnit vil påvirke alle
-regioner i dette estate.
+ Ændringer her vil påvirke alle regioner i dette estate.
</text>
<text name="estate_text">
Estate:
@@ -24,10 +23,10 @@ regioner i dette estate.
<check_box label="Tillad offentlig adgang" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Begræns adgang til:
+ Begræns adgang til konti bekræftet med:
</text>
- <check_box label="Beboere med betalingsoplysninger" name="limit_payment" tool_tip="Blokér for brugere uden identifikation"/>
- <check_box label="Beboere der er godkendt som voksne" name="limit_age_verified" tool_tip="Blokér for brugere der ikke har verificéret deres alder. Se [SUPPORT_SITE] for mere information."/>
+ <check_box label="Beboere med betalingsoplysninger" name="limit_payment" tool_tip="Blokér for uidentificerede beboere"/>
+ <check_box label="Beboere der er godkendt som voksne" name="limit_age_verified" tool_tip="Blokér for beboere som ikke er blevet aldersverificeret. Se [SUPPORT_SITE] for mere information."/>
<check_box label="Tillad stemme chat" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Tillad direkte teleport" name="allow_direct_teleport"/>
@@ -40,7 +39,7 @@ regioner i dette estate.
</string>
<button label="?" name="abuse_email_address_help"/>
<button label="Gem" name="apply_btn"/>
- <button label="Smid bruger ud fra estate..." name="kick_user_from_estate_btn"/>
+ <button label="Fjern en beboer fra estate..." name="kick_user_from_estate_btn"/>
<button label="Send besked til estate..." name="message_estate_btn"/>
<text name="estate_manager_label">
Administratorer:
diff --git a/indra/newview/skins/default/xui/da/panel_region_general.xml b/indra/newview/skins/default/xui/da/panel_region_general.xml
index 6ffe1f34f3..5b5dd411ac 100644
--- a/indra/newview/skins/default/xui/da/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/da/panel_region_general.xml
@@ -19,35 +19,25 @@
ukendt
</text>
<check_box label="Blokér for redigering af terræn" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
<check_box label="Blokér for flyvning" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
<check_box label="Tillad skader" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
<check_box label="Begræns skubning" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
<check_box label="Tillad at sælge land" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help"/>
<check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help"/>
<check_box label="Blokér visning af land i Søgning" name="block_parcel_search_check" tool_tip="Lad beboere se denne region og dens parceller i søgeresultater"/>
- <button label="?" name="parcel_search_help"/>
<spinner label="Max besøgende" name="agent_limit_spin"/>
- <button label="?" name="agent_limit_help"/>
<spinner label="Objekt bonus" name="object_bonus_spin"/>
- <button label="?" name="object_bonus_help"/>
<text label="Indhold" name="access_text">
Rating:
</text>
- <combo_box label="Mature" name="access_combo">
- <combo_box.item label="Adult" name="Adult"/>
- <combo_box.item label="Mature" name="Mature"/>
- <combo_box.item label="PG" name="PG"/>
- </combo_box>
- <button label="?" name="access_help"/>
+ <icons_combo_box label="Mature" name="access_combo">
+ <icons_combo_box.item label="Adult" name="Adult" value="42"/>
+ <icons_combo_box.item label="Mature" name="Mature" value="21"/>
+ <icons_combo_box.item label="PG" name="PG" value="13"/>
+ </icons_combo_box>
<button label="Gem" name="apply_btn"/>
- <button label="Send en beboer hjem ..." name="kick_btn"/>
- <button label="Send alle beboere hjem..." name="kick_all_btn"/>
+ <button label="Teleportér en beboer hjem..." name="kick_btn"/>
+ <button label="Teleportér alle beboere hjem..." name="kick_all_btn"/>
<button label="Send besked til region..." name="im_btn"/>
<button label="Vedligehold telehub..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml b/indra/newview/skins/default/xui/da/panel_region_general_layout.xml
new file mode 100644
index 0000000000..f3c32d6169
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_region_general_layout.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Region" name="General">
+ <text name="region_text_lbl">
+ Region:
+ </text>
+ <text name="region_text">
+ ukendt
+ </text>
+ <text name="version_channel_text_lbl">
+ Version:
+ </text>
+ <text name="version_channel_text">
+ ukendt
+ </text>
+ <text name="region_type_lbl">
+ Type:
+ </text>
+ <text name="region_type">
+ ukendt
+ </text>
+ <check_box label="Blokér for redigering af terræn" name="block_terraform_check"/>
+ <check_box label="Blokér for flyvning" name="block_fly_check"/>
+ <check_box label="Tillad skader" name="allow_damage_check"/>
+ <check_box label="Begræns skubning" name="restrict_pushobject"/>
+ <check_box label="Tillad at sælge land" name="allow_land_resell_check"/>
+ <check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check"/>
+ <check_box label="Blokér visning af land i Søgning" name="block_parcel_search_check" tool_tip="Lad beboere se denne region og dens parceller i søgeresultater"/>
+ <spinner label="Max besøgende" name="agent_limit_spin"/>
+ <spinner label="Objekt bonus" name="object_bonus_spin"/>
+ <text label="Rating" name="access_text">
+ Rating:
+ </text>
+ <combo_box label="Moderat" name="access_combo">
+ <combo_box.item label="Voksent" name="Adult"/>
+ <combo_box.item label="Moderat" name="Mature"/>
+ <combo_box.item label="Generel" name="PG"/>
+ </combo_box>
+ <button label="Gem" name="apply_btn"/>
+ <button label="Teleportér en beboer hjem..." name="kick_btn"/>
+ <button label="Teleportér alle beboere hjem..." name="kick_all_btn"/>
+ <button label="Send besked til region..." name="im_btn"/>
+ <button label="Vedligehold telehub..." name="manage_telehub_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_region_texture.xml b/indra/newview/skins/default/xui/da/panel_region_texture.xml
index fc597eee15..45946fd222 100644
--- a/indra/newview/skins/default/xui/da/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/da/panel_region_texture.xml
@@ -25,16 +25,16 @@
Texture højde intervaller
</text>
<text name="height_text_lbl6">
- Sydvest
+ Nordvest
</text>
<text name="height_text_lbl7">
- Nordvest
+ Nordøst
</text>
<text name="height_text_lbl8">
- Sydøst
+ Sydvest
</text>
<text name="height_text_lbl9">
- Nordøst
+ Sydøst
</text>
<spinner label="Lav" name="height_start_spin_0"/>
<spinner label="Lav" name="height_start_spin_1"/>
@@ -45,10 +45,10 @@
<spinner label="Høj" name="height_range_spin_2"/>
<spinner label="Høj" name="height_range_spin_3"/>
<text name="height_text_lbl10">
- Disse værdier repræsenterer blandingsområder for teksturer ovenfor.
+ Disse værdier repræsenterer blandingsforhold for teksturer ovenfor.
</text>
<text name="height_text_lbl11">
- Målt i meter, angiver LAV værdien MAKSIMUM højden for tekstur 1, og HØJ værdien er minimumshøjden for tekstur 4.
+ Målt i meter, angiver LAV værdien MAKSIMUM højden for tekstur 1 og HØJ værdien er MINIMUMSshøjden for tekstur 4.
</text>
<text name="height_text_lbl12">
og HØJ værdien er MIMIMUM højde for texture nummer 4.
diff --git a/indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml
new file mode 100644
index 0000000000..821c82ccda
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="MIN AVATAR" name="script_limits_my_avatar_panel">
+ <text name="script_memory">
+ Avatar Script forbrug
+ </text>
+ <text name="loading_text">
+ Henter...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Størrelse (kb)" name="size"/>
+ <scroll_list.columns label="URL&apos;er" name="urls"/>
+ <scroll_list.columns label="Objekt navn" name="name"/>
+ <scroll_list.columns label="Lokation" name="location"/>
+ </scroll_list>
+ <button label="Gentegn liste" name="refresh_list_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml
new file mode 100644
index 0000000000..91fc76dbb4
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="REGION MEMORY" name="script_limits_region_memory_panel">
+ <text name="script_memory">
+ Parcel script memory
+ </text>
+ <text name="loading_text">
+ Henter...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Størrelse (kb)" name="size"/>
+ <scroll_list.columns label="URL&apos;er" name="urls"/>
+ <scroll_list.columns label="Objekt navn" name="name"/>
+ <scroll_list.columns label="Objekt ejer" name="owner"/>
+ <scroll_list.columns label="Parcel" name="parcel"/>
+ <scroll_list.columns label="Lokation" name="location"/>
+ </scroll_list>
+ <button label="Gentegn liste" name="refresh_list_btn"/>
+ <button label="Fremhæv" name="highlight_btn"/>
+ <button label="Retur" name="return_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_side_tray.xml b/indra/newview/skins/default/xui/da/panel_side_tray.xml
index ab4a2a134e..66c3e69904 100644
--- a/indra/newview/skins/default/xui/da/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/da/panel_side_tray.xml
@@ -2,25 +2,28 @@
<!-- Side tray cannot show background because it is always
partially on screen to hold tab buttons. -->
<side_tray name="sidebar">
- <sidetray_tab description="Hjem." name="sidebar_home">
+ <sidetray_tab description="Ã…bn/luk sidebar" name="sidebar_openclose" tab_title="Ã…bn/luk sidebar"/>
+ <sidetray_tab description="Hjem." name="sidebar_home" tab_title="Hjem">
<panel label="hjem" name="panel_home"/>
</sidetray_tab>
- <sidetray_tab description="Find venner, kontakter og personer tæt på." name="sidebar_people">
+ <sidetray_tab description="Redigér din profile og favoritter." name="sidebar_me" tab_title="Min profil">
<panel_container name="panel_container">
- <panel label="Gruppe info" name="panel_group_info_sidetray"/>
+ <panel label="Mig" name="panel_me"/>
+ </panel_container>
+ </sidetray_tab>
+ <sidetray_tab description="Find venner, kontakter og personer tæt på." name="sidebar_people" tab_title="Personer">
+ <panel_container name="panel_container">
+ <panel label="Gruppe profil" name="panel_group_info_sidetray"/>
<panel label="Blokerede beboere og objekter" name="panel_block_list_sidetray"/>
</panel_container>
</sidetray_tab>
- <sidetray_tab description="Find steder du vil hen og steder du har været før." label="Steder" name="sidebar_places">
+ <sidetray_tab description="Find steder du vil hen og steder du har været før." label="Steder" name="sidebar_places" tab_title="Steder">
<panel label="Steder" name="panel_places"/>
</sidetray_tab>
- <sidetray_tab description="Redigér din profile og favoritter." name="sidebar_me">
- <panel label="Mig" name="panel_me"/>
- </sidetray_tab>
- <sidetray_tab description="Ændre dit nuværende udseende" name="sidebar_appearance">
- <panel label="Redigér fremtoning" name="sidepanel_appearance"/>
- </sidetray_tab>
- <sidetray_tab description="Browse din beholdning." name="sidebar_inventory">
+ <sidetray_tab description="Browse din beholdning." name="sidebar_inventory" tab_title="Min beholdning">
<panel label="Redigér beholdning" name="sidepanel_inventory"/>
</sidetray_tab>
+ <sidetray_tab description="Ændre dit nuværende udseende" name="sidebar_appearance" tab_title="Mit udseende">
+ <panel label="Redigér udseende" name="sidepanel_appearance"/>
+ </sidetray_tab>
</side_tray>
diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml
index 4e45b7e328..4618fe536d 100644
--- a/indra/newview/skins/default/xui/da/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/da/panel_status_bar.xml
@@ -21,9 +21,11 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="My Balance: Click to buy more L$"/>
+ <button label="" label_selected="" name="buycurrency" tool_tip="Min balance"/>
+ <button label="Køb" name="buyL" tool_tip="Klik for at købe flere L$"/>
<text name="TimeText" tool_tip="Nuværende tid (Pacific)">
- 12:00
+ 24:00 PST
</text>
+ <button name="media_toggle_btn" tool_tip="Start/Stop Alle medier (musik, video, hjemmesider)"/>
<button name="volume_btn" tool_tip="Kontrol for generel lydstyrke"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_teleport_history.xml b/indra/newview/skins/default/xui/da/panel_teleport_history.xml
index 64b5ecf5cf..8a01659ffa 100644
--- a/indra/newview/skins/default/xui/da/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/da/panel_teleport_history.xml
@@ -4,6 +4,7 @@
<accordion_tab name="today" title="I dag"/>
<accordion_tab name="yesterday" title="I går"/>
<accordion_tab name="2_days_ago" title="2 dage siden"/>
+ 5
<accordion_tab name="3_days_ago" title="3 dage siden"/>
<accordion_tab name="4_days_ago" title="4 dage siden"/>
<accordion_tab name="5_days_ago" title="5 dage siden"/>
@@ -11,4 +12,7 @@
<accordion_tab name="1_month_and_older" title="1 måned eller ældre"/>
<accordion_tab name="6_months_and_older" title="6 måneder eller ældre"/>
</accordion>
+ <panel name="bottom_panel">
+ <button name="gear_btn" tool_tip="Vis flere valgmuligheder"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/da/panel_teleport_history_item.xml
new file mode 100644
index 0000000000..8148588c86
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_teleport_history_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="teleport_history_item">
+ <button name="profile_btn" tool_tip="Vis info om genstand"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/sidepanel_appearance.xml b/indra/newview/skins/default/xui/da/sidepanel_appearance.xml
index 27708f5c7a..43ddfdada7 100644
--- a/indra/newview/skins/default/xui/da/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/da/sidepanel_appearance.xml
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sæt" name="appearance panel">
<string name="No Outfit" value="Intet sæt"/>
- <filter_editor label="Filtrér sæt" name="Filter"/>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Vis flere muligheder"/>
- <button name="newlook_btn" tool_tip="Tilføj nyt sæt"/>
- <dnd_button name="trash_btn" tool_tip="Fjern valgte del"/>
- <button label="Bær" name="wear_btn"/>
+ <panel name="panel_currentlook">
+ <text name="currentlook_title">
+ (ikke gemt)
+ </text>
</panel>
+ <filter_editor label="Filtrér sæt" name="Filter"/>
</panel>
diff --git a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml
index 685601b922..701a59bade 100644
--- a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="item properties" title="Egenskaber for beholdningsgenstand">
+<panel name="item properties" title="Objekt profil">
<panel.string name="unknown">
(ukendt)
</panel.string>
@@ -15,7 +15,8 @@
<panel.string name="acquiredDate">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</panel.string>
- <text name="title" value="Egenskaber for genstand"/>
+ <text name="title" value="Objekt profil"/>
+ <text name="where" value="(Beholdning)"/>
<panel label="">
<text name="LabelItemNameTitle">
Navn:
@@ -37,34 +38,36 @@
<text name="LabelAcquiredDate">
Ons Maj 24 12:50:46 2006
</text>
- <text name="OwnerLabel">
- Dig:
- </text>
- <check_box label="Editér" name="CheckOwnerModify"/>
- <check_box label="Kopiér" name="CheckOwnerCopy"/>
- <check_box label="Sælg" name="CheckOwnerTransfer"/>
- <text name="AnyoneLabel">
- Enhver:
- </text>
- <check_box label="Kopiér" name="CheckEveryoneCopy"/>
- <text name="GroupLabel">
- Gruppe:
- </text>
- <check_box label="Del" name="CheckShareWithGroup"/>
- <text name="NextOwnerLabel">
- Næste ejer:
- </text>
- <check_box label="Editér" name="CheckNextOwnerModify"/>
- <check_box label="Kopiér" name="CheckNextOwnerCopy"/>
- <check_box label="Sælg" name="CheckNextOwnerTransfer"/>
+ <panel name="perms_inv">
+ <text name="perm_modify">
+ Du kan:
+ </text>
+ <check_box label="Redigere" name="CheckOwnerModify"/>
+ <check_box label="Kopiere" name="CheckOwnerCopy"/>
+ <check_box label="Give væk" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ Enhver:
+ </text>
+ <check_box label="Kopiere" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ Gruppe:
+ </text>
+ <check_box label="Dele" name="CheckShareWithGroup" tool_tip="Tillad alle medlemmer i den aktive gruppe at dele dine &apos;redigere&apos; rettigheder for dette objekt. Du skal dedikere for at åbne for rolle begrænsninger."/>
+ <text name="NextOwnerLabel">
+ Næste ejer:
+ </text>
+ <check_box label="Redigere" name="CheckNextOwnerModify"/>
+ <check_box label="Kopiere" name="CheckNextOwnerCopy"/>
+ <check_box label="Give væk" name="CheckNextOwnerTransfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/>
+ </panel>
<check_box label="Til salg" name="CheckPurchase"/>
<combo_box name="combobox sale copy">
- <combo_box.item label="Kopiér" name="Copy"/>
+ <combo_box.item label="Kopi" name="Copy"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
- <spinner label="Pris:" name="Edit Cost"/>
- <text name="CurrencySymbol">
- L$
- </text>
+ <spinner label="Pris: L$" name="Edit Cost"/>
+ </panel>
+ <panel name="button_panel">
+ <button label="Annullér" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/sidepanel_task_info.xml b/indra/newview/skins/default/xui/da/sidepanel_task_info.xml
index 6ade03ce56..bec97734e4 100644
--- a/indra/newview/skins/default/xui/da/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/da/sidepanel_task_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="object properties" title="Egenskaber for objekt">
+<panel name="object properties" title="Objekt profil">
<panel.string name="text deed continued">
Dedikér
</panel.string>
@@ -36,84 +36,94 @@
<panel.string name="Sale Mixed">
Blandet salg
</panel.string>
- <panel label="">
+ <text name="title" value="Objekt profil"/>
+ <text name="where" value="(verden)"/>
+ <panel label="" name="properties_panel">
<text name="Name:">
Navn:
</text>
<text name="Description:">
Beskrivelse:
</text>
- <text name="Creator:">
+ <text name="CreatorNameLabel">
Skaber:
</text>
+ <text name="Creator Name">
+ Erica Linden
+ </text>
<text name="Owner:">
Ejer:
</text>
- <text name="Group:">
+ <text name="Owner Name">
+ Erica Linden
+ </text>
+ <text name="Group_label">
Gruppe:
</text>
- <button name="button set group" tool_tip="Vælg en gruppe der skal dele dette objekts rettigheder"/>
+ <button name="button set group" tool_tip="Vælg en gruppe for at dele dette objekts rettigheder"/>
<name_box initial_value="Henter..." name="Group Name Proxy"/>
- <button label="Dedikér" label_selected="Dedikér" name="button deed" tool_tip="Dedikering giver denne genstand væk med næste ejers rettigheder. Gruppedelte genstande kan dedikeres af en gruppeadministrator."/>
- <check_box label="Del" name="checkbox share with group" tool_tip="Tillad alle medlemmer i den angivne gruppe at videregive dine &quot;redigere&quot; rettigheder for dette objekt. Du må dedikere for at tillade rolle begrænsninger."/>
+ <button label="Dedikér" label_selected="Dedikér" name="button deed" tool_tip="Dedikering giver denne genstand væk med den næste ejers rettigheder. Gruppe delte objekter kan dedikeres af en gruppe administrator."/>
<text name="label click action">
Klik for at:
</text>
<combo_box name="clickaction">
- <combo_box.item label="Røre (standard)" name="Touch/grab(default)"/>
+ <combo_box.item label="Berøre (standard)" name="Touch/grab(default)"/>
<combo_box.item label="Sidde på objekt" name="Sitonobject"/>
<combo_box.item label="Købe objekt" name="Buyobject"/>
- <combo_box.item label="Betale til objekt" name="Payobject"/>
+ <combo_box.item label="Betale objekt" name="Payobject"/>
<combo_box.item label="Ã…bne" name="Open"/>
</combo_box>
- <check_box label="Til salg:" name="checkbox for sale"/>
- <combo_box name="sale type">
- <combo_box.item label="Kopi" name="Copy"/>
- <combo_box.item label="Indhold" name="Contents"/>
- <combo_box.item label="Original" name="Original"/>
- </combo_box>
- <spinner label="Pris: L$" name="Edit Cost"/>
- <check_box label="Vis i søgning" name="search_check" tool_tip="Lad personer se dette objekt i søgeresultater"/>
- <panel name="perms_build">
+ <panel name="perms_inv">
<text name="perm_modify">
Du kan redigere dette objekt
</text>
<text name="Anyone can:">
Enhver:
</text>
- <check_box label="Flytte" name="checkbox allow everyone move"/>
<check_box label="Kopiere" name="checkbox allow everyone copy"/>
- <text name="Next owner can:">
+ <check_box label="Flytte" name="checkbox allow everyone move"/>
+ <text name="GroupLabel">
+ Gruppe:
+ </text>
+ <check_box label="Dele" name="checkbox share with group" tool_tip="Tillad alle gruppemedlemmer i den valgte gruppe at dele dine redigeringsrettigheder for dette objekt. Du skal dedikere for at aktivere rollebegrænsninger"/>
+ <text name="NextOwnerLabel">
Næste ejer:
</text>
<check_box label="Redigere" name="checkbox next owner can modify"/>
<check_box label="Kopiere" name="checkbox next owner can copy"/>
- <check_box label="Overfør" name="checkbox next owner can transfer" tool_tip="Næste ejer kan sælge eller give dette objekt væk"/>
- <text name="B:">
- B:
- </text>
- <text name="O:">
- Ã…:
- </text>
- <text name="G:">
- O:
- </text>
- <text name="E:">
- R:
- </text>
- <text name="N:">
- N:
- </text>
- <text name="F:">
- F:
- </text>
+ <check_box label="Overføre" name="checkbox next owner can transfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/>
</panel>
+ <check_box label="Til salg" name="checkbox for sale"/>
+ <combo_box name="sale type">
+ <combo_box.item label="Kopi" name="Copy"/>
+ <combo_box.item label="Indhold" name="Contents"/>
+ <combo_box.item label="Original" name="Original"/>
+ </combo_box>
+ <spinner label="Pris: L$" name="Edit Cost"/>
+ <check_box label="Vis i søgning" name="search_check" tool_tip="Lad personer se dette objekt i søgeresultater"/>
+ <text name="B:">
+ S:
+ </text>
+ <text name="O:">
+ E:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ A:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Ã…ben" name="open_btn"/>
<button label="Betal" name="pay_btn"/>
<button label="Køb" name="buy_btn"/>
- <button label="Annullér" name="cancel_btn"/>
- <button label="Gem" name="save_btn"/>
+ <button label="Detaljer" name="details_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 493bb4cb20..37501a3534 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -1,9 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- This file contains strings that used to be hardcoded in the source.
It is only for those strings which do not belong in a floater.
- For example, the strings used in avatar chat bubbles, and strings
+ For example, the strings used in avatar chat bubbles, and strings
that are returned from one component and may appear in many places-->
<strings>
+ <string name="CAPITALIZED_APP_NAME">
+ SECOND LIFE
+ </string>
<string name="SUPPORT_SITE">
Second Life Support Portal
</string>
@@ -11,7 +14,22 @@
Detekterer hardware...
</string>
<string name="StartupLoading">
- Indlæser
+ Henter [APP_NAME]...
+ </string>
+ <string name="StartupClearingCache">
+ Tømmer cache...
+ </string>
+ <string name="StartupInitializingTextureCache">
+ Initialiserer tekstur cache...
+ </string>
+ <string name="StartupInitializingVFS">
+ Initialiserer VFS...
+ </string>
+ <string name="ProgressRestoring">
+ Gendanner...
+ </string>
+ <string name="ProgressChangingResolution">
+ Ændrer opløsning...
</string>
<string name="LoginInProgress">
Logger p. [APP_NAME] kan virke laast. Vent venligst.
@@ -38,7 +56,7 @@
Klargør multimedia...
</string>
<string name="LoginInitializingFonts">
- Indlæser fonts...
+ Indlæser skriftstyper...
</string>
<string name="LoginVerifyingCache">
Checker cache filer (kan tage 60-90 sekunder)...
@@ -73,12 +91,33 @@
<string name="LoginFailedNoNetwork">
Netværksfejl: Kunne ikke etablere forbindelse, check venligst din netværksforbindelse.
</string>
+ <string name="LoginFailed">
+ Login fejlede.
+ </string>
<string name="Quit">
Afslut
</string>
<string name="AgentLostConnection">
Denne region kan have problemer. Tjek venligst din forbindelse til internettet.
</string>
+ <string name="SavingSettings">
+ Gemmer indstillinger...
+ </string>
+ <string name="LoggingOut">
+ Logger ud...
+ </string>
+ <string name="ShuttingDown">
+ Lukker ned...
+ </string>
+ <string name="YouHaveBeenDisconnected">
+ Du er blevet frakoblet den region du var i.
+ </string>
+ <string name="SentToInvalidRegion">
+ Du blev sendt til en ugyldig region.
+ </string>
+ <string name="TestingDisconnect">
+ Tester frakobling af klient
+ </string>
<string name="TooltipPerson">
Person
</string>
@@ -131,7 +170,25 @@
Klik for at se information om denne lokation
</string>
<string name="TooltipAgentUrl">
- Klik for at denne beboers profil
+ Klik for at se beboers profil
+ </string>
+ <string name="TooltipAgentMute">
+ Klik for at slukke for denne beboer
+ </string>
+ <string name="TooltipAgentUnmute">
+ Klik for at fjern slukning for denne beboer
+ </string>
+ <string name="TooltipAgentIM">
+ Klik for at sende IM til denne beboer
+ </string>
+ <string name="TooltipAgentPay">
+ Klik for at betale denne beboer
+ </string>
+ <string name="TooltipAgentOfferTeleport">
+ Klik for at tilbyde teleport til denne beboer
+ </string>
+ <string name="TooltipAgentRequestFriend">
+ Klik for at sende venneforespørgsel
</string>
<string name="TooltipGroupUrl">
Klik for at se denne gruppes beskrivelse
@@ -158,14 +215,33 @@
Klik for at starte secondlife:// kommando
</string>
<string name="CurrentURL" value=" Nuværende URL: [CurrentURL]"/>
+ <string name="TooltipPrice" value="L$[PRICE]-"/>
<string name="SLurlLabelTeleport">
Teleportér til
</string>
<string name="SLurlLabelShowOnMap">
Vis kort for
</string>
+ <string name="SLappAgentMute">
+ Sluk
+ </string>
+ <string name="SLappAgentUnmute">
+ Fjern sluk
+ </string>
+ <string name="SLappAgentIM">
+ IM
+ </string>
+ <string name="SLappAgentPay">
+ Betal
+ </string>
+ <string name="SLappAgentOfferTeleport">
+ Tilbyd teleport til
+ </string>
+ <string name="SLappAgentRequestFriend">
+ Venneforespørgsel
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
- Luk (&#8984;W)
+ Luk (⌘W)
</string>
<string name="BUTTON_CLOSE_WIN">
Luk (Ctrl+W)
@@ -182,9 +258,6 @@
<string name="BUTTON_DOCK">
Fastgør
</string>
- <string name="BUTTON_UNDOCK">
- Frigør
- </string>
<string name="BUTTON_HELP">
Vis hjælp
</string>
@@ -209,9 +282,6 @@
<string name="AvatarNameWaiting">
(venter)
</string>
- <string name="AvatarNameHippos">
- (hippos)
- </string>
<string name="GroupNameNone">
(ingen)
</string>
@@ -320,6 +390,9 @@
<string name="symbolic link">
link
</string>
+ <string name="symbolic folder link">
+ link til mappe
+ </string>
<string name="AvatarAway">
Væk
</string>
@@ -572,6 +645,9 @@
<string name="hang_up">
Stemme chat er afbrudt
</string>
+ <string name="reconnect_nearby">
+ Du vil nu blive dirigeret til lokal stemme chat
+ </string>
<string name="ScriptQuestionCautionChatGranted">
&apos;[OBJECTNAME]&apos;, en genstand, ejet af &apos;[OWNERNAME]&apos;, lokaliseret i [REGIONNAME] på [REGIONPOS], har fået tilladelse til: [PERMISSIONS].
</string>
@@ -734,6 +810,9 @@
<string name="invalid">
ugyldig
</string>
+ <string name="NewWearable">
+ Ny [WEARABLE_ITEM]
+ </string>
<string name="next">
Næste
</string>
@@ -764,11 +843,8 @@
<string name="TeleportOffer">
Teleport tilbud
</string>
- <string name="StartUpNotification">
- %d nye besked modtaget mens du var væk...
- </string>
<string name="StartUpNotifications">
- %d nye beskeder modtaget mens du var væk......
+ Nye beskeder modtaget mens du var væk......
</string>
<string name="OverflowInfoChannelString">
Du har %d mere besked(er)
@@ -804,18 +880,20 @@
Tryk ESC for at skift til normalt udsyn
</string>
<string name="InventoryNoMatchingItems">
- No matching items found in inventory.
+ Ingen matchende genstande fundet i beholdning. Prøv evt. [secondlife:///app/search/groups &quot;Search&quot;].
+ </string>
+ <string name="FavoritesNoMatchingItems">
+ Træk et landemærke hertil for at tilføje den som favorit.
</string>
<string name="InventoryNoTexture">
- Du har ikke en kopi af denne
-tekstur i din beholdning.
+ Du har ikke en kopi af denne tekstur i din beholdning
</string>
<string name="no_transfer" value=" (ikke overdragbar)"/>
<string name="no_modify" value=" (ikke redigere)"/>
<string name="no_copy" value=" (ikke kopiere)"/>
<string name="worn" value=" (båret)"/>
- <string name="link" value=" (sammenkæde)"/>
- <string name="broken_link" value=" (brudt_kæde)"/>
+ <string name="link" value=" (link)"/>
+ <string name="broken_link" value=" (brudt link)"/>
<string name="LoadingContents">
Henter indhold...
</string>
@@ -823,6 +901,7 @@ tekstur i din beholdning.
Intet indhold
</string>
<string name="WornOnAttachmentPoint" value=" (båret på [ATTACHMENT_POINT])"/>
+ <string name="ActiveGesture" value="[GESLABEL] (aktiv)"/>
<string name="Chat" value=" Chat : "/>
<string name="Sound" value=" Lyd : "/>
<string name="Wait" value=" --- Vent : "/>
@@ -916,6 +995,9 @@ tekstur i din beholdning.
<string name="InvFolder My Outfits">
Mine sæt
</string>
+ <string name="InvFolder Accessories">
+ Tilbehør
+ </string>
<string name="InvFolder Friends">
Venner
</string>
@@ -1266,11 +1348,164 @@ tekstur i din beholdning.
alle estates du administrerer for [OWNER]
</string>
<string name="RegionInfoAllowedResidents">
- Godkendte beboere: ([ALLOWEDAGENTS], max. [MAXACCESS])
+ Godkendte beboere: ([ALLOWEDAGENTS], maks. [MAXACCESS])
</string>
<string name="RegionInfoAllowedGroups">
Godkendte grupper: ([ALLOWEDGROUPS], max. [MAXACCESS])
</string>
+ <string name="ScriptLimitsParcelScriptMemory">
+ Parcel script memory
+ </string>
+ <string name="ScriptLimitsParcelsOwned">
+ Parceller listet: [PARCELS]
+ </string>
+ <string name="ScriptLimitsMemoryUsed">
+ Memory brugt: [COUNT] kb ud af [MAX] kb; [AVAILABLE] kb tilgængeligt
+ </string>
+ <string name="ScriptLimitsMemoryUsedSimple">
+ Memory brugt: [COUNT] kb
+ </string>
+ <string name="ScriptLimitsParcelScriptURLs">
+ Parcel Script URL&apos;er
+ </string>
+ <string name="ScriptLimitsURLsUsed">
+ URL&apos;er brugt: [COUNT] ud af [MAX]; [AVAILABLE] tilgængelige
+ </string>
+ <string name="ScriptLimitsURLsUsedSimple">
+ URL&apos;er brugt: [COUNT]
+ </string>
+ <string name="ScriptLimitsRequestError">
+ Fejl ved anmodning om information
+ </string>
+ <string name="ScriptLimitsRequestNoParcelSelected">
+ Ingen parcel valgt
+ </string>
+ <string name="ScriptLimitsRequestWrongRegion">
+ Fejl: script information er kun tilgængelig i den nuværende region
+ </string>
+ <string name="ScriptLimitsRequestWaiting">
+ Henter information...
+ </string>
+ <string name="ScriptLimitsRequestDontOwnParcel">
+ Du har ikke rettigheder til at undersøge denne parcel
+ </string>
+ <string name="SITTING_ON">
+ Sidder på
+ </string>
+ <string name="ATTACH_CHEST">
+ Bryst
+ </string>
+ <string name="ATTACH_HEAD">
+ Hoved
+ </string>
+ <string name="ATTACH_LSHOULDER">
+ Venstre skulder
+ </string>
+ <string name="ATTACH_RSHOULDER">
+ Højre skulder
+ </string>
+ <string name="ATTACH_LHAND">
+ Venstre hånd
+ </string>
+ <string name="ATTACH_RHAND">
+ Højre hånd
+ </string>
+ <string name="ATTACH_LFOOT">
+ Venstre fod
+ </string>
+ <string name="ATTACH_RFOOT">
+ Højre fod
+ </string>
+ <string name="ATTACH_BACK">
+ Ryg
+ </string>
+ <string name="ATTACH_PELVIS">
+ Bækken
+ </string>
+ <string name="ATTACH_MOUTH">
+ Mund
+ </string>
+ <string name="ATTACH_CHIN">
+ Hage
+ </string>
+ <string name="ATTACH_LEAR">
+ Venstre øre
+ </string>
+ <string name="ATTACH_REAR">
+ Højre øre
+ </string>
+ <string name="ATTACH_LEYE">
+ Venstre øje
+ </string>
+ <string name="ATTACH_REYE">
+ Højre øje
+ </string>
+ <string name="ATTACH_NOSE">
+ Næse
+ </string>
+ <string name="ATTACH_RUARM">
+ Højre overarm
+ </string>
+ <string name="ATTACH_RLARM">
+ Højre underarm
+ </string>
+ <string name="ATTACH_LUARM">
+ Venstre overarm
+ </string>
+ <string name="ATTACH_LLARM">
+ Venstre underarm
+ </string>
+ <string name="ATTACH_RHIP">
+ Højre hofte
+ </string>
+ <string name="ATTACH_RULEG">
+ Højre lår
+ </string>
+ <string name="ATTACH_RLLEG">
+ Højre underben
+ </string>
+ <string name="ATTACH_LHIP">
+ Venstre hofte
+ </string>
+ <string name="ATTACH_LULEG">
+ Venste lår
+ </string>
+ <string name="ATTACH_LLLEG">
+ Venstre underben
+ </string>
+ <string name="ATTACH_BELLY">
+ Mave
+ </string>
+ <string name="ATTACH_RPEC">
+ Højre bryst
+ </string>
+ <string name="ATTACH_LPEC">
+ Venstre bryst
+ </string>
+ <string name="ATTACH_HUD_CENTER_2">
+ HUD Center 2
+ </string>
+ <string name="ATTACH_HUD_TOP_RIGHT">
+ HUD Øverst til højre
+ </string>
+ <string name="ATTACH_HUD_TOP_CENTER">
+ HUD Foroven midtpå
+ </string>
+ <string name="ATTACH_HUD_TOP_LEFT">
+ HUD Øverst til venstre
+ </string>
+ <string name="ATTACH_HUD_CENTER_1">
+ HUD Center 1
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_LEFT">
+ HUD Nederst til venstre
+ </string>
+ <string name="ATTACH_HUD_BOTTOM">
+ HUD For neden
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_RIGHT">
+ HUD Nederst til højre
+ </string>
<string name="CursorPos">
Linie [LINE], Kolonne [COLUMN]
</string>
@@ -1280,6 +1515,12 @@ tekstur i din beholdning.
<string name="PanelContentsNewScript">
Nyt script
</string>
+ <string name="PanelContentsTooltip">
+ Indhold i objekt
+ </string>
+ <string name="BusyModeResponseDefault">
+ Beboeren du sendte en besked er &apos;optaget&apos;, hvilket betyder at han/hun ikke vil forstyrres. Din besked vil blive vis i hans/hendes IM panel til senere visning.
+ </string>
<string name="MuteByName">
(efter navn)
</string>
@@ -1315,6 +1556,15 @@ tekstur i din beholdning.
<string name="ClassifiedUpdateAfterPublish">
(vil blive opdateret efter offentliggørelse)
</string>
+ <string name="NoPicksClassifiedsText">
+ Du har ikke oprettet nogen favoritter eller annoncer. Klik på plus knappen nedenfor for at oprette en favorit eller en annonce.
+ </string>
+ <string name="NoAvatarPicksClassifiedsText">
+ Bruger har ingen favoritter eller annoncer
+ </string>
+ <string name="PicksClassifiedsLoadingText">
+ Henter...
+ </string>
<string name="MultiPreviewTitle">
Vis først
</string>
@@ -1385,22 +1635,36 @@ tekstur i din beholdning.
Annullér
</string>
<string name="UploadingCosts">
- Uploader [%s] omkostninger
+ Uploader [NAME] pris L$ [AMOUNT]
+ </string>
+ <string name="BuyingCosts">
+ At købe dette koster L$ [AMOUNT]
</string>
<string name="UnknownFileExtension">
Ukendt fil efternavn [.%s]
Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
</string>
+ <string name="MuteObject2">
+ Blokér
+ </string>
<string name="AddLandmarkNavBarMenu">
Tilføj landemærke...
</string>
<string name="EditLandmarkNavBarMenu">
Redigér landemærke...
</string>
- <string name="accel-mac-control">&#8963;</string>
- <string name="accel-mac-command">&#8984;</string>
- <string name="accel-mac-option">&#8997;</string>
- <string name="accel-mac-shift">&#8679;</string>
+ <string name="accel-mac-control">
+ ⌃
+ </string>
+ <string name="accel-mac-command">
+ ⌘
+ </string>
+ <string name="accel-mac-option">
+ ⌥
+ </string>
+ <string name="accel-mac-shift">
+ ⇧
+ </string>
<string name="accel-win-control">
Ctrl+
</string>
@@ -1531,7 +1795,7 @@ Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Enhver
</string>
<string name="You">
- Dig
+ Du
</string>
<string name="Multiple Media">
Flere medietyper
@@ -1655,39 +1919,15 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Attached Earlobes">
Vedhæftede øreflipper
</string>
- <string name="Back Bangs">
- Nakkehår
- </string>
- <string name="Back Bangs Down">
- Nakkehår langt
- </string>
- <string name="Back Bangs Up">
- Nakkehår kort
- </string>
<string name="Back Fringe">
Nakkehår
</string>
- <string name="Back Hair">
- Volumen
- </string>
- <string name="Back Hair Down">
- Volumen nedad
- </string>
- <string name="Back Hair Up">
- Volumen op
- </string>
<string name="Baggy">
Posede
</string>
<string name="Bangs">
Pandehår
</string>
- <string name="Bangs Down">
- Pandehår ned
- </string>
- <string name="Bangs Up">
- Pandehår op
- </string>
<string name="Beady Eyes">
Stikkende øjne
</string>
@@ -1700,9 +1940,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Big Butt">
Stor bagdel
</string>
- <string name="Big Eyeball">
- Store øjenæbler
- </string>
<string name="Big Hair Back">
Stort hår: Bag
</string>
@@ -1877,9 +2114,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Corner Down">
Nedadvendt
</string>
- <string name="Corner Normal">
- Normalt
- </string>
<string name="Corner Up">
Opadvendt
</string>
@@ -1889,9 +2123,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Crooked Nose">
Skæv næse
</string>
- <string name="Cropped Hair">
- Kort hår
- </string>
<string name="Cuff Flare">
Svaj
</string>
@@ -1910,15 +2141,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Default Heels">
Standard hæle
</string>
- <string name="Default Toe">
- Standard snude
- </string>
<string name="Dense">
Tæt
</string>
- <string name="Dense hair">
- Tæt hår
- </string>
<string name="Double Chin">
Dobbelthage
</string>
@@ -1964,9 +2189,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Eye Spacing">
Øjenafstand
</string>
- <string name="Eyeball Size">
- Størrelse øjenæble
- </string>
<string name="Eyebrow Arc">
Bue på øjenbryn
</string>
@@ -1991,36 +2213,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Eyeliner Color">
Eyeliner farve
</string>
- <string name="Eyes Back">
- Dybtliggende øjne
- </string>
<string name="Eyes Bugged">
Udstående øjne
</string>
- <string name="Eyes Forward">
- Øjne fremme
- </string>
- <string name="Eyes Long Head">
- Eyes Long Head
- </string>
- <string name="Eyes Shear Left Up">
- Eyes Shear Left Up
- </string>
- <string name="Eyes Shear Right Up">
- Eyes Shear Right Up
- </string>
- <string name="Eyes Short Head">
- Eyes Short Head
- </string>
- <string name="Eyes Spread">
- Stor afstand
- </string>
- <string name="Eyes Sunken">
- Indsunkne øjne
- </string>
- <string name="Eyes Together">
- Tætsiddende
- </string>
<string name="Face Shear">
Ansigts symmetri
</string>
@@ -2030,30 +2225,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Far Set Eyes">
Stor afstand mellem øjne
</string>
- <string name="Fat">
- Tyk
- </string>
- <string name="Fat Head">
- Tykt hovede
- </string>
<string name="Fat Lips">
Tykke læber
</string>
- <string name="Fat Lower">
- Tyk nedre
- </string>
- <string name="Fat Lower Lip">
- Tyk underlæbe
- </string>
- <string name="Fat Torso">
- Tyk overkrop
- </string>
- <string name="Fat Upper">
- Tyk øvre
- </string>
- <string name="Fat Upper Lip">
- Tyk overlæbe
- </string>
<string name="Female">
Kvinde
</string>
@@ -2090,24 +2264,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Freckles">
Fregner
</string>
- <string name="Front Bangs Down">
- Pandehår - ned
- </string>
- <string name="Front Bangs Up">
- Pandehår - op
- </string>
<string name="Front Fringe">
Frynser foran
</string>
- <string name="Front Hair">
- HÃ¥r foran
- </string>
- <string name="Front Hair Down">
- HÃ¥r foran - ned
- </string>
- <string name="Front Hair Up">
- HÃ¥r foran - op
- </string>
<string name="Full Back">
Langt ud bagtil
</string>
@@ -2381,9 +2540,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Long arms">
Lange arme
</string>
- <string name="Longcuffs">
- Longcuffs
- </string>
<string name="Loose Pants">
Løse bukser
</string>
@@ -2448,7 +2604,7 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
Mere
</string>
<string name="More Gravity">
- More
+ Mere
</string>
<string name="More Lipstick">
Mere læbestift
@@ -2546,9 +2702,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="No Eyeshadow">
Ingen øjenskygge
</string>
- <string name="No Heels">
- Ingen hæle
- </string>
<string name="No Lipgloss">
Ingen lipgloss
</string>
@@ -2606,9 +2759,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Nostril Width">
Næsebor bredde
</string>
- <string name="Old">
- Gammel
- </string>
<string name="Opaque">
Uigennemsigtig
</string>
@@ -2708,9 +2858,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Pointy Heels">
Spidse hæle
</string>
- <string name="Pointy Toe">
- Spids snude
- </string>
<string name="Ponytail">
Hestehale
</string>
@@ -2735,15 +2882,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Red Hair">
Rødt hår
</string>
- <string name="Red Skin">
- Rød hud
- </string>
<string name="Regular">
Almindelig
</string>
- <string name="Regular Muscles">
- Almindelige muskler
- </string>
<string name="Right Part">
Højre skildning
</string>
@@ -2753,9 +2894,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Round">
Rund
</string>
- <string name="Round Forehead">
- Rund pande
- </string>
<string name="Ruddiness">
Rødmossethed
</string>
@@ -2768,24 +2906,12 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Saddle Bags">
Ridebukselår
</string>
- <string name="Saddlebags">
- Ridebukselår
- </string>
- <string name="Scrawny">
- Radmager
- </string>
<string name="Scrawny Leg">
Magert ben
</string>
<string name="Separate">
Separat
</string>
- <string name="Shading">
- Skygger
- </string>
- <string name="Shadow hair">
- Skygge hår
- </string>
<string name="Shallow">
Lille
</string>
@@ -2798,15 +2924,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Shear Front">
&quot;MÃ¥ne&quot;
</string>
- <string name="Shear Left">
- Venstre
- </string>
<string name="Shear Left Up">
Venstre op
</string>
- <string name="Shear Right">
- Højre
- </string>
<string name="Shear Right Up">
Højre op
</string>
@@ -2867,15 +2987,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Shoulders">
Skuldre
</string>
- <string name="Side Bangs">
- Sidehår
- </string>
- <string name="Side Bangs Down">
- Ned
- </string>
- <string name="Side Bangs Up">
- Op
- </string>
<string name="Side Fringe">
Side frynser
</string>
@@ -2891,9 +3002,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Sides Hair Up">
Op
</string>
- <string name="Skinny">
- Tynd
- </string>
<string name="Skinny Neck">
Tynd hals
</string>
@@ -2942,9 +3050,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Socks Length">
Strømper - længde
</string>
- <string name="Some">
- Nogen
- </string>
<string name="Soulpatch">
Soulpatch
</string>
@@ -2963,9 +3068,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Squash Head">
Bredt hovede
</string>
- <string name="Squash/Stretch Head">
- Sammentryk/stræk hovede
- </string>
<string name="Stretch Head">
Stræk hovede
</string>
@@ -2984,18 +3086,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Sweep Forward">
Stryge fremad
</string>
- <string name="Swept Back">
- Tilbagestrøget
- </string>
- <string name="Swept Back Hair">
- Tilbagestrøget hår
- </string>
- <string name="Swept Forward">
- Fremadstrøget
- </string>
- <string name="Swept Forward Hair">
- Fremadstrøget hår
- </string>
<string name="Tall">
Høj
</string>
@@ -3014,9 +3104,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Thick Toe">
Bred snude
</string>
- <string name="Thickness">
- Tykkelse
- </string>
<string name="Thin">
Tynd
</string>
@@ -3047,12 +3134,6 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="Tight Sleeves">
Stramme ærmer
</string>
- <string name="Tilt Left">
- Hæld til venstre
- </string>
- <string name="Tilt Right">
- Hæld til højre
- </string>
<string name="Toe Shape">
Sko form
</string>
@@ -3194,6 +3275,21 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="IM_moderator_label">
(Moderator)
</string>
+ <string name="started_call">
+ startede et stemme opkald
+ </string>
+ <string name="joined_call">
+ tilsluttede stemme opkald
+ </string>
+ <string name="ringing-im">
+ Tilslutter stemme opkald...
+ </string>
+ <string name="connected-im">
+ Forbundet, klik på Forlad for at lægge på
+ </string>
+ <string name="hang_up-im">
+ Forladt stemme opkald
+ </string>
<string name="only_user_message">
Du er den eneste deltager i denne samtale
</string>
@@ -3204,7 +3300,10 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat.
</string>
<string name="muted_message">
- Du har blokeret denne beboer. Hvis du starter en samtale vil denne blokering automatisk blive fjernet.
+ Du har blokeret denne beboer. Sendes en besked, vil beboeren fjernes fra blokeringslisten.
+ </string>
+ <string name="generic">
+ Fejl ved anmodning, prøv venligst igen senere
</string>
<string name="generic_request_error">
Kunne ikke etablere forbindelse, prøv igen senere
@@ -3224,19 +3323,153 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
<string name="not_a_mod_error">
Du er ikke moderator for denne samtale.
</string>
+ <string name="muted">
+ En gruppe moderator har deaktiveret din tekst chat.
+ </string>
<string name="muted_error">
Du er blevet &quot;blokeret&quot;.
</string>
<string name="add_session_event">
Ikke muligt at tilføge brugere til samtale med [RECIPIENT].
</string>
+ <string name="message">
+ Kunne ikke sende din besked til session med [RECIPIENT].
+ </string>
<string name="message_session_event">
Ikke muligt at sende din besked til samtalen med [RECIPIENT].
</string>
+ <string name="mute">
+ Fejl under moderation.
+ </string>
+ <string name="removed">
+ Du er blevet fjernet fra denne gruppe.
+ </string>
<string name="removed_from_group">
Du er blevet fjernet fra gruppen.
</string>
<string name="close_on_no_ability">
Du har ikke længere mulighed for at deltage i samtalen
</string>
+ <string name="unread_chat_single">
+ [SOURCES] har sagt noget nyt
+ </string>
+ <string name="unread_chat_multiple">
+ [SOURCES] har sagt noget nyt
+ </string>
+ <string name="paid_you_ldollars">
+ [NAME] betalte dig L$[AMOUNT]
+ </string>
+ <string name="you_paid_ldollars">
+ Du betalte [NAME] L$[AMOUNT] [REASON].
+ </string>
+ <string name="you_paid_ldollars_no_reason">
+ Du betalte [NAME] L$[AMOUNT].
+ </string>
+ <string name="you_paid_ldollars_no_name">
+ Du betalte L$[AMOUNT] [REASON].
+ </string>
+ <string name="for a parcel of land">
+ for en parcel land
+ </string>
+ <string name="for a land access pass">
+ for en billet til land
+ </string>
+ <string name="for deeding land">
+ for dedikering af land
+ </string>
+ <string name="to create a group">
+ for at oprette gruppe
+ </string>
+ <string name="to join a group">
+ for at blive medlem i gruppe
+ </string>
+ <string name="to upload">
+ for at uploade
+ </string>
+ <string name="giving">
+ Giver L$ [AMOUNT]
+ </string>
+ <string name="uploading_costs">
+ Pris for upload er L$ [AMOUNT]
+ </string>
+ <string name="this_costs">
+ Prisen er L$ [AMOUNT]
+ </string>
+ <string name="buying_selected_land">
+ Køber valgte land L$ [AMOUNT]
+ </string>
+ <string name="this_object_costs">
+ Dette objekt koster L$ [AMOUNT]
+ </string>
+ <string name="group_role_everyone">
+ Enhver
+ </string>
+ <string name="group_role_officers">
+ Administratorer
+ </string>
+ <string name="group_role_owners">
+ Ejere
+ </string>
+ <string name="uploading_abuse_report">
+ Uploader...
+
+Krænkelsesanmeldelse
+ </string>
+ <string name="New Shape">
+ Ny kropsbygning
+ </string>
+ <string name="New Skin">
+ Ny hud
+ </string>
+ <string name="New Hair">
+ Nyt hår
+ </string>
+ <string name="New Eyes">
+ Nye øjne
+ </string>
+ <string name="New Shirt">
+ Ny trøje
+ </string>
+ <string name="New Pants">
+ Nye bukser
+ </string>
+ <string name="New Shoes">
+ Nye sko
+ </string>
+ <string name="New Socks">
+ Nye strømper
+ </string>
+ <string name="New Jacket">
+ Ny jakke
+ </string>
+ <string name="New Gloves">
+ Nye handsker
+ </string>
+ <string name="New Undershirt">
+ Ny undertrøje
+ </string>
+ <string name="New Underpants">
+ Nye underbukser
+ </string>
+ <string name="New Skirt">
+ Ny nederdel
+ </string>
+ <string name="New Alpha">
+ Ny alpha
+ </string>
+ <string name="New Tattoo">
+ Ny tatovering
+ </string>
+ <string name="Invalid Wearable">
+ Kan ikke tages på
+ </string>
+ <string name="New Script">
+ Nyt script
+ </string>
+ <string name="New Folder">
+ Ny folder
+ </string>
+ <string name="Contents">
+ Indhold
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/da/teleport_strings.xml b/indra/newview/skins/default/xui/da/teleport_strings.xml
index 43f8e5144d..071aab46f4 100644
--- a/indra/newview/skins/default/xui/da/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/da/teleport_strings.xml
@@ -63,6 +63,9 @@ Prøv evt. igen om lidt.
<message name="completing">
Fuldfører teleport.
</message>
+ <message name="completed_from">
+ Teleport fuldført fra [T_SLURL]
+ </message>
<message name="resolving">
Finder destination.
</message>
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 05e2d4d754..5322febe27 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterland" title="LAND-INFO">
+ <floater.string name="maturity_icon_general">
+ &quot;Parcel_PG_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_moderate">
+ &quot;Parcel_M_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_adult">
+ &quot;Parcel_R_Dark&quot;
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] Minuten
</floater.string>
@@ -142,15 +151,13 @@
Gekauftes Land in dieser Region kann nicht wiederverkauft werden.
</panel.string>
<panel.string name="can_change">
- Gekauftes Land in dieser Region kann zusammengelegt und
-geteilt werden.
+ Gekauftes Land in dieser Region kann zusammengelegt und geteilt werden.
</panel.string>
<panel.string name="can_not_change">
- Gekauftes Land in dieser Region kann nicht zusammengelegt
-und geteilt werden.
+ Gekauftes Land in dieser Region kann nicht zusammengelegt und geteilt werden.
</panel.string>
<text name="estate_section_lbl">
- Grundstück:
+ Grundbesitz:
</text>
<text name="estate_name_text">
Mainland
@@ -162,7 +169,7 @@ und geteilt werden.
(keiner)
</text>
<text_editor name="covenant_editor">
- Für dieses Grundstück fehlt der Vertrag.
+ Für diesen Grundbesitz fehlt der Vertrag.
</text_editor>
<text name="covenant_timestamp_text">
Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00
@@ -269,8 +276,8 @@ werden.
<name_list name="owner list">
<name_list.columns label="Typ" name="type"/>
<name_list.columns label="Name" name="name"/>
- <name_list.columns label="Zählen" name="count" width="80"/>
- <name_list.columns label="Aktuellster" name="mostrecent"/>
+ <name_list.columns label="Anzahl" name="count" width="80"/>
+ <name_list.columns label="Aktuellstes" name="mostrecent"/>
</name_list>
</panel>
<panel label="OPTIONEN" name="land_options_panel">
@@ -328,8 +335,8 @@ Nur große Parzellen können in der Suche aufgeführt werden.
<text name="land_options_label">
Landoptionen:
</text>
- <check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Falls nicht aktiviert, sind Kampfschäden aktiviert."/>
- <check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Skripte am Stoßen. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/>
+ <check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Ansonsten sind Kampfschäden aktiviert."/>
+ <check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Stoßen durch Skripte. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/>
<check_box label="Ort in Suche anzeigen (30 L$/Woche)" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>
<combo_box name="land category with adult">
<combo_box.item label="Alle Kategorien" name="item0"/>
@@ -368,7 +375,7 @@ Nur große Parzellen können in der Suche aufgeführt werden.
<text name="landing_point">
Landepunkt: [LANDING]
</text>
- <button label="Festlegen" label_selected="Festlegen" left="234" name="Set" right="-88" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/>
+ <button label="Festlegen" label_selected="Festlegen" left="234" name="Set" right="-88" tool_tip="Legt Ihren Standort als Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/>
<button label="Löschen" label_selected="Löschen" left="312" name="Clear" tool_tip="Landepunkt löschen" width="70"/>
<text name="Teleport Routing: ">
Teleport-Route:
@@ -387,11 +394,7 @@ Nur große Parzellen können in der Suche aufgeführt werden.
<text name="at URL:">
Homepage:
</text>
- <button label="Festlegen" label_selected="Einstellen..." name="set_media_url"/>
- <text name="CurrentURL:">
- Aktuelle Seite:
- </text>
- <button label="Zurücksetzen..." label_selected="Zurücksetzen..." name="reset_media_url" tool_tip="URL aktualisieren"/>
+ <button label="Festlegen" name="set_media_url"/>
<check_box label="URL ausblenden" name="hide_media_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Medien-URL sehen können. Diese Option ist für HTML-Medien nicht verfügbar."/>
<text name="Description:">
Inhalt:
@@ -431,15 +434,18 @@ Nur große Parzellen können in der Suche aufgeführt werden.
Voice:
</text>
<check_box label="Voice aktivieren" name="parcel_enable_voice_channel"/>
- <check_box label="Voice aktivieren (vom Grundstück eingerichtet)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="Voice aktivieren (vom Grundbesitz eingerichtet)" name="parcel_enable_voice_channel_is_estate_disabled"/>
<check_box label="Voice auf diese Parzelle beschränken" name="parcel_enable_voice_channel_local"/>
</panel>
<panel label="ZUGANG" name="land_access_panel">
<panel.string name="access_estate_defined">
- (Durch Grundstück festgelegt)
+ (Durch Grundbesitz festgelegt)
+ </panel.string>
+ <panel.string name="allow_public_access">
+ Öffentlichen Zugang erlauben ([MATURITY])
</panel.string>
<panel.string name="estate_override">
- Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
+ Eine oder mehrere dieser Optionen gelten auf Grundbesitzebene
</panel.string>
<text name="Limit access to this parcel to:">
Zugang zu dieser Parzelle
@@ -448,8 +454,8 @@ Nur große Parzellen können in der Suche aufgeführt werden.
<text name="Only Allow" width="400">
Zugang auf Einwohner beschränken, die überprüft wurden von:
</text>
- <check_box label="Zahlungsinformation gespeichert [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/>
- <check_box label="Altersüberprüfung [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Einwohner ohne Altersüberprüfung verbannen. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+ <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="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_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
index f1281bfb9b..6eb99f8b42 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
@@ -41,8 +41,24 @@ Person ein:
<text name="meters">
Meter
</text>
- <button font="SansSerifSmall" label="Liste aktualisieren" label_selected="Liste aktualisieren" left_delta="10" name="Refresh" width="105"/>
- <scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+ <button
+ follows="top|left"
+ layout="topleft"
+ left_pad="0"
+ height="28"
+ width="28"
+ name="Refresh"
+ image_overlay="Refresh_Off" />
+ <scroll_list
+ follows="all"
+ height="100"
+ border="false"
+ layout="topleft"
+ left="0"
+ name="NearMe"
+ sort_column="0"
+ top="50"
+ width="132" />
</panel>
</tab_container>
<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
index cf1b809aa1..92c0c4a27a 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
@@ -16,7 +16,7 @@
<texture_picker label="Haare" name="hair_grain"/>
<texture_picker label="Alpha: Haare" name="hair_alpha"/>
<texture_picker label="Kopf" name="head-baked"/>
- <texture_picker label="Make-Uup" name="head_bodypaint"/>
+ <texture_picker label="Make-Up" name="head_bodypaint"/>
<texture_picker label="Kopf: Alpha" name="head_alpha"/>
<texture_picker label="Kopftattoo" name="head_tattoo"/>
<texture_picker label="Augen" name="eyes-baked"/>
diff --git a/indra/newview/skins/default/xui/de/floater_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml
index 50a4555ae0..6e83e0419b 100644
--- a/indra/newview/skins/default/xui/de/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/de/floater_beacons.xml
@@ -5,7 +5,7 @@
Anzeigen:
</text>
<check_box label="Strahlen" name="beacons"/>
- <check_box label="Glanzlichter" name="highlights"/>
+ <check_box label="Hervorhebung" name="highlights"/>
<text name="beacon_width_label" tool_tip="Strahlbreite">
Breite:
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml
index b70c859490..e90eb2c00b 100644
--- a/indra/newview/skins/default/xui/de/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_build_options.xml
@@ -2,7 +2,7 @@
<floater name="build options floater" title="RASTER-OPTIONEN">
<spinner label="Raster-Einheiten (Meter)" name="GridResolution"/>
<spinner label="Rastergröße (Meter)" name="GridDrawSize"/>
- <check_box label="Einrasten von Untereinheiten aktivieren" name="GridSubUnit"/>
+ <check_box label="An Untereinheiten ausrichten" name="GridSubUnit"/>
<check_box label="Überschneidungen anzeigen" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Raster-Deckkraft">
Deckkraft:
diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
index 1d766ac07b..d3f0d6d78f 100644
--- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="INHALTS-BERECHTIGUNGEN BEARBEITEN">
+<floater name="floaterbulkperms" title="BERECHTIGUNGEN BEARBEITEN">
<floater.string name="nothing_to_modify_text">
Auswahl enthält keinen Inhalt, der bearbeitet werden kann.
</floater.string>
@@ -43,7 +43,7 @@
Jeder:
</text>
<check_box label="Kopieren" name="everyone_copy"/>
- <text name="NextOwnerLabel" top="160" left="10">
+ <text name="NextOwnerLabel" top="160" left="10" width="200">
Nächster Eigentümer:
</text>
<check_box label="Bearbeiten" name="next_owner_modify"/>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
index 72959c7a0c..21e3bd280f 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
@@ -18,13 +18,13 @@
<text name="balance_amount">
[AMT] L$
</text>
- <text name="currency_action" width="90">
+ <text name="currency_action">
Ich möchte kaufen
</text>
<text name="currency_label">
L$
</text>
- <line_editor label="L$" left_delta="55" name="currency_amt">
+ <line_editor label="L$" name="currency_amt">
1234
</line_editor>
<text name="buying_label">
@@ -37,7 +37,7 @@
Schätzung erfolgt...
</text>
<text name="buy_action">
- [NAME] L$ [PRICE]
+ [ACTION]
</text>
<text name="total_label">
Mein neuer Kontostand wird sein
@@ -52,14 +52,14 @@
Geben Sie den Betrag erneut ein, um die aktuellste Umtauschrate anzuzeigen.
</text>
<text name="purchase_warning_repurchase">
- Nach Bestätigung dieses Kaufs werden nur L$ gekauft, nicht das Objekt.
+ Achtung: Sie kaufen L$, nicht das Objekt.
</text>
<text name="purchase_warning_notenough">
Sie kaufen nicht genügend L$. Bitte erhöhen Sie den Betrag.
</text>
<button label="Jetzt kaufen" name="buy_btn"/>
<button label="Abbrechen" name="cancel_btn"/>
- <text name="info_cannot_buy" left="160" width="200" height="40">
+ <text height="40" left="160" name="info_cannot_buy" width="200">
Kauf nicht
möglich
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_land.xml b/indra/newview/skins/default/xui/de/floater_buy_land.xml
index 7426e97d9e..5708a3f80a 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_land.xml
@@ -140,13 +140,13 @@ unterstützt [AMOUNT2] Objekte
(unbekannt)
</text>
<text name="estate_name_label">
- Grundstück:
+ Grundbesitz:
</text>
<text left="680" left_delta="140" name="estate_name_text">
(unbekannt)
</text>
<text name="estate_owner_label" right="600" width="200">
- Grundstückseigentümer:
+ Grundbesitzer:
</text>
<text left="680" left_delta="140" name="estate_owner_text">
(unbekannt)
@@ -161,7 +161,7 @@ unterstützt [AMOUNT2] Objekte
Darft oder darf nicht zusammengelegt/unterteilt werden.
</text>
<text left="410" name="covenant_text">
- Sie müssen dem Grundstücksvertrag zustimmen:
+ Sie müssen dem Grundbesitzvertrag zustimmen:
</text>
<text left="470" name="covenant_timestamp_text"/>
<text_editor left="470" name="covenant_editor">
diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml
index b8616ea128..87371b05e3 100644
--- a/indra/newview/skins/default/xui/de/floater_camera.xml
+++ b/indra/newview/skins/default/xui/de/floater_camera.xml
@@ -9,6 +9,18 @@
<floater.string name="move_tooltip">
Kamera nach oben, unten, links und rechts bewegen
</floater.string>
+ <floater.string name="orbit_mode_title">
+ Kreisen
+ </floater.string>
+ <floater.string name="pan_mode_title">
+ Schwenken
+ </floater.string>
+ <floater.string name="avatar_view_mode_title">
+ Voreinstellungen
+ </floater.string>
+ <floater.string name="free_mode_title">
+ Objekt ansehen
+ </floater.string>
<panel name="controls">
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
<panel name="zoom" tool_tip="Kamera auf Fokus zoomen">
@@ -25,7 +37,7 @@
<panel name="buttons">
<button label="" name="orbit_btn" tool_tip="Kamera kreisen"/>
<button label="" name="pan_btn" tool_tip="Kamera schwenken"/>
- <button label="" name="avatarview_btn" tool_tip="Avatarsicht"/>
+ <button label="" name="avatarview_btn" tool_tip="Voreinstellungen"/>
<button label="" name="freecamera_btn" tool_tip="Objekt ansehen"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml
index b1e9ef6f19..f284d7cd6b 100644
--- a/indra/newview/skins/default/xui/de/floater_customize.xml
+++ b/indra/newview/skins/default/xui/de/floater_customize.xml
@@ -40,17 +40,17 @@
<text name="no modify instructions">
Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
</text>
- <text name="Item Action Label" right="100">
+ <text name="Item Action Label">
Form:
</text>
<button label="Neue Form/Gestalt" label_selected="Neue Form/Gestalt" name="Create New"/>
- <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
- <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." left="194" name="Save As" width="105"/>
+ <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" name="Save"/>
+ <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
</panel>
<panel label="Haut" name="Skin">
<button label="Hautfarbe" label_selected="Hautfarbe" left="2" name="Skin Color" width="92"/>
<button label="Gesichtsdetails" label_selected="Gesichtsdetails" left="2" name="Face Detail" width="92"/>
- <button label="Make-Uup" label_selected="Make-Uup" left="2" name="Makeup" width="92"/>
+ <button label="Make-Up" label_selected="Make-Up" left="2" name="Makeup" width="92"/>
<button label="Körperdetails" label_selected="Körperdetails" left="2" name="Body Detail" width="92"/>
<text name="title">
[DESC]
@@ -105,7 +105,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie Haar aus dem Inventar auf Ihren Avatar, um dieses anzulegen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie Haar aus dem Inventar auf Ihren Avatar, um dieses anzulegen. Sie können aber auch neues Haar erstellen und anlegen.
</text>
<text name="no modify instructions">
Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
@@ -136,7 +136,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie neue Augen aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie neue Augen aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch neue Augen erstellen und diese anlegen.
</text>
<text name="no modify instructions">
Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
@@ -177,7 +177,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie ein neues Hemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie ein neues Hemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Hemd erstellen und dieses anlegen.
</text>
<text name="no modify instructions">
Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
@@ -210,7 +210,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie eine neue Hose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie eine neue Hose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
</text>
<text name="no modify instructions">
Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
@@ -236,7 +236,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie neue Schuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie neue Schuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue Schuhe erstellen und diese anlegen.
</text>
<button label="Neue Schuhe" label_selected="Neue Schuhe" name="Create New"/>
<text name="no modify instructions">
@@ -269,7 +269,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie neue Strümpfe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie neue Socken aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen.
</text>
<button label="Neue Socken" label_selected="Neue Socken" name="Create New"/>
<text name="no modify instructions">
@@ -302,7 +302,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie eine neue Jacke aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie eine neue Jacke aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
</text>
<button label="Neue Jacke" label_selected="Neue Jacke" name="Create New"/>
<text name="no modify instructions">
@@ -311,8 +311,8 @@
<text name="Item Action Label" right="100">
Jacke:
</text>
- <texture_picker label="Oberstoff" name="Upper Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
- <texture_picker label="Unterstoff" name="Lower Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+ <texture_picker label="Stoff: oben" name="Upper Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+ <texture_picker label="Stoff: unten" name="Lower Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
@@ -336,7 +336,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie neue Handschuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie neue Handschuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen.
</text>
<button label="Neue Handschuhe" label_selected="Neue Handschuhe" name="Create New"/>
<text name="no modify instructions">
@@ -369,7 +369,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie ein neues Unterhemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie ein neues Unterhemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Unterhemd erstellen und dieses anziehen.
</text>
<button label="Neues Unterhemd" label_selected="Neues Unterhemd" name="Create New"/>
<text name="no modify instructions">
@@ -402,7 +402,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie eine neue Unterhose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie eine neue Unterhose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
</text>
<button label="Neue Unterhose" label_selected="Neue Unterhose" name="Create New"/>
<text name="no modify instructions">
@@ -435,7 +435,7 @@
In [PATH]
</text>
<text name="not worn instructions">
- Ziehen Sie einen neuen Rock aus dem Inventar auf Ihren Avatar, um diesen anzuziehen. Sie können aber auch eine neue erstellen und diese anlegen.
+ Ziehen Sie einen neuen Rock aus dem Inventar auf Ihren Avatar, um diesen anzuziehen. Sie können aber auch einen neuen Rock erstellen und diesen anziehen.
</text>
<button label="Neuer Rock" label_selected="Neuer Rock" name="Create New"/>
<text name="no modify instructions">
@@ -453,7 +453,7 @@
</panel>
<panel label="Tätowierung" name="Tattoo">
<text name="title">
- [BESCHR]
+ Tätowierung
</text>
<text name="title_no_modify">
[BESCHR]: bearbeiten nicht möglich
@@ -487,7 +487,7 @@
</panel>
<panel label="Alpha" name="Alpha">
<text name="title">
- [BESCHR]
+ Alpha
</text>
<text name="title_no_modify">
[BESCHR]: bearbeiten nicht möglich
diff --git a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
index 9baf30fb53..54a8a43edf 100644
--- a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
@@ -86,7 +86,7 @@
</text>
<button label="Start" label_selected="Start" name="WLAnimSky" />
<button label="Stopp" label_selected="Stopp" name="WLStopAnimSky" />
- <button label="Grundstückszeit verw" label_selected="Zur Grundstückszeit"
+ <button label="Grundbesitzzeit verw" label_selected="Zur Grundbesitzzeit"
name="WLUseLindenTime" />
<button label="Testtag speichern" label_selected="Testtag speichern"
name="WLSaveDayCycle" />
diff --git a/indra/newview/skins/default/xui/de/floater_env_settings.xml b/indra/newview/skins/default/xui/de/floater_env_settings.xml
index 0f2370771f..0c78909108 100644
--- a/indra/newview/skins/default/xui/de/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_env_settings.xml
@@ -20,7 +20,7 @@
Wasser-
trübung
</text>
- <button label="Grundstückszeit verw." name="EnvUseEstateTimeButton"/>
+ <button label="Grundbesitzzeit verw." name="EnvUseEstateTimeButton"/>
<button label="Himmel (erweitert)" name="EnvAdvancedSkyButton"/>
<button label="Wasser (erweitert)" name="EnvAdvancedWaterButton"/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_event.xml b/indra/newview/skins/default/xui/de/floater_event.xml
index a41ac521a3..cf663e2e1b 100644
--- a/indra/newview/skins/default/xui/de/floater_event.xml
+++ b/indra/newview/skins/default/xui/de/floater_event.xml
@@ -9,6 +9,18 @@
<floater.string name="dont_notify">
Nicht benachrichtigen
</floater.string>
+ <floater.string name="moderate">
+ Moderat
+ </floater.string>
+ <floater.string name="adult">
+ Adult
+ </floater.string>
+ <floater.string name="general">
+ Allgemein
+ </floater.string>
+ <floater.string name="unknown">
+ Unbekannt
+ </floater.string>
<layout_stack name="layout">
<layout_panel name="profile_stack">
<text name="event_name">
@@ -21,12 +33,21 @@
Ausgeführt von:
</text>
<text initial_value="(wird in Datenbank gesucht)" name="event_runby"/>
+ <text name="event_date_label">
+ Datum:
+ </text>
<text name="event_date">
10/10/2010
</text>
+ <text name="event_duration_label">
+ Dauer:
+ </text>
<text name="event_duration">
1 Stunde
</text>
+ <text name="event_covercharge_label">
+ Eintritt:
+ </text>
<text name="event_cover">
Kostenlos
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_gesture.xml b/indra/newview/skins/default/xui/de/floater_gesture.xml
index 0b27b362c3..7b35da8d5c 100644
--- a/indra/newview/skins/default/xui/de/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/de/floater_gesture.xml
@@ -9,7 +9,7 @@
<floater.string name="copy_name">
Kopie von [COPY_NAME]
</floater.string>
- <scroll_list bottom_delta="-385" height="360" name="gesture_list">
+ <scroll_list name="gesture_list">
<scroll_list.columns label="Name" name="name"/>
<scroll_list.columns label="Chat" name="trigger"/>
<scroll_list.columns label="" name="key"/>
diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml
index 30b151ca58..9708d7603f 100644
--- a/indra/newview/skins/default/xui/de/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml
@@ -7,10 +7,10 @@
</panel>
<panel label="Region" name="region">
<text name="Sim Name:" width="55">
- Sim-Name:
+ Sim:
</text>
<check_box label="Startbereich Einleitung" name="check prelude" tool_tip="Diese Region zu einem Startbereich machen."/>
- <check_box label="Sonne fest" name="check fixed sun" tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundstück“ &gt; „Terrain“."/>
+ <check_box label="Sonne fest" name="check fixed sun" tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundbesitz“ &gt; „Terrain“."/>
<check_box label="Zuhause auf Teleport zurücksetzen" name="check reset home" tool_tip="Wenn Einwohner weg teleportieren, ihr Zuhause auf Zielposition setzen."/>
<check_box label="Sichtbar" name="check visible" tool_tip="Diese Region für Nicht-Götter sichtbar machen."/>
<check_box label="Schaden" name="check damage" tool_tip="Schaden in dieser Region aktivieren."/>
@@ -21,12 +21,12 @@
<button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen" name="Revert Terrain" tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="120"/>
<button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain" tool_tip="Aktuelles Terrain gegen Standard austauschen." width="120"/>
<text name="estate id">
- Grundstücks-ID:
+ Grundbesitz-ID:
</text>
<text name="parent id">
Parent ID:
</text>
- <line_editor name="parentestate" tool_tip="Das übergeordnete Grundstück dieser Region"/>
+ <line_editor name="parentestate" tool_tip="Der übergeordnete Grundbesitz dieser Region"/>
<text name="Grid Pos: ">
Raster-Pos.:
</text>
@@ -41,7 +41,7 @@
Abrechnungsfaktor:
</text>
<text name="land cost text">
- L$ pro qm:
+ L$ pro m²:
</text>
<button label="Aktualisieren" label_selected="Aktualisieren" name="Refresh" tool_tip="Klicken Sie hier, um die obigen Informationen zu aktualisieren."/>
<button label="Übernehmen" label_selected="Übernehmen" name="Apply" tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen."/>
diff --git a/indra/newview/skins/default/xui/de/floater_im.xml b/indra/newview/skins/default/xui/de/floater_im.xml
index 6aa35f2900..8ae8f120cf 100644
--- a/indra/newview/skins/default/xui/de/floater_im.xml
+++ b/indra/newview/skins/default/xui/de/floater_im.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="Instant Message">
<string name="only_user_message">
- Sie sind der einzige Benutzer in dieser Sitzung.
+ Sie sind der einzige Einwohner in dieser Sitzung.
</string>
<string name="offline_message">
[FIRST] [LAST] ist offline.
@@ -32,7 +32,7 @@
</string>
<!-- ALL of the event strings should have [RECIPIENT] in them -->
<string name="add_session_event">
- Es konnten keine Benutzer zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
+ Es konnten keine Einwohner zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
</string>
<string name="message_session_event">
Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden.
diff --git a/indra/newview/skins/default/xui/de/floater_im_session.xml b/indra/newview/skins/default/xui/de/floater_im_session.xml
index 7bde3a3453..c69bb600ea 100644
--- a/indra/newview/skins/default/xui/de/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/de/floater_im_session.xml
@@ -3,7 +3,7 @@
<layout_stack name="im_panels">
<layout_panel label="IM Steuerkonsole" name="panel_im_control_panel"/>
<layout_panel>
- <line_editor label="Bis" name="chat_editor"/>
+ <line_editor label="An" name="chat_editor"/>
</layout_panel>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_moveview.xml b/indra/newview/skins/default/xui/de/floater_moveview.xml
index 03930c8ed6..b978322cef 100644
--- a/indra/newview/skins/default/xui/de/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/de/floater_moveview.xml
@@ -18,6 +18,15 @@
<string name="fly_back_tooltip">
Rückwärts fliegen (Nach-Unten-Pfeil oder S drücken)
</string>
+ <string name="walk_title">
+ Gehen
+ </string>
+ <string name="run_title">
+ Rennen
+ </string>
+ <string name="fly_title">
+ Fliegen
+ </string>
<panel name="panel_actions">
<button label="" label_selected="" name="turn left btn" tool_tip="Nach links (Links-Pfeil oder A drücken)"/>
<button label="" label_selected="" name="turn right btn" tool_tip="Nach rechts (Rechts-Pfeil oder D drücken)"/>
@@ -30,6 +39,5 @@
<button label="" name="mode_walk_btn" tool_tip="Gehen"/>
<button label="" name="mode_run_btn" tool_tip="Rennen"/>
<button label="" name="mode_fly_btn" tool_tip="Fliegen"/>
- <button label="Landen" name="stop_fly_btn" tool_tip="Landen"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml
index fb89eeb600..ec3c45dccf 100644
--- a/indra/newview/skins/default/xui/de/floater_pay.xml
+++ b/indra/newview/skins/default/xui/de/floater_pay.xml
@@ -18,7 +18,7 @@
<button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
<text name="amount text">
- Oder Betrag auswählen:
+ oder Betrag auswählen:
</text>
<button label="Bezahlen" label_selected="Bezahlen" name="pay btn"/>
<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn"/>
diff --git a/indra/newview/skins/default/xui/de/floater_pay_object.xml b/indra/newview/skins/default/xui/de/floater_pay_object.xml
index ff85efad50..59494cc100 100644
--- a/indra/newview/skins/default/xui/de/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_pay_object.xml
@@ -22,7 +22,7 @@
<button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
<text name="amount text">
- Oder Betrag auswählen:
+ oder Betrag auswählen:
</text>
<button label="Bezahlen" label_selected="Bezahlen" name="pay btn"/>
<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" width="76"/>
diff --git a/indra/newview/skins/default/xui/de/floater_publish_classified.xml b/indra/newview/skins/default/xui/de/floater_publish_classified.xml
new file mode 100644
index 0000000000..993382727b
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_publish_classified.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="publish_classified" title="Anzeige wird veröffentlicht">
+ <text name="explanation_text">
+ Ihr Anzeige wird für eine Woche veröffentlicht.
+
+Anzeigengebühren werden nicht zurückerstattet.
+ </text>
+ <spinner label="Anzeigenpreis:" name="price_for_listing" tool_tip="Preis für Anzeige." value="50"/>
+ <text name="l$_text" value="L$"/>
+ <text name="more_info_text">
+ Weitere Infos (Link zur Hilfe)
+ </text>
+ <button label="Veröffentlichen" name="publish_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_region_info.xml b/indra/newview/skins/default/xui/de/floater_region_info.xml
index 354cdaa272..c0dc47a67d 100644
--- a/indra/newview/skins/default/xui/de/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/de/floater_region_info.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="REGION/GRUNDSTÜCK"/>
+<floater name="regioninfo" title="REGION/GRUNDBESITZ"/>
diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
index 02be3b3ed9..e37e298478 100644
--- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
@@ -23,7 +23,7 @@
{128.1, 128.1, 15.4}
</text>
<text bottom_delta="-38" height="32" name="select_object_label">
- Klicken Sie auf die Schaltfläche, dann auf das entsprechende
+ Klicken Sie die Schaltfläche, dann das entsprechende
Objekt:
</text>
<button label="" label_selected="" name="pick_btn" tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus"/>
@@ -41,11 +41,11 @@ Objekt:
</text>
<combo_box name="category_combo" tool_tip="Kategorie -- wählen Sie die Kategorie aus, die am besten auf diesen Bericht zutrifft">
<combo_box.item label="Kategorie auswählen" name="Select_category"/>
- <combo_box.item label="Alter&gt; Age-Play" name="Age__Age_play"/>
+ <combo_box.item label="Alter &gt; Age-Play" name="Age__Age_play"/>
<combo_box.item label="Alter &gt; Erwachsener Einwohner in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Alter &gt; Minderjähriger Einwohner außerhalb Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
- <combo_box.item label="Angriff&gt; Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Angriff&gt; Sichere Region" name="Assault__Safe_area"/>
+ <combo_box.item label="Angriff &gt; Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/>
+ <combo_box.item label="Angriff &gt; Sichere Region" name="Assault__Safe_area"/>
<combo_box.item label="Angriff &gt; Sandbox für Waffentest" name="Assault__Weapons_testing_sandbox"/>
<combo_box.item label="Handel &gt; Produkt nicht geliefert oder Dienstleistung nicht erbracht" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="Offenlegung &gt; Informationen aus realer Welt" name="Disclosure__Real_world_information"/>
@@ -57,7 +57,7 @@ Objekt:
<combo_box.item label="Ruhestörung &gt; Ständige Spam-Wiederholung" name="Disturbing_the_peace__Repetitive_spam"/>
<combo_box.item label="Ruhestörung &gt; Unerwünschte Spam-Werbung" name="Disturbing_the_peace__Unwanted_advert_spam"/>
<combo_box.item label="Betrug &gt; L$" name="Fraud__L$"/>
- <combo_box.item label="Betrug&gt; Land" name="Fraud__Land"/>
+ <combo_box.item label="Betrug &gt; Land" name="Fraud__Land"/>
<combo_box.item label="Betrug &gt; Schneeballsystem oder Kettenbrief" name="Fraud__Pyramid_scheme_or_chain_letter"/>
<combo_box.item label="Betrug &gt; US$" name="Fraud__US$"/>
<combo_box.item label="Belästigung &gt; Werbefarmen / visueller Spam" name="Harassment__Advert_farms___visual_spam"/>
diff --git a/indra/newview/skins/default/xui/de/floater_sell_land.xml b/indra/newview/skins/default/xui/de/floater_sell_land.xml
index 09eae40477..8f67fae464 100644
--- a/indra/newview/skins/default/xui/de/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_sell_land.xml
@@ -21,7 +21,7 @@
1. Preis festlegen:
</text>
<text name="price_text" >
- Prei angeben
+ Preis eingeben
</text>
<text name="price_ld">
L$
@@ -58,7 +58,7 @@
<text name="nag_message_label">
ACHTUNG: Verkäufe sind endgültig.
</text>
- <button label="Land zum Verkauf freigeben" name="sell_btn" width="180"/>
+ <button label="Zum Verkauf freigeben" name="sell_btn" width="180"/>
<button label="Abbrechen" name="cancel_btn"/>
</panel>
</scroll_container>
diff --git a/indra/newview/skins/default/xui/de/floater_sys_well.xml b/indra/newview/skins/default/xui/de/floater_sys_well.xml
index d7db97722c..ec79b862b4 100644
--- a/indra/newview/skins/default/xui/de/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/de/floater_sys_well.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notification_chiclet" title="MELDUNGEN">
+<floater name="sys_well_window" title="MELDUNGEN">
<string name="title_im_well_window">
GESPRÄCHE
</string>
diff --git a/indra/newview/skins/default/xui/de/floater_telehub.xml b/indra/newview/skins/default/xui/de/floater_telehub.xml
index 4d3c96bc87..83d37b2ce4 100644
--- a/indra/newview/skins/default/xui/de/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/de/floater_telehub.xml
@@ -21,7 +21,7 @@
<button label="Spawn hinzufügen" name="add_spawn_point_btn"/>
<button label="Spawn entfernen" name="remove_spawn_point_btn"/>
<text name="spawn_point_help">
- Wählen Sie ein Objekt und klicken zur Positionsangabe auf Spawn hinzufügen.
+ Wählen Sie ein Objekt und klicken Sie zur Positionsangabe auf Spawn hinzufügen.
Anschließend können Sie das Objekt verschieben oder löschen.
Positionsangaben sind relativ zum Telehub-Mittelpunkt.
Wählen Sie ein Objekt aus der Liste aus, um dieses inworld zu markieren.
diff --git a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
index 4e2d8a9274..8944c79c7d 100644
--- a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="AUSWÄHLEN: TEXTUR">
+<floater name="texture picker" title="TEXTUR AUSWÄHLEN">
<string name="choose_picture">
Zum Auswählen eines Bildes hier klicken
</string>
<text name="Multiple">
- Mehrer Texturen
+ Mehrere Texturen
</text>
<text name="unknown">
Größe: [DIMENSIONS]
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index b5c02cce0b..bb28f1b33f 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -7,7 +7,7 @@
Klicken und ziehen, um die ausgewählte Seite zu dehnen
</floater.string>
<floater.string name="status_move">
- Maus verschiebt, Umschalt-Taste und Maus kopiert
+ Maus verschiebt, Umschalt + Maus kopiert
</floater.string>
<floater.string name="status_modifyland">
Klicken und halten, um das Land zu bearbeiten
@@ -64,13 +64,13 @@
<radio_item label="Fläche auswählen" name="radio select face"/>
</radio_group>
<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
- <text name="RenderingCost" tool_tip="Zeigt die errechneten Wiedergabekosten für diesen Objekt">
+ <text name="RenderingCost" tool_tip="Zeigt die errechneten Wiedergabekosten für dieses Objekt">
þ: [COUNT]
</text>
<check_box label="Beide Seiten dehnen" name="checkbox uniform"/>
<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Wählen Sie das Rasterlineal aus, um das Objekt zu positionieren.">
+ <check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="10"/>
+ <combo_box name="combobox grid mode" tool_tip="Wählen Sie ein Rasterlineal zum Positionieren des Objekts aus.">
<combo_box.item label="Globales Raster" name="World"/>
<combo_box.item label="Lokales Raster" name="Local"/>
<combo_box.item label="Referenzraster" name="Reference"/>
@@ -196,7 +196,7 @@
</combo_box>
<check_box label="Zum Verkauf:" name="checkbox for sale"/>
<combo_box name="sale type">
- <combo_box.item label="Kopieren" name="Copy"/>
+ <combo_box.item label="Kopie" name="Copy"/>
<combo_box.item label="Inhalt" name="Contents"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
@@ -238,10 +238,10 @@
</panel>
</panel>
<panel label="Objekt" name="Object">
- <check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/>
- <check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, das Objekt geschoben und von Schwerkraft beeinflusst wird"/>
+ <check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass das Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/>
+ <check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, dass das Objekt geschoben und von Schwerkraft beeinflusst wird"/>
<check_box label="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Bewirkt, dass das Objekt 1 Minute nach seiner Erstellung gelöscht wird."/>
- <check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/>
+ <check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verhindert, dass das Objekt mit anderen Objekten oder Avataren kollidiert"/>
<text name="label position">
Position (Meter)
</text>
@@ -369,9 +369,9 @@
<spinner label="Ziehen" name="FlexFriction"/>
<spinner label="Wind" name="FlexWind"/>
<spinner label="Spannung" name="FlexTension"/>
- <spinner label="Erzwingen X" name="FlexForceX"/>
- <spinner label="Erzwingen Y" name="FlexForceY"/>
- <spinner label="Erzwingen Z" name="FlexForceZ"/>
+ <spinner label="Kraft X" name="FlexForceX"/>
+ <spinner label="Kraft Y" name="FlexForceY"/>
+ <spinner label="Kraft Z" name="FlexForceZ"/>
<check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/>
<color_swatch label="" name="colorswatch" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
<texture_picker label="" name="light texture control" tool_tip="Klicken, um eine Bild auszuwählen (dieser Effekt funktioniert nur, wenn zeitversetzte Wiedergabe aktiviert ist)"/>
@@ -477,7 +477,7 @@
<text name="label_area">
Gebiet: [AREA] m².
</text>
- <button label="Über Land" label_selected="Über Land" name="button about land"/>
+ <button label="Land-Info" label_selected="Land-Info" name="button about land"/>
<check_box label="Eigentümer anzeigen" name="checkbox show owners" tool_tip="Die Parzellen farblich nach Eigentümtertyp anzeigen Grün = Ihr Land Blau = Das Land Ihrer Gruppe Rot = Im Eigentum anderer Geld = Zum Verkauf Lila = Zur Auktion Grau = Öffentlich"/>
<text name="label_parcel_modify">
Parzelle ändern
diff --git a/indra/newview/skins/default/xui/de/floater_tos.xml b/indra/newview/skins/default/xui/de/floater_tos.xml
index e11b453b41..27c15a0337 100644
--- a/indra/newview/skins/default/xui/de/floater_tos.xml
+++ b/indra/newview/skins/default/xui/de/floater_tos.xml
@@ -3,15 +3,15 @@
<button label="Weiter" label_selected="Weiter" name="Continue"/>
<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
<radio_group name="tos_agreement">
- <radio_item label="Ich stimme den Nutzungsbedingungen nicht zu" name="radio_disagree"/>
- <radio_item label="Ich stimme den Nutzungsbedingungen zu" name="radio_agree"/>
+ <radio_item label="Ich stimme den Servicebedingungen nicht zu" name="radio_disagree"/>
+ <radio_item label="Ich stimme den Servicebedingungen zu" name="radio_agree"/>
</radio_group>
<text name="tos_title">
Nutzungsvereinbarung
</text>
- <check_box label="Ich stimme den Nutzungsbedingungen zu" name="agree_chk"/>
+ <check_box label="Ich stimme den Servicebedingungen und Datenschutzbestimmungen zu." name="agree_chk"/>
<text name="tos_heading">
- Lesen Sie die folgenden Servicebedingungen sorgfältig durch. Sie müssen den Servicebedinungen zustimmen, um [SECOND_LIFE] weiterhin verwenden zu können.
+ Lesen Sie die folgenden Servicebedingungen und Datenbestimmungen sorgfältig durch. Sie müssen den Servicebedingungen zustimmen, um sich bei [SECOND_LIFE] anmelden zu können.
</text>
<text_editor name="tos_text">
TOS_TEXT
diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
index f978042cc2..aa582838a4 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
@@ -16,6 +16,9 @@
Es ist niemand in der Nähe, der Voice aktiviert hat.
</string>
<layout_stack name="my_call_stack">
+ <layout_panel name="my_panel">
+ <text name="user_text" value="Mein Avatar:"/>
+ </layout_panel>
<layout_panel name="leave_call_btn_panel">
<button label="Anruf beenden" name="leave_call_btn"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml
index ecd6d7ff3e..097a60a444 100644
--- a/indra/newview/skins/default/xui/de/floater_water.xml
+++ b/indra/newview/skins/default/xui/de/floater_water.xml
@@ -10,7 +10,7 @@
<button label="Speichern" label_selected="Speichern" name="WaterSavePreset"/>
<button label="Löschen" label_selected="Löschen" name="WaterDeletePreset"/>
<tab_container name="Water Tabs">
- <panel label="Einstellungen" name="Settings">
+ <panel label="EINSTELLUNGEN" name="Settings">
<text name="BHText">
Wassertrübungsfarbe
</text>
@@ -44,7 +44,7 @@
Mischungsmultiplikator
</text>
</panel>
- <panel label="Bild" name="Waves">
+ <panel label="BILD" name="Waves">
<text name="BHText">
Richtung große Welle
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_windlight_options.xml b/indra/newview/skins/default/xui/de/floater_windlight_options.xml
index 3e06d8f06b..5b59336f9d 100644
--- a/indra/newview/skins/default/xui/de/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_windlight_options.xml
@@ -8,7 +8,7 @@
<button label="Löschen" label_selected="Löschen" name="WLDeletePreset"/>
<button label="Tageszyklus-Editor" label_selected="Tageszyklus-Editor" name="WLDayCycleMenuButton"/>
<tab_container name="WindLight Tabs">
- <panel label="Atmosphäre" name="Atmosphere">
+ <panel label="ATMOSPHÄRE" name="Atmosphere">
<text name="BHText">
Horizontfarbe
</text>
@@ -62,7 +62,7 @@
</text>
<button label=" ?" name="WLMaxAltitudeHelp"/>
</panel>
- <panel label="Licht" name="Lighting">
+ <panel label="LICHT" name="Lighting">
<text name="SLCText">
Sonne/Mond-Farbe
</text>
@@ -118,7 +118,7 @@
</text>
<button label=" ?" name="WLStarBrightnessHelp"/>
</panel>
- <panel label="Wolken" name="Clouds">
+ <panel label="WOLKEN" name="Clouds">
<text name="WLCloudColorText">
Wolkenfarbe
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_world_map.xml b/indra/newview/skins/default/xui/de/floater_world_map.xml
index 7d8a634452..a1f41f53ad 100644
--- a/indra/newview/skins/default/xui/de/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/de/floater_world_map.xml
@@ -5,7 +5,7 @@
Legende
</text>
</panel>
- <panel>
+ <panel name="layout_panel_2">
<button label="Meine Position" label_selected="Wo bin ich?" name="Show My Location" tool_tip="Karte auf Position meines Avatars zentrieren"/>
<text name="me_label">
Ich
@@ -30,16 +30,16 @@
</text>
<button label="Nach Hause" label_selected="Nach Hause" name="Go Home" tool_tip="Nach Hause teleportieren"/>
<text name="Home_label">
- Startseite
+ Zuhause
</text>
<text name="events_label">
Events:
</text>
<check_box label="PG" name="event_chk"/>
<text name="pg_label">
- Allgemein
+ Generell
</text>
- <check_box initial_value="true" label="Mature" name="event_mature_chk"/>
+ <check_box initial_value="wahr" label="Mature" name="event_mature_chk"/>
<text name="mature_label">
Moderat
</text>
@@ -48,12 +48,12 @@
Adult
</text>
</panel>
- <panel>
+ <panel name="layout_panel_3">
<text name="find_on_map_label">
Auf Karte anzeigen
</text>
</panel>
- <panel>
+ <panel name="layout_panel_4">
<combo_box label="Online-Freunde" name="friend combo" tool_tip="Freunde auf Karte anzeigen">
<combo_box.item label="Meine Freunde: Online" name="item1"/>
</combo_box>
@@ -71,12 +71,12 @@
<button font="SansSerifSmall" label="SLurl kopieren" name="copy_slurl" tool_tip="Kopiert die aktuelle Position als SLurl zur Verwendung im Web."/>
<button label="Auswahl anzeigen" label_selected="Ziel anzeigen" name="Show Destination" tool_tip="Karte auf ausgewählte Position zentrieren"/>
</panel>
- <panel>
+ <panel name="layout_panel_5">
<text name="zoom_label">
Zoom
</text>
</panel>
- <panel>
+ <panel name="layout_panel_6">
<slider label="Zoom" name="zoom slider"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/de/language_settings.xml b/indra/newview/skins/default/xui/de/language_settings.xml
index 71418d446a..3e357007ff 100644
--- a/indra/newview/skins/default/xui/de/language_settings.xml
+++ b/indra/newview/skins/default/xui/de/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">german</string>
+ <string name="DarwinLocale">de_DE.UTF-8</string>
+ <string name="LinuxLocale">de_DE.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/de/menu_inventory_add.xml b/indra/newview/skins/default/xui/de/menu_inventory_add.xml
index 448b1d80bf..531edc02f1 100644
--- a/indra/newview/skins/default/xui/de/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/de/menu_inventory_add.xml
@@ -20,7 +20,7 @@
<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
<menu_item_call label="Neue Unterhose" name="New Underpants"/>
- <menu_item_call label="Alpha: Neu" name="New Alpha"/>
+ <menu_item_call label="Neues Alpha" name="New Alpha"/>
<menu_item_call label="Neue Tätowierung" name="New Tattoo"/>
</menu>
<menu label="Neue Körperteile" name="New Body Parts">
diff --git a/indra/newview/skins/default/xui/de/menu_land.xml b/indra/newview/skins/default/xui/de/menu_land.xml
index 9b1e6727b7..de679da3d8 100644
--- a/indra/newview/skins/default/xui/de/menu_land.xml
+++ b/indra/newview/skins/default/xui/de/menu_land.xml
@@ -5,5 +5,5 @@
<menu_item_call label="Dieses Land kaufen" name="Land Buy"/>
<menu_item_call label="Pass kaufen" name="Land Buy Pass"/>
<menu_item_call label="Bauen" name="Create"/>
- <menu_item_call label="Terrain bearbeiten" name="Edit Terrain"/>
+ <menu_item_call label="Land bearbeiten" name="Edit Terrain"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_mini_map.xml b/indra/newview/skins/default/xui/de/menu_mini_map.xml
index a3ebfb3b10..7139b98965 100644
--- a/indra/newview/skins/default/xui/de/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/de/menu_mini_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
+<menu name="Popup">
<menu_item_call label="Zoom Nah" name="Zoom Close"/>
<menu_item_call label="Zoom Mittel" name="Zoom Medium"/>
<menu_item_call label="Zoom Weit" name="Zoom Far"/>
diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml
index 320f93c796..8bb7b66482 100644
--- a/indra/newview/skins/default/xui/de/menu_object.xml
+++ b/indra/newview/skins/default/xui/de/menu_object.xml
@@ -5,6 +5,7 @@
<menu_item_call label="Bauen" name="Build"/>
<menu_item_call label="Öffnen" name="Open"/>
<menu_item_call label="Hier sitzen" name="Object Sit"/>
+ <menu_item_call label="Aufstehen" name="Object Stand Up"/>
<menu_item_call label="Objektprofil" name="Object Inspect"/>
<menu_item_call label="Hineinzoomen" name="Zoom In"/>
<context_menu label="Anziehen â–¶" name="Put On">
@@ -18,6 +19,7 @@
<menu_item_call label="Zurückgeben" name="Return..."/>
<menu_item_call label="Löschen" name="Delete"/>
</context_menu>
+ <menu_item_call label="Kaufen" name="Pie Object Bye"/>
<menu_item_call label="Nehmen" name="Pie Object Take"/>
<menu_item_call label="Kopie nehmen" name="Take Copy"/>
<menu_item_call label="Bezahlen" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby.xml b/indra/newview/skins/default/xui/de/menu_people_nearby.xml
index a69ef3891a..1db964357f 100644
--- a/indra/newview/skins/default/xui/de/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_nearby.xml
@@ -5,6 +5,7 @@
<menu_item_call label="Freund entfernen" name="Remove Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="Anrufen" name="Call"/>
+ <menu_item_call label="Karte" name="Map"/>
<menu_item_call label="Teilen" name="Share"/>
<menu_item_call label="Bezahlen" name="Pay"/>
<menu_item_check label="Ignorieren/Freischalten" name="Block/Unblock"/>
diff --git a/indra/newview/skins/default/xui/de/menu_profile_overflow.xml b/indra/newview/skins/default/xui/de/menu_profile_overflow.xml
index 03bc19aa3f..9f3fcbca1d 100644
--- a/indra/newview/skins/default/xui/de/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/de/menu_profile_overflow.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="profile_overflow_menu">
+ <menu_item_call label="Karte" name="show_on_map"/>
<menu_item_call label="Bezahlen" name="pay"/>
<menu_item_call label="Teilen" name="share"/>
<menu_item_call label="Ignorieren" name="block"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index a04532376c..84ed19e253 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -32,7 +32,7 @@
<menu_item_call label="Landmarke für diesen Ort setzen" name="Create Landmark Here"/>
<menu label="Ortsprofil" name="Land">
<menu_item_call label="Land-Info" name="About Land"/>
- <menu_item_call label="Region/Grundstück" name="Region/Estate"/>
+ <menu_item_call label="Region/Grundbesitz" name="Region/Estate"/>
</menu>
<menu_item_call label="Dieses Land kaufen" name="Buy Land"/>
<menu_item_call label="Mein Land" name="My Land"/>
@@ -43,6 +43,8 @@
<menu_item_check label="Strahlen" name="beacons"/>
<menu_item_check label="Grundstücksgrenzen" name="Property Lines"/>
<menu_item_check label="Landeigentümer" name="Land Owners"/>
+ <menu_item_check label="Koordinaten" name="Coordinates"/>
+ <menu_item_check label="Parzelleneigenschaften" name="Parcel Properties"/>
</menu>
<menu_item_call label="Teleport nach Hause" name="Teleport Home"/>
<menu_item_call label="Hier als Zuhause wählen" name="Set Home to Here"/>
@@ -51,7 +53,7 @@
<menu_item_call label="Mittag" name="Noon"/>
<menu_item_call label="Sonnenuntergang" name="Sunset"/>
<menu_item_call label="Mitternacht" name="Midnight"/>
- <menu_item_call label="Grundstückszeit" name="Revert to Region Default"/>
+ <menu_item_call label="Grundbesitzzeit" name="Revert to Region Default"/>
<menu_item_call label="Umwelt-Editor" name="Environment Editor"/>
</menu>
</menu>
@@ -81,7 +83,8 @@
<menu_item_call label="Fokus auf Auswahl" name="Focus on Selection"/>
<menu_item_call label="Auf Auswahl zoomen" name="Zoom to Selection"/>
<menu label="Objekt" name="Object">
- <menu_item_call label="Kaufen" name="Menu Object Take"/>
+ <menu_item_call label="Kaufen" name="Menu Object Buy"/>
+ <menu_item_call label="Nehmen" name="Menu Object Take"/>
<menu_item_call label="Kopie nehmen" name="Take Copy"/>
<menu_item_call label="Objekt wieder in meinem Inventar speichern" name="Save Object Back to My Inventory"/>
<menu_item_call label="Wieder in Objektinhalt speichern" name="Save Object Back to Object Contents"/>
@@ -159,7 +162,7 @@
<menu_item_check label="Partikel" name="Particles"/>
<menu_item_check label="Unebenheiten" name="Bump"/>
</menu>
- <menu label="Rederning-Eigenschaften" name="Rendering Features">
+ <menu label="Rendering-Eigenschaften" name="Rendering Features">
<menu_item_check label="UI" name="UI"/>
<menu_item_check label="Ausgewählt" name="Selected"/>
<menu_item_check label="Farblich hervorgehoben" name="Highlighted"/>
@@ -169,7 +172,7 @@
<menu_item_check label="FRInfo testen" name="Test FRInfo"/>
<menu_item_check label="Flexible Objekte" name="Flexible Objects"/>
</menu>
- <menu_item_check label="Mehrer Threads ausführen" name="Run Multiple Threads"/>
+ <menu_item_check label="Mehrere Threads ausführen" name="Run Multiple Threads"/>
<menu_item_call label="Gruppen-Cache löschen" name="ClearGroupCache"/>
<menu_item_check label="Weiche Mausbewegung" name="Mouse Smoothing"/>
<menu label="Tastaturkürzel" name="Shortcuts">
@@ -405,7 +408,7 @@
<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="Allgemeine Probleme-Tracker" name="Public Issue Tracker"/>
+ <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"/>
diff --git a/indra/newview/skins/default/xui/de/mime_types.xml b/indra/newview/skins/default/xui/de/mime_types.xml
index e01649e911..de93107e94 100644
--- a/indra/newview/skins/default/xui/de/mime_types.xml
+++ b/indra/newview/skins/default/xui/de/mime_types.xml
@@ -22,14 +22,6 @@
Video wiedergeben
</playtip>
</widgetset>
- <widgetset name="none">
- <label name="none_label">
- Keine Inhalte
- </label>
- <tooltip name="none_tooltip">
- Keine Medien gefunden
- </tooltip>
- </widgetset>
<widgetset name="image">
<label name="image_label">
Bild
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index da4a96962e..c2f25c84b8 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -110,7 +110,7 @@ Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
<usetemplate name="okbutton" yestext="Ja"/>
</notification>
<notification name="GrantModifyRights">
- Wenn Sie einem anderen Einwohner, das die Erlaubnis zum Bearbeiten erteilen, dann kann dieser JEDES Objekt, das Sie inworld besitzen, verändern, löschen oder nehmen. Seien Sie SEHR vorsichtig, wenn Sie diese Erlaubnis gewähren!
+ Wenn Sie einem anderen Einwohner die Erlaubnis zum Bearbeiten erteilen, dann kann dieser JEDES Objekt, das Sie inworld besitzen, verändern, löschen oder nehmen. Seien Sie SEHR vorsichtig, wenn Sie diese Erlaubnis gewähren!
Möchten Sie [FIRST_NAME] [LAST_NAME] die Erlaubnis zum Bearbeiten gewähren?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
@@ -185,7 +185,7 @@ Fortfahren?
<notification name="JoinGroupNoCost">
Sie treten der Gruppe [NAME] bei.
Fortfahren?
- <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Zusammenlegen"/>
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Beitreten"/>
</notification>
<notification name="JoinGroupCannotAfford">
Der Beitritt zu dieser Gruppe kostet [COST] L$.
@@ -207,15 +207,15 @@ Bitte laden Sie innerhalb von 48 Stunden Mitglieder in Ihre Gruppe ein.
Wählen Sie eine bestimmte Person aus, wenn Sie für 0 L$ verkaufen.
</notification>
<notification name="ConfirmLandSaleChange">
- Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
-Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
+ Die ausgewählten [LAND_SIZE] m² Land werden zum Verkauf freigegeben.
+Der Verkaufspreis beträgt [SALE_PRICE] L$. Der Verkauf an [NAME] wird zu diesem Preis freigegeben.
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="ConfirmLandSaleToAnyoneChange">
ACHTUNG: Wenn Sie auf An jeden verkaufen klicken, kann jeder in [SECOND_LIFE] Ihr Land kaufen, auch Einwohner in anderen Regionen.
Die ausgewählten [LAND_SIZE] m² Land werden zum Verkauf freigegeben.
-Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
+Der Verkaufspreis beträgt [SALE_PRICE] L$. Der Verkauf an [NAME] wird zu diesem Preis freigegeben.
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="ReturnObjectsDeededToGroup">
@@ -455,7 +455,6 @@ Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
<notification name="UnsupportedHardware">
Ihr Computer entspricht leider nicht den Mindestanforderungen von [APP_NAME]. Dies kann zur Folge haben, dass das Programm nicht sehr gut ausgeführt wird. Bei nicht unterstützten Systemkonfigurationen kann Ihnen unser [SUPPORT_SITE] leider nicht helfen.
-MINDESTANF.
Weitere Informationen finden Sie auf [_URL].
<url name="url" option="0">
http://secondlife.com/support/sysreqs.php?lang=de
@@ -921,13 +920,13 @@ Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen
Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
</notification>
<notification label="Freund hinzufügen" name="AddFriend">
- Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
+ Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu sehen und den Online-Status anzuzeigen.
[NAME] Freundschaft anbieten?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification label="Freund hinzufügen" name="AddFriendWithMessage">
- Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
+ Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu sehen und den Online-Status anzuzeigen.
[NAME] Freundschaft anbieten?
<form name="form">
@@ -1190,7 +1189,7 @@ Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 un
Es sind maximal [MAX_MANAGER] verbannte Einwohner erlaub.
</notification>
<notification name="OwnerCanNotBeDenied">
- Der Eigentümer des Grundstücks kann nicht zur Liste der „Verbannten Einwohner“ hinzugefügt werden.
+ Der Eigentümer des Grundbesitzes kann nicht zur Liste der „Verbannten Einwohner“ hinzugefügt werden.
</notification>
<notification name="CanNotChangeAppearanceUntilLoaded">
Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind.
@@ -1406,7 +1405,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
</form>
</notification>
<notification name="OfferTeleportFromGod">
- Benutzer an Ihrem Standort herbeirufen?
+ Einwohner zu Ihrem Standort einladen?
<form name="form">
<input name="message">
Triff mich in [REGION]
@@ -1427,67 +1426,67 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
Zu [CLASSIFIED] teleportieren?
<usetemplate ignoretext="Bestätigen, dass ich zu einer Position in Anzeigen teleportieren möchte." name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
</notification>
- <notification label="Nachricht an alle auf diesem Grundstück" name="MessageEstate">
- Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundstück gesendet wird.
+ <notification label="Nachricht an alle auf diesem Grundbesitz" name="MessageEstate">
+ Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundbesitz gesendet wird.
<form name="form">
<input name="message"/>
<button name="OK" text="OK"/>
<button name="Cancel" text="Abbrechen"/>
</form>
</notification>
- <notification label="Linden-Grundstück ändern" name="ChangeLindenEstate">
- Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
+ <notification label="Linden-Grundbesitz ändern" name="ChangeLindenEstate">
+ Sie sind im Begriff, einen Grundbesitz in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
Dies ist ÄUSSERST GEFÄHRLICH, da es grundlegende Auswirkungen auf das Benutzererlebnis hat. Auf dem Mainland werden tausende Regionen geändert, was den Spaceserver stark belastet.
Fortfahren?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
- <notification label="Zugang zu Linden-Grundstück ändern" name="ChangeLindenAccess">
- Sie sind im Begriff, die Zugangsliste für ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
+ <notification label="Zugang zu Linden-Grundbesitz ändern" name="ChangeLindenAccess">
+ Sie sind im Begriff, die Zugangsliste für einen Grundbesitz in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
Dies ist GEFÄHRLICH und sollte nur erfolgen, um Objekte/L$ per Hack in und aus dem Raster zu entfernen.
Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belastet.
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
- <notification label="Grundstück wählen" name="EstateAllowedAgentAdd">
- Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Erlaubnisliste hinzufügen?
- <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+ <notification label="Grundbesitz wählen" name="EstateAllowedAgentAdd">
+ Nur für diesen Grundbesitz oder für alle [ALL_ESTATES] zur Erlaubnisliste hinzufügen?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Dieser Grundbesitz"/>
</notification>
- <notification label="Grundstück wählen" name="EstateAllowedAgentRemove">
- Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Erlaubnisliste entfernen?
- <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+ <notification label="Grundbesitz wählen" name="EstateAllowedAgentRemove">
+ Nur für diesen Grundbesitz oder für alle [ALL_ESTATES] von Erlaubnisliste entfernen?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/>
</notification>
- <notification label="Grundstück wählen" name="EstateAllowedGroupAdd">
- Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Gruppen-Erlaubnisliste hinzufügen?
- <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+ <notification label="Grundbesitz wählen" name="EstateAllowedGroupAdd">
+ Nur für diesen Grundbesitz oder für alle [ALL_ESTATES] zur Gruppen-Erlaubnisliste hinzufügen?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/>
</notification>
- <notification label="Grundstück wählen" name="EstateAllowedGroupRemove">
- Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Gruppen-Erlaubnisliste entfernen?
- <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+ <notification label="Grundbesitz wählen" name="EstateAllowedGroupRemove">
+ Nur für diesen Grundbesitz oder für alle [ALL_ESTATES] von Gruppen-Erlaubnisliste entfernen?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/>
</notification>
- <notification label="Grundstück wählen" name="EstateBannedAgentAdd">
- Zugang nur für dieses Grundstück oder für [ALL_ESTATES] verweigern?
- <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+ <notification label="Grundbesitz wählen" name="EstateBannedAgentAdd">
+ Zugang nur für diesen Grundbesitz oder für [ALL_ESTATES] verweigern?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/>
</notification>
- <notification label="Grundstück wählen" name="EstateBannedAgentRemove">
- Einwohner nur für dieses Grundstück oder für alle [ALL_ESTATES] von der Bannliste entfernen?
- <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+ <notification label="Grundbesitz wählen" name="EstateBannedAgentRemove">
+ Einwohner nur für diesen Grundbesitz oder für alle [ALL_ESTATES] von der Bannliste entfernen?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/>
</notification>
- <notification label="Grundstück wählen" name="EstateManagerAdd">
- Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] festlegen?
- <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+ <notification label="Grundbesitz wählen" name="EstateManagerAdd">
+ Verwalter nur für diesen Grundbesitz oder für [ALL_ESTATES] festlegen?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/>
</notification>
- <notification label="Grundstück wählen" name="EstateManagerRemove">
- Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] entfernen?
- <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+ <notification label="Grundbesitz wählen" name="EstateManagerRemove">
+ Verwalter nur für diesen Grundbesitz oder für [ALL_ESTATES] entfernen?
+ <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/>
</notification>
<notification label="Rauswurf bestätigen" name="EstateKickUser">
- Benutzer [EVIL_USER] von diesem Grundstück werfen?
+ Benutzer [EVIL_USER] von diesem Grundbesitz werfen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="EstateChangeCovenant">
- Möchten Sie den Grundstücksvertrag wirklich ändern?
+ Möchten Sie den Grundbesitzvertrag wirklich ändern?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="RegionEntryAccessBlocked">
@@ -1571,14 +1570,14 @@ Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstuf
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="ProblemImportingEstateCovenant">
- Problem beim Import des Grundstückvertrags.
+ Problem beim Import des Grundbesitzvertrags.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="ProblemAddingEstateManager">
- Es gibt Probleme beim Hinzufügen eines neuen Grundstücksverwalters. Bei mindestens einem Grundstück ist die Verwalterliste voll.
+ Es gibt Probleme beim Hinzufügen eines neuen Grundbesitzverwalters. Bei mindestens einem Grundbesitz ist die Verwalterliste voll.
</notification>
<notification name="ProblemAddingEstateGeneric">
- Problem beim Hinzufügen zu dieser Grundstücksliste. Bei mindestens einem Grundstück ist die Liste voll.
+ Problem beim Hinzufügen zu dieser Grundbesitzliste. Bei mindestens einem Grundbesitz ist die Liste voll.
</notification>
<notification name="UnableToLoadNotecardAsset">
Notizkarten-Asset konnte nicht geladen werden.
@@ -1741,7 +1740,7 @@ Inventarobjekt(e) verschieben?
<usetemplate ignoretext="Bestätigen, bevor Sitzung beendet wird" name="okcancelignore" notext="Nicht beenden" yestext="Beenden"/>
</notification>
<notification name="HelpReportAbuseEmailLL">
- Mit dieser Funktion können Sie Verstöße gegen die [http://secondlife.com/corporate/tos.php Servicebedingungen (EN)] and [http://secondlife.com/corporate/cs.php Community-Standards] melden.
+ Mit dieser Funktion können Sie Verstöße gegen die [http://secondlife.com/corporate/tos.php Servicebedingungen (EN)] und [http://secondlife.com/corporate/cs.php Community-Standards] melden.
Alle gemeldeten Verstöße werden bearbeitet.
</notification>
@@ -2062,9 +2061,9 @@ Wählen Sie ein einzelnes Objekt aus.
Ihre Visitenkarte wurde abgelehnt.
</notification>
<notification name="TeleportToLandmark">
- Sie können an Positionen wie „[NAME]“ teleportieren, wenn Sie rechts in Ihrem Bildschirm die Tafel „Orte“ öffnen und dann die Registerkarte „Landmarken“ auswählen.
-Klicken Sie auf eine Landmarke, um diese auszuwählen. Klicken Sie anschließend auf „Teleport“ unten in der Konsole.
-(Sie können auch auf die Landmarke doppelt klicken oder mit rechts auf die Landmarke klicken und dann „Teleport“ auswählen).
+ Sie können an Positionen wie „[NAME]“ teleportieren, wenn Sie rechts in Ihrem Bildschirm die Tafel „Orte“ öffnen und dann die Registerkarte „Meine Landmarken“ auswählen.
+Klicken Sie auf eine Landmarke, um diese auszuwählen. Klicken Sie anschließend auf unten in der Registerkarte auf „Teleportieren“.
+(Sie können auch auf die Landmarke doppelt klicken oder mit rechts auf die Landmarke klicken und dann „Teleportieren“ auswählen).
</notification>
<notification name="TeleportToPerson">
Sie können Einwohner wie „[NAME]“ kontaktieren, wenn Sie die Tafel „Leute“ auf der rechten Seite Ihres Bildschirms öffnen.
@@ -2079,7 +2078,7 @@ Wählen Sie eine kleinere Landfläche.
Einige Begriffe in Ihrer Suchanfrage wurden ausgeschlossen, aufgrund von in den Community Standards definierten Inhaltsbeschränkungen.
</notification>
<notification name="NoContentToSearch">
- Bitte wählen Sie mindestens eine Inhaltsart für die Suche aus (Allgemein, Moderat oder Adult).
+ Bitte wählen Sie mindestens eine Inhaltsart für die Suche aus (Generell, Moderat oder Adult).
</notification>
<notification name="GroupVote">
[NAME] hat eine Abstimmung vorgeschlagen über:
@@ -2201,10 +2200,10 @@ Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regione
Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor.
</notification>
<notification name="MustGetAgeRgion">
- Sie müssen alterüberprüft sein, um diese Region betreten zu können.
+ Sie müssen altersüberprüft sein, um diese Region betreten zu können.
</notification>
<notification name="MustGetAgeParcel">
- Sie müssen alterüberprüft sein, um diese Parzelle betreten zu können.
+ Sie müssen altersüberprüft sein, um diese Parzelle betreten zu können.
</notification>
<notification name="NoDestRegion">
Keine Zielregion gefunden.
@@ -2288,7 +2287,7 @@ Versuchen Sie es in einigen Minuten erneut.
<form name="form">
<button name="Show" text="Anzeigen"/>
<button name="Discard" text="Verwerfen"/>
- <button name="Mute" text="Ignorieren"/>
+ <button name="Mute" text="Blockieren"/>
</form>
</notification>
<notification name="GodMessage">
@@ -2353,6 +2352,12 @@ Versuchen Sie es in einigen Minuten erneut.
<notification name="FriendshipDeclined">
[NAME] hat Ihr Freundschaftsangebot abgelehnt.
</notification>
+ <notification name="FriendshipAcceptedByMe">
+ Ihr Freundschaftsangebot wurde angeommen.
+ </notification>
+ <notification name="FriendshipDeclinedByMe">
+ Ihr Freundschaftsangebot wurde abgelehnt.
+ </notification>
<notification name="OfferCallingCard">
[FIRST] [LAST] bietet Ihnen ihre/seine Visitenkarte an.
Ihrem Inventar wird ein Lesezeichen erstellt, damit Sie diesem Einwohner einfach eine IM schicken können.
@@ -2362,7 +2367,7 @@ Ihrem Inventar wird ein Lesezeichen erstellt, damit Sie diesem Einwohner einfach
</form>
</notification>
<notification name="RegionRestartMinutes">
- Diese Region wird in [Minuten] neu gestartet.
+ Diese Region wird in [MINUTES] neu gestartet.
Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
</notification>
<notification name="RegionRestartSeconds">
@@ -2562,7 +2567,7 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
</notification>
<notification name="ConfirmCloseAll">
Möchten Sie wirklich alle IMs schließen?
- <usetemplate name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ <usetemplate ignoretext="Bestätigen, bevor ich alle IMs schließe." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="AttachmentSaved">
Der Anhang wurde gespeichert.
diff --git a/indra/newview/skins/default/xui/de/panel_bottomtray.xml b/indra/newview/skins/default/xui/de/panel_bottomtray.xml
index d3f89b0ad3..d52b8dcf4d 100644
--- a/indra/newview/skins/default/xui/de/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/de/panel_bottomtray.xml
@@ -9,7 +9,7 @@
<layout_stack name="toolbar_stack">
<layout_panel name="speak_panel">
<talk_button name="talk">
- <speak_button label="Sprechen" label_selected="Sprechen" name="speak_btn"/>
+ <speak_button label="Sprechen" label_selected="Sprechen" name="speak_btn" halign="right" />
</talk_button>
</layout_panel>
<layout_panel name="gesture_panel">
diff --git a/indra/newview/skins/default/xui/de/panel_classified_info.xml b/indra/newview/skins/default/xui/de/panel_classified_info.xml
index d824eff338..ac1cd7ba88 100644
--- a/indra/newview/skins/default/xui/de/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/de/panel_classified_info.xml
@@ -4,21 +4,51 @@
Moderat
</panel.string>
<panel.string name="type_pg">
- Allgemeiner Inhalt
+ Genereller Inhalt
</panel.string>
<panel.string name="l$_price">
[PRICE] L$
</panel.string>
+ <panel.string name="click_through_text_fmt">
+ [TELEPORT] teleportieren, [MAP] Karte, [PROFILE] Profil
+ </panel.string>
+ <panel.string name="date_fmt">
+ [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
+ </panel.string>
+ <panel.string name="auto_renew_on">
+ Aktiviert
+ </panel.string>
+ <panel.string name="auto_renew_off">
+ Deaktiviert
+ </panel.string>
<text name="title" value="Anzeigen-Info"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<text_editor name="classified_name" value="[name]"/>
- <text_editor name="classified_location" value="[wird geladen...]"/>
+ <text name="classified_location_label" value="Standort:"/>
+ <text_editor name="classified_location" value="[loading...]"/>
+ <text name="content_type_label" value="Inhaltsart:"/>
<text_editor name="content_type" value="[Inhalts-Art]"/>
+ <text name="category_label" value="Kategorie:"/>
<text_editor name="category" value="[Kategorie]"/>
- <check_box label="Jede Woche automatisch erneuern" name="auto_renew"/>
- <text_editor name="price_for_listing" tool_tip="Preis für Anzeige."/>
- <text_editor name="classified_desc" value="[description]"/>
+ <text name="creation_date_label" value="Erstellungsdatum:"/>
+ <text_editor name="creation_date" tool_tip="Erstellungsdatum" value="[date]"/>
+ <text name="price_for_listing_label" value="Preis für Anzeige:"/>
+ <text_editor name="price_for_listing" tool_tip="Preis für Anzeige." value="[price]"/>
+ <layout_stack name="descr_stack">
+ <layout_panel name="clickthrough_layout_panel">
+ <text name="click_through_label" value="Klicks:"/>
+ <text_editor name="click_through_text" tool_tip="Click-Through-Daten" value="[clicks]"/>
+ </layout_panel>
+ <layout_panel name="price_layout_panel">
+ <text name="auto_renew_label" value="Autom. erneuern:"/>
+ <text name="auto_renew" value="Aktiviert"/>
+ </layout_panel>
+ <layout_panel name="descr_layout_panel">
+ <text name="classified_desc_label" value="Beschreibung:"/>
+ <text_editor name="classified_desc" value="[description]"/>
+ </layout_panel>
+ </layout_stack>
</panel>
</scroll_container>
<panel name="buttons">
diff --git a/indra/newview/skins/default/xui/de/panel_edit_classified.xml b/indra/newview/skins/default/xui/de/panel_edit_classified.xml
index 2e0370c579..0d9487e895 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_classified.xml
@@ -3,12 +3,20 @@
<panel.string name="location_notice">
(wird nach Speichern aktualisiert)
</panel.string>
+ <string name="publish_label">
+ Veröffentlichen
+ </string>
+ <string name="save_label">
+ Speichern
+ </string>
<text name="title">
Anzeige bearbeiten
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <icon label="" name="edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
+ <panel name="snapshot_panel">
+ <icon label="" name="edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
+ </panel>
<text name="Name:">
Titel:
</text>
@@ -22,20 +30,19 @@
wird geladen...
</text>
<button label="Aktuellen Standort verwenden" name="set_to_curr_location_btn"/>
- <combo_box name="content_type">
- <combo_item name="mature_ci">
- Moderater Inhalt
- </combo_item>
- <combo_item name="pg_ci">
- Allgemeiner Inhalt
- </combo_item>
- </combo_box>
+ <text name="category_label" value="Kategorie:"/>
+ <text name="content_type_label" value="Inhaltsart:"/>
+ <icons_combo_box label="Genereller Inhalt" name="content_type">
+ <icons_combo_box.item label="Moderater Inhalt" name="mature_ci" value="Moderat"/>
+ <icons_combo_box.item label="Genereller Inhalt" name="pg_ci" value="G"/>
+ </icons_combo_box>
+ <text name="price_for_listing_label" value="Preis für Anzeige:"/>
<spinner label="L$" name="price_for_listing" tool_tip="Preis für Anzeige." value="50"/>
<check_box label="Jede Woche automatisch erneuern" name="auto_renew"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Speichern" name="save_changes_btn"/>
+ <button label="[LABEL]" name="save_changes_btn"/>
<button label="Abbrechen" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_jacket.xml b/indra/newview/skins/default/xui/de/panel_edit_jacket.xml
index 3752faf48a..950c9023fe 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_jacket.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_jacket.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_jacket_panel">
<panel name="avatar_jacket_color_panel">
- <texture_picker label="Oberstoff" name="Upper Fabric" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
- <texture_picker label="Unterstoff" name="Lower Fabric" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
+ <texture_picker label="Stoff: oben" name="Upper Fabric" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
+ <texture_picker label="Stoff: unten" name="Lower Fabric" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
</panel>
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/de/panel_edit_pick.xml b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
index 0cb14177af..1ec4f09161 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Auswahl bearbeiten" name="panel_edit_pick">
+ <panel.string name="location_notice">
+ (wird nach Speichern aktualisiert)
+ </panel.string>
<text name="title">
Auswahl bearbeiten
</text>
@@ -22,7 +25,7 @@
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="[WHAT] speichern" name="save_changes_btn"/>
+ <button label="Auswahl speichern" name="save_changes_btn"/>
<button label="Abbrechen" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_skin.xml b/indra/newview/skins/default/xui/de/panel_edit_skin.xml
index 46bd1d9f4d..90b06a29bc 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_skin.xml
@@ -8,7 +8,7 @@
<accordion name="wearable_accordion">
<accordion_tab name="skin_color_tab" title="Hautfarbe"/>
<accordion_tab name="skin_face_tab" title="Gesichtsdetails"/>
- <accordion_tab name="skin_makeup_tab" title="Make-Uup"/>
+ <accordion_tab name="skin_makeup_tab" title="Make-Up"/>
<accordion_tab name="skin_body_tab" title="Körperdetails"/>
</accordion>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_general.xml b/indra/newview/skins/default/xui/de/panel_group_general.xml
index 0d3c082a16..f300679e16 100644
--- a/indra/newview/skins/default/xui/de/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_general.xml
@@ -47,7 +47,7 @@ Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen.
<check_box label="Kosten für Beitritt" name="check_enrollment_fee" tool_tip="Festlegen, ob Neumitglieder eine Beitrittsgebühr zahlen müssen"/>
<spinner label="L$" name="spin_enrollment_fee" tool_tip="Wenn Beitrittsgebühr aktiviert ist, müssen neue Mitglieder diesen Betrag zahlen."/>
<combo_box name="group_mature_check" tool_tip="Legt fest, ob Ihre Gruppeninformation moderate Inhalte enthält">
- <combo_box.item label="Allgemeiner Inhalt" name="pg"/>
+ <combo_box.item label="Genereller Inhalt" name="pg"/>
<combo_box.item label="Moderater Inhalt" name="mature"/>
</combo_box>
<check_box initial_value="true" label="In Suche anzeigen" name="show_in_group_list" tool_tip="Diese Gruppe in Suchergebnissen anzeigen"/>
diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml
index fb357093bb..4e3a304609 100644
--- a/indra/newview/skins/default/xui/de/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_invite.xml
@@ -9,18 +9,18 @@
<panel.string name="already_in_group">
Einige der ausgewählten Einwohner sind bereits Gruppenmitglieder und haben aus diesem Grund keine Einladung erhalten.
</panel.string>
- <text name="help_text" top="10">
- Sie können mehrere Einwohner auswählen, um diese in Ihre Gruppe einzuladen. Klicken Sie hierzu auf „Einwohnerliste öffnen“.
+ <text name="help_text">
+ Sie können mehrere Einwohner Ihre Gruppe einladen. Klicken Sie hierzu auf „Einwohnerliste öffnen“.
</text>
- <button label="Einwohnerliste öffnen" name="add_button" tool_tip="" top_delta="62"/>
+ <button label="Einwohnerliste öffnen" name="add_button" tool_tip=""/>
<name_list name="invitee_list" tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Namen."/>
<button label="Auswahl aus Liste löschen" name="remove_button" tool_tip="Die oben ausgewählten Einwohner von der Einladungsliste entfernen."/>
<text name="role_text">
Wählen Sie eine Rolle aus:
</text>
<combo_box name="role_name" tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen."/>
- <button label="Einladungen versenden" name="ok_button" width="136"/>
- <button label="Abbrechen" name="cancel_button" width="66"/>
+ <button label="Einladungen versenden" name="ok_button"/>
+ <button label="Abbrechen" name="cancel_button"/>
<string name="GroupInvitation">
Gruppeneinladung
</string>
diff --git a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
index 0dca272633..abf8011d9d 100644
--- a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
@@ -14,7 +14,7 @@
<layout_panel name="share_btn_panel">
<button label="Teilen" name="share_btn"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
+ <layout_panel name="pay_btn_panel">
<button label="Bezahlen" name="pay_btn"/>
</layout_panel>
<layout_panel name="call_btn_panel">
diff --git a/indra/newview/skins/default/xui/de/panel_main_inventory.xml b/indra/newview/skins/default/xui/de/panel_main_inventory.xml
index eed365a1bb..d3eb9ae04c 100644
--- a/indra/newview/skins/default/xui/de/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/de/panel_main_inventory.xml
@@ -1,18 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sonstiges" name="main inventory panel">
- <panel.string name="Title">
- Sonstiges
+ <panel.string name="ItemcountFetching">
+ Inventar ([ITEM_COUNT] Artikel werden abgerufen... [FILTER]
</panel.string>
- <filter_editor label="Inventar filtern" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="MEIN INVENTAR" name="All Items"/>
- <inventory_panel label="AKTUELL" name="Recent Items"/>
- </tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
- <button name="add_btn" tool_tip="Neues Objekt hinzufügen"/>
- <dnd_button name="trash_btn" tool_tip="Auswahl löschen"/>
- </panel>
+ <panel.string name="ItemcountCompleted">
+ [ITEM_COUNT] Objekte [FILTER]
+ </panel.string>
+ <text name="ItemcountText">
+ Objekte:
+ </text>
<menu_bar name="Inventory Menu">
<menu label="Datei" name="File">
<menu_item_call label="Öffnen" name="Open"/>
@@ -44,7 +40,7 @@
<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
<menu_item_call label="Neue Unterhose" name="New Underpants"/>
- <menu_item_call label="Alpha: Neu" name="New Alpha"/>
+ <menu_item_call label="Neues Alpha" name="New Alpha"/>
<menu_item_call label="Neue Tätowierung" name="New Tattoo"/>
</menu>
<menu label="Neue Körperteile" name="New Body Parts">
@@ -61,4 +57,14 @@
<menu_item_check label="Systemordner nach oben" name="System Folders To Top"/>
</menu>
</menu_bar>
+ <filter_editor label="Inventar filtern" name="inventory search editor"/>
+ <tab_container name="inventory filter tabs">
+ <inventory_panel label="MEIN INVENTAR" name="All Items"/>
+ <inventory_panel label="AKTUELL" name="Recent Items"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
+ <button name="add_btn" tool_tip="Neues Objekt hinzufügen"/>
+ <dnd_button name="trash_btn" tool_tip="Auswahl löschen"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
index 5e6e460c65..08cc0b0ec8 100644
--- a/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
@@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="chat_bar">
- <string name="min_width">
- 192
- </string>
- <string name="max_width">
- 320
- </string>
<line_editor label="Zum Chatten hier klicken." name="chat_box" tool_tip="Eingabe drücken, um zu sprechen, Strg-Eingabe drücken, um zu Rufen."/>
<button name="show_nearby_chat" tool_tip="Protokoll des Chats in der Nähe anzeigen/ausblenden"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_media.xml b/indra/newview/skins/default/xui/de/panel_nearby_media.xml
index ec2ad42fa1..32750f14d4 100644
--- a/indra/newview/skins/default/xui/de/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/de/panel_nearby_media.xml
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_media">
- <string name="media_item_count_format">
- (%ls Medien-Objekte)
- </string>
<string name="empty_item_text">
&lt;leer&gt;
</string>
@@ -16,16 +13,23 @@
(wird abgespielt)
</string>
<panel name="minimized_controls">
- <button label="Alle stoppen" name="all_nearby_media_disable_btn" tool_tip="Alle Medien in der Nähe ausschalten"/>
- <button label="Alle starten" name="all_nearby_media_enable_btn" tool_tip="Alle Medien in der Nähe einschalten"/>
+ <button label="Stoppen" name="all_nearby_media_disable_btn" tool_tip="Alle Medien in der Nähe ausschalten"/>
+ <button label="Starten" name="all_nearby_media_enable_btn" tool_tip="Alle Medien in der Nähe einschalten"/>
<button name="open_prefs_btn" tool_tip="Medien-Einstellungen öffnen"/>
<button label="Mehr &gt;&gt;" label_selected="Weniger &lt;&lt;" name="more_less_btn" tool_tip="Erweiterte Steuerung"/>
</panel>
<panel name="nearby_media_panel">
+ <text name="nearby_media">
+ Medien in der Nähe
+ </text>
+ <text name="show">
+ Anzeigen:
+ </text>
<combo_box name="show_combo">
<combo_box.item label="Alle" name="All"/>
<combo_box.item label="Auf dieser Parzelle" name="WithinParcel"/>
<combo_box.item label="Außerhalb dieser Parzelle" name="OutsideParcel"/>
+ <combo_box.item label="An anderen Avataren" name="OnOthers"/>
</combo_box>
<scroll_list name="media_list">
<scroll_list.columns label="Umgebung" name="media_proximity"/>
@@ -34,7 +38,7 @@
<scroll_list.columns label="Name" name="media_name"/>
<scroll_list.columns label="Fehler beseitigen" name="media_debug"/>
</scroll_list>
- <panel>
+ <panel name="media_controls_panel">
<layout_stack name="media_controls">
<layout_panel name="stop">
<button name="stop_btn" tool_tip="Ausgewählte Medien stoppen"/>
diff --git a/indra/newview/skins/default/xui/de/panel_online_status_toast.xml b/indra/newview/skins/default/xui/de/panel_online_status_toast.xml
new file mode 100644
index 0000000000..7c7448c061
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_online_status_toast.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Freunde_online_Status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml
index a119c86b47..cc45f25c82 100644
--- a/indra/newview/skins/default/xui/de/panel_people.xml
+++ b/indra/newview/skins/default/xui/de/panel_people.xml
@@ -7,6 +7,8 @@
<string name="no_friends" value="Keine Freunde"/>
<string name="people_filter_label" value="Nach Leuten filtern"/>
<string name="groups_filter_label" value="Nach Gruppen filtern"/>
+ <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Suche verwenden, um die Gruppe zu finden?]"/>
+ <string name="no_groups_msg" value="[secondlife:///app/search/groups Suche verwenden, um Gruppen zu finden?]"/>
<filter_editor label="Filter" name="filter_input"/>
<tab_container name="tabs">
<panel label="IN DER NÄHE" name="nearby_panel">
@@ -20,15 +22,15 @@
<accordion_tab name="tab_online" title="Online"/>
<accordion_tab name="tab_all" title="Alle"/>
</accordion>
- <text name="no_friends_msg">
- Verwenden Sie [secondlife:///app/search/people die globale Suche], um Freunde hinzuzufügen. Oder klicken Sie auf einen Einwohner und fügen Sie diesen als Freund hinzu.
-Wenn Sie nach Orten suchen, an denen sich Leute befinden, verwenden Sie [secondlife:///app/worldmap die Karte].
- </text>
<panel label="bottom_panel" name="bottom_panel">
<button name="friends_viewsort_btn" tool_tip="Optionen"/>
<button name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/>
<button name="del_btn" tool_tip="Ausgewählte Person von Ihrer Freundesliste entfernen"/>
</panel>
+ <text name="no_friends_msg">
+ Verwenden Sie [secondlife:///app/search/people die globale Suche], um Freunde hinzuzufügen. Oder klicken Sie mit rechts auf einen Einwohner und fügen Sie diesen als Freund hinzu.
+Wenn Sie nach Orten suchen, an denen sich Leute befinden, verwenden Sie [secondlife:///app/worldmap die Karte].
+ </text>
</panel>
<panel label="MEINE GRUPPEN" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
diff --git a/indra/newview/skins/default/xui/de/panel_place_profile.xml b/indra/newview/skins/default/xui/de/panel_place_profile.xml
index fd4da94edc..ed1421aa60 100644
--- a/indra/newview/skins/default/xui/de/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_place_profile.xml
@@ -68,7 +68,7 @@
<text name="maturity_value" value="unbekannt"/>
<accordion name="advanced_info_accordion">
<accordion_tab name="parcel_characteristics_tab" title="Parzelle">
- <panel>
+ <panel name="parcel_characteristics_panel">
<text name="rating_label" value="Einstufung:"/>
<text name="rating_value" value="unbekannt"/>
<text name="voice_label" value="Voice:"/>
@@ -87,7 +87,7 @@
</panel>
</accordion_tab>
<accordion_tab name="region_information_tab" title="Region">
- <panel>
+ <panel name="region_information_panel">
<text name="region_name_label" value="Region:"/>
<text name="region_name" value="Mooseland"/>
<text name="region_type_label" value="Typ:"/>
@@ -100,19 +100,19 @@
<text name="region_group">
The Mighty Moose of mooseville soundvillemoose
</text>
- <button label="Region/Grundstück" name="region_info_btn"/>
+ <button label="Region/Grundbesitz" name="region_info_btn"/>
</panel>
</accordion_tab>
- <accordion_tab name="estate_information_tab" title="Grundstück">
- <panel>
- <text name="estate_name_label" value="Grundstück:"/>
+ <accordion_tab name="estate_information_tab" title="Grundbesitz">
+ <panel name="estate_information_panel">
+ <text name="estate_name_label" value="Grundbesitz:"/>
<text name="estate_rating_label" value="Einstufung:"/>
<text name="estate_owner_label" value="Eigentümer:"/>
<text name="covenant_label" value="Vertrag:"/>
</panel>
</accordion_tab>
<accordion_tab name="sales_tab" title="Zum Verkauf">
- <panel>
+ <panel name="sales_panel">
<text name="sales_price_label" value="Preis:"/>
<text name="area_label" value="Gebiet:"/>
<text name="traffic_label" value="Traffic:"/>
diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml
index 7359a4fda4..2215ea3988 100644
--- a/indra/newview/skins/default/xui/de/panel_places.xml
+++ b/indra/newview/skins/default/xui/de/panel_places.xml
@@ -7,9 +7,9 @@
<button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/>
<button label="Karte" name="map_btn" width="60"/>
<button label="Bearbeiten" name="edit_btn" tool_tip="Landmarken-Info bearbeiten"/>
- <button name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
- <button label="Schließen" name="close_btn"/>
- <button label="Abbrechen" name="cancel_btn" width="66"/>
+ <button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
<button label="Speichern" name="save_btn" width="66"/>
+ <button label="Abbrechen" name="cancel_btn" width="66"/>
+ <button label="Schließen" name="close_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
index df1bbd5d52..c0ab69fcdf 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
@@ -3,6 +3,9 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <panel.string name="middle_mouse">
+ Mittlere Maustaste
+ </panel.string>
<slider label="Sichtwinkel" name="camera_fov"/>
<slider label="Abstand" name="camera_offset_scale"/>
<text name="heading2">
@@ -16,7 +19,7 @@
<check_box label="Avatarlippen beim Sprechen bewegen" name="enable_lip_sync"/>
<check_box label="Blasen-Chat" name="bubble_text_chat"/>
<slider label="Deckkraft" label_width="66" name="bubble_chat_opacity"/>
- <color_swatch name="background" tool_tip="Farbe für Blasen-Chat auswählen"/>
+ <color_swatch left_pad="35" name="background" tool_tip="Farbe für Blasen-Chat auswählen"/>
<check_box label="Skript-Fehler anzeigen:" name="show_script_errors"/>
<radio_group name="show_location">
<radio_item label="Chat in der Nähe" name="0"/>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
index 0a0534c739..fcb45e26be 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
@@ -3,7 +3,7 @@
<text name="tell_me_label">
Anzeigen:
</text>
- <check_box label="Wenn ich Geld ausgebe oder L$ erhalte" name="notify_money_change_checkbox"/>
+ <check_box label="Wenn ich L$ ausgebe oder erhalte" name="notify_money_change_checkbox"/>
<check_box label="Wenn meine Freunde sich an- oder abmelden" name="friends_online_notify_checkbox"/>
<text name="show_label">
Immer anzeigen:
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index f580691c0d..aa1a93efac 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Text-Chat" name="chat">
+ <text name="font_size">
+ Schriftgröße:
+ </text>
<radio_group name="chat_font_size">
<radio_item label="Klein" name="radio" value="0"/>
<radio_item label="Mittel" name="radio2" value="1"/>
<radio_item label="Groß" name="radio3" value="2"/>
</radio_group>
+ <text name="font_colors">
+ Schriftfarben:
+ </text>
<color_swatch label="Sie" name="user"/>
<text name="text_box1">
Ich
@@ -39,7 +45,13 @@
</text>
<check_box initial_value="true" label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
<check_box label="IMs per Email zuschicken, wenn ich offline bin" name="send_im_to_email"/>
- <check_box label="Text-Chatverlauf aktivieren" name="plain_text_chat_history"/>
+ <check_box label="Kompakten Text-Chatverlauf aktivieren" name="plain_text_chat_history"/>
+ <text name="show_ims_in_label">
+ IMs anzeigen in:
+ </text>
+ <text name="requires_restart_label">
+ (Neustart erforderlich)
+ </text>
<radio_group name="chat_window" tool_tip="Zeigen Sie Ihre Sofortnachrichten (Instant Messages) in einem anderen Fenster oder in einem einzigen Fenster mit viele Registerkarten an (Neustart erforderlich).">
<radio_item label="Getrennte Fenster" name="radio" value="0"/>
<radio_item label="Registerkarten" name="radio2" value="1"/>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
index bd9e10b641..b59a779853 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
@@ -20,13 +20,13 @@
(Erfordert Neustart)
</text>
<text name="maturity_desired_prompt" width="350">
- Ich möchte auf Inhalt mit folgender Alterseinstufung zugreifen:
+ Ich möchte auf Inhalt mit folgender Einstufung zugreifen:
</text>
<text name="maturity_desired_textbox"/>
<combo_box name="maturity_desired_combobox">
- <combo_box.item label="Allgemein, Moderat, Adult" name="Desired_Adult"/>
- <combo_box.item label="Allgemein und Moderat" name="Desired_Mature"/>
- <combo_box.item label="Allgemein" name="Desired_PG"/>
+ <combo_box.item label="Generell, Moderat, Adult" name="Desired_Adult"/>
+ <combo_box.item label="Generell und Moderat" name="Desired_Mature"/>
+ <combo_box.item label="Generell" name="Desired_PG"/>
</combo_box>
<text name="start_location_textbox">
Startstandort:
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
index e7bb768925..16b4598486 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
@@ -55,7 +55,7 @@
<text name="AvatarRenderingText">
Avatar-Darstellung:
</text>
- <check_box initial_value="true" label="Scheinavatare" name="AvatarImpostors"/>
+ <check_box initial_value="true" label="Vereinfachte Avatardarstellung" name="AvatarImpostors"/>
<check_box initial_value="true" label="Hardware-Hautberechnung" name="AvatarVertexProgram"/>
<check_box initial_value="true" label="Avatar-Kleidung" name="AvatarCloth"/>
<slider label="Sichtweite:" name="DrawDistance"/>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
index 2516cd3a40..02c6fb0606 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
@@ -34,9 +34,12 @@
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Integrierten Webbrowser verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Dieser Browser öffnet als neues Fenster innerhalb von [APP_NAME]." value="0"/>
<radio_item label="Meinen Browser verwenden (IE, Firefox, Safari)" name="external" tool_tip="Standard Webbrowser des Systems verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Bei Vollbildmodus nicht empfohlen." value="1"/>
+ <radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Integrierten Webbrowser verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Dieser Browser öffnet als neues Fenster innerhalb von [APP_NAME]." value=""/>
</radio_group>
+ <check_box initial_value="true" label="Plugins aktivieren" name="browser_plugins_enabled"/>
+ <check_box initial_value="true" label="Cookies annehmen" name="cookies_enabled"/>
+ <check_box initial_value="true" label="Javascript aktivieren" name="browser_javascript_enabled"/>
<check_box initial_value="false" label="Web-Proxy aktivieren" name="web_proxy_enabled"/>
<text name="Proxy location">
Proxy-Standort:
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
index b01db30c82..96a86ed85d 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
@@ -13,9 +13,12 @@
<check_box label="Aktiviert" name="enable_voice_check"/>
<check_box label="Automatische Wiedergabe zulassen" name="media_auto_play_btn" tool_tip="Hier aktivieren, um Medien automatisch wiederzugeben." value="wahr"/>
<check_box label="Medien, die an andere Avatare angehängt sind, wiedergeben." name="media_show_on_others_btn" tool_tip="Diese Option deaktivieren, um Medien für andere Avataren, die sich in der Nähe befinden, auszublenden." value="wahr"/>
- <text name="Listen from">
+ <text name="voice_chat_settings">
Voice-Chat-Einstellungen
</text>
+ <text name="Listen from">
+ Zuhören von:
+ </text>
<radio_group name="ear_location">
<radio_item label="Kameraposition" name="0"/>
<radio_item label="Avatarposition" name="1"/>
diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml
index cb598f89f6..cda2788e40 100644
--- a/indra/newview/skins/default/xui/de/panel_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_profile.xml
@@ -41,10 +41,10 @@
</scroll_container>
</layout_panel>
<layout_panel name="profile_buttons_panel">
- <button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an" width="109"/>
- <button label="IM" name="im" tool_tip="Instant Messenger öffnen" width="24"/>
+ <button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an"/>
+ <button label="IM" name="im" tool_tip="Instant Messenger öffnen"/>
<button label="Anrufen" name="call" tool_tip="Diesen Einwohner anrufen"/>
- <button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen" width="36"/>
+ <button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen"/>
<button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/>
<button label="â–¼" name="overflow_btn" tool_tip="Dem Einwohner Geld geben oder Inventar an den Einwohner schicken"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_covenant.xml b/indra/newview/skins/default/xui/de/panel_region_covenant.xml
index 153082909a..225c98b84f 100644
--- a/indra/newview/skins/default/xui/de/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_covenant.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Vertrag" name="Covenant">
<text name="estate_section_lbl">
- Grundstück
+ Grundbesitz
</text>
<text name="estate_name_lbl">
Name:
@@ -23,15 +23,15 @@
</text>
<button label="?" name="covenant_help"/>
<text_editor bottom="-247" height="162" name="covenant_editor">
- Für dieses Grundstück fehlt der Vertrag.
+ Für diesen Grundbesitz fehlt der Vertrag.
</text_editor>
<button label="Zurücksetzen" name="reset_covenant"/>
<text name="covenant_help_text">
Änderungen am Vertrag werden für alle Parzellen auf dem
-Grundstück übernommen.
+Grundbesitz übernommen.
</text>
<text bottom_delta="-36" name="covenant_instructions">
- Ziehen Sie eine Notizkarte an diese Stelle, um den Vertrag für dieses Grundstück zu ändern.
+ Ziehen Sie eine Notizkarte an diese Stelle, um den Vertrag für diesen Grundbesitz zu ändern.
</text>
<text bottom_delta="-36" name="region_section_lbl">
Region
diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml
index 920a513308..d1b8f0d78a 100644
--- a/indra/newview/skins/default/xui/de/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_debug.xml
@@ -28,7 +28,7 @@
</text>
<check_box label="Mit Skripten" name="return_scripts" tool_tip="Es werden nur die Objekte zurückgegeben, die über Skripte verfügen."/>
<check_box label="Auf dem Land von jemand anderem" name="return_other_land" tool_tip="Es werden nur die Objekte zurückgegeben, die sich auf dem Land eines anderen Einwohners befinden"/>
- <check_box label="In jeder Region auf diesem Grundstück" name="return_estate_wide" tool_tip="Es werden die Objekte in allen Regionen dieses Grundstücks zurückgegeben"/>
+ <check_box label="In jeder Region auf diesem Grundbesitz" name="return_estate_wide" tool_tip="Es werden die Objekte in allen Regionen dieses Grundbesitzes zurückgegeben"/>
<button label="Zurückgeben" name="return_btn" width="90"/>
<button label="Top-Kollisionsobjekte..." name="top_colliders_btn" tool_tip="Liste der Objekte mit den meisten potenziellen Kollisionen"/>
<button label="?" name="top_colliders_help"/>
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 b0c6dce8cf..b93bd3e442 100644
--- a/indra/newview/skins/default/xui/de/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml
@@ -1,24 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Grundstück" name="Estate">
+<panel label="Grundbesitz" name="Estate">
<text name="estate_help_text">
- Änderungen auf dieser Registerkarte wirken sich auf alle Regionen auf dem Grundstück aus.
+ Änderungen wirken sich auf alle Regionen des Grundbesitzes aus.
</text>
<text name="estate_text">
- Grundstück:
+ Grundbesitz:
</text>
<text name="estate_name">
(unbekannt)
</text>
<text name="owner_text">
- Grundstückseigentümer:
+ Grundbesitzer:
</text>
<text name="estate_owner">
(unbekannt)
</text>
<text name="Only Allow">
- Zugang auf Einwohner beschränken, die überprüft wurden von:
+ Zugang nur dann, wenn überprüft mit:
</text>
- <check_box label="Zahlungsinformation gespeichert" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen"/>
+ <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="Voice-Chat erlauben" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
@@ -49,7 +49,7 @@
<check_box label="Verweigern - Zahlungsinfo verwendet" name="deny_transacted"/>
<button label="Übernehmen" name="apply_btn"/>
<text name="estate_manager_label">
- Grundstücksverwalter:
+ Grundbesitzsverwalter:
</text>
<text name="allow_resident_label">
Zulässige Einwohner:
@@ -69,6 +69,6 @@
<button label="?" name="ban_resident_help"/>
<button label="Hinzufügen..." name="add_banned_avatar_btn"/>
<button label="Entfernen..." name="remove_banned_avatar_btn"/>
- <button label="Nachricht an Grundstück senden..." name="message_estate_btn"/>
- <button label="Benutzer von Grundstück werfen..." name="kick_user_from_estate_btn"/>
+ <button label="Nachricht an Grundbesitz" name="message_estate_btn"/>
+ <button label="Einwohner hinauswerfen" name="kick_user_from_estate_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_general.xml b/indra/newview/skins/default/xui/de/panel_region_general.xml
index 978b701054..be8507ebbd 100644
--- a/indra/newview/skins/default/xui/de/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_general.xml
@@ -19,35 +19,25 @@
unbekannt
</text>
<check_box label="Terraformen blockieren" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
<check_box label="Fliegen blockieren" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
<check_box label="Schaden zulassen" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
<check_box label="Stoßen beschränken" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
<check_box label="Landwiederverkauf zulassen" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help"/>
<check_box label="Landumverteilung zulassen" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help"/>
<check_box label="Landanzeige in Suche blockieren" name="block_parcel_search_check" tool_tip="Diese Region und ihre Parzellen in Suchergebnissen anzeigen"/>
- <button label="?" name="parcel_search_help"/>
<spinner label="Avatar-Limit" name="agent_limit_spin"/>
- <button label="?" name="agent_limit_help"/>
<spinner label="Objektbonus" name="object_bonus_spin"/>
- <button label="?" name="object_bonus_help"/>
- <text label="Alterseinstufung" name="access_text">
+ <text label="Inhaltseinstufung" name="access_text">
Einstufung:
</text>
- <combo_box label="Moderat" name="access_combo">
- <combo_box.item label="Adult" name="Adult"/>
- <combo_box.item label="Moderat" name="Mature"/>
- <combo_box.item label="Allgemein" name="PG"/>
- </combo_box>
- <button label="?" name="access_help"/>
+ <icons_combo_box label="Moderat" name="access_combo">
+ <icons_combo_box.item label="Adult" name="Adult" value="42"/>
+ <icons_combo_box.item label="Moderat" name="Mature" value="21"/>
+ <icons_combo_box.item label="Generell" name="PG" value="13"/>
+ </icons_combo_box>
<button label="Übernehmen" name="apply_btn"/>
- <button label="Einen Benutzer nach Hause teleportieren..." name="kick_btn"/>
- <button label="Alle Benutzer nach Hause teleportieren..." name="kick_all_btn"/>
+ <button label="Einen Einwohner nach Hause teleportieren..." name="kick_btn"/>
+ <button label="Alle Einwohner nach Hause teleportieren..." name="kick_all_btn"/>
<button label="Nachricht an Region senden..." name="im_btn"/>
<button label="Telehub verwalten..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml b/indra/newview/skins/default/xui/de/panel_region_general_layout.xml
index 732249df35..09142ada6f 100644
--- a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_general_layout.xml
@@ -36,8 +36,8 @@
<combo_box.item label="Allgemein" name="PG"/>
</combo_box>
<button label="Übernehmen" name="apply_btn"/>
- <button label="Einen Benutzer nach Hause teleportieren..." name="kick_btn"/>
- <button label="Alle Benutzer nach Hause teleportieren..." name="kick_all_btn"/>
+ <button label="Einen Einwohner nach Hause teleportieren..." name="kick_btn"/>
+ <button label="Alle Einwohner nach Hause teleportieren..." name="kick_all_btn"/>
<button label="Nachricht an Region senden..." name="im_btn"/>
<button label="Telehub verwalten..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_terrain.xml b/indra/newview/skins/default/xui/de/panel_region_terrain.xml
index e79c8584ba..01721791a7 100644
--- a/indra/newview/skins/default/xui/de/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_terrain.xml
@@ -12,17 +12,17 @@
<button label="?" name="terrain_raise_help" />
<spinner label="Untere Terraingrenze" name="terrain_lower_spin" />
<button label="?" name="terrain_lower_help" />
- <check_box label="Grundstücksonne verwenden" name="use_estate_sun_check" />
+ <check_box label="Grundbesitzsonne verwenden" name="use_estate_sun_check" />
<button label="?" name="use_estate_sun_help" />
<check_box label="Sonne fest" name="fixed_sun_check" />
<button label="?" name="fixed_sun_help" />
<slider label="Phase" name="sun_hour_slider" />
<button label="Übernehmen" name="apply_btn" />
<button label="RAW-Terrain herunterladen..." name="download_raw_btn"
- tool_tip="Nur für Grundstückseigentümer verfügbar, nicht für Verwalter" />
+ tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter" />
<button label="?" name="download_raw_help" />
<button label="RAW-Terrain hochladen..." name="upload_raw_btn"
- tool_tip="Nur für Grundstückseigentümer verfügbar, nicht für Verwalter" />
+ tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter" />
<button label="?" name="upload_raw_help" />
<button label="Terrain formen" name="bake_terrain_btn"
tool_tip="Das aktuelle Terrain zum Mittelpunkt für die oberen/unteren Terraingrenzen machen" />
diff --git a/indra/newview/skins/default/xui/de/panel_region_texture.xml b/indra/newview/skins/default/xui/de/panel_region_texture.xml
index f9997f300a..2f4904730b 100644
--- a/indra/newview/skins/default/xui/de/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_texture.xml
@@ -25,25 +25,25 @@
Texturhöhenbereich
</text>
<text name="height_text_lbl6">
- Südwest
+ Nordwest
</text>
<text name="height_text_lbl7">
- Nordwest
+ Nordost
</text>
<text name="height_text_lbl8">
- Südost
+ Südwest
</text>
<text name="height_text_lbl9">
- Nordost
+ Südost
</text>
- <spinner label="Niedrig" name="height_start_spin_0" label_width="40"/>
- <spinner label="Niedrig" name="height_start_spin_1" label_width="40"/>
- <spinner label="Niedrig" name="height_start_spin_2" label_width="40"/>
- <spinner label="Niedrig" name="height_start_spin_3" label_width="40"/>
- <spinner label="Hoch" name="height_range_spin_0" label_width="40"/>
- <spinner label="Hoch" name="height_range_spin_1" label_width="40"/>
- <spinner label="Hoch" name="height_range_spin_2" label_width="40"/>
- <spinner label="Hoch" name="height_range_spin_3" label_width="40"/>
+ <spinner label="Niedrig" label_width="40" name="height_start_spin_0"/>
+ <spinner label="Niedrig" label_width="40" name="height_start_spin_1"/>
+ <spinner label="Niedrig" label_width="40" name="height_start_spin_2"/>
+ <spinner label="Niedrig" label_width="40" name="height_start_spin_3"/>
+ <spinner label="Hoch" label_width="40" name="height_range_spin_0"/>
+ <spinner label="Hoch" label_width="40" name="height_range_spin_1"/>
+ <spinner label="Hoch" label_width="40" name="height_range_spin_2"/>
+ <spinner label="Hoch" label_width="40" name="height_range_spin_3"/>
<text name="height_text_lbl10">
Diese Werte geben den Mischungsgrad für die obigen Texturen an.
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
index 5b8137af4a..be21429007 100644
--- a/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
+++ b/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
@@ -2,5 +2,5 @@
<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
<panel name="panel_stand_stop_flying">
<button label="Stehen" name="stand_btn" tool_tip="Klicken Sie hier, um aufzustehen."/>
- <button label="Landen" name="stop_fly_btn" tool_tip="Landen"/>
+ <button label="Flug stoppen" name="stop_fly_btn" tool_tip="Flug stoppen"/>
</panel>
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 283df990ae..803bd1b5ab 100644
--- a/indra/newview/skins/default/xui/de/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml
@@ -22,10 +22,10 @@
[AMT] L$
</panel.string>
<button label="" label_selected="" name="buycurrency" tool_tip="Mein Kontostand"/>
- <button label="L$ kaufen" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
+ <button label=" " name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
24:00 H PST
</text>
- <button name="media_toggle_btn" tool_tip="Klicken, um Medien ein-/auszuschalten"/>
+ <button name="media_toggle_btn" tool_tip="Alle Medien starten/stoppen (Musik, Video, Webseiten)"/>
<button name="volume_btn" tool_tip="Steuerung der Gesamtlautstärke"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml
index 554a5c27a4..b20fcabc82 100644
--- a/indra/newview/skins/default/xui/de/role_actions.xml
+++ b/indra/newview/skins/default/xui/de/role_actions.xml
@@ -30,7 +30,7 @@
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Parzellenoptionen wie „Objekte erstellen“, „Terrain bearbeiten“ sowie Musik- und Medieneinstellungen zu ändern." name="Parcel Settings">
<action description="Musik- und Medieneinstellungen ändern" longdescription="Die Einstellungen für Streaming-Musik und Filme finden Sie unter „Land-Info“ &gt; „Medien“." name="land change media"/>
- <action description="„Terrain bearbeiten“ ein/aus" longdescription="„Terrain bearbeiten“ ein/aus. *WARNUNG* „Land-Info“ &gt; „Optionen“ &gt; „Terrain bearbeiten“ ermöglicht jedem das Terraformen Ihres Grundstücks und das Setzen und Verschieben von Linden-Pflanzen. Überlegen Sie sich, wem Sie diese Fähigkeit verleihen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Optionen“." name="land edit"/>
+ <action description="„Terrain bearbeiten“ ein/aus" longdescription="„Terrain bearbeiten“ ein/aus. *WARNUNG* „Land-Info“ &gt; „Optionen“ &gt; „Terrain bearbeiten“ ermöglicht jedem das Terraformen Ihres Grundbesitzes und das Setzen und Verschieben von Linden-Pflanzen. Überlegen Sie sich, wem Sie diese Fähigkeit verleihen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Optionen“." name="land edit"/>
<action description="„Land-Info“-Optionen einstellen" longdescription="„Sicher (kein Schaden)“ und „Fliegen“ ein- und ausschalten und Einwohnern folgende Aktionen erlauben: „Terrain bearbeiten“, „Bauen“, „Landmarken erstellen“ und „Skripts ausführen“ auf gruppeneigenem Land in „Land-Info“ &gt; Registerkarte „Optionen“." name="land options"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Umgehen von Restriktionen auf gruppeneigenen Parzellen zu erlauben." name="Parcel Powers">
@@ -46,7 +46,7 @@
<action description="Parzelleneinstellungen für „Pässe verkaufen“ ändern" longdescription="Die Parzellen-Einstellungen für „Pässe verkaufen“ ändern Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage passes"/>
<action description="Einwohner aus Parzellen werfen und einfrieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können gegen unerwünschte Einwohner auf einer gruppeneigenen Parzelle Maßnahmen ergreifen. Klicken Sie den Einwohner mit rechts an und wählen Sie „Hinauswerfen“ oder „Einfrieren“." name="land admin"/>
</action_set>
- <action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Zurückgeben von Objekten sowie das Platzieren und Verschieben von Linden-Pflanzen zu erlauben. Mitglieder können das Grundstück aufräumen und an der Landschaftsgestaltung mitwirken. Aber Vorsicht: Zurückgegebene Objekte können nicht mehr zurückgeholt werden." name="Parcel Content">
+ <action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Zurückgeben von Objekten sowie das Platzieren und Verschieben von Linden-Pflanzen zu erlauben. Mitglieder können den Grundbesitz aufräumen und an der Landschaftsgestaltung mitwirken. Aber Vorsicht: Zurückgegebene Objekte können nicht mehr zurückgeholt werden." name="Parcel Content">
<action description="Gruppeneigene Objekte zurückgeben" longdescription="Gruppeneigene Objekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group owned"/>
<action description="Gruppenobjekte zurückgeben" longdescription="Gruppenobjekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group set"/>
<action description="Gruppenfremde Objekte zurückgeben" longdescription="Objekte von gruppenfremden Personen auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return non group"/>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
index 825acac79d..990543b725 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
@@ -38,7 +38,7 @@
</panel.string>
<text name="title" value="Objektprofil"/>
<text name="where" value="(inworld)"/>
- <panel label="">
+ <panel label="" name="properties_panel">
<text name="Name:">
Name:
</text>
@@ -85,7 +85,7 @@
<text name="GroupLabel">
Gruppe:
</text>
- <check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
+ <check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern, teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
<text name="NextOwnerLabel">
Nächster Eigentümer:
</text>
@@ -96,7 +96,7 @@
<check_box label="Zum Verkauf" name="checkbox for sale"/>
<combo_box name="sale type">
<combo_box.item label="Kopieren" name="Copy"/>
- <combo_box.item label="Inhalte" name="Contents"/>
+ <combo_box.item label="Inhalt" name="Contents"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
<spinner label="Preis: L$" name="Edit Cost"/>
@@ -124,5 +124,6 @@
<button label="Öffnen" name="open_btn"/>
<button label="Bezahlen" name="pay_btn"/>
<button label="Kaufen" name="buy_btn"/>
+ <button label="Details" name="details_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index c9307a5d7d..fd05f02ceb 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -23,7 +23,22 @@
Hardware wird erfasst...
</string>
<string name="StartupLoading">
- Wird geladen
+ [APP_NAME] wird geladen...
+ </string>
+ <string name="StartupClearingCache">
+ Cache wird gelöscht...
+ </string>
+ <string name="StartupInitializingTextureCache">
+ Textur-Cache wird initialisiert...
+ </string>
+ <string name="StartupInitializingVFS">
+ VFS wird initialisiert...
+ </string>
+ <string name="ProgressRestoring">
+ Wird wiederhergestellt...
+ </string>
+ <string name="ProgressChangingResolution">
+ Auflösung wird geändert...
</string>
<string name="Fullbright">
Fullbright (Legacy)
@@ -88,6 +103,9 @@
<string name="LoginFailedNoNetwork">
Netzwerk Fehler: Eine Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Netzwerkverbindung.
</string>
+ <string name="LoginFailed">
+ Anmeldung fehlgeschlagen
+ </string>
<string name="Quit">
Beenden
</string>
@@ -97,6 +115,24 @@
<string name="AgentLostConnection">
In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung.
</string>
+ <string name="SavingSettings">
+ Ihr Einstellungen werden gespeichert...
+ </string>
+ <string name="LoggingOut">
+ Abmeldung erfolgt...
+ </string>
+ <string name="ShuttingDown">
+ Programm wird beendet...
+ </string>
+ <string name="YouHaveBeenDisconnected">
+ Die Verbindung zu der Region ist abgebrochen.
+ </string>
+ <string name="SentToInvalidRegion">
+ Sie wurden in eine ungültige Region geschickt.
+ </string>
+ <string name="TestingDisconnect">
+ Verbindungsabbruch wird getestet
+ </string>
<string name="TooltipPerson">
Person
</string>
@@ -151,6 +187,24 @@
<string name="TooltipAgentUrl">
Anklicken, um das Profil dieses Einwohners anzuzeigen
</string>
+ <string name="TooltipAgentMute">
+ Klicken, um diesen Einwohner stummzuschalten
+ </string>
+ <string name="TooltipAgentUnmute">
+ Klicken, um diesen Einwohner freizuschalten
+ </string>
+ <string name="TooltipAgentIM">
+ Klicken, um diesem Einwohner eine IM zu schicken.
+ </string>
+ <string name="TooltipAgentPay">
+ Klicken, um diesen Einwohner zu bezahlen
+ </string>
+ <string name="TooltipAgentOfferTeleport">
+ Klicken, um diesem Einwohner einen Teleport anzubieten.
+ </string>
+ <string name="TooltipAgentRequestFriend">
+ Klicken, um diesem Einwohner ein Freundschaftsangebot zu schicken.
+ </string>
<string name="TooltipGroupUrl">
Anklicken, um Beschreibung der Gruppe anzuzeigen
</string>
@@ -176,12 +230,31 @@
Anklicken, um Befehl secondlife:// auszuführen
</string>
<string name="CurrentURL" value=" CurrentURL: [CurrentURL]"/>
+ <string name="TooltipPrice" value="[PRICE] L$"/>
<string name="SLurlLabelTeleport">
Teleportieren nach
</string>
<string name="SLurlLabelShowOnMap">
Karte anzeigen für
</string>
+ <string name="SLappAgentMute">
+ Stummschalten
+ </string>
+ <string name="SLappAgentUnmute">
+ Stummschaltung aufheben
+ </string>
+ <string name="SLappAgentIM">
+ IM
+ </string>
+ <string name="SLappAgentPay">
+ Bezahlen
+ </string>
+ <string name="SLappAgentOfferTeleport">
+ Teleportangebot an
+ </string>
+ <string name="SLappAgentRequestFriend">
+ Freundschaftsangebot
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Schließen (⌘W)
</string>
@@ -335,6 +408,9 @@
<string name="symbolic link">
Link
</string>
+ <string name="symbolic folder link">
+ Link zu Ordner
+ </string>
<string name="AvatarEditingAppearance">
(Aussehen wird bearbeitet)
</string>
@@ -636,7 +712,7 @@
Nicht verbunden
</string>
<string name="SIM_ACCESS_PG">
- Allgemein
+ Generell
</string>
<string name="SIM_ACCESS_MATURE">
Moderat
@@ -758,6 +834,9 @@
<string name="invalid">
ungültig
</string>
+ <string name="NewWearable">
+ Neue/r/s [WEARABLE_ITEM]
+ </string>
<string name="next">
Weiter
</string>
@@ -828,7 +907,7 @@
Im Inventar wurden keine passenden Objekte gefunden. Versuchen Sie es mit [secondlife:///app/search/groups „Suche&quot;].
</string>
<string name="FavoritesNoMatchingItems">
- Hier eine Landmarke hin ziehen, um diese zu Ihrem Favoriten hinzuzufügen.
+ Landmarke hier hin ziehen, um diese hinzuzufügen.
</string>
<string name="InventoryNoTexture">
Sie haben keine Kopie dieser Textur in Ihrem Inventar.
@@ -846,6 +925,7 @@
Keine Inhalte
</string>
<string name="WornOnAttachmentPoint" value=" (getragen am [ATTACHMENT_POINT])"/>
+ <string name="ActiveGesture" value="[GESLABEL] (aktiviert)"/>
<string name="PermYes">
Ja
</string>
@@ -945,6 +1025,9 @@
<string name="InvFolder My Outfits">
Meine Outfits
</string>
+ <string name="InvFolder Accessories">
+ Zubehör
+ </string>
<string name="InvFolder Friends">
Freunde
</string>
@@ -979,7 +1062,7 @@
Gummi
</string>
<string name="Light">
- Licht
+ Hell
</string>
<string name="KBShift">
Umschalt-Taste
@@ -1180,7 +1263,7 @@
Oben links
</string>
<string name="Center">
- Zentrieren
+ Mitte
</string>
<string name="Bottom Left">
Unten links
@@ -1256,7 +1339,7 @@
(unbekannt)
</string>
<string name="SummaryForTheWeek" value="Zusammenfassung für diese Woche, beginnend am "/>
- <string name="NextStipendDay" value="Der nächste Stipendium-Tag ist "/>
+ <string name="NextStipendDay" value=". Der nächste Stipendium-Tag ist "/>
<string name="GroupIndividualShare" value=" Gruppenanteil Einzelanteil"/>
<string name="Balance">
Kontostand
@@ -1286,13 +1369,13 @@
Fehler
</string>
<string name="RegionInfoAllEstatesOwnedBy">
- alle Grundstücke gehören [OWNER]
+ alle Grundbesitze gehören [OWNER]
</string>
<string name="RegionInfoAllEstatesYouOwn">
- alle Grundstücke, die Sie besitzen
+ alle Grundbesitze, die Sie besitzen
</string>
<string name="RegionInfoAllEstatesYouManage">
- alle Grundstücke, die Sie für [OWNER] verwalten
+ alle Grundbesitze, die Sie für [OWNER] verwalten
</string>
<string name="RegionInfoAllowedResidents">
Zulässige Einwohner: ([ALLOWEDAGENTS], max [MAXACCESS])
@@ -1468,6 +1551,12 @@
<string name="PanelContentsNewScript">
Neues Skript
</string>
+ <string name="PanelContentsTooltip">
+ Objektinhalt
+ </string>
+ <string name="BusyModeResponseDefault">
+ Der Einwohner/Die Einwohnerin ist „beschäftigt&quot;, d.h. er/sie möchte im Moment nicht gestört werden. Ihre Nachricht wird dem Einwohner/der Einwohnerin als IM angezeigt, und kann später beantwortet werden.
+ </string>
<string name="MuteByName">
(nach Namen)
</string>
@@ -1481,10 +1570,10 @@
(Gruppe)
</string>
<string name="RegionNoCovenant">
- Für dieses Grundstück liegt kein Vertrag vor.
+ Für diesen Grundbesitz liegt kein Vertrag vor.
</string>
<string name="RegionNoCovenantOtherOwner">
- Für dieses Grundstück liegt kein Vertrag vor. Das Land auf diesem Grundstück wird vom Grundstückseigentümer und nicht von Linden Lab verkauft. Für Informationen zum Verkauf setzen Sie sich bitte mit dem Grundstückseigentümer in Verbindung.
+ Für diesen Grundbesitz liegt kein Vertrag vor. Das Land auf diesem Grundbesitz wird vom Grundbesitzer und nicht von Linden Lab verkauft. Für Informationen zum Verkauf setzen Sie sich bitte mit dem Grundbesitzer in Verbindung.
</string>
<string name="covenant_last_modified">
Zuletzt geändert:
@@ -1506,6 +1595,9 @@
<string name="NoPicksClassifiedsText">
Sie haben keine Auswahl oder Anzeigen erstelllt. Klicken Sie auf die „Plus&quot;-Schaltfläche, um eine Auswahl oder Anzeige zu erstellen.
</string>
+ <string name="NoAvatarPicksClassifiedsText">
+ Der Einwohner hat eine Auswahl oder Anzeigen im Profil.
+ </string>
<string name="PicksClassifiedsLoadingText">
Wird geladen...
</string>
@@ -1579,7 +1671,10 @@
Abbrechen
</string>
<string name="UploadingCosts">
- Hochladen von %s kostet
+ Das Hochladen von [NAME] kostet [AMOUNT] L$
+ </string>
+ <string name="BuyingCosts">
+ Die Kosten betragen: [AMOUNT] L$
</string>
<string name="UnknownFileExtension">
Unbekanntes Dateiformat .%s
@@ -2056,7 +2151,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Kinn-Hals
</string>
<string name="Clear">
- Löschen
+ Transparent
</string>
<string name="Cleft">
Spalte
@@ -2359,16 +2454,16 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Farbe Innenseite
</string>
<string name="In Shdw Opacity">
- Deckkraft: innerer Lidschatten
+ Deckkraft: innen
</string>
<string name="Inner Eye Corner">
Ecke: Nasenseite
</string>
<string name="Inner Eye Shadow">
- Innerer Lidschatten
+ Innenlid
</string>
<string name="Inner Shadow">
- Innerer Lidschatten
+ Innenlid
</string>
<string name="Jacket Length">
Jackenlänge
@@ -2761,10 +2856,10 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Aus
</string>
<string name="Out Shdw Color">
- Farbe: Oberer Lidschatten
+ Farbe: Oben
</string>
<string name="Out Shdw Opacity">
- Deckkraft: Oberer Lidschatten
+ Deckkraft: Oben
</string>
<string name="Outer Eye Corner">
Äußerer Augenwinkel
@@ -2935,7 +3030,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Schuhart
</string>
<string name="Short">
- Sandale
+ Klein
</string>
<string name="Short Arms">
Kurze Arme
@@ -3064,7 +3159,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Nach vorne
</string>
<string name="Tall">
- Stiefel
+ Groß
</string>
<string name="Taper Back">
Ansatzbreite hinten
@@ -3268,7 +3363,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Für Instant Message hier klicken.
</string>
<string name="IM_to_label">
- Bis
+ An
</string>
<string name="IM_moderator_label">
(Moderator)
@@ -3366,4 +3461,120 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="unread_chat_multiple">
[SOURCES] haben etwas Neues gesagt
</string>
+ <string name="paid_you_ldollars">
+ [NAME] hat Ihnen [AMOUNT] L$ bezahlt.
+ </string>
+ <string name="you_paid_ldollars">
+ Sie haben [REASON] [AMOUNT] L$ an [NAME] bezahlt.
+ </string>
+ <string name="you_paid_ldollars_no_reason">
+ Sie haben [AMOUNT] L$ an [NAME] bezahlt.
+ </string>
+ <string name="you_paid_ldollars_no_name">
+ Sie haben [REASON] [AMOUNT] L$ bezahlt.
+ </string>
+ <string name="for a parcel of land">
+ für eine Landparzelle
+ </string>
+ <string name="for a land access pass">
+ für einen Pass
+ </string>
+ <string name="for deeding land">
+ für die Landübertragung
+ </string>
+ <string name="to create a group">
+ für die Gründung einer Gruppe
+ </string>
+ <string name="to join a group">
+ für den Beitritt zur Gruppe
+ </string>
+ <string name="to upload">
+ fürs Hochladen
+ </string>
+ <string name="giving">
+ [AMOUNT] L$ werden bezahlt
+ </string>
+ <string name="uploading_costs">
+ Kosten für Hochladen [AMOUNT] L$
+ </string>
+ <string name="this_costs">
+ Kosten: [AMOUNT] L$
+ </string>
+ <string name="buying_selected_land">
+ Ausgewähltes Land wird für [AMOUNT] L$ gekauft.
+ </string>
+ <string name="this_object_costs">
+ Dieses Objekt kostet [AMOUNT] L$
+ </string>
+ <string name="group_role_everyone">
+ Jeder
+ </string>
+ <string name="group_role_officers">
+ Offiziere
+ </string>
+ <string name="group_role_owners">
+ Eigentümer
+ </string>
+ <string name="uploading_abuse_report">
+ Bericht wird hochgeladen...
+
+Missbrauchsbericht
+ </string>
+ <string name="New Shape">
+ Neue Form/Gestalt
+ </string>
+ <string name="New Skin">
+ Neue Haut
+ </string>
+ <string name="New Hair">
+ Neues Haar
+ </string>
+ <string name="New Eyes">
+ Neue Augen
+ </string>
+ <string name="New Shirt">
+ Neues Hemd
+ </string>
+ <string name="New Pants">
+ Neue Hose
+ </string>
+ <string name="New Shoes">
+ Neue Schuhe
+ </string>
+ <string name="New Socks">
+ Neue Socken
+ </string>
+ <string name="New Jacket">
+ Neue Jacke
+ </string>
+ <string name="New Gloves">
+ Neue Handschuhe
+ </string>
+ <string name="New Undershirt">
+ Neues Unterhemd
+ </string>
+ <string name="New Underpants">
+ Neue Unterhose
+ </string>
+ <string name="New Skirt">
+ Neuer Rock
+ </string>
+ <string name="New Alpha">
+ Neues Alpha
+ </string>
+ <string name="New Tattoo">
+ Neue Tätowierung
+ </string>
+ <string name="Invalid Wearable">
+ Ungültiges Objekt
+ </string>
+ <string name="New Script">
+ Neues Skript
+ </string>
+ <string name="New Folder">
+ Neuer Ordner
+ </string>
+ <string name="Contents">
+ Inhalt
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/de/teleport_strings.xml b/indra/newview/skins/default/xui/de/teleport_strings.xml
index 2c56eff0a3..69c952c532 100644
--- a/indra/newview/skins/default/xui/de/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/de/teleport_strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<teleport_messages name="">
+<teleport_messages>
<message_set name="errors">
<message name="invalid_tport">
Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden.
@@ -62,6 +62,9 @@ Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in e
<message name="completing">
Teleport wird abgeschlossen.
</message>
+ <message name="completed_from">
+ Teleport aus [T_SLURL] wurde erfolgreich abgeschlossen.
+ </message>
<message name="resolving">
Ziel wird ermittelt.
</message>
diff --git a/indra/newview/skins/default/xui/en/alert_line_editor.xml b/indra/newview/skins/default/xui/en/alert_line_editor.xml
index 97991153d8..82bf5fc8da 100644
--- a/indra/newview/skins/default/xui/en/alert_line_editor.xml
+++ b/indra/newview/skins/default/xui/en/alert_line_editor.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<line_editor
select_on_focus="false"
- handle_edit_keys_directly="false"
revert_on_esc="true"
commit_on_focus_lost="true"
ignore_tab="true"
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index bc67621dfd..a6a4c79da4 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -76,7 +76,7 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number
allow_html="true"
follows="top|left"
font="SansSerif"
- height="350"
+ height="343"
bg_readonly_color="Transparent"
left="5"
max_length="65536"
@@ -110,19 +110,14 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number
top="5"
width="435"
word_wrap="true">
-Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others.
+Second Life is brought to you by Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain, and many others.
-Thank you to the following Residents for helping to ensure that this is the best version yet: (in progress)
+Thank you to the following Residents for helping to ensure that this is the best version yet: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
-
-
-
-
-It is a rare mind indeed that can render the hitherto non-existent blindingly obvious. The cry 'I could have thought of that' is a very popular and misleading one, for the fact is that they didn't, and a very significant and revealing fact it is too.
- -- Douglas Adams
+"The work goes on, the cause endures, the hope still lives, and the dreams shall never die" - Edward Kennedy
</text_editor>
</panel>
<panel
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 58ea7cec9c..59f1889808 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -9,6 +9,18 @@
title="ABOUT LAND"
width="490">
<floater.string
+ name="maturity_icon_general">
+ "Parcel_PG_Dark"
+ </floater.string>
+ <floater.string
+ name="maturity_icon_moderate">
+ "Parcel_M_Dark"
+ </floater.string>
+ <floater.string
+ name="maturity_icon_adult">
+ "Parcel_R_Dark"
+ </floater.string>
+ <floater.string
name="Minutes">
[MINUTES] minutes
</floater.string>
@@ -46,7 +58,7 @@
top="0">
<panel.string
name="new users only">
- New users only
+ New Residents only
</panel.string>
<panel.string
name="anyone">
@@ -263,7 +275,7 @@ Leyla Linden </text>
left_pad="4"
right="-10"
name="Set..."
- width="50"
+ width="90"
top_delta="-2"/>
<check_box
enabled="false"
@@ -395,7 +407,7 @@ Leyla Linden </text>
name="Cancel Land Sale"
left_pad="5"
top_pad="-25"
- width="145" />
+ width="180" />
<text
type="string"
length="1"
@@ -474,10 +486,10 @@ Leyla Linden </text>
height="23"
label="Buy Land"
layout="topleft"
- left_delta="82"
+ left_delta="52"
name="Buy Land..."
top_pad="7"
- width="100" />
+ width="130" />
<button
enabled="true"
follows="left|top"
@@ -487,7 +499,7 @@ Leyla Linden </text>
left="10"
name="Scripts..."
top_pad="1"
- width="100" />
+ width="150" />
<button
enabled="false"
follows="left|top"
@@ -504,11 +516,11 @@ Leyla Linden </text>
height="23"
label="Buy Pass"
layout="topleft"
- left_delta="-105"
+ left_delta="-135"
name="Buy Pass..."
tool_tip="A pass gives you temporary access to this land."
top_delta="0"
- width="100" />
+ width="130" />
<button
follows="left|top"
height="23"
@@ -547,21 +559,26 @@ Leyla Linden </text>
left="0"
top="0"
help_topic="land_covenant_tab"
- name="land_covenant_panel">
+ name="land_covenant_panel"
+ word_wrap="true">
<panel.string
- name="can_resell">
+ name="can_resell"
+ word_wrap="true">
Purchased land in this region may be resold.
</panel.string>
<panel.string
- name="can_not_resell">
+ name="can_not_resell"
+ word_wrap="true">
Purchased land in this region may not be resold.
</panel.string>
<panel.string
- name="can_change">
+ name="can_change"
+ word_wrap="true">
Purchased land in this region may be joined or subdivided.
</panel.string>
<panel.string
- name="can_not_change">
+ name="can_not_change"
+ word_wrap="true">
Purchased land in this region may not be joined or subdivided.
</panel.string>
<text
@@ -619,7 +636,6 @@ Leyla Linden </text>
length="1"
enabled="false"
follows="all"
- handle_edit_keys_directly="true"
height="200"
layout="topleft"
left="10"
@@ -736,6 +752,7 @@ Leyla Linden </text>
left_pad="10"
mouse_opaque="false"
name="resellable_clause"
+ word_wrap="true"
width="330">
Land in this region may not be resold.
</text>
@@ -1044,7 +1061,7 @@ Leyla Linden </text>
left="10"
name="Autoreturn"
top_pad="0"
- width="294">
+ width="310">
Auto return other Residents&apos; objects (minutes, 0 for off):
</text>
<line_editor
@@ -1107,7 +1124,7 @@ Leyla Linden </text>
label="Type"
name="type"
sort_column="online_status"
- width="24" />
+ width="50" />
<name_list.columns
name="online_status"
width="-1" />
@@ -1222,7 +1239,7 @@ Only large parcels can be listed in search.
layout="topleft"
left_pad="2"
name="edit objects check"
- width="120" />
+ width="130" />
<check_box
height="16"
label="Group"
@@ -1248,7 +1265,7 @@ Only large parcels can be listed in search.
left_pad="2"
name="all object entry check"
top_delta="0"
- width="120" />
+ width="130" />
<check_box
height="16"
label="Group"
@@ -1275,7 +1292,7 @@ Only large parcels can be listed in search.
left_pad="2"
name="check other scripts"
top_delta="0"
- width="120" />
+ width="130" />
<check_box
height="16"
label="Group"
@@ -1329,7 +1346,7 @@ Only large parcels can be listed in search.
left="30"
name="land category with adult"
visible="false"
- width="130">
+ width="140">
<combo_box.item
label="Any Category"
name="item0"
@@ -1390,7 +1407,7 @@ Only large parcels can be listed in search.
left="30"
name="land category"
visible="false"
- width="130">
+ width="140">
<combo_box.item
label="Any Category"
name="item0"
@@ -1504,7 +1521,7 @@ Only large parcels can be listed in search.
name="Clear"
tool_tip="Clear the landing point"
right="-10"
- width="50" />
+ width="55" />
<text
type="string"
length="1"
@@ -1607,7 +1624,7 @@ Only large parcels can be listed in search.
layout="topleft"
left_pad="5"
name="set_media_url"
- width="50"
+ width="70"
top_delta="0"/>
<check_box
follows="top|left"
@@ -1874,6 +1891,10 @@ Only large parcels can be listed in search.
name="access_estate_defined">
(Defined by the Estate)
</panel.string>
+ <panel.string
+ name="allow_public_access">
+ Allow Public Access ([MATURITY])
+ </panel.string>
<panel.string
name="estate_override">
One or more of these options is set at the estate level
@@ -1894,7 +1915,6 @@ Only large parcels can be listed in search.
<check_box
follows="top|left"
height="16"
- label="Allow Public Access [MATURITY]"
layout="topleft"
left_delta="0"
name="public_access"
diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
index 1ffedde29b..9dff4abe2c 100644
--- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
@@ -218,14 +218,14 @@ Maximum animation length is [MAX_LENGTH] seconds.
increment="1"
initial_value="0"
label="In(%)"
- label_width="49"
+ label_width="70"
layout="topleft"
top_pad="5"
- left="30"
+ left="15"
max_val="100"
name="loop_in_point"
tool_tip="Sets point in animation that looping returns to"
- width="115" />
+ width="130" />
<spinner
bottom_delta="0"
follows="left|top"
@@ -238,8 +238,8 @@ Maximum animation length is [MAX_LENGTH] seconds.
max_val="100"
name="loop_out_point"
tool_tip="Sets point in animation that ends a loop"
- label_width="49"
- width="115" />
+ label_width="60"
+ width="120" />
<text
type="string"
length="1"
@@ -256,10 +256,10 @@ Maximum animation length is [MAX_LENGTH] seconds.
<combo_box
height="23"
layout="topleft"
- left_pad="0"
+ left_pad="20"
name="hand_pose_combo"
tool_tip="Controls what hands do during animation"
- width="150">
+ width="130">
<combo_box.item
label="Spread"
name="Spread"
@@ -328,9 +328,9 @@ Maximum animation length is [MAX_LENGTH] seconds.
</text>
<combo_box
height="23"
- width="150"
+ width="130"
layout="topleft"
- left_pad="0"
+ left_pad="20"
name="emote_combo"
tool_tip="Controls what face does during animation">
<combo_box.item
@@ -409,9 +409,9 @@ Maximum animation length is [MAX_LENGTH] seconds.
</text>
<combo_box
height="23"
- width="150"
+ width="130"
layout="topleft"
- left_pad="0"
+ left_pad="20"
name="preview_base_anim"
tool_tip="Use this to test your animation behavior while your avatar performs common actions.">
<combo_box.item
@@ -433,27 +433,27 @@ Maximum animation length is [MAX_LENGTH] seconds.
increment="0.01"
initial_value="0"
label="Ease In (sec)"
- label_width="110"
+ label_width="140"
layout="topleft"
left="10"
max_val="10"
name="ease_in_time"
tool_tip="Amount of time (in seconds) over which animations blends in"
top_pad="10"
- width="200" />
+ width="210" />
<spinner
follows="left|top"
height="23"
increment="0.01"
initial_value="0"
label="Ease Out (sec)"
- label_width="110"
+ label_width="140"
layout="topleft"
top_pad="0"
max_val="10"
name="ease_out_time"
tool_tip="Amount of time (in seconds) over which animations blends out"
- width="200" />
+ width="210" />
<button
follows="top|right"
height="23"
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
index 961bd6b5e4..637f9f55d4 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
@@ -24,13 +24,13 @@
<text
type="string"
length="1"
- follows="top|left"
+ follows="top|left|right"
font="SansSerifHuge"
layout="topleft"
left="20"
height="30"
top="25"
- width="300"
+ width="340"
name="info_need_more">
You need more L$
</text>
@@ -55,7 +55,7 @@
left="20"
height="30"
top="25"
- width="200"
+ width="300"
name="info_buying">
Buy L$
</text>
@@ -178,11 +178,11 @@
follows="top|left"
height="16"
halign="right"
- left="140"
- width="180"
+ left="20"
+ width="300"
layout="topleft"
name="buy_action">
- [NAME] L$ [PRICE]
+ [ACTION]
</text>
<text
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml
index 98508e5113..df44b61632 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml
@@ -64,7 +64,7 @@ Try selecting a smaller area.
</floater.string>
<floater.string
name="not_owned_by_you">
- Land owned by another user is selected.
+ Land owned by another Resident is selected.
Try selecting a smaller area.
</floater.string>
<floater.string
@@ -356,7 +356,6 @@ supports [AMOUNT2] objects
length="1"
enabled="false"
follows="top|right"
- handle_edit_keys_directly="false"
height="237"
layout="topleft"
left="444"
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 2bd8420925..b45e39a111 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -12,6 +12,7 @@
help_topic="camera_floater"
save_rect="true"
save_visibility="true"
+ save_dock_state="true"
single_instance="true"
width="150">
<floater.string
@@ -26,6 +27,22 @@
name="move_tooltip">
Move Camera Up and Down, Left and Right
</floater.string>
+ <floater.string
+ name="orbit_mode_title">
+ Orbit
+ </floater.string>
+ <floater.string
+ name="pan_mode_title">
+ Pan
+ </floater.string>
+ <floater.string
+ name="avatar_view_mode_title">
+ Presets
+ </floater.string>
+ <floater.string
+ name="free_mode_title">
+ View Object
+ </floater.string>
<panel
border="false"
height="110"
@@ -131,6 +148,7 @@
height="40"
image_selected="Cam_Preset_Back_On"
image_unselected="Cam_Preset_Back_Off"
+ is_toggle="true"
layout="topleft"
left="0"
name="rear_view"
@@ -145,6 +163,7 @@
height="40"
image_selected="Cam_Preset_Side_On"
image_unselected="Cam_Preset_Side_Off"
+ is_toggle="true"
layout="topleft"
left_pad="5"
name="group_view"
@@ -159,6 +178,7 @@
height="40"
image_selected="Cam_Preset_Front_On"
image_unselected="Cam_Preset_Front_Off"
+ is_toggle="true"
layout="topleft"
left="0"
name="front_view"
@@ -173,6 +193,7 @@
height="40"
image_selected="Cam_Preset_Eye_Off"
image_unselected="Cam_Preset_Eye_Off"
+ is_toggle="true"
layout="topleft"
left_pad="5"
name="mouselook_view"
@@ -227,7 +248,7 @@
image_selected="PushButton_Selected_Press"
name="avatarview_btn"
tab_stop="false"
- tool_tip="See as avatar"
+ tool_tip="Presets"
width="25">
</button>
<button
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index b048eeceb6..6f2b0fc3ea 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -286,7 +286,7 @@
height="23"
layout="topleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Shape:
</text>
@@ -307,7 +307,7 @@
label_selected="Save"
layout="topleft"
name="Save"
- right="218"
+ right="186"
top="477"
width="82" />
<button
@@ -319,7 +319,7 @@
name="Save As"
top="477"
right="304"
- width="82" />
+ width="115" />
</panel>
<panel
border="false"
@@ -489,7 +489,7 @@
height="23"
layout="topleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Skin:
</text>
@@ -548,7 +548,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -561,7 +561,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -739,7 +739,7 @@
height="23"
layout="topleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Hair:
</text>
@@ -771,7 +771,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -784,7 +784,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -924,7 +924,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Eyes:
</text>
@@ -955,7 +955,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -968,7 +968,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -1069,7 +1069,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -1082,7 +1082,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -1193,7 +1193,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Shirt:
</text>
@@ -1272,7 +1272,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -1285,7 +1285,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -1396,7 +1396,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Pants:
</text>
@@ -1538,7 +1538,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Shoes:
</text>
@@ -1579,7 +1579,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -1592,7 +1592,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -1741,7 +1741,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Socks:
</text>
@@ -1782,7 +1782,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -1795,7 +1795,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -1944,7 +1944,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Jacket:
</text>
@@ -1996,7 +1996,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -2009,7 +2009,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -2158,7 +2158,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Gloves:
</text>
@@ -2199,7 +2199,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -2212,7 +2212,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -2361,7 +2361,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Undershirt:
</text>
@@ -2402,7 +2402,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -2415,7 +2415,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -2564,7 +2564,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Underpants:
</text>
@@ -2605,7 +2605,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -2618,7 +2618,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -2767,7 +2767,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Skirt:
</text>
@@ -2808,7 +2808,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -2821,7 +2821,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -2970,7 +2970,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Tattoo:
</text>
@@ -3024,7 +3024,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -3037,7 +3037,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
@@ -3186,7 +3186,7 @@
height="23"
layout="bottomleft"
name="Item Action Label"
- right="132"
+ right="90"
width="100">
Alpha:
</text>
@@ -3305,7 +3305,7 @@
label="Save"
label_selected="Save"
layout="topleft"
- right="218"
+ right="186"
name="Save"
top="477"
width="82" />
@@ -3318,7 +3318,7 @@
right="304"
name="Save As"
top="477"
- width="82" />
+ width="115" />
<button
follows="right|bottom"
height="23"
diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml
index 8c87bd42dd..14f9e2db95 100644
--- a/indra/newview/skins/default/xui/en/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml
@@ -135,28 +135,28 @@
width="210" />
<button
follows="left|top"
- height="20"
+ height="23"
label="Use Estate Time"
layout="topleft"
- left="8"
+ left="10"
name="EnvUseEstateTimeButton"
top="120"
width="137" />
<button
follows="left|top"
- height="20"
+ height="23"
label="Advanced Sky"
layout="topleft"
- left_pad="9"
+ left_pad="3"
name="EnvAdvancedSkyButton"
top_delta="0"
width="137" />
<button
follows="left|top"
- height="20"
+ height="23"
label="Advanced Water"
layout="topleft"
- left_pad="9"
+ left_pad="3"
name="EnvAdvancedWaterButton"
top_delta="0"
width="137" />
diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml
index 50f0f0454c..d9c9d63c72 100644
--- a/indra/newview/skins/default/xui/en/floater_event.xml
+++ b/indra/newview/skins/default/xui/en/floater_event.xml
@@ -20,6 +20,22 @@
name="dont_notify">
Don&apos;t Notify
</floater.string>
+ <floater.string
+ name="moderate">
+ Moderate
+ </floater.string>
+ <floater.string
+ name="adult">
+ Adult
+ </floater.string>
+ <floater.string
+ name="general">
+ General
+ </floater.string>
+ <floater.string
+ name="unknown">
+ Unknown
+ </floater.string>
<layout_stack
name="layout"
orientation="vertical"
@@ -32,7 +48,7 @@
border_size="0">
<layout_panel
name="profile_stack"
- follows="all"
+ follows="top|left"
layout="topleft"
top="0"
left="0"
@@ -72,7 +88,7 @@
left="10"
top_pad="7"
name="event_runby_label"
- width="310">
+ width="90">
Run by:
</text>
<text
@@ -80,48 +96,79 @@
height="20"
initial_value="(retrieving)"
layout="topleft"
- left="10"
+ left_pad="0"
link="true"
name="event_runby"
- top_pad="2"
+ top_delta="0"
use_ellipses="true"
- width="310" />
+ width="240" />
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ layout="topleft"
+ left="10"
+ top_pad="5"
+ name="event_date_label"
+ width="90">
+ Date:
+ </text>
<text
type="string"
length="1"
- left="10"
+ left_pad="0"
height="17"
- font="SansSerifMedium"
- text_color="EmphasisColor"
- top_pad="5"
+ top_delta="0"
follows="top|left"
layout="topleft"
name="event_date"
- width="310">
+ width="240">
10/10/2010
</text>
<text
type="string"
- height="14"
length="1"
+ follows="top|left"
+ layout="topleft"
left="10"
+ top_pad="5"
+ name="event_duration_label"
+ width="90">
+ Duration:
+ </text>
+ <text
+ type="string"
+ height="14"
+ length="1"
+ left_pad="0"
follows="top|left"
layout="topleft"
name="event_duration"
- width="310">
+ top_delta="0"
+ width="240">
1 hour
</text>
<text
- font="SansSerifMedium"
- text_color="EmphasisColor"
+ type="string"
+ length="1"
+ follows="top|left"
+ layout="topleft"
+ left="10"
+ top_pad="5"
+ name="event_covercharge_label"
+ width="90">
+ Cover charge:
+ </text>
+ <text
type="string"
follows="left|top"
height="16"
layout="topleft"
- left="10"
+ left_pad="0"
name="event_cover"
visible="true"
- width="310">
+ width="240"
+ top_delta="0">
Free
</text>
<text
@@ -131,28 +178,48 @@
layout="topleft"
left="10"
top_pad="5"
- name="event_location_label">
+ name="event_location_label"
+ width="90">
Location:
</text>
<text
type="string"
length="1"
height="20"
- left="10"
+ left_pad="0"
follows="top|left"
layout="topleft"
name="event_location"
use_ellipses="true"
+ top_delta="0"
value="SampleParcel, Name Long (145, 228, 26)"
- width="310" />
+ width="240" />
<icon
- follows="top|left"
- height="16"
- image_name="Parcel_PG_Dark"
- layout="topleft"
- left="10"
- name="rating_icon"
- width="18" />
+ follows="top|left"
+ height="16"
+ image_name="Parcel_PG_Dark"
+ layout="topleft"
+ left="10"
+ name="rating_icon_pg"
+ width="18" />
+ <icon
+ follows="top|left"
+ height="16"
+ image_name="Parcel_M_Dark"
+ layout="topleft"
+ left="10"
+ name="rating_icon_m"
+ top_delta="0"
+ width="18" />
+ <icon
+ follows="top|left"
+ height="16"
+ image_name="Parcel_R_Dark"
+ layout="topleft"
+ left="10"
+ name="rating_icon_r"
+ top_delta="0"
+ width="18" />
<text
follows="left|top"
height="16"
@@ -161,33 +228,35 @@
name="rating_label"
top_delta="3"
value="Rating:"
- width="60" />
+ width="90" />
<text
follows="left|right|top"
height="16"
layout="topleft"
- left_pad="0"
+ left_pad="2"
name="rating_value"
top_delta="0"
value="unknown"
- width="200" />
+ width="240" />
<expandable_text
- follows="left|top|right"
- height="106"
- layout="topleft"
- left="6"
- name="event_desc"
- width="313" />
+ follows="left|top|right"
+ height="65"
+ layout="topleft"
+ left="6"
+ name="event_desc"
+ textbox.label="More"
+ width="322">
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</expandable_text>
</layout_panel>
<layout_panel
- follows="left|right"
- height="24"
- layout="topleft"
- mouse_opaque="false"
- name="button_panel"
- top="0"
- left="0"
- user_resize="false">
+ follows="left|right"
+ height="24"
+ layout="topleft"
+ mouse_opaque="false"
+ name="button_panel"
+ top="0"
+ left="0"
+ user_resize="false">
<button
follows="left|top"
height="18"
diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml
index 0fac6cd5f1..dfe3cf4485 100644
--- a/indra/newview/skins/default/xui/en/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml
@@ -31,19 +31,6 @@
<button
follows="left|top"
height="20"
- label="Kick all users"
- label_selected="Kick all users"
- layout="topleft"
- left="10"
- name="Kick all users"
- top="30"
- width="120">
- <button.commit_callback
- function="GridTools.KickAll" />
- </button>
- <button
- follows="left|top"
- height="20"
label="Flush This Region&apos;s Map Visibility Caches"
label_selected="Flush This Region&apos;s Map Visibility Caches"
layout="topleft"
@@ -74,10 +61,10 @@
height="10"
layout="topleft"
left="10"
- name="Sim Name:"
+ name="Region Name:"
top="12"
width="80">
- Sim Name:
+ Region Name:
</text>
<line_editor
border_style="line"
@@ -494,10 +481,10 @@
height="10"
layout="topleft"
left="10"
- name="Sim Name:"
+ name="Region Name:"
top="10"
width="80">
- Sim Name:
+ Region Name:
</text>
<text
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml
index a21242ffe1..55efe83820 100644
--- a/indra/newview/skins/default/xui/en/floater_im.xml
+++ b/indra/newview/skins/default/xui/en/floater_im.xml
@@ -14,7 +14,7 @@
width="419">
<multi_floater.string
name="only_user_message">
- You are the only user in this session.
+ You are the only Resident in this session.
</multi_floater.string>
<multi_floater.string
name="offline_message">
@@ -54,7 +54,7 @@
</multi_floater.string>
<multi_floater.string
name="add_session_event">
- Unable to add users to chat session with [RECIPIENT].
+ Unable to add Residents to chat session with [RECIPIENT].
</multi_floater.string>
<multi_floater.string
name="message_session_event">
diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml
index 964713adbf..65a05f3ec5 100644
--- a/indra/newview/skins/default/xui/en/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_container.xml
@@ -24,7 +24,7 @@
tab_height="16"
use_custom_icon_ctrl="true"
tab_icon_ctrl_pad="2"
- font_halign="left"
+ halign="left"
use_ellipses="true"
top="0"
width="390" />
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index d2e5473157..422e50f035 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -2,6 +2,7 @@
<floater
legacy_header_height="18"
background_visible="true"
+ default_tab_group="1"
follows="all"
height="350"
layout="topleft"
@@ -12,18 +13,20 @@
can_minimize="true"
can_close="true"
visible="false"
- width="360"
+ width="385"
can_resize="true"
min_width="250"
min_height="190">
<layout_stack
animate="false"
+ default_tab_group="2"
follows="all"
height="320"
- width="360"
+ width="385"
layout="topleft"
orientation="horizontal"
name="im_panels"
+ tab_group="1"
top="20"
left="0">
<layout_panel
@@ -35,7 +38,9 @@
auto_resize="false"
user_resize="true" />
<layout_panel
+ default_tab_group="3"
left="0"
+ tab_group="2"
top="0"
height="200"
width="245"
@@ -75,6 +80,7 @@
label="To"
layout="bottomleft"
name="chat_editor"
+ tab_group="3"
width="240">
</line_editor>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml
index 3f7642fafe..bea35e5fc1 100644
--- a/indra/newview/skins/default/xui/en/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/en/floater_inspect.xml
@@ -16,7 +16,7 @@
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</floater.string>
<scroll_list
- bottom="270"
+ bottom="268"
column_padding="0"
draw_heading="true"
follows="top|right|left|bottom"
@@ -47,23 +47,23 @@
</scroll_list>
<button
follows="left|bottom"
- height="20"
+ height="23"
label="See Owner Profile..."
layout="topleft"
- left_delta="0"
+ left_delta="-1"
name="button owner"
tool_tip="See profile of the highlighted object&apos;s owner"
- top_pad="5"
+ top_pad="4"
width="150">
<button.commit_callback
function="Inspect.OwnerProfile" />
</button>
<button
follows="left|bottom"
- height="20"
+ height="23"
label="See Creator Profile..."
layout="topleft"
- left_pad="10"
+ left_pad="5"
name="button creator"
tool_tip="See profile of the highlighted object&apos;s original creator"
top_delta="0"
diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml
index 0d381fe5cb..ba2e0d3277 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory.xml
@@ -14,22 +14,6 @@
single_instance="false"
title="MY INVENTORY"
width="467">
- <floater.string
- name="Title">
- MY INVENTORY
- </floater.string>
- <floater.string
- name="TitleFetching">
- MY INVENTORY (Fetching [ITEM_COUNT] Items...) [FILTER]
- </floater.string>
- <floater.string
- name="TitleCompleted">
- MY INVENTORY ([ITEM_COUNT] Items) [FILTER]
- </floater.string>
- <floater.string
- name="Fetched">
- Fetched
- </floater.string>
<panel
bottom="560"
class="panel_main_inventory"
diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
index 990be55847..1f192f9b28 100644
--- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
@@ -45,9 +45,9 @@
layout="topleft"
name="Reset"
left="10"
- width="61" />
+ width="85" />
<check_box
- left_delta="71"
+ left_delta="90"
top_delta="3"
enabled="false"
follows="left|bottom"
@@ -57,9 +57,9 @@
label="Running"
layout="topleft"
name="running"
- width="100" />
+ width="205" />
<check_box
- left_delta="75"
+ left_delta="140"
enabled="true"
follows="left|bottom"
font="SansSerif"
diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml
index 5d35275e17..e21e44204d 100644
--- a/indra/newview/skins/default/xui/en/floater_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_map.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
+ bg_alpha_image_overlay="DkGray_66"
legacy_header_height="18"
can_minimize="true"
can_resize="true"
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index 851a689d42..8e2c57764b 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -12,6 +12,7 @@
help_topic="move_floater"
save_rect="true"
save_visibility="true"
+ save_dock_state="true"
width="115">
<string
name="walk_forward_tooltip">
@@ -37,6 +38,18 @@
name="fly_back_tooltip">
Fly Backwards (press Down Arrow or S)
</string>
+ <string
+ name="walk_title">
+ Walk
+ </string>
+ <string
+ name="run_title">
+ Run
+ </string>
+ <string
+ name="fly_title">
+ Fly
+ </string>
<panel
border="false"
height="83"
@@ -178,16 +191,5 @@
tool_tip="Flying mode"
top="2"
width="31" />
- <button
- visible="false"
- follows="left|bottom"
- height="20"
- label="Stop Flying"
- layout="topleft"
- left="0"
- name="stop_fly_btn"
- tool_tip="Stop flying"
- top="2"
- width="115" />
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
index a2938e8574..1d73d516d0 100644
--- a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
+++ b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
@@ -45,7 +45,6 @@ as a new Outfit:
border_style="line"
border_thickness="1"
follows="left|top"
- handle_edit_keys_directly="true"
height="23"
layout="topleft"
left_delta="0"
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index 7aa8e23e76..49361784ae 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -10,7 +10,7 @@
help_topic="preferences"
single_instance="true"
title="PREFERENCES"
- width="620">
+ width="658">
<button
follows="right|bottom"
height="23"
@@ -39,6 +39,7 @@
</button>
<tab_container
follows="all"
+ halign="left"
height="410"
layout="topleft"
left="0"
@@ -46,8 +47,9 @@
tab_group="1"
tab_position="left"
tab_width="115"
+ tab_padding_right="5"
top="21"
- width="620">
+ width="658">
<panel
class="panel_preference"
filename="panel_preferences_general.xml"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index ead5b8c8f2..14c0081c0d 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -25,10 +25,6 @@
name="Title">
Notecard: [NAME]
</floater.string>
- <floater.string
- name="Save">
- Save
- </floater.string>
<icon
follows="top|right"
height="18"
@@ -76,7 +72,6 @@
max_length="65536"
name="Notecard Editor"
allow_html="false"
- handle_edit_keys_directly="true"
tab_group="1"
top="46"
width="392"
diff --git a/indra/newview/skins/default/xui/en/floater_publish_classified.xml b/indra/newview/skins/default/xui/en/floater_publish_classified.xml
new file mode 100644
index 0000000000..3225843d09
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_publish_classified.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_minimize="false"
+ height="200"
+ layout="topleft"
+ name="publish_classified"
+ help_topic="price_for_listing"
+ title="Publishing Classified"
+ width="320">
+ <text
+ top="20"
+ follows="top|left"
+ font="SansSerif"
+ height="60"
+ layout="topleft"
+ left="15"
+ word_wrap="true"
+ name="explanation_text">
+
+Your classified ad will run for one week from the date it is published.
+
+Remember, Classified fees are non-refundable.
+
+ </text>
+ <spinner
+ decimal_digits="0"
+ follows="left|top"
+ halign="left"
+ height="23"
+ increment="1"
+ label_width="70"
+ label="Price for Ad: "
+ v_pad="10"
+ layout="topleft"
+ left="15"
+ value="50"
+ min_val="50"
+ max_val="99999"
+ name="price_for_listing"
+ top_pad="10"
+ tool_tip="Price for listing."
+ width="150" />
+ <text
+ follows="top|left"
+ font="SansSerif"
+ height="60"
+ layout="topleft"
+ left_pad="5"
+ top_delta="0"
+ word_wrap="true"
+ value="L$"
+ name="l$_text" />
+ <text
+ follows="top|right"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left="15"
+ name="more_info_text"
+ top_pad="-20"
+ width="300">
+More info (link to classified help)
+ </text>
+ <button
+ follows="top|left"
+ height="22"
+ label="Publish"
+ layout="topleft"
+ left="105"
+ name="publish_btn"
+ top="160"
+ width="100" />
+ <button
+ follows="top|left"
+ height="22"
+ label="Cancel"
+ layout="topleft"
+ left_pad="5"
+ name="cancel_btn"
+ width="100" />
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index ac0fca9cce..21c0bfef48 100644
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -456,7 +456,7 @@
layout="topleft"
left_delta="0"
name="dscr_title"
- top_pad="5"
+ top_pad="6"
width="50">
Details:
</text>
@@ -464,11 +464,12 @@
type="string"
length="1"
follows="left|top"
- height="16"
+ height="22"
layout="topleft"
name="bug_aviso"
left_pad="10"
- width="200">
+ word_wrap="true"
+ width="270">
Please be as specific as possible
</text>
<text_editor
diff --git a/indra/newview/skins/default/xui/en/floater_script.xml b/indra/newview/skins/default/xui/en/floater_script.xml
index 663899d4b3..12ade86b5f 100644
--- a/indra/newview/skins/default/xui/en/floater_script.xml
+++ b/indra/newview/skins/default/xui/en/floater_script.xml
@@ -3,7 +3,7 @@
legacy_header_height="18"
background_visible="true"
follows="left|top|right|bottom"
- height="369"
+ height="250"
layout="topleft"
left="0"
name="script_floater"
@@ -11,8 +11,8 @@
can_dock="true"
can_minimize="true"
visible="false"
- width="520"
+ width="350"
can_resize="false"
min_width="350"
- min_height="369">
+ min_height="200">
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
index afc44c41b8..4cae42bcfe 100644
--- a/indra/newview/skins/default/xui/en/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml
@@ -203,13 +203,13 @@
name="none"
visible="false" />
<radio_item
- bottom="20"
+ top_pad="10"
height="16"
label="No, keep ownership of objects"
left="10"
name="no" />
<radio_item
- bottom="40"
+ top_pad="10"
height="16"
label="Yes, sell objects with land"
left="10"
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 1ab3dda52c..7dcf2aab99 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -1,393 +1,127 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
- can_minimize="false"
- can_close="true"
+ can_minimize="true"
+ can_close="false"
follows="left|top"
- height="516"
+ height="340"
layout="topleft"
name="Snapshot"
help_topic="snapshot"
save_rect="true"
save_visibility="true"
- title="SNAPSHOT PREVIEW"
- width="215">
- <floater.string
- name="unknown">
- unknown
- </floater.string>
- <radio_group
- height="58"
- label="Snapshot type"
- layout="topleft"
- left="10"
- name="snapshot_type_radio"
- top="25"
- width="205">
- <radio_item
- bottom="19"
- height="16"
- label="Email"
- layout="topleft"
- name="postcard" />
- <radio_item
- bottom="38"
- height="16"
- label="My inventory (L$[AMOUNT])"
- layout="topleft"
- name="texture" />
- <radio_item
- bottom="57"
- height="16"
- label="Save to my computer"
- layout="topleft"
- name="local" />
- </radio_group>
- <ui_ctrl
- height="90"
- width="90"
+ can_dock="true"
+ title="Snapshot"
+ width="250">
+ <floater.string
+ name="unknown">
+ unknown
+ </floater.string>
+ <floater.string
+ name="share_to_web_url" translate="false">
+ http://pdp36.lindenlab.com:12777/
+ </floater.string>
+ <view
+ height="160"
+ width="230"
layout="topleft"
name="thumbnail_placeholder"
- top_pad="6"
+ top_pad="30"
follows="left|top"
left="10"
/>
- <text
- type="string"
- font="SansSerifSmall"
- length="1"
- follows="left|top"
- height="14"
- layout="topleft"
- right="-5"
- left_delta="0"
- halign="right"
- name="file_size_label"
- top_pad="10"
- width="195">
- [SIZE] KB
- </text>
- <button
- follows="left|top"
+ <button
+ follows="left|top"
+ height="22"
+ image_overlay="Refresh_Off"
+ layout="topleft"
+ left="20"
+ top_pad="-30"
+ name="new_snapshot_btn"
+ width="23" />
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="10"
+ max_length="500"
+ name="description"
+ top_pad="15"
+ width="230"
+ label="Description"/>
+ <button
+ label="Share Snapshot"
+ name="share"
+ top_pad="20"
+ left="10"
+ width="130"/>
+ <button
+ label="Share to Web"
+ name="share_to_web"
+ top_delta="0"
+ left="10"
+ width="130"/>
+ <button
+ label="Save to My Inventory"
+ name="save_to_inventory"
+ top_delta="0"
+ left="10"
+ width="130"/>
+ <button
+ label="Save Snapshot"
+ name="save"
+ top_pad="7"
+ left="10"
+ width="130"/>
+ <button
+ label="Email Snapshot"
+ name="share_to_email"
+ top_delta="0"
+ left="10"
+ width="130"/>
+ <button
+ label="Save to My Computer"
+ name="save_to_computer"
+ top_delta="0"
+ left="10"
+ width="130"/>
+ <button
+ label="Set As Profile Pic"
+ name="set_profile_pic"
+ top_pad="7"
+ left="10"
+ width="130"/>
+ <button
+ label="Back"
+ name="cancel"
+ top_delta="0"
+ left="10"
+ width="130"/>
+ <button
+ follows="left"
height="22"
- image_overlay="Refresh_Off"
- layout="topleft"
- left="10"
- name="new_snapshot_btn"
- width="23" />
- <button
- follows="left|top"
- height="23"
- label="Send"
- layout="topleft"
- left_pad="5"
- right="-5"
- name="send_btn"
- width="100" />
- <button
- follows="left|top"
- height="23"
- label="Save (L$[AMOUNT])"
- layout="topleft"
- right="-5"
- name="upload_btn"
- top_delta="0"
- width="100" />
- <flyout_button
- follows="left|top"
- height="23"
- label="Save"
- layout="topleft"
- right="-5"
- name="save_btn"
- tool_tip="Save image to a file"
- top_delta="0"
- width="100">
- <flyout_button.item
- label="Save"
- value="save" />
- <flyout_button.item
- label="Save As..."
- value="save as" />
- </flyout_button>
- <button
- follows="left|top"
- height="23"
- label="More"
- layout="topleft"
- left="10"
- name="more_btn"
- tool_tip="Advanced options"
- width="80" />
- <button
- follows="left|top"
- height="23"
- label="Less"
- layout="topleft"
- left_delta="0"
- name="less_btn"
- tool_tip="Advanced options"
- top_delta="0"
- width="80" />
- <button
- follows="left|top"
- height="23"
- label="Cancel"
- layout="topleft"
- right="-5"
- left_pad="5"
- name="discard_btn"
- width="100" />
- <text
- type="string"
- length="1"
- follows="top|left"
- height="12"
- layout="topleft"
- left="10"
- name="type_label2"
- top_pad="5"
- width="120">
- Size
- </text>
- <text
- type="string"
- length="1"
- follows="top|left"
- height="12"
- layout="topleft"
- left_pad="5"
- name="format_label"
- top_delta="0"
- width="70">
- Format
- </text>
- <combo_box
- height="23"
- label="Resolution"
- layout="topleft"
- left="10"
- name="postcard_size_combo"
- width="120">
- <combo_box.item
- label="Current Window"
- name="CurrentWindow"
- value="[i0,i0]" />
- <combo_box.item
- label="640x480"
- name="640x480"
- value="[i640,i480]" />
- <combo_box.item
- label="800x600"
- name="800x600"
- value="[i800,i600]" />
- <combo_box.item
- label="1024x768"
- name="1024x768"
- value="[i1024,i768]" />
- <combo_box.item
- label="Custom"
- name="Custom"
- value="[i-1,i-1]" />
- </combo_box>
- <combo_box
- height="23"
- label="Resolution"
layout="topleft"
- left_delta="0"
- name="texture_size_combo"
- top_delta="0"
- width="120">
- <combo_box.item
- label="Current Window"
- name="CurrentWindow"
- value="[i0,i0]" />
- <combo_box.item
- label="Small (128x128)"
- name="Small(128x128)"
- value="[i128,i128]" />
- <combo_box.item
- label="Medium (256x256)"
- name="Medium(256x256)"
- value="[i256,i256]" />
- <combo_box.item
- label="Large (512x512)"
- name="Large(512x512)"
- value="[i512,i512]" />
- <combo_box.item
- label="Custom"
- name="Custom"
- value="[i-1,i-1]" />
- </combo_box>
- <combo_box
- height="23"
- label="Resolution"
- layout="topleft"
- left_delta="0"
- name="local_size_combo"
- top_delta="0"
- width="120">
- <combo_box.item
- label="Current Window"
- name="CurrentWindow"
- value="[i0,i0]" />
- <combo_box.item
- label="320x240"
- name="320x240"
- value="[i320,i240]" />
- <combo_box.item
- label="640x480"
- name="640x480"
- value="[i640,i480]" />
- <combo_box.item
- label="800x600"
- name="800x600"
- value="[i800,i600]" />
- <combo_box.item
- label="1024x768"
- name="1024x768"
- value="[i1024,i768]" />
- <combo_box.item
- label="1280x1024"
- name="1280x1024"
- value="[i1280,i1024]" />
- <combo_box.item
- label="1600x1200"
- name="1600x1200"
- value="[i1600,i1200]" />
- <combo_box.item
- label="Custom"
- name="Custom"
- value="[i-1,i-1]" />
- </combo_box>
- <combo_box
- height="23"
- label="Format"
- layout="topleft"
- left_pad="5"
- name="local_format_combo"
- width="70">
- <combo_box.item
- label="PNG"
- name="PNG" />
- <combo_box.item
- label="JPEG"
- name="JPEG" />
- <combo_box.item
- label="BMP"
- name="BMP" />
- </combo_box>
- <spinner
- allow_text_entry="false"
- decimal_digits="0"
- follows="left|top"
- height="20"
- increment="32"
- label="Width"
- label_width="40"
- layout="topleft"
- left="10"
- max_val="6016"
- min_val="32"
- name="snapshot_width"
- top_pad="10"
- width="95" />
- <spinner
- allow_text_entry="false"
- decimal_digits="0"
- follows="left|top"
- height="20"
- increment="32"
- label="Height"
- label_width="40"
+ left="210"
+ name="show_advanced"
+ image_overlay="TabIcon_Close_Off"
+ top_delta="1"
+ width="30"/>
+ <button
+ follows="left"
+ height="22"
layout="topleft"
- left_pad="5"
- max_val="6016"
- min_val="32"
- name="snapshot_height"
+ left="210"
+ visible="false"
+ name="hide_advanced"
+ image_overlay="TabIcon_Open_Off"
top_delta="0"
- width="95" />
- <check_box
- bottom_delta="20"
- label="Constrain proportions"
- layout="topleft"
- left="10"
- name="keep_aspect_check" />
- <slider
- decimal_digits="0"
- follows="left|top"
- height="15"
- increment="1"
- initial_value="75"
- label="Image quality"
- label_width="100"
- layout="topleft"
- left_delta="0"
- max_val="100"
- name="image_quality_slider"
- top_pad="5"
- width="205" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="13"
- layout="topleft"
- left="10"
- name="layer_type_label"
- top_pad="5"
- width="50">
- Capture:
- </text>
- <combo_box
- height="23"
- label="Image Layers"
- layout="topleft"
- left="30"
- name="layer_types"
- width="145">
- <combo_box.item
- label="Colors"
- name="Colors"
- value="colors" />
- <combo_box.item
- label="Depth"
- name="Depth"
- value="depth" />
- </combo_box>
- <check_box
- label="Interface"
- layout="topleft"
- left="30"
- top_pad="10"
- width="180"
- name="ui_check" />
- <check_box
- label="HUDs"
- layout="topleft"
- left="30"
- top_pad="10"
- width="180"
- name="hud_check" />
- <check_box
- label="Keep open after saving"
- layout="topleft"
- left="10"
- top_pad="8"
- width="180"
- name="keep_open_check" />
- <check_box
- label="Freeze frame (fullscreen)"
- layout="topleft"
- left="10"
- top_pad="8"
- width="180"
- name="freeze_frame_check" />
- <check_box
- label="Auto-refresh"
- layout="topleft"
- left="10"
- top_pad="8"
- width="180"
- name="auto_snapshot_check" />
+ width="30"/>
+ <panel
+ visible="false"
+ left="250"
+ top="17"
+ name="snapshot_advanced"
+ filename="panel_snapshot_advanced.xml"/>
</floater>
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 b730f0e511..548e24efba 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
@@ -14,6 +14,7 @@
name="test_text_editor"
tool_tip="text editor"
top="25"
+ word_wrap="true"
width="200">
Text Editor
</text_editor>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index d989282b9f..cc9e72cfb5 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -2,7 +2,7 @@
<floater
legacy_header_height="18"
follows="left|top|right"
- height="570"
+ height="580"
layout="topleft"
bg_opaque_image="Window_NoTitle_Foreground"
bg_alpha_image="Window_NoTitle_Background"
@@ -12,7 +12,7 @@
short_title="BUILD TOOLS"
single_instance="true"
sound_flags="0"
- width="280">
+ width="295">
<floater.string
name="status_rotate">
Drag colored bands to rotate object
@@ -152,7 +152,7 @@
left="8"
name="text status"
top_pad="3"
- width="275">
+ width="285">
Drag to move, shift-drag to copy
</text>
<radio_group
@@ -249,10 +249,10 @@
<check_box
left="10"
follows="left|top"
- height="16"
+ height="28"
control_name="EditLinkedParts"
label="Edit linked"
- layout="topleft"
+ layout="topleft"
name="checkbox edit linked parts" >
<check_box.commit_callback
function="BuildTool.selectComponent"/>
@@ -265,7 +265,7 @@
left="13"
name="RenderingCost"
tool_tip="Shows the rendering cost calculated for this object"
- top_pad="9"
+ top_pad="2"
type="string"
width="100">
þ: [COUNT]
@@ -290,11 +290,11 @@
width="134" />
<check_box
control_name="SnapEnabled"
- height="20"
+ height="18"
initial_value="true"
label="Snap to grid"
layout="topleft"
- top_pad="0"
+ top_pad="7"
name="checkbox snap to grid"
width="134" />
<combo_box
@@ -330,7 +330,7 @@
top_delta="0"
right="-10"
width="18"
- height="19" >
+ height="23" >
<button.commit_callback
function="BuildTool.gridOptions"/>
</button>
@@ -342,7 +342,7 @@
image_selected="Object_Cube_Selected"
image_unselected="Object_Cube"
layout="topleft"
- left="4"
+ left="10"
name="ToolCube"
tool_tip="Cube"
top="51"
@@ -355,7 +355,7 @@
image_selected="Object_Prism_Selected"
image_unselected="Object_Prism"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolPrism"
tool_tip="Prism"
top_delta="0"
@@ -368,7 +368,7 @@
image_selected="Object_Pyramid_Selected"
image_unselected="Object_Pyramid"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolPyramid"
tool_tip="Pyramid"
top_delta="0"
@@ -381,7 +381,7 @@
image_selected="Object_Tetrahedron_Selected"
image_unselected="Object_Tetrahedron"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolTetrahedron"
tool_tip="Tetrahedron"
top_delta="0"
@@ -394,7 +394,7 @@
image_selected="Object_Cylinder_Selected"
image_unselected="Object_Cylinder"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolCylinder"
tool_tip="Cylinder"
top_delta="0"
@@ -407,7 +407,7 @@
image_selected="Object_Hemi_Cylinder_Selected"
image_unselected="Object_Hemi_Cylinder"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolHemiCylinder"
tool_tip="Hemicylinder"
top_delta="0"
@@ -420,7 +420,7 @@
image_selected="Object_Cone_Selected"
image_unselected="Object_Cone"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolCone"
tool_tip="Cone"
top_delta="0"
@@ -433,7 +433,7 @@
image_selected="Object_Hemi_Cone_Selected"
image_unselected="Object_Hemi_Cone"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolHemiCone"
tool_tip="Hemicone"
top_delta="0"
@@ -446,7 +446,7 @@
image_selected="Object_Sphere_Selected"
image_unselected="Object_Sphere"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolSphere"
tool_tip="Sphere"
top_delta="0"
@@ -459,7 +459,7 @@
image_selected="Object_Hemi_Sphere_Selected"
image_unselected="Object_Hemi_Sphere"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolHemiSphere"
tool_tip="Hemisphere"
top_delta="0"
@@ -472,7 +472,7 @@
image_selected="Object_Torus_Selected"
image_unselected="Object_Torus"
layout="topleft"
- left="4"
+ left="10"
name="ToolTorus"
tool_tip="Torus"
top="77"
@@ -485,7 +485,7 @@
image_selected="Object_Tube_Selected"
image_unselected="Object_Tube"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolTube"
tool_tip="Tube"
top_delta="0"
@@ -498,7 +498,7 @@
image_selected="Object_Ring_Selected"
image_unselected="Object_Ring"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolRing"
tool_tip="Ring"
top_delta="0"
@@ -511,7 +511,7 @@
image_selected="Object_Tree_Selected"
image_unselected="Object_Tree"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolTree"
tool_tip="Tree"
top_delta="0"
@@ -525,7 +525,7 @@
image_unselected="Object_Grass"
image_overlay_color="Red"
layout="topleft"
- left_delta="26"
+ left_delta="29"
name="ToolGrass"
tool_tip="Grass"
top_delta="0"
@@ -581,7 +581,7 @@
left="0"
name="radio select land"
top="-1"
- width="114" />
+ width="134" />
<radio_item
height="19"
label="Flatten"
@@ -639,7 +639,7 @@
follows="left|top"
height="12"
layout="topleft"
- left="125"
+ left="135"
name="Bulldozer:"
top="57"
width="100">
@@ -697,7 +697,7 @@
</slider_bar>
<button
follows="left|top"
- height="19"
+ height="23"
label="Apply"
label_selected="Apply"
top_pad="5"
@@ -705,7 +705,7 @@
left="135"
name="button apply to selection"
tool_tip="Modify selected land"
- width="78">
+ width="82">
<button.commit_callback
function="BuildTool.applyToSelection"/>
</button>
@@ -713,13 +713,13 @@
text_color="LtGray_50"
type="string"
length="1"
- height="12"
+ height="10"
follows="left|top"
halign="right"
layout="topleft"
right="-10"
name="obj_count"
- top_pad="6"
+ top_pad="5"
width="143">
Objects: [COUNT]
</text>
@@ -737,16 +737,16 @@
</text>
<tab_container
follows="left|top"
- height="400"
+ height="410"
halign="center"
left="0"
name="Object Info Tabs"
- tab_max_width="54"
+ tab_max_width="100"
tab_min_width="40"
tab_position="top"
tab_height="25"
top="170"
- width="280">
+ width="295">
<panel
border="false"
follows="all"
@@ -756,8 +756,8 @@
help_topic="toolbox_general_tab"
name="General"
top="16"
- width="280">
- <panel.string
+ width="295">
+<panel.string
name="text deed continued">
Deed
</panel.string>
@@ -922,13 +922,13 @@
width="150" />
<button
follows="top|left"
- height="20"
+ height="23"
label="Deed"
label_selected="Deed"
layout="topleft"
name="button deed"
top_pad="0"
- left="100"
+ left="108"
tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."
width="80" />
<check_box
@@ -949,12 +949,12 @@
top_pad="15"
left="10"
name="label click action"
- width="90">
+ width="98">
Click to:
</text>
<combo_box
follows="left|top"
- height="20"
+ height="23"
layout="topleft"
name="clickaction"
width="168"
@@ -985,25 +985,24 @@
value="Zoom" />
</combo_box>
<check_box
- height="16"
- top_pad="15"
+ height="23"
label="For Sale:"
layout="topleft"
name="checkbox for sale"
- left="10"
- width="90" />
+ left="7"
+ width="100" />
<!-- NEW SALE TYPE COMBO BOX -->
<combo_box
left_pad="0"
layout="topleft"
follows="left|top"
allow_text_entry="false"
- height="20"
+ height="23"
intial_value="2"
max_chars="20"
mouse_opaque="true"
name="sale type"
- width="158">
+ width="168">
<combo_box.item
name="Copy"
label="Copy"
@@ -1026,12 +1025,12 @@ even though the user gets a free copy.
decimal_digits="0"
increment="1"
top_pad="8"
- left="100"
+ left="108"
control_name="Edit Cost"
name="Edit Cost"
label="Price: L$"
label_width="65"
- width="150"
+ width="165"
min_val="0"
height="20"
max_val="999999999" />
@@ -1054,8 +1053,8 @@ even though the user gets a free copy.
name="perms_build"
left="0"
top="241"
- height="120"
- width="278">
+ height="130"
+ width="290">
<text
type="string"
length="1"
@@ -1082,7 +1081,7 @@ even though the user gets a free copy.
label="Move"
layout="topleft"
name="checkbox allow everyone move"
- left="15"
+ left="10"
width="85" />
<check_box
height="19"
@@ -1104,7 +1103,7 @@ even though the user gets a free copy.
follows="left|top|right"
label="Modify"
layout="topleft"
- left="15"
+ left="10"
name="checkbox next owner can modify"
width="85" />
<check_box
@@ -1114,7 +1113,7 @@ even though the user gets a free copy.
layout="topleft"
left_pad="0"
name="checkbox next owner can copy"
- width="90" />
+ width="80" />
<check_box
follows="left|top|right"
height="19"
@@ -1124,7 +1123,7 @@ even though the user gets a free copy.
left_pad="0"
top_delta="0"
tool_tip="Next owner can give away or resell this object"
- width="90" />
+ width="100" />
<text
type="string"
text_color="EmphasisColor"
@@ -1135,7 +1134,7 @@ even though the user gets a free copy.
left="10"
name="B:"
height="10"
- width="45">
+ width="80">
B:
</text>
<text
@@ -1147,7 +1146,7 @@ even though the user gets a free copy.
left_pad="0"
name="O:"
height="10"
- width="44">
+ width="80">
O:
</text>
<text
@@ -1159,7 +1158,7 @@ even though the user gets a free copy.
left_pad="0"
name="G:"
height="10"
- width="43">
+ width="80">
G:
</text>
<text
@@ -1167,11 +1166,12 @@ even though the user gets a free copy.
text_color="White"
length="1"
follows="left|top"
- left_pad="0"
+ left="10"
+ top_pad="2"
layout="topleft"
name="E:"
height="10"
- width="43">
+ width="80">
E:
</text>
<text
@@ -1183,7 +1183,7 @@ even though the user gets a free copy.
left_pad="0"
name="N:"
height="10"
- width="48">
+ width="80">
N:
</text>
<text
@@ -1195,7 +1195,7 @@ even though the user gets a free copy.
left_pad="0"
name="F:"
height="10"
- width="50">
+ width="80">
F:
</text>
</panel>
@@ -1211,7 +1211,7 @@ even though the user gets a free copy.
help_topic="toolbox_object_tab"
name="Object"
top="16"
- width="280">
+ width="295">
<check_box
height="19"
label="Locked"
@@ -1552,7 +1552,7 @@ even though the user gets a free copy.
layout="topleft"
left="125"
name="text hollow"
- top_pad="5"
+ top_pad="6"
width="68">
Hollow
</text>
@@ -1600,16 +1600,16 @@ even though the user gets a free copy.
layout="topleft"
left="125"
name="Hollow Shape"
- top_pad="0"
+ top_pad="4"
width="150">
Hollow Shape
</text>
<combo_box
- height="19"
+ height="23"
layout="topleft"
left_delta="0"
name="hole"
- top_pad="3"
+ top_pad="-2"
width="150">
<combo_box.item
label="Default"
@@ -1881,7 +1881,7 @@ even though the user gets a free copy.
layout="topleft"
left="125"
name="text radius delta"
- top_pad="0"
+ top_pad="2"
width="78">
Radius
</text>
@@ -1998,7 +1998,6 @@ even though the user gets a free copy.
value="Cylinder" />
</combo_box>
</panel>
-
<panel
border="false"
follows="all"
@@ -2010,7 +2009,7 @@ even though the user gets a free copy.
help_topic="toolbox_features_tab"
name="Features"
top_delta="0"
- width="280">
+ width="295">
<text
type="string"
length="1"
@@ -2050,7 +2049,7 @@ even though the user gets a free copy.
increment="1"
initial_value="2"
label="Softness"
- label_width="65"
+ label_width="70"
layout="topleft"
left_delta="0"
max_val="3"
@@ -2063,7 +2062,7 @@ even though the user gets a free copy.
increment="0.5"
initial_value="0.3"
label="Gravity"
- label_width="65"
+ label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@@ -2077,7 +2076,7 @@ even though the user gets a free copy.
increment="0.5"
initial_value="2"
label="Drag"
- label_width="65"
+ label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@@ -2090,7 +2089,7 @@ even though the user gets a free copy.
increment="0.5"
initial_value="0"
label="Wind"
- label_width="65"
+ label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@@ -2103,7 +2102,7 @@ even though the user gets a free copy.
increment="0.5"
initial_value="1"
label="Tension"
- label_width="65"
+ label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@@ -2116,7 +2115,7 @@ even though the user gets a free copy.
increment="0.01"
initial_value="0"
label="Force X"
- label_width="65"
+ label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@@ -2130,7 +2129,7 @@ even though the user gets a free copy.
increment="0.01"
initial_value="0"
label="Force Y"
- label_width="65"
+ label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@@ -2144,7 +2143,7 @@ even though the user gets a free copy.
increment="0.01"
initial_value="0"
label="Force Z"
- label_width="65"
+ label_width="70"
layout="topleft"
left_delta="0"
max_val="10"
@@ -2248,7 +2247,7 @@ even though the user gets a free copy.
help_topic="toolbox_texture_tab"
name="Texture"
top_delta="0"
- width="280">
+ width="295">
<panel.string
name="string repeats per meter">
Repeats Per Meter
@@ -2312,7 +2311,7 @@ even though the user gets a free copy.
layout="topleft"
left_delta="0"
name="glow label"
- top_pad="2"
+ top_pad="8"
width="80">
Glow
</text>
@@ -2343,7 +2342,7 @@ even though the user gets a free copy.
left="10"
name="tex gen"
top_pad="5"
- width="85">
+ width="90">
Mapping
</text>
<combo_box
@@ -2352,7 +2351,7 @@ even though the user gets a free copy.
left_delta="0"
name="combobox texgen"
top_pad="4"
- width="85">
+ width="90">
<combo_box.item
label="Default"
name="Default"
@@ -2371,7 +2370,7 @@ even though the user gets a free copy.
name="label shininess"
left_pad="4"
top_pad="-36"
- width="85">
+ width="90">
Shininess
</text>
<combo_box
@@ -2380,7 +2379,7 @@ even though the user gets a free copy.
left_delta="0"
name="combobox shininess"
top_pad="4"
- width="85">
+ width="90">
<combo_box.item
label="None"
name="None"
@@ -2407,7 +2406,7 @@ even though the user gets a free copy.
left_pad="4"
name="label bumpiness"
top_pad="-36"
- width="85">
+ width="90">
Bumpiness
</text>
<combo_box
@@ -2416,7 +2415,7 @@ even though the user gets a free copy.
left_delta="0"
name="combobox bumpiness"
top_pad="4"
- width="85">
+ width="90">
<combo_box.item
label="None"
name="None"
@@ -2532,7 +2531,7 @@ even though the user gets a free copy.
layout="topleft"
left="10"
name="tex scale"
- top_pad="5"
+ top_pad="4"
width="200">
Repeats / Face
</text>
@@ -2541,18 +2540,18 @@ even though the user gets a free copy.
height="19"
initial_value="0"
label="Horizontal (U)"
- label_width="90"
+ label_width="125"
layout="topleft"
left="20"
max_val="100"
name="TexScaleU"
top_pad="6"
- width="160" />
+ width="185" />
<check_box
height="19"
label="Flip"
layout="topleft"
- left_pad="10"
+ left_pad="5"
name="checkbox flip s"
top_delta="0"
width="70" />
@@ -2561,22 +2560,20 @@ even though the user gets a free copy.
height="19"
initial_value="0"
label="Vertical (V)"
- label_width="90"
+ label_width="125"
layout="topleft"
left="20"
max_val="100"
name="TexScaleV"
- top_pad="0"
- width="160" />
+ width="185" />
<check_box
height="19"
label="Flip"
layout="topleft"
- left_pad="10"
+ left_pad="5"
name="checkbox flip t"
top_delta="0"
width="70" />
-
<spinner
decimal_digits="2"
follows="left|top"
@@ -2585,35 +2582,33 @@ even though the user gets a free copy.
initial_value="0"
label="RotationËš"
layout="topleft"
- label_width="100"
+ label_width="135"
left="10"
max_val="9999"
min_val="-9999"
name="TexRot"
- top_delta="25"
- width="170" />
+ width="195" />
<spinner
decimal_digits="1"
follows="left|top"
- height="19"
+ height="23"
initial_value="1"
label="Repeats / Meter"
layout="topleft"
- label_width="100"
+ label_width="135"
left="10"
max_val="10"
min_val="0.1"
name="rptctrl"
- top_delta="20"
- width="170" />
+ width="195" />
<button
follows="left|top"
height="23"
label="Apply"
label_selected="Apply"
layout="topleft"
- left_pad="10"
+ left_pad="5"
name="button apply"
width="75" />
<text
@@ -2624,7 +2619,6 @@ even though the user gets a free copy.
layout="topleft"
left="10"
name="tex offset"
- top_delta="20"
width="200">
Texture Offset
</text>
@@ -2633,25 +2627,24 @@ even though the user gets a free copy.
height="19"
initial_value="0"
label="Horizontal (U)"
- label_width="90"
+ label_width="125"
layout="topleft"
left="20"
min_val="-1"
name="TexOffsetU"
- top_pad="6"
- width="160" />
+ width="185" />
<spinner
follows="left|top"
height="19"
initial_value="0"
label="Vertical (V)"
- label_width="90"
+ label_width="125"
layout="topleft"
left_delta="0"
min_val="-1"
name="TexOffsetV"
top_pad="1"
- width="160" />
+ width="185" />
<panel
border="false"
follows="left|top"
@@ -2661,30 +2654,20 @@ even though the user gets a free copy.
bg_alpha_color="DkGray"
name="Add_Media"
left="0"
- top_pad="0"
- height="75"
- width="278">
+ height="63"
+ width="290">
<text
type="string"
length="1"
follows="left|top"
- height="12"
+ height="18"
layout="topleft"
left="10"
- top_pad="5"
+ top_pad="3"
name="media_tex"
- width="260">
+ width="190">
Media
</text>
- <text
- follows="left|top|right"
- height="18"
- layout="topleft"
- left="10"
- use_ellipses="true"
- read_only="true"
- name="media_info"
- width="180" />
<button
follows="top|left"
height="18"
@@ -2718,18 +2701,27 @@ even though the user gets a free copy.
<button
follows="top|left"
tool_tip="Edit this Media"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
+ height="12"
+ image_disabled="Icon_Gear_Foreground"
+ image_selected="Icon_Gear_Background"
+ image_unselected="Icon_Gear_Press"
layout="topleft"
left_pad="10"
name="edit_media"
- top_delta="0"
- width="18">
+ top_delta="3"
+ width="12">
<button.commit_callback
function="BuildTool.EditMedia"/>
</button>
+ <text
+ follows="left|top|right"
+ height="9"
+ layout="topleft"
+ left="10"
+ use_ellipses="true"
+ read_only="true"
+ name="media_info"
+ width="280" />
<web_browser
visible="false"
enabled="false"
@@ -2743,16 +2735,15 @@ even though the user gets a free copy.
start_url="about:blank"
decouple_texture_size="true" />
<button
- follows="left|top"
- height="23"
+ follows="right|top"
+ height="22"
label="Align"
label_selected="Align Media"
layout="topleft"
- left="10"
+ right="-10"
name="button align"
- top_pad="5"
tool_tip="Align media texture (must load first)"
- width="100" />
+ width="80" />
</panel>
</panel>
<panel
@@ -2765,36 +2756,36 @@ even though the user gets a free copy.
help_topic="toolbox_contents_tab"
name="Contents"
top_delta="0"
- width="280">
+ width="295">
<button
follows="left|top"
- height="19"
+ height="23"
label="New Script"
label_selected="New Script"
layout="topleft"
left="10"
name="button new script"
top="10"
- width="120" />
+ width="134" />
<button
follows="left|top"
- height="19"
+ height="23"
label="Permissions"
layout="topleft"
left_pad="8"
name="button permissions"
- width="130" />
+ width="134" />
<panel_inventory_object
border="true"
border_visible="true"
bevel_style="in"
- follows="left|top"
+ follows="left|top|right"
height="325"
layout="topleft"
left="10"
name="contents_inventory"
top="50"
- width="260" />
+ width="275" />
</panel>
</tab_container>
<panel
@@ -2804,7 +2795,7 @@ even though the user gets a free copy.
left_delta="0"
name="land info panel"
top_delta="0"
- width="280">
+ width="295">
<text
type="string"
length="1"
@@ -2815,7 +2806,7 @@ even though the user gets a free copy.
left="20"
name="label_parcel_info"
top="24"
- width="150">
+ width="240">
Parcel Information
</text>
<text
@@ -2844,14 +2835,14 @@ even though the user gets a free copy.
</text>
<button
follows="left|top"
- height="20"
+ height="23"
label="About Land"
label_selected="About Land"
layout="topleft"
left_delta="0"
name="button about land"
top_pad="4"
- width="112" />
+ width="125" />
<check_box
control_name="ShowParcelOwners"
height="19"
@@ -2872,29 +2863,29 @@ even though the user gets a free copy.
left="20"
name="label_parcel_modify"
top="152"
- width="150">
+ width="240">
Modify Parcel
</text>
<button
follows="left|top"
- height="20"
+ height="23"
label="Subdivide"
label_selected="Subdivide"
layout="topleft"
left="30"
name="button subdivide land"
top="172"
- width="112" />
+ width="125" />
<button
follows="left|top"
- height="20"
+ height="23"
label="Join"
label_selected="Join"
layout="topleft"
left_delta="0"
name="button join land"
top_pad="4"
- width="112" />
+ width="125" />
<text
type="string"
length="1"
@@ -2905,28 +2896,28 @@ even though the user gets a free copy.
left="20"
name="label_parcel_trans"
top="256"
- width="150">
+ width="240">
Land Transactions
</text>
<button
follows="left|top"
- height="20"
+ height="23"
label="Buy Land"
label_selected="Buy Land"
layout="topleft"
left="30"
name="button buy land"
top="276"
- width="112" />
+ width="125" />
<button
follows="left|top"
- height="20"
+ height="23"
label="Abandon Land"
label_selected="Abandon Land"
layout="topleft"
left_delta="0"
name="button abandon land"
top_pad="4"
- width="112" />
+ width="125" />
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml
index 5e168fe4aa..cbfaac958b 100644
--- a/indra/newview/skins/default/xui/en/floater_tos.xml
+++ b/indra/newview/skins/default/xui/en/floater_tos.xml
@@ -11,6 +11,10 @@
name="real_url">
http://secondlife.com/app/tos/
</floater.string>
+ <floater.string
+ name="loading_url">
+ data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E
+ </floater.string>
<button
enabled="false"
height="20"
@@ -33,7 +37,7 @@
<check_box
follows="top|right"
height="16"
- label="I Agree to the Terms of Service"
+ label="I Agree to the Terms of Service and Privacy Policy"
layout="topleft"
left_delta="0"
name="agree_chk"
@@ -51,7 +55,7 @@
top_delta="-399"
word_wrap="true"
width="552">
- Please read the following Terms of Service carefully. To continue logging in to [SECOND_LIFE], you must accept the agreement.
+ Please read the following Terms of Service and Privacy Policy carefully. To continue logging in to [SECOND_LIFE], you must accept the agreement.
</text>
<web_browser
follows="left|top"
@@ -59,7 +63,6 @@
layout="topleft"
left_delta="0"
name="tos_html"
- start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E"
top_delta="40"
width="568" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
index e86cb23c1e..3b10a57c50 100644
--- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
@@ -112,7 +112,7 @@
layout="topleft"
left_pad="15"
name="toggle_overlap_panel"
- tool_tip="Toggle highlighting and display panel for overlapping elements; right click an element to select it for this feature. The selected element is marked by a red rectangle."
+ tool_tip="Toggle highlighting and display panel for overlapping elements; right-click an element to select it for this feature. The selected element is marked by a red rectangle."
top_delta="0"
width="30" />
<text
@@ -238,7 +238,6 @@
border_thickness="1"
follows="left|bottom"
font="SansSerif"
- handle_edit_keys_directly="true"
height="20"
layout="topleft"
left_delta="100"
@@ -278,7 +277,6 @@
border_thickness="1"
follows="left|bottom"
font="SansSerif"
- handle_edit_keys_directly="true"
height="20"
layout="topleft"
left_delta="100"
@@ -320,7 +318,6 @@
border_thickness="1"
follows="left|bottom"
font="SansSerif"
- handle_edit_keys_directly="true"
height="20"
layout="topleft"
left_delta="65"
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 100a060557..f5aaedad4f 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -73,7 +73,7 @@
text_color="white"
top="4"
use_ellipses="true"
- value="Mya Avatar:"
+ value="My Avatar:"
width="210" />
<output_monitor
auto_update="true"
diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml
index 32739ac953..3a44ba3763 100644
--- a/indra/newview/skins/default/xui/en/floater_water.xml
+++ b/indra/newview/skins/default/xui/en/floater_water.xml
@@ -16,49 +16,49 @@
type="string"
length="1"
follows="left|top|right"
- font.style="BOLD"
height="16"
layout="topleft"
left="10"
name="KeyFramePresetsText"
top="34"
- width="110">
+ font="SansSerif"
+ width="85">
Water Presets:
</text>
<combo_box
- height="18"
+ height="23"
layout="topleft"
- left_pad="10"
+ left_delta="95"
name="WaterPresetsCombo"
- top_delta="-2"
+ top_delta="-4"
width="150" />
<button
- height="20"
+ height="23"
label="New"
label_selected="New"
layout="topleft"
- left_pad="20"
+ left_pad="3"
name="WaterNewPreset"
- top_delta="1"
- width="90" />
+ top_delta="0"
+ width="70" />
<button
- height="20"
+ height="23"
label="Save"
label_selected="Save"
layout="topleft"
- left_pad="10"
+ left_pad="3"
name="WaterSavePreset"
top_delta="0"
- width="90" />
+ width="70" />
<button
- height="20"
+ height="23"
label="Delete"
label_selected="Delete"
layout="topleft"
- left_pad="10"
+ left_pad="3"
name="WaterDeletePreset"
top_delta="0"
- width="90" />
+ width="70" />
<tab_container
border="false"
follows="left|top"
@@ -74,7 +74,7 @@
border="true"
follows="all"
height="180"
- label="Settings"
+ label="SETTINGS"
layout="topleft"
left="0"
mouse_opaque="false"
@@ -331,7 +331,7 @@
border="true"
follows="all"
height="180"
- label="Image"
+ label="IMAGE"
layout="topleft"
left="0"
mouse_opaque="false"
@@ -348,7 +348,7 @@
layout="topleft"
left="10"
name="BHText"
- top="10"
+ top="4"
width="200">
Big Wave Direction
</text>
@@ -361,23 +361,10 @@
layout="topleft"
left="10"
name="WaterWave1DirXText"
- top_pad="4"
+ top_pad="5"
width="10">
X
</text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="WaterWave1DirYText"
- top_delta="18"
- width="10">
- Y
- </text>
<slider
control_name="WaterWave1DirX"
decimal_digits="2"
@@ -390,8 +377,22 @@
max_val="4"
min_val="-4"
name="WaterWave1DirX"
- top="55"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="WaterWave1DirYText"
+ top_pad="-15"
+ width="10">
+ Y
+ </text>
<slider
control_name="WaterWave1DirY"
decimal_digits="2"
@@ -404,7 +405,8 @@
max_val="4"
min_val="-4"
name="WaterWave1DirY"
- top_pad="5"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
@@ -413,9 +415,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="-13"
name="BHText2"
- top_delta="3"
+ top_pad="-10"
width="355">
Little Wave Direction
</text>
@@ -427,24 +429,12 @@
height="16"
layout="topleft"
left="10"
+ left_delta="0"
name="WaterWave2DirXText"
- top="90"
+ top_pad="5"
width="10">
X
</text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="WaterWave2DirYText"
- top_delta="20"
- width="10">
- Y
- </text>
<slider
control_name="WaterWave2DirX"
decimal_digits="2"
@@ -457,8 +447,22 @@
max_val="4"
min_val="-4"
name="WaterWave2DirX"
- top="115"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="WaterWave2DirYText"
+ top_pad="-15"
+ width="10">
+ Y
+ </text>
<slider
control_name="WaterWave2DirY"
decimal_digits="2"
@@ -471,7 +475,8 @@
max_val="4"
min_val="-4"
name="WaterWave2DirY"
- top_pad="10"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
index b4b57f2dbc..71812bd1a6 100644
--- a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
@@ -44,7 +44,6 @@
border_style="line"
border_thickness="1"
follows="left|top"
- handle_edit_keys_directly="true"
height="23"
layout="topleft"
left_delta="0"
diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
index 0cb7814c6a..d09a41978d 100644
--- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
- height="220"
+ height="256"
layout="topleft"
name="WindLight floater"
help_topic="windlight_floater"
@@ -22,68 +22,64 @@
left="10"
name="KeyFramePresetsText"
top="34"
- width="110">
+ width="85">
Sky Presets:
</text>
<combo_box
- height="18"
+ height="23"
layout="topleft"
- left_delta="110"
+ left_delta="85"
name="WLPresetsCombo"
- top_delta="-2"
+ top_delta="-4"
width="150" />
<button
- height="20"
+ height="23"
label="New"
label_selected="New"
layout="topleft"
- left_pad="20"
+ left_pad="3"
name="WLNewPreset"
- top_delta="1"
width="70" />
<button
- height="20"
+ height="23"
label="Save"
label_selected="Save"
layout="topleft"
- left_pad="10"
+ left_pad="3"
name="WLSavePreset"
- top_delta="0"
width="70" />
<button
- height="20"
+ height="23"
label="Delete"
label_selected="Delete"
layout="topleft"
- left_pad="10"
+ left_pad="3"
name="WLDeletePreset"
- top_delta="0"
width="70" />
<button
- height="20"
+ height="23"
label="Day Cycle Editor"
label_selected="Day Cycle Editor"
layout="topleft"
- left_pad="50"
+ right="-10"
name="WLDayCycleMenuButton"
- top_delta="0"
+ top_pad="-23"
width="120" />
<tab_container
follows="left|top"
- height="160"
+ height="196"
halign="center"
layout="topleft"
left="0"
name="WindLight Tabs"
tab_position="top"
- tab_height="20"
top="60"
width="700">
<panel
border="true"
follows="left|top|right|bottom"
- height="160"
- label="Atmosphere"
+ height="196"
+ label="ATMOSPHERE"
layout="topleft"
left="1"
mouse_opaque="false"
@@ -113,10 +109,22 @@
layout="topleft"
left="10"
name="BHText2"
- top="21"
+ top_pad="5"
width="10">
R
</text>
+ <slider
+ control_name="WLBlueHorizonR"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_pad="3"
+ top_pad="6"
+ name="WLBlueHorizonR"
+ width="200" />
<text
type="string"
length="1"
@@ -124,12 +132,25 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
+ left="10"
+ top_pad="-15"
name="BHText3"
- top_delta="11"
width="10">
G
</text>
+ <slider
+ control_name="WLBlueHorizonG"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="0"
+ name="WLBlueHorizonG"
+ left_pad="3"
+ top_pad="6"
+ width="200" />
<text
type="string"
length="1"
@@ -137,12 +158,24 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
name="BHText4"
- top_delta="11"
+ left="10"
+ top_pad="-15"
width="10">
B
</text>
+ <slider
+ control_name="WLBlueHorizonB"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ name="WLBlueHorizonB"
+ left_pad="3"
+ top_pad="6"
+ width="200" />
<text
type="string"
length="1"
@@ -150,49 +183,13 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
name="BHText5"
- top_delta="11"
+ left="10"
+ top_pad="-15"
width="10">
I
</text>
<slider
- control_name="WLBlueHorizonR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="24"
- name="WLBlueHorizonR"
- top="40"
- width="200" />
- <slider
- control_name="WLBlueHorizonG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLBlueHorizonG"
- top_pad="1"
- width="200" />
- <slider
- control_name="WLBlueHorizonB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLBlueHorizonB"
- top_pad="1"
- width="200" />
- <slider
control_name="WLBlueHorizonI"
decimal_digits="2"
follows="left"
@@ -200,9 +197,9 @@
increment="0.01"
initial_value="1.0"
layout="topleft"
- left_delta="0"
name="WLBlueHorizonI"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
@@ -211,9 +208,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left="10"
+ top_pad="-10"
name="BDensText"
- top_delta="-2"
width="355">
Haze Horizon
</text>
@@ -225,9 +222,10 @@
increment="0.01"
initial_value="0.25"
layout="topleft"
- left="24"
+ left="23"
+ top_delta="0"
+ top_pad="27"
name="WLHazeHorizon"
- top="107"
width="200" />
<text
type="string"
@@ -251,10 +249,22 @@
layout="topleft"
left="245"
name="BHText6"
- top="21"
+ top_pad="5"
width="10">
R
</text>
+ <slider
+ control_name="WLBlueDensityR"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_pad="3"
+ top_pad="6"
+ name="WLBlueDensityR"
+ width="200" />
<text
type="string"
length="1"
@@ -262,50 +272,12 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
+ left="245"
name="BHText7"
- top_delta="11"
+ top_pad="-15"
width="10">
G
</text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText8"
- top_delta="11"
- width="10">
- B
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText9"
- top_delta="11"
- width="10">
- I
- </text>
- <slider
- control_name="WLBlueDensityR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="259"
- name="WLBlueDensityR"
- top="40"
- width="200" />
<slider
control_name="WLBlueDensityG"
decimal_digits="2"
@@ -316,8 +288,22 @@
layout="topleft"
left_delta="0"
name="WLBlueDensityG"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left="245"
+ name="BHText8"
+ top_pad="-15"
+ width="10">
+ B
+ </text>
<slider
control_name="WLBlueDensityB"
decimal_digits="2"
@@ -328,8 +314,22 @@
layout="topleft"
left_delta="0"
name="WLBlueDensityB"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left="245"
+ name="BHText9"
+ top_pad="-15"
+ width="10">
+ I
+ </text>
<slider
control_name="WLBlueDensityI"
decimal_digits="2"
@@ -340,7 +340,8 @@
layout="topleft"
left_delta="0"
name="WLBlueDensityI"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
@@ -349,9 +350,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left="245"
name="HDText"
- top_delta="-2"
+ top_pad="-10"
width="355">
Haze Density
</text>
@@ -363,10 +364,10 @@
increment="0.01"
initial_value="0.7"
layout="topleft"
- left="259"
+ left="258"
max_val="4"
name="WLHazeDensity"
- top="107"
+ top_pad="27"
width="200" />
<text
type="string"
@@ -389,10 +390,10 @@
increment="0.01"
initial_value="0.1"
layout="topleft"
- left="494"
+ left_delta="13"
max_val="0.9"
name="WLDensityMult"
- top="40"
+ top_pad="27"
width="200" />
<text
type="string"
@@ -401,9 +402,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="-13"
name="WLDistanceMultText"
- top_delta="-3"
+ top_pad="-10"
width="355">
Distance Multiplier
</text>
@@ -414,11 +415,11 @@
height="10"
initial_value="1.0"
layout="topleft"
- left="494"
+ left_delta="13"
max_val="100"
name="WLDistanceMult"
- top="73"
- width="207" />
+ top_pad="27"
+ width="200" />
<text
type="string"
length="1"
@@ -426,9 +427,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="-13"
name="MaxAltText"
- top_delta="-2"
+ top_pad="-15"
width="355">
Max Altitude
</text>
@@ -440,17 +441,17 @@
increment="1"
initial_value="500"
layout="topleft"
- left="494"
+ left_delta="13"
max_val="4000"
name="WLMaxAltitude"
- top="107"
- width="205" />
+ top_pad="27"
+ width="200" />
</panel>
<panel
border="true"
follows="left|top|right|bottom"
- height="160"
- label="Lighting"
+ height="196"
+ label="LIGHTING"
layout="topleft"
left_delta="0"
help_topic="windlight_lighting_tab"
@@ -477,12 +478,24 @@
halign="center"
height="16"
layout="topleft"
- left="10"
+ left_delta="0"
name="BHText"
- top="21"
+ top_pad="5"
width="10">
R
</text>
+ <slider
+ control_name="WLSunlightR"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_pad="3"
+ top_pad="6"
+ name="WLSunlightR"
+ width="200" />
<text
type="string"
length="1"
@@ -490,50 +503,12 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
+ left_delta="-13"
name="BHText2"
- top_delta="11"
+ top_pad="-15"
width="10">
G
</text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText3"
- top_delta="11"
- width="10">
- B
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText4"
- top_delta="11"
- width="10">
- I
- </text>
- <slider
- control_name="WLSunlightR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="24"
- name="WLSunlightR"
- top="40"
- width="200" />
<slider
control_name="WLSunlightG"
decimal_digits="2"
@@ -544,8 +519,22 @@
layout="topleft"
left_delta="0"
name="WLSunlightG"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="BHText3"
+ top_pad="-15"
+ width="10">
+ B
+ </text>
<slider
control_name="WLSunlightB"
decimal_digits="2"
@@ -556,8 +545,22 @@
layout="topleft"
left_delta="0"
name="WLSunlightB"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="BHText4"
+ top_pad="-15"
+ width="10">
+ I
+ </text>
<slider
control_name="WLSunlightI"
decimal_digits="2"
@@ -568,7 +571,8 @@
layout="topleft"
left_delta="0"
name="WLSunlightI"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
@@ -577,9 +581,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="-13"
name="TODText"
- top_delta="-2"
+ top_pad="-10"
width="355">
Sun/Moon Position
</text>
@@ -587,9 +591,9 @@
height="20"
image_name="icon_diurnal.tga"
layout="topleft"
- left="30"
+ left_delta="14"
+ top_pad="10"
name="SkyDayCycle"
- top="97"
width="148" />
<slider
control_name="WLSunAngle"
@@ -598,10 +602,10 @@
increment="0.001"
initial_value="0.7"
layout="topleft"
- left="24"
+ left_delta="-8"
name="WLSunAngle"
- top="137"
- width="204" />
+ top_pad="20"
+ width="207" />
<text
type="string"
length="1"
@@ -622,12 +626,24 @@
halign="center"
height="16"
layout="topleft"
- left="245"
+ left_delta="0"
name="BHText5"
- top="21"
+ top_pad="5"
width="10">
R
</text>
+ <slider
+ control_name="WLAmbientR"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_pad="3"
+ top_pad="6"
+ name="WLAmbientR"
+ width="200" />
<text
type="string"
length="1"
@@ -635,50 +651,12 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
+ left_delta="-13"
name="BHText6"
- top_delta="11"
+ top_pad="-15"
width="10">
G
</text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText7"
- top_delta="11"
- width="10">
- B
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText8"
- top_delta="11"
- width="10">
- I
- </text>
- <slider
- control_name="WLAmbientR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="259"
- name="WLAmbientR"
- top="40"
- width="200" />
<slider
control_name="WLAmbientG"
decimal_digits="2"
@@ -689,8 +667,22 @@
layout="topleft"
left_delta="0"
name="WLAmbientG"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="BHText7"
+ top_pad="-15"
+ width="10">
+ B
+ </text>
<slider
control_name="WLAmbientB"
decimal_digits="2"
@@ -701,8 +693,22 @@
layout="topleft"
left_delta="0"
name="WLAmbientB"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="BHText8"
+ top_pad="-15"
+ width="10">
+ I
+ </text>
<slider
control_name="WLAmbientI"
decimal_digits="2"
@@ -713,7 +719,8 @@
layout="topleft"
left_delta="0"
name="WLAmbientI"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
@@ -722,9 +729,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="-13"
name="WLEastAngleText"
- top_delta="-2"
+ top_pad="-10"
width="355">
East Angle
</text>
@@ -736,9 +743,9 @@
increment="0.01"
initial_value="0.0"
layout="topleft"
- left="259"
+ left_delta="13"
name="WLEastAngle"
- top="107"
+ top_pad="27"
width="200" />
<text
type="string"
@@ -762,10 +769,10 @@
initial_value="0.1"
label="Focus "
layout="topleft"
- left="494"
+ left_delta="0"
max_val="0.5"
name="WLGlowB"
- top="40"
+ top_pad="27"
width="200" />
<slider
control_name="WLGlowR"
@@ -780,7 +787,7 @@
max_val="1.99"
min_val="1"
name="WLGlowR"
- top_pad="1"
+ top_pad="6"
width="200" />
<text
type="string"
@@ -789,9 +796,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="0"
name="SceneGammaText"
- top_delta="0"
+ top_pad="-10"
width="200">
Scene Gamma
</text>
@@ -803,11 +810,11 @@
increment="0.01"
initial_value="2.0"
layout="topleft"
- left="494"
+ left_delta="0"
max_val="10"
name="WLGamma"
- top="87"
- width="207" />
+ top_pad="27"
+ width="200" />
<text
type="string"
length="1"
@@ -815,9 +822,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="0"
name="WLStarText"
- top_delta="-1"
+ top_pad="-10"
width="355">
Star Brightness
</text>
@@ -829,17 +836,17 @@
increment="0.01"
initial_value="0"
layout="topleft"
- left="494"
+ left_delta="0"
max_val="2"
name="WLStarAlpha"
- top="122"
+ top_pad="27"
width="200" />
</panel>
<panel
border="true"
follows="left|top|right|bottom"
- height="160"
- label="Clouds"
+ height="196"
+ label="CLOUDS"
layout="topleft"
left_delta="0"
mouse_opaque="false"
@@ -867,12 +874,24 @@
halign="center"
height="16"
layout="topleft"
- left="10"
+ left_delta="0"
name="BHText"
- top="21"
+ top_pad="5"
width="10">
R
</text>
+ <slider
+ control_name="WLCloudColorR"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_pad="3"
+ top_pad="6"
+ name="WLCloudColorR"
+ width="200" />
<text
type="string"
length="1"
@@ -880,50 +899,12 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
+ left_delta="-13"
name="BHText2"
- top_delta="11"
+ top_pad="-15"
width="10">
G
</text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText3"
- top_delta="11"
- width="10">
- B
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText4"
- top_delta="11"
- width="10">
- I
- </text>
- <slider
- control_name="WLCloudColorR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="24"
- name="WLCloudColorR"
- top="40"
- width="200" />
<slider
control_name="WLCloudColorG"
decimal_digits="2"
@@ -934,8 +915,22 @@
layout="topleft"
left_delta="0"
name="WLCloudColorG"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="BHText3"
+ top_pad="-15"
+ width="10">
+ B
+ </text>
<slider
control_name="WLCloudColorB"
decimal_digits="2"
@@ -946,8 +941,22 @@
layout="topleft"
left_delta="0"
name="WLCloudColorB"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="BHText4"
+ top_pad="-15"
+ width="10">
+ I
+ </text>
<slider
control_name="WLCloudColorI"
decimal_digits="2"
@@ -958,7 +967,8 @@
layout="topleft"
left_delta="0"
name="WLCloudColorI"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
@@ -967,9 +977,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="-13"
name="WLCloudColorText2"
- top_delta="-2"
+ top_pad="-10"
width="355">
Cloud XY/Density
</text>
@@ -980,12 +990,24 @@
halign="center"
height="16"
layout="topleft"
- left="10"
+ left_delta="0"
name="BHText5"
- top="87"
+ top_pad="5"
width="10">
X
</text>
+ <slider
+ control_name="WLCloudX"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_pad="3"
+ top_pad="6"
+ name="WLCloudX"
+ width="200" />
<text
type="string"
length="1"
@@ -993,12 +1015,24 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
+ left_delta="-13"
name="BHText6"
- top_delta="11"
+ top_pad="-15"
width="10">
Y
</text>
+ <slider
+ control_name="WLCloudY"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_pad="3"
+ top_pad="6"
+ name="WLCloudY"
+ width="200" />
<text
type="string"
length="1"
@@ -1006,37 +1040,13 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
+ left_delta="-13"
name="BHText7"
- top_delta="11"
+ top_pad="-15"
width="10">
D
</text>
<slider
- control_name="WLCloudX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_pad="4"
- name="WLCloudX"
- top_delta="-2"
- width="200" />
- <slider
- control_name="WLCloudY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_delta="0"
- name="WLCloudY"
- top_pad="1"
- width="200" />
- <slider
control_name="WLCloudDensity"
decimal_digits="2"
follows="left"
@@ -1046,7 +1056,8 @@
layout="topleft"
left_delta="0"
name="WLCloudDensity"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
@@ -1069,9 +1080,9 @@
increment="0.01"
initial_value="0.5"
layout="topleft"
- left="259"
+ left_delta="13"
name="WLCloudCoverage"
- top="40"
+ top_pad="27"
width="200" />
<text
type="string"
@@ -1080,9 +1091,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="-13"
name="WLCloudScaleText"
- top_delta="-1"
+ top_pad="-10"
width="355">
Cloud Scale
</text>
@@ -1094,10 +1105,10 @@
increment="0.01"
initial_value="1.0"
layout="topleft"
- left="259"
+ left_delta="13"
min_val="0.01"
name="WLCloudScale"
- top="75"
+ top_pad="27"
width="200" />
<text
type="string"
@@ -1106,9 +1117,9 @@
font="SansSerif"
height="16"
layout="topleft"
- left_delta="-14"
+ left_delta="-13"
name="WLCloudDetailText"
- top_delta="-4"
+ top_pad="-10"
width="355">
Cloud Detail (XY/Density)
</text>
@@ -1119,12 +1130,24 @@
halign="center"
height="16"
layout="topleft"
- left="245"
+ left_delta="0"
name="BHText8"
- top="87"
+ top_pad="5"
width="10">
X
</text>
+ <slider
+ control_name="WLCloudDetailX"
+ decimal_digits="2"
+ follows="left"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_pad="3"
+ top_pad="6"
+ name="WLCloudDetailX"
+ width="200" />
<text
type="string"
length="1"
@@ -1132,37 +1155,12 @@
halign="center"
height="16"
layout="topleft"
- left_delta="0"
+ left_delta="-13"
name="BHText9"
- top_delta="11"
+ top_pad="-15"
width="10">
Y
</text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText10"
- top_delta="11"
- width="10">
- D
- </text>
- <slider
- control_name="WLCloudDetailX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_pad="4"
- name="WLCloudDetailX"
- top_delta="-2"
- width="200" />
<slider
control_name="WLCloudDetailY"
decimal_digits="2"
@@ -1173,8 +1171,22 @@
layout="topleft"
left_delta="0"
name="WLCloudDetailY"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ halign="center"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="BHText10"
+ top_pad="-15"
+ width="10">
+ D
+ </text>
<slider
control_name="WLCloudDetailDensity"
decimal_digits="2"
@@ -1185,7 +1197,8 @@
layout="topleft"
left_delta="0"
name="WLCloudDetailDensity"
- top_pad="1"
+ left_pad="3"
+ top_pad="6"
width="200" />
<text
type="string"
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 86ac7c8e54..291f8f6f51 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -53,7 +53,8 @@
follows="right|top"
height="126"
top_pad="0"
- width="238">
+ width="238"
+ name="layout_panel_2">
<button
follows="right|top"
height="22"
@@ -374,7 +375,8 @@
top_pad="0"
width="238"
background_visible="true"
- bg_alpha_color="DkGray2">
+ bg_alpha_color="DkGray2"
+ name="layout_panel_3">
<text
text_color="White"
font="SansSerifLarge"
@@ -396,7 +398,8 @@
follows="right|top|bottom"
height="310"
top_pad="0"
- width="238">
+ width="238"
+ name="layout_panel_4">
<icon
color="0.5 0 0 1"
follows="top|right"
@@ -638,7 +641,8 @@
top_pad="0"
width="238"
background_visible="true"
- bg_alpha_color="DkGray2">
+ bg_alpha_color="DkGray2"
+ name="layout_panel_5">
<text
text_color="White"
font="SansSerifLarge"
@@ -660,7 +664,8 @@
height="30"
min_height="30"
top_pad="0"
- width="238">
+ width="238"
+ name="layout_panel_6">
<icon
follows="left|bottom"
height="16"
@@ -670,7 +675,7 @@
mouse_opaque="true"
name="zoom_icon"
top_pad="7"
- width="16" />
+ width="16" ></icon>
<slider
follows="left|bottom"
height="16"
diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
index 00e00b9694..b8a7222e8e 100644
--- a/indra/newview/skins/default/xui/en/inspect_object.xml
+++ b/indra/newview/skins/default/xui/en/inspect_object.xml
@@ -26,6 +26,7 @@ owner [OWNER]
<string name="Touch">Touch</string>
<string name="Sit">Sit</string>
<text
+ allow_html="false"
follows="all"
font="SansSerifLarge"
height="16"
diff --git a/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml b/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml
new file mode 100644
index 0000000000..39fb54d513
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml
@@ -0,0 +1,9 @@
+<button
+ chrome="true"
+ image_selected="Info_Small"
+ image_unselected="Info_Small"
+ image_pressed="Info_Small"
+ height="12"
+ name="inspector_info_ctrl"
+ width="12" />
+ \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 7b6081d7be..b2e4a7ad95 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -143,12 +143,19 @@
<panel mouse_opaque="false"
follows="left|right|top"
name="status_bar_container"
- tab_stop="false"
+ tab_stop="false"
height="19"
left="0"
top="0"
width="1024"
visible="false"/>
+ <view mouse_opaque="false"
+ follows="all"
+ name="menu_bar_holder"
+ left="0"
+ top="0"
+ width="1024"
+ height="768"/>
<notify_box_view top="0"
follows="all"
height="768"
@@ -156,28 +163,46 @@
name="notify_container"
tab_group="-2"
width="1024"/>
- <menu_holder top="0"
- follows="all"
- height="768"
- mouse_opaque="false"
- name="Menu Holder"
- width="1024"/>
+ <panel top="0"
+ follows="all"
+ mouse_opaque="false"
+ left="0"
+ name="snapshot_floater_view_holder"
+ width="1024"
+ height="798">
+ <snapshot_floater_view enabled="false"
+ follows="all"
+ height="768"
+ left="0"
+ mouse_opaque="false"
+ name="Snapshot Floater View"
+ tab_stop="false"
+ top="0"
+ visible="false"
+ width="1024"/>
+ </panel>
+ <panel top="0"
+ follows="all"
+ height="768"
+ mouse_opaque="true"
+ name="progress_view"
+ filename="panel_progress.xml"
+ class="progress_view"
+ width="1024"
+ visible="false"/>
<panel top="0"
follows="all"
height="768"
mouse_opaque="false"
name="popup_holder"
+ class="popup_holder"
width="1024"/>
- <snapshot_floater_view enabled="false"
- follows="all"
- height="768"
- left="0"
- mouse_opaque="false"
- name="Snapshot Floater View"
- tab_stop="false"
- top="0"
- visible="false"
- width="1024"/>
+ <menu_holder top="0"
+ follows="all"
+ height="768"
+ mouse_opaque="false"
+ name="Menu Holder"
+ width="1024"/>
<tooltip_view top="0"
follows="all"
height="768"
diff --git a/indra/newview/skins/default/xui/en/menu_edit.xml b/indra/newview/skins/default/xui/en/menu_edit.xml
new file mode 100644
index 0000000000..68f3cb532c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_edit.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu create_jump_keys="true"
+ label="Edit"
+ name="Edit"
+ visible="false">
+ <menu_item_call
+ label="Undo"
+ name="Undo"
+ shortcut="control|Z">
+ <menu_item_call.on_click
+ function="Edit.Undo" />
+ <menu_item_call.on_enable
+ function="Edit.EnableUndo" />
+ </menu_item_call>
+ <menu_item_call
+ label="Redo"
+ name="Redo"
+ shortcut="control|Y">
+ <menu_item_call.on_click
+ function="Edit.Redo" />
+ <menu_item_call.on_enable
+ function="Edit.EnableRedo" />
+ </menu_item_call>
+ <menu_item_separator/>
+ <menu_item_call
+ label="Cut"
+ name="Cut"
+ shortcut="control|X">
+ <menu_item_call.on_click
+ function="Edit.Cut" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCut" />
+ </menu_item_call>
+ <menu_item_call
+ label="Copy"
+ name="Copy"
+ shortcut="control|C">
+ <menu_item_call.on_click
+ function="Edit.Copy" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCopy" />
+ </menu_item_call>
+ <menu_item_call
+ label="Paste"
+ name="Paste"
+ shortcut="control|V">
+ <menu_item_call.on_click
+ function="Edit.Paste" />
+ <menu_item_call.on_enable
+ function="Edit.EnablePaste" />
+ </menu_item_call>
+ <menu_item_call
+ label="Delete"
+ name="Delete"
+ shortcut="Del">
+ <menu_item_call.on_click
+ function="Edit.Delete" />
+ <menu_item_call.on_enable
+ function="Edit.EnableDelete" />
+ </menu_item_call>
+ <menu_item_call
+ label="Duplicate"
+ name="Duplicate"
+ shortcut="control|D">
+ <menu_item_call.on_click
+ function="Edit.Duplicate" />
+ <menu_item_call.on_enable
+ function="Edit.EnableDuplicate" />
+ </menu_item_call>
+ <menu_item_separator/>
+ <menu_item_call
+ label="Select All"
+ name="Select All"
+ shortcut="control|A">
+ <menu_item_call.on_click
+ function="Edit.SelectAll" />
+ <menu_item_call.on_enable
+ function="Edit.EnableSelectAll" />
+ </menu_item_call>
+ <menu_item_call
+ label="Deselect"
+ name="Deselect"
+ shortcut="control|E">
+ <menu_item_call.on_click
+ function="Edit.Deselect" />
+ <menu_item_call.on_enable
+ function="Edit.EnableDeselect" />
+ </menu_item_call>
+</menu> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/menu_group_plus.xml b/indra/newview/skins/default/xui/en/menu_group_plus.xml
index e83d07baec..fce7414d80 100644
--- a/indra/newview/skins/default/xui/en/menu_group_plus.xml
+++ b/indra/newview/skins/default/xui/en/menu_group_plus.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<menu name="menu_group_plus"
left="0" bottom="0" visible="false"
- mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false">
+ mouse_opaque="false">
<menu_item_call name="item_join" label="Join Group...">
<menu_item_call.on_click function="People.Group.Plus.Action" userdata="join_group" />
</menu_item_call>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index 1b002b1c32..a5ac5f76e1 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -40,6 +40,8 @@
name="teleport">
<menu_item_call.on_click
function="InspectAvatar.Teleport"/>
+ <menu_item_call.on_enable
+ function="InspectAvatar.Gear.EnableTeleportOffer"/>
</menu_item_call>
<menu_item_call
label="Invite to Group"
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index ba74104594..4655fa8c46 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -29,14 +29,6 @@
function="File.Quit" />
</menu_item_call>
</menu>
-<!-- Edit menu merged into the Me menu above
- <menu
- create_jump_keys="true"
- label="Edit"
- name="Edit"
- width="153">
- </menu>
--->
<menu
create_jump_keys="true"
label="Help"
@@ -59,105 +51,24 @@
parameter="sl_about" />
</menu_item_call>
</menu>
+ <menu_item_check
+ label="Show Debug Menu"
+ name="Show Debug Menu"
+ visible="false"
+ shortcut="control|alt|D">
+ <on_check
+ function="CheckControl"
+ parameter="UseDebugMenus" />
+ <on_click
+ function="ToggleControl"
+ parameter="UseDebugMenus" />
+ </menu_item_check>
<menu
visible="false"
create_jump_keys="true"
label="Debug"
name="Debug"
tear_off="true">
- <!-- Need a copy of the edit menu here so keyboard shortcuts like
- control-C work to copy text at login screen and About dialog (for QA)
- -->
- <menu
- create_jump_keys="true"
- label="Edit"
- name="Edit"
- tear_off="true">
- <menu_item_call
- label="Undo"
- name="Undo"
- shortcut="control|Z">
- <menu_item_call.on_click
- function="Edit.Undo" />
- <menu_item_call.on_enable
- function="Edit.EnableUndo" />
- </menu_item_call>
- <menu_item_call
- label="Redo"
- name="Redo"
- shortcut="control|Y">
- <menu_item_call.on_click
- function="Edit.Redo" />
- <menu_item_call.on_enable
- function="Edit.EnableRedo" />
- </menu_item_call>
- <menu_item_separator />
- <menu_item_call
- label="Cut"
- name="Cut"
- shortcut="control|X">
- <menu_item_call.on_click
- function="Edit.Cut" />
- <menu_item_call.on_enable
- function="Edit.EnableCut" />
- </menu_item_call>
- <menu_item_call
- label="Copy"
- name="Copy"
- shortcut="control|C">
- <menu_item_call.on_click
- function="Edit.Copy" />
- <menu_item_call.on_enable
- function="Edit.EnableCopy" />
- </menu_item_call>
- <menu_item_call
- label="Paste"
- name="Paste"
- shortcut="control|V">
- <menu_item_call.on_click
- function="Edit.Paste" />
- <menu_item_call.on_enable
- function="Edit.EnablePaste" />
- </menu_item_call>
- <menu_item_call
- label="Delete"
- name="Delete"
- shortcut="Del">
- <menu_item_call.on_click
- function="Edit.Delete" />
- <menu_item_call.on_enable
- function="Edit.EnableDelete" />
- </menu_item_call>
- <menu_item_call
- label="Duplicate"
- name="Duplicate"
- shortcut="control|D">
- <menu_item_call.on_click
- function="Edit.Duplicate" />
- <menu_item_call.on_enable
- function="Edit.EnableDuplicate" />
- </menu_item_call>
- <menu_item_separator />
- <menu_item_call
- label="Select All"
- name="Select All"
- shortcut="control|A">
- <menu_item_call.on_click
- function="Edit.SelectAll" />
- <menu_item_call.on_enable
- function="Edit.EnableSelectAll" />
- </menu_item_call>
- <menu_item_call
- label="Deselect"
- name="Deselect"
- shortcut="control|E">
- <menu_item_call.on_click
- function="Edit.Deselect" />
- <menu_item_call.on_enable
- function="Edit.EnableDeselect" />
- </menu_item_call>
- </menu>
- <menu_item_separator />
<menu_item_call
label="Show Debug Settings"
name="Debug Settings">
@@ -270,5 +181,27 @@
function="Advanced.WebBrowserTest"
parameter="http://join.secondlife.com/"/>
</menu_item_call>
+ <menu_item_separator/>
+ <menu_item_check
+ label="Show Grid Picker"
+ name="Show Grid Picker"
+ visible="false"
+ shortcut="control|shift|G">
+ <on_check
+ function="CheckControl"
+ parameter="ForceShowGrid" />
+ <on_click
+ function="ToggleControl"
+ parameter="ForceShowGrid" />
+ </menu_item_check>
+ <menu_item_call
+ label="Show Notifications Console"
+ name="Show Notifications Console"
+ visible="false"
+ shortcut="control|shift|5">
+ <on_click
+ function="Floater.Toggle"
+ parameter="notifications_console" />
+ </menu_item_call>
</menu>
</menu_bar>
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
index d66818e91a..2c97112e38 100644
--- a/indra/newview/skins/default/xui/en/menu_object.xml
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -44,11 +44,24 @@
name="Object Sit">
<menu_item_call.on_click
function="Object.SitOrStand" />
+ <menu_item_call.on_visible
+ function="Object.SitVisible" />
<menu_item_call.on_enable
function="Object.EnableSitOrStand"
- name="EnableSitOrStand"
- parameter="Sit Here,Stand Up" />
- </menu_item_call>
+ name="EnableSitOrStand" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Stand Up"
+ name="Object Stand Up">
+ <menu_item_call.on_click
+ function="Object.SitOrStand" />
+ <menu_item_call.on_visible
+ function="Object.StandUpVisible" />
+ <menu_item_call.on_enable
+ function="Object.EnableSitOrStand"
+ name="EnableSitOrStand" />
+ </menu_item_call>
<menu_item_call
label="Object Profile"
name="Object Inspect">
@@ -124,16 +137,28 @@
</menu_item_call>
</context_menu>
<menu_item_separator layout="topleft" />
- <menu_item_call
- enabled="false"
+ <menu_item_call
+ label="Buy"
+ layout="topleft"
+ name="Pie Object Bye">
+ <menu_item_call.on_click
+ function="Tools.BuyOrTake"/>
+ <menu_item_call.on_visible
+ function="Tools.VisibleBuyObject"/>
+ <menu_item_call.on_enable
+ function="Tools.EnableBuyOrTake"/>
+ </menu_item_call>
+ <menu_item_call
label="Take"
+ layout="topleft"
name="Pie Object Take">
- <menu_item_call.on_click
- function="Tools.BuyOrTake" />
- <menu_item_call.on_enable
- function="Tools.EnableBuyOrTake"
- parameter="Buy,Take" />
- </menu_item_call>
+ <menu_item_call.on_click
+ function="Tools.BuyOrTake"/>
+ <menu_item_call.on_visible
+ function="Tools.VisibleTakeObject"/>
+ <menu_item_call.on_enable
+ function="Tools.EnableBuyOrTake"/>
+ </menu_item_call>
<menu_item_call
enabled="false"
label="Take Copy"
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
index f1117d1419..92752a0fee 100644
--- a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<menu name="menu_group_plus"
left="0" bottom="0" visible="false"
- mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false">
+ mouse_opaque="false">
<menu_item_check
label="Sort by Name"
name="sort_name">
diff --git a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
index df3cb26b04..2efb204ffb 100644
--- a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<menu name="menu_group_plus"
left="0" bottom="0" visible="false"
- mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false">
+ mouse_opaque="false">
<menu_item_check
label="Display Group Icons"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
index 9d2ccba4da..d2e35e4cc0 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
@@ -47,6 +47,16 @@
parameter="can_call" />
</menu_item_call>
<menu_item_call
+ label="Map"
+ layout="topleft"
+ name="Map">
+ <menu_item_call.on_click
+ function="Avatar.ShowOnMap" />
+ <menu_item_call.on_enable
+ function="Avatar.EnableItem"
+ parameter="can_show_on_map" />
+ </menu_item_call>
+ <menu_item_call
label="Share"
layout="topleft"
name="Share">
@@ -78,5 +88,8 @@
name="teleport">
<menu_item_call.on_click
function="Avatar.OfferTeleport"/>
+ <menu_item_call.on_enable
+ function="Avatar.EnableItem"
+ parameter="can_offer_teleport"/>
</menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
index 39f9e48609..69b3831738 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<menu name="menu_group_plus"
left="0" bottom="0" visible="false"
- mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false">
+ mouse_opaque="false">
<menu_item_check
label="Sort by Recent Speakers"
name="sort_by_recent_speakers">
diff --git a/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml
index cfd6dc78b6..5c9555db92 100644
--- a/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<menu name="menu_group_plus"
left="0" bottom="0" visible="false"
- mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false">
+ mouse_opaque="false">
<menu_item_check
label="Sort by Most Recent"
name="sort_most">
diff --git a/indra/newview/skins/default/xui/en/menu_picks.xml b/indra/newview/skins/default/xui/en/menu_picks.xml
index 7e07a97016..ebb49c9004 100644
--- a/indra/newview/skins/default/xui/en/menu_picks.xml
+++ b/indra/newview/skins/default/xui/en/menu_picks.xml
@@ -8,6 +8,9 @@
name="pick_info">
<menu_item_call.on_click
function="Pick.Info" />
+ <menu_item_call.on_enable
+ function="Pick.Enable"
+ parameter="info" />
</menu_item_call>
<menu_item_call
label="Edit"
@@ -16,6 +19,9 @@
visible="false">
<menu_item_call.on_click
function="Pick.Edit" />
+ <menu_item_call.on_enable
+ function="Pick.Enable"
+ parameter="edit" />
</menu_item_call>
<menu_item_call
label="Teleport"
@@ -23,6 +29,9 @@
name="pick_teleport">
<menu_item_call.on_click
function="Pick.Teleport" />
+ <menu_item_call.on_enable
+ function="Pick.Enable"
+ parameter="teleport" />
</menu_item_call>
<menu_item_call
label="Map"
@@ -30,6 +39,9 @@
name="pick_map">
<menu_item_call.on_click
function="Pick.Map" />
+ <menu_item_call.on_enable
+ function="Pick.Enable"
+ parameter="map" />
</menu_item_call>
<menu_item_separator
layout="topleft"
@@ -42,5 +54,8 @@
visible="false">
<menu_item_call.on_click
function="Pick.Delete" />
+ <menu_item_call.on_enable
+ function="Pick.Enable"
+ parameter="delete" />
</menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
index 9b3948b29b..3e38503e43 100644
--- a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
@@ -45,6 +45,9 @@
<on_click
function="Places.LandmarksGear.CopyPaste.Action"
parameter="copy" />
+ <on_enable
+ function="Places.LandmarksGear.Enable"
+ parameter="copy" />
</menu_item_call>
<menu_item_call
label="Paste"
@@ -88,6 +91,9 @@
<on_click
function="Places.LandmarksGear.Folding.Action"
parameter="expand" />
+ <on_enable
+ function="Places.LandmarksGear.Enable"
+ parameter="expand" />
</menu_item_call>
<menu_item_call
label="Collapse"
@@ -96,6 +102,9 @@
<on_click
function="Places.LandmarksGear.Folding.Action"
parameter="collapse" />
+ <on_enable
+ function="Places.LandmarksGear.Enable"
+ parameter="collapse" />
</menu_item_call>
<menu_item_call
label="Expand all folders"
diff --git a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml
index 5162a4902f..b0b7b554b0 100644
--- a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml
@@ -6,6 +6,15 @@
name="profile_overflow_menu"
width="120">
<menu_item_call
+ label="Map"
+ layout="topleft"
+ name="show_on_map">
+ <menu_item_call.on_click
+ function="Profile.ShowOnMap" />
+ <menu_item_call.on_enable
+ function="Profile.EnableShowOnMap" />
+ </menu_item_call>
+ <menu_item_call
label="Pay"
layout="topleft"
name="pay">
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 4c4867b862..3af80f63fe 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2,16 +2,13 @@
<menu_bar
bg_visible="false"
follows="left|top|right"
- layout="topleft"
name="Main Menu">
<menu
label="Me"
- layout="topleft"
name="Me"
tear_off="true">
<menu_item_call
label="Preferences"
- layout="topleft"
name="Preferences"
shortcut="control|P">
<menu_item_call.on_click
@@ -20,7 +17,6 @@
</menu_item_call>
<menu_item_call
label="My Dashboard"
- layout="topleft"
name="Manage My Account">
<menu_item_call.on_click
function="PromptShowURL"
@@ -29,16 +25,13 @@
</menu_item_call>
<menu_item_call
label="Buy L$"
- layout="topleft"
name="Buy and Sell L$">
<menu_item_call.on_click
function="BuyCurrency" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="My Profile"
- layout="topleft"
name="Profile">
<menu_item_call.on_click
function="ShowAgentProfile"
@@ -46,7 +39,6 @@
</menu_item_call>
<menu_item_call
label="My Appearance"
- layout="topleft"
name="Appearance">
<menu_item_call.on_click
function="CustomizeAvatar" />
@@ -56,7 +48,6 @@
<menu_item_check
label="My Inventory"
name="Inventory"
- layout="topleft"
shortcut="control|shift|I"
visible="false">
<menu_item_check.on_check
@@ -69,7 +60,6 @@
<menu_item_check
label="My Inventory"
name="ShowSidetrayInventory"
- layout="topleft"
shortcut="control|I"
visible="true">
<menu_item_check.on_check
@@ -81,7 +71,6 @@
</menu_item_check>
<menu_item_check
label="My Gestures"
- layout="topleft"
name="Gestures"
shortcut="control|G">
<menu_item_check.on_check
@@ -93,21 +82,17 @@
</menu_item_check>
<menu
label="My Status"
- layout="topleft"
name="Status"
tear_off="true">
<menu_item_call
label="Away"
- layout="topleft"
name="Set Away">
<menu_item_call.on_click
function="World.SetAway" />
</menu_item_call>
- <menu_item_separator
- layout="topleft"/>
+ <menu_item_separator/>
<menu_item_call
label="Busy"
- layout="topleft"
name="Set Busy">
<menu_item_call.on_click
function="World.SetBusy"/>
@@ -115,7 +100,6 @@
</menu>
<menu_item_call
label="Request Admin Status"
- layout="topleft"
name="Request Admin Options"
shortcut="control|alt|G"
visible="false">
@@ -124,18 +108,15 @@
</menu_item_call>
<menu_item_call
label="Leave Admin Status"
- layout="topleft"
name="Leave Admin Options"
shortcut="control|alt|shift|G"
visible="false">
<menu_item_call.on_click
function="Advanced.LeaveAdminStatus" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Quit [APP_NAME]"
- layout="topleft"
name="Quit"
shortcut="control|Q">
<menu_item_call.on_click
@@ -144,12 +125,10 @@
</menu>
<menu
label="Communicate"
- layout="topleft"
name="Communicate"
tear_off="true">
<menu_item_call
label="My Friends"
- layout="topleft"
name="My Friends"
shortcut="control|shift|F">
<menu_item_call.on_click
@@ -158,26 +137,24 @@
</menu_item_call>
<menu_item_call
label="My Groups"
- layout="topleft"
- name="My Groups">
+ name="My Groups"
+ shortcut="control|shift|G">
<menu_item_call.on_click
function="SideTray.PanelPeopleTab"
parameter="groups_panel" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<!--menu_item_call
label="Chat"
- layout="topleft"
name="Chat">
<menu_item_call.on_click
function="World.Chat" />
</menu_item_call-->
<menu_item_check
label="Nearby Chat"
- layout="topleft"
name="Nearby Chat"
- shortcut="control|H">
+ shortcut="control|H"
+ use_mac_ctrl="true">
<menu_item_check.on_check
function="Floater.Visible"
parameter="nearby_chat" />
@@ -187,7 +164,6 @@
</menu_item_check>
<menu_item_call
label="Nearby People"
- layout="topleft"
name="Active Speakers"
shortcut="control|shift|A">
<menu_item_call.on_click
@@ -197,12 +173,10 @@
</menu>
<menu
label="World"
- layout="topleft"
name="World"
tear_off="true">
<menu_item_check
label="Mini-Map"
- layout="topleft"
name="Mini-Map"
shortcut="control|shift|M">
<menu_item_check.on_check
@@ -214,7 +188,6 @@
</menu_item_check>
<menu_item_check
label="World Map"
- layout="topleft"
name="World Map"
shortcut="control|M"
use_mac_ctrl="true">
@@ -227,7 +200,6 @@
</menu_item_check>
<menu_item_call
label="Snapshot"
- layout="topleft"
name="Take Snapshot"
shortcut="control|shift|S">
<menu_item_call.on_click
@@ -236,7 +208,6 @@
</menu_item_call>
<menu_item_call
label="Landmark This Place"
- layout="topleft"
name="Create Landmark Here">
<menu_item_call.on_click
function="World.CreateLandmark" />
@@ -246,12 +217,17 @@
<menu
create_jump_keys="true"
label="Place Profile"
- layout="topleft"
name="Land"
tear_off="true">
<menu_item_call
- label="About Land"
+ label="Place Profile"
layout="topleft"
+ name="Place Profile">
+ <menu_item_call.on_click
+ function="World.PlaceProfile" />
+ </menu_item_call>
+ <menu_item_call
+ label="About Land"
name="About Land">
<menu_item_call.on_click
function="Floater.Show"
@@ -259,18 +235,15 @@
</menu_item_call>
<menu_item_call
label="Region/Estate"
- layout="topleft"
name="Region/Estate">
<menu_item_call.on_click
function="Floater.Show"
parameter="region_info" />
</menu_item_call>
</menu>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Buy This Land"
- layout="topleft"
name="Buy Land">
<menu_item_call.on_click
function="Land.Buy" />
@@ -279,7 +252,6 @@
</menu_item_call>
<menu_item_call
label="My Land"
- layout="topleft"
name="My Land">
<menu_item_call.on_click
function="Floater.Show"
@@ -288,12 +260,10 @@
<menu
create_jump_keys="true"
label="Show"
- layout="topleft"
name="LandShow"
tear_off="true">
<menu_item_check
label="Move Controls"
- layout="topleft"
name="Movement Controls">
<menu_item_check.on_check
function="Floater.Visible"
@@ -303,7 +273,6 @@
</menu_item_check>
<menu_item_check
label="View Controls"
- layout="topleft"
name="Camera Controls">
<menu_item_check.on_check
function="Floater.Visible"
@@ -313,7 +282,6 @@
</menu_item_check>
<menu_item_check
label="Ban Lines"
- layout="topleft"
name="Ban Lines">
<menu_item_check.on_check
control="ShowBanLines" />
@@ -323,7 +291,6 @@
</menu_item_check>
<menu_item_check
label="Beacons"
- layout="topleft"
name="beacons"
shortcut="control|alt|shift|N">
<menu_item_check.on_check
@@ -335,7 +302,6 @@
</menu_item_check>
<menu_item_check
label="Property Lines"
- layout="topleft"
name="Property Lines"
shortcut="control|alt|shift|P">
<menu_item_check.on_check
@@ -346,7 +312,6 @@
</menu_item_check>
<menu_item_check
label="Land Owners"
- layout="topleft"
name="Land Owners">
<menu_item_check.on_check
control="ShowParcelOwners" />
@@ -373,11 +338,9 @@
control="NavBarShowParcelProperties" />
</menu_item_check>
</menu>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Teleport Home"
- layout="topleft"
name="Teleport Home"
shortcut="control|shift|H">
<menu_item_call.on_click
@@ -387,7 +350,6 @@
</menu_item_call>
<menu_item_call
label="Set Home to Here"
- layout="topleft"
name="Set Home to Here">
<menu_item_call.on_click
function="World.SetHomeLocation" />
@@ -396,7 +358,6 @@
</menu_item_call>
<!-- <menu_item_check
label="Show Navigation Bar"
- layout="topleft"
name="ShowNavbarNavigationPanel">
<menu_item_check.on_click
function="ToggleControl"
@@ -407,7 +368,6 @@
</menu_item_check>
<menu_item_check
label="Show Favorites Bar"
- layout="topleft"
name="ShowNavbarFavoritesPanel">
<menu_item_check.on_click
function="ToggleControl"
@@ -416,19 +376,15 @@
function="CheckControl"
parameter="ShowNavbarFavoritesPanel" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />-->
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>-->
+ <menu_item_separator/>
<menu
create_jump_keys="true"
label="Sun"
- layout="topleft"
name="Environment Settings"
tear_off="true">
<menu_item_call
label="Sunrise"
- layout="topleft"
name="Sunrise">
<menu_item_call.on_click
function="World.EnvSettings"
@@ -436,7 +392,6 @@
</menu_item_call>
<menu_item_call
label="Midday"
- layout="topleft"
name="Noon"
shortcut="control|shift|Y">
<menu_item_call.on_click
@@ -445,7 +400,6 @@
</menu_item_call>
<menu_item_call
label="Sunset"
- layout="topleft"
name="Sunset"
shortcut="control|shift|N">
<menu_item_call.on_click
@@ -454,7 +408,6 @@
</menu_item_call>
<menu_item_call
label="Midnight"
- layout="topleft"
name="Midnight">
<menu_item_call.on_click
function="World.EnvSettings"
@@ -462,17 +415,14 @@
</menu_item_call>
<menu_item_call
label="Estate Time"
- layout="topleft"
name="Revert to Region Default">
<menu_item_call.on_click
function="World.EnvSettings"
parameter="default" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Environment Editor"
- layout="topleft"
name="Environment Editor">
<menu_item_call.on_click
function="World.EnvSettings"
@@ -483,13 +433,11 @@
<menu
create_jump_keys="true"
label="Build"
- layout="topleft"
name="BuildTools"
tear_off="true"
visible="true">
<menu_item_check
label="Build"
- layout="topleft"
name="Show Build Tools"
shortcut="control|B">
<menu_item_check.on_check
@@ -502,12 +450,10 @@
<menu
create_jump_keys="true"
label="Select Build Tool"
- layout="topleft"
name="Select Tool"
tear_off="true">
<menu_item_call
label="Focus Tool"
- layout="topleft"
name="Focus"
shortcut="control|1">
<menu_item_call.on_click
@@ -516,7 +462,6 @@
</menu_item_call>
<menu_item_call
label="Move Tool"
- layout="topleft"
name="Move"
shortcut="control|2">
<menu_item_call.on_click
@@ -525,7 +470,6 @@
</menu_item_call>
<menu_item_call
label="Edit Tool"
- layout="topleft"
name="Edit"
shortcut="control|3">
<menu_item_call.on_click
@@ -534,7 +478,6 @@
</menu_item_call>
<menu_item_call
label="Create Tool"
- layout="topleft"
name="Create"
shortcut="control|4">
<menu_item_call.on_click
@@ -543,7 +486,6 @@
</menu_item_call>
<menu_item_call
label="Land Tool"
- layout="topleft"
name="Land"
shortcut="control|5">
<menu_item_call.on_click
@@ -551,112 +493,8 @@
parameter="land" />
</menu_item_call>
</menu>
- <menu
- create_jump_keys="true"
- label="Edit"
- layout="topleft"
- name="Edit"
- tear_off="true">
- <menu_item_call
- label="Undo"
- layout="topleft"
- name="Undo"
- shortcut="control|Z">
- <menu_item_call.on_click
- function="Edit.Undo" />
- <menu_item_call.on_enable
- function="Edit.EnableUndo" />
- </menu_item_call>
- <menu_item_call
- label="Redo"
- layout="topleft"
- name="Redo"
- shortcut="control|Y">
- <menu_item_call.on_click
- function="Edit.Redo" />
- <menu_item_call.on_enable
- function="Edit.EnableRedo" />
- </menu_item_call>
- <menu_item_separator
- layout="topleft" />
- <menu_item_call
- label="Cut"
- layout="topleft"
- name="Cut"
- shortcut="control|X">
- <menu_item_call.on_click
- function="Edit.Cut" />
- <menu_item_call.on_enable
- function="Edit.EnableCut" />
- </menu_item_call>
- <menu_item_call
- label="Copy"
- layout="topleft"
- name="Copy"
- shortcut="control|C">
- <menu_item_call.on_click
- function="Edit.Copy" />
- <menu_item_call.on_enable
- function="Edit.EnableCopy" />
- </menu_item_call>
- <menu_item_call
- label="Paste"
- layout="topleft"
- name="Paste"
- shortcut="control|V">
- <menu_item_call.on_click
- function="Edit.Paste" />
- <menu_item_call.on_enable
- function="Edit.EnablePaste" />
- </menu_item_call>
- <menu_item_call
- label="Delete"
- layout="topleft"
- name="Delete"
- shortcut="Del">
- <menu_item_call.on_click
- function="Edit.Delete" />
- <menu_item_call.on_enable
- function="Edit.EnableDelete" />
- </menu_item_call>
- <menu_item_call
- label="Duplicate"
- layout="topleft"
- name="Duplicate"
- shortcut="control|D">
- <menu_item_call.on_click
- function="Edit.Duplicate" />
- <menu_item_call.on_enable
- function="Edit.EnableDuplicate" />
- </menu_item_call>
- <menu_item_separator
- layout="topleft" />
- <menu_item_call
- label="Select All"
- layout="topleft"
- name="Select All"
- shortcut="control|A">
- <menu_item_call.on_click
- function="Edit.SelectAll" />
- <menu_item_call.on_enable
- function="Edit.EnableSelectAll" />
- </menu_item_call>
- <menu_item_call
- label="Deselect"
- layout="topleft"
- name="Deselect"
- shortcut="control|E">
- <menu_item_call.on_click
- function="Edit.Deselect" />
- <menu_item_call.on_enable
- function="Edit.EnableDeselect" />
- </menu_item_call>
- </menu>
- <menu_item_separator
- layout="topleft" />
<menu_item_call
label="Link"
- layout="topleft"
name="Link"
shortcut="control|L">
<menu_item_call.on_click
@@ -666,7 +504,6 @@
</menu_item_call>
<menu_item_call
label="Unlink"
- layout="topleft"
name="Unlink"
shortcut="control|shift|L">
<menu_item_call.on_click
@@ -676,7 +513,6 @@
</menu_item_call>
<menu_item_check
label="Edit Linked Parts"
- layout="topleft"
name="Edit Linked Parts">
<menu_item_check.on_check
control="EditLinkedParts" />
@@ -686,11 +522,9 @@
<menu_item_check.on_enable
function="Tools.EnableToolNotPie" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Focus on Selection"
- layout="topleft"
name="Focus on Selection"
shortcut="H">
<menu_item_call.on_click
@@ -701,7 +535,6 @@
</menu_item_call>
<menu_item_call
label="Zoom to Selection"
- layout="topleft"
name="Zoom to Selection"
shortcut="shift|H">
<menu_item_call.on_click
@@ -710,29 +543,34 @@
<menu_item_call.on_enable
function="Tools.SomethingSelectedNoHUD" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu
create_jump_keys="true"
label="Object"
- layout="topleft"
name="Object"
tear_off="true">
<menu_item_call
- label="Buy"
- layout="topleft"
- name="Menu Object Take"
- visible="true">
- <menu_item_call.on_click
- function="Tools.BuyOrTake" />
- <menu_item_call.on_enable
- function="Tools.EnableBuyOrTake"
- name="EnableBuyOrTake"
- parameter="Buy,Take" />
+ label="Buy"
+ name="Menu Object Buy">
+ <menu_item_call.on_click
+ function="Tools.BuyOrTake"/>
+ <menu_item_call.on_visible
+ function="Tools.VisibleBuyObject"/>
+ <menu_item_call.on_enable
+ function="Tools.EnableBuyOrTake"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Take"
+ name="Menu Object Take">
+ <menu_item_call.on_click
+ function="Tools.BuyOrTake"/>
+ <menu_item_call.on_visible
+ function="Tools.VisibleTakeObject"/>
+ <menu_item_call.on_enable
+ function="Tools.EnableBuyOrTake"/>
</menu_item_call>
<menu_item_call
label="Take Copy"
- layout="topleft"
name="Take Copy">
<menu_item_call.on_click
function="Tools.TakeCopy" />
@@ -741,7 +579,6 @@
</menu_item_call>
<menu_item_call
label="Save Back to My Inventory"
- layout="topleft"
name="Save Object Back to My Inventory">
<menu_item_call.on_click
function="Tools.SaveToInventory" />
@@ -750,7 +587,6 @@
</menu_item_call>
<menu_item_call
label="Save Back to Object Contents"
- layout="topleft"
name="Save Object Back to Object Contents">
<menu_item_call.on_click
function="Tools.SaveToObjectInventory" />
@@ -761,12 +597,10 @@
<menu
create_jump_keys="true"
label="Scripts"
- layout="topleft"
name="Scripts"
tear_off="true">
<menu_item_call
label="Recompile Scripts (Mono)"
- layout="topleft"
name="Mono">
<menu_item_call.on_click
function="Tools.SelectedScriptAction"
@@ -776,7 +610,6 @@
</menu_item_call>
<menu_item_call
label="Recompile Scripts (LSL)"
- layout="topleft"
name="LSL">
<menu_item_call.on_click
function="Tools.SelectedScriptAction"
@@ -786,7 +619,6 @@
</menu_item_call>
<menu_item_call
label="Reset Scripts"
- layout="topleft"
name="Reset Scripts">
<menu_item_call.on_click
function="Tools.SelectedScriptAction"
@@ -796,7 +628,6 @@
</menu_item_call>
<menu_item_call
label="Set Scripts to Running"
- layout="topleft"
name="Set Scripts to Running">
<menu_item_call.on_click
function="Tools.SelectedScriptAction"
@@ -806,7 +637,6 @@
</menu_item_call>
<menu_item_call
label="Set Scripts to Not Running"
- layout="topleft"
name="Set Scripts to Not Running">
<menu_item_call.on_click
function="Tools.SelectedScriptAction"
@@ -815,17 +645,14 @@
function="EditableSelected" />
</menu_item_call>
</menu>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu
create_jump_keys="true"
label="Options"
- layout="topleft"
name="Options"
tear_off="true">
<menu_item_call
label="Set Default Upload Permissions"
- layout="topleft"
name="perm prefs">
<menu_item_call.on_click
function="Floater.Toggle"
@@ -833,7 +660,6 @@
</menu_item_call>
<menu_item_check
label="Show Advanced Permissions"
- layout="topleft"
name="DebugPermissions">
<menu_item_check.on_check
function="CheckControl"
@@ -842,11 +668,9 @@
function="ToggleControl"
parameter="DebugPermissions" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="Select Only My Objects"
- layout="topleft"
name="Select Only My Objects">
<menu_item_check.on_check
control="SelectOwnedOnly" />
@@ -856,7 +680,6 @@
</menu_item_check>
<menu_item_check
label="Select Only Movable Objects"
- layout="topleft"
name="Select Only Movable Objects">
<menu_item_check.on_check
control="SelectMovableOnly" />
@@ -866,18 +689,15 @@
</menu_item_check>
<menu_item_check
label="Select By Surrounding"
- layout="topleft"
name="Select By Surrounding">
<menu_item_check.on_check
control="RectangleSelectInclusive" />
<menu_item_check.on_click
function="Tools.SelectBySurrounding" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="Show Hidden Selection"
- layout="topleft"
name="Show Hidden Selection">
<menu_item_check.on_check
control="RenderHiddenSelections" />
@@ -886,7 +706,6 @@
</menu_item_check>
<menu_item_check
label="Show Light Radius for Selection"
- layout="topleft"
name="Show Light Radius for Selection">
<menu_item_check.on_check
control="RenderLightRadius" />
@@ -895,7 +714,6 @@
</menu_item_check>
<menu_item_check
label="Show Selection Beam"
- layout="topleft"
name="Show Selection Beam">
<menu_item_check.on_check
control="ShowSelectionBeam" />
@@ -903,11 +721,9 @@
function="ToggleControl"
parameter="ShowSelectionBeam" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="Snap to Grid"
- layout="topleft"
name="Snap to Grid"
shortcut="G">
<menu_item_check.on_check
@@ -920,7 +736,6 @@
</menu_item_check>
<menu_item_call
label="Snap Object XY to Grid"
- layout="topleft"
name="Snap Object XY to Grid"
shortcut="shift|X">
<menu_item_call.on_click
@@ -930,7 +745,6 @@
</menu_item_call>
<menu_item_call
label="Use Selection for Grid"
- layout="topleft"
name="Use Selection for Grid"
shortcut="shift|G">
<menu_item_call.on_click
@@ -940,7 +754,6 @@
</menu_item_call>
<menu_item_call
label="Grid Options"
- layout="topleft"
name="Grid Options"
shortcut="control|shift|B">
<menu_item_call.on_click
@@ -953,12 +766,10 @@
<menu
create_jump_keys="true"
label="Select Linked Parts"
- layout="topleft"
name="Select Linked Parts"
tear_off="true">
<menu_item_call
label="Select Next Part"
- layout="topleft"
name="Select Next Part"
shortcut="control|.">
<menu_item_call.on_click
@@ -969,7 +780,6 @@
</menu_item_call>
<menu_item_call
label="Select Previous Part"
- layout="topleft"
name="Select Previous Part"
shortcut="control|,">
<menu_item_call.on_click
@@ -980,7 +790,6 @@
</menu_item_call>
<menu_item_call
label="Include Next Part"
- layout="topleft"
name="Include Next Part"
shortcut="control|shift|.">
<menu_item_call.on_click
@@ -991,7 +800,6 @@
</menu_item_call>
<menu_item_call
label="Include Previous Part"
- layout="topleft"
name="Include Previous Part"
shortcut="control|shift|,">
<menu_item_call.on_click
@@ -1004,48 +812,40 @@
</menu>
<menu
label="Help"
- layout="topleft"
name="Help"
tear_off="true">
<menu_item_call
label="[SECOND_LIFE] Help"
- layout="topleft"
name="Second Life Help"
shortcut="F1">
<menu_item_call.on_click
function="ShowHelp"
parameter="f1_help" />
</menu_item_call>
- <!-- <menu_item_call
+<!-- <menu_item_call
label="Tutorial"
- layout="topleft"
name="Tutorial">
<menu_item_call.on_click
function="Floater.Show"
parameter="hud" />
</menu_item_call>-->
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Report Abuse"
- layout="topleft"
name="Report Abuse">
<menu_item_call.on_click
function="ReportAbuse" />
</menu_item_call>
<menu_item_call
label="Report Bug"
- layout="topleft"
name="Report Bug">
<menu_item_call.on_click
function="ShowHelp"
parameter="report_bug" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="About [APP_NAME]"
- layout="topleft"
name="About Second Life">
<menu_item_call.on_click
function="Floater.Show"
@@ -1054,20 +854,28 @@
</menu>
<menu
label="Advanced"
- layout="topleft"
name="Advanced"
tear_off="true"
visible="false">
+ <menu_item_check
+ label="Show Advanced Menu"
+ name="Show Advanced Menu"
+ shortcut="control|alt|D">
+ <on_check
+ function="CheckControl"
+ parameter="UseDebugMenus" />
+ <on_click
+ function="ToggleControl"
+ parameter="UseDebugMenus" />
+ </menu_item_check>
<menu_item_call
label="Stop Animating Me"
- layout="topleft"
name="Stop Animating My Avatar">
<menu_item_call.on_click
function="Tools.StopAllAnimations" />
</menu_item_call>
<menu_item_call
label="Rebake Textures"
- layout="topleft"
name="Rebake Texture"
shortcut="control|alt|R">
<menu_item_call.on_click
@@ -1075,7 +883,6 @@
</menu_item_call>
<menu_item_call
label="Set UI Size to Default"
- layout="topleft"
name="Set UI Size to Default">
<menu_item_call.on_click
function="View.DefaultUISize" />
@@ -1090,7 +897,6 @@
<menu_item_separator/>
<menu_item_check
label="Limit Select Distance"
- layout="topleft"
name="Limit Select Distance">
<menu_item_check.on_check
function="CheckControl"
@@ -1101,7 +907,6 @@
</menu_item_check>
<menu_item_check
label="Disable Camera Constraints"
- layout="topleft"
name="Disable Camera Distance">
<menu_item_check.on_check
function="CheckControl"
@@ -1110,11 +915,9 @@
function="ToggleControl"
parameter="DisableCameraConstraints" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="High-res Snapshot"
- layout="topleft"
name="HighResSnapshot">
<menu_item_check.on_check
function="CheckControl"
@@ -1125,7 +928,6 @@
</menu_item_check>
<menu_item_check
label="Quiet Snapshots to Disk"
- layout="topleft"
name="QuietSnapshotsToDisk">
<menu_item_check.on_check
function="CheckControl"
@@ -1136,7 +938,6 @@
</menu_item_check>
<menu_item_check
label="Compress Snapshots to Disk"
- layout="topleft"
name="CompressSnapshotsToDisk">
<menu_item_check.on_check
function="CheckControl"
@@ -1145,17 +946,14 @@
function="ToggleControl"
parameter="CompressSnapshotsToDisk" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu
create_jump_keys="true"
label="Performance Tools"
- layout="topleft"
name="Performance Tools"
tear_off="true">
<menu_item_call
label="Lag Meter"
- layout="topleft"
name="Lag Meter">
<menu_item_call.on_click
function="Floater.Show"
@@ -1163,7 +961,6 @@
</menu_item_call>
<menu_item_check
label="Statistics Bar"
- layout="topleft"
name="Statistics Bar"
shortcut="control|shift|1">
<menu_item_check.on_check
@@ -1175,7 +972,6 @@
</menu_item_check>
<menu_item_check
label="Show Avatar Rendering Cost"
- layout="topleft"
name="Avatar Rendering Cost">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -1188,12 +984,10 @@
<menu
create_jump_keys="true"
label="Highlighting and Visibility"
- layout="topleft"
name="Highlighting and Visibility"
tear_off="true">
<menu_item_check
label="Cheesy Beacon"
- layout="topleft"
name="Cheesy Beacon">
<menu_item_check.on_check
function="CheckControl"
@@ -1204,7 +998,6 @@
</menu_item_check>
<menu_item_check
label="Hide Particles"
- layout="topleft"
name="Hide Particles"
shortcut="control|alt|shift|=">
<menu_item_check.on_check
@@ -1216,7 +1009,6 @@
</menu_item_check>
<menu_item_check
label="Hide Selected"
- layout="topleft"
name="Hide Selected">
<menu_item_check.on_check
function="CheckControl"
@@ -1227,7 +1019,6 @@
</menu_item_check>
<menu_item_check
label="Highlight Transparent"
- layout="topleft"
name="Highlight Transparent"
shortcut="control|alt|T">
<menu_item_check.on_check
@@ -1237,7 +1028,6 @@
</menu_item_check>
<menu_item_check
label="Show HUD Attachments"
- layout="topleft"
name="Show HUD Attachments"
shortcut="alt|shift|H">
<menu_item_check.on_check
@@ -1247,7 +1037,6 @@
</menu_item_check>
<menu_item_check
label="Show Mouselook Crosshairs"
- layout="topleft"
name="ShowCrosshairs">
<menu_item_check.on_check
function="CheckControl"
@@ -1259,12 +1048,10 @@
<!-- <menu
create_jump_keys="true"
label="Hover Tips"
- layout="topleft"
name="Hover Tips"
tear_off="true">
<menu_item_check
label="Show Tips"
- layout="topleft"
name="Show Tips"
shortcut="control|shift|T">
<menu_item_check.on_check
@@ -1272,11 +1059,9 @@
<menu_item_check.on_click
function="View.ShowHoverTips" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />-->
+ <menu_item_separator/>
<menu_item_check
label="Show Land Tooltips"
- layout="topleft"
name="Land Tips">
<menu_item_check.on_check
control="ShowLandHoverTip" />
@@ -1286,9 +1071,8 @@
<menu_item_check.on_enable
function="View.CheckShowHoverTips" />
</menu_item_check>
- <!-- <menu_item_check
+ <menu_item_check
label="Show Tips On All Objects"
- layout="topleft"
name="Tips On All Objects">
<menu_item_check.on_check
control="ShowAllObjectHoverTip" />
@@ -1305,12 +1089,10 @@
<menu
create_jump_keys="true"
label="Rendering Types"
- layout="topleft"
name="Rendering Types"
tear_off="true">
<menu_item_check
label="Simple"
- layout="topleft"
name="Simple"
shortcut="control|alt|shift|1">
<menu_item_check.on_check
@@ -1322,7 +1104,6 @@
</menu_item_check>
<menu_item_check
label="Alpha"
- layout="topleft"
name="Alpha"
shortcut="control|alt|shift|2">
<menu_item_check.on_check
@@ -1334,7 +1115,6 @@
</menu_item_check>
<menu_item_check
label="Tree"
- layout="topleft"
name="Tree"
shortcut="control|alt|shift|3">
<menu_item_check.on_check
@@ -1346,7 +1126,6 @@
</menu_item_check>
<menu_item_check
label="Avatars"
- layout="topleft"
name="Character"
shortcut="control|alt|shift|4">
<menu_item_check.on_check
@@ -1358,7 +1137,6 @@
</menu_item_check>
<menu_item_check
label="SurfacePath"
- layout="topleft"
name="SurfacePath"
shortcut="control|alt|shift|5">
<menu_item_check.on_check
@@ -1370,7 +1148,6 @@
</menu_item_check>
<menu_item_check
label="Sky"
- layout="topleft"
name="Sky"
shortcut="control|alt|shift|6">
<menu_item_check.on_check
@@ -1382,7 +1159,6 @@
</menu_item_check>
<menu_item_check
label="Water"
- layout="topleft"
name="Water"
shortcut="control|alt|shift|7">
<menu_item_check.on_check
@@ -1394,7 +1170,6 @@
</menu_item_check>
<menu_item_check
label="Ground"
- layout="topleft"
name="Ground"
shortcut="control|alt|shift|8">
<menu_item_check.on_check
@@ -1406,7 +1181,6 @@
</menu_item_check>
<menu_item_check
label="Volume"
- layout="topleft"
name="Volume"
shortcut="control|alt|shift|9">
<menu_item_check.on_check
@@ -1418,7 +1192,6 @@
</menu_item_check>
<menu_item_check
label="Grass"
- layout="topleft"
name="Grass"
shortcut="control|alt|shift|0">
<menu_item_check.on_check
@@ -1430,7 +1203,6 @@
</menu_item_check>
<menu_item_check
label="Clouds"
- layout="topleft"
name="Clouds"
shortcut="control|alt|shift|-">
<menu_item_check.on_check
@@ -1442,7 +1214,6 @@
</menu_item_check>
<menu_item_check
label="Particles"
- layout="topleft"
name="Particles"
shortcut="control|alt|shift|=">
<menu_item_check.on_check
@@ -1454,7 +1225,6 @@
</menu_item_check>
<menu_item_check
label="Bump"
- layout="topleft"
name="Bump"
shortcut="control|alt|shift|\">
<menu_item_check.on_check
@@ -1468,12 +1238,10 @@
<menu
create_jump_keys="true"
label="Rendering Features"
- layout="topleft"
name="Rendering Features"
tear_off="true">
<menu_item_check
label="UI"
- layout="topleft"
name="UI"
shortcut="control|alt|F1">
<menu_item_check.on_check
@@ -1485,7 +1253,6 @@
</menu_item_check>
<menu_item_check
label="Selected"
- layout="topleft"
name="Selected"
shortcut="control|alt|F2">
<menu_item_check.on_check
@@ -1497,7 +1264,6 @@
</menu_item_check>
<menu_item_check
label="Highlighted"
- layout="topleft"
name="Highlighted"
shortcut="control|alt|F3">
<menu_item_check.on_check
@@ -1509,7 +1275,6 @@
</menu_item_check>
<menu_item_check
label="Dynamic Textures"
- layout="topleft"
name="Dynamic Textures"
shortcut="control|alt|F4">
<menu_item_check.on_check
@@ -1521,7 +1286,6 @@
</menu_item_check>
<menu_item_check
label="Foot Shadows"
- layout="topleft"
name="Foot Shadows"
shortcut="control|alt|F5">
<menu_item_check.on_check
@@ -1533,7 +1297,6 @@
</menu_item_check>
<menu_item_check
label="Fog"
- layout="topleft"
name="Fog"
shortcut="control|alt|F6">
<menu_item_check.on_check
@@ -1545,7 +1308,6 @@
</menu_item_check>
<menu_item_check
label="Test FRInfo"
- layout="topleft"
name="Test FRInfo"
shortcut="control|alt|F8">
<menu_item_check.on_check
@@ -1557,7 +1319,6 @@
</menu_item_check>
<menu_item_check
label="Flexible Objects"
- layout="topleft"
name="Flexible Objects"
shortcut="control|alt|F9">
<menu_item_check.on_check
@@ -1570,7 +1331,6 @@
</menu>
<menu_item_check
label="Run Multiple Threads"
- layout="topleft"
name="Run Multiple Threads">
<menu_item_check.on_check
function="CheckControl"
@@ -1581,7 +1341,6 @@
</menu_item_check>
<menu_item_call
label="Clear Group Cache"
- layout="topleft"
name="ClearGroupCache">
<menu_item_call.on_click
function="Advanced.ClearGroupCache"
@@ -1589,7 +1348,6 @@
</menu_item_call>
<menu_item_check
label="Mouse Smoothing"
- layout="topleft"
name="Mouse Smoothing">
<menu_item_check.on_check
function="CheckControl"
@@ -1598,17 +1356,14 @@
function="ToggleControl"
parameter="MouseSmooth" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu
label="Shortcuts"
- layout="topleft"
name="Shortcuts"
tear_off="true"
visible="false">
<menu_item_call
label="Image (L$[COST])..."
- layout="topleft"
name="Upload Image"
shortcut="control|U">
<menu_item_call.on_click
@@ -1619,7 +1374,6 @@
</menu_item_call>
<menu_item_check
label="Search"
- layout="topleft"
name="Search"
shortcut="control|F">
<menu_item_check.on_check
@@ -1632,7 +1386,6 @@
<menu_item_call
enabled="false"
label="Release Keys"
- layout="topleft"
name="Release Keys">
<menu_item_call.on_click
function="Tools.ReleaseKeys"
@@ -1643,16 +1396,13 @@
</menu_item_call>
<menu_item_call
label="Set UI Size to Default"
- layout="topleft"
name="Set UI Size to Default">
<menu_item_call.on_click
function="View.DefaultUISize" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="Always Run"
- layout="topleft"
name="Always Run"
shortcut="control|R">
<menu_item_check.on_check
@@ -1662,7 +1412,6 @@
</menu_item_check>
<menu_item_check
label="Fly"
- layout="topleft"
name="Fly"
shortcut="Home">
<menu_item_check.on_check
@@ -1672,11 +1421,9 @@
<menu_item_check.on_enable
function="Agent.enableFlying" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Close Window"
- layout="topleft"
name="Close Window"
shortcut="control|W">
<menu_item_call.on_click
@@ -1686,7 +1433,6 @@
</menu_item_call>
<menu_item_call
label="Close All Windows"
- layout="topleft"
name="Close All Windows"
shortcut="control|shift|W">
<menu_item_call.on_click
@@ -1694,22 +1440,18 @@
<menu_item_call.on_enable
function="File.EnableCloseAllWindows" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Snapshot to Disk"
- layout="topleft"
name="Snapshot to Disk"
shortcut="control|`"
use_mac_ctrl="true">
<menu_item_call.on_click
function="File.TakeSnapshotToDisk" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Mouselook"
- layout="topleft"
name="Mouselook"
shortcut="M">
<menu_item_call.on_click
@@ -1719,7 +1461,6 @@
</menu_item_call>
<menu_item_check
label="Joystick Flycam"
- layout="topleft"
name="Joystick Flycam"
shortcut="alt|shift|F">
<menu_item_check.on_check
@@ -1731,7 +1472,6 @@
</menu_item_check>
<menu_item_call
label="Reset View"
- layout="topleft"
name="Reset View"
shortcut="Esc">
<menu_item_call.on_click
@@ -1739,7 +1479,6 @@
</menu_item_call>
<menu_item_call
label="Look at Last Chatter"
- layout="topleft"
name="Look at Last Chatter"
shortcut="control|\">
<menu_item_call.on_click
@@ -1747,17 +1486,14 @@
<menu_item_call.on_enable
function="View.EnableLastChatter" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu
create_jump_keys="true"
label="Select Build Tool"
- layout="topleft"
name="Select Tool"
tear_off="true">
<menu_item_call
label="Focus Tool"
- layout="topleft"
name="Focus"
shortcut="control|1">
<menu_item_call.on_click
@@ -1766,7 +1502,6 @@
</menu_item_call>
<menu_item_call
label="Move Tool"
- layout="topleft"
name="Move"
shortcut="control|2">
<menu_item_call.on_click
@@ -1775,7 +1510,6 @@
</menu_item_call>
<menu_item_call
label="Edit Tool"
- layout="topleft"
name="Edit"
shortcut="control|3">
<menu_item_call.on_click
@@ -1784,7 +1518,6 @@
</menu_item_call>
<menu_item_call
label="Create Tool"
- layout="topleft"
name="Create"
shortcut="control|4">
<menu_item_call.on_click
@@ -1793,7 +1526,6 @@
</menu_item_call>
<menu_item_call
label="Land Tool"
- layout="topleft"
name="Land"
shortcut="control|5">
<menu_item_call.on_click
@@ -1801,11 +1533,9 @@
parameter="land" />
</menu_item_call>
</menu>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Zoom In"
- layout="topleft"
name="Zoom In"
shortcut="control|0">
<menu_item_call.on_click
@@ -1813,7 +1543,6 @@
</menu_item_call>
<menu_item_call
label="Zoom Default"
- layout="topleft"
name="Zoom Default"
shortcut="control|9">
<menu_item_call.on_click
@@ -1821,17 +1550,14 @@
</menu_item_call>
<menu_item_call
label="Zoom Out"
- layout="topleft"
name="Zoom Out"
shortcut="control|8">
<menu_item_call.on_click
function="View.ZoomOut" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Toggle Fullscreen"
- layout="topleft"
name="Toggle Fullscreen"
>
<!-- Note: shortcut="alt|Enter" was deleted from the preceding node-->
@@ -1839,11 +1565,9 @@
function="View.Fullscreen" />
</menu_item_call>
</menu>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Show Debug Settings"
- layout="topleft"
name="Debug Settings">
<menu_item_call.on_click
function="Advanced.ShowDebugSettings"
@@ -1851,7 +1575,6 @@
</menu_item_call>
<menu_item_check
label="Show Develop Menu"
- layout="topleft"
name="Debug Mode"
shortcut="control|alt|Q">
<menu_item_check.on_check
@@ -1861,23 +1584,21 @@
function="ToggleControl"
parameter="QAMode" />
</menu_item_check>
+
</menu>
<menu
create_jump_keys="true"
label="Develop"
- layout="topleft"
name="Develop"
tear_off="true"
visible="false">
<menu
create_jump_keys="true"
label="Consoles"
- layout="topleft"
name="Consoles"
tear_off="true">
<menu_item_check
label="Texture Console"
- layout="topleft"
name="Texture Console"
shortcut="control|shift|3"
use_mac_ctrl="true">
@@ -1890,7 +1611,6 @@
</menu_item_check>
<menu_item_check
label="Debug Console"
- layout="topleft"
name="Debug Console"
shortcut="control|shift|4"
use_mac_ctrl="true">
@@ -1903,7 +1623,6 @@
</menu_item_check>
<menu_item_call
label="Notifications Console"
- layout="topleft"
name="Notifications"
shortcut="control|shift|5">
<menu_item_call.on_click
@@ -1912,7 +1631,6 @@
</menu_item_call>
<menu_item_check
label="Texture Size Console"
- layout="topleft"
name="Texture Size"
shortcut="control|shift|6">
<menu_item_check.on_check
@@ -1924,7 +1642,6 @@
</menu_item_check>
<menu_item_check
label="Texture Category Console"
- layout="topleft"
name="Texture Category"
shortcut="control|shift|7">
<menu_item_check.on_check
@@ -1936,7 +1653,6 @@
</menu_item_check>
<menu_item_check
label="Fast Timers"
- layout="topleft"
name="Fast Timers"
shortcut="control|shift|9"
use_mac_ctrl="true">
@@ -1949,7 +1665,6 @@
</menu_item_check>
<menu_item_check
label="Memory"
- layout="topleft"
name="Memory"
shortcut="control|shift|0"
use_mac_ctrl="true">
@@ -1960,11 +1675,9 @@
function="Advanced.ToggleConsole"
parameter="memory view" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Region Info to Debug Console"
- layout="topleft"
name="Region Info to Debug Console">
<menu_item_call.on_click
function="Advanced.DumpInfoToConsole"
@@ -1972,7 +1685,6 @@
</menu_item_call>
<menu_item_call
label="Group Info to Debug Console"
- layout="topleft"
name="Group Info to Debug Console">
<menu_item_call.on_click
function="Advanced.DumpInfoToConsole"
@@ -1980,17 +1692,14 @@
</menu_item_call>
<menu_item_call
label="Capabilities Info to Debug Console"
- layout="topleft"
name="Capabilities Info to Debug Console">
<menu_item_call.on_click
function="Advanced.DumpInfoToConsole"
parameter="capabilities" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="Camera"
- layout="topleft"
name="Camera">
<menu_item_check.on_check
function="Advanced.CheckHUDInfo"
@@ -2001,7 +1710,6 @@
</menu_item_check>
<menu_item_check
label="Wind"
- layout="topleft"
name="Wind">
<menu_item_check.on_check
function="Advanced.CheckHUDInfo"
@@ -2012,7 +1720,6 @@
</menu_item_check>
<menu_item_check
label="FOV"
- layout="topleft"
name="FOV">
<menu_item_check.on_check
function="Advanced.CheckHUDInfo"
@@ -2023,7 +1730,6 @@
</menu_item_check>
<menu_item_check
label="Badge"
- layout="topleft"
name="Badge"
shortcut="alt|control|shift|h">
<menu_item_check.on_check
@@ -2037,12 +1743,10 @@
<menu
create_jump_keys="true"
label="Show Info"
- layout="topleft"
name="Display Info"
tear_off="true">
<menu_item_check
label="Show Time"
- layout="topleft"
name="Show Time">
<menu_item_check.on_check
function="CheckControl"
@@ -2053,7 +1757,6 @@
</menu_item_check>
<menu_item_check
label="Show Render Info"
- layout="topleft"
name="Show Render Info">
<menu_item_check.on_check
function="CheckControl"
@@ -2064,7 +1767,6 @@
</menu_item_check>
<menu_item_check
label="Show Matrices"
- layout="topleft"
name="Show Matrices">
<menu_item_check.on_check
function="CheckControl"
@@ -2075,7 +1777,6 @@
</menu_item_check>
<menu_item_check
label="Show Color Under Cursor"
- layout="topleft"
name="Show Color Under Cursor">
<menu_item_check.on_check
function="CheckControl"
@@ -2084,11 +1785,9 @@
function="ToggleControl"
parameter="DebugShowColor" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="Show Updates to Objects"
- layout="topleft"
name="Show Updates"
shortcut="control|alt|shift|U">
<menu_item_check.on_check
@@ -2098,17 +1797,14 @@
function="Advanced.ToggleShowObjectUpdates" />
</menu_item_check>
</menu>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu
create_jump_keys="true"
label="Force an Error"
- layout="topleft"
name="Force Errors"
tear_off="true">
<menu_item_call
label="Force Breakpoint"
- layout="topleft"
name="Force Breakpoint"
shortcut="control|alt|shift|B">
<menu_item_call.on_click
@@ -2116,49 +1812,42 @@
</menu_item_call>
<menu_item_call
label="Force LLError And Crash"
- layout="topleft"
name="Force LLError And Crash">
<menu_item_call.on_click
function="Advanced.ForceErrorLlerror" />
</menu_item_call>
<menu_item_call
label="Force Bad Memory Access"
- layout="topleft"
name="Force Bad Memory Access">
<menu_item_call.on_click
function="Advanced.ForceErrorBadMemoryAccess" />
</menu_item_call>
<menu_item_call
label="Force Infinite Loop"
- layout="topleft"
name="Force Infinite Loop">
<menu_item_call.on_click
function="Advanced.ForceErrorInfiniteLoop" />
</menu_item_call>
<menu_item_call
label="Force Driver Crash"
- layout="topleft"
name="Force Driver Carsh">
<menu_item_call.on_click
function="Advanced.ForceErrorDriverCrash" />
</menu_item_call>
<menu_item_call
label="Force Software Exception"
- layout="topleft"
name="Force Software Exception">
<menu_item_call.on_click
function="Advanced.ForceErrorSoftwareException" />
</menu_item_call>
<menu_item_call
label="Force Disconnect Viewer"
- layout="topleft"
name="Force Disconnect Viewer">
<menu_item_call.on_click
function="Advanced.ForceErrorDisconnectViewer" />
</menu_item_call>
<menu_item_call
label="Simulate a Memory Leak"
- layout="topleft"
name="Memory Leaking Simulation">
<menu_item_call.on_click
function="Floater.Show"
@@ -2168,12 +1857,10 @@
<menu
create_jump_keys="true"
label="Render Tests"
- layout="topleft"
name="Render Tests"
tear_off="true">
<menu_item_check
label="Camera Offset"
- layout="topleft"
name="Camera Offset">
<menu_item_check.on_check
function="CheckControl"
@@ -2184,7 +1871,6 @@
</menu_item_check>
<menu_item_check
label="Randomize Framerate"
- layout="topleft"
name="Randomize Framerate">
<menu_item_check.on_check
function="Advanced.CheckRandomizeFramerate"
@@ -2194,7 +1880,6 @@
</menu_item_check>
<menu_item_check
label="Periodic Slow Frame"
- layout="topleft"
name="Periodic Slow Frame">
<menu_item_check.on_check
function="Advanced.CheckPeriodicSlowFrame"
@@ -2205,7 +1890,6 @@
</menu_item_check>
<menu_item_check
label="Frame Test"
- layout="topleft"
name="Frame Test">
<menu_item_check.on_check
function="Advanced.CheckFrameTest"
@@ -2217,12 +1901,10 @@
<menu
create_jump_keys="true"
label="Render Metadata"
- layout="topleft"
name="Render Metadata"
tear_off="true">
<menu_item_check
label="Bounding Boxes"
- layout="topleft"
name="Bounding Boxes">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2233,7 +1915,6 @@
</menu_item_check>
<menu_item_check
label="Octree"
- layout="topleft"
name="Octree">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2244,7 +1925,6 @@
</menu_item_check>
<menu_item_check
label="Shadow Frusta"
- layout="topleft"
name="Shadow Frusta">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2255,7 +1935,6 @@
</menu_item_check>
<menu_item_check
label="Occlusion"
- layout="topleft"
name="Occlusion">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2266,7 +1945,6 @@
</menu_item_check>
<menu_item_check
label="Render Batches"
- layout="topleft"
name="Render Batches">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2277,7 +1955,6 @@
</menu_item_check>
<menu_item_check
label="Texture Anim"
- layout="topleft"
name="Texture Anim">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2288,7 +1965,6 @@
</menu_item_check>
<menu_item_check
label="Texture Priority"
- layout="topleft"
name="Texture Priority">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2299,7 +1975,6 @@
</menu_item_check>
<menu_item_check
label="Texture Area"
- layout="topleft"
name="Texture Area">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2310,7 +1985,6 @@
</menu_item_check>
<menu_item_check
label="Face Area"
- layout="topleft"
name="Face Area">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2321,7 +1995,6 @@
</menu_item_check>
<menu_item_check
label="Lights"
- layout="topleft"
name="Lights">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2332,7 +2005,6 @@
</menu_item_check>
<menu_item_check
label="Collision Skeleton"
- layout="topleft"
name="Collision Skeleton">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2343,7 +2015,6 @@
</menu_item_check>
<menu_item_check
label="Raycast"
- layout="topleft"
name="Raycast">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -2356,7 +2027,6 @@
<menu
create_jump_keys="true"
label="Rendering"
- layout="topleft"
name="Rendering"
tear_off="true">
<menu_item_check
@@ -2498,7 +2168,6 @@
</menu_item_check>
<menu_item_check
label="Full Res Textures"
- layout="topleft"
name="Rull Res Textures">
<menu_item_check.on_check
function="CheckControl"
@@ -2509,7 +2178,6 @@
</menu_item_check>
<menu_item_check
label="Audit Textures"
- layout="topleft"
name="Audit Textures">
<menu_item_check.on_check
function="CheckControl"
@@ -2563,12 +2231,10 @@
<menu
create_jump_keys="true"
label="Network"
- layout="topleft"
name="Network"
tear_off="true">
<menu_item_check
label="Pause Agent"
- layout="topleft"
name="AgentPause">
<menu_item_check.on_check
function="CheckControl"
@@ -2577,27 +2243,22 @@
function="ToggleControl"
parameter="AgentPause" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Enable Message Log"
- layout="topleft"
name="Enable Message Log">
<menu_item_call.on_click
function="Advanced.EnableMessageLog" />
</menu_item_call>
<menu_item_call
label="Disable Message Log"
- layout="topleft"
name="Disable Message Log">
<menu_item_call.on_click
function="Advanced.DisableMessageLog" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="Velocity Interpolate Objects"
- layout="topleft"
name="Velocity Interpolate Objects">
<menu_item_check.on_check
function="CheckControl"
@@ -2608,7 +2269,6 @@
</menu_item_check>
<menu_item_check
label="Ping Interpolate Object Positions"
- layout="topleft"
name="Ping Interpolate Object Positions">
<menu_item_check.on_check
function="CheckControl"
@@ -2617,11 +2277,9 @@
function="ToggleControl"
parameter="PingInterpolate" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Drop a Packet"
- layout="topleft"
name="Drop a Packet"
shortcut="control|alt|L">
<menu_item_call.on_click
@@ -2630,14 +2288,12 @@
</menu>
<menu_item_call
label="Dump Scripted Camera"
- layout="topleft"
name="Dump Scripted Camera">
<menu_item_call.on_click
function="Advanced.DumpScriptedCamera" />
</menu_item_call>
<menu_item_call
label="Bumps, Pushes &amp; Hits"
- layout="topleft"
name="Bumps, Pushes &amp;amp; Hits">
<menu_item_call.on_click
function="Floater.Show"
@@ -2647,12 +2303,10 @@
<menu
create_jump_keys="true"
label="Recorder"
- layout="topleft"
name="Recorder"
tear_off="true">
<menu_item_call
label="Start Playback"
- layout="topleft"
name="Start Playback">
<menu_item_call.on_click
function="Advanced.AgentPilot"
@@ -2660,7 +2314,6 @@
</menu_item_call>
<menu_item_call
label="Stop Playback"
- layout="topleft"
name="Stop Playback">
<menu_item_call.on_click
function="Advanced.AgentPilot"
@@ -2668,7 +2321,6 @@
</menu_item_call>
<menu_item_check
label="Loop Playback"
- layout="topleft"
name="Loop Playback">
<menu_item_check.on_check
function="Advanced.CheckAgentPilotLoop"
@@ -2678,7 +2330,6 @@
</menu_item_check>
<menu_item_call
label="Start Record"
- layout="topleft"
name="Start Record">
<menu_item_call.on_click
function="Advanced.AgentPilot"
@@ -2686,7 +2337,6 @@
</menu_item_call>
<menu_item_call
label="Stop Record"
- layout="topleft"
name="Stop Record">
<menu_item_call.on_click
function="Advanced.AgentPilot"
@@ -2697,12 +2347,10 @@
<menu
create_jump_keys="true"
label="World"
- layout="topleft"
name="World"
tear_off="true">
<menu_item_check
label="Sim Sun Override"
- layout="topleft"
name="Sim Sun Override">
<menu_item_check.on_check
function="CheckControl"
@@ -2713,7 +2361,6 @@
</menu_item_check>
<menu_item_check
label="Cheesy Beacon"
- layout="topleft"
name="Cheesy Beacon">
<menu_item_check.on_check
function="CheckControl"
@@ -2724,7 +2371,6 @@
</menu_item_check>
<menu_item_check
label="Fixed Weather"
- layout="topleft"
name="Fixed Weather">
<menu_item_check.on_check
function="CheckControl"
@@ -2735,7 +2381,6 @@
</menu_item_check>
<menu_item_call
label="Dump Region Object Cache"
- layout="topleft"
name="Dump Region Object Cache">
<menu_item_call.on_click
function="Advanced.DumpRegionObjectCache" />
@@ -2744,12 +2389,10 @@
<menu
create_jump_keys="true"
label="UI"
- layout="topleft"
name="UI"
tear_off="true">
<!-- <menu_item_check
label="New Bottom Bar"
- layout="topleft"
name="New Bottom Bar">
<menu_item_check.on_check
function="CheckControl"
@@ -2760,7 +2403,6 @@
</menu_item_check>-->
<menu_item_call
label="Web Browser Test"
- layout="topleft"
name="Web Browser Test">
<menu_item_call.on_click
function="Advanced.WebBrowserTest"
@@ -2768,14 +2410,12 @@
</menu_item_call>
<menu_item_call
label="Dump SelectMgr"
- layout="topleft"
name="Dump SelectMgr">
<menu_item_call.on_click
function="Advanced.DumpSelectMgr" />
</menu_item_call>
<menu_item_call
label="Dump Inventory"
- layout="topleft"
name="Dump Inventory">
<menu_item_call.on_click
function="Advanced.DumpInventory" />
@@ -2788,14 +2428,12 @@
</menu_item_call>
<menu_item_call
label="Dump Focus Holder"
- layout="topleft"
name="Dump Focus Holder">
<menu_item_call.on_click
function="Advanced.DumpFocusHolder" />
</menu_item_call>
<menu_item_call
label="Print Selected Object Info"
- layout="topleft"
name="Print Selected Object Info"
shortcut="control|shift|P">
<menu_item_call.on_click
@@ -2803,7 +2441,6 @@
</menu_item_call>
<menu_item_call
label="Print Agent Info"
- layout="topleft"
name="Print Agent Info"
shortcut="shift|P">
<menu_item_call.on_click
@@ -2811,7 +2448,6 @@
</menu_item_call>
<menu_item_call
label="Memory Stats"
- layout="topleft"
name="Memory Stats"
shortcut="control|alt|shift|M">
<menu_item_call.on_click
@@ -2819,7 +2455,6 @@
</menu_item_call>
<menu_item_check
label="Double-ClickAuto-Pilot"
- layout="topleft"
name="Double-ClickAuto-Pilot">
<menu_item_check.on_check
function="CheckControl"
@@ -2832,7 +2467,6 @@
<menu_item_separator />
<menu_item_check
label="Debug SelectMgr"
- layout="topleft"
name="Debug SelectMgr">
<menu_item_check.on_check
function="CheckControl"
@@ -2843,7 +2477,6 @@
</menu_item_check>
<menu_item_check
label="Debug Clicks"
- layout="topleft"
name="Debug Clicks">
<menu_item_check.on_check
function="Advanced.CheckDebugClicks"
@@ -2854,7 +2487,6 @@
</menu_item_check>
<menu_item_check
label="Debug Views"
- layout="topleft"
name="Debug Views">
<menu_item_check.on_check
function="Advanced.CheckDebugViews" />
@@ -2863,7 +2495,6 @@
</menu_item_check>
<menu_item_check
label="Debug Name Tooltips"
- layout="topleft"
name="Debug Name Tooltips">
<menu_item_check.on_check
function="Advanced.CheckXUINameTooltips"
@@ -2873,7 +2504,6 @@
</menu_item_check>
<menu_item_check
label="Debug Mouse Events"
- layout="topleft"
name="Debug Mouse Events">
<menu_item_check.on_check
function="Advanced.CheckDebugMouseEvents"
@@ -2883,7 +2513,6 @@
</menu_item_check>
<menu_item_check
label="Debug Keys"
- layout="topleft"
name="Debug Keys">
<menu_item_check.on_check
function="Advanced.CheckDebugKeys"
@@ -2893,7 +2522,6 @@
</menu_item_check>
<menu_item_check
label="Debug WindowProc"
- layout="topleft"
name="Debug WindowProc">
<menu_item_check.on_check
function="Advanced.CheckDebugWindowProc"
@@ -2910,14 +2538,12 @@
tear_off="true">
<menu_item_call
label="Reload Color Settings"
- layout="topleft"
name="Reload Color Settings">
<menu_item_call.on_click
function="Advanced.ReloadColorSettings" />
</menu_item_call>
<menu_item_call
label="Show Font Test"
- layout="topleft"
name="Show Font Test">
<menu_item_call.on_click
function="Floater.Show"
@@ -2925,21 +2551,18 @@
</menu_item_call>
<menu_item_call
label="Load from XML"
- layout="topleft"
name="Load from XML">
<menu_item_call.on_click
function="Advanced.LoadUIFromXML" />
</menu_item_call>
<menu_item_call
label="Save to XML"
- layout="topleft"
name="Save to XML">
<menu_item_call.on_click
function="Advanced.SaveUIToXML" />
</menu_item_call>
<menu_item_check
label="Show XUI Names"
- layout="topleft"
name="Show XUI Names">
<menu_item_check.on_check
function="Advanced.CheckXUINames"
@@ -2949,7 +2572,6 @@
</menu_item_check>
<menu_item_call
label="Send Test IMs"
- layout="topleft"
name="Send Test IMs">
<menu_item_call.on_click
function="Advanced.SendTestIMs" />
@@ -2958,18 +2580,15 @@
<menu
create_jump_keys="true"
label="Avatar"
- layout="topleft"
name="Character"
tear_off="true">
<menu
create_jump_keys="true"
label="Grab Baked Texture"
- layout="topleft"
name="Grab Baked Texture"
tear_off="true">
<menu_item_call
label="Iris"
- layout="topleft"
name="Iris">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
@@ -2980,7 +2599,6 @@
</menu_item_call>
<menu_item_call
label="Head"
- layout="topleft"
name="Head">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
@@ -2991,7 +2609,6 @@
</menu_item_call>
<menu_item_call
label="Upper Body"
- layout="topleft"
name="Upper Body">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
@@ -3002,7 +2619,6 @@
</menu_item_call>
<menu_item_call
label="Lower Body"
- layout="topleft"
name="Lower Body">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
@@ -3013,7 +2629,6 @@
</menu_item_call>
<menu_item_call
label="Skirt"
- layout="topleft"
name="Skirt">
<menu_item_call.on_click
function="Advanced.GrabBakedTexture"
@@ -3026,19 +2641,16 @@
<menu
create_jump_keys="true"
label="Character Tests"
- layout="topleft"
name="Character Tests"
tear_off="true">
<menu_item_call
label="Appearance To XML"
- layout="topleft"
name="Appearance To XML">
<menu_item_call.on_click
function="Advanced.AppearanceToXML" />
</menu_item_call>
<menu_item_call
label="Toggle Character Geometry"
- layout="topleft"
name="Toggle Character Geometry">
<menu_item_call.on_click
function="Advanced.ToggleCharacterGeometry" />
@@ -3047,28 +2659,24 @@
</menu_item_call>
<menu_item_call
label="Test Male"
- layout="topleft"
name="Test Male">
<menu_item_call.on_click
function="Advanced.TestMale" />
</menu_item_call>
<menu_item_call
label="Test Female"
- layout="topleft"
name="Test Female">
<menu_item_call.on_click
function="Advanced.TestFemale" />
</menu_item_call>
<menu_item_call
label="Toggle PG"
- layout="topleft"
name="Toggle PG">
<menu_item_call.on_click
function="Advanced.TogglePG" />
</menu_item_call>
<menu_item_check
label="Allow Select Avatar"
- layout="topleft"
name="Allow Select Avatar">
<menu_item_check.on_check
function="CheckControl"
@@ -3080,14 +2688,12 @@
</menu>
<menu_item_call
label="Force Params to Default"
- layout="topleft"
name="Force Params to Default">
<menu_item_call.on_click
function="Advanced.ForceParamsToDefault" />
</menu_item_call>
<menu_item_check
label="Animation Info"
- layout="topleft"
name="Animation Info">
<menu_item_check.on_check
function="Advanced.CheckAnimationInfo"
@@ -3098,7 +2704,6 @@
</menu_item_check>
<menu_item_check
label="Slow Motion Animations"
- layout="topleft"
name="Slow Motion Animations">
<menu_item_check.on_check
function="CheckControl"
@@ -3109,7 +2714,6 @@
</menu_item_check>
<menu_item_check
label="Show Look At"
- layout="topleft"
name="Show Look At">
<menu_item_check.on_check
function="Advanced.CheckShowLookAt"
@@ -3119,7 +2723,6 @@
</menu_item_check>
<menu_item_check
label="Show Point At"
- layout="topleft"
name="Show Point At">
<menu_item_check.on_check
function="Advanced.CheckShowPointAt"
@@ -3129,7 +2732,6 @@
</menu_item_check>
<menu_item_check
label="Debug Joint Updates"
- layout="topleft"
name="Debug Joint Updates">
<menu_item_check.on_check
function="Advanced.CheckDebugJointUpdates"
@@ -3139,7 +2741,6 @@
</menu_item_check>
<menu_item_check
label="Disable LOD"
- layout="topleft"
name="Disable LOD">
<menu_item_check.on_check
function="Advanced.CheckDisableLOD"
@@ -3149,7 +2750,6 @@
</menu_item_check>
<menu_item_check
label="Debug Character Vis"
- layout="topleft"
name="Debug Character Vis">
<menu_item_check.on_check
function="Advanced.CheckDebugCharacterVis"
@@ -3159,7 +2759,6 @@
</menu_item_check>
<menu_item_check
label="Show Collision Skeleton"
- layout="topleft"
name="Show Collision Skeleton">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -3170,7 +2769,6 @@
</menu_item_check>
<menu_item_check
label="Display Agent Target"
- layout="topleft"
name="Display Agent Target">
<menu_item_check.on_check
function="Advanced.CheckInfoDisplay"
@@ -3182,7 +2780,6 @@
<!-- Appears not to exist anymore
<menu_item_check
label="Debug Rotation"
- layout="topleft"
name="Debug Rotation">
<menu_item_check.on_check
function="CheckControl"
@@ -3194,14 +2791,12 @@
-->
<menu_item_call
label="Dump Attachments"
- layout="topleft"
name="Dump Attachments">
<menu_item_call.on_click
function="Advanced.DumpAttachments" />
</menu_item_call>
<menu_item_call
label="Debug Avatar Textures"
- layout="topleft"
name="Debug Avatar Textures"
shortcut="control|alt|shift|A">
<menu_item_call.on_click
@@ -3209,18 +2804,15 @@
</menu_item_call>
<menu_item_call
label="Dump Local Textures"
- layout="topleft"
name="Dump Local Textures"
shortcut="alt|shift|M">
<menu_item_call.on_click
function="Advanced.DumpAvatarLocalTextures" />
</menu_item_call>
</menu>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="HTTP Textures"
- layout="topleft"
name="HTTP Textures">
<menu_item_check.on_check
function="CheckControl"
@@ -3231,14 +2823,12 @@
</menu_item_check>
<menu_item_call
label="Compress Images"
- layout="topleft"
name="Compress Images">
<menu_item_call.on_click
function="Advanced.CompressImage" />
</menu_item_call>
<menu_item_check
label="Output Debug Minidump"
- layout="topleft"
name="Output Debug Minidump">
<menu_item_check.on_check
function="CheckControl"
@@ -3249,7 +2839,6 @@
</menu_item_check>
<menu_item_check
label="Console Window on next Run"
- layout="topleft"
name="Console Window">
<menu_item_check.on_check
function="CheckControl"
@@ -3258,11 +2847,9 @@
function="ToggleControl"
parameter="ShowConsoleWindow" />
</menu_item_check>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_check
label="Show Admin Menu"
- layout="topleft"
name="View Admin Options">
<menu_item_check.on_check
function="Advanced.CheckViewAdminOptions"
@@ -3272,7 +2859,6 @@
</menu_item_check>
<menu_item_call
label="Request Admin Status"
- layout="topleft"
name="Request Admin Options"
shortcut="control|alt|G">
<menu_item_call.on_click
@@ -3280,7 +2866,6 @@
</menu_item_call>
<menu_item_call
label="Leave Admin Status"
- layout="topleft"
name="Leave Admin Options"
shortcut="control|alt|shift|G">
<menu_item_call.on_click
@@ -3290,18 +2875,15 @@
<menu
create_jump_keys="true"
label="Admin"
- layout="topleft"
name="Admin"
tear_off="true"
visible="false">
<menu
create_jump_keys="true"
label="Object"
- layout="topleft"
tear_off="true">
<menu_item_call
label="Take Copy"
- layout="topleft"
name="Take Copy"
shortcut="control|alt|shift|O">
<menu_item_call.on_click
@@ -3311,7 +2893,6 @@
</menu_item_call>
<menu_item_call
label="Force Owner To Me"
- layout="topleft"
name="Force Owner To Me">
<menu_item_call.on_click
function="Admin.HandleObjectOwnerSelf" />
@@ -3320,7 +2901,6 @@
</menu_item_call>
<menu_item_call
label="Force Owner Permissive"
- layout="topleft"
name="Force Owner Permissive">
<menu_item_call.on_click
function="Admin.HandleObjectOwnerPermissive" />
@@ -3329,7 +2909,6 @@
</menu_item_call>
<menu_item_call
label="Delete"
- layout="topleft"
name="Delete"
shortcut="control|alt|shift|Del">
<menu_item_call.on_click
@@ -3339,7 +2918,6 @@
</menu_item_call>
<menu_item_call
label="Lock"
- layout="topleft"
name="Lock"
shortcut="control|alt|shift|L">
<menu_item_call.on_click
@@ -3349,7 +2927,6 @@
</menu_item_call>
<menu_item_call
label="Get Assets IDs"
- layout="topleft"
name="Get Assets IDs"
shortcut="control|alt|shift|I">
<menu_item_call.on_click
@@ -3361,12 +2938,10 @@
<menu
create_jump_keys="true"
label="Parcel"
- layout="topleft"
name="Parcel"
tear_off="true">
<menu_item_call
label="Force Owner To Me"
- layout="topleft"
name="Owner To Me">
<menu_item_call.on_click
function="Admin.HandleForceParcelOwnerToMe" />
@@ -3375,7 +2950,6 @@
</menu_item_call>
<menu_item_call
label="Set to Linden Content"
- layout="topleft"
name="Set to Linden Content"
shortcut="control|alt|shift|C">
<menu_item_call.on_click
@@ -3385,7 +2959,6 @@
</menu_item_call>
<menu_item_call
label="Claim Public Land"
- layout="topleft"
name="Claim Public Land">
<menu_item_call.on_click
function="Admin.HandleClaimPublicLand" />
@@ -3396,12 +2969,10 @@
<menu
create_jump_keys="true"
label="Region"
- layout="topleft"
name="Region"
tear_off="true">
<menu_item_call
label="Dump Temp Asset Data"
- layout="topleft"
name="Dump Temp Asset Data">
<menu_item_call.on_click
function="Admin.HandleRegionDumpTempAssetData" />
@@ -3410,7 +2981,6 @@
</menu_item_call>
<menu_item_call
label="Save Region State"
- layout="topleft"
name="Save Region State">
<menu_item_call.on_click
function="Admin.OnSaveState" />
@@ -3420,7 +2990,6 @@
</menu>
<menu_item_call
label="God Tools"
- layout="topleft"
name="God Tools">
<menu_item_call.on_click
function="Floater.Show"
@@ -3432,34 +3001,29 @@
<menu
create_jump_keys="true"
label="Admin"
- layout="topleft"
name="Deprecated"
tear_off="true"
visible="false">
<menu
create_jump_keys="true"
label="Attach Object"
- layout="topleft"
mouse_opaque="false"
name="Attach Object"
tear_off="true" />
<menu
create_jump_keys="true"
label="Detach Object"
- layout="topleft"
mouse_opaque="false"
name="Detach Object"
tear_off="true" />
<menu
create_jump_keys="true"
label="Take Off Clothing"
- layout="topleft"
mouse_opaque="false"
name="Take Off Clothing"
tear_off="true">
<menu_item_call
label="Shirt"
- layout="topleft"
name="Shirt">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3470,7 +3034,6 @@
</menu_item_call>
<menu_item_call
label="Pants"
- layout="topleft"
name="Pants">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3481,7 +3044,6 @@
</menu_item_call>
<menu_item_call
label="Shoes"
- layout="topleft"
name="Shoes">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3492,7 +3054,6 @@
</menu_item_call>
<menu_item_call
label="Socks"
- layout="topleft"
name="Socks">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3503,7 +3064,6 @@
</menu_item_call>
<menu_item_call
label="Jacket"
- layout="topleft"
name="Jacket">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3514,7 +3074,6 @@
</menu_item_call>
<menu_item_call
label="Gloves"
- layout="topleft"
name="Gloves">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3525,7 +3084,6 @@
</menu_item_call>
<menu_item_call
label="Undershirt"
- layout="topleft"
name="Menu Undershirt">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3536,7 +3094,6 @@
</menu_item_call>
<menu_item_call
label="Underpants"
- layout="topleft"
name="Menu Underpants">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3547,7 +3104,6 @@
</menu_item_call>
<menu_item_call
label="Skirt"
- layout="topleft"
name="Skirt">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3558,7 +3114,6 @@
</menu_item_call>
<menu_item_call
label="Alpha"
- layout="topleft"
name="Alpha">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3569,7 +3124,6 @@
</menu_item_call>
<menu_item_call
label="Tattoo"
- layout="topleft"
name="Tattoo">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3580,7 +3134,6 @@
</menu_item_call>
<menu_item_call
label="All Clothes"
- layout="topleft"
name="All Clothes">
<menu_item_call.on_click
function="Edit.TakeOff"
@@ -3590,12 +3143,10 @@
<menu
create_jump_keys="true"
label="Help"
- layout="topleft"
name="Help"
tear_off="true">
<menu_item_call
label="Official Linden Blog"
- layout="topleft"
name="Official Linden Blog">
<menu_item_call.on_click
function="PromptShowURL"
@@ -3604,7 +3155,6 @@
</menu_item_call>
<menu_item_call
label="Scripting Portal"
- layout="topleft"
name="Scripting Portal">
<menu_item_call.on_click
function="PromptShowURL"
@@ -3614,12 +3164,10 @@
<menu
create_jump_keys="true"
label="Bug Reporting"
- layout="topleft"
name="Bug Reporting"
tear_off="true">
<menu_item_call
label="Public Issue Tracker"
- layout="topleft"
name="Public Issue Tracker">
<menu_item_call.on_click
function="PromptShowURL"
@@ -3628,18 +3176,15 @@
</menu_item_call>
<menu_item_call
label="Public Issue Tracker Help"
- layout="topleft"
name="Publc Issue Tracker Help">
<menu_item_call.on_click
function="PromptShowURL"
name="PublicIssueTrackerHelp_url"
parameter="WebLaunchPublicIssueHelp,http://wiki.secondlife.com/wiki/Issue_tracker" />
</menu_item_call>
- <menu_item_separator
- layout="topleft" />
+ <menu_item_separator/>
<menu_item_call
label="Bug Reporting 101"
- layout="topleft"
name="Bug Reporing 101">
<menu_item_call.on_click
function="PromptShowURL"
@@ -3648,7 +3193,6 @@
</menu_item_call>
<menu_item_call
label="Security Issues"
- layout="topleft"
name="Security Issues">
<menu_item_call.on_click
function="PromptShowURL"
@@ -3657,7 +3201,6 @@
</menu_item_call>
<menu_item_call
label="QA Wiki"
- layout="topleft"
name="QA Wiki">
<menu_item_call.on_click
function="PromptShowURL"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 8f1812830f..e8ba8c683d 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -249,7 +249,7 @@ Save all changes to clothing/body parts?
Non-friends won't know that you've choosen to ignore their calls and instant messages.
<usetemplate
name="okbutton"
- yestext="Yes"/>
+ yestext="OK"/>
</notification>
<notification
@@ -1036,7 +1036,6 @@ Unable to write file [[FILE]]
type="alertmodal">
Just so you know, your computer does not meet [APP_NAME]&apos;s minimum system requirements. You may experience poor performance. Unfortunately, the [SUPPORT_SITE] can't provide technical support for unsupported system configurations.
-MINSPECS
Visit [_URL] for more information?
<url option="0" name="url">
@@ -2025,6 +2024,28 @@ Would you be my friend?
</notification>
<notification
+ icon="alertmodal.tga"
+ label="Save Outfit"
+ name="SaveOutfitAs"
+ type="alertmodal">
+ Save what I'm wearing as a new Outfit:
+ <form name="form">
+ <input name="message" type="text">
+ [DESC] (new)
+ </input>
+ <button
+ default="true"
+ index="0"
+ name="Offer"
+ text="OK"/>
+ <button
+ index="1"
+ name="Cancel"
+ text="Cancel"/>
+ </form>
+ </notification>
+
+ <notification
icon="alertmodal.tga"
name="RemoveFromFriends"
type="alertmodal">
@@ -2849,11 +2870,11 @@ Leave Group?
icon="alert.tga"
name="ConfirmKick"
type="alert">
-Do you REALLY want to kick all users off the grid?
+Do you REALLY want to kick all Residents off the grid?
<usetemplate
name="okcancelbuttons"
notext="Cancel"
- yestext="Kick All Users"/>
+ yestext="Kick All Residents"/>
</notification>
<notification
@@ -2953,7 +2974,7 @@ You have reached your maximum number of groups. Please leave some group before j
icon="alert.tga"
name="KickUser"
type="alert">
-Kick this user with what message?
+Kick this Resident with what message?
<form name="form">
<input name="message" type="text">
An administrator has logged you off.
@@ -2995,7 +3016,7 @@ An administrator has logged you off.
icon="alert.tga"
name="FreezeUser"
type="alert">
-Freeze this user with what message?
+Freeze this Resident with what message?
<form name="form">
<input name="message" type="text">
You have been frozen. You cannot move or chat. An administrator will contact you via instant message (IM).
@@ -3016,7 +3037,7 @@ You have been frozen. You cannot move or chat. An administrator will contact you
icon="alert.tga"
name="UnFreezeUser"
type="alert">
-Unfreeze this user with what message?
+Unfreeze this Resident with what message?
<form name="form">
<input name="message" type="text">
You are no longer frozen.
@@ -3058,7 +3079,7 @@ Join me in [REGION]
icon="alertmodal.tga"
name="OfferTeleportFromGod"
type="alertmodal">
-God summon user to your location?
+God summon Resident to your location?
<form name="form">
<input name="message" type="text">
Join me in [REGION]
@@ -3112,6 +3133,18 @@ Teleport to [PICK]?
</notification>
<notification
+ icon="alertmodal.tga"
+ name="TeleportToHistoryEntry"
+ type="alertmodal">
+Teleport to [HISTORY_ENTRY]?
+ <usetemplate
+ ignoretext="Confirm that I want to teleport to a history location"
+ name="okcancelignore"
+ notext="Cancel"
+ yestext="Teleport"/>
+ </notification>
+
+ <notification
icon="alert.tga"
label="Message everyone in your Estate"
name="MessageEstate"
@@ -3138,7 +3171,7 @@ Type a short announcement which will be sent to everyone currently in your estat
type="alert">
You are about to change a Linden owned estate (mainland, teen grid, orientation, etc.).
-This is EXTREMELY DANGEROUS because it can fundamentally affect the user experience. On the mainland, it will change thousands of regions and make the spaceserver hiccup.
+This is EXTREMELY DANGEROUS because it can fundamentally affect the Resident experience. On the mainland, it will change thousands of regions and make the spaceserver hiccup.
Proceed?
<usetemplate
@@ -4270,6 +4303,13 @@ The string [STRING_NAME] is missing from strings.xml
type="notifytip">
[MESSAGE]
</notification>
+
+ <notification
+ icon="notifytip.tga"
+ name="IMSystemMessageTip"
+ type="notifytip">
+[MESSAGE]
+ </notification>
<notification
icon="notifytip.tga"
@@ -5104,7 +5144,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you th
icon="notify.tga"
name="TeleportOffered"
type="offer">
-[NAME] has offered to teleport you to their location:
+[NAME_SLURL] has offered to teleport you to their location:
[MESSAGE]
<form name="form">
@@ -5149,7 +5189,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you th
icon="notify.tga"
name="OfferFriendship"
type="offer">
-[NAME] is offering friendship.
+[NAME_SLURL] is offering friendship.
[MESSAGE]
@@ -5295,6 +5335,13 @@ Failed to find [TYPE] named [DESC] in database.
<notification
icon="notify.tga"
+ name="ShareToWebFailed"
+ type="notify">
+ Failed to upload image to web.
+ </notification>
+
+ <notification
+ icon="notify.tga"
name="InvalidWearable"
type="notify">
The item you are trying to wear uses a feature that your Viewer can&apos;t read. Please upgrade your version of [APP_NAME] to wear this item.
@@ -5380,27 +5427,6 @@ Grant this request?
</form>
</notification>
- <notification
- icon="notify.tga"
- name="ScriptToast"
- type="notify">
- [FIRST] [LAST]&apos;s &apos;[TITLE]&apos; is requesting user input.
- <form name="form">
- <button
- index="0"
- name="Open"
- text="Open Dialog"/>
- <button
- index="1"
- name="Ignore"
- text="Ignore"/>
- <button
- index="2"
- name="Block"
- text="Block"/>
- </form>
- </notification>
-
<!--
<notification
icon="notify.tga"
@@ -5850,7 +5876,8 @@ Are you sure you want to close all IMs?
<usetemplate
name="okcancelignore"
notext="Cancel"
- yestext="OK"/>
+ yestext="OK"
+ ignoretext="Confirm before I close all IMs"/>
</notification>
<notification icon="notifytip.tga"
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index 1e2e74f882..876ff9961b 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -69,7 +69,7 @@
name="last_interaction"
text_color="LtGray_50"
value="0s"
- width="24" />
+ width="35" />
<button
follows="right"
height="16"
diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
index 072ea882e6..d3f6695375 100644
--- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
@@ -39,7 +39,13 @@
name="blocked"
tool_tip="List of currently blocked Residents"
top="30"
- width="270" />
+ width="270">
+ <scroll_list.columns
+ name="item_name" />
+ <scroll_list.columns
+ name="item_type"
+ width="96" />
+ </scroll_list>
<button
follows="left|bottom"
height="23"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 4c5d5a1b96..c34a367c32 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -47,6 +47,7 @@
min_height="23"
width="310"
top="4"
+ max_width="320"
min_width="216"
name="chat_bar"
user_resize="false"
@@ -58,9 +59,9 @@
height="28"
layout="topleft"
min_height="28"
- width="100"
+ width="105"
top_delta="0"
- min_width="100"
+ min_width="54"
name="speak_panel"
user_resize="false">
<talk_button
@@ -72,11 +73,16 @@
left="0"
name="talk"
top="5"
- width="100">
+ width="105">
+ <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales.
+ & pad_right is default value for long label which can be right aligned. See EXT-6318 -->
<speak_button
+ halign="center"
name="speak_btn"
label="Speak"
label_selected="Speak"
+ pad_right="22"
+ use_ellipses="true"
/>
<show_button>
<show_button.init_callback
@@ -257,7 +263,7 @@
top="0"
name="chiclet_list_panel"
width="189"
- min_width="60"
+ min_width="95"
user_resize="false"
auto_resize="true">
<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same
@@ -268,7 +274,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
height="24"
layout="topleft"
left="1"
- min_width="60"
+ min_width="95"
name="chiclet_list"
top="7"
chiclet_padding="4"
@@ -324,7 +330,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
min_width="4"
name="DUMMY"
top="0"
- width="5"/>
+ width="4"/>
<layout_panel
auto_resize="false"
follows="right"
@@ -333,8 +339,8 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
min_height="28"
top="0"
name="im_well_panel"
- width="35"
- min_width="35"
+ width="37"
+ min_width="37"
user_resize="false">
<chiclet_im_well
max_displayed_count="99"
@@ -382,22 +388,10 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
layout="topleft"
min_height="28"
top="0"
- left_pad="3"
name="notification_well_panel"
- width="40"
- min_width="40"
+ width="37"
+ min_width="37"
user_resize="false">
- <icon
- auto_resize="false"
- color="0 0 0 0"
- follows="left|right"
- height="10"
- image_name="spacer24.tga"
- layout="topleft"
- left="0"
- min_width="4"
- top="0"
- width="5" />
<chiclet_notification
flash_period="0.25"
follows="right"
@@ -428,17 +422,6 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
function="Button.SetDockableFloaterToggle"
parameter="notification_well_window" />
</button>
- <icon
- auto_resize="false"
- color="0 0 0 0"
- follows="left|right"
- height="10"
- image_name="spacer24.tga"
- layout="topleft"
- left="0"
- min_width="4"
- top="0"
- width="5" />
</chiclet_notification>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
index 250dadd390..9124ad528d 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -21,6 +21,7 @@
top="3"
width="18" />
<text
+ allow_html="false"
allow_scroll="false"
v_pad = "7"
read_only = "true"
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index 34c1923582..e3b331799c 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -22,6 +22,22 @@
name="l$_price">
L$[PRICE]
</panel.string>
+ <panel.string
+ name="click_through_text_fmt">
+ [TELEPORT] teleport, [MAP] map, [PROFILE] profile
+ </panel.string>
+ <panel.string
+ name="date_fmt">
+ [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
+ </panel.string>
+ <panel.string
+ name="auto_renew_on">
+ Enabled
+ </panel.string>
+ <panel.string
+ name="auto_renew_off">
+ Disabled
+ </panel.string>
<button
follows="top|right"
height="23"
@@ -51,11 +67,11 @@
follows="all"
height="502"
layout="topleft"
- left="9"
+ left="10"
top_pad="10"
name="profile_scroll"
reserve_scroll_corner="false"
- width="310">
+ width="312">
<panel
name="scroll_content_panel"
follows="left|top"
@@ -63,18 +79,28 @@
layout="topleft"
top="0"
background_visible="false"
- height="500"
+ height="610"
left="0"
width="285">
+ <panel
+ name="snapshot_panel"
+ layout="topleft"
+ follows="left|top|right"
+ height="197"
+ left="10"
+ top="10"
+ width="275"
+ >
<texture_picker
enabled="false"
follows="left|top|right"
height="197"
layout="topleft"
- left="11"
+ left="0"
name="classified_snapshot"
- top="10"
- width="286" />
+ top="0"
+ width="275" />
+ </panel>
<text_editor
allow_scroll="false"
bg_visible="false"
@@ -93,20 +119,61 @@
v_pad="0"
value="[name]"
use_ellipses="true" />
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="classified_location_label"
+ text_color="white"
+ top_pad="5"
+ value="Location:"
+ width="250" />
<text_editor
allow_scroll="false"
bg_visible="false"
follows="left|top"
h_pad="0"
- height="25"
+ height="30"
layout="topleft"
left="10"
name="classified_location"
read_only="true"
+ top_pad="5"
width="290"
word_wrap="true"
v_pad="0"
value="[loading...]" />
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="content_type_label"
+ text_color="white"
+ top_pad="10"
+ value="Content Type:"
+ width="140" />
+ <icon
+ follows="top|left"
+ height="16"
+ image_name="Parcel_M_Light"
+ layout="topleft"
+ left_pad="0"
+ name="content_type_moderate"
+ top_pad="-11"
+ width="18" />
+ <icon
+ follows="top|left"
+ height="16"
+ image_name="Parcel_PG_Light"
+ layout="topleft"
+ left_delta="0"
+ name="content_type_general"
+ top_delta="0"
+ width="18" />
<text_editor
allow_scroll="false"
bg_visible="false"
@@ -114,13 +181,24 @@
h_pad="0"
height="18"
layout="topleft"
- left="10"
+ left_pad="2"
name="content_type"
read_only="true"
- width="290"
- top_pad="5"
+ width="130"
+ top_delta="1"
v_pad="0"
value="[content type]" />
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="category_label"
+ text_color="white"
+ top_pad="0"
+ value="Category:"
+ width="140" />
<text_editor
allow_html="true"
allow_scroll="false"
@@ -129,23 +207,51 @@
h_pad="0"
height="18"
layout="topleft"
- left="10"
+ left_pad="0"
name="category"
read_only="true"
- width="290"
- top_pad="5"
+ width="150"
+ top_pad="-10"
v_pad="0"
value="[category]" />
- <check_box
- enabled="false"
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="creation_date_label"
+ text_color="white"
+ top_pad="0"
+ value="Creation date:"
+ width="140" />
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
+ follows="left|top"
+ h_pad="0"
+ halign="left"
height="16"
- label="Auto renew each week"
+ layout="topleft"
+ left_pad="0"
+ name="creation_date"
+ read_only="true"
+ top_pad="-10"
+ tool_tip="Creation date"
+ v_pad="0"
+ value="[date]"
+ width="150" />
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
layout="topleft"
left="10"
- name="auto_renew"
+ name="price_for_listing_label"
+ text_color="white"
top_pad="5"
- v_pad="0"
- width="290" />
+ value="Price for listing:"
+ width="140" />
<text_editor
allow_scroll="false"
bg_visible="false"
@@ -154,29 +260,133 @@
halign="left"
height="16"
layout="topleft"
- left="10"
+ left_pad="0"
name="price_for_listing"
read_only="true"
- top_pad="5"
+ top_pad="-10"
tool_tip="Price for listing."
v_pad="0"
+ value="[price]"
width="105" />
+ <layout_stack
+ animate="false"
+ name="descr_stack"
+ layout="topleft"
+ follows="all"
+ orientation="vertical"
+ left="10"
+ top_pad="5"
+ width="290"
+ height="215">
+ <layout_panel
+ auto_resize="false"
+ name="clickthrough_layout_panel"
+ layout="topleft"
+ follows="all"
+ left="0"
+ top="0"
+ width="290"
+ height="16"
+ user_resize="false">
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="0"
+ name="click_through_label"
+ text_color="white"
+ top_pad="0"
+ value="Clicks:"
+ width="140" />
<text_editor
- allow_html="true"
allow_scroll="false"
bg_visible="false"
- follows="left|top|right"
+ follows="left|top"
+ h_pad="0"
+ halign="left"
+ height="16"
+ layout="topleft"
+ left_pad="0"
+ name="click_through_text"
+ read_only="true"
+ top_pad="-10"
+ tool_tip="Click through data"
+ v_pad="0"
+ value="[clicks]"
+ width="150" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ name="price_layout_panel"
+ layout="topleft"
+ follows="all"
+ left="0"
+ top="0"
+ width="290"
+ height="16"
+ user_resize="false">
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="0"
+ name="auto_renew_label"
+ text_color="white"
+ top="0"
+ value="Auto renew:"
+ width="140" />
+ <text
+ height="16"
+ layout="topleft"
+ follows="top|left"
+ left_pad="0"
+ name="auto_renew"
+ top_pad="-10"
+ value="Enabled"
+ width="150" />
+ </layout_panel>
+ <layout_panel
+ name="descr_layout_panel"
+ layout="topleft"
+ follows="all"
+ left="0"
+ top="0"
+ width="290"
+ height="215"
+ user_resize="false">
+ <text
+ auto_resize="false"
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="0"
+ name="classified_desc_label"
+ text_color="white"
+ top="0"
+ value="Description:"
+ width="250" />
+ <text_editor
+ allow_html="true"
+ allow_scroll="true"
+ bg_visible="false"
+ follows="all"
h_pad="0"
height="200"
layout="topleft"
- left="10"
+ left="0"
max_length="1023"
name="classified_desc"
read_only="true"
- width="290"
+ top_pad="7"
+ width="280"
v_pad="0"
value="[description]"
word_wrap="true" />
+ </layout_panel>
+ </layout_stack>
</panel>
</scroll_container>
<panel
diff --git a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
index 1375eb87d9..af3315ebfe 100644
--- a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
@@ -64,6 +64,8 @@
layout="topleft"
left="103"
name="description"
+ textbox.max_length="1024"
+ textbox.label="More"
textbox.show_context_menu="false"
top_pad="0"
width="178"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
index 40647e1b81..1d0c0a02b0 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
@@ -1,33 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_alpha_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="180"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="400"
left="10"
layout="topleft"
name="avatar_alpha_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
follows="left|top"
- height="80"
+ height="100"
label="Lower Alpha"
layout="topleft"
- left="10"
+ left="30"
name="Lower Alpha"
tool_tip="Click to choose a picture"
top="10"
- width="64" />
+ width="94" />
<check_box
control_name="LowerAlphaTextureInvisible"
follows="left"
@@ -41,14 +46,14 @@
can_apply_immediately="true"
default_image_name="Default"
follows="left|top"
- height="80"
+ height="100"
label="Upper Alpha"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Upper Alpha"
tool_tip="Click to choose a picture"
top="10"
- width="64" />
+ width="94" />
<check_box
control_name="UpperAlphaTextureInvisible"
follows="left"
@@ -62,14 +67,14 @@
can_apply_immediately="true"
default_image_name="Default"
follows="left|top"
- height="80"
+ height="100"
label="Head Alpha"
layout="topleft"
- left_pad="10"
+ left="30"
name="Head Alpha"
tool_tip="Click to choose a picture"
- top="10"
- width="64" />
+ top="120"
+ width="94" />
<check_box
control_name="HeadAlphaTextureInvisible"
follows="left"
@@ -83,14 +88,14 @@
can_apply_immediately="true"
default_image_name="Default"
follows="left|top"
- height="80"
+ height="100"
label="Eye Alpha"
layout="topleft"
- left="10"
+ left_pad="20"
name="Eye Alpha"
tool_tip="Click to choose a picture"
- top="100"
- width="64" />
+ top="120"
+ width="94" />
<check_box
control_name="Eye AlphaTextureInvisible"
follows="left"
@@ -104,14 +109,14 @@
can_apply_immediately="true"
default_image_name="Default"
follows="left|top"
- height="80"
+ height="100"
label="Hair Alpha"
layout="topleft"
- left_pad="10"
+ left="30"
name="Hair Alpha"
tool_tip="Click to choose a picture"
- top_delta="-4"
- width="64" />
+ top="230"
+ width="94" />
<check_box
control_name="HairAlphaTextureInvisible"
follows="left"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
index d31e7d2ed8..7383edf63d 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -16,6 +16,12 @@
name="location_notice">
(will update after save)
</panel.string>
+ <string name="publish_label">
+ Publish
+ </string>
+ <string name="save_label">
+ Save
+ </string>
<button
follows="top|right"
height="23"
@@ -42,16 +48,16 @@
Edit Classified
</text>
<scroll_container
- color="DkGray2"
- follows="all"
- height="502"
- layout="topleft"
- left="8"
- top_pad="10"
- name="profile_scroll"
- reserve_scroll_corner="false"
- opaque="true"
- width="312">
+ color="DkGray2"
+ follows="all"
+ height="502"
+ layout="topleft"
+ left="8"
+ top_pad="10"
+ name="profile_scroll"
+ reserve_scroll_corner="false"
+ opaque="true"
+ width="312">
<panel
name="scroll_content_panel"
follows="left|top"
@@ -59,27 +65,36 @@
layout="topleft"
top="0"
background_visible="false"
- height="600"
+ height="690"
left="0"
width="285">
- <texture_picker
- follows="left|top|right"
- height="197"
- width="272"
- layout="topleft"
- top="10"
- left="11"
- name="classified_snapshot" />
- <icon
+ <panel
+ name="snapshot_panel"
+ layout="topleft"
+ follows="left|top|right"
+ height="197"
+ left="10"
+ top="10"
+ width="272">
+ <texture_picker
+ follows="left|top|right"
+ height="197"
+ width="272"
+ layout="topleft"
+ top="0"
+ left="0"
+ name="classified_snapshot" />
+ <icon
height="197"
image_name="spacer24.tga"
layout="topleft"
name="edit_icon"
label=""
tool_tip="Click to select an image"
- top="10"
- left="11"
- width="286" />
+ top="0"
+ left="0"
+ width="272" />
+ </panel>
<text
type="string"
length="1"
@@ -153,7 +168,7 @@
type="string"
length="1"
follows="left|top"
- height="50"
+ height="30"
layout="topleft"
left="10"
name="classified_location"
@@ -171,7 +186,18 @@
left="10"
top_pad="5"
name="set_to_curr_location_btn"
- width="156" />
+ width="200" />
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="category_label"
+ text_color="white"
+ top_pad="15"
+ value="Category:"
+ width="250" />
<combo_box
follows="left|top"
height="23"
@@ -180,25 +206,63 @@
name="category"
top_pad="5"
width="156" />
- <combo_box
- allow_text_entry="false"
- follows="left|top"
- height="23"
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
left="10"
- name="content_type"
+ name="content_type_label"
+ text_color="white"
+ top_pad="15"
+ value="Content type:"
+ width="250" />
+ <icons_combo_box
+ follows="left|top"
+ height="23"
+ label="General Content"
+ layout="topleft"
+ left="10"
+ name="content_type"
top_pad="5"
width="156">
- <combo_item
- name="mature_ci"
- value="Mature">
- Moderate Content
- </combo_item>
- <combo_item
- name="pg_ci"
- value="PG">
- General Content
- </combo_item>
- </combo_box>
+ <icons_combo_box.drop_down_button
+ image_overlay="Parcel_PG_Light"
+ image_overlay_alignment="left"
+ imgoverlay_label_space="3"
+ pad_left="3"/>
+ <icons_combo_box.item
+ label="Moderate Content"
+ name="mature_ci"
+ value="Mature">
+ <item.columns
+ halign="center"
+ type="icon"
+ value="Parcel_M_Light"
+ width="20"/>
+ </icons_combo_box.item>
+ <icons_combo_box.item
+ label="General Content"
+ name="pg_ci"
+ value="PG">
+ <item.columns
+ halign="center"
+ type="icon"
+ value="Parcel_PG_Light"
+ width="20"/>
+ </icons_combo_box.item>
+ </icons_combo_box>
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="price_for_listing_label"
+ text_color="white"
+ top_pad="15"
+ value="Price for listing:"
+ width="250" />
<spinner
decimal_digits="0"
follows="left|top"
@@ -223,9 +287,9 @@
layout="topleft"
left="10"
name="auto_renew"
- top_pad="5"
+ top_pad="15"
width="250" />
- </panel>
+ </panel>
</scroll_container>
<panel
follows="left|right|bottom"
@@ -239,7 +303,7 @@
<button
follows="bottom|left"
height="23"
- label="Save"
+ label="[LABEL]"
layout="topleft"
name="save_changes_btn"
left="0"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
index c514054c41..f11ef43c76 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_eyes_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_eye_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -23,31 +28,49 @@
height="80"
label="Iris"
layout="topleft"
- left="8"
+ left="10"
name="Iris"
tool_tip="Click to choose a picture"
- top_pad="10"
+ top="10"
width="64" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
- <accordion_tab
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
+ <accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="eyes_main_tab"
title="Eyes">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="eyes_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
index 7aca40e8d9..7d8eed5085 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_gloves_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_gloves_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -34,31 +39,49 @@
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open color picker"
top="10"
width="64" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="gloves_main_tab"
title="Gloves">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="gloves_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_hair.xml b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
index e7d1c05301..cd81aa2c4f 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_hair.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_hair_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_hair_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -23,26 +28,43 @@
height="80"
label="Texture"
layout="topleft"
- left="8"
+ left="10"
name="Texture"
tool_tip="Click to choose a picture"
top="10"
width="64" />
</panel>
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
<accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="hair_color_tab"
title="Color">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="hair_color_param_list"
top="0"
@@ -50,11 +72,13 @@
</accordion_tab>
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="hair_style_tab"
title="Style">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="hair_style_param_list"
top="0"
@@ -62,11 +86,13 @@
</accordion_tab>
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="hair_eyebrows_tab"
title="Eyebrows">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="hair_eyebrows_param_list"
top="0"
@@ -74,16 +100,19 @@
</accordion_tab>
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="hair_facial_tab"
title="Facial">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="hair_facial_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
index ed92b1e0f8..ba03865937 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_jacket_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_jacket_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -23,11 +28,11 @@
height="80"
label="Upper Fabric"
layout="topleft"
- left="10"
+ left="25"
name="Upper Fabric"
tool_tip="Click to choose a picture"
top="10"
- width="64" />
+ width="74" />
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -35,42 +40,60 @@
height="80"
label="Lower Fabric"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Lower Fabric"
tool_tip="Click to choose a picture"
top="10"
- width="64" />
+ width="74" />
<color_swatch
can_apply_immediately="true"
follows="left|top"
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open color picker"
top="10"
- width="64" />
+ width="74" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="jacket_main_tab"
title="Jacket">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="jacket_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pants.xml b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
index b764188e04..5b02d1f968 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pants.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_pants_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_pants_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -34,31 +39,49 @@
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open color picker"
top="10"
width="64" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="pants_main_tab"
title="Pants">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="pants_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index 657e369beb..08ee0306dd 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -12,6 +12,10 @@
help_topic="profile_edit_pick"
top="0"
width="333">
+ <panel.string
+ name="location_notice">
+ (will update after save)
+ </panel.string>
<button
follows="top|right"
height="23"
@@ -164,7 +168,7 @@
left="8"
top_pad="0"
name="set_to_curr_location_btn"
- width="156" />
+ width="200" />
</panel>
</scroll_container>
<panel
@@ -179,7 +183,7 @@
<button
follows="bottom|left"
height="23"
- label="Save [WHAT]"
+ label="Save Pick"
layout="topleft"
name="save_changes_btn"
left="0"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 26be8440e7..dff2b9a214 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -146,7 +146,7 @@
layout="topleft"
left="123"
top="25"
- max_length="512"
+ max_length="511"
name="sl_description_edit"
width="157"
word_wrap="true">
@@ -200,7 +200,7 @@
height="102"
layout="topleft"
left="123"
- max_length="512"
+ max_length="254"
top="157"
name="fl_description_edit"
width="157"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shape.xml b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
index 45c4b92338..e1c574001a 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
@@ -1,38 +1,43 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_shape_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="top|left"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
height="50"
left="10"
layout="topleft"
name="avatar_sex_panel"
- top="10"
- width="293" >
+ top="0"
+ width="313" >
<text
follows="top|left"
height="16"
layout="topleft"
left="10"
name="gender_text"
- width="303">
+ width="313">
Gender:
</text>
<radio_group
- follows="all"
+ follows="left|top|right"
left="10"
- height="34"
+ height="28"
layout="topleft"
name="sex_radio"
top_pad="3"
- width="200" >
+ width="303" >
<radio_item
follows="all"
height="16"
@@ -51,21 +56,41 @@
width="82" />
</radio_group>
</panel>
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="345"
+ label="Shirt"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
<accordion
- follows="left|top|right|bottom"
- height ="330"
- left="10"
+ layout="topleft"
+ follows="all"
+ height ="345"
+ left="0"
name="wearable_accordion"
- top_pad="10"
- width="303">
+ top="0"
+ single_expansion="true"
+ fit_parent="false"
+ width="313">
<accordion_tab
layout="topleft"
min_height="150"
name="shape_body_tab"
+ fit_panel="false"
title="Body">
<scrolling_panel_list
+ layout="topleft"
follows="all"
left="0"
+ height="300"
name="shape_body_param_list"
top="0"
width="303" />
@@ -73,11 +98,13 @@
<accordion_tab
layout="topleft"
min_height="150"
+ fit_panel="false"
name="shape_head_tab"
title="Head">
- <scrolling_panel_list
+ <scrolling_panel_list
+ layout="topleft"
follows="all"
- left="0"
+ left="10"
name="shape_head_param_list"
top="0"
width="303" />
@@ -85,9 +112,11 @@
<accordion_tab
layout="topleft"
min_height="150"
+ fit_panel="false"
name="shape_eyes_tab"
title="Eyes">
- <scrolling_panel_list
+ <scrolling_panel_list
+ layout="topleft"
follows="all"
left="0"
name="shape_eyes_param_list"
@@ -97,9 +126,11 @@
<accordion_tab
layout="topleft"
min_height="150"
+ fit_panel="false"
name="shape_ears_tab"
title="Ears">
- <scrolling_panel_list
+ <scrolling_panel_list
+ layout="topleft"
follows="all"
left="0"
name="shape_ears_param_list"
@@ -110,8 +141,10 @@
layout="topleft"
min_height="150"
name="shape_nose_tab"
+ fit_panel="false"
title="Nose">
- <scrolling_panel_list
+ <scrolling_panel_list
+ layout="topleft"
follows="all"
left="0"
name="shape_nose_param_list"
@@ -122,8 +155,10 @@
layout="topleft"
min_height="150"
name="shape_mouth_tab"
+ fit_panel="false"
title="Mouth">
- <scrolling_panel_list
+ <scrolling_panel_list
+ layout="topleft"
follows="all"
left="0"
name="shape_mouth_param_list"
@@ -134,8 +169,10 @@
layout="topleft"
min_height="150"
name="shape_chin_tab"
+ fit_panel="false"
title="Chin">
- <scrolling_panel_list
+ <scrolling_panel_list
+ layout="topleft"
follows="all"
left="0"
name="shape_chin_param_list"
@@ -146,8 +183,10 @@
layout="topleft"
min_height="150"
name="shape_torso_tab"
+ fit_panel="false"
title="Torso">
- <scrolling_panel_list
+ <scrolling_panel_list
+ layout="topleft"
follows="all"
left="0"
name="shape_torso_param_list"
@@ -158,8 +197,10 @@
layout="topleft"
min_height="150"
name="shape_legs_tab"
+ fit_panel="false"
title="Legs">
- <scrolling_panel_list
+ <scrolling_panel_list
+ layout="topleft"
follows="all"
left="0"
name="shape_legs_param_list"
@@ -167,5 +208,6 @@
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
index 4b7235545f..7da8de4c0b 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_shirt_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_shirt_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -34,31 +39,49 @@
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open color picker"
top="10"
width="64" />
</panel>
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
<accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
name="wearable_accordion"
- top_pad="10"
- width="303">
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="shirt_main_tab"
title="Shirt">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="shirt_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
index e886afa010..84fe26f7f6 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_shoes_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_shoes_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -34,31 +39,49 @@
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open color picker"
top="10"
width="64" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="shoes_main_tab"
title="Shoes">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="shoes_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skin.xml b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
index 918606b54c..b5c8c95473 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_skin_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_skin_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
allow_no_texture="true"
can_apply_immediately="true"
@@ -24,7 +29,7 @@
height="80"
label="Head Tattoos"
layout="topleft"
- left="10"
+ left="25"
name="Head Tattoos"
tool_tip="Click to choose a picture"
top="10"
@@ -37,7 +42,7 @@
height="80"
label="Upper Tattoos"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Upper Tattoos"
tool_tip="Click to choose a picture"
top="10"
@@ -50,26 +55,43 @@
height="80"
label="Lower Tattoos"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Lower Tattoos"
tool_tip="Click to choose a picture"
top="10"
width="74" />
</panel>
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
<accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
+ layout="topleft"
+ follows="all"
+ height ="300"
+ left="0"
name="wearable_accordion"
- top_pad="10"
- width="303">
+ top="0"
+ single_expansion="true"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="skin_color_tab"
title="Skin Color">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="skin_color_param_list"
top="0"
@@ -77,11 +99,13 @@
</accordion_tab>
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="skin_face_tab"
title="Face Detail">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="skin_face_param_list"
top="0"
@@ -89,11 +113,13 @@
</accordion_tab>
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="skin_makeup_tab"
title="Makeup">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="skin_makeup_param_list"
top="0"
@@ -101,16 +127,19 @@
</accordion_tab>
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="skin_body_tab"
title="Body Detail">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="skin_body_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
index 6cccab1843..16f6950bd5 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_skirt_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_skirt_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -34,31 +39,49 @@
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open color picker"
top="10"
width="64" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="skirt_main_tab"
title="Skirt">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="skirt_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_socks.xml b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
index fc7de00714..e4f916703b 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_socks.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_socks_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_socks_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -34,31 +39,49 @@
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open color picker"
top="10"
width="64" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="socks_main_tab"
title="Socks">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="socks_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
index b214cd3de0..ed990eb095 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
@@ -1,57 +1,62 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_tattoo_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="400"
left="10"
layout="topleft"
name="avatar_tattoo_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
follows="left|top"
- height="80"
+ height="100"
label="Head Tattoo"
layout="topleft"
- left="10"
+ left="30"
name="Head Tattoo"
tool_tip="Click to choose a picture"
top="10"
- width="64" />
+ width="94" />
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
follows="left|top"
- height="80"
+ height="100"
label="Upper Tattoo"
layout="topleft"
- left_pad="10"
+ left_pad="30"
name="Upper Tattoo"
tool_tip="Click to choose a picture"
top="10"
- width="64" />
+ width="94" />
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
follows="left|top"
- height="80"
+ height="100"
label="Lower Tattoo"
layout="topleft"
- left_pad="10"
+ left="30"
name="Lower Tattoo"
tool_tip="Click to choose a picture"
- top="10"
- width="64" />
+ top_pad="10"
+ width="94" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
index 03e0bb70ef..d43497c943 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_underpants_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_underpants_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -34,31 +39,49 @@
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open color picker"
top="10"
width="64" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="underpants_main_tab"
title="Underpants">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="underpants_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
index 20c56142fb..45c6ef4526 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
+ background_visible="true"
follows="all"
height="400"
layout="topleft"
- left="10"
+ left="0"
name="edit_undershirt_panel"
top_pad="10"
- width="313" >
+ width="333" >
<panel
- border="true"
- follows="left|top|right"
- height="100"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
+ height="90"
left="10"
layout="topleft"
name="avatar_undershirt_color_panel"
top="0"
- width="293" >
+ width="313" >
<texture_picker
can_apply_immediately="true"
default_image_name="Default"
@@ -34,31 +39,49 @@
height="80"
label="Color/Tint"
layout="topleft"
- left_pad="10"
+ left_pad="20"
name="Color/Tint"
tool_tip="Click to open Color Picker"
top="10"
width="64" />
</panel>
- <accordion
- follows="left|top|right|bottom"
- height ="340"
- left="10"
- name="wearable_accordion"
- top_pad="10"
- width="303">
+ <panel
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ height="300"
+ layout="topleft"
+ left="10"
+ name="accordion_panel"
+ top_pad="10"
+ width="313">
+ <accordion
+ follows="all"
+ height ="300"
+ layout="topleft"
+ left="0"
+ name="wearable_accordion"
+ single_expansion="true"
+ top="0"
+ width="313">
<accordion_tab
layout="topleft"
+ fit_panel="false"
min_height="150"
name="undershirt_main_tab"
title="Undershirt">
<scrolling_panel_list
follows="all"
+ layout="topleft"
left="0"
name="undershirt_main_param_list"
top="0"
width="303" />
</accordion_tab>
</accordion>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index f76a56bda4..dc2f085356 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -150,8 +150,12 @@ left="0"
value="Editing Shape"
width="270" />
<panel
- border="true"
- follows="top|left"
+ border="false"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ follows="top|left|right"
height="60"
label="Shirt"
layout="topleft"
@@ -160,7 +164,7 @@ left="0"
top_pad="10"
width="313">
<text
- follows="top|left"
+ follows="top|left|right"
height="16"
layout="topleft"
left="10"
@@ -335,30 +339,76 @@ left="0"
visible="false"
width="333" />
</panel>
+ <panel
+ follows="left|right|bottom"
+ height="38"
+ label="gear_buttom_panel"
+ layout="bottom|left|right"
+ left="0"
+ bottom="25"
+ name="gear_buttom_panel"
+ width="333">
+ <button
+ follows="bottom|left"
+ tool_tip="Options"
+ height="18"
+ image_disabled="OptionsMenu_Disabled"
+ image_selected="OptionsMenu_Press"
+ image_unselected="OptionsMenu_Off"
+ layout="topleft"
+ left="10"
+ name="friends_viewsort_btn"
+ top="10"
+ width="18" />
+ <button
+ follows="bottom|left"
+ height="18"
+ image_selected="AddItem_Press"
+ image_unselected="AddItem_Off"
+ image_disabled="AddItem_Disabled"
+ layout="topleft"
+ left_pad="10"
+ name="add_btn"
+ tool_tip="TODO"
+ width="18" />
+ <button
+ follows="bottom|left"
+ height="18"
+ image_selected="TrashItem_Press"
+ image_unselected="TrashItem_Off"
+ image_disabled="TrashItem_Disabled"
+ layout="topleft"
+ left_pad="10"
+ right="-10"
+ name="del_btn"
+ tool_tip="TODO"
+ top_delta="0"
+ width="18" />
+ </panel>
<panel
- follows="all"
+ follows="bottom|left|right"
height="25"
layout="bottom|left|right"
left="0"
name="button_panel"
- top_pad="10"
+ bottom="5"
width="333" >
<button
follows="bottomleft"
layout="topleft"
height="23"
label="Save As"
- left="10"
+ left="8"
name="save_as_button"
top="0"
- width="100" />
+ width="153" />
<button
follows="bottomleft"
layout="topleft"
height="23"
label="Revert"
- left_pad="10"
+ left_pad="7"
name="revert_button"
- width="100" />
+ width="153" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index f913c58cc9..9341d433e8 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -241,14 +241,17 @@ Hover your mouse over the options for more help.
tool_tip="Sets whether your group contains information rated as Moderate"
top_pad="4"
width="190">
+ <combo_item name="select_mature" value="Select">
+ - Select Mature -
+ </combo_item>
<combo_box.item
- label="General Content"
- name="pg"
- value="Not Mature" />
- <combo_box.item
label="Moderate Content"
name="mature"
value="Mature" />
+ <combo_box.item
+ label="General Content"
+ name="pg"
+ value="Not Mature" />
</combo_box>
<check_box
follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index 4e57b428bd..789d69bc68 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -44,11 +44,16 @@ background_visible="true"
tab_stop="false"
top="2"
width="23" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
+ read_only = "true"
layout="topleft"
name="group_name"
+ v_pad="0"
value="(Loading...)"
font="SansSerifHugeBold"
+ h_pad="0"
height="26"
left_pad="10"
text_color="LtGray"
@@ -93,6 +98,7 @@ background_visible="true"
left="0"
top="0"
single_expansion="true"
+ fit_parent="true"
follows="all"
layout="topleft"
name="groups_accordion">
@@ -100,17 +106,8 @@ background_visible="true"
expanded="true"
layout="topleft"
name="group_general_tab"
- title="General">
- <scroll_container
- color="DkGray2"
- follows="all"
- layout="topleft"
- left="0"
- name="profile_scroll"
- opaque="true"
- height="604"
- width="304"
- top="0">
+ title="General"
+ fit_panel="false">
<panel
border="false"
class="panel_group_general"
@@ -121,24 +118,13 @@ background_visible="true"
help_topic="group_general_tab"
name="group_general_tab_panel"
top="0" />
- </scroll_container>
</accordion_tab>
<accordion_tab
expanded="false"
layout="topleft"
name="group_roles_tab"
- title="Roles">
- <scroll_container
- color="DkGray2"
- follows="all"
- layout="topleft"
- left="0"
- name="profile_scroll"
- opaque="true"
- height="680"
- width="304"
- top="0">
-
+ title="Roles"
+ fit_panel="false">
<panel
border="false"
class="panel_group_roles"
@@ -148,24 +134,13 @@ background_visible="true"
left="0"
name="group_roles_tab_panel"
top="0" />
- </scroll_container>
</accordion_tab>
<accordion_tab
expanded="false"
layout="topleft"
name="group_notices_tab"
- title="Notices">
- <scroll_container
- color="DkGray2"
- follows="all"
- layout="topleft"
- left="0"
- name="profile_scroll"
- opaque="true"
- height="530"
- width="304"
- top="0">
-
+ title="Notices"
+ fit_panel="false">
<panel
border="false"
class="panel_group_notices"
@@ -176,24 +151,13 @@ background_visible="true"
help_topic="group_notices_tab"
name="group_notices_tab_panel"
top="0" />
- </scroll_container>
</accordion_tab>
<accordion_tab
expanded="false"
layout="topleft"
name="group_land_tab"
- title="Land/Assets">
- <scroll_container
- color="DkGray2"
- follows="all"
- layout="topleft"
- left="0"
- name="profile_scroll"
- opaque="true"
- height="500"
- width="304"
- top="0">
-
+ title="Land/Assets"
+ fit_panel="false">
<panel
border="false"
class="panel_group_land_money"
@@ -203,7 +167,6 @@ background_visible="true"
left="0"
name="group_land_tab_panel"
top="0" />
- </scroll_container>
</accordion_tab>
</accordion>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_invite.xml b/indra/newview/skins/default/xui/en/panel_group_invite.xml
index 48083b7677..15a3191bdf 100644
--- a/indra/newview/skins/default/xui/en/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_invite.xml
@@ -86,7 +86,7 @@
left="4"
name="ok_button"
top="356"
- width="130" />
+ width="135" />
<button
height="20"
label="Cancel"
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index 731b3c119c..479629f6ea 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -131,6 +131,7 @@ Maximum 200 per group daily
Subject:
</text>
<line_editor
+ follows="left|top|right"
border_style="line"
border_thickness="1"
height="16"
@@ -153,6 +154,7 @@ Maximum 200 per group daily
Message:
</text>
<text_editor
+ follows="left|top|right"
height="90"
layout="topleft"
left_pad="3"
@@ -173,6 +175,7 @@ Maximum 200 per group daily
Attach:
</text>
<line_editor
+ follows="left|top|right"
enabled="false"
height="19"
layout="topleft"
@@ -222,7 +225,7 @@ Maximum 200 per group daily
label="Send"
label_selected="Send"
layout="topleft"
- right="-10"
+ right="-25"
top_pad="10"
name="send_notice"
width="100" />
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 19c0da4f08..0eb5c47f85 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -385,7 +385,7 @@ things in this group. There&apos;s a broad variety of Abilities.
left="0"
follows="left|top|right"
right="-1"
- max_length="295"
+ max_length="20"
name="role_name"
top_pad="0"
width="300">
@@ -408,7 +408,7 @@ things in this group. There&apos;s a broad variety of Abilities.
left="0"
follows="left|top|right"
right="-1"
- max_length="295"
+ max_length="20"
name="role_title"
top_pad="0"
width="300">
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 28c4adf67c..29c6a17c31 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -16,7 +16,7 @@
border_size="0"
clip="false"
follows="all"
- height="168"
+ height="183"
layout="topleft"
left="5"
name="button_stack"
@@ -111,7 +111,7 @@
layout="topleft"
min_height="25"
width="100"
- name="share_btn_panel"
+ name="pay_btn_panel"
user_resize="false">
<button
auto_resize="true"
@@ -150,7 +150,7 @@
<button
follows="left|top|right"
height="23"
- label="Leave Call"
+ label="End Call"
name="end_call_btn"
width="100" />
</layout_panel>
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index 66070c028d..31ba539c44 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -89,13 +89,13 @@
<panel
bg_alpha_color="DkGray2"
follows="left|top|right"
- height="700"
+ height="630"
layout="topleft"
left="0"
min_height="300"
name="scrolling_panel"
top="0"
- width="285">
+ width="310">
<texture_picker
enabled="false"
follows="left|top|right"
@@ -133,6 +133,7 @@
layout="topleft"
left="10"
name="description"
+ textbox.label="More"
top_pad="10"
value="Du waltz die spritz"
width="280" />
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index fdc26b5c46..a7e87f2a1e 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -3,22 +3,25 @@
name="Landmarks"
top="0"
height="400"
- layout="topleft"
+ layout="topleft"
left="0"
- width="380"
+ width="313"
help_topic="panel_landmarks"
border="false"
background_visible="true"
- bg_alpha_color="DkGray2"
- follows="left|top|right|bottom">
+ bg_alpha_color="DkGray"
+ follows="all">
<accordion
- follows="left|top|right|bottom"
- height="368"
+ background_visible="true"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
+ follows="all"
+ height="373"
layout="topleft"
- left="0"
+ left="3"
name="landmarks_accordion"
top="0"
- width="380">
+ width="307">
<accordion_tab
layout="topleft"
name="tab_favorites"
@@ -27,13 +30,13 @@
allow_multi_select="true"
border="false"
bottom="0"
- follows="left|top|right|bottom"
+ follows="all"
height="126"
left="0"
mouse_opaque="true"
name="favorites_list"
start_folder="Favorites"
- width="380"/>
+ width="307"/>
</accordion_tab>
<accordion_tab
layout="topleft"
@@ -43,13 +46,13 @@
allow_multi_select="true"
border="false"
bottom="0"
- follows="left|top|right|bottom"
+ follows="all"
height="126"
left="0"
mouse_opaque="true"
name="landmarks_list"
start_folder="Landmarks"
- width="380"/>
+ width="307"/>
</accordion_tab>
<accordion_tab
layout="topleft"
@@ -59,13 +62,13 @@
allow_multi_select="true"
border="false"
bottom="0"
- follows="left|top|right|bottom"
+ follows="all"
height="126"
left="0"
mouse_opaque="true"
name="my_inventory_list"
start_folder="My Inventory"
- width="380"/>
+ width="307"/>
</accordion_tab>
<accordion_tab
layout="topleft"
@@ -75,61 +78,70 @@
allow_multi_select="true"
border="false"
bottom="0"
- follows="left|top|right|bottom"
- height="120"
+ follows="all"
+ height="126"
left="0"
mouse_opaque="true"
name="library_list"
start_folder="LIBRARY"
- width="380"/>
+ width="313"/>
</accordion_tab>
</accordion>
<panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
+ background_visible="true"
bevel_style="none"
bottom="0"
follows="left|right|bottom"
- height="38"
+ height="27"
layout="bottomleft"
- left="0"
+ left="3"
name="bottom_panel"
- width="380">
+ width="313">
<button
follows="bottom|left"
tool_tip="Show additional options"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
layout="topleft"
- left="10"
+ left="0"
name="options_gear_btn"
- top="14"
- width="18" />
+ top="1"
+ width="31" />
<button
follows="bottom|left"
- height="18"
- image_selected="AddItem_Press"
- image_unselected="AddItem_Off"
- image_disabled="AddItem_Disabled"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="AddItem_Off"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
layout="topleft"
- left_pad="10"
+ left_pad="1"
name="add_btn"
tool_tip="Add new landmark"
- width="18" />
+ width="31" />
+ <icon
+ follows="bottom|left"
+ height="25"
+ image_name="Toolbar_Middle_Off"
+ layout="topleft"
+ left_pad="1"
+ name="dummy_icon"
+ width="209"
+ />
<dnd_button
- follows="bottom|right"
- height="18"
- image_selected="TrashItem_Press"
- image_unselected="TrashItem_Off"
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Right_Over"
+ image_overlay="TrashItem_Off"
+ image_selected="Toolbar_Right_Selected"
+ image_unselected="Toolbar_Right_Off"
layout="topleft"
- right="-8"
+ left_pad="1"
name="trash_btn"
tool_tip="Remove selected landmark"
- top="14"
- width="18" />
+ width="31" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 627e616af5..01adc00e1a 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -64,7 +64,6 @@ First name:
</text>
<line_editor
follows="left|bottom"
-handle_edit_keys_directly="true"
height="22"
label="First"
left_delta="0"
@@ -85,7 +84,6 @@ top_pad="0"
Last name: </text>
<line_editor
follows="left|bottom"
-handle_edit_keys_directly="true"
height="22"
label="Last"
max_length="31"
@@ -106,7 +104,6 @@ top="20"
</text>
<line_editor
follows="left|bottom"
-handle_edit_keys_directly="true"
height="22"
max_length="16"
name="password_edit"
@@ -204,7 +201,7 @@ height="16"
name="forgot_password_text"
top_pad="12"
right="-10"
- width="180">
+ width="210">
Forgot your name or password?
</text>
<text
@@ -216,7 +213,7 @@ height="16"
name="login_help"
top_pad="2"
right="-10"
- width="180">
+ width="190">
Need help logging in? </text>
<!-- <text
follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index e6f67078d1..1b04d01abf 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -9,479 +9,151 @@
min_width="240"
name="main inventory panel"
width="330">
- <panel.string
- name="Title">
- Things
- </panel.string>
- <menu_bar
- bg_visible="false"
- follows="left|top|right"
- height="20"
- layout="topleft"
- left="10"
- mouse_opaque="false"
- name="Inventory Menu"
- top="0"
- visible="true"
- width="290">
- <menu
- height="101"
- label="File"
- layout="topleft"
- left="0"
- mouse_opaque="false"
- name="File"
- tear_off="true"
- top="-117"
- width="128">
- <menu_item_call
- label="Open"
- layout="topleft"
- name="Open">
- <menu_item_call.on_click
- function="Inventory.DoToSelected"
- parameter="open" />
- </menu_item_call>
- <menu
- create_jump_keys="true"
- label="Upload"
- layout="topleft"
- name="upload"
- tear_off="true">
- <menu_item_call
- label="Image (L$[COST])..."
- layout="topleft"
- name="Upload Image"
- shortcut="control|U">
- <menu_item_call.on_click
- function="File.UploadImage"
- parameter="" />
- <menu_item_call.on_enable
- function="File.EnableUpload" />
- </menu_item_call>
- <menu_item_call
- label="Sound (L$[COST])..."
- layout="topleft"
- name="Upload Sound">
- <menu_item_call.on_click
- function="File.UploadSound"
- parameter="" />
- <menu_item_call.on_enable
- function="File.EnableUpload" />
- </menu_item_call>
- <menu_item_call
- label="Animation (L$[COST])..."
- layout="topleft"
- name="Upload Animation">
- <menu_item_call.on_click
- function="File.UploadAnim"
- parameter="" />
- <menu_item_call.on_enable
- function="File.EnableUpload" />
- </menu_item_call>
- <menu_item_call
- label="Bulk (L$[COST] per file)..."
- layout="topleft"
- name="Bulk Upload">
- <menu_item_call.on_click
- function="File.UploadBulk"
- parameter="" />
- </menu_item_call>
- <menu_item_separator
- layout="topleft" />
- </menu>
- <menu_item_separator
- layout="topleft" />
- <menu_item_call
- label="New Window"
- layout="topleft"
- name="New Window">
- <menu_item_call.on_click
- function="Inventory.NewWindow" />
- </menu_item_call>
- <menu_item_separator
- layout="topleft"
- name="separator2" />
- <menu_item_call
- label="Show Filters"
- layout="topleft"
- name="Show Filters">
- <menu_item_call.on_click
- function="Inventory.ShowFilters" />
- </menu_item_call>
- <menu_item_call
- label="Reset Filters"
- layout="topleft"
- name="Reset Current">
- <menu_item_call.on_click
- function="Inventory.ResetFilters" />
- </menu_item_call>
- <menu_item_call
- label="Close All Folders"
- layout="topleft"
- name="Close All Folders">
- <menu_item_call.on_click
- function="Inventory.CloseAllFolders" />
- </menu_item_call>
- <menu_item_separator
- layout="topleft"
- name="separator3" />
- <menu_item_call
- label="Empty Trash"
- layout="topleft"
- name="Empty Trash">
- <menu_item_call.on_click
- function="Inventory.EmptyTrash" />
- </menu_item_call>
- <menu_item_call
- label="Empty Lost And Found"
- layout="topleft"
- name="Empty Lost And Found">
- <menu_item_call.on_click
- function="Inventory.EmptyLostAndFound" />
- </menu_item_call>
- </menu>
- <menu
- height="121"
- label="Create"
- layout="topleft"
- left="0"
- mouse_opaque="false"
- name="Create"
- tear_off="true"
- top="-201"
- width="121">
- <menu_item_call
- label="New Folder"
- layout="topleft"
- name="New Folder">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="category" />
- </menu_item_call>
- <menu_item_call
- label="New Script"
- layout="topleft"
- name="New Script">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="lsl" />
- </menu_item_call>
- <menu_item_call
- label="New Notecard"
- layout="topleft"
- name="New Note">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="notecard" />
- </menu_item_call>
- <menu_item_call
- label="New Gesture"
- layout="topleft"
- name="New Gesture">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="gesture" />
- </menu_item_call>
- <menu
- height="175"
- label="New Clothes"
- layout="topleft"
- left_delta="0"
- mouse_opaque="false"
- name="New Clothes"
- top_pad="514"
- width="125">
- <menu_item_call
- label="New Shirt"
- layout="topleft"
- name="New Shirt">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="shirt" />
- </menu_item_call>
- <menu_item_call
- label="New Pants"
- layout="topleft"
- name="New Pants">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="pants" />
- </menu_item_call>
- <menu_item_call
- label="New Shoes"
- layout="topleft"
- name="New Shoes">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="shoes" />
- </menu_item_call>
- <menu_item_call
- label="New Socks"
- layout="topleft"
- name="New Socks">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="socks" />
- </menu_item_call>
- <menu_item_call
- label="New Jacket"
- layout="topleft"
- name="New Jacket">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="jacket" />
- </menu_item_call>
- <menu_item_call
- label="New Skirt"
- layout="topleft"
- name="New Skirt">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="skirt" />
- </menu_item_call>
- <menu_item_call
- label="New Gloves"
- layout="topleft"
- name="New Gloves">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="gloves" />
- </menu_item_call>
- <menu_item_call
- label="New Undershirt"
- layout="topleft"
- name="New Undershirt">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="undershirt" />
- </menu_item_call>
- <menu_item_call
- label="New Underpants"
- layout="topleft"
- name="New Underpants">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="underpants" />
- </menu_item_call>
- <menu_item_call
- label="New Alpha"
- layout="topleft"
- name="New Alpha">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="alpha" />
- </menu_item_call>
- <menu_item_call
- label="New Tattoo"
- layout="topleft"
- name="New Tattoo">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="tattoo" />
- </menu_item_call>
- </menu>
- <menu
- height="85"
- label="New Body Parts"
- layout="topleft"
- left_delta="0"
- mouse_opaque="false"
- name="New Body Parts"
- top_pad="514"
- width="118">
- <menu_item_call
- label="New Shape"
- layout="topleft"
- name="New Shape">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="shape" />
- </menu_item_call>
- <menu_item_call
- label="New Skin"
- layout="topleft"
- name="New Skin">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="skin" />
- </menu_item_call>
- <menu_item_call
- label="New Hair"
- layout="topleft"
- name="New Hair">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="hair" />
- </menu_item_call>
- <menu_item_call
- label="New Eyes"
- layout="topleft"
- name="New Eyes">
- <menu_item_call.on_click
- function="Inventory.DoCreate"
- parameter="eyes" />
- </menu_item_call>
- </menu>
- </menu>
- <menu
- height="49"
- label="Sort"
- layout="topleft"
- left="0"
- mouse_opaque="false"
- name="Sort"
- tear_off="true"
- top="-113"
- width="118">
- <menu_item_check
- control_name="Inventory.SortByName"
- label="By Name"
- layout="topleft"
- name="By Name">
- <menu_item_check.on_click
- function="Inventory.SetSortBy"
- parameter="name" />
- </menu_item_check>
- <menu_item_check
- control_name="Inventory.SortByDate"
- label="By Date"
- layout="topleft"
- name="By Date">
- <menu_item_check.on_click
- function="Inventory.SetSortBy"
- parameter="date" />
- </menu_item_check>
- <menu_item_separator
- layout="topleft" />
- <menu_item_check
- control_name="Inventory.FoldersAlwaysByName"
- label="Folders Always By Name"
- layout="topleft"
- name="Folders Always By Name">
- <menu_item_check.on_click
- function="Inventory.SetSortBy"
- parameter="foldersalwaysbyname" />
- </menu_item_check>
- <menu_item_check
- control_name="Inventory.SystemFoldersToTop"
- label="System Folders To Top"
- layout="topleft"
- name="System Folders To Top">
- <menu_item_check.on_click
- function="Inventory.SetSortBy"
- parameter="systemfolderstotop" />
- </menu_item_check>
- </menu>
- </menu_bar>
- <filter_editor
- text_pad_left="10"
- follows="left|top|right"
- height="23"
- label="Filter Inventory"
- layout="topleft"
- left="10"
-max_length="300"
- name="inventory search editor"
- top="26"
- width="303" />
- <tab_container
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
-follows="all"
-halign="center"
- height="305"
+ <panel.string
+ name="Itemcount">
+ </panel.string>
+ <panel.string
+ name="ItemcountFetching">
+ Fetching [ITEM_COUNT] Items... [FILTER]
+ </panel.string>
+ <panel.string
+ name="ItemcountCompleted">
+ [ITEM_COUNT] Items [FILTER]
+ </panel.string>
+ <panel.string
+ name="ItemcountUnknown">
+
+ </panel.string>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="13"
+ layout="topleft"
+ left="12"
+ name="ItemcountText"
+ font="SansSerifMedium"
+ text_color="EmphasisColor"
+ top_pad="0"
+ width="300">
+ Items:
+ </text>
+ <filter_editor
+ text_pad_left="10"
+ follows="left|top|right"
+ height="23"
+ label="Filter Inventory"
+ layout="topleft"
+ left="10"
+ max_length="300"
+ name="inventory search editor"
+ top="3"
+ width="303" />
+ <tab_container
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
+ background_visible="true"
+ background_opaque="true"
+ follows="all"
+ halign="center"
+ height="339"
layout="topleft"
- left="6"
+ left="7"
name="inventory filter tabs"
tab_height="30"
tab_position="top"
tab_min_width="100"
top_pad="10"
- width="315">
- <inventory_panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
- border="false"
- bevel_style="none"
- follows="all"
- height="295"
- label="MY INVENTORY"
- help_topic="my_inventory_tab"
- layout="topleft"
- left="0"
- name="All Items"
- top="16"
- width="290" />
- <inventory_panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
- border="false"
- bevel_style="none"
- follows="all"
- height="295"
- label="RECENT"
- help_topic="recent_inventory_tab"
- layout="topleft"
- left_delta="0"
- name="Recent Items"
- width="290" />
- </tab_container>
-
- <panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
+ width="312">
+ <inventory_panel
+ bg_opaque_color="DkGray2"
+ bg_alpha_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ border="false"
+ bevel_style="none"
+ follows="all"
+ height="338"
+ label="MY INVENTORY"
+ help_topic="my_inventory_tab"
+ layout="topleft"
+ left="0"
+ name="All Items"
+ sort_order_setting="InventorySortOrder"
+ top="16"
+ width="288" />
+ <inventory_panel
+ bg_opaque_color="DkGray2"
+ bg_alpha_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ border="false"
bevel_style="none"
- follows="left|right|bottom"
- height="38"
+ follows="all"
+ height="338"
+ label="RECENT"
+ help_topic="recent_inventory_tab"
layout="topleft"
- top_pad="-1"
- left="9"
- name="bottom_panel"
- width="310">
- <button
- follows="bottom|left"
- tool_tip="Show additional options"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
- layout="topleft"
- left="8"
- name="options_gear_btn"
- top="14"
- width="18" />
- <button
- follows="bottom|left"
- height="18"
- image_selected="AddItem_Press"
- image_unselected="AddItem_Off"
- image_disabled="AddItem_Disabled"
- layout="topleft"
- left_pad="10"
- name="add_btn"
- tool_tip="Add new item"
- width="18" />
- <dnd_button
- follows="bottom|right"
- height="18"
- image_selected="TrashItem_Press"
- image_unselected="TrashItem_Off"
- layout="topleft"
- right="-7"
- name="trash_btn"
- tool_tip="Remove selected item"
- top="14"
- width="18" />
- </panel>
+ left_delta="0"
+ name="Recent Items"
+ width="290" />
+ </tab_container>
-
+ <panel
+ background_visible="true"
+ bevel_style="none"
+ follows="left|right|bottom"
+ height="27"
+ layout="topleft"
+ top_pad="-1"
+ left="10"
+ name="bottom_panel"
+ width="310">
+ <button
+ follows="bottom|left"
+ tool_tip="Show additional options"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
+ layout="topleft"
+ left="0"
+ name="options_gear_btn"
+ top="1"
+ width="31" />
+ <button
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="AddItem_Off"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
+ layout="topleft"
+ left_pad="1"
+ name="add_btn"
+ tool_tip="Add new item"
+ width="31" />
+ <icon
+ follows="bottom|left"
+ height="25"
+ image_name="Toolbar_Middle_Off"
+ layout="topleft"
+ left_pad="1"
+ name="dummy_icon"
+ width="209"
+ />
+ <dnd_button
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Right_Over"
+ image_overlay="TrashItem_Off"
+ image_selected="Toolbar_Right_Selected"
+ image_unselected="Toolbar_Right_Off"
+ left_pad="1"
+ layout="topleft"
+ name="trash_btn"
+ tool_tip="Remove selected item"
+ width="31"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index 4112b65635..5e41d65720 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -117,6 +117,8 @@
layout="topleft"
left="107"
textbox.max_length="512"
+ textbox.label="More"
+ textbox.show_context_menu="true"
name="sl_description_edit"
top_pad="-3"
translate="false"
@@ -171,6 +173,8 @@
layout="topleft"
left="107"
textbox.max_length="512"
+ textbox.label="More"
+ textbox.show_context_menu="true"
name="fl_description_edit"
top_pad="-3"
translate="false"
@@ -311,6 +315,8 @@
name="sl_groups"
top_pad="0"
translate="false"
+ textbox.label="More"
+ textbox.show_context_menu="true"
width="298"
expanded_bg_visible="true"
expanded_bg_color="DkGray">
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index d484564e0d..a314cedc21 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -151,7 +151,6 @@
width="590">
<label
follows="left|top"
- font.style="BOLD"
height="15"
layout="topleft"
left="10"
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index 088f098f85..1d99de1fa7 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -8,12 +8,6 @@
name="chat_bar"
top="21"
width="310">
- <string name="min_width">
- 216
- </string>
- <string name="max_width">
- 320
- </string>
<line_editor
border_style="line"
border_thickness="1"
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_media.xml b/indra/newview/skins/default/xui/en/panel_nearby_media.xml
index 0f911f789e..53dda1927a 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_media.xml
@@ -8,7 +8,7 @@
background_visible="true"
layout="topleft"
width="270"
- height="235"
+ height="230"
name="nearby_media"
help_topic="nearby_media">
<string name="media_item_count_format">(%ld media items)</string>
@@ -21,15 +21,15 @@
background_visible="false"
follows="left|right|top"
top="0"
- height="30"
+ height="35"
name="minimized_controls"
left="0">
<button
name="all_nearby_media_disable_btn"
follows="left"
tool_tip="Turn all nearby media off"
- left="15"
- width="60"
+ left="8"
+ width="66"
height="22"
label="Stop All">
<button.commit_callback
@@ -40,7 +40,7 @@
follows="left"
tool_tip="Turn all nearby media on"
left_pad="4"
- width="60"
+ width="66"
height="22"
label="Start All">
<button.commit_callback
@@ -68,8 +68,8 @@
follows="right"
tool_tip="Advanced Controls"
top_delta="0"
- right="-10"
- width="60"
+ right="-8"
+ width="66"
height="22"
toggle="true"
label="More &gt;&gt;"
@@ -98,20 +98,6 @@
width="100">
Nearby Media
</text>
- <!-- nix for now
- <text
- bottom_delta="1"
- type="string"
- follows="top|left|right"
- font="SansSerif"
- font.style="ITALIC"
- font.size="Small"
- name="media_item_count"
- left="115"
- right="-10">
- (?? media items)
- </text>
- -->
<text
type="string"
length="1"
@@ -144,7 +130,7 @@
<combo_box.item
label="On other Avatars"
value="4"
- ame="OnOthers" />
+ name="OnOthers" />
</combo_box>
<scroll_list
follows="left|top|bottom|right"
@@ -201,7 +187,7 @@
height="26"
layout="topleft"
top="4"
- left="10"
+ left="8"
right="-10"
border_size="0"
mouse_opaque="false"
diff --git a/indra/newview/skins/default/xui/en/panel_online_status_toast.xml b/indra/newview/skins/default/xui/en/panel_online_status_toast.xml
index 14cb5fffee..b1a7697e83 100644
--- a/indra/newview/skins/default/xui/en/panel_online_status_toast.xml
+++ b/indra/newview/skins/default/xui/en/panel_online_status_toast.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
background_visible="false"
- height="152"
+ height="40"
label="friend_online_status"
layout="topleft"
left="0"
name="friend_online_status"
top="0"
- width="305">
+ width="220">
<avatar_icon
follows="top|left"
height="18"
@@ -21,7 +21,7 @@
<text
font="SansSerifSmall"
follows="all"
- height="137"
+ height="13"
layout="topleft"
left_pad="5"
name="message"
@@ -29,7 +29,7 @@
top="15"
use_ellipses="true"
value=""
- width="285"
+ width="189"
word_wrap="true"
max_length="350" />
</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
new file mode 100644
index 0000000000..c1800384a3
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Side tray Outfit Edit panel -->
+<panel
+ background_visible="true"
+ border="false"
+ height="600"
+ follows="all"
+ label="Outfit Edit"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="outfit_edit"
+ top="0"
+ width="320">
+ <string
+ name="No Outfit"
+ value="No Outfit"/>
+
+ <panel.string
+ name="not_available">
+ (N\A)
+ </panel.string>
+ <panel.string
+ name="unknown">
+ (unknown)
+ </panel.string>
+
+
+ <button
+ follows="top|left"
+ height="23"
+ image_overlay="BackArrow_Off"
+ layout="topleft"
+ name="back_btn"
+ left="5"
+ tab_stop="false"
+ top="2"
+ width="23" />
+ <text
+ follows="top|right"
+ font="SansSerifHugeBold"
+ height="26"
+ layout="topleft"
+ left_pad="20"
+ name="title"
+ text_color="LtGray"
+ top="0"
+ value="Edit Outfit"
+ use_ellipses="true"
+ width="275" />
+
+<!-- "HEADER WITH ICON, STATUS TEXT AND OUTFIT NAME" -->
+ <panel
+ bevel_style="none"
+ follows="top|left|right"
+ height="45"
+ label="bottom_panel"
+ layout="topleft"
+ left="5"
+ name="header_panel"
+ top_pad="5"
+ width="300">
+ <icon
+ follows="left|top"
+ height="40"
+ image_name="t-shirt-image"
+ left="2"
+ mouse_opaque="false"
+ name="outfit_icon"
+ top="1"
+ scale_image="true"
+ visible="true"
+ width="35" />
+ <panel
+ bevel_style="none"
+ follows="top|right"
+ height="40"
+ label="bottom_panel"
+ layout="topleft"
+ left_pad="10"
+ name="outfit_name_and_status"
+ top="2"
+ width="200">
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="13"
+ layout="topleft"
+ name="status"
+ text_color="Green"
+ top="0"
+ value="Editing..."
+ use_ellipses="true"
+ width="275" />
+ <text
+ follows="bottom|left|right"
+ font="SansSerifHugeBold"
+ height="26"
+ layout="topleft"
+ name="curr_outfit_name"
+ text_color="LtGray"
+ top_pad="0"
+ value="[Current Outfit]"
+ use_ellipses="true"
+ width="275" />
+ </panel>
+ </panel>
+
+
+<!-- LIST OF WEARABLES (CURRENT OUTFIT/ WEARABLES TO ADD) -->
+ <layout_stack
+ animate="false"
+ default_tab_group="2"
+ follows="all"
+ height="470"
+ width="300"
+ layout="topleft"
+ orientation="vertical"
+ name="im_panels"
+ tab_group="1"
+ top_pad="10"
+ left="5">
+ <layout_panel
+ layout="topleft"
+ follows="left|top|right"
+ height="220"
+ label="IM Control Panel"
+ min_height="100"
+ name="outfit_wearables_panel"
+ width="300"
+ auto_resize="true"
+ user_resize="true">
+
+ <scroll_list
+ width="300"
+ column_padding="0"
+ draw_heading="false"
+ draw_stripes="false"
+ follows="left|top|right|bottom"
+ layout="topleft"
+ name="look_items_list"
+ search_column="1"
+ sort_column="2"
+ left="0"
+ height="193"
+ top="0">
+ <scroll_list.columns
+ label="Look Item"
+ name="look_item"
+ width="285" />
+ <scroll_list.columns
+ label="Outfit Item Sort"
+ width="0"
+ sort_column="look_item_sort"
+ name="look_item_sort" />
+ </scroll_list>
+
+ <panel
+ background_visible="true"
+ bevel_style="none"
+ follows="bottom|left|right"
+ height="27"
+ label="bottom_panel"
+ layout="topleft"
+ left="0"
+ name="edit_panel"
+ top_pad="0"
+ width="300">
+ <button
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
+ layout="topleft"
+ left="0"
+ name="gear_menu_btn"
+ top="1"
+ width="31" />
+ <button
+ is_toggle="true"
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="AddItem_Off"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
+ layout="topleft"
+ left_pad="1"
+ name="add_btn"
+ top="1"
+ width="31" />
+ <button
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay=""
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
+ layout="topleft"
+ left_pad="1"
+ name="new_btn"
+ top="1"
+ width="31" />
+ <button
+ follows="bottom|right"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="TrashItem_Off"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
+ layout="topleft"
+ name="trash_btn"
+ right="-1"
+ top="1"
+ width="31" />
+ </panel>
+ </layout_panel>
+
+
+ <layout_panel
+ auto_resize="true"
+ default_tab_group="3"
+ height="250"
+ min_height="120"
+ name="add_wearables_panel"
+ width="300"
+ tab_group="2"
+ user_resize="true"
+ visible="false">
+
+ <text
+ follows="top|left|right"
+ font="SansSerifBold"
+ height="13"
+ layout="topleft"
+ left="5"
+ name="status"
+ text_color="LtGray"
+ top="5"
+ value="Add Wearables"
+ use_ellipses="true"
+ width="275" />
+
+ <filter_editor
+ background_image="TextField_Search_Off"
+ follows="left|top|right"
+ font="SansSerif"
+ label="Filter"
+ layout="topleft"
+ left="5"
+ width="290"
+ height="20"
+ name="look_item_filter"
+ text_color="black"
+ text_pad_left="25" />
+
+ <inventory_panel
+ allow_multi_select="true"
+ border="false"
+ follows="left|top|right|bottom"
+ height="176"
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ name="inventory_items"
+ top_pad="5"
+ width="300"/>
+
+ <panel
+ background_visible="true"
+ bevel_style="none"
+ follows="left|right|bottom"
+ height="27"
+ label="add_wearables_button_bar"
+ layout="topleft"
+ left="0"
+ name="add_wearables_button_bar"
+ top_pad="0"
+ width="300">
+ <button
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
+ layout="topleft"
+ left="0"
+ name="wearables_gear_menu_btn"
+ top="1"
+ width="31" />
+ <button
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay=""
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
+ label="F"
+ layout="topleft"
+ left_pad="1"
+ name="folder_view_btn"
+ top="1"
+ width="31" />
+ <button
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay=""
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
+ label="L"
+ layout="topleft"
+ left_pad="1"
+ name="list_view_btn"
+ top="1"
+ width="31" />
+ </panel>
+ </layout_panel>
+ </layout_stack>
+
+ <panel
+ follows="left|right|bottom"
+ height="30"
+ layout="topleft"
+ left="5"
+ top_pad="10"
+ name="save_revert_button_bar"
+ width="300">
+ <button
+ follows="bottom|left|right"
+ height="23"
+ label="Save"
+ left="0"
+ layout="topleft"
+ name="save_btn"
+ width="145" />
+ <button
+ follows="bottom|left|right"
+ height="23"
+ left_pad="15"
+ label="Revert"
+ layout="topleft"
+ name="revert_btn"
+ width="145" />
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index cc60b97f92..66ed43efec 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="Outfits"
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
+ background_opaque="true"
background_visible="true"
follows="all"
height="570"
@@ -11,15 +14,15 @@
border="false">
<tab_container
follows="all"
- height="490"
+ height="501"
layout="topleft"
- left="6"
+ left="7"
name="appearance_tabs"
tab_min_width="140"
tab_height="30"
tab_position="top"
halign="center"
- width="315">
+ width="312">
<inventory_panel
background_visible="true"
background_opaque="true"
@@ -30,7 +33,7 @@
border="false"
left="0"
top="0"
- width="314"
+ width="315"
mouse_opaque="true"
name="outfitslist_tab"
start_folder="My Outfits" />
@@ -47,53 +50,53 @@
mouse_opaque="true"
name="cof_tab"
start_folder="Current Outfit"
- width="313" />
+ width="315" />
</tab_container>
<panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
background_visible="true"
- background_opaque="true"
- follows="left|right|bottom"
- height="38"
- layout="topleft"
- left="9"
- visible="true"
- top_pad="-1"
- width="310" />
- <panel
- background_visible="false"
follows="bottom|left"
height="73"
layout="topleft"
left="9"
+ top_pad="-1"
visible="true"
name="bottom_panel"
- top_pad="-38"
width="310">
<button
follows="bottom|left"
tool_tip="Show additional options"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
layout="topleft"
- left="8"
+ left="1"
name="options_gear_btn"
- top="14"
- width="18" />
+ top="1"
+ width="31" />
+ <icon
+ follows="bottom|left"
+ height="25"
+ image_name="Toolbar_Middle_Off"
+ layout="topleft"
+ left_pad="1"
+ name="dummy_icon"
+ width="241"
+ />
+
<dnd_button
- follows="bottom|right"
- height="18"
- image_selected="TrashItem_Press"
- image_unselected="TrashItem_Off"
+ follows="bottom|left"
+ height="25"
+ image_hover_unselected="Toolbar_Right_Over"
+ image_overlay="TrashItem_Off"
+ image_selected="Toolbar_Right_Selected"
+ image_unselected="Toolbar_Right_Off"
layout="topleft"
- right="-9"
+ left_pad="1"
name="trash_btn"
tool_tip="Remove selected item"
- top="14"
- width="18" />
+ width="31"/>
<button
follows="bottom|left"
height="23"
@@ -101,7 +104,7 @@
layout="topleft"
name="make_outfit_btn"
tool_tip="Save appearance as an outfit"
- top="43"
+ top_pad="6"
left="0"
width="153" />
<button
@@ -111,19 +114,18 @@
layout="topleft"
name="wear_btn"
left_pad="3"
- top="43"
tool_tip="Wear selected outfit"
width="152" />
<button
follows="bottom|left"
height="23"
- label="M"
+ label="Edit Outfit"
layout="topleft"
right="-140"
- name="look_edit_btn"
+ name="edit_current_outfit_btn"
top="26"
visible="false"
- width="20" />
+ width="50" />
</panel>
-</panel>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index daab52f06a..6152dd1587 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -2,13 +2,13 @@
<!-- Side tray panel -->
<panel
follows="all"
+ height="449"
label="People"
layout="topleft"
- height="449"
+ left="0"
min_height="350"
name="people_panel"
top="0"
- left="0"
width="333">
<string
name="no_people"
@@ -28,8 +28,17 @@
<string
name="groups_filter_label"
value="Filter Groups" />
+ <!--
+ *WORKAROUND: for group_list.no_groups_msg & group_list.no_filtered_groups_msg attributes.
+ They are not defined as translatable in VLT. See EXT-5931
+ -->
+ <string
+ name="no_filtered_groups_msg"
+ value="[secondlife:///app/search/groups Try finding the group in search?]" />
+ <string
+ name="no_groups_msg"
+ value="[secondlife:///app/search/groups Try searching for some groups to join.]" />
<filter_editor
- text_pad_left="10"
follows="left|top|right"
height="23"
layout="topleft"
@@ -38,6 +47,7 @@
max_length="300"
name="filter_input"
text_color="Black"
+ text_pad_left="10"
top="3"
width="303" />
<tab_container
@@ -53,10 +63,10 @@
halign="center"
width="317">
<panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
+ background_opaque="true"
+ background_visible="true"
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
follows="all"
height="383"
label="NEARBY"
@@ -68,56 +78,71 @@
width="313">
<avatar_list
allow_select="true"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
follows="all"
- height="345"
+ height="356"
ignore_online_status="true"
layout="topleft"
- left="0"
+ left="3"
multi_select="true"
name="avatar_list"
top="0"
- width="313" />
+ width="307" />
<panel
+ background_visible="true"
follows="left|right|bottom"
- height="38"
+ height="27"
label="bottom_panel"
layout="topleft"
- left="0"
+ left="3"
name="bottom_panel"
+ top_pad="0"
width="313">
<button
follows="bottom|left"
- tool_tip="Options"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
layout="topleft"
- left="10"
+ left="0"
name="nearby_view_sort_btn"
- top="10"
- width="18" />
+ tool_tip="Options"
+ top="1"
+ width="31" />
<button
follows="bottom|left"
- height="18"
- image_selected="AddItem_Press"
- image_unselected="AddItem_Off"
- image_disabled="AddItem_Disabled"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="AddItem_Off"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
layout="topleft"
- left_pad="10"
+ left_pad="1"
name="add_friend_btn"
tool_tip="Add selected Resident to your friends List"
- width="18">
+ width="31">
<commit_callback
function="People.addFriend" />
</button>
+ <icon
+ follows="bottom|left"
+ height="25"
+ image_name="Toolbar_Right_Off"
+ layout="topleft"
+ left_pad="1"
+ name="dummy_icon"
+ width="241"
+ />
</panel>
</panel>
<panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
+ background_opaque="true"
+ background_visible="true"
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
follows="all"
height="383"
label="MY FRIENDS"
@@ -128,13 +153,16 @@
top="0"
width="313">
<accordion
+ background_visible="true"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
follows="all"
- height="345"
+ height="356"
layout="topleft"
- left="0"
+ left="3"
name="friends_accordion"
top="0"
- width="313">
+ width="307">
<accordion_tab
layout="topleft"
height="172"
@@ -150,7 +178,7 @@
multi_select="true"
name="avatars_online"
top="0"
- width="313" />
+ width="307" />
</accordion_tab>
<accordion_tab
layout="topleft"
@@ -166,53 +194,65 @@
multi_select="true"
name="avatars_all"
top="0"
- width="313" />
+ width="307" />
</accordion_tab>
</accordion>
<panel
+ background_visible="true"
follows="left|right|bottom"
- height="38"
+ height="27"
label="bottom_panel"
layout="topleft"
- left="0"
+ left="3"
name="bottom_panel"
+ top_pad="0"
width="313">
<button
follows="bottom|left"
tool_tip="Options"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
layout="topleft"
- left="10"
+ left="0"
name="friends_viewsort_btn"
- top="10"
- width="18" />
+ top="1"
+ width="31" />
<button
follows="bottom|left"
- height="18"
- image_selected="AddItem_Press"
- image_unselected="AddItem_Off"
- image_disabled="AddItem_Disabled"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="AddItem_Off"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
layout="topleft"
- left_pad="10"
+ left_pad="1"
name="add_btn"
tool_tip="Offer friendship to a Resident"
- width="18" />
+ width="31" />
+ <icon
+ follows="bottom|left"
+ height="25"
+ image_name="Toolbar_Middle_Off"
+ layout="topleft"
+ left_pad="1"
+ name="dummy_icon"
+ width="209"
+ />
<button
follows="bottom|left"
- height="18"
- image_selected="TrashItem_Press"
- image_unselected="TrashItem_Off"
- image_disabled="TrashItem_Disabled"
+ height="25"
+ image_hover_unselected="Toolbar_Right_Over"
+ image_overlay="TrashItem_Off"
+ image_selected="Toolbar_Right_Selected"
+ image_unselected="Toolbar_Right_Off"
layout="topleft"
- left_pad="10"
- right="-10"
+ left_pad="1"
name="del_btn"
tool_tip="Remove selected person from your Friends list"
- top_delta="0"
- width="18" />
+ width="31" />
</panel>
<text
follows="all"
@@ -222,15 +262,15 @@
top="10"
width="293"
wrap="true">
- To add friends try [secondlife:///app/search/people global search] or click on a user to add them as a friend.
+ To add friends try [secondlife:///app/search/people global search] or use right-click on a Resident to add them as a friend.
If you're looking for people to hang out with, [secondlife:///app/worldmap try the Map].
</text>
</panel>
<panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
+ background_opaque="true"
+ background_visible="true"
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
follows="all"
height="383"
label="MY GROUPS"
@@ -240,66 +280,86 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t
name="groups_panel"
top="0"
width="313">
+ <!--
+ *NOTE: no_groups_msg & group_list attributes are not defined as translatable in VLT. See EXT-5931
+ Values are set from appropriate strings at the top of file via LLPeoplePanel::postBuild()
+ -->
<group_list
+ background_visible="true"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
follows="all"
- height="345"
+ height="356"
layout="topleft"
- left="0"
+ left="3"
name="group_list"
- no_filtered_groups_msg="[secondlife:///app/search/groups Try fine the group in search?]"
+ no_filtered_groups_msg="[secondlife:///app/search/groups Try finding the group in search?]"
no_groups_msg="[secondlife:///app/search/groups Try searching for some groups to join.]"
top="0"
- width="313" />
+ width="307" />
<panel
+ background_visible="true"
follows="left|right|bottom"
- height="38"
+ height="27"
label="bottom_panel"
layout="topleft"
left="0"
name="bottom_panel"
+ top_pad="0"
width="313">
<button
follows="bottom|left"
tool_tip="Options"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
layout="topleft"
- left="10"
+ left="3"
name="groups_viewsort_btn"
- top="10"
- width="18" />
+ top="1"
+ width="31" />
<button
follows="bottom|left"
- height="18"
- image_selected="AddItem_Press"
- image_unselected="AddItem_Off"
- image_disabled="AddItem_Disabled"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="AddItem_Off"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
layout="topleft"
- left_pad="10"
+ left_pad="1"
name="plus_btn"
tool_tip="Join group/Create new group"
- width="18" />
+ width="31" />
<button
follows="bottom|left"
- height="10"
- image_hover_selected="Activate_Checkmark"
- image_selected="Activate_Checkmark"
- image_unselected="Activate_Checkmark"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="Activate_Checkmark"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
layout="topleft"
- left_pad="10"
+ left_pad="1"
name="activate_btn"
tool_tip="Activate selected group"
- top_delta="4"
- width="10" />
+ width="31" />
+ <icon
+ follows="bottom|left"
+ height="25"
+ image_name="Toolbar_Right_Off"
+ layout="topleft"
+ left_pad="1"
+ name="dummy_icon"
+ width="209"
+ />
</panel>
</panel>
<panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
+ background_opaque="true"
+ background_visible="true"
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
follows="all"
height="383"
label="RECENT"
@@ -311,50 +371,65 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t
width="313">
<avatar_list
allow_select="true"
+ background_visible="true"
+ bg_alpha_color="DkGray2"
+ bg_opaque_color="DkGray2"
follows="all"
- height="345"
+ height="356"
layout="topleft"
- left="0"
+ left="3"
multi_select="true"
name="avatar_list"
show_last_interaction_time="true"
top="0"
- width="313" />
+ width="307" />
<panel
+ background_visible="true"
follows="left|right|bottom"
- height="38"
+ height="27"
label="bottom_panel"
layout="topleft"
left="0"
name="bottom_panel"
+ top_pad="0"
width="313">
<button
follows="bottom|left"
tool_tip="Options"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
layout="topleft"
- left="10"
+ left="3"
name="recent_viewsort_btn"
- top="10"
- width="18" />
+ top="1"
+ width="31" />
<button
follows="bottom|left"
- height="18"
- image_selected="AddItem_Press"
- image_unselected="AddItem_Off"
- image_disabled="AddItem_Disabled"
+ height="25"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_overlay="AddItem_Off"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
layout="topleft"
- left_pad="10"
+ left_pad="1"
name="add_friend_btn"
- top_delta="0"
tool_tip="Add selected Resident to your friends List"
- width="18">
+ width="31">
<commit_callback
function="People.addFriend" />
</button>
+ <icon
+ follows="bottom|left"
+ height="25"
+ image_name="Toolbar_Right_Off"
+ layout="topleft"
+ left_pad="1"
+ name="dummy_icon"
+ width="241"
+ />
</panel>
</panel>
</tab_container>
@@ -363,7 +438,7 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t
height="23"
layout="topleft"
left="8"
- top_pad="0"
+ top_pad="4"
name="button_bar"
width="313">
<button
@@ -373,7 +448,8 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t
layout="topleft"
name="view_profile_btn"
tool_tip="Show picture, groups, and other Residents information"
- width="64" />
+ top="0"
+ width="70" />
<button
follows="bottom|left"
left_pad="3"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
index 8b25fb5d2a..41651edaa0 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
@@ -64,6 +64,8 @@
layout="topleft"
left="103"
name="picture_descr"
+ textbox.max_length="1024"
+ textbox.label="More"
textbox.show_context_menu="false"
top_pad="0"
width="178"
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index b22dad5841..a43b244fa0 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -174,13 +174,13 @@
<panel
bg_alpha_color="DkGray2"
follows="left|top|right"
- height="700"
+ height="540"
layout="topleft"
left="0"
min_height="300"
name="scrolling_panel"
top="0"
- width="285">
+ width="310">
<texture_picker
enabled="false"
follows="left|top|right"
@@ -275,6 +275,7 @@
layout="topleft"
left="5"
name="description"
+ textbox.label="More"
top_pad="10"
value="Du waltz die spritz"
width="300" />
@@ -318,13 +319,14 @@
width="268" />
<accordion
follows="all"
- height="230"
+ height="223"
layout="topleft"
left="0"
name="advanced_info_accordion"
top_pad="10"
width="313">
<accordion_tab
+ height="170"
layout="topleft"
name="parcel_characteristics_tab"
title="Parcel">
@@ -333,6 +335,7 @@
height="160"
layout="topleft"
left="0"
+ name="parcel_characteristics_panel"
top="0"
width="275">
<icon
@@ -351,7 +354,7 @@
left_pad="12"
name="rating_label"
value="Rating:"
- width="60" />
+ width="90" />
<text
follows="left|right|top"
height="16"
@@ -378,7 +381,7 @@
name="voice_label"
top_delta="0"
value="Voice:"
- width="60" />
+ width="90" />
<text
follows="left|right|top"
height="18"
@@ -404,7 +407,7 @@
left_pad="8"
name="fly_label"
value="Fly:"
- width="60" />
+ width="90" />
<text
follows="left|right|top"
height="16"
@@ -430,7 +433,7 @@
left_pad="8"
name="push_label"
value="Push:"
- width="60" />
+ width="90" />
<text
follows="left|right|top"
height="14"
@@ -456,7 +459,7 @@
left_pad="8"
name="build_label"
value="Build:"
- width="60" />
+ width="90" />
<text
follows="left|right|top"
height="15"
@@ -482,7 +485,7 @@
left_pad="8"
name="scripts_label"
value="Scripts:"
- width="60" />
+ width="90" />
<text
follows="left|right|top"
height="14"
@@ -508,7 +511,7 @@
left_pad="8"
name="damage_label"
value="Damage:"
- width="60" />
+ width="90" />
<text
follows="left|right|top"
height="14"
@@ -536,6 +539,7 @@
</accordion_tab>
<accordion_tab
expanded="false"
+ height="150"
layout="topleft"
name="region_information_tab"
title="Region">
@@ -544,6 +548,7 @@
height="125"
layout="topleft"
left="0"
+ name="region_information_panel"
top="0"
width="290">
<text
@@ -662,6 +667,7 @@
</accordion_tab>
<accordion_tab
expanded="false"
+ height="190"
layout="topleft"
name="estate_information_tab"
title="Estate">
@@ -670,6 +676,7 @@
height="189"
layout="topleft"
left="0"
+ name="estate_information_panel"
top="0"
width="290">
<text
@@ -736,7 +743,6 @@
bg_focus_color="DkGray2"
bg_readonly_color="DkGray2"
follows="left|top|right"
- handle_edit_keys_directly="true"
height="90"
layout="topleft"
left="10"
@@ -750,6 +756,7 @@
</accordion_tab>
<accordion_tab
expanded="false"
+ height="320"
layout="topleft"
name="sales_tab"
title="For Sale">
@@ -758,6 +765,7 @@
height="300"
layout="topleft"
left="0"
+ name="sales_panel"
top="0"
width="290">
<text
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 57535649de..c61007a9e1 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -65,7 +65,7 @@ background_visible="true"
visible="false"
width="315" />
<panel
- height="19"
+ height="23"
layout="topleft"
left="4"
name="button_panel"
@@ -129,7 +129,8 @@ background_visible="true"
label="Close"
layout="topleft"
name="close_btn"
- left_pad="3"
+ right="-10"
+ top="1"
width="60" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 05a3771edf..69e8e6fdcc 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -13,6 +13,10 @@
name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <panel.string
+ name="middle_mouse">
+ Middle Mouse
+ </panel.string>
<icon
follows="left|top"
height="18"
@@ -160,7 +164,7 @@ Automatic position for:
label="Opacity"
layout="topleft"
left="80"
- label_width="50"
+ label_width="60"
name="bubble_chat_opacity"
width="200" />
<color_swatch
@@ -171,6 +175,7 @@ Automatic position for:
height="50"
layout="topleft"
left_pad="10"
+ top="190"
name="background"
tool_tip="Choose color for bubble chat"
width="38">
@@ -181,6 +186,32 @@ Automatic position for:
function="Pref.applyUIColor"
parameter="BackgroundChatColor" />
</color_swatch>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="12"
+ layout="topleft"
+ left="30"
+ name="UI Size:"
+ top_pad="5"
+ width="300">
+ UI size
+ </text>
+ <slider
+ control_name="UIScaleFactor"
+ decimal_digits="2"
+ follows="left|top"
+ height="17"
+ increment="0.025"
+ initial_value="1"
+ layout="topleft"
+ left_delta="52"
+ max_val="1.4"
+ min_val="0.75"
+ name="ui_scale_slider"
+ top_pad="-14"
+ width="180" />
<check_box
control_name="ShowScriptErrors"
follows="left|top"
@@ -188,6 +219,7 @@ Automatic position for:
label="Show script errors in:"
layout="topleft"
left="30"
+ top_pad="10"
name="show_script_errors"
width="256" />
<radio_group
@@ -242,6 +274,7 @@ Automatic position for:
top_pad="5"
width="200" />
<button
+ layout="topleft"
follows="top|left"
enabled_control="EnableVoiceChat"
height="23"
@@ -252,8 +285,8 @@ Automatic position for:
<button.commit_callback
function="Pref.VoiceSetKey" />
</button>
- <button
- enabled_control="EnableVoiceChat"
+ <button
+ enabled_control="EnableVoiceChat"
follows="top|left"
halign="center"
height="23"
@@ -266,4 +299,15 @@ Automatic position for:
<button.commit_callback
function="Pref.VoiceSetMiddleMouse" />
</button>
+ <button
+ height="23"
+ label="Other Devices"
+ left="30"
+ name="joystick_setup_button"
+ top_pad="12"
+ width="155">
+ <button.commit_callback
+ function="Floater.Show"
+ parameter="pref_joystick" />
+ </button>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
index 188fd3b7bc..516457dd93 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
@@ -51,13 +51,13 @@
Always show:
</text>
<scroll_list
- follows="top|left"
+ follows="top|left|right"
height="140"
layout="topleft"
left="10"
multi_select="true"
name="enabled_popups"
- width="475" />
+ width="495" />
<button
enabled_control="FirstSelectedDisabledPopups"
follows="top|left"
@@ -99,11 +99,11 @@
Never show:
</text>
<scroll_list
- follows="top|left"
+ follows="top|left|right"
height="140"
layout="topleft"
left="10"
multi_select="true"
name="disabled_popups"
- width="475" />
+ width="495" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 2e81139ef2..eb2112c586 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -14,6 +14,7 @@
layout="topleft"
left="30"
height="12"
+ name="font_size"
width="120"
top="10">
Font size:
@@ -60,6 +61,7 @@
layout="topleft"
left="30"
height="12"
+ name="font_colors"
top_pad="10"
width="120"
>
@@ -335,6 +337,7 @@
top_pad="5"
width="400" />
<text
+ name="show_ims_in_label"
follows="left|top"
layout="topleft"
left="30"
@@ -344,6 +347,7 @@
Show IMs in:
</text>
<text
+ name="requires_restart_label"
follows="left|top"
layout="topleft"
top_delta="0"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 099c789e4b..9eaabbe77b 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -141,7 +141,34 @@
label="General"
name="Desired_PG"
value="13" />
+ <combo_box.commit_callback
+ function="Pref.MaturitySettings"/>
</combo_box>
+ <icon
+ follows="left|top"
+ height="16"
+ image_name="Parcel_PG_Dark"
+ layout="topleft"
+ left_pad="5"
+ name="rating_icon_general"
+ top_delta="3"
+ width="18"/>
+ <icon
+ follows="left|top"
+ height="16"
+ image_name="Parcel_M_Dark"
+ layout="topleft"
+ left_pad="2"
+ name="rating_icon_moderate"
+ width="18"/>
+ <icon
+ follows="left|top"
+ height="16"
+ image_name="Parcel_R_Dark"
+ layout="topleft"
+ left_pad="2"
+ name="rating_icon_adult"
+ width="18"/>
<text
type="string"
length="1"
@@ -150,7 +177,7 @@
layout="topleft"
left="30"
name="start_location_textbox"
- top_pad="10"
+ top_pad="15"
width="394">
Start location:
</text>
@@ -229,26 +256,15 @@
left="50"
name="show_my_name_checkbox1"
width="300" />
- <check_box
- enabled_control="AvatarNameTagMode"
- control_name="SmallAvatarNames"
- height="16"
- initial_value="true"
- label="Small name tags"
- layout="topleft"
- left_delta="175"
- name="small_avatar_names_checkbox"
- width="200" />
<check_box
enabled_control="AvatarNameTagMode"
control_name="RenderShowGroupTitleAll"
height="16"
label="Show group titles"
layout="topleft"
- left_delta="-175"
+ left_delta="175"
name="show_all_title_checkbox1"
- top_pad="5"
- width="300" />
+ width="200" />
<text
type="string"
length="1"
@@ -327,7 +343,7 @@
left="30"
mouse_opaque="false"
name="text_box3"
- top_pad="10"
+ top_pad="15"
width="240">
Busy mode response:
</text>
@@ -338,12 +354,12 @@
use_ellipses="false"
hover="false"
commit_on_focus_lost = "true"
- follows="left|top"
+ follows="left|top|right"
height="60"
layout="topleft"
left="50"
name="busy_response"
- width="440"
+ width="450"
word_wrap="true">
log_in_to_change
</text_editor>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index f20526b491..44c44f5f59 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -16,35 +16,8 @@
height="12"
layout="topleft"
left="30"
- name="UI Size:"
- top="10"
- width="300">
- UI size:
- </text>
- <slider
- can_edit_text="true"
- control_name="UIScaleFactor"
- decimal_digits="2"
- follows="left|top"
- height="15"
- increment="0.025"
- initial_value="1"
- layout="topleft"
- left_delta="52"
- max_val="1.4"
- min_val="0.75"
- name="ui_scale_slider"
- top_pad="2"
- width="180" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="12"
- layout="topleft"
- left="30"
name="QualitySpeed"
- top_pad="4"
+ top="10"
width="400">
Quality and speed:
</text>
@@ -635,7 +608,7 @@
left_delta="-230"
name="LightingDetailText"
top_pad="8"
- width="128">
+ width="140">
Lighting detail:
</text>
<radio_group
@@ -672,10 +645,10 @@
follows="left|top"
height="12"
layout="topleft"
- left="360"
+ left="358"
name="TerrainDetailText"
top="465"
- width="128">
+ width="155">
Terrain detail:
</text>
<radio_group
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index f232a69482..3d7f392404 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -69,15 +69,6 @@
name="auto_disengage_mic_check"
top_pad="10"
width="350" />
- <check_box
- control_name="CookiesEnabled"
- height="16"
- label="Accept cookies"
- layout="topleft"
- left="30"
- name="cookies_enabled"
- top_pad="10"
- width="350" />
<text
type="string"
length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 8723e0a832..500e65b916 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -9,18 +9,6 @@
name="Input panel"
top="1"
width="517">
- <button
- height="23"
- label="Other Devices"
- layout="topleft"
- left="30"
- name="joystick_setup_button"
- top="10"
- width="155">
- <button.commit_callback
- function="Floater.Show"
- parameter="pref_joystick" />
- </button>
<text
type="string"
length="1"
@@ -29,7 +17,7 @@
layout="topleft"
left="30"
name="Mouselook:"
- top_pad="10"
+ top="10"
width="300">
Mouselook:
</text>
@@ -142,14 +130,14 @@
increment="1"
initial_value="13000"
label="Port number:"
- label_width="75"
+ label_width="105"
layout="topleft"
left_delta="160"
max_val="13050"
min_val="13000"
name="connection_port"
- top_delta="-2"
- width="140" />
+ top_delta="3"
+ width="170" />
<text
type="string"
length="1"
@@ -210,7 +198,6 @@
enabled="false"
follows="left|top"
font="SansSerif"
- handle_edit_keys_directly="true"
height="23"
layout="topleft"
left="80"
@@ -265,35 +252,80 @@
layout="topleft"
left_delta="50"
name="use_external_browser"
- top_pad="4"
+ top_pad="-2"
width="480">
<radio_item
height="20"
- label="Use built-in browser"
- layout="topleft"
- left="0"
- name="internal"
- value="0"
- tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]."
- top="0"
- width="480" />
- <radio_item
- height="20"
label="Use my browser (IE, Firefox, Safari)"
layout="topleft"
left_delta="0"
name="external"
value="1"
+ top="0"
tool_tip="Use the default system web browser for help, web links, etc. Not recommended if running full screen."
+ width="480" />
+ <radio_item
+ height="20"
+ label="Use built-in browser"
+ layout="topleft"
+ left="0"
+ name="internal"
+ value=""
+ tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]."
top_delta="20"
width="480" />
</radio_group>
<check_box
+ top_delta="2"
+ enabled="true"
+ follows="left|top"
+ height="18"
+ initial_value="true"
+ control_name="BrowserPluginsEnabled"
+ label="Enable plugins"
+ left_delta="20"
+ mouse_opaque="true"
+ name="browser_plugins_enabled"
+ radio_style="false"
+ width="400"
+ top_pad="5"/>
+
+ <check_box
+ top_delta="4"
+ enabled="true"
+ follows="left|top"
+ height="14"
+ initial_value="true"
+ control_name="CookiesEnabled"
+ label="Accept cookies"
+ left_delta="0"
+ mouse_opaque="true"
+ name="cookies_enabled"
+ radio_style="false"
+ width="400"
+ top_pad="5"/>
+
+ <check_box
+ top_delta="4"
+ enabled="true"
+ follows="left|top"
+ height="14"
+ initial_value="true"
+ control_name="BrowserJavascriptEnabled"
+ label="Enable Javascript"
+ left_delta="0"
+ mouse_opaque="true"
+ name="browser_javascript_enabled"
+ radio_style="false"
+ width="400"
+ top_pad="5"/>
+
+ <check_box
top_delta="4"
enabled="true"
follows="left|top"
- height="16"
+ height="14"
initial_value="false"
control_name="BrowserProxyEnabled"
label="Enable Web Proxy"
@@ -308,9 +340,9 @@
follows="left|top"
height="10"
layout="topleft"
- left_delta="1"
+ left_delta="20"
name="Proxy location"
- top_delta="20"
+ top_delta="16"
width="300">
Proxy location:
</text>
@@ -335,9 +367,9 @@
increment="1"
initial_value="80"
label="Port number:"
- label_width="75"
+ label_width="95"
layout="topleft"
- left_delta="230"
+ left_delta="210"
max_val="12000"
min_val="10"
name="web_proxy_port"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index c9752cf913..e03ecd8f04 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -17,7 +17,7 @@
increment="0.05"
initial_value="0.5"
label="Master volume"
- label_width="120"
+ label_width="120"
layout="topleft"
left="0"
name="System Volume"
@@ -38,7 +38,7 @@
image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
- left_pad="5"
+ left_pad="5"
name="mute_audio"
tab_stop="false"
width="16" />
@@ -49,9 +49,9 @@
label="Mute when minimized"
layout="topleft"
name="mute_when_minimized"
- top_delta="3"
+ top_delta="3"
left_pad="5"
- width="215" />
+ width="235" />
<slider
control_name="AudioLevelUI"
disabled_control="MuteAudio"
@@ -177,14 +177,14 @@
</slider>
<button
control_name="MuteMusic"
- disabled_control="MuteAudio"
+ disabled_control="MuteAudio"
follows="top|left"
height="16"
image_selected="AudioMute_Off"
image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
- left_pad="5"
+ left_pad="5"
name="mute_audio"
tab_stop="false"
width="16" />
@@ -326,10 +326,10 @@
length="1"
follows="left|top"
layout="topleft"
- left="80"
- top_delta="16"
+ left="80"
+ top_delta="16"
name="Listen from"
- width="80">
+ width="142">
Listen from:
</text>
<icon
@@ -521,7 +521,7 @@
visible="true"
width="22" />
<text
- font.style="BOLD"
+ font.style="BOLD"
type="string"
length="1"
follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index 6b5f0c3896..6bf00373ea 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="left|right|top|bottom"
- name="MediaControlsPanel"
+ name="MediaControls"
background_visible="false"
height="200"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 412485e03f..a666608103 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -107,6 +107,8 @@
layout="topleft"
left="107"
textbox.max_length="512"
+ textbox.label="More"
+ textbox.show_context_menu="true"
name="sl_description_edit"
top_pad="-3"
translate="false"
@@ -151,6 +153,8 @@
layout="topleft"
left="107"
textbox.max_length="512"
+ textbox.label="More"
+ textbox.show_context_menu="true"
name="fl_description_edit"
top_pad="-3"
translate="false"
@@ -289,6 +293,8 @@
left="7"
name="sl_groups"
textbox.max_length="512"
+ textbox.label="More"
+ textbox.show_context_menu="true"
top_pad="0"
translate="false"
width="290"
@@ -314,9 +320,12 @@
left="2"
mouse_opaque="false"
name="add_friend"
+ pad_left="1"
+ pad_right="1"
tool_tip="Offer friendship to the Resident"
top="5"
- width="80" />
+ use_ellipses="true"
+ width="117" />
<button
follows="bottom|left"
height="23"
@@ -325,8 +334,8 @@
name="im"
tool_tip="Open instant message session"
top="5"
- left_pad="3"
- width="39" />
+ left_pad="1"
+ width="21" />
<button
follows="bottom|left"
height="23"
@@ -334,20 +343,12 @@
layout="topleft"
name="call"
tool_tip="Call this Resident"
- left_pad="3"
+ left_pad="1"
+ pad_left="1"
+ pad_right="1"
top="5"
- width="43" />
- <button
- enabled="false"
- follows="bottom|left"
- height="23"
- label="Map"
- layout="topleft"
- name="show_on_map_btn"
- tool_tip="Show the Resident on the map"
- top="5"
- left_pad="3"
- width="41" />
+ use_ellipses="true"
+ width="51" />
<button
follows="bottom|left"
height="23"
@@ -355,9 +356,12 @@
layout="topleft"
name="teleport"
tool_tip="Offer teleport"
- left_pad="3"
+ left_pad="1"
+ pad_left="1"
+ pad_right="1"
top="5"
- width="69" />
+ use_ellipses="true"
+ width="92" />
<button
follows="bottom|right"
height="23"
@@ -367,7 +371,6 @@
tool_tip="Pay money to or share inventory with the Resident"
right="-1"
top="5"
- left_pad="3"
width="23" />
</layout_panel>
<layout_panel
diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
index dc8f71c868..2b2ea78fac 100644
--- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
@@ -113,7 +113,6 @@
max_length="65535"
name="covenant_editor"
top_delta="30"
- handle_edit_keys_directly="true"
width="340"
word_wrap="true">
There is no Covenant provided for this Estate.
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
index 3980eb86d3..c5b2512fba 100644
--- a/indra/newview/skins/default/xui/en/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml
@@ -20,7 +20,7 @@
name="estate_help_text"
top="14"
word_wrap="true"
- width="275">
+ width="250">
Changes to settings on this tab will affect all regions in the estate.
</text>
<text
@@ -198,7 +198,7 @@
<button
follows="left|top"
height="23"
- label="Kick User from Estate..."
+ label="Kick Resident from Estate..."
layout="topleft"
left="50"
name="kick_user_from_estate_btn"
diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml
index c06e67a4bb..ca9579284b 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general.xml
@@ -171,27 +171,51 @@
width="100">
Rating:
</text>
- <combo_box
+ <icons_combo_box
+ follows="left|top"
height="20"
label="Moderate"
layout="topleft"
left_delta="100"
name="access_combo"
top_delta="0"
- width="85">
- <combo_box.item
+ width="105">
+ <icons_combo_box.drop_down_button
+ image_overlay="Parcel_M_Light"
+ image_overlay_alignment="left"
+ imgoverlay_label_space="3"
+ pad_left="3"/>
+ <icons_combo_box.item
label="Adult"
name="Adult"
- value="42" />
- <combo_box.item
+ value="42">
+ <item.columns
+ halign="center"
+ type="icon"
+ value="Parcel_R_Light"
+ width="20"/>
+ </icons_combo_box.item>
+ <icons_combo_box.item
label="Moderate"
name="Mature"
- value="21" />
- <combo_box.item
+ value="21">
+ <item.columns
+ halign="center"
+ type="icon"
+ value="Parcel_M_Light"
+ width="20"/>
+ </icons_combo_box.item>
+ <icons_combo_box.item
label="General"
name="PG"
- value="13" />
- </combo_box>
+ value="13">
+ <item.columns
+ halign="center"
+ type="icon"
+ value="Parcel_PG_Light"
+ width="20"/>
+ </icons_combo_box.item>
+ </icons_combo_box>
<button
enabled="false"
follows="left|top"
@@ -205,7 +229,7 @@
<button
follows="left|top"
height="20"
- label="Teleport Home One User..."
+ label="Teleport Home One Resident..."
layout="topleft"
left="10"
name="kick_btn"
@@ -214,7 +238,7 @@
<button
follows="left|top"
height="20"
- label="Teleport Home All Users..."
+ label="Teleport Home All Residents..."
layout="topleft"
left_delta="0"
name="kick_all_btn"
diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
index 525c5aa8e7..ffa1a257d5 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
@@ -203,7 +203,7 @@
<button
follows="left|top"
height="20"
- label="Teleport Home One User..."
+ label="Teleport Home One Resident..."
layout="topleft"
left="10"
name="kick_btn"
@@ -212,7 +212,7 @@
<button
follows="left|top"
height="20"
- label="Teleport Home All Users..."
+ label="Teleport Home All Residents..."
layout="topleft"
left_delta="0"
name="kick_all_btn"
diff --git a/indra/newview/skins/default/xui/en/panel_region_texture.xml b/indra/newview/skins/default/xui/en/panel_region_texture.xml
index 04dbf73be9..5d910ea659 100644
--- a/indra/newview/skins/default/xui/en/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_texture.xml
@@ -148,103 +148,33 @@
name="height_text_lbl6"
top="185"
width="100">
- Southwest
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl7"
- top_delta="0"
- width="100">
Northwest
</text>
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_0"
- top_delta="15"
- width="100" />
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_1"
- top_delta="0"
- width="100" />
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_0"
- top_delta="20"
- width="100" />
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_1"
- top_delta="0"
- width="100" />
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="51"
- name="height_text_lbl8"
- top_pad="10"
- width="100">
- Southeast
- </text>
<text
follows="left|top"
height="20"
layout="topleft"
left_pad="10"
- name="height_text_lbl9"
+ name="height_text_lbl7"
top_delta="0"
width="100">
Northeast
</text>
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_2"
- top_delta="15"
- width="100" />
+<!-- northwest low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left="10"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_1"
+ top_delta="15"
+ width="100" />
+<!-- northeast low-->
<spinner
follows="left|top"
height="20"
@@ -258,20 +188,22 @@
name="height_start_spin_3"
top_delta="0"
width="100" />
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_2"
- top_delta="20"
- width="100" />
- <spinner
+<!-- northwest high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left="10"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_1"
+ top_delta="20"
+ width="100" />
+<!-- northeast high-->
+ <spinner
follows="left|top"
height="20"
increment="0.5"
@@ -284,18 +216,94 @@
name="height_range_spin_3"
top_delta="0"
width="100" />
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="height_text_lbl10"
- top_delta="30"
- width="400"
- word_wrap="true">
- These values represent the blend range for the textures above.
- </text>
- <text
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="51"
+ name="height_text_lbl8"
+ top_pad="10"
+ width="100">
+ Southwest
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left_pad="10"
+ name="height_text_lbl9"
+ top_delta="0"
+ width="100">
+ Southeast
+ </text>
+<!-- southwest low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left="10"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_0"
+ top_delta="15"
+ width="100" />
+<!-- southeast low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_2"
+ top_delta="0"
+ width="100" />
+<!--southwest high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left="10"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_0"
+ top_delta="20"
+ width="100" />
+<!-- southeast high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_2"
+ top_delta="0"
+ width="100" />
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="10"
+ name="height_text_lbl10"
+ top_delta="30"
+ width="400"
+ word_wrap="true">
+ These values represent the blend range for the textures above.
+ </text>
+ <text
follows="left|top"
height="20"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml
index d14355b9f4..c5c66c04d5 100644
--- a/indra/newview/skins/default/xui/en/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml
@@ -143,7 +143,6 @@
name="Script Editor"
width="487"
show_line_numbers="true"
- handle_edit_keys_directly="true"
word_wrap="true">
Loading...
</text_editor>
@@ -178,5 +177,5 @@
top_pad="-35"
right="487"
name="Save_btn"
- width="61" />
+ width="81" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
index 44afadf65a..f9c86fc75b 100644
--- a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
+++ b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
@@ -5,7 +5,7 @@
left="0"
name="LLScrollingPanelParam"
top="152"
- width="270">
+ width="290">
<text
follows="left|top"
height="16"
@@ -46,6 +46,36 @@
width="128">
Loading...
</text>
+ <view_border
+ layout="topleft"
+ follows="left|top"
+ left="2"
+ top="0"
+ width="132"
+ height="132"
+ thickness="2"
+ shadow_light_color="LtGray_50"
+ highlight_light_color="LtGray_50"
+ highlight_dark_color="LtGray_50"
+ shadow_dark_color="LtGray_50"
+ bevel_style="in"
+ name="left_border"
+ />
+ <view_border
+ layout="topleft"
+ follows="left|top"
+ left_pad="2"
+ top_delta="0"
+ width="132"
+ height="132"
+ thickness="2"
+ shadow_light_color="LtGray_50"
+ highlight_light_color="LtGray_50"
+ highlight_dark_color="LtGray_50"
+ shadow_dark_color="LtGray_50"
+ bevel_style="in"
+ name="right_border"
+ />
<button
enabled="false"
height="132"
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 96c61b69f5..c2624ce0d0 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -3,7 +3,7 @@
background_opaque="true"
background_visible="true"
bg_opaque_color="MouseGray"
- chrome="true"
+ chrome="true"
follows="top|right"
height="19"
layout="topleft"
@@ -11,7 +11,7 @@
mouse_opaque="false"
name="status"
top="19"
- tab_stop="false"
+ tab_stop="false"
width="1000">
<panel.string
name="StatBarDaysOfWeek">
@@ -51,20 +51,20 @@
image_unselected="spacer35.tga"
image_pressed="spacer35.tga"
height="16"
- right="-204"
+ right="-230"
label_shadow="false"
name="buycurrency"
tool_tip="My Balance"
top="3"
- width="100" />
+ width="120" />
<button
auto_resize="true"
halign="right"
font="SansSerifSmall"
follows="right|top"
- image_selected="BuyArrow_Over"
- image_unselected="BuyArrow_Over"
- image_pressed="BuyArrow_Press"
+ image_selected="spacer35.tga"
+ image_unselected="spacer35.tga"
+ image_pressed="spacer35.tga"
height="16"
label="Buy L$"
label_color="EmphasisColor"
@@ -75,7 +75,7 @@
pad_bottom="2"
tool_tip="Click to buy more L$"
top="2"
- width="45" />
+ width="55" />
<text
type="string"
font="SansSerifSmall"
@@ -88,36 +88,36 @@
left_pad="0"
name="TimeText"
tool_tip="Current time (Pacific)"
- width="80">
+ width="100">
24:00 AM PST
</text>
<button
follows="right|top"
- height="15"
- image_selected="Pause_Off"
- image_unselected="Play_Off"
- image_pressed="Play_Press"
- image_pressed_selected="Pause_Press"
+ height="16"
+ image_selected="Play_Off"
+ image_unselected="Pause_Off"
+ image_pressed="Pause_Press"
+ image_pressed_selected="Play_Press"
is_toggle="true"
- left_pad="15"
- top="2"
+ left_pad="20"
+ top="1"
name="media_toggle_btn"
- tool_tip="Click to toggle media"
+ tool_tip="Start/Stop All Media (Music, Video, Web pages)"
width="16" >
</button>
<button
follows="right|top"
- height="15"
+ height="16"
image_selected="AudioMute_Off"
image_pressed="Audio_Press"
image_unselected="Audio_Off"
is_toggle="true"
- left_pad="5"
+ left_pad="10"
top="2"
name="volume_btn"
tool_tip="Global Volume Control"
width="16" />
- <text
+ <!-- <text
follows="right|top"
halign="center"
height="12"
@@ -125,5 +125,5 @@
left_delta="0"
name="stat_btn"
top_delta="0"
- width="20"/>
+ width="20"/>-->
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
index ecf7252a11..21addb8e6f 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
@@ -1,17 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="Teleport History" bottom="0" height="400" left="0" width="380"
+<panel name="Teleport History" bottom="0" height="400" left="0" width="313"
help_topic="panel_teleport_history"
- border="false" follows="left|top|right|bottom">
+ border="false" follows="left|top|right|bottom"
+ background_visible="true"
+ bg_alpha_color="DkGray">
<accordion
follows="left|top|right|bottom"
- height="368"
+ height="373"
layout="topleft"
- left="0"
+ left="3"
top="0"
name="history_accordion"
background_visible="true"
bg_alpha_color="DkGray2"
- width="380">
+ width="307">
<accordion_tab
layout="topleft"
name="today"
@@ -23,7 +25,7 @@
left="0"
name="today_items"
top="0"
- width="380">
+ width="307">
</flat_list_view>
</accordion_tab>
<accordion_tab
@@ -37,7 +39,7 @@
left="0"
name="yesterday_items"
top="0"
- width="380">
+ width="307">
</flat_list_view>
</accordion_tab>
<accordion_tab
@@ -51,9 +53,9 @@
left="0"
name="2_days_ago"
top="0"
- width="380">
+ width="307">
</flat_list_view>
- </accordion_tab>5
+ </accordion_tab>
<accordion_tab
layout="topleft"
name="3_days_ago"
@@ -65,7 +67,7 @@
left="0"
name="3_days_ago"
top="0"
- width="380">
+ width="307">
</flat_list_view>
</accordion_tab>
<accordion_tab
@@ -79,7 +81,7 @@
left="0"
name="4_days_ago"
top="0"
- width="380">
+ width="307">
</flat_list_view>
</accordion_tab>
<accordion_tab
@@ -93,7 +95,7 @@
left="0"
name="5_days_ago_items"
top="0"
- width="380">
+ width="307">
</flat_list_view>
</accordion_tab>
<accordion_tab
@@ -107,7 +109,7 @@
left="0"
name="6_days_and_older_items"
top="0"
- width="380">
+ width="307">
</flat_list_view>
</accordion_tab>
<accordion_tab
@@ -121,7 +123,7 @@
left="0"
name="1_month_and_older_items"
top="0"
- width="380">
+ width="307">
</flat_list_view>
</accordion_tab>
<accordion_tab
@@ -135,34 +137,41 @@
left="0"
name="6_months_and_older_items"
top="0"
- width="380">
+ width="307">
</flat_list_view>
</accordion_tab>
</accordion>
<panel
- bg_opaque_color="DkGray2"
- bg_alpha_color="DkGray2"
- background_visible="true"
- background_opaque="true"
+ background_visible="true"
bevel_style="none"
bottom="0"
follows="left|right|bottom"
- height="38"
+ height="27"
layout="bottomleft"
- left="0"
+ left="3"
name="bottom_panel"
- width="380">
+ width="313">
<button
follows="bottom|left"
- tool_tip="Show additional optioins"
- height="18"
- image_disabled="OptionsMenu_Disabled"
- image_selected="OptionsMenu_Press"
- image_unselected="OptionsMenu_Off"
+ tool_tip="Show additional options"
+ height="25"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
layout="topleft"
- left="10"
+ left="0"
name="gear_btn"
- top="14"
- width="18" />
+ top="1"
+ width="31" />
+ <icon
+ follows="bottom|left"
+ height="25"
+ image_name="Toolbar_Right_Off"
+ layout="topleft"
+ left_pad="1"
+ name="dummy_icon"
+ width="273"
+ />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
index cd66c56ca1..7b22b2cce1 100644
--- a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
+++ b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
@@ -32,9 +32,9 @@
parameter="MuteAudio" />
</slider>
<button
- left="7"
+ left="10"
top_pad="9"
- width="18"
+ width="12"
height="12"
follows="top|left"
name="prefs_btn"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index b3d55fec65..c5efa2e221 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -102,14 +102,17 @@ width="333">
name="newlook_btn"
width="100" />-->
<panel
- class="panel_look_info"
- filename="panel_look_info.xml"
+ class="panel_outfit_edit"
+ filename="panel_outfit_edit.xml"
+ height="550"
follows="all"
layout="topleft"
- left="0"
- name="panel_look_info"
- top="35"
- visible="false" />
+ left="5"
+ min_height="410"
+ name="panel_outfit_edit"
+ top="5"
+ visible="false"
+ width="320"/>
<panel
class="panel_edit_wearable"
filename="panel_edit_wearable.xml"
@@ -117,6 +120,6 @@ width="333">
layout="topleft"
left="0"
name="panel_edit_wearable"
- top="35"
+ top="0"
visible="false" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 12c06504ca..b840fdd31b 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -403,7 +403,7 @@ top_pad="10"
layout="topleft"
name="button_panel"
left="5"
- bottom="2"
+ top_pad="0"
width="313">
<button
height="23"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index d2c9e56bc3..d46783e058 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -77,7 +77,7 @@
top="0"
use_ellipses="true"
value="Object Profile"
- width="275" />
+ width="290" />
<text
follows="top|left"
height="13"
@@ -94,6 +94,7 @@
layout="topleft"
left="10"
help_topic=""
+ name="properties_panel"
top="45"
width="313"
background_visible="true"
@@ -302,7 +303,7 @@
follows="left|top|right"
layout="topleft"
name="perm_modify"
- width="200">
+ width="310">
You can modify this object
</text>
<text
@@ -549,5 +550,16 @@
name="buy_btn"
top="0"
width="100" />
+ <button
+ follows="bottom|left"
+ height="23"
+ label="Details"
+ layout="topleft"
+ left="5"
+ name="details_btn"
+ top="0"
+ width="100"
+ visible="false" />
+
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 455b4be264..0c73b8d769 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -14,7 +14,14 @@
<!-- starting up -->
<string name="StartupDetectingHardware">Detecting hardware...</string>
- <string name="StartupLoading">Loading</string>
+ <string name="StartupLoading">Loading [APP_NAME]...</string>
+ <string name="StartupClearingCache">Clearing cache...</string>
+ <string name="StartupInitializingTextureCache">Initializing Texture Cache...</string>
+ <string name="StartupInitializingVFS">Initializing VFS...</string>
+
+ <!-- progress -->
+ <string name="ProgressRestoring">Restoring...</string>
+ <string name="ProgressChangingResolution">Changing Resolution...</string>
<!-- Legacy strings, almost never used -->
<string name="Fullbright">Fullbright (Legacy)</string> <!-- used in the Build > materials dropdown-->
@@ -40,12 +47,18 @@
<string name="LoginConnectingToRegion">Connecting to region...</string>
<string name="LoginDownloadingClothing">Downloading clothing...</string>
<string name="LoginFailedNoNetwork">Network Error: Could not establish connection, please check your network connection.</string>
+ <string name="LoginFailed">Login failed.</string>
<string name="Quit">Quit</string>
<string name="create_account_url">http://join.secondlife.com/</string>
<!-- Disconnection -->
<string name="AgentLostConnection">This region may be experiencing trouble. Please check your connection to the Internet.</string>
-
+ <string name="SavingSettings">Saving your settings...</string>
+ <string name="LoggingOut">Logging out...</string>
+ <string name="ShuttingDown">Shutting down...</string>
+ <string name="YouHaveBeenDisconnected">You have been disconnected from the region you were in.</string>
+ <string name="SentToInvalidRegion">You were sent to an invalid region.</string>
+ <string name="TestingDisconnect">Testing viewer disconnect</string>
<!-- Tooltip, lltooltipview.cpp -->
<string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar -->
@@ -68,6 +81,12 @@
<string name="TooltipHttpUrl">Click to view this web page</string>
<string name="TooltipSLURL">Click to view this location's information</string>
<string name="TooltipAgentUrl">Click to view this Resident's profile</string>
+ <string name="TooltipAgentMute">Click to mute this Resident</string>
+ <string name="TooltipAgentUnmute">Click to unmute this Resident</string>
+ <string name="TooltipAgentIM">Click to IM this Resident</string>
+ <string name="TooltipAgentPay">Click to Pay this Resident</string>
+ <string name="TooltipAgentOfferTeleport">Click to offer a teleport request to this Resident</string>
+ <string name="TooltipAgentRequestFriend">Click to send a friend request to this Resident</string>
<string name="TooltipGroupUrl">Click to view this group's description</string>
<string name="TooltipEventUrl">Click to view this event's description</string>
<string name="TooltipClassifiedUrl">Click to view this classified</string>
@@ -76,15 +95,26 @@
<string name="TooltipObjectIMUrl">Click to view this object's description</string>
<string name="TooltipMapUrl">Click to view this location on a map</string>
<string name="TooltipSLAPP">Click to run the secondlife:// command</string>
- <string name="CurrentURL" value=" CurrentURL: [CurrentURL]" />
+ <string name="CurrentURL" value=" CurrentURL: [CurrentURL]" />
+ <string name="TooltipPrice" value=" L$[PRICE]-" />
+
<!-- text for SLURL labels -->
<string name="SLurlLabelTeleport">Teleport to</string>
<string name="SLurlLabelShowOnMap">Show Map for</string>
+ <!-- label strings for secondlife:///app/agent SLapps -->
+ <string name="SLappAgentMute">Mute</string>
+ <string name="SLappAgentUnmute">Unmute</string>
+ <string name="SLappAgentIM">IM</string>
+ <string name="SLappAgentPay">Pay</string>
+ <string name="SLappAgentOfferTeleport">Offer Teleport to </string>
+ <string name="SLappAgentRequestFriend">Friend Request </string>
+
<!-- ButtonToolTips, llfloater.cpp -->
<string name="BUTTON_CLOSE_DARWIN">Close (&#8984;W)</string>
<string name="BUTTON_CLOSE_WIN">Close (Ctrl+W)</string>
+ <string name="BUTTON_CLOSE_CHROME">Close</string>>
<string name="BUTTON_RESTORE">Restore</string>
<string name="BUTTON_MINIMIZE">Minimize</string>
<string name="BUTTON_TEAR_OFF">Tear Off</string>
@@ -132,6 +162,7 @@
<string name="AssetErrorUnknownStatus">Unknown status</string>
<!-- Asset Type human readable names: these will replace variable [TYPE] in notification FailedToFindWearable* -->
+ <!-- Will also replace [OBJECTTYPE] in notifications: UserGiveItem, ObjectGiveItem -->
<string name="texture">texture</string>
<string name="sound">sound</string>
<string name="calling card">calling card</string>
@@ -156,6 +187,7 @@
<string name="simstate">simstate</string>
<string name="favorite">favorite</string>
<string name="symbolic link">link</string>
+ <string name="symbolic folder link">folder link</string>
<!-- llvoavatar. Displayed in the avatar chat bubble -->
<string name="AvatarEditingAppearance">(Editing Appearance)</string>
@@ -1769,6 +1801,9 @@ Clears (deletes) the media and all params from the given face.
<string name="tattoo">Tattoo</string>
<string name="invalid">invalid</string>
+ <!-- Wearable List-->
+ <string name="NewWearable">New [WEARABLE_ITEM]</string>
+
<!-- LLGroupNotify -->
<!-- used in the construction of a Group Notice blue dialog box, buttons, tooltip etc. Seems to be no longer utilized by code in Viewer 2.0 -->
<string name="next">Next</string>
@@ -1818,6 +1853,7 @@ Clears (deletes) the media and all params from the given face.
<string name="LoadingContents">Loading contents...</string>
<string name="NoContents">No contents</string>
<string name="WornOnAttachmentPoint" value=" (worn on [ATTACHMENT_POINT])" />
+ <string name="ActiveGesture" value="[GESLABEL] (active)"/>
<!-- Inventory permissions -->
<string name="PermYes">Yes</string>
<string name="PermNo">No</string>
@@ -1874,6 +1910,7 @@ Clears (deletes) the media and all params from the given face.
<string name="InvFolder favorite">Favorites</string>
<string name="InvFolder Current Outfit">Current Outfit</string>
<string name="InvFolder My Outfits">My Outfits</string>
+ <string name="InvFolder Accessories">Accessories</string>
<!-- are used for Friends and Friends/All folders in Inventory "Calling cards" folder. See EXT-694-->
<string name="InvFolder Friends">Friends</string>
@@ -2103,6 +2140,10 @@ Clears (deletes) the media and all params from the given face.
<!-- panel contents -->
<string name="PanelContentsNewScript">New Script</string>
+ <string name="PanelContentsTooltip">Content of object</string>
+
+ <!-- panel preferences general -->
+ <string name="BusyModeResponseDefault">The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.</string>
<!-- Mute -->
<string name="MuteByName">(by name)</string>
@@ -2162,7 +2203,8 @@ Clears (deletes) the media and all params from the given face.
<!-- Viewer menu -->
<string name="AcquiredItems">Acquired Items</string>
<string name="Cancel">Cancel</string>
- <string name="UploadingCosts">Uploading %s costs</string>
+ <string name="UploadingCosts">Uploading [NAME] costs L$ [AMOUNT]</string>
+ <string name="BuyingCosts">Buying this costs L$ [AMOUNT]</string>
<string name="UnknownFileExtension">
Unknown file extension .%s
Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
@@ -3007,4 +3049,54 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="unread_chat_multiple">
[SOURCES] have said something new
</string>"
+ <string name="session_initialization_timed_out_error">
+ The session initialization is timed out
+ </string>
+
+ <!-- Financial operations strings -->
+ <string name="paid_you_ldollars">[NAME] paid you L$[AMOUNT]</string>
+ <string name="you_paid_ldollars">You paid [NAME] L$[AMOUNT] [REASON].</string>
+ <string name="you_paid_ldollars_no_reason">You paid [NAME] L$[AMOUNT].</string>
+ <string name="you_paid_ldollars_no_name">You paid L$[AMOUNT] [REASON].</string>
+ <string name="for a parcel of land">for a parcel of land</string>
+ <string name="for a land access pass">for a land access pass</string>
+ <string name="for deeding land">for deeding land</string>
+ <string name="to create a group">to create a group</string>
+ <string name="to join a group">to join a group</string>
+ <string name="to upload">to upload</string>
+
+ <string name="giving">Giving L$ [AMOUNT]</string>
+ <string name="uploading_costs">Uploading costs L$ [AMOUNT]</string>
+ <string name="this_costs">This costs L$ [AMOUNT]</string>
+ <string name="buying_selected_land">Buying selected land for L$ [AMOUNT]</string>
+ <string name="this_object_costs">This object costs L$ [AMOUNT]</string>
+
+ <string name="group_role_everyone">Everyone</string>
+ <string name="group_role_officers">Officers</string>
+ <string name="group_role_owners">Owners</string>
+
+ <string name="uploading_abuse_report">Uploading...
+
+Abuse Report</string>
+
+ <!-- names for new inventory items-->
+ <string name="New Shape">New Shape</string>
+ <string name="New Skin">New Skin</string>
+ <string name="New Hair">New Hair</string>
+ <string name="New Eyes">New Eyes</string>
+ <string name="New Shirt">New Shirt</string>
+ <string name="New Pants">New Pants</string>
+ <string name="New Shoes">New Shoes</string>
+ <string name="New Socks">New Socks</string>
+ <string name="New Jacket">New Jacket</string>
+ <string name="New Gloves">New Gloves</string>
+ <string name="New Undershirt">New Undershirt</string>
+ <string name="New Underpants">New Underpants</string>
+ <string name="New Skirt">New Skirt</string>
+ <string name="New Alpha">New Alpha</string>
+ <string name="New Tattoo">New Tattoo</string>
+ <string name="Invalid Wearable">Invalid Wearable</string>
+ <string name="New Script">New Script</string>
+ <string name="New Folder">New Folder</string>
+ <string name="Contents">Contents</string>
</strings>
diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml
index e8f6b1319a..bae821d3b5 100644
--- a/indra/newview/skins/default/xui/en/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/en/teleport_strings.xml
@@ -61,6 +61,9 @@ Try again in a moment.
<message name="completing">
Completing teleport.
</message>
+ <message name="completed_from">
+ Teleport completed from [T_SLURL]
+ </message>
<message name="resolving">
Resolving destination.
</message>
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
index 63f08a4250..413ca1d1ef 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
@@ -24,7 +24,7 @@
follows="left|top|bottom"
height="20"
left="2"
- mouse_opaque="true"
+ mouse_opaque="false"
name="adhoc_icon"
width="21" />
<chiclet_im_adhoc.unread_notifications
diff --git a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
index d9b6387f0d..6190ea7872 100644
--- a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
+++ b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
@@ -5,7 +5,7 @@
allow_html="true"
allow_scroll="true"
bg_visible="false"
- more_label="More"
+ label="More"
follows="left|top|right"
name="text"
read_only="true"
diff --git a/indra/newview/skins/default/xui/en/widgets/line_editor.xml b/indra/newview/skins/default/xui/en/widgets/line_editor.xml
index a21e3f2645..a054960bf8 100644
--- a/indra/newview/skins/default/xui/en/widgets/line_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/line_editor.xml
@@ -3,7 +3,6 @@
background_image_disabled="TextField_Disabled"
background_image_focused="TextField_Active"
select_on_focus="false"
- handle_edit_keys_directly="false"
commit_on_focus_lost="true"
ignore_tab="true"
cursor_color="TextCursorColor"
diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml
index a9a760b3a4..32e443a058 100644
--- a/indra/newview/skins/default/xui/en/widgets/search_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/search_editor.xml
@@ -3,6 +3,7 @@
clear_button_visible="false"
search_button_visible="true"
text_pad_left="6"
+ text_pad_right="6"
select_on_focus="true"
text_tentative_color="TextFgTentativeColor"
background_image="TextField_Search_Off"
@@ -21,5 +22,6 @@
image_unselected="Icon_Close_Foreground"
image_selected="Icon_Close_Press"
pad_right="4"
+ pad_left="4"
width="16" />
</search_editor>
diff --git a/indra/newview/skins/default/xui/en/widgets/slider_bar.xml b/indra/newview/skins/default/xui/en/widgets/slider_bar.xml
index 89d5950e98..ea63cac790 100644
--- a/indra/newview/skins/default/xui/en/widgets/slider_bar.xml
+++ b/indra/newview/skins/default/xui/en/widgets/slider_bar.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!--All horizontal sliders are configured to have no highlighted track. See EXT-5939. -->
<slider_bar track_color="SliderTrackColor"
thumb_outline_color="SliderThumbOutlineColor"
thumb_center_color="SliderThumbCenterColor"
@@ -7,6 +8,6 @@
thumb_image_disabled="SliderThumb_Disabled"
track_image_horizontal="SliderTrack_Horiz"
track_image_vertical="SliderTrack_Vert"
- track_highlight_horizontal_image="SliderTrack_Horiz"
+ track_highlight_horizontal_image="transparent.j2c"
track_highlight_vertical_image="SliderTrack_Vert"
font="SansSerif" />
diff --git a/indra/newview/skins/default/xui/en/widgets/text.xml b/indra/newview/skins/default/xui/en/widgets/text.xml
index 855584a0db..998ec5b170 100644
--- a/indra/newview/skins/default/xui/en/widgets/text.xml
+++ b/indra/newview/skins/default/xui/en/widgets/text.xml
@@ -15,6 +15,7 @@
bg_visible="false"
border_visible="false"
hover="false"
+ sound_flags="0"
text_color="LabelTextColor"
v_pad="0"
max_length="4096"/>
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
index 0ba8fdad18..cb1aa5eaa1 100644
--- a/indra/newview/skins/default/xui/es/floater_about.xml
+++ b/indra/newview/skins/default/xui/es/floater_about.xml
@@ -8,7 +8,7 @@
Compilado con [COMPILER], versión [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Estás en [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] en la región de [REGION], alojada en [HOSTNAME] ([HOSTIP])
+ Estás en la posición [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1], de [REGION], alojada en &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
[SERVER_VERSION]
[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]]
</floater.string>
@@ -39,17 +39,23 @@ Versión de Vivox: [VIVOX_VERSION]
</floater.string>
<tab_container name="about_tab">
<panel label="Información" name="support_panel">
- <button label="Copiar al portapapeles" name="copy_btn"/>
+ <button label="Copiar al portapapeles" name="copy_btn" width="165"/>
</panel>
<panel label="Créditos" name="credits_panel">
<text_editor name="credits_editor">
- Le ofrecen Second Life Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, y otros muchos.
+ Te ofrecen Second Life Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les y muchos otros.
- Gracias a todos estos residentes por contribuir a garantizar que esta es la mejor versión: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+Gracias a los siguientes Residentes por ayudarnos a estar seguros de que, hoy por hoy, esta es la mejor versión: (pendiente)
- Para tener éxito en los negocios, se atrevido, se el primero, se diferente. (Henry Marchant)
+
+
+
+
+
+No es frecuente la mente que puede hacer que lo que hasta ahora no existía de pronto salte a la vista. Sí es frecuente -y engañoso- gritar &apos;A mí se me podía haber ocurrido eso&apos;, pero el hecho es que no se hizo, un hecho muy significativo y revelador.
+ -- Douglas Adams
</text_editor>
</panel>
<panel label="Licencias" name="licenses_panel">
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 f215348b00..c453d415b4 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterland" title="ACERCA DEL TERRENO">
+ <floater.string name="maturity_icon_general">
+ &quot;Parcel_PG_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_moderate">
+ &quot;Parcel_M_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_adult">
+ &quot;Parcel_R_Dark&quot;
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] minutos
</floater.string>
@@ -15,7 +24,7 @@
<tab_container name="landtab">
<panel label="GENERAL" name="land_general_panel">
<panel.string name="new users only">
- Sólo usuarios nuevos
+ Sólo nuevos Residentes
</panel.string>
<panel.string name="anyone">
Cualquiera
@@ -81,9 +90,12 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text name="Group:">
Grupo:
</text>
- <button label="Configurar..." label_selected="Configurar..." name="Set..."/>
+ <text name="GroupText">
+ Leyla Linden
+ </text>
+ <button label="Configurar" name="Set..."/>
<check_box label="Permitir transferir al grupo" name="check deed" tool_tip="Un oficial del grupo puede transferir este terreno al grupo. El terreno será apoyado por el grupo en sus asignaciones de terreno."/>
- <button label="Transferir..." label_selected="Transferir..." name="Deed..." tool_tip="Sólo si es usted un oficial del grupo seleccionado puede transferir terreno."/>
+ <button label="Transferir" name="Deed..." tool_tip="Sólo si es usted un oficial del grupo seleccionado puede transferir terreno."/>
<check_box label="El propietario hace una contribución transfiriendo" name="check contrib" tool_tip="Cuando el terreno se transfiere al grupo, el antiguo propietario contribuye con una asignación suficiente de terreno."/>
<text name="For Sale:">
En venta:
@@ -94,7 +106,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text name="For Sale: Price L$[PRICE].">
Precio: [PRICE] L$ ([PRICE_PER_SQM] L$/m²).
</text>
- <button label="Vender el terreno..." label_selected="Vender el terreno..." name="Sell Land..."/>
+ <button label="Vender el terreno" name="Sell Land..."/>
<text name="For sale to">
En venta a: [BUYER]
</text>
@@ -104,7 +116,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text name="Selling with no objects in parcel." width="216">
Los objetos no se incluyen en la venta.
</text>
- <button bottom="-245" font="SansSerifSmall" label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" left="275" name="Cancel Land Sale" width="165"/>
+ <button bottom="-245" font="SansSerifSmall" label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" left="275" name="Cancel Land Sale"/>
<text name="Claimed:">
Reclamada:
</text>
@@ -123,12 +135,13 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text name="DwellText">
0
</text>
- <button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/>
- <button label="Comprar para el grupo..." label_selected="Comprar para el grupo..." name="Buy For Group..."/>
- <button label="Comprar un pase..." label_selected="Comprar un pase..." left="130" name="Buy Pass..." tool_tip="Un pase le da acceso temporal a este terreno." width="125"/>
- <button label="Abandonar el terreno..." label_selected="Abandonar el terreno..." name="Abandon Land..."/>
- <button label="Reclamar el terreno..." label_selected="Reclamar el terreno..." name="Reclaim Land..."/>
- <button label="Venta Linden..." label_selected="Venta Linden..." name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/>
+ <button label="Comprar terreno" left="130" name="Buy Land..." width="125"/>
+ <button label="Información del script" name="Scripts..."/>
+ <button label="Comprar para el grupo" name="Buy For Group..."/>
+ <button label="Comprar un pase" left="130" name="Buy Pass..." tool_tip="Un pase le da acceso temporal a este terreno." width="125"/>
+ <button label="Abandonar el terreno" name="Abandon Land..."/>
+ <button label="Reclamar el terreno" name="Reclaim Land..."/>
+ <button label="Venta Linden" name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/>
</panel>
<panel label="CONTRATO" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -194,10 +207,10 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
</panel>
<panel label="OBJETOS" name="land_objects_panel">
<panel.string name="objects_available_text">
- [COUNT] de un máximo de [MAX] ([AVAILABLE] disponibles)
+ [COUNT] de un máx. de [MAX] ([AVAILABLE] disponibles)
</panel.string>
<panel.string name="objects_deleted_text">
- [COUNT] de un máximo de [MAX] ([DELETED] se borrarán)
+ [COUNT] de un máx. de [MAX] ([DELETED] se borrarán)
</panel.string>
<text name="parcel_object_bonus">
Plus de objetos en la región: [BONUS]
@@ -206,7 +219,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
Uso de primitivas:
</text>
<text left="204" name="objects_available" width="250">
- [COUNT] de un máximo de [MAX] ([AVAILABLE] disponibles)
+ [COUNT] de un máx. de [MAX] ([AVAILABLE] disponibles)
</text>
<text name="Primitives parcel supports:" width="200">
Prims que admite la parcela:
@@ -227,7 +240,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/>
- <button label="Devolver..." label_selected="Devolver..." name="ReturnOwner..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/>
+ <button label="Devolver" name="ReturnOwner..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/>
<text left="14" name="Set to group:" width="180">
Del grupo:
</text>
@@ -235,7 +248,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/>
- <button label="Devolver..." label_selected="Devolver..." name="ReturnGroup..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/>
+ <button label="Devolver" name="ReturnGroup..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/>
<text left="14" name="Owned by others:" width="128">
Propiedad de otros:
</text>
@@ -243,7 +256,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/>
- <button label="Devolver..." label_selected="Devolver..." name="ReturnOther..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/>
+ <button label="Devolver" name="ReturnOther..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/>
<text left="14" name="Selected / sat upon:" width="193">
Seleccionados / con gente sentada:
</text>
@@ -251,14 +264,14 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
[COUNT]
</text>
<text left="4" name="Autoreturn" width="412">
- Autodevolución de objetos a otros residentes (minutos; 0 la desactiva):
+ Devolución automática de objetos de otros Residentes (minutos, 0 para desactivarla):
</text>
<line_editor name="clean other time" right="-20"/>
<text name="Object Owners:" width="150">
Propietarios de los objetos:
</text>
<button label="Actualizar la lista" label_selected="Actualizar la lista" left="158" name="Refresh List" tool_tip="Refresh Object List"/>
- <button label="Devolver los objetos..." label_selected="Devolver los objetos..." left="270" name="Return objects..." width="164"/>
+ <button label="Devolver los objetos" left="270" name="Return objects..." width="164"/>
<name_list name="owner list">
<name_list.columns label="Tipo" name="type"/>
<name_list.columns label="Nombre" name="name"/>
@@ -299,32 +312,32 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
Sin &apos;empujones&apos; (prevalece lo marcado en la región)
</panel.string>
<text name="allow_label">
- Permitir a otros residentes:
+ Permitir a otros Residentes:
</text>
<check_box label="Editar el terreno" name="edit land check" tool_tip="Si se marca, cualquiera podrá modificar su terreno. Mejor dejarlo desmarcado, pues usted siempre puede modificar su terreno."/>
<check_box label="Volar" name="check fly" tool_tip="Si se marca, los residentes podrán volar en su terreno. Si no, sólo podrán volar al cruzarlo o hasta que aterricen en él."/>
- <text left="162" name="allow_label2">
+ <text name="allow_label2">
Crear objetos:
</text>
- <check_box label="Todos los residentes" left="255" name="edit objects check"/>
- <check_box label="El grupo" left="385" name="edit group objects check"/>
- <text left="162" name="allow_label3">
+ <check_box label="Todos los residentes" name="edit objects check"/>
+ <check_box label="El grupo" name="edit group objects check"/>
+ <text name="allow_label3">
Dejar objetos:
</text>
- <check_box label="Todos los residentes" left="255" name="all object entry check"/>
- <check_box label="El grupo" left="385" name="group object entry check"/>
- <text left="162" name="allow_label4">
+ <check_box label="Todos los residentes" name="all object entry check"/>
+ <check_box label="El grupo" name="group object entry check"/>
+ <text name="allow_label4">
Ejecutar scripts:
</text>
- <check_box label="Todos los residentes" left="255" name="check other scripts"/>
- <check_box label="El grupo" left="385" name="check group scripts"/>
+ <check_box label="Todos los residentes" name="check other scripts"/>
+ <check_box label="El grupo" name="check group scripts"/>
<text name="land_options_label">
Opciones del terreno:
</text>
<check_box label="Seguro (sin daño)" name="check safe" tool_tip="Si se marca, convierte el terreno en &apos;seguro&apos;, desactivando el daño en combate. Si no, se activa el daño en combate."/>
<check_box label="Sin &apos;empujones&apos;" name="PushRestrictCheck" tool_tip="Previene scripts que empujen. Marcando esta opción prevendrá que en su terreno haya comportamientos destructivos."/>
<check_box label="Mostrar el sitio en la búsqueda (30 L$/semana)" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results"/>
- <combo_box left="282" name="land category with adult" width="140">
+ <combo_box name="land category with adult">
<combo_box.item label="Cualquier categoría" name="item0"/>
<combo_box.item label="Localización Linden" name="item1"/>
<combo_box.item label="&apos;Adult&apos;" name="item2"/>
@@ -339,7 +352,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
<combo_box.item label="Compras" name="item11"/>
<combo_box.item label="Otra" name="item12"/>
</combo_box>
- <combo_box left="282" name="land category" width="140">
+ <combo_box name="land category">
<combo_box.item label="Cualquier categoría" name="item0"/>
<combo_box.item label="Localización Linden" name="item1"/>
<combo_box.item label="Arte y Cultura" name="item3"/>
@@ -381,10 +394,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
Página inicial:
</text>
<line_editor left="97" name="media_url"/>
- <button label="Definir..." label_selected="Definir..." name="set_media_url"/>
- <text name="CurrentURL:">
- Página actual:
- </text>
+ <button label="Definir" name="set_media_url"/>
<check_box label="Ocultar la URL del media" left="97" name="hide_media_url" tool_tip="Marcando esta opción esconderá en la información de esta parcela -a quien no esté autorizado a verla- la URL del media. Note que esto no está disponible para HTML."/>
<text name="Description:">
Descripción:
@@ -396,8 +406,7 @@ la textura:
</text>
<texture_picker label="" left="97" name="media texture" tool_tip="Pulse para elegir una imagen"/>
<text name="replace_texture_help" width="285">
- (Los objetos que usen esta textura mostrarán la
-película o la web cuando pulse la flecha de play.)
+ Cuando pulses la flecha &apos;play&apos;, los objetos que usen esta textura mostrarán la película o la página web. Selecciona la miniatura para elegir una textura distinta.
</text>
<check_box label="Escala automática" left="97" name="media_auto_scale" tool_tip="Marcando esta opción, se ajustará el tamaño del contenido automáticamente. Puede ser ligeramente más lento y con menor calidad visual, pero no tendrá que ajustar ni alinear ninguna textura."/>
<text left="102" name="media_size" tool_tip="Tamaño en el que mostrar las web (marque 0 para por defecto)." width="120">
@@ -415,13 +424,18 @@ los media:
<check_box label="Media en bucle" name="media_loop" tool_tip="Ejecuta el media en bucle: cuando acaba su ejecución, vuelve a empezar."/>
</panel>
<panel label="SONIDO" name="land_audio_panel">
+ <check_box label="Ocultar la URL" name="hide_music_url" tool_tip="Al marcar esta opción se ocultará la URL de la música a quien no esté autorizado a ver la información de esta parcela."/>
<check_box label="Activar la voz" name="parcel_enable_voice_channel"/>
<check_box label="Autorizar la voz (establecido por el Estado)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="Limitar la voz a esta parcela" name="parcel_enable_voice_channel_local"/>
</panel>
<panel label="ACCESO" name="land_access_panel">
<panel.string name="access_estate_defined">
(Definido por el Estado)
</panel.string>
+ <panel.string name="allow_public_access">
+ Permitir el acceso público ([MATURITY])
+ </panel.string>
<panel.string name="estate_override">
Una o más de esta opciones está configurada a nivel del estado
</panel.string>
@@ -432,8 +446,8 @@ los media:
<text name="Only Allow">
Restringir el acceso a residentes verificados con:
</text>
- <check_box label="Información de pago aportada [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Impedir el acceso a los residentes no identificados."/>
- <check_box label="Verificación de edad [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Prohibir el acceso a residentes que no hayan verificado su edad. Para más información, ver [SUPPORT_SITE]."/>
+ <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="Acceso permitido al grupo: [GROUP]" name="GroupCheck" tool_tip="Elija el grupo en la pestaña General."/>
<check_box label="Vender pases a:" name="PassCheck" tool_tip="Permitir acceso temporal a esta parcela"/>
<combo_box name="pass_combo">
diff --git a/indra/newview/skins/default/xui/es/floater_animation_preview.xml b/indra/newview/skins/default/xui/es/floater_animation_preview.xml
index 39835968ae..a40d53a8a8 100644
--- a/indra/newview/skins/default/xui/es/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_animation_preview.xml
@@ -106,20 +106,23 @@ La duración máxima de una animación es de [MAX_LENGTH] segundos.
<floater.string name="E_ST_NO_XLT_EMOTE">
No se puede leer el nombre del gesto.
</floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ Nombre incorrecto de &apos;root joint&apos;, usa &quot;hip&quot;.
+ </floater.string>
<text name="name_label">
Nombre:
</text>
<text name="description_label">
Descripción:
</text>
- <spinner label="Prioridad:" label_width="72" name="priority" tool_tip="Controla qué otras animaciones pueden ser anuladas por ésta" width="110"/>
- <check_box label="Bucle:" left="8" name="loop_check" tool_tip="Hace esta animación en bucle"/>
- <spinner label="Empieza(%)" label_width="65" left="65" name="loop_in_point" tool_tip="Indica el punto en el que la animación vuelve a empezar" width="116"/>
- <spinner label="Acaba(%)" label_width="50" left="185" name="loop_out_point" tool_tip="Indica el punto en el que la animación acaba el bucle"/>
+ <spinner label="Prioridad:" name="priority" tool_tip="Controla qué otras animaciones pueden ser anuladas por ésta"/>
+ <check_box label="Bucle:" name="loop_check" tool_tip="Hace esta animación en bucle"/>
+ <spinner label="Empieza(%)" name="loop_in_point" tool_tip="Indica el punto en el que la animación vuelve a empezar"/>
+ <spinner label="Acaba(%)" name="loop_out_point" tool_tip="Indica el punto en el que la animación acaba el bucle"/>
<text name="hand_label">
Posición de las manos
</text>
- <combo_box left_delta="120" name="hand_pose_combo" tool_tip="Controla qué hacen las manos durante la animación" width="164">
+ <combo_box name="hand_pose_combo" tool_tip="Controla qué hacen las manos durante la animación">
<combo_box.item label="Extendidas" name="Spread"/>
<combo_box.item label="Relajadas" name="Relaxed"/>
<combo_box.item label="Ambas señalan" name="PointBoth"/>
@@ -137,7 +140,7 @@ La duración máxima de una animación es de [MAX_LENGTH] segundos.
<text name="emote_label">
Expresión
</text>
- <combo_box left_delta="120" name="emote_combo" tool_tip="Controla qué hace la cara durante la animación" width="164">
+ <combo_box name="emote_combo" tool_tip="Controla qué hace la cara durante la animación">
<combo_box.item label="(ninguno)" name="[None]"/>
<combo_box.item label="Aaaaah" name="Aaaaah"/>
<combo_box.item label="Con miedo" name="Afraid"/>
@@ -159,17 +162,17 @@ La duración máxima de una animación es de [MAX_LENGTH] segundos.
<combo_box.item label="Guiño" name="Wink"/>
<combo_box.item label="Preocupación" name="Worry"/>
</combo_box>
- <text name="preview_label" width="250">
+ <text name="preview_label">
Vista previa mientras
</text>
- <combo_box left_delta="120" name="preview_base_anim" tool_tip="Compruebe cómo se comporta su animación a la vez que el avatar realiza acciones comunes." width="130">
+ <combo_box name="preview_base_anim" tool_tip="Compruebe cómo se comporta su animación a la vez que el avatar realiza acciones comunes.">
<combo_box.item label="De pie" name="Standing"/>
<combo_box.item label="Caminando" name="Walking"/>
<combo_box.item label="Sentado/a" name="Sitting"/>
<combo_box.item label="Volando" name="Flying"/>
</combo_box>
- <spinner label="Combinar (sec)" label_width="125" name="ease_in_time" tool_tip="Tiempo (en segundos) en el que se combinan las animaciones" width="192"/>
- <spinner bottom_delta="-20" label="Dejar de combinar (sec)" label_width="125" left="10" name="ease_out_time" tool_tip="Tiempo (en segundos) en el que dejan de combinarse las animaciones" width="192"/>
+ <spinner label="Combinar (sec)" name="ease_in_time" tool_tip="Tiempo (en segundos) en el que se combinan las animaciones"/>
+ <spinner label="Dejar de combinar (sec)" name="ease_out_time" tool_tip="Tiempo (en segundos) en el que dejan de combinarse las animaciones"/>
<button bottom_delta="-32" name="play_btn" tool_tip="Ejecutar tu animación"/>
<button name="pause_btn" tool_tip="Pausar tu animación"/>
<button label="" name="stop_btn" tool_tip="Parar la repetición de la animación"/>
@@ -177,8 +180,7 @@ La duración máxima de una animación es de [MAX_LENGTH] segundos.
<text name="bad_animation_text">
No se ha podido leer el archivo de la animación.
-Recomendamos usar archivos BVH exportados de
-Poser 4.
+Recomendamos usar archivos BVH exportados de Poser 4.
</text>
<button label="Subir ([AMOUNT] L$)" name="ok_btn"/>
<button label="Cancelar" name="cancel_btn"/>
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
index d9ad3da633..089ff3cd68 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
@@ -7,26 +7,37 @@
Texturas compuestas
</text>
<button label="Soltar" label_selected="Soltar" name="Dump"/>
- <texture_picker label="Pelo" name="hair_grain"/>
- <texture_picker label="Alfa del pelo" name="hair_alpha"/>
- <texture_picker label="Maquillaje" name="head_bodypaint"/>
- <texture_picker label="Alfa de la cabeza" name="head_alpha"/>
- <texture_picker label="Tatuaje de la cabeza" name="head_tattoo"/>
- <texture_picker label="Ojo" name="eyes_iris"/>
- <texture_picker label="Alfa de los ojos" name="eyes_alpha"/>
- <texture_picker label="Pintura corporal: parte superior del cuerpo" name="upper_bodypaint"/>
- <texture_picker label="Camiseta" name="upper_undershirt"/>
- <texture_picker label="Guantes" name="upper_gloves"/>
- <texture_picker label="Camisa" name="upper_shirt"/>
- <texture_picker label="Parte superior de la chaqueta" name="upper_jacket"/>
- <texture_picker label="Alfa superior" name="upper_alpha"/>
- <texture_picker label="Tatuaje superior" name="upper_tattoo"/>
- <texture_picker label="Pintura corporal: parte inferior del cuerpo" name="lower_bodypaint"/>
- <texture_picker label="Ropa interior" name="lower_underpants"/>
- <texture_picker label="Calcetines" name="lower_socks"/>
- <texture_picker label="Zapatos" name="lower_shoes"/>
- <texture_picker label="Pantalones" name="lower_pants"/>
- <texture_picker label="Chaqueta" name="lower_jacket"/>
- <texture_picker label="Alfa inferior" name="lower_alpha"/>
- <texture_picker label="Tatuaje inferior" name="lower_tattoo"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <texture_picker label="Pelo" name="hair-baked"/>
+ <texture_picker label="Pelo" name="hair_grain"/>
+ <texture_picker label="Alfa del pelo" name="hair_alpha"/>
+ <texture_picker label="Cabeza" name="head-baked"/>
+ <texture_picker label="Maquillaje" name="head_bodypaint"/>
+ <texture_picker label="Alfa de la cabeza" name="head_alpha"/>
+ <texture_picker label="Tatuaje de la cabeza" name="head_tattoo"/>
+ <texture_picker label="Ojos" name="eyes-baked"/>
+ <texture_picker label="Ojo" name="eyes_iris"/>
+ <texture_picker label="Alfa de los ojos" name="eyes_alpha"/>
+ <texture_picker label="Parte superior del cuerpo" name="upper-baked"/>
+ <texture_picker label="Pintura corporal: parte superior del cuerpo" name="upper_bodypaint"/>
+ <texture_picker label="Camiseta" name="upper_undershirt"/>
+ <texture_picker label="Guantes" name="upper_gloves"/>
+ <texture_picker label="Camisa" name="upper_shirt"/>
+ <texture_picker label="Parte superior de la chaqueta" name="upper_jacket"/>
+ <texture_picker label="Alfa superior" name="upper_alpha"/>
+ <texture_picker label="Tatuaje superior" name="upper_tattoo"/>
+ <texture_picker label="Parte inferior del cuerpo" name="lower-baked"/>
+ <texture_picker label="Pintura corporal: parte inferior del cuerpo" name="lower_bodypaint"/>
+ <texture_picker label="Ropa interior" name="lower_underpants"/>
+ <texture_picker label="Calcetines" name="lower_socks"/>
+ <texture_picker label="Zapatos" name="lower_shoes"/>
+ <texture_picker label="Pantalones" name="lower_pants"/>
+ <texture_picker label="Chaqueta" name="lower_jacket"/>
+ <texture_picker label="Alfa inferior" name="lower_alpha"/>
+ <texture_picker label="Tatuaje inferior" name="lower_tattoo"/>
+ <texture_picker label="Falda" name="skirt-baked"/>
+ <texture_picker label="Falda" name="skirt"/>
+ </panel>
+ </scroll_container>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml
index de8d205ad4..9d63abd73c 100644
--- a/indra/newview/skins/default/xui/es/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_build_options.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPCIONES DE LA CUADRÃCULA">
<spinner label="Unidad de la cuadrícula (metros)" label_width="192" name="GridResolution" width="250"/>
- <spinner label="Graduación de la cuadrícula (metros)" label_width="192" name="GridDrawSize" width="250"/>
+ <spinner label="Alcance de la cuadrícula (metros)" label_width="192" name="GridDrawSize" width="250"/>
<check_box label="Activar subunidades" name="GridSubUnit"/>
<check_box label="Ver la sección transversal" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacidad de la cuadrícula">
diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency.xml b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
index 30c4ea965d..a8fa030846 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
@@ -37,7 +37,7 @@
Calculando...
</text>
<text name="buy_action">
- [NAME] [PRICE] L$
+ [ACTION]
</text>
<text name="total_label">
Mi nuevo saldo será
@@ -46,7 +46,7 @@
[AMT] L$
</text>
<text name="currency_links">
- [http://www.secondlife.com/ método de pago] | [http://www.secondlife.com/ moneda] | [http://www.secondlife.com/my/account/exchange_rates.php tipo de cambio]
+ [http://www.secondlife.com/my/account/payment_method_management.php método de pago] | [http://www.secondlife.com/my/account/currency.php moneda] | [http://www.secondlife.com/my/account/exchange_rates.php tipo de cambio]
</text>
<text name="exchange_rate_note">
Vuelve a escribir la cantidad para ver el tipo de cambio más reciente.
diff --git a/indra/newview/skins/default/xui/es/floater_buy_land.xml b/indra/newview/skins/default/xui/es/floater_buy_land.xml
index 9e5af72199..9a0a566a55 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_land.xml
@@ -1,5 +1,134 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="buy land" title="COMPRAR TERRENO">
+ <floater.string name="can_resell">
+ Puede revenderse.
+ </floater.string>
+ <floater.string name="can_not_resell">
+ No se puede revender.
+ </floater.string>
+ <floater.string name="can_change">
+ Puede unirse o dividirse.
+ </floater.string>
+ <floater.string name="can_not_change">
+ No puede unirse ni dividirse.
+ </floater.string>
+ <floater.string name="cant_buy_for_group">
+ No tiene permiso de comprar terreno para el grupo que tiene activado.
+ </floater.string>
+ <floater.string name="no_land_selected">
+ No se ha seleccionado terreno.
+ </floater.string>
+ <floater.string name="multiple_parcels_selected">
+ Se han seleccionado varias parcelas diferentes.
+Inténtelo seleccionando un área más pequeña.
+ </floater.string>
+ <floater.string name="no_permission">
+ No tiene permiso de comprar terreno para el grupo que tiene activado.
+ </floater.string>
+ <floater.string name="parcel_not_for_sale">
+ La parcela seleccionada no está en venta.
+ </floater.string>
+ <floater.string name="group_already_owns">
+ El grupo ya es propietario de la parcela.
+ </floater.string>
+ <floater.string name="you_already_own">
+ Usted ya es propietario de la parcela.
+ </floater.string>
+ <floater.string name="set_to_sell_to_other">
+ La parcela seleccionada está marcada para ser vendida a otro
+ </floater.string>
+ <floater.string name="no_public_land">
+ El área seleccionada no tiene terreno público.
+ </floater.string>
+ <floater.string name="not_owned_by_you">
+ Está seleccionado un terreno propiedad de otro Residente.
+Prueba a seleccionar un área más pequeña.
+ </floater.string>
+ <floater.string name="processing">
+ Procesando su compra...
+
+(Llevará uno o dos minutos).
+ </floater.string>
+ <floater.string name="fetching_error">
+ Se ha producido un error al ir a buscar la información de compra de terreno.
+ </floater.string>
+ <floater.string name="buying_will">
+ Al comprar este terreno:
+ </floater.string>
+ <floater.string name="buying_for_group">
+ Comprando terreno para el grupo:
+ </floater.string>
+ <floater.string name="cannot_buy_now">
+ No se puede comprar ahora:
+ </floater.string>
+ <floater.string name="not_for_sale">
+ No está en venta:
+ </floater.string>
+ <floater.string name="none_needed">
+ no necesita
+ </floater.string>
+ <floater.string name="must_upgrade">
+ Para poseer terreno, su cuenta debe ascender de categoría.
+ </floater.string>
+ <floater.string name="cant_own_land">
+ Su cuenta puede poseer terreno.
+ </floater.string>
+ <floater.string name="land_holdings">
+ Tienes [BUYER] m² de terreno.
+ </floater.string>
+ <floater.string name="pay_to_for_land">
+ Pagar por este terreno [AMOUNT] L$ a [SELLER]
+ </floater.string>
+ <floater.string name="buy_for_US">
+ Comprar [AMOUNT] L$ por, aprox., [LOCAL_AMOUNT],
+ </floater.string>
+ <floater.string name="parcel_meters">
+ Este terreno tiene [AMOUNT] m²
+ </floater.string>
+ <floater.string name="premium_land">
+ Este terreno es &apos;premium&apos;, y se considerará como de [AMOUNT] m².
+ </floater.string>
+ <floater.string name="discounted_land">
+ Este terreno es &apos;discounted&apos;, y se considerará como de [AMOUNT] m².
+ </floater.string>
+ <floater.string name="meters_supports_object">
+ [AMOUNT] m²
+admite [AMOUNT2] objetos
+ </floater.string>
+ <floater.string name="sold_with_objects">
+ vendido con los objetos
+ </floater.string>
+ <floater.string name="sold_without_objects">
+ objetos no incluidos
+ </floater.string>
+ <floater.string name="info_price_string">
+ [PRICE] L$
+([PRICE_PER_SQM] L$/m²)
+[SOLD_WITH_OBJECTS]
+ </floater.string>
+ <floater.string name="insufficient_land_credits">
+ Antes de que se complete la compra, el grupo [GROUP] necesitará
+los suficientes créditos de uso en contribución de terreno
+para cubrir esta parcela.
+ </floater.string>
+ <floater.string name="have_enough_lindens">
+ Tiene [AMOUNT] L$, cantidad suficiente para comprar este terreno.
+ </floater.string>
+ <floater.string name="not_enough_lindens">
+ Sólo tiene [AMOUNT] L$. Necesitaría [AMOUNT2] L$ más.
+ </floater.string>
+ <floater.string name="balance_left">
+ Tras la compra, aún tendrá [AMOUNT] L$.
+ </floater.string>
+ <floater.string name="balance_needed">
+ Para costearse este terreno, deberá comprar, al menos, [AMOUNT] L$.
+ </floater.string>
+ <floater.string name="no_parcel_selected">
+ (No se ha seleccionado una parcela)
+ </floater.string>
+ <floater.string name="icon_PG" value="Parcel_PG_Dark"/>
+ <floater.string name="icon_M" value="Parcel_M_Dark"/>
+ <floater.string name="icon_R" value="Parcel_R_Dark"/>
<text name="region_name_label">
Región:
</text>
@@ -107,133 +236,4 @@ Esta parcela es de 512 m².
<check_box label="Quitar [AMOUNT] m² de las contribuciones de grupo." name="remove_contribution"/>
<button label="Comprar" name="buy_btn"/>
<button label="Cancelar" name="cancel_btn"/>
- <string name="can_resell">
- Puede revenderse.
- </string>
- <string name="can_not_resell">
- No se puede revender.
- </string>
- <string name="can_change">
- Puede unirse o dividirse.
- </string>
- <string name="can_not_change">
- No puede unirse ni dividirse.
- </string>
- <string name="cant_buy_for_group">
- No tiene permiso de comprar terreno para el grupo que tiene activado.
- </string>
- <string name="no_land_selected">
- No se ha seleccionado terreno.
- </string>
- <string name="multiple_parcels_selected">
- Se han seleccionado varias parcelas diferentes.
-Inténtelo seleccionando un área más pequeña.
- </string>
- <string name="no_permission">
- No tiene permiso de comprar terreno para el grupo que tiene activado.
- </string>
- <string name="parcel_not_for_sale">
- La parcela seleccionada no está en venta.
- </string>
- <string name="group_already_owns">
- El grupo ya es propietario de la parcela.
- </string>
- <string name="you_already_own">
- Usted ya es propietario de la parcela.
- </string>
- <string name="set_to_sell_to_other">
- La parcela seleccionada está marcada para ser vendida a otro
- </string>
- <string name="no_public_land">
- El área seleccionada no tiene terreno público.
- </string>
- <string name="not_owned_by_you">
- Se ha seleccionado terreno propiedad de otro.
-Inténtelo seleccionando un área más pequeña.
- </string>
- <string name="processing">
- Procesando su compra...
-
-(Llevará uno o dos minutos).
- </string>
- <string name="fetching_error">
- Se ha producido un error al ir a buscar la información de compra de terreno.
- </string>
- <string name="buying_will">
- Al comprar este terreno:
- </string>
- <string name="buying_for_group">
- Comprando terreno para el grupo:
- </string>
- <string name="cannot_buy_now">
- No se puede comprar ahora:
- </string>
- <string name="not_for_sale">
- No está en venta:
- </string>
- <string name="none_needed">
- no necesita
- </string>
- <string name="must_upgrade">
- Para poseer terreno, su cuenta debe ascender de categoría.
- </string>
- <string name="cant_own_land">
- Su cuenta puede poseer terreno.
- </string>
- <string name="land_holdings">
- Tienes [BUYER] m² de terreno.
- </string>
- <string name="pay_to_for_land">
- Pagar por este terreno [AMOUNT] L$ a [SELLER]
- </string>
- <string name="buy_for_US">
- Comprar [AMOUNT] L$ por, aprox., [LOCAL_AMOUNT],
- </string>
- <string name="parcel_meters">
- Este terreno tiene [AMOUNT] m²
- </string>
- <string name="premium_land">
- Este terreno es &apos;premium&apos;, y se considerará como de [AMOUNT] m².
- </string>
- <string name="discounted_land">
- Este terreno es &apos;discounted&apos;, y se considerará como de [AMOUNT] m².
- </string>
- <string name="meters_supports_object">
- [AMOUNT] m²
-admite [AMOUNT2] objetos
- </string>
- <string name="sold_with_objects">
- vendido con los objetos
- </string>
- <string name="sold_without_objects">
- objetos no incluidos
- </string>
- <string name="info_price_string">
- [PRICE] L$
-([PRICE_PER_SQM] L$/m²)
-[SOLD_WITH_OBJECTS]
- </string>
- <string name="insufficient_land_credits">
- Antes de que se complete la compra, el grupo [GROUP] necesitará
-los suficientes créditos de uso en contribución de terreno
-para cubrir esta parcela.
- </string>
- <string name="have_enough_lindens">
- Tiene [AMOUNT] L$, cantidad suficiente para comprar este terreno.
- </string>
- <string name="not_enough_lindens">
- Sólo tiene [AMOUNT] L$. Necesitaría [AMOUNT2] L$ más.
- </string>
- <string name="balance_left">
- Tras la compra, aún tendrá [AMOUNT] L$.
- </string>
- <string name="balance_needed">
- Para costearse este terreno, deberá comprar, al menos, [AMOUNT] L$.
- </string>
- <string name="no_parcel_selected">
- (No se ha seleccionado una parcela)
- </string>
- <string name="buy_currency">
- Comprar [LINDENS] L$ por, aprox., [USD] US$
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml
index 40c5603706..787c37e12c 100644
--- a/indra/newview/skins/default/xui/es/floater_camera.xml
+++ b/indra/newview/skins/default/xui/es/floater_camera.xml
@@ -9,6 +9,18 @@
<floater.string name="move_tooltip">
Mover la cámara arriba y abajo, izquierda y derecha
</floater.string>
+ <floater.string name="orbit_mode_title">
+ Orbital
+ </floater.string>
+ <floater.string name="pan_mode_title">
+ Panorámica
+ </floater.string>
+ <floater.string name="avatar_view_mode_title">
+ Posición de tu cámara
+ </floater.string>
+ <floater.string name="free_mode_title">
+ Centrar el objeto
+ </floater.string>
<panel name="controls">
<joystick_track name="cam_track_stick" tool_tip="Mueve la cámara arriba y abajo, a izquierda y derecha"/>
<panel name="zoom" tool_tip="Hacer zoom con la cámara en lo enfocado">
diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml
index 672a6fbc8b..b7058d4314 100644
--- a/indra/newview/skins/default/xui/es/floater_customize.xml
+++ b/indra/newview/skins/default/xui/es/floater_customize.xml
@@ -1,21 +1,23 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="APARIENCIA" width="527">
- <tab_container name="customize tab container" width="525">
- <placeholder label="Partes del cuerpo" name="body_parts_placeholder"/>
- <panel label="Forma" name="Shape" width="389">
+<floater name="floater customize" title="APARIENCIA">
+ <tab_container name="customize tab container">
+ <text label="Partes del cuerpo" name="body_parts_placeholder">
+ Partes del cuerpo
+ </text>
+ <panel label="Forma" name="Shape">
<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
<button label="Cuerpo" label_selected="Cuerpo" name="Body"/>
<button label="Cabeza" label_selected="Cabeza" name="Head"/>
<button label="Ojos" label_selected="Ojos" name="Eyes"/>
- <button label="Ojos" label_selected="Orejas" name="Ears"/>
+ <button label="Orejas" label_selected="Orejas" name="Ears"/>
<button label="Nariz" label_selected="Nariz" name="Nose"/>
<button label="Boca" label_selected="Boca" name="Mouth"/>
<button label="Barbilla" label_selected="Barbilla" name="Chin"/>
<button label="Torso" label_selected="Torso" name="Torso"/>
<button label="Piernas" label_selected="Piernas" name="Legs"/>
<radio_group name="sex radio">
- <radio_item label="Mujer" name="radio"/>
- <radio_item label="Varón" name="radio2"/>
+ <radio_item label="Mujer" name="radio" value="0"/>
+ <radio_item label="Varón" name="radio2" value="1"/>
</radio_group>
<text name="title">
[DESC]
@@ -33,18 +35,17 @@
Situada en [PATH]
</text>
<text name="not worn instructions">
- Póngase una forma nueva arrastrando una desde su inventario hasta su
-avatar. O parta de cero creando una nueva y vistiéndola.
+ Ponte una anatomía nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
</text>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
</text>
- <text name="Item Action Label" right="107">
+ <text name="Item Action Label">
Forma:
</text>
<button label="Crear una forma nueva" label_selected="Crear una forma nueva" name="Create New"/>
- <button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
- <button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
+ <button label="Guardar" label_selected="Guardar" name="Save"/>
+ <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
</panel>
<panel label="Piel" name="Skin">
<button label="Color de piel" label_selected="Color de piel" name="Skin Color" width="115"/>
@@ -67,8 +68,7 @@ avatar. O parta de cero creando una nueva y vistiéndola.
Situada en [PATH]
</text>
<text name="not worn instructions">
- Póngase otra piel arrastrando una desde su inventario hasta su
-avatar. O parta de cero creando una nueva y vistiéndola.
+ Ponte una piel nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
</text>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
@@ -105,8 +105,7 @@ avatar. O parta de cero creando una nueva y vistiéndola.
Situado en [PATH]
</text>
<text name="not worn instructions">
- Póngase otro pelo arrastrando uno desde su inventario hasta su
-avatar. O parta de cero creando uno nueva y vistiéndolo.
+ Ponte un pelo nuevo arrastrándolo desde tu inventario hasta tu avatar. O bien puedes crear uno nuevo partiendo de cero.
</text>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
@@ -137,8 +136,7 @@ avatar. O parta de cero creando uno nueva y vistiéndolo.
Situados en [PATH]
</text>
<text name="not worn instructions">
- Póngase otros ojos arrastrando unos desde su inventario hasta su
-avatar. O parta de cero creando unos nuevos y vistiéndoselos.
+ Ponte unos ojos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
</text>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
@@ -152,12 +150,14 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
</panel>
- <placeholder label="Ropa" name="clothes_placeholder"/>
+ <text label="Ropa" name="clothes_placeholder">
+ Ropas
+ </text>
<panel label="Camisa" name="Shirt">
<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/>
<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
+ <button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
@@ -177,8 +177,7 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
Situada en [PATH]
</text>
<text name="not worn instructions">
- Póngase otra camisa arrastrando una desde su inventario hasta su
-avatar. O parta de cero creando una nueva y vistiéndola.
+ Ponte una camisa nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
</text>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
@@ -190,8 +189,8 @@ avatar. O parta de cero creando una nueva y vistiéndola.
<panel label="Pantalones" name="Pants">
<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear unos pantalones nuevos" label_selected="Crear unos pantalones nuevos" name="Create New" width="185"/>
<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
+ <button label="Crear unos pantalones nuevos" label_selected="Crear unos pantalones nuevos" name="Create New" width="185"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
@@ -211,8 +210,7 @@ avatar. O parta de cero creando una nueva y vistiéndola.
Situados en [PATH]
</text>
<text name="not worn instructions">
- Póngase otros pantalones arrastrando unos desde su inventario hasta su
-avatar. O parta de cero creando unos nuevos y vistiéndoselos.
+ Ponte unos pantalones nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
</text>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
@@ -238,9 +236,9 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
Situados en [PATH]
</text>
<text name="not worn instructions">
- Póngase otros zapatos arrastrando unos desde su inventario hasta su
-avatar. O parta de cero creando unos nuevos y vistiéndoselos.
+ Ponte unos zapatos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
</text>
+ <button label="Crear unos zapatos nuevos" label_selected="Crear unos zapatos nuevos" name="Create New"/>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
</text>
@@ -249,7 +247,6 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
</text>
<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear unos zapatos nuevos" label_selected="Crear unos zapatos nuevos" name="Create New"/>
<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
@@ -272,9 +269,9 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
Situados en [PATH]
</text>
<text name="not worn instructions">
- Póngase otros calcetines arrastrando unos desde su inventario hasta su
-avatar. O parta de cero creando unos nuevos y vistiéndoselos.
+ Ponte unos calcetines nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
</text>
+ <button label="Crear unos calcetines nuevos" label_selected="Crear unos calcetines nuevos" name="Create New" width="185"/>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
</text>
@@ -283,7 +280,6 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
</text>
<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear unos calcetines nuevos" label_selected="Crear unos calcetines nuevos" name="Create New" width="185"/>
<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
@@ -306,9 +302,9 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
Situada en [PATH]
</text>
<text name="not worn instructions">
- Póngase otra chaqueta arrastrando una desde su inventario hasta su
-avatar. O parta de cero creando una nueva y vistiéndola.
+ Ponte una chaqueta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
</text>
+ <button label="Crear una chaqueta nueva" label_selected="Crear una chaqueta nueva" name="Create New"/>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
</text>
@@ -318,7 +314,6 @@ avatar. O parta de cero creando una nueva y vistiéndola.
<texture_picker label="Tela superior" name="Upper Fabric" tool_tip="Pulse para elegir una imagen"/>
<texture_picker label="Tela inferior" name="Lower Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear una chaqueta nueva" label_selected="Crear una chaqueta nueva" name="Create New"/>
<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
@@ -341,9 +336,9 @@ avatar. O parta de cero creando una nueva y vistiéndola.
Situados en [PATH]
</text>
<text name="not worn instructions">
- Póngase otros guantes arrastrando unos desde su inventario hasta su
-avatar. O parta de cero creando unos nuevos y vistiéndoselos.
+ Ponte unos guantes nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
</text>
+ <button label="Crear unos guantes nuevos" label_selected="Crear unos guantes nuevos" name="Create New"/>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
</text>
@@ -352,7 +347,6 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
</text>
<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear unos guantes nuevos" label_selected="Crear unos guantes nuevos" name="Create New"/>
<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
@@ -375,9 +369,9 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos.
Situada en [PATH]
</text>
<text name="not worn instructions">
- Póngase otra camiseta arrastrando una desde su inventario hasta su
-avatar. O parta de cero creando una nueva y vistiéndola.
+ Ponte una camiseta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
</text>
+ <button label="Crear una camiseta nueva" label_selected="Crear una camiseta nueva" name="Create New"/>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
</text>
@@ -386,7 +380,6 @@ avatar. O parta de cero creando una nueva y vistiéndola.
</text>
<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear una camiseta nueva" label_selected="Crear una camiseta nueva" name="Create New"/>
<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
@@ -409,9 +402,9 @@ avatar. O parta de cero creando una nueva y vistiéndola.
Situada en [PATH]
</text>
<text name="not worn instructions">
- Póngase otra ropa interior arrastrando una desde su inventario hasta su
-avatar. O parta de cero creando una nueva y vistiéndola.
+ Ponte una ropa interior nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
</text>
+ <button label="Crear una ropa interior nueva" label_selected="Crear una ropa interior nueva" name="Create New" width="185"/>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
</text>
@@ -420,7 +413,6 @@ avatar. O parta de cero creando una nueva y vistiéndola.
</text>
<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear una ropa interior nueva" label_selected="Crear una ropa interior nueva" name="Create New" width="185"/>
<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
@@ -443,9 +435,9 @@ avatar. O parta de cero creando una nueva y vistiéndola.
Situada en [PATH]
</text>
<text name="not worn instructions">
- Póngase otra falda arrastrando una desde su inventario hasta su
-avatar. O parta de cero creando una nueva y vistiéndola.
+ Ponte una falda nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
</text>
+ <button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/>
<text name="no modify instructions">
No tiene permiso para modificar este ítem.
</text>
@@ -454,13 +446,12 @@ avatar. O parta de cero creando una nueva y vistiéndola.
</text>
<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
- <button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/>
<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/>
<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
</panel>
- <panel label="Alfa" name="Alpha">
+ <panel label="Tatuaje" name="Tattoo">
<text name="title">
[DESC]
</text>
@@ -477,27 +468,24 @@ avatar. O parta de cero creando una nueva y vistiéndola.
Situado en [PATH]
</text>
<text name="not worn instructions">
- Pon una capa Alfa nueva arrastrándola desde tu inventario a tu avatar.
-O crea una nueva y vístetela.
+ Pon un tatuaje nuevo arrastrándolo desde tu inventario a tu avatar. O bien puedes crear uno nuevo partiendo de cero.
</text>
+ <button label="Crear un tatuaje nuevo" label_selected="Crear un tatuaje nuevo" name="Create New"/>
<text name="no modify instructions">
No tienes permiso para modificar este artículo.
</text>
<text name="Item Action Label">
- Alfa:
+ Tatuaje:
</text>
- <texture_picker label="Alfa inferior" name="Lower Alpha" tool_tip="Pulsa para elegir una imagen"/>
- <texture_picker label="Alfa superior" name="Upper Alpha" tool_tip="Pulsa para elegir una imagen"/>
- <texture_picker label="Alfa de la cabeza" name="Head Alpha" tool_tip="Pulsa para elegir una imagen"/>
- <texture_picker label="Alfa de los ojos" name="Eye Alpha" tool_tip="Pulsa para elegir una imagen"/>
- <texture_picker label="Alfa del pelo" name="Hair Alpha" tool_tip="Pulsa para elegir una imagen"/>
- <button label="Crear una capa Alfa nueva" label_selected="Crear una capa Alfa nueva" name="Create New"/>
+ <texture_picker label="Tatuaje de la cabeza" name="Head Tattoo" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Tatuaje superior" name="Upper Tattoo" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Tatuaje inferior" name="Lower Tattoo" tool_tip="Pulsa para elegir una imagen"/>
<button label="Quitarme" label_selected="Quitarme" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
<button label="Revertir" label_selected="Revertir" name="Revert"/>
</panel>
- <panel label="Tatuaje" name="Tattoo">
+ <panel label="Alfa" name="Alpha">
<text name="title">
[DESC]
</text>
@@ -514,26 +502,28 @@ O crea una nueva y vístetela.
Situado en [PATH]
</text>
<text name="not worn instructions">
- Pon un tatuaje nuevo arrastrándolo desde tu inventario a tu avatar.
-O crea una nueva y vístetela.
+ Pon una capa Alfa nueva arrastrándola desde tu inventario a tu avatar. O bien puedes crear una nueva partiendo de cero.
</text>
+ <button label="Crear una capa Alfa nueva" label_selected="Crear una capa Alfa nueva" name="Create New"/>
<text name="no modify instructions">
No tienes permiso para modificar este artículo.
</text>
<text name="Item Action Label">
- Tatuaje:
+ Alfa:
</text>
- <texture_picker label="Tatuaje de la cabeza" name="Head Tattoo" tool_tip="Pulsa para elegir una imagen"/>
- <texture_picker label="Tatuaje superior" name="Upper Tattoo" tool_tip="Pulsa para elegir una imagen"/>
- <texture_picker label="Tatuaje inferior" name="Lower Tattoo" tool_tip="Pulsa para elegir una imagen"/>
- <button label="Crear un tatuaje nuevo" label_selected="Crear un tatuaje nuevo" name="Create New"/>
+ <texture_picker label="Alfa inferior" name="Lower Alpha" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Alfa superior" name="Upper Alpha" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Alfa de la cabeza" name="Head Alpha" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Alfa de los ojos" name="Eye Alpha" tool_tip="Pulsa para elegir una imagen"/>
+ <texture_picker label="Alfa del pelo" name="Hair Alpha" tool_tip="Pulsa para elegir una imagen"/>
<button label="Quitarme" label_selected="Quitarme" name="Take Off"/>
<button label="Guardar" label_selected="Guardar" name="Save"/>
<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
<button label="Revertir" label_selected="Revertir" name="Revert"/>
</panel>
</tab_container>
- <scroll_container left="230" name="panel_container"/>
+ <scroll_container name="panel_container"/>
+ <button label="Información del script" label_selected="Información del script" name="script_info" tool_tip="Mostrar los scripts anexados a tu avatar"/>
<button label="Hacer un vestuario" label_selected="Hacer un vestuario" name="make_outfit_btn"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
<button label="OK" label_selected="OK" name="Ok"/>
diff --git a/indra/newview/skins/default/xui/es/floater_event.xml b/indra/newview/skins/default/xui/es/floater_event.xml
new file mode 100644
index 0000000000..4bc5221796
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_event.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Evento" name="Event" title="DETALLES DEL EVENTO">
+ <floater.string name="none">
+ ninguno
+ </floater.string>
+ <floater.string name="notify">
+ Notificar
+ </floater.string>
+ <floater.string name="dont_notify">
+ No notificar
+ </floater.string>
+ <floater.string name="moderate">
+ Moderado
+ </floater.string>
+ <floater.string name="adult">
+ Adulto
+ </floater.string>
+ <floater.string name="general">
+ General
+ </floater.string>
+ <floater.string name="unknown">
+ desconocida
+ </floater.string>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <text name="event_name">
+ Evento sin nombre...
+ </text>
+ <text name="event_category">
+ (sin categoría)
+ </text>
+ <text name="event_runby_label">
+ Organizado por:
+ </text>
+ <text initial_value="(obteniendo)" name="event_runby"/>
+ <text name="event_date_label">
+ Fecha:
+ </text>
+ <text name="event_date">
+ 10/10/2010
+ </text>
+ <text name="event_duration_label">
+ Duración:
+ </text>
+ <text name="event_duration">
+ 1 hora
+ </text>
+ <text name="event_covercharge_label">
+ Entrada:
+ </text>
+ <text name="event_cover">
+ Gratis
+ </text>
+ <text name="event_location_label">
+ Localización:
+ </text>
+ <text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
+ <text name="rating_label" value="Calificación:"/>
+ <text name="rating_value" value="desconocida"/>
+ <expandable_text name="event_desc">
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </expandable_text>
+ </layout_panel>
+ <layout_panel name="button_panel">
+ <button name="create_event_btn" tool_tip="Crear el evento"/>
+ <button name="god_delete_event_btn" tool_tip="Borrar el evento"/>
+ <button label="Notificarme" name="notify_btn"/>
+ <button label="Teleportar" name="teleport_btn"/>
+ <button label="Mapa" name="map_btn"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml
index 1dc1d54295..d90de8c9f4 100644
--- a/indra/newview/skins/default/xui/es/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/es/floater_gesture.xml
@@ -9,7 +9,7 @@
<floater.string name="copy_name">
Copia de [COPY_NAME]
</floater.string>
- <scroll_list bottom_delta="-385" height="360" name="gesture_list">
+ <scroll_list name="gesture_list">
<scroll_list.columns label="Nombre" name="name"/>
<scroll_list.columns label="Chat" name="trigger"/>
<scroll_list.columns label="Tecla" name="shortcut"/>
diff --git a/indra/newview/skins/default/xui/es/floater_god_tools.xml b/indra/newview/skins/default/xui/es/floater_god_tools.xml
index 78ec76e32b..73187f208b 100644
--- a/indra/newview/skins/default/xui/es/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_god_tools.xml
@@ -1,52 +1,37 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="godtools floater" title="HERRAMIENTAS DE DIOS">
<tab_container name="GodTools Tabs">
<panel label="Red" name="grid">
- <button label="Expulsar a todos los usuarios"
- label_selected="Expulsar a todos los usuarios" name="Kick all users" />
- <button label="Vaciar los caches de visibilidad del mapa de la región"
- label_selected="Vaciar los caches de visibilidad del mapa de la región"
- name="Flush This Region&apos;s Map Visibility Caches" />
+ <button label="Expulsar a todos los Residentes" label_selected="Expulsar a todos los Residentes" name="Kick all users"/>
+ <button label="Vaciar los caches de visibilidad del mapa de la región" label_selected="Vaciar los caches de visibilidad del mapa de la región" name="Flush This Region&apos;s Map Visibility Caches"/>
</panel>
<panel label="Región" name="region">
<text name="Sim Name:">
Nombre del Sim:
</text>
- <check_box label="Preludio" name="check prelude"
- tool_tip="Defina esté para hacer un preludio de la región." />
- <check_box label="Sol fijo" name="check fixed sun"
- tool_tip="Fijar la posición del sol (así como en Región/Propiedad &gt; Terreno." />
- <check_box label="Restaurar casa en el teletransporte" name="check reset home"
- tool_tip="Cuando el residente sea teletransportado hacia fuera, restaurar su casa para la posición de destino." />
- <check_box label="Visible" name="check visible"
- tool_tip="Defina esté para tornar la región visible a no dioses." />
- <check_box label="Daño" name="check damage"
- tool_tip="Defina esté para activar el daño en esta región." />
- <check_box label="Bloquear rastreo de tráfico" name="block dwell"
- tool_tip="Defina esté para hacer que una región no compute el tráfico." />
- <check_box label="Bloquear formar terreno" name="block terraform"
- tool_tip="Defina esté para no permitir que personas muden la formación del terreno de ellas" />
- <check_box label="Caja de arena" name="is sandbox"
- tool_tip="Activar/desactivar si ésta es una región caja de arena." />
- <button label="Formar terreno" label_selected="Formar terreno" name="Bake Terrain"
- tool_tip="Guardar el terreno actual como patrón." />
- <button label="Revertir terreno" label_selected="Revertir terreno"
- name="Revert Terrain"
- tool_tip="Sustituir el terreno actual por el patrón." />
- <button label="Cambiar terreno" label_selected="Cambiar terreno" name="Swap Terrain"
- tool_tip="Cambiar terreno actual por el patrón." />
+ <check_box label="Preludio" name="check prelude" tool_tip="Defina esté para hacer un preludio de la región."/>
+ <check_box label="Sol fijo" name="check fixed sun" tool_tip="Fijar la posición del sol (así como en Región/Propiedad &gt; Terreno."/>
+ <check_box label="Restaurar casa en el teletransporte" name="check reset home" tool_tip="When Resident teleports out, reset their home to the destination position."/>
+ <check_box label="Visible" name="check visible" tool_tip="Defina esté para tornar la región visible a no dioses."/>
+ <check_box label="Daño" name="check damage" tool_tip="Defina esté para activar el daño en esta región."/>
+ <check_box label="Bloquear rastreo de tráfico" name="block dwell" tool_tip="Defina esté para hacer que una región no compute el tráfico."/>
+ <check_box label="Bloquear formar terreno" name="block terraform" tool_tip="Defina esté para no permitir que personas muden la formación del terreno de ellas"/>
+ <check_box label="Caja de arena" name="is sandbox" tool_tip="Activar/desactivar si ésta es una región caja de arena."/>
+ <button label="Formar terreno" label_selected="Formar terreno" name="Bake Terrain" tool_tip="Guardar el terreno actual como patrón."/>
+ <button label="Revertir terreno" label_selected="Revertir terreno" name="Revert Terrain" tool_tip="Sustituir el terreno actual por el patrón."/>
+ <button label="Cambiar terreno" label_selected="Cambiar terreno" name="Swap Terrain" tool_tip="Cambiar terreno actual por el patrón."/>
<text name="estate id">
ID de la propiedad:
</text>
<text name="parent id">
ID del padre:
</text>
- <line_editor name="parentestate" tool_tip="Ésta es una propiedad padre para esta región" />
+ <line_editor name="parentestate" tool_tip="Ésta es una propiedad padre para esta región"/>
<text name="Grid Pos: ">
Red Pos:
</text>
- <line_editor name="gridposx" tool_tip="Ésta es la posición x de la reja para esta región" />
- <line_editor name="gridposy" tool_tip="Ésta es la posición y de la reja para esta región" />
+ <line_editor name="gridposx" tool_tip="Ésta es la posición x de la reja para esta región"/>
+ <line_editor name="gridposy" tool_tip="Ésta es la posición y de la reja para esta región"/>
<text name="Redirect to Grid: ">
Redireccionar para red:
</text>
@@ -56,16 +41,10 @@
<text name="land cost text">
L$ por m²:
</text>
- <button label="Actualizar" label_selected="Actualizar" name="Refresh"
- tool_tip="Haga clic aquí para actualizar la información arriba." />
- <button label="Aplicar" label_selected="Aplicar" name="Apply"
- tool_tip="Haga clic aquí para aplicar cualesquiera de las mudanzas arriba." />
- <button label="Seleccionar región" label_selected="Seleccionar región"
- name="Select Region"
- tool_tip="Seleccione toda la región con esta herramienta de terreno." />
- <button label="Guardado automático ahora" label_selected="Guardado automático ahora"
- name="Autosave now"
- tool_tip="Guardar estado con gzip en el directorio de guardado automático." />
+ <button label="Actualizar" label_selected="Actualizar" name="Refresh" tool_tip="Haga clic aquí para actualizar la información arriba."/>
+ <button label="Aplicar" label_selected="Aplicar" name="Apply" tool_tip="Haga clic aquí para aplicar cualesquiera de las mudanzas arriba."/>
+ <button label="Seleccionar región" label_selected="Seleccionar región" name="Select Region" tool_tip="Seleccione toda la región con esta herramienta de terreno."/>
+ <button label="Guardado automático ahora" label_selected="Guardado automático ahora" name="Autosave now" tool_tip="Guardar estado con gzip en el directorio de guardado automático."/>
</panel>
<panel label="Objetos" name="objects">
<text name="Sim Name:">
@@ -74,62 +53,42 @@
<text name="region name">
Galés
</text>
- <check_box label="Desactivar scripts" name="disable scripts"
- tool_tip="Defina esté para desactivar todos los scripts en esta región" />
- <check_box label="Desactivar colisiones" name="disable collisions"
- tool_tip="Defina esté para desactivar las colisiones entre no agentes en esta región" />
- <check_box label="Desactivar física" name="disable physics"
- tool_tip="Defina esté para desactivar toda la física en esta región" />
- <button label="Aplicar" label_selected="Aplicar" name="Apply"
- tool_tip="Haga clic aquí para aplicar cualesquiera de las mudanzas arriba." />
- <button label="Definir blanco" label_selected="Definir blanco" name="Set Target"
- tool_tip="Ajuste el avatar del blanco para la exclusión del objeto." />
+ <check_box label="Desactivar scripts" name="disable scripts" tool_tip="Defina esté para desactivar todos los scripts en esta región"/>
+ <check_box label="Desactivar colisiones" name="disable collisions" tool_tip="Defina esté para desactivar las colisiones entre no agentes en esta región"/>
+ <check_box label="Desactivar física" name="disable physics" tool_tip="Defina esté para desactivar toda la física en esta región"/>
+ <button label="Aplicar" label_selected="Aplicar" name="Apply" tool_tip="Haga clic aquí para aplicar cualesquiera de las mudanzas arriba."/>
+ <button label="Definir blanco" label_selected="Definir blanco" name="Set Target" tool_tip="Ajuste el avatar del blanco para la exclusión del objeto."/>
<text name="target_avatar_name">
(sin blanco)
</text>
- <button label="Borrar objetos con script del blanco en otros terrenos"
- label_selected="Borrar objetos con script del blanco en otros terrenos"
- name="Delete Target&apos;s Scripted Objects On Others Land"
- tool_tip="Borrar todos los objetos con script pertenecientes al blanco en el terreno que no pertenece a él. Objetos (sin copia) retornarán." />
- <button label="Borrar objetos con script del blanco en *TODOS* los terrenos"
- label_selected="Borrar objetos con script del blanco en *TODOS* los terrenos"
- name="Delete Target&apos;s Scripted Objects On *Any* Land"
- tool_tip="Borrar todos los objetos con script pertenecientes al blanco en esta región. Objetos (sin copia) retornarán." />
- <button label="Borrar *TODOS* los objetos del blanco"
- label_selected="Borrar *TODOS* los objetos del blanco"
- name="Delete *ALL* Of Target&apos;s Objects"
- tool_tip="Borrar todos los objetos pertenecientes al blanco en esta región. Objetos (sin copia) retornarán." />
- <button label="Obtener top de colisionadores"
- label_selected="Obtener top de colisionadores" name="Get Top Colliders"
- tool_tip="Coger lista de objetos que están recibiendo narrowphase callbacks." />
- <button label="Obtener top de scripts" label_selected="Obtener top de scripts"
- name="Get Top Scripts"
- tool_tip="Coger lista de objetos que están consumiendo más tiempo de ejecución de scripts." />
- <button label="Compilador de scripts" label_selected="Compilador de scripts"
- name="Scripts digest"
- tool_tip="Coger una lista de todos los scripts y sus respectivos números de ocurrencia." />
+ <button label="Borrar objetos con script del blanco en otros terrenos" label_selected="Borrar objetos con script del blanco en otros terrenos" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Borrar todos los objetos con script pertenecientes al blanco en el terreno que no pertenece a él. Objetos (sin copia) retornarán."/>
+ <button label="Borrar objetos con script del blanco en *TODOS* los terrenos" label_selected="Borrar objetos con script del blanco en *TODOS* los terrenos" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Borrar todos los objetos con script pertenecientes al blanco en esta región. Objetos (sin copia) retornarán."/>
+ <button label="Borrar *TODOS* los objetos del blanco" label_selected="Borrar *TODOS* los objetos del blanco" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Borrar todos los objetos pertenecientes al blanco en esta región. Objetos (sin copia) retornarán."/>
+ <button label="Obtener top de colisionadores" label_selected="Obtener top de colisionadores" name="Get Top Colliders" tool_tip="Coger lista de objetos que están recibiendo narrowphase callbacks."/>
+ <button label="Obtener top de scripts" label_selected="Obtener top de scripts" name="Get Top Scripts" tool_tip="Coger lista de objetos que están consumiendo más tiempo de ejecución de scripts."/>
+ <button label="Compilador de scripts" label_selected="Compilador de scripts" name="Scripts digest" tool_tip="Coger una lista de todos los scripts y sus respectivos números de ocurrencia."/>
</panel>
<panel label="Requerir" name="request">
<text name="Destination:">
Destino:
</text>
<combo_box name="destination">
- <combo_box.item name="item1" label="Selección" />
- <combo_box.item name="item2" label="Agente de región" />
+ <combo_box.item label="Selección" name="item1"/>
+ <combo_box.item label="Agente de región" name="item2"/>
</combo_box>
<text name="Request:">
Exigencia:
</text>
<combo_box name="request">
- <combo_box.item name="item1" label="colisionadores &lt;pasos&gt;" />
- <combo_box.item name="item2" label="scripts &lt;contar&gt;,&lt;patrón opcional&gt;" />
- <combo_box.item name="item3" label="objetos &lt;patrón&gt;" />
- <combo_box.item name="item4" label="rez &lt;asset_id&gt;" />
+ <combo_box.item label="colisionadores &lt;pasos&gt;" name="item1"/>
+ <combo_box.item label="scripts &lt;contar&gt;,&lt;patrón opcional&gt;" name="item2"/>
+ <combo_box.item label="objetos &lt;patrón&gt;" name="item3"/>
+ <combo_box.item label="rez &lt;asset_id&gt;" name="item4"/>
</combo_box>
<text name="Parameter:">
Parámetro:
</text>
- <button label="Hacer exigencia" label_selected="Hacer exigencia" name="Make Request" />
+ <button label="Hacer exigencia" label_selected="Hacer exigencia" name="Make Request"/>
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_help_browser.xml b/indra/newview/skins/default/xui/es/floater_help_browser.xml
index 2a26bb8453..ec3c38e8c7 100644
--- a/indra/newview/skins/default/xui/es/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/es/floater_help_browser.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_help_browser" title="BUSCADOR DE AYUDA">
+ <floater.string name="loading_text">
+ Cargando...
+ </floater.string>
<layout_stack name="stack1">
- <layout_panel name="external_controls">
- <button label="Abrir en mi propio navegador" name="open_browser"/>
- </layout_panel>
+ <layout_panel name="external_controls"/>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_im.xml b/indra/newview/skins/default/xui/es/floater_im.xml
index 8589718b88..3850b94fd6 100644
--- a/indra/newview/skins/default/xui/es/floater_im.xml
+++ b/indra/newview/skins/default/xui/es/floater_im.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="Mensaje Instantáneo">
<string name="only_user_message">
- Usted es el único usuario en esta sesión.
+ Eres el único Residente en esta sesión.
</string>
<string name="offline_message">
[FIRST] [LAST] no está conectado.
@@ -10,7 +10,7 @@
Pulse el botón [BUTTON NAME] para aceptar/conectar este chat de voz.
</string>
<string name="muted_message">
- Has ignorado a este residente. Enviándole un mensaje, automáticamente dejarás de ignorarle.
+ Has ignorado a este Residente. Enviándole un mensaje, automáticamente dejarás de ignorarle.
</string>
<string name="generic_request_error">
Error al hacer lo solicitado; por favor, inténtelo más tarde.
@@ -31,7 +31,7 @@
Un moderador del grupo le ha desactivado el chat de texto.
</string>
<string name="add_session_event">
- No se ha podido añadir usuarios a la sesión de chat con [RECIPIENT].
+ No es posible añadir Residentes a la sesión de chat con [RECIPIENT].
</string>
<string name="message_session_event">
No se ha podido enviar su mensaje a la sesión de chat con [RECIPIENT].
diff --git a/indra/newview/skins/default/xui/es/floater_im_container.xml b/indra/newview/skins/default/xui/es/floater_im_container.xml
index 617097e9c9..1cd752e6ec 100644
--- a/indra/newview/skins/default/xui/es/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/es/floater_im_container.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="Mensajes instantáneos"/>
+<multi_floater name="floater_im_box" title="CONVERSACIONES"/>
diff --git a/indra/newview/skins/default/xui/es/floater_incoming_call.xml b/indra/newview/skins/default/xui/es/floater_incoming_call.xml
index f499198b31..2b5fc7f193 100644
--- a/indra/newview/skins/default/xui/es/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/es/floater_incoming_call.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="incoming call" title="ESTÃ LLAMANDO ALGUIEN DESCONOCIDO">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
<floater.string name="localchat">
Chat de voz
</floater.string>
@@ -12,6 +15,9 @@
<floater.string name="VoiceInviteAdHoc">
ha entrado en un chat de voz en multiconferencia.
</floater.string>
+ <floater.string name="VoiceInviteGroup">
+ ha hecho una llamada de voz al grupo [GROUP].
+ </floater.string>
<text name="question">
¿Quieres dejar [CURRENT_CHAT] y entrar a este chat de voz?
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_inventory.xml b/indra/newview/skins/default/xui/es/floater_inventory.xml
index c2a1e4e91d..0f0ba2fce6 100644
--- a/indra/newview/skins/default/xui/es/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/es/floater_inventory.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="INVENTARIO">
+<floater name="Inventory" title="MI INVENTARIO">
<floater.string name="Title">
- Inventario
+ MI INVENTARIO
</floater.string>
<floater.string name="TitleFetching">
- Inventario (obtenidos [ITEM_COUNT] ítems...) [FILTER]
+ MI INVENTARIO (obteniendo [ITEM_COUNT] ítems...) [FILTER]
</floater.string>
<floater.string name="TitleCompleted">
- Inventario ([ITEM_COUNT] ítems) [FILTER]
+ MI INVENTARIO ([ITEM_COUNT] ítems) [FILTER]
</floater.string>
<floater.string name="Fetched">
Obtenido
diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml
index 283a46b60b..dbd2e4f04e 100644
--- a/indra/newview/skins/default/xui/es/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/es/floater_joystick.xml
@@ -63,7 +63,7 @@
<text name="ZoomDeadZone">
Zona muerta zoom
</text>
- <button font="SansSerifSmall" label="Predeterminados del SpaceNavigator" left="330" name="SpaceNavigatorDefaults" width="210"/>
+ <button font="SansSerifSmall" label="Por defecto del SpaceNavigator" left="330" name="SpaceNavigatorDefaults" width="210"/>
<button label="OK" label_selected="OK" left="330" name="ok_btn"/>
<button label="Cancelar" label_selected="Cancelar" left_delta="120" name="cancel_btn"/>
<stat_view label="Monitor del joystick" name="axis_view">
diff --git a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
index a1ec0eba4d..4ff54bccb5 100644
--- a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
@@ -7,7 +7,7 @@
Ejecutándose
</floater.string>
<floater.string name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<button label="Reiniciar" label_selected="Reiniciar" name="Reset"/>
<check_box initial_value="true" label="Ejecutándose" left="4" name="running"/>
diff --git a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
index d4a6e52f9f..43a7ede030 100644
--- a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="WIKI DE LSL">
+<floater name="script ed float" title="GUÃA DE LSL">
<check_box label="Seguir al cursor" name="lock_check"/>
<combo_box label="Bloquear" left_delta="120" name="history_combo" width="70"/>
<button label="Atrás" left_delta="75" name="back_btn"/>
diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml
index eee9caf830..fde4d37caf 100644
--- a/indra/newview/skins/default/xui/es/floater_map.xml
+++ b/indra/newview/skins/default/xui/es/floater_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
+<floater name="Map" title="Minimapa">
<floater.string name="mini_map_north">
N
</floater.string>
diff --git a/indra/newview/skins/default/xui/es/floater_media_browser.xml b/indra/newview/skins/default/xui/es/floater_media_browser.xml
index cdc7ae49ff..9c4ef1eb2f 100644
--- a/indra/newview/skins/default/xui/es/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/es/floater_media_browser.xml
@@ -9,13 +9,13 @@
<layout_stack name="stack1">
<layout_panel name="nav_controls">
<button label="Atrás" name="back" width="75"/>
- <button label="Adelante" name="forward" left_delta="75" width="70"/>
- <button label="Actualizar" name="reload" left_delta="75"/>
+ <button label="Adelante" left_delta="75" name="forward" width="70"/>
+ <button label="Actualizar" left_delta="75" name="reload"/>
<combo_box left_delta="75" name="address" width="510"/>
- <button label="Ir" name="go" left_delta="515"/>
+ <button label="Ir" left_delta="515" name="go"/>
</layout_panel>
<layout_panel name="parcel_owner_controls">
- <button label="Enviar a la parcela la URL actual" name="assign"/>
+ <button label="Enviar a la parcela la página actual" name="assign"/>
</layout_panel>
<layout_panel name="external_controls">
<button label="Abrir en mi navegador" name="open_browser"/>
diff --git a/indra/newview/skins/default/xui/es/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml
index 00a7a3fd6b..7cb41d3f5b 100644
--- a/indra/newview/skins/default/xui/es/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/es/floater_moveview.xml
@@ -18,11 +18,20 @@
<string name="fly_back_tooltip">
Volar hacia atrás (cursor abajo o S)
</string>
+ <string name="walk_title">
+ Caminar
+ </string>
+ <string name="run_title">
+ Correr
+ </string>
+ <string name="fly_title">
+ Volar
+ </string>
<panel name="panel_actions">
<button label="" label_selected="" name="turn left btn" tool_tip="Girar a la izq. (cursor izq. o A)"/>
<button label="" label_selected="" name="turn right btn" tool_tip="Girar a la der. (cursor der. o D)"/>
- <button label="" label_selected="" name="move up btn" tool_tip="Volar subiendo, pulsa &quot;E&quot;"/>
- <button label="" label_selected="" name="move down btn" tool_tip="Volar bajando, pulsa &quot;C&quot;"/>
+ <button label="" label_selected="" name="move up btn" tool_tip="Volar: pulsa E para subir"/>
+ <button label="" label_selected="" name="move down btn" tool_tip="Volar: pulsa C para descender"/>
<joystick_turn name="forward btn" tool_tip="Caminar hacia adelante (cursor arriba o W)"/>
<joystick_turn name="backward btn" tool_tip="Caminar de espaldas (cursor abajo o S)"/>
</panel>
@@ -30,6 +39,5 @@
<button label="" name="mode_walk_btn" tool_tip="Modo de caminar"/>
<button label="" name="mode_run_btn" tool_tip="Modo de correr"/>
<button label="" name="mode_fly_btn" tool_tip="Modo de volar"/>
- <button label="Dejar de volar" name="stop_fly_btn" tool_tip="Dejar de volar"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml
new file mode 100644
index 0000000000..9f9902a3a0
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="modal container" title="Guardar el vestuario">
+ <button label="Guardar" label_selected="Guardar" name="Save"/>
+ <button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
+ <text name="Save item as:">
+ Guardar lo que llevo puesto
+como un vestuario nuevo:
+ </text>
+ <line_editor name="name ed">
+ [DESC] (nuevo)
+ </line_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_outgoing_call.xml b/indra/newview/skins/default/xui/es/floater_outgoing_call.xml
index 51ff71dd17..e2a53693b5 100644
--- a/indra/newview/skins/default/xui/es/floater_outgoing_call.xml
+++ b/indra/newview/skins/default/xui/es/floater_outgoing_call.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="outgoing call" title="LLAMANDO">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
<floater.string name="localchat">
Chat de voz
</floater.string>
@@ -21,6 +24,15 @@
<text name="noanswer">
Sin respuesta. Vuelve a intentarlo más tarde.
</text>
+ <text name="nearby">
+ Has sido desconectado de [VOICE_CHANNEL_NAME]. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_other">
+ [VOICE_CHANNEL_NAME] ha colgado la llamada. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_agent">
+ Has finalizado la llamada. [RECONNECT_NEARBY]
+ </text>
<text name="leaving">
Saliendo de [CURRENT_CHAT].
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_pay_object.xml b/indra/newview/skins/default/xui/es/floater_pay_object.xml
index 2af8c8cc13..f29745ea9b 100644
--- a/indra/newview/skins/default/xui/es/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_pay_object.xml
@@ -15,7 +15,7 @@
</text>
<icon name="icon_object" tool_tip="Objetos"/>
<text left="120" name="object_name_text" width="180">
- ...
+ El muy largo nombre de mi objeto
</text>
<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml
index 8f71fdd035..61f12fc0d7 100644
--- a/indra/newview/skins/default/xui/es/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/es/floater_preferences.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater min_width="350" name="Preferences" title="PREFERENCIAS" width="646">
+<floater name="Preferences" title="PREFERENCIAS">
<button label="OK" label_selected="OK" name="OK"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
- <tab_container name="pref core" tab_width="146" width="646">
+ <tab_container name="pref core">
<panel label="General" name="general"/>
<panel label="Gráficos" name="display"/>
<panel label="Privacidad" name="im"/>
- <panel label="Sonido" name="audio"/>
+ <panel label="Sonido y Media" name="audio"/>
<panel label="Chat" name="chat"/>
<panel label="Notificaciones" name="msgs"/>
<panel label="Configurar" name="input"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_animation.xml b/indra/newview/skins/default/xui/es/floater_preview_animation.xml
index c10648db73..6b8c8b6ff5 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_animation.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
Descripción:
</text>
- <button label="Ejecutarla en el mundo" label_selected="Parar" left="12" name="Anim play btn" tool_tip="Ejecutar esta animación de modo que puedan verla los demás" width="142"/>
+ <button label="Ver en el mundo" label_selected="Parar" left="12" name="Anim play btn" tool_tip="Ejecutar esta animación de modo que puedan verla los demás" width="142"/>
<button label="Ejecutarla para usted" label_selected="Parar" left="156" name="Anim audition btn" tool_tip="Ejecutar esta animación de modo que sólo la vea yo" width="136"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture.xml
index febcd9d485..44179d6b28 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_gesture.xml
@@ -24,6 +24,9 @@
<floater.string name="Title">
Gesto: [NAME]
</floater.string>
+ <text name="name_text">
+ Nombre:
+ </text>
<text name="desc_label">
Descripción:
</text>
@@ -55,8 +58,7 @@
<radio_item label="Empezar" name="start"/>
<radio_item label="Parar" name="stop"/>
</radio_group>
- <check_box bottom_delta="34" label="hasta que las animaciones
-estén hechas" name="wait_anim_check"/>
+ <check_box bottom_delta="34" label="hasta que las animaciones estén hechas" name="wait_anim_check"/>
<check_box bottom_delta="-30" label="tiempo en segundos" name="wait_time_check"/>
<line_editor left_delta="130" name="wait_time_editor"/>
<text name="help_label">
diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
index ee2e06a3d7..57ec5eb7b4 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
@@ -4,7 +4,7 @@
No se ha podido encontrar el objeto que contiene esta nota.
</floater.string>
<floater.string name="not_allowed">
- no tienes permiso para ver esta nota.
+ No tienes permiso para ver esta nota.
</floater.string>
<floater.string name="Title">
Nota: [NAME]
diff --git a/indra/newview/skins/default/xui/es/floater_preview_sound.xml b/indra/newview/skins/default/xui/es/floater_preview_sound.xml
index 07ec53581c..62525c9536 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_sound.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
Descripción:
</text>
- <button label="Tocar en el mundo" label_selected="Tocar en el mundo" name="Sound play btn" tool_tip="Ejecutar este sonido de modo que lo oigan todos"/>
+ <button label="Escuchar en el mundo" label_selected="Escuchar en el mundo" name="Sound play btn" tool_tip="Ejecutar este sonido de modo que lo oigan todos"/>
<button label="Oír sólo uno mismo" label_selected="Oír sólo uno mismo" name="Sound audition btn" tool_tip="Ejecutar este sonido de modo que sólo tú lo oigas"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_texture.xml b/indra/newview/skins/default/xui/es/floater_preview_texture.xml
index 412b31abb9..4012191c78 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_texture.xml
@@ -12,6 +12,9 @@
<text name="dimensions">
[WIDTH] px x [HEIGHT] px
</text>
+ <text name="aspect_ratio">
+ Previsualizar la ratio de las proporciones
+ </text>
<combo_box name="combo_aspect_ratio" tool_tip="Vista previa en una proporción concreta">
<combo_item name="Unconstrained">
Sin restricciones
@@ -38,7 +41,7 @@
2:1
</combo_item>
</combo_box>
- <button label="OK" name="keep"/>
- <button label="Cancelar" name="discard"/>
+ <button label="OK" name="Keep"/>
+ <button label="Descartar" name="Discard"/>
<button label="Guardar como" name="save_tex_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_publish_classified.xml b/indra/newview/skins/default/xui/es/floater_publish_classified.xml
new file mode 100644
index 0000000000..5eed89d522
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_publish_classified.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="publish_classified" title="Publicación de clasificados">
+ <text name="explanation_text">
+ Tu anuncio clasificado se mostrará durante una semana a partir del día en que se publicó.
+
+Recuerda, no se reembolsarán las cantidades abonadas por clasificados.
+ </text>
+ <spinner label="Precio por el anuncio:" name="price_for_listing" tool_tip="Precio por publicarlo." value="50"/>
+ <text name="l$_text" value="L$"/>
+ <text name="more_info_text">
+ Más información (enlace a ayuda de clasificados)
+ </text>
+ <button label="Publicar" name="publish_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_script_limits.xml b/indra/newview/skins/default/xui/es/floater_script_limits.xml
new file mode 100644
index 0000000000..410f7b5e36
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_script_limits.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="scriptlimits" title="INFORMACIÓN DEL SCRIPT"/>
diff --git a/indra/newview/skins/default/xui/es/floater_script_preview.xml b/indra/newview/skins/default/xui/es/floater_script_preview.xml
index 36b58b608b..5c190a4682 100644
--- a/indra/newview/skins/default/xui/es/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_preview.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview lsl text" title="SCRIPT: ROTACIÓN DEL SCRIPT">
<floater.string name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<text name="desc txt">
Descripción:
diff --git a/indra/newview/skins/default/xui/es/floater_settings_debug.xml b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
index 36234763b0..bca1839f09 100644
--- a/indra/newview/skins/default/xui/es/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="CONFIGURACIONES DEL DEPURADOR">
- <combo_box name="boolean_combo">
- <combo_box.item label="VERDADERO" name="TRUE"/>
- <combo_box.item label="FALSO" name="FALSE"/>
- </combo_box>
+ <radio_group name="boolean_combo">
+ <radio_item label="VERDADERO" name="TRUE" value="verdadero"/>
+ <radio_item label="FALSO" name="FALSE" value=""/>
+ </radio_group>
<color_swatch label="Color" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
<spinner label="x" name="val_spinner_2"/>
diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml
index 9417c74d28..febb51e5d6 100644
--- a/indra/newview/skins/default/xui/es/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml
@@ -4,12 +4,12 @@
Destino de la foto
</text>
<radio_group label="Tipo de la foto" name="snapshot_type_radio">
- <radio_item label="Enviar por correo electrónico" name="postcard"/>
- <radio_item label="Guardarla en su inventario ([AMOUNT] L$)" name="texture"/>
- <radio_item label="Guardarla en su disco duro" name="local"/>
+ <radio_item label="Correo-e" name="postcard"/>
+ <radio_item label="Mi inventario ([AMOUNT] L$)" name="texture"/>
+ <radio_item label="Guardar en mi ordenador" name="local"/>
</radio_group>
<text name="file_size_label">
- Tamaño del archivo: [SIZE] KB
+ [SIZE] KB
</text>
<button label="Actualizar la foto" name="new_snapshot_btn"/>
<button label="Enviar" name="send_btn"/>
@@ -19,8 +19,8 @@
<flyout_button_item label="Guardar como..." name="saveas_item"/>
</flyout_button>
<button label="Cancelar" name="discard_btn"/>
- <button label="Más &gt;&gt;" name="more_btn" tool_tip="Opciones avanzadas"/>
- <button label="&lt;&lt; Menos" name="less_btn" tool_tip="Opciones avanzadas"/>
+ <button label="Más" name="more_btn" tool_tip="Opciones avanzadas"/>
+ <button label="Menos" name="less_btn" tool_tip="Opciones avanzadas"/>
<text name="type_label2">
Tamaño
</text>
@@ -68,11 +68,10 @@
<combo_box.item label="Profundidad" name="Depth"/>
<combo_box.item label="Bandas negras" name="ObjectMattes"/>
</combo_box>
- <check_box label="Incluir la interfaz en la foto" name="ui_check"/>
- <check_box bottom_delta="-17" label="Incluir los HUD en la foto" name="hud_check"/>
+ <check_box label="Interfaz" name="ui_check"/>
+ <check_box bottom_delta="-17" label="HUDs" name="hud_check"/>
<check_box bottom_delta="-17" label="Mantenerla abierta tras guardarla" name="keep_open_check"/>
- <check_box bottom_delta="-17" label="Congelar la toma
-(vista previa en pantalla completa)" name="freeze_frame_check"/>
+ <check_box bottom_delta="-17" label="Congelar la toma (pantalla completa)" name="freeze_frame_check"/>
<check_box bottom_delta="-29" label="Actualizar automáticamente" name="auto_snapshot_check"/>
<string name="unknown">
desconocido
diff --git a/indra/newview/skins/default/xui/es/floater_sys_well.xml b/indra/newview/skins/default/xui/es/floater_sys_well.xml
index 34c87351a4..8c8190be55 100644
--- a/indra/newview/skins/default/xui/es/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/es/floater_sys_well.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="sys_well_window" title="NOTIFICACIONES">
<string name="title_im_well_window">
- SESIONES DE MI
+ CONVERSACIONES
</string>
<string name="title_notification_well_window">
NOTIFICACIONES
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 1c65567830..a3851ea2b0 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -1,28 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="HERRAMIENTAS DE CONSTRUCCIÓN" title="" width="288">
<floater.string name="status_rotate">
- Arrastre las bandas de color para girar el objeto
+ Arrastra las bandas de color para girar el objeto.
</floater.string>
<floater.string name="status_scale">
- Pulse y arrastre para estirar el lado seleccionado
+ Pulsa y arrastra para estirar el lado seleccionado.
</floater.string>
<floater.string name="status_move">
- Arrastrar para mover, Mayús.+arrastrar para copiar
+ Arrastrar para mover, Mayús.+arrastrar para copiar.
</floater.string>
<floater.string name="status_modifyland">
- Mantenga pulsado para modificar el terreno
+ Mantén pulsado para modificar el terreno.
</floater.string>
<floater.string name="status_camera">
- Pulsa y arrastra para mover la cámara
+ Pulsa y arrastra para mover la cámara.
</floater.string>
<floater.string name="status_grab">
- Arrastra para mover: Ctrl, verticalmente; Ctrl-Mayús., girando
+ Arrastrar para mover: Ctrl, verticalmente; Ctrl-Mayús., girando.
</floater.string>
<floater.string name="status_place">
- Pulse en el mundo para construir
+ Pulsa en el mundo para construir.
</floater.string>
<floater.string name="status_selectland">
- Pulse y arrastre para seleccionar el terreno
+ Pulsa y arrastra para seleccionar el terreno.
</floater.string>
<floater.string name="grid_screen_text">
Pantalla
@@ -45,7 +45,7 @@
<button label="" label_selected="" name="button create" tool_tip="Crear"/>
<button label="" label_selected="" name="button land" tool_tip="Terreno"/>
<text name="text status" width="280">
- Arrastrar para mover, Mayús.+arrastrar para copiar
+ Arrastrar para mover, Mayús.+arrastrar para copiar.
</text>
<radio_group name="focus_radio_group">
<radio_item label="Zoom" name="radio zoom"/>
@@ -96,7 +96,7 @@
<check_box initial_value="true" label="Copia centrada" name="checkbox copy centers"/>
<check_box label="Copia girada" name="checkbox copy rotates"/>
<radio_group name="land_radio_group">
- <radio_item label="Seleccionar el terreno" name="radio select land"/>
+ <radio_item label="Seleccionar terreno" name="radio select land"/>
<radio_item label="Nivelar" name="radio flatten"/>
<radio_item label="Elevar" name="radio raise"/>
<radio_item label="Bajar" name="radio lower"/>
@@ -123,7 +123,7 @@
<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288">
<panel label="General" name="General">
<panel.string name="text deed continued">
- Transfeir
+ Transferir
</panel.string>
<panel.string name="text deed">
Transferir
@@ -181,8 +181,8 @@
</text>
<button label="Configurar..." label_selected="Configurar..." name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/>
<name_box initial_value="Cargando..." name="Group Name Proxy"/>
- <button label="Transfeir" label_selected="Transfeir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
- <check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/>
+ <button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
+ <check_box label="Comprtir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/>
<text name="label click action" width="180">
Al tocarlo:
</text>
@@ -210,7 +210,7 @@
Cualquiera:
</text>
<check_box label="Moverlo" name="checkbox allow everyone move"/>
- <check_box label="Copiar" name="checkbox allow everyone copy"/>
+ <check_box label="Copiarlo" name="checkbox allow everyone copy"/>
<text name="Next owner can:">
Próximo propietario:
</text>
@@ -355,7 +355,7 @@
</panel>
<panel label="Caracter." name="Features">
<text name="select_single">
- Seleccione un sólo prim para editarlo.
+ Selecciona un sólo prim para editarlo.
</text>
<text name="edit_object">
Editar las características del objeto:
@@ -399,7 +399,7 @@ máximo" name="checkbox fullbright"/>
<text name="tex gen">
Detallado
</text>
- <combo_box name="combobox texgen" width="86">
+ <combo_box name="combobox texgen">
<combo_box.item label="Por defecto" name="Default"/>
<combo_box.item label="Plano" name="Planar"/>
</combo_box>
@@ -442,9 +442,9 @@ máximo" name="checkbox fullbright"/>
<check_box label="Voltear" name="checkbox flip s"/>
<spinner label="Vertical (V)" name="TexScaleV"/>
<check_box label="Voltear" name="checkbox flip t"/>
- <spinner label="Rotación" left="118" name="TexRot" width="62"/>
- <spinner label="Repeticiones / Metro" left="118" name="rptctrl" width="62"/>
- <button label="Aplicar" label_selected="Aplicar" left_delta="72" name="button apply"/>
+ <spinner label="Rotación" name="TexRot"/>
+ <spinner label="Repeticiones / Metro" name="rptctrl"/>
+ <button label="Aplicar" label_selected="Aplicar" name="button apply"/>
<text name="tex offset">
Desplazar
</text>
@@ -475,7 +475,7 @@ máximo" name="checkbox fullbright"/>
<text name="label_area">
Ãrea: [AREA] m²
</text>
- <button label="Acerca del terreno" label_selected="Acerca del terreno" name="button about land" width="140"/>
+ <button label="Acerca del terreno" label_selected="Acerca del terreno" name="button about land"/>
<check_box label="Mostrar los propietarios" name="checkbox show owners" tool_tip="El color de las parcelas es según su propietario:
Verde = Su terreno
@@ -487,12 +487,12 @@ Gris = Público"/>
<text name="label_parcel_modify">
Modificar la parcela
</text>
- <button label="Dividir" label_selected="Dividir" name="button subdivide land" width="140"/>
- <button label="Inscribirse" label_selected="Inscribirse" name="button join land" width="140"/>
+ <button label="Dividir" label_selected="Dividir" name="button subdivide land"/>
+ <button label="Inscribirse" label_selected="Inscribirse" name="button join land"/>
<text name="label_parcel_trans">
Transacciones de terreno
</text>
- <button label="Comprar terreno" label_selected="Comprar terreno" name="button buy land" width="140"/>
- <button label="Abandonar el terreno" label_selected="Abandonar el terreno" name="button abandon land" width="140"/>
+ <button label="Comprar terreno" label_selected="Comprar terreno" name="button buy land"/>
+ <button label="Abandonar el terreno" label_selected="Abandonar el terreno" name="button abandon land"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml
index d2311c734b..7c2522e8a9 100644
--- a/indra/newview/skins/default/xui/es/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/es/floater_top_objects.xml
@@ -1,58 +1,59 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="top_objects" title="Objetos superiores">
+ <floater.string name="top_scripts_title">
+ Scripts según su uso
+ </floater.string>
+ <floater.string name="top_scripts_text">
+ [COUNT] scripts con un total de [TIME] ms
+ </floater.string>
+ <floater.string name="scripts_score_label">
+ Tiempo
+ </floater.string>
+ <floater.string name="scripts_mono_time_label">
+ Tiempo en Mono
+ </floater.string>
+ <floater.string name="top_colliders_title">
+ Objetos que colisionan
+ </floater.string>
+ <floater.string name="top_colliders_text">
+ [COUNT] objetos con muchas posibles colisiones
+ </floater.string>
+ <floater.string name="colliders_score_label">
+ Resultado
+ </floater.string>
+ <floater.string name="none_descriptor">
+ No se ha encontrado ninguno.
+ </floater.string>
<text name="title_text">
Cargando...
</text>
<scroll_list name="objects_list">
- <column label="Resultado" name="score"/>
- <column label="Nombre" name="name"/>
- <column label="Propietario" name="owner"/>
- <column label="Posición" name="location"/>
- <column label="Tiempo" name="time"/>
- <column label="Tiempo en Mono" name="mono_time"/>
+ <scroll_list.columns label="Resultado" name="score"/>
+ <scroll_list.columns label="Nombre" name="name"/>
+ <scroll_list.columns label="Propietario" name="owner"/>
+ <scroll_list.columns label="Posición" name="location"/>
+ <scroll_list.columns label="Tiempo" name="time"/>
+ <scroll_list.columns label="Tiempo en Mono" name="mono_time"/>
+ <scroll_list.columns label="URLs" name="URLs"/>
</scroll_list>
- <line_editor font="SansSerifSmall" left="140" name="id_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="140" name="object_name_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="140" name="owner_name_editor" width="280"/>
<text name="id_text">
ID del objeto:
</text>
+ <line_editor font="SansSerifSmall" left="140" name="id_editor" width="280"/>
<button label="Mostrar la baliza" name="show_beacon_btn" width="115"/>
<text name="obj_name_text">
Nombre del objeto:
</text>
+ <line_editor font="SansSerifSmall" left="140" name="object_name_editor" width="280"/>
<button label="Filtro" name="filter_object_btn" width="115"/>
<text name="owner_name_text" width="130">
Propietario:
</text>
+ <line_editor font="SansSerifSmall" left="140" name="owner_name_editor" width="280"/>
<button label="Filtro" name="filter_owner_btn" width="115"/>
+ <button label="Actualizar" name="refresh_btn" width="115"/>
<button label="Devolver lo seleccionado" name="return_selected_btn" width="170"/>
<button label="Devolver todo" left="190" name="return_all_btn"/>
<button label="Desactivar lo seleccionado" name="disable_selected_btn" width="170"/>
<button label="Desactivar todo" left="190" name="disable_all_btn"/>
- <button label="Actualizar" name="refresh_btn" width="115"/>
- <string name="top_scripts_title">
- Scripts según su uso
- </string>
- <string name="top_scripts_text">
- [COUNT] scripts con un total de [TIME] ms
- </string>
- <string name="scripts_score_label">
- Tiempo
- </string>
- <string name="scripts_mono_time_label">
- Tiempo en Mono
- </string>
- <string name="top_colliders_title">
- Objetos que colisionan
- </string>
- <string name="top_colliders_text">
- [COUNT] objetos con muchas posibles colisiones
- </string>
- <string name="colliders_score_label">
- Resultado
- </string>
- <string name="none_descriptor">
- No se ha encontrado ninguno.
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_tos.xml b/indra/newview/skins/default/xui/es/floater_tos.xml
index cbacce304c..7dd91f29fa 100644
--- a/indra/newview/skins/default/xui/es/floater_tos.xml
+++ b/indra/newview/skins/default/xui/es/floater_tos.xml
@@ -2,9 +2,9 @@
<floater name="modal container" title=" ">
<button label="Continuar" label_selected="Continuar" name="Continue"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
- <check_box label="Estoy de acuerdo con las Condiciones del Servicio" name="agree_chk"/>
+ <check_box label="Acepto las Condiciones del servicio y la Política de privacidad" name="agree_chk"/>
<text name="tos_heading">
- Por favor, lee detenidamente las siguientes Condiciones del Servicio. Para conectarte a [SECOND_LIFE], debes aceptar este acuerdo.
+ Por favor, lee detenidamente las siguientes Condiciones del servicio y Política de privacidad. Debes aceptar el acuerdo para poder iniciar sesión en [SECOND_LIFE].
</text>
<text_editor name="tos_text">
TOS_TEXT
diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
index dfd03c6f83..934d14a45c 100644
--- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
@@ -13,13 +13,14 @@
Llamada: [NAME]
</string>
<string name="no_one_near">
- No hay nadie cerca
+ Nadie cercano tiene activada la voz
</string>
- <panel name="control_panel">
- <layout_stack>
- <layout_panel name="leave_btn_panel">
- <button label="Colgar" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="my_call_stack">
+ <layout_panel name="my_panel">
+ <text name="user_text" value="Mi avatar:"/>
+ </layout_panel>
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Colgar" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml
index 9996860137..2c1f6cfbfb 100644
--- a/indra/newview/skins/default/xui/es/floater_water.xml
+++ b/indra/newview/skins/default/xui/es/floater_water.xml
@@ -7,7 +7,7 @@
<button label="Guardar" label_selected="Guardar" name="WaterSavePreset"/>
<button label="Borrar" label_selected="Borrar" name="WaterDeletePreset"/>
<tab_container name="Water Tabs">
- <panel label="Configuraciones" name="Settings">
+ <panel label="CONFIGURACIÓN" name="Settings">
<text name="BHText">
Color del agua
</text>
@@ -55,7 +55,7 @@
</text>
<button label="?" left="640" name="WaterBlurMultiplierHelp"/>
</panel>
- <panel label="Imagen" name="Waves">
+ <panel label="IMAGEN" name="Waves">
<text name="BHText">
Sentido de la onda grande
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
index 1dfff90004..bf96ed53ce 100644
--- a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
@@ -3,7 +3,7 @@
<button label="Guardar" label_selected="Guardar" name="Save"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
<text name="Save item as:">
- Guardar el ítem como:
+ Guardar el ítem en mi inventario como:
</text>
<line_editor name="name ed">
Nuevo [DESC]
diff --git a/indra/newview/skins/default/xui/es/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/es/floater_whitelist_entry.xml
index 71b185aa0a..7dc47ca367 100644
--- a/indra/newview/skins/default/xui/es/floater_whitelist_entry.xml
+++ b/indra/newview/skins/default/xui/es/floater_whitelist_entry.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="whitelist_entry">
+<floater name="whitelist_entry" title="ENTRADA DE LA LISTA BLANCA">
<text name="media_label">
Escribe una URL o un rango de URL para añadirla a lista de dominios autorizados
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_windlight_options.xml b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
index 0697f05553..9bc3750951 100644
--- a/indra/newview/skins/default/xui/es/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
@@ -6,9 +6,9 @@
<button label="Nuevo" label_selected="Nuevo" name="WLNewPreset"/>
<button label="Guardar" label_selected="Guardar" name="WLSavePreset"/>
<button label="Borrar" label_selected="Borrar" name="WLDeletePreset"/>
- <button font="SansSerifSmall" width="150" left_delta="90" label="Editor del ciclo de un día" label_selected="Editor del ciclo de un día" name="WLDayCycleMenuButton"/>
+ <button font="SansSerifSmall" label="Editor del ciclo de un día" label_selected="Editor del ciclo de un día" left_delta="90" name="WLDayCycleMenuButton" width="150"/>
<tab_container name="WindLight Tabs">
- <panel label="Atmósfera" name="Atmosphere">
+ <panel label="ATMÓSFERA" name="Atmosphere">
<text name="BHText">
Coloración
</text>
@@ -62,7 +62,7 @@
</text>
<button label="?" name="WLMaxAltitudeHelp"/>
</panel>
- <panel label="Iluminación" name="Lighting">
+ <panel label="LUZ" name="Lighting">
<text name="SLCText">
Color del Sol y de la Luna
</text>
@@ -118,11 +118,11 @@
</text>
<button label="?" name="WLStarBrightnessHelp"/>
</panel>
- <panel label="Nubes" name="Clouds">
+ <panel label="NUBES" name="Clouds">
<text name="WLCloudColorText">
Color de las nubes
</text>
- <button label="?" name="WLCloudColorHelp" left="190" />
+ <button label="?" left="190" name="WLCloudColorHelp"/>
<text name="BHText">
R
</text>
@@ -138,7 +138,7 @@
<text name="WLCloudColorText2">
Posición/Densidad de las nubes
</text>
- <button label="?" name="WLCloudDensityHelp" left="190"/>
+ <button label="?" left="190" name="WLCloudDensityHelp"/>
<text name="BHText5">
X
</text>
@@ -156,12 +156,12 @@
Altitud de las nubes
</text>
<button label="?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText" font="SansSerifSmall">
+ <text font="SansSerifSmall" name="WLCloudDetailText">
Detalle de las nubes
(Posición/Densidad)
</text>
<button label="?" name="WLCloudDetailHelp"/>
- <text name="BHText8" bottom="-113">
+ <text bottom="-113" name="BHText8">
X
</text>
<text name="BHText9">
@@ -182,7 +182,7 @@
<button label="?" name="WLCloudScrollYHelp"/>
<check_box label="Bloquear" name="WLCloudLockY"/>
<check_box label="Incluir nubes clásicas" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp" left="618"/>
+ <button label="?" left="618" name="WLClassicCloudsHelp"/>
</panel>
</tab_container>
<string name="WLDefaultSkyNames">
diff --git a/indra/newview/skins/default/xui/es/floater_window_size.xml b/indra/newview/skins/default/xui/es/floater_window_size.xml
new file mode 100644
index 0000000000..f57ce08eac
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_window_size.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="window_size" title="TAMAÑO DE LA VENTANA">
+ <string name="resolution_format">
+ [RES_X] x [RES_Y]
+ </string>
+ <text name="windowsize_text">
+ Definir el tamaño de la ventana:
+ </text>
+ <combo_box name="window_size_combo" tool_tip="ancho x alto">
+ <combo_box.item label="1000 x 700 (por defecto)" name="item0"/>
+ <combo_box.item label="1024 x 768" name="item1"/>
+ <combo_box.item label="1280 x 720 (720 p)" name="item2"/>
+ <combo_box.item label="1920 x 1080 (1080 p)" name="item3"/>
+ </combo_box>
+ <button label="Configurar" name="set_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_world_map.xml b/indra/newview/skins/default/xui/es/floater_world_map.xml
index 37c4e2a377..38a12002f5 100644
--- a/indra/newview/skins/default/xui/es/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/es/floater_world_map.xml
@@ -5,65 +5,66 @@
Leyenda
</text>
</panel>
- <panel>
- <button label="Mostrar mi posición" label_selected="Mostrar mi posición" name="Show My Location" tool_tip="Centrar el mapa en la posición de mi avatar"/>
- <text name="person_label">
+ <panel name="layout_panel_2">
+ <button name="Show My Location" tool_tip="Centrar el mapa en la posición de mi avatar"/>
+ <text name="me_label">
Yo
</text>
- <check_box label="Residente" name="people_chk"/>
- <check_box label="Punto de Info" name="infohub_chk"/>
+ <text name="person_label">
+ Persona
+ </text>
<text name="infohub_label">
Punto de Info
</text>
- <check_box label="Terreno en venta" name="land_for_sale_chk"/>
<text name="land_sale_label">
Venta de terreno
</text>
- <text name="auction_label">
+ <text name="by_owner_label">
por el propietario
</text>
- <button label="Ir a la Base" label_selected="Ir a la Base" name="Go Home" tool_tip="Teleportar a mi Base"/>
+ <text name="auction_label">
+ subasta de terreno
+ </text>
+ <button name="Go Home" tool_tip="Teleportar a mi Base"/>
<text name="Home_label">
Base
</text>
<text name="events_label">
Eventos:
</text>
- <check_box label="&apos;PG&apos;" name="event_chk"/>
- <check_box initial_value="true" label="&apos;Mature&apos;" name="event_mature_chk"/>
+ <text name="pg_label">
+ General
+ </text>
+ <check_box initial_value="verdadero" name="event_mature_chk"/>
<text name="mature_label">
- Mature
+ Moderado
+ </text>
+ <text name="adult_label">
+ Adulto
</text>
- <check_box label="&apos;Adult&apos;" name="event_adult_chk"/>
</panel>
- <panel>
+ <panel name="layout_panel_3">
<text name="find_on_map_label">
Encontrar en el mapa
</text>
</panel>
- <panel>
- <combo_box label="Amigos conectados" name="friend combo" tool_tip="Ver a los amigos en el mapa">
+ <panel name="layout_panel_4">
+ <combo_box label="Amigos online" name="friend combo" tool_tip="Ver a los amigos en el mapa">
<combo_box.item label="Mis amigos conectados" name="item1"/>
</combo_box>
<combo_box label="Mis hitos" name="landmark combo" tool_tip="Hito a ver en el mapa">
<combo_box.item label="Mis hitos" name="item1"/>
</combo_box>
- <search_editor label="Regiones alfabéticamente" name="location" tool_tip="Escriba el nombre de una región"/>
+ <search_editor label="Regiones alfabéticamente" name="location" tool_tip="Escribe el nombre de una región"/>
<button label="Encontrar" name="DoSearch" tool_tip="Buscar una región"/>
- <scroll_list name="search_results">
- <scroll_list.columns label="" name="icon"/>
- <scroll_list.columns label="" name="sim_name"/>
- </scroll_list>
- <button label="Teleportar" label_selected="Teleportar" name="Teleport" tool_tip="Teleportarse a la localización elegida"/>
+ <button name="Clear" tool_tip="Limpia las marcas y actualiza el mapa"/>
+ <button label="Teleportar" name="Teleport" tool_tip="Teleportar a la localización seleccionada"/>
<button label="Copiar la SLurl" name="copy_slurl" tool_tip="Copiar la SLurl de esta posición para usarla en una web."/>
- <button label="Ver lo elegido" label_selected="Mostrar el destino" name="Show Destination" tool_tip="Centrar el mapa en la localización elegida"/>
+ <button label="Ver lo elegido" name="Show Destination" tool_tip="Centrar el mapa en la localización seleccionada"/>
</panel>
- <panel>
+ <panel name="layout_panel_5">
<text name="zoom_label">
Zoom
</text>
</panel>
- <panel>
- <slider label="Zoom" name="zoom slider"/>
- </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/es/inspect_avatar.xml b/indra/newview/skins/default/xui/es/inspect_avatar.xml
index dff09aaace..bff10d9292 100644
--- a/indra/newview/skins/default/xui/es/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/es/inspect_avatar.xml
@@ -13,7 +13,7 @@
<slider name="volume_slider" tool_tip="Volumen de la voz" value="0.5"/>
<button label="Añadir como amigo" name="add_friend_btn"/>
<button label="MI" name="im_btn"/>
- <button label="Más" name="view_profile_btn"/>
+ <button label="Perfil" name="view_profile_btn"/>
<panel name="moderator_panel">
<button label="Desactivar la voz" name="disable_voice"/>
<button label="Activar la voz" name="enable_voice"/>
diff --git a/indra/newview/skins/default/xui/es/language_settings.xml b/indra/newview/skins/default/xui/es/language_settings.xml
index 71418d446a..1ade4ba300 100644
--- a/indra/newview/skins/default/xui/es/language_settings.xml
+++ b/indra/newview/skins/default/xui/es/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">spanish</string>
+ <string name="DarwinLocale">es_ES.UTF-8</string>
+ <string name="LinuxLocale">es_ES.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
index 8d3790a4d1..46b6d3ece6 100644
--- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Self Pie">
<menu_item_call label="Levantarse" name="Stand Up"/>
- <context_menu label="Quitarse &gt;" name="Take Off &gt;">
- <context_menu label="Ropa &gt;" name="Clothes &gt;">
+ <context_menu label="Quitarme â–¶" name="Take Off &gt;">
+ <context_menu label="Ropas â–¶" name="Clothes &gt;">
<menu_item_call label="Camisa" name="Shirt"/>
<menu_item_call label="Pantalón" name="Pants"/>
<menu_item_call label="Falda" name="Skirt"/>
@@ -16,8 +16,8 @@
<menu_item_call label="Alfa" name="Self Alpha"/>
<menu_item_call label="Toda la ropa" name="All Clothes"/>
</context_menu>
- <context_menu label="HUD &gt;" name="Object Detach HUD"/>
- <context_menu label="Quitarse &gt;" name="Object Detach"/>
+ <context_menu label="HUD â–¶" name="Object Detach HUD"/>
+ <context_menu label="Desanexar â–¶" name="Object Detach"/>
<menu_item_call label="Quitarse todo" name="Detach All"/>
</context_menu>
<menu_item_call label="Mi apariencia" name="Appearance..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_im_well_button.xml b/indra/newview/skins/default/xui/es/menu_im_well_button.xml
new file mode 100644
index 0000000000..c8f6c217cc
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+ <menu_item_call label="Cerrar todo" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
index c6728f948d..34f6b8ece7 100644
--- a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
@@ -7,6 +7,7 @@
<menu_item_call label="Teleportarse" name="teleport"/>
<menu_item_call label="Invitar al grupo" name="invite_to_group"/>
<menu_item_call label="Ignorar" name="block"/>
+ <menu_item_call label="Designorar" name="unblock"/>
<menu_item_call label="Denunciar" name="report"/>
<menu_item_call label="Congelar" name="freeze"/>
<menu_item_call label="Expulsar" name="eject"/>
@@ -14,4 +15,5 @@
<menu_item_call label="Encontrar en el mapa" name="find_on_map"/>
<menu_item_call label="Acercar el zoom" name="zoom_in"/>
<menu_item_call label="Pagar" name="pay"/>
+ <menu_item_call label="Compartir" name="share"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml
index ae3eb1c845..602798b108 100644
--- a/indra/newview/skins/default/xui/es/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/es/menu_inventory.xml
@@ -46,9 +46,10 @@
<menu_item_call label="Teleportar" name="Landmark Open"/>
<menu_item_call label="Abrir" name="Animation Open"/>
<menu_item_call label="Abrir" name="Sound Open"/>
+ <menu_item_call label="Reemplazar el vestuario" name="Replace Outfit"/>
+ <menu_item_call label="Añadir al vestuario" name="Add To Outfit"/>
<menu_item_call label="Eliminar el ítem" name="Purge Item"/>
<menu_item_call label="Restaurar el ítem" name="Restore Item"/>
- <menu_item_call label="Ir al enlace" name="Goto Link"/>
<menu_item_call label="Abrir" name="Open"/>
<menu_item_call label="Propiedades" name="Properties"/>
<menu_item_call label="Renombrar" name="Rename"/>
@@ -57,13 +58,11 @@
<menu_item_call label="Pegar" name="Paste"/>
<menu_item_call label="Pegar como enlace" name="Paste As Link"/>
<menu_item_call label="Borrar" name="Delete"/>
- <menu_item_call label="Quitarse los ítems" name="Take Off Items"/>
- <menu_item_call label="Añadir al vestuario" name="Add To Outfit"/>
- <menu_item_call label="Reemplazar el vestuario" name="Replace Outfit"/>
+ <menu_item_call label="Borrar carpeta del sistema" name="Delete System Folder"/>
<menu_item_call label="Empezar multiconferencia" name="Conference Chat Folder"/>
<menu_item_call label="Escuchar" name="Sound Play"/>
<menu_item_call label="Acerca del hito" name="About Landmark"/>
- <menu_item_call label="Ver en el mundo" name="Animation Play"/>
+ <menu_item_call label="Escuchar en el mundo" name="Animation Play"/>
<menu_item_call label="Ejecutarla para usted" name="Animation Audition"/>
<menu_item_call label="Enviar un mensaje instantáneo" name="Send Instant Message"/>
<menu_item_call label="Ofrecer teleporte..." name="Offer Teleport..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml
index 7e1a537122..7ebe2e0c31 100644
--- a/indra/newview/skins/default/xui/es/menu_login.xml
+++ b/indra/newview/skins/default/xui/es/menu_login.xml
@@ -21,8 +21,8 @@
</menu>
<menu_item_call label="Mostrar las configuraciones del depurador" name="Debug Settings"/>
<menu_item_call label="Configuraciones del Visor/Color" name="UI/Color Settings"/>
- <menu_item_call label="Mostrar el panel lateral" name="Show Side Tray"/>
<menu label="Pruebas de la interfaz" name="UI Tests"/>
+ <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="Web Browser Test" name="Web Browser Test"/>
diff --git a/indra/newview/skins/default/xui/es/menu_mini_map.xml b/indra/newview/skins/default/xui/es/menu_mini_map.xml
index 9c5a5719ee..8e464177fe 100644
--- a/indra/newview/skins/default/xui/es/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/es/menu_mini_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
+<menu name="Popup">
<menu_item_call label="Zoom cerca" name="Zoom Close"/>
<menu_item_call label="Zoom medio" name="Zoom Medium"/>
<menu_item_call label="Zoom lejos" name="Zoom Far"/>
diff --git a/indra/newview/skins/default/xui/es/menu_notification_well_button.xml b/indra/newview/skins/default/xui/es/menu_notification_well_button.xml
new file mode 100644
index 0000000000..0562d35be7
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+ <menu_item_call label="Cerrar todo" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml
index 2d701a89c3..1677b9461e 100644
--- a/indra/newview/skins/default/xui/es/menu_object.xml
+++ b/indra/newview/skins/default/xui/es/menu_object.xml
@@ -5,19 +5,22 @@
<menu_item_call label="Construir" name="Build"/>
<menu_item_call label="Abrir" name="Open"/>
<menu_item_call label="Sentarse aquí" name="Object Sit"/>
+ <menu_item_call label="Levantarme" name="Object Stand Up"/>
<menu_item_call label="Perfil del objeto" name="Object Inspect"/>
- <context_menu label="Poner &gt;" name="Put On">
+ <menu_item_call label="Acercar el zoom" name="Zoom In"/>
+ <context_menu label="Ponerme â–¶" name="Put On">
<menu_item_call label="Ponerse" name="Wear"/>
- <context_menu label="Anexar &gt;" name="Object Attach"/>
- <context_menu label="Anexar el HUD &gt;" name="Object Attach HUD"/>
+ <context_menu label="Anexar â–¶" name="Object Attach"/>
+ <context_menu label="Anexar como HUD â–¶" name="Object Attach HUD"/>
</context_menu>
- <context_menu label="Quitar &gt;" name="Remove">
- <menu_item_call label="Tomar" name="Pie Object Take"/>
+ <context_menu label="Quitarme â–¶" name="Remove">
<menu_item_call label="Denunciar una infracción" name="Report Abuse..."/>
<menu_item_call label="Ignorar" name="Object Mute"/>
<menu_item_call label="Devolver" name="Return..."/>
<menu_item_call label="Eliminar" name="Delete"/>
</context_menu>
+ <menu_item_call label="Comprar" name="Pie Object Bye"/>
+ <menu_item_call label="Tomar" name="Pie Object Take"/>
<menu_item_call label="Coger una copia" name="Take Copy"/>
<menu_item_call label="Pagar" name="Pay..."/>
<menu_item_call label="Comprar" name="Buy..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_participant_list.xml b/indra/newview/skins/default/xui/es/menu_participant_list.xml
index bc7e2617be..60c92eec75 100644
--- a/indra/newview/skins/default/xui/es/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/es/menu_participant_list.xml
@@ -1,16 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Participant List Context Menu">
+ <menu_item_check label="Ordenar alfabéticamente" name="SortByName"/>
+ <menu_item_check label="Ordenar según las intervenciones recientes" name="SortByRecentSpeakers"/>
<menu_item_call label="Ver el perfil" name="View Profile"/>
<menu_item_call label="Añadir como amigo" name="Add Friend"/>
<menu_item_call label="MI" name="IM"/>
<menu_item_call label="Llamada" name="Call"/>
<menu_item_call label="Compartir" name="Share"/>
<menu_item_call label="Pagar" name="Pay"/>
- <menu_item_check label="Ignorar / No ignorar" name="Block/Unblock"/>
- <menu_item_check label="Silenciar el texto" name="MuteText"/>
- <menu_item_check label="Permitir el chat de texto" name="AllowTextChat"/>
- <menu_item_call label="Ignorar a este participante" name="ModerateVoiceMuteSelected"/>
- <menu_item_call label="Silenciar a todos los demás" name="ModerateVoiceMuteOthers"/>
- <menu_item_call label="Quitar el silencio a este participante" name="ModerateVoiceUnMuteSelected"/>
- <menu_item_call label="Quitar el silencio a todos los demás" name="ModerateVoiceUnMuteOthers"/>
+ <menu_item_check label="Ignorar la voz" name="Block/Unblock"/>
+ <menu_item_check label="Ignorar el texto" name="MuteText"/>
+ <context_menu label="Opciones del moderador &gt;" name="Moderator Options">
+ <menu_item_check label="Permitir el chat de texto" name="AllowTextChat"/>
+ <menu_item_call label="Ignorar a este participante" name="ModerateVoiceMuteSelected"/>
+ <menu_item_call label="Silenciar a todos los demás" name="ModerateVoiceMuteOthers"/>
+ <menu_item_call label="Quitar el silencio a este participante" name="ModerateVoiceUnMuteSelected"/>
+ <menu_item_call label="Quitar el silencio a todos los demás" name="ModerateVoiceUnMuteOthers"/>
+ </context_menu>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_groups.xml b/indra/newview/skins/default/xui/es/menu_people_groups.xml
new file mode 100644
index 0000000000..51bd2c7208
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+ <menu_item_call label="Ver la información" name="View Info"/>
+ <menu_item_call label="Chat" name="Chat"/>
+ <menu_item_call label="Llamar" name="Call"/>
+ <menu_item_call label="Activar" name="Activate"/>
+ <menu_item_call label="Dejar" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby.xml b/indra/newview/skins/default/xui/es/menu_people_nearby.xml
index 310a96d740..88df983838 100644
--- a/indra/newview/skins/default/xui/es/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_nearby.xml
@@ -2,9 +2,12 @@
<context_menu name="Avatar Context Menu">
<menu_item_call label="Ver el perfil" name="View Profile"/>
<menu_item_call label="Añadir como amigo" name="Add Friend"/>
+ <menu_item_call label="Quitarle como amigo" name="Remove Friend"/>
<menu_item_call label="MI" name="IM"/>
<menu_item_call label="Llamada" name="Call"/>
+ <menu_item_call label="Mapa" name="Map"/>
<menu_item_call label="Compartir" name="Share"/>
<menu_item_call label="Pagar" name="Pay"/>
<menu_item_check label="Ignorar / No ignorar" name="Block/Unblock"/>
+ <menu_item_call label="Ofrecer teleporte" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
index 7d6979256e..b87d6c6deb 100644
--- a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Multi-Selected People Context Menu">
<menu_item_call label="Añadir como amigos" name="Add Friends"/>
+ <menu_item_call label="Quitar amigos" name="Remove Friend"/>
<menu_item_call label="MI" name="IM"/>
<menu_item_call label="Llamada" name="Call"/>
<menu_item_call label="Compartir" name="Share"/>
diff --git a/indra/newview/skins/default/xui/es/menu_profile_overflow.xml b/indra/newview/skins/default/xui/es/menu_profile_overflow.xml
index c1e01f0554..5ee8c50949 100644
--- a/indra/newview/skins/default/xui/es/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/es/menu_profile_overflow.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="profile_overflow_menu">
+ <menu_item_call label="Mapa" name="show_on_map"/>
<menu_item_call label="Pagar" name="pay"/>
<menu_item_call label="Compartir" name="share"/>
+ <menu_item_call label="Ignorar" name="block"/>
+ <menu_item_call label="Designorar" name="unblock"/>
+ <menu_item_call label="Expulsar" name="kick"/>
+ <menu_item_call label="Congelar" name="freeze"/>
+ <menu_item_call label="Descongelar" name="unfreeze"/>
+ <menu_item_call label="CSR" name="csr"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index acd7319b31..93964a2f4f 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -9,9 +9,9 @@
<menu_item_call label="Mi perfil" name="Profile"/>
<menu_item_call label="Mi apariencia" name="Appearance"/>
<menu_item_check label="Mi Inventario" name="Inventory"/>
- <menu_item_call label="Mostrar el inventario en el panel lateral" name="ShowSidetrayInventory"/>
- <menu_item_call label="Mis gestos" name="Gestures"/>
- <menu label="Mi estatus" name="Status">
+ <menu_item_check label="Mi Inventario" name="ShowSidetrayInventory"/>
+ <menu_item_check label="Mis gestos" name="Gestures"/>
+ <menu label="Mi estado" name="Status">
<menu_item_call label="Ausente" name="Set Away"/>
<menu_item_call label="Ocupado" name="Set Busy"/>
</menu>
@@ -24,35 +24,36 @@
<menu_item_call label="Mis grupos" name="My Groups"/>
<menu_item_check label="Chat" name="Nearby Chat"/>
<menu_item_call label="Gente cerca" name="Active Speakers"/>
- <menu_item_check label="Media cercanos" name="Nearby Media"/>
</menu>
<menu label="Mundo" name="World">
- <menu_item_check label="Moverse" name="Movement Controls"/>
- <menu_item_check label="Vista" name="Camera Controls"/>
- <menu_item_call label="Acerca del terreno" name="About Land"/>
- <menu_item_call label="Región/Estado" name="Region/Estate"/>
- <menu_item_call label="Comprar terreno" name="Buy Land"/>
+ <menu_item_check label="Minimapa" name="Mini-Map"/>
+ <menu_item_check label="Mapa del mundo" name="World Map"/>
+ <menu_item_call label="Foto" name="Take Snapshot"/>
+ <menu_item_call label="Crear un hito de este sitio" name="Create Landmark Here"/>
+ <menu label="Perfil del lugar" name="Land">
+ <menu_item_call label="Acerca del terreno" name="About Land"/>
+ <menu_item_call label="Región/Estado" name="Region/Estate"/>
+ </menu>
+ <menu_item_call label="Comprar este terreno" name="Buy Land"/>
<menu_item_call label="Mi terreno" name="My Land"/>
- <menu label="Mostrar" name="Land">
+ <menu label="Mostrar" name="LandShow">
+ <menu_item_check label="Controles del movimiento" name="Movement Controls"/>
+ <menu_item_check label="Controles de la cámara" name="Camera Controls"/>
<menu_item_check label="Líneas de prohibición" name="Ban Lines"/>
<menu_item_check label="Balizas" name="beacons"/>
<menu_item_check label="Límites de las parcelas" name="Property Lines"/>
<menu_item_check label="Propietarios del terreno" name="Land Owners"/>
+ <menu_item_check label="Coordenadas" name="Coordinates"/>
+ <menu_item_check label="Propiedades de la parcela" name="Parcel Properties"/>
</menu>
- <menu label="Hitos" name="Landmarks">
- <menu_item_call label="Crear aquí un hito" name="Create Landmark Here"/>
- <menu_item_call label="Fijar mi base aquí" name="Set Home to Here"/>
- </menu>
- <menu_item_call label="Base" name="Teleport Home"/>
- <menu_item_check label="Minimapa" name="Mini-Map"/>
- <menu_item_check label="Mapa del mundo" name="World Map"/>
- <menu_item_call label="Foto" name="Take Snapshot"/>
+ <menu_item_call label="Teleportar a la Base" name="Teleport Home"/>
+ <menu_item_call label="Fijar mi Base aquí" name="Set Home to Here"/>
<menu label="Sol" name="Environment Settings">
<menu_item_call label="Amanecer" name="Sunrise"/>
<menu_item_call label="Mediodía" name="Noon"/>
<menu_item_call label="Atardecer" name="Sunset"/>
<menu_item_call label="Medianoche" name="Midnight"/>
- <menu_item_call label="Usar el horario del estado" name="Revert to Region Default"/>
+ <menu_item_call label="Hora del Estado" name="Revert to Region Default"/>
<menu_item_call label="Editor del entorno" name="Environment Editor"/>
</menu>
</menu>
@@ -78,10 +79,12 @@
</menu>
<menu_item_call label="Enlazar" name="Link"/>
<menu_item_call label="Desenlazar" name="Unlink"/>
+ <menu_item_check label="Editar las partes enlazadas" name="Edit Linked Parts"/>
<menu_item_call label="Visión en lo seleccionado" name="Focus on Selection"/>
<menu_item_call label="Zoom en lo seleccionado" name="Zoom to Selection"/>
<menu label="Objeto" name="Object">
- <menu_item_call label="Comprar" name="Menu Object Take"/>
+ <menu_item_call label="Comprar" name="Menu Object Buy"/>
+ <menu_item_call label="Tomar" name="Menu Object Take"/>
<menu_item_call label="Coger una copia" name="Take Copy"/>
<menu_item_call label="Guardar una copia en mi inventario" name="Save Object Back to My Inventory"/>
<menu_item_call label="Guardar una copia del objeto en los contenidos de donde salió" name="Save Object Back to Object Contents"/>
@@ -94,25 +97,18 @@
<menu_item_call label="Configurar scripts como no ejecutándose" name="Set Scripts to Not Running"/>
</menu>
<menu label="Opciones" name="Options">
- <menu_item_check label="Editar las partes enlazadas" name="Edit Linked Parts"/>
<menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>
<menu_item_check label="Mostrar los permisos avanzados" name="DebugPermissions"/>
- <menu label="Selección" name="Selection">
- <menu_item_check label="Seleccionar sólo mis objetos" name="Select Only My Objects"/>
- <menu_item_check label="Seleccionar sólo los objetos movibles" name="Select Only Movable Objects"/>
- <menu_item_check label="Seleccionar marcando los alrededores" name="Select By Surrounding"/>
- </menu>
- <menu label="Mostrar" name="Show">
- <menu_item_check label="Al seleccionar, mostrar lo oculto" name="Show Hidden Selection"/>
- <menu_item_check label="Al seleccionar, mostrar el radio de la luz" name="Show Light Radius for Selection"/>
- <menu_item_check label="Mostrar el rayo indicador" name="Show Selection Beam"/>
- </menu>
- <menu label="Cuadrícula" name="Grid">
- <menu_item_check label="Ajustar a la cuadrícula" name="Snap to Grid"/>
- <menu_item_call label="Ajustar a la cuadrícula los ejes X e Y" name="Snap Object XY to Grid"/>
- <menu_item_call label="Usar lo seleccionado como cuadrícula" name="Use Selection for Grid"/>
- <menu_item_call label="Opciones de la cuadrícula" name="Grid Options"/>
- </menu>
+ <menu_item_check label="Seleccionar sólo mis objetos" name="Select Only My Objects"/>
+ <menu_item_check label="Seleccionar sólo los objetos movibles" name="Select Only Movable Objects"/>
+ <menu_item_check label="Seleccionar marcando los alrededores" name="Select By Surrounding"/>
+ <menu_item_check label="Al seleccionar, mostrar lo oculto" name="Show Hidden Selection"/>
+ <menu_item_check label="Al seleccionar, mostrar el radio de la luz" name="Show Light Radius for Selection"/>
+ <menu_item_check label="Mostrar el rayo indicador" name="Show Selection Beam"/>
+ <menu_item_check label="Ajustar a la cuadrícula" name="Snap to Grid"/>
+ <menu_item_call label="Ajustar a la cuadrícula los ejes X e Y" name="Snap Object XY to Grid"/>
+ <menu_item_call label="Usar lo seleccionado como cuadrícula" name="Use Selection for Grid"/>
+ <menu_item_call label="Opciones de la cuadrícula" name="Grid Options"/>
</menu>
<menu label="Seleccionar las partes enlazadas" name="Select Linked Parts">
<menu_item_call label="Seleccionar la parte siguiente" name="Select Next Part"/>
@@ -123,15 +119,14 @@
</menu>
<menu label="Ayuda" name="Help">
<menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/>
- <menu_item_call label="Tutorial" name="Tutorial"/>
<menu_item_call label="Denunciar una infracción" name="Report Abuse"/>
<menu_item_call label="Informar de un fallo" name="Report Bug"/>
</menu>
<menu label="Avanzado" name="Advanced">
- <menu_item_check label="Pasar al estado ausente tras 30 min." name="Go Away/AFK When Idle"/>
<menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/>
<menu_item_call label="Recargar las texturas" name="Rebake Texture"/>
<menu_item_call label="Interfaz en el tamaño predeterminado" name="Set UI Size to Default"/>
+ <menu_item_call label="Definir el tamaño de la ventana..." name="Set Window Size..."/>
<menu_item_check label="Limitar la distancia para Seleccionar" name="Limit Select Distance"/>
<menu_item_check label="Desactivar los límites de la cámara" name="Disable Camera Distance"/>
<menu_item_check label="Foto en Alta Resolución" name="HighResSnapshot"/>
@@ -178,8 +173,8 @@
<menu_item_check label="Ejecutar múltiples temas" name="Run Multiple Threads"/>
<menu_item_call label="Vaciar la caché de grupo" name="ClearGroupCache"/>
<menu_item_check label="Vista subjetiva suavizada" name="Mouse Smoothing"/>
- <menu_item_check label="Mostrar los MI en el chat" name="IMInChat"/>
<menu label="Atajos de teclado" name="Shortcuts">
+ <menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/>
<menu_item_check label="Buscar" name="Search"/>
<menu_item_call label="Recuperar las teclas" name="Release Keys"/>
<menu_item_call label="Interfaz en el tamaño predeterminado" name="Set UI Size to Default"/>
@@ -205,7 +200,7 @@
<menu_item_call label="Pantalla completa" name="Toggle Fullscreen"/>
</menu>
<menu_item_call label="Mostrar las configuraciones del depurador" name="Debug Settings"/>
- <menu_item_check label="Mostrar el menú Desarrollar" name="Debug Mode"/>
+ <menu_item_check label="Mostrar el menú 'Develop'" name="Debug Mode"/>
</menu>
<menu label="Develop" name="Develop">
<menu label="Consoles" name="Consoles">
@@ -219,6 +214,7 @@
<menu_item_call label="Region Info to Debug Console" name="Region Info to Debug Console"/>
<menu_item_check label="Camera" name="Camera"/>
<menu_item_check label="Wind" name="Wind"/>
+ <menu_item_check label="Badge" name="Badge"/>
</menu>
<menu label="Show Info" name="Display Info">
<menu_item_check label="Show Time" name="Show Time"/>
@@ -242,7 +238,7 @@
<menu_item_check label="Frame Test" name="Frame Test"/>
</menu>
<menu label="Rendering" name="Rendering">
- <menu_item_check label="Ejes" name="Axes"/>
+ <menu_item_check label="Axes" name="Axes"/>
<menu_item_check label="Wireframe" name="Wireframe"/>
<menu_item_check label="Global Illumination" name="Global Illumination"/>
<menu_item_check label="Animation Textures" name="Animation Textures"/>
@@ -258,7 +254,7 @@
<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="Baliza con destellos" name="Cheesy Beacon"/>
+ <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>
@@ -281,10 +277,10 @@
<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="Cabeza" name="Head"/>
+ <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="Falda" name="Skirt"/>
+ <menu_item_call label="Skirt" name="Skirt"/>
</menu>
<menu label="Character Tests" name="Character Tests">
<menu_item_call label="Toggle Character Geometry" name="Toggle Character Geometry"/>
@@ -301,8 +297,8 @@
<menu_item_check label="HTTP Textures" name="HTTP Textures"/>
<menu_item_check label="Console Window on next Run" name="Console Window"/>
<menu_item_check label="Show Admin Menu" name="View Admin Options"/>
- <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="Request Admin Status" name="Request Admin Options"/>
+ <menu_item_call label="Leave Admin Status" name="Leave Admin Options"/>
</menu>
<menu label="Admin" name="Admin">
<menu label="Object">
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 08b0ab1720..df18b88832 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -11,18 +11,29 @@
</global>
<template name="okbutton">
<form>
- <button name="OK" text="$yestext"/>
+ <button name="OK_okbutton" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okignore">
+ <form>
+ <button name="OK_okignore" text="$yestext"/>
</form>
</template>
- <template name="okignore"/>
<template name="okcancelbuttons">
<form>
- <button name="Cancel" text="$notext"/>
+ <button name="OK_okcancelbuttons" text="$yestext"/>
+ <button name="Cancel_okcancelbuttons" text="$notext"/>
+ </form>
+ </template>
+ <template name="okcancelignore">
+ <form>
+ <button name="OK_okcancelignore" text="$yestext"/>
+ <button name="Cancel_okcancelignore" text="$notext"/>
</form>
</template>
- <template name="okcancelignore"/>
<template name="okhelpbuttons">
<form>
+ <button name="OK_okhelpbuttons" text="$yestext"/>
<button name="Help" text="$helptext"/>
</form>
</template>
@@ -30,6 +41,7 @@
<form>
<button name="Yes" text="$yestext"/>
<button name="No" text="$notext"/>
+ <button name="Cancel_yesnocancelbuttons" text="$canceltext"/>
</form>
</template>
<notification functor="GenericAcknowledge" label="Mensaje de notificación desconocida" name="MissingAlert">
@@ -92,12 +104,18 @@ Asegúrate de que tu conexión a internet está funcionando adecuadamente.
¿Guardar todos los cambios en la ropa y partes del cuerpo?
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="No guardarlos" yestext="Guardarlos todos"/>
</notification>
+ <notification name="FriendsAndGroupsOnly">
+ Quienes no sean tus amigos no sabrán que has elegido ignorar sus llamadas y mensajes instantáneos.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="GrantModifyRights">
- Al conceder derechos de modificación a otro residente le autoriza a cambiar, borrar, o coger CUALQUIER objeto que usted tenga en el mundo. Sea MUY cuidadoso dando este permiso. ¿Quiere conceder derechos de modificación a [FIRST_NAME] [LAST_NAME]?
+ Al conceder permisos de modificación a otro Residente, le estás permitiendo cambiar, borrar o tomar CUALQUIER objeto que tengas en el mundo. Sé MUY cuidadoso al conceder este permiso.
+¿Quieres conceder permisos de modificación a [FIRST_NAME] [LAST_NAME]?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="GrantModifyRightsMultiple">
- Al conceder derechos de modificación a otros residentes les autoriza a cambiar, borrar, o coger CUALQUIER objeto que usted tenga en el mundo. Sea MUY cuidadoso dando este permiso. ¿Quiere conceder derechos de modificación a los residentes seleccionados?
+ Al conceder permisos de modificación a otro Residente, le estás permitiendo cambiar CUALQUIER objeto que tengas en el mundo. Sé MUY cuidadoso al conceder este permiso.
+¿Quieres conceder permisos de modificación a los Residentes elegidos?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="RevokeModifyRights">
@@ -119,42 +137,49 @@ Asegúrate de que tu conexión a internet está funcionando adecuadamente.
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Ignorar los cambios" yestext="Aplicar los cambios"/>
</notification>
<notification name="MustSpecifyGroupNoticeSubject">
- Para enviar un aviso de grupo debe especificar un asunto.
+ Para enviar un aviso de grupo debes especificar un asunto.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AddGroupOwnerWarning">
- Va a añadir miembros al rol de [ROLE_NAME].
-No podrá removérseles de ese rol, sino que deberán renunciar a él por sí mismos.
-¿Está seguro de que quiere seguir?
- <usetemplate ignoretext="Confirma que vas a añadir un nuevo Propietario al grupo" name="okcancelignore" notext="No" yestext="Sí"/>
+ Vas a añadir miembros al rol de [ROLE_NAME].
+No podrás removérseles de ese rol, sino que deberán renunciar a él por sí mismos.
+¿Estás seguro de que quieres seguir?
+ <usetemplate ignoretext="Confirmar que vas a añadir un nuevo propietario al grupo" name="okcancelignore" notext="No" yestext="Sí"/>
</notification>
<notification name="AssignDangerousActionWarning">
- Va a añadir la capacidad &apos;[ACTION_NAME]&apos; al rol &apos;[ROLE_NAME]&apos;.
+ Vas a añadir la capacidad &apos;[ACTION_NAME]&apos; al rol &apos;[ROLE_NAME]&apos;.
*ATENCIÓN*
- Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- roles con mayores poderes de los que actualmente tienen. Potencialmente, podrían elevarse hasta poderes cercanos a los del propietario. Asegúrese de lo que está haciendo antes de otorgar esta capacidad.
+ Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- roles con mayores poderes de los que actualmente tienen. Potencialmente, podrían elevarse hasta poderes cercanos a los del propietario. Asegúrate de lo que estás haciendo antes de otorgar esta capacidad.
¿Añadir esta capacidad a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="AssignDangerousAbilityWarning">
- Va a añadir la capacidad &apos;[ACTION_NAME]&apos; al rol &apos;[ROLE_NAME]&apos;.
+ Vas a añadir la capacidad &apos;[ACTION_NAME]&apos; al rol &apos;[ROLE_NAME]&apos;.
*ATENCIÓN*
Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- todas las capacidades, elevándose hasta poderes cercanos a los del propietario.
¿Añadir esta capacidad a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
- <notification name="ClickUnimplemented">
- Lo sentimos, aún no está implementado.
+ <notification name="AttachmentDrop">
+ Vas a soltar tu anexado.
+ ¿Estás seguro de que quieres continuar?
+ <usetemplate ignoretext="Confirmar antes de soltar anexados" name="okcancelignore" notext="No" yestext="Sí"/>
</notification>
<notification name="JoinGroupCanAfford">
Entrar a este grupo cuesta [COST] L$.
-¿Quiere hacerlo??
+¿Quieres hacerlo??
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Entrar"/>
+ </notification>
+ <notification name="JoinGroupNoCost">
+ Vas a entrar al grupo [NAME].
+¿Quieres seguir?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Entrar"/>
</notification>
<notification name="JoinGroupCannotAfford">
Entrar a este grupo cuesta [COST] L$.
-No tiene dinero suficiente para entrar.
+No tienes dinero suficiente para entrar.
</notification>
<notification name="CreateGroupCost">
Crear este grupo te costará 100 L$.
@@ -168,11 +193,11 @@ Por favor, invita a miembros en las próximas 48 horas.
</notification>
<notification name="SalePriceRestriction">
El precio de venta tiene que ser mayor de 0 L$ si la venta es a cualquiera.
-Por favor, elija a alguien concreto como comprador si la venta es por 0 L$.
+Por favor, elige a alguien concreto como comprador si la venta es por 0 L$.
</notification>
<notification name="ConfirmLandSaleChange">
Los [LAND_SIZE] m² de terreno seleccionados se van a poner a la venta.
-Su precio de venta será de [SALE_PRICE] L$, y se autorizará la compra sólo a [NAME].
+El precio de venta será de [SALE_PRICE] L$, y se autorizará la compra sólo a [NAME].
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmLandSaleToAnyoneChange">
@@ -183,7 +208,7 @@ El precio de venta será de [SALE_PRICE] L$ y se autoriza la compra a [NAME].
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ReturnObjectsDeededToGroup">
- ¿Está seguro de que quiere devolver todos los objetos de esta parcela que estén compartidos con el grupo &apos;[NAME]&apos; al inventario de su propietario anterior?
+ ¿Estás seguros de que quieres devolver todos los objetos de esta parcela que estén compartidos con el grupo &apos;[NAME]&apos; al inventario de su propietario anterior?
*ATENCIÓN* ¡Esto borrará los objetos no transferibles que se hayan cedido al grupo!
@@ -191,19 +216,19 @@ Objetos: [N]
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ReturnObjectsOwnedByUser">
- ¿Está seguro de que quiere devolver al inventario de &apos;[NAME]&apos; todos los objetos que sean de su propiedad en esta parcela?
+ ¿Estás seguro de que quieres devolver al inventario de &apos;[NAME]&apos; todos los objetos que sean de su propiedad en esta parcela?
Objetos: [N]
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ReturnObjectsOwnedBySelf">
- ¿Está seguro de que quiere devolver a su inventario todos los objetos de los que usted es propietario en esta parcela?
+ ¿Estás seguro de que quieres devolver a su inventario todos los objetos de los que eres propietario en esta parcela?
Objetos: [N]
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ReturnObjectsNotOwnedBySelf">
- ¿Está seguro de que quiere devolver todos los objetos de los que usted NO es propietario en esta parcela al inventario de sus propietarios?
+ ¿Estás seguro de que quieres devolver todos los objetos de los que NO eres propietario en esta parcela al inventario de sus propietarios?
Los objetos transferibles que se hayan transferido al grupo se devolverán a sus propietarios previos.
*ATENCIÓN* ¡Esto borrará los objetos no transferibles que se hayan cedido al grupo!
@@ -212,7 +237,7 @@ Objetos: [N]
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ReturnObjectsNotOwnedByUser">
- ¿Está seguro de que quiere devolver todos los objetos de esta parcela que NO sean propiedad de [NAME] al inventario de su propietario?
+ ¿Estás seguro de que quieres devolver todos los objetos de esta parcela que NO sean propiedad de [NAME] al inventario de su propietario?
Los objetos transferibles que se hayan transferido al grupo se devolverán a sus propietarios previos.
*ATENCIÓN* ¡Esto borrará los objetos no transferibles que se hayan cedido al grupo!
@@ -221,11 +246,11 @@ Objetos: [N]
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ReturnAllTopObjects">
- ¿Está seguro de que quiere devolver al inventario de su propietario todos los objetos de la lista?
+ ¿Estás seguro de que quieres devolver al inventario de su propietario todos los objetos de la lista?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="DisableAllTopObjects">
- ¿Está seguro de que quiere desactivar todos los objetos de esta región?
+ ¿Estás seguro de que quieres desactivar todos los objetos de esta región?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ReturnObjectsNotOwnedByGroup">
@@ -247,13 +272,13 @@ Para colocar los media en una sola cara, marca la opción Elegir la cara y pulsa
</notification>
<notification name="MustBeInParcel">
Para configurar el Punto de llegada de la parcela,
-debe estar usted dentro de ella.
+debes estar dentro de ella.
</notification>
<notification name="PromptRecipientEmail">
- Por favor, escriba una dirección de correo electrónica válida para el/los receptor/es.
+ Por favor, escribe una dirección de correo electrónica válida para el/los receptor/es.
</notification>
<notification name="PromptSelfEmail">
- Por favor, escriba su dirección de correo electrónico.
+ Por favor, escribe tu dirección de correo electrónico.
</notification>
<notification name="PromptMissingSubjMsg">
¿Foto por correo electrónico con el asunto o el mensaje por defecto?
@@ -272,27 +297,27 @@ debe estar usted dentro de ella.
Hubo un problema al subir la captura de pantalla del informe por la siguiente razón: [REASON]
</notification>
<notification name="MustAgreeToLogIn">
- Debe estar de acuerdo con las Condiciones del Servicio para continuar el inicio de sesión en [SECOND_LIFE].
+ Debes estar de acuerdo con las Condiciones del Servicio para continuar el inicio de sesión en [SECOND_LIFE].
</notification>
<notification name="CouldNotPutOnOutfit">
- No se ha podido ponerle el vestuario.
+ No se ha podido poner el vestuario.
La carpeta del vestuario contiene partes del cuerpo, u objetos a anexar o que no son ropa.
</notification>
<notification name="CannotWearTrash">
- No puede vestirse ropas o partes del cuerpo que están en la Papelera
+ No puede vestirte ropas o partes del cuerpo que estén en la Papelera
</notification>
<notification name="MaxAttachmentsOnOutfit">
No se puede anexar el objeto.
Se ha superado el límite máximo de [MAX_ATTACHMENTS] objetos. Por favor, quítate alguno.
</notification>
<notification name="CannotWearInfoNotComplete">
- No puede vestirse este ítem porque aún no se ha cargado. Por favor, reinténtelo en un minuto.
+ No puedes vestirte este ítem porque aún no se ha cargado. Por favor, inténtalo de nuevo en un minuto.
</notification>
<notification name="MustHaveAccountToLogIn">
¡Vaya! Algo se quedó en blanco.
-Debe escribir tanto el nombre como el apellido de su avatar, los dos.
+Debes escribir tanto el nombre como el apellido de tu avatar, los dos.
-Necesita una cuenta para entrar en [SECOND_LIFE]. ¿Quiere crear una ahora?
+Necesitas una cuenta para entrar en [SECOND_LIFE]. ¿Quieres crear una ahora?
<url name="url">
https://join.secondlife.com/index.php?lang=es-ES
</url>
@@ -319,6 +344,10 @@ No se reembolsan las cuotas pagadas.
¿Guardar los cambios en el clasificado [NAME]?
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="No guardar" yestext="Guardar"/>
</notification>
+ <notification name="ClassifiedInsufficientFunds">
+ Dinero insuficiente para crear un clasificado.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="DeleteAvatarPick">
¿Borrar el destacado [PICK]?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
@@ -331,18 +360,10 @@ No se reembolsan las cuotas pagadas.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="SelectProposalToView">
- Por favor, seleccione qué propuesta quiere ver.
+ Por favor, selecciona qué propuesta quieres ver.
</notification>
<notification name="SelectHistoryItemToView">
- Por favor, seleccione un ítem del historial para verlo.
- </notification>
- <notification name="ResetShowNextTimeDialogs">
- ¿Quiere reactivar todas estas ventanas emergentes, incluso las que marcó previamente como &apos;No mostrarme más esto&apos;?
- <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
- </notification>
- <notification name="SkipShowNextTimeDialogs">
- ¿Quiere activar todas las ventanas emergentes que puedan habilitarse?
- <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ Por favor, selecciona un ítem del historial para verlo.
</notification>
<notification name="CacheWillClear">
La caché se limpiará cuando reinices [APP_NAME].
@@ -355,7 +376,7 @@ Nota: esto vaciará la caché.
La configuración del puerto tendrá efecto cuando reinicies [APP_NAME].
</notification>
<notification name="ChangeSkin">
- La nueva apariencia la verás cuando reinicies [APP_NAME].
+ Verás la nueva apariencia cuando reinicies [APP_NAME].
</notification>
<notification name="GoToAuctionPage">
¿Ir a la página web de [SECOND_LIFE] para ver los detalles de la subasta
@@ -369,40 +390,40 @@ o hacer una puja?
<notification name="GestureSaveFailedTooManySteps">
Fallo al guardar el gesto.
Este gesto tiene demasiados pasos.
-Intente quitarle algunos, y vuelva a guardarlo.
+Intenta quitarle algunos, y vuelve a guardarlo.
</notification>
<notification name="GestureSaveFailedTryAgain">
- Fallo al guardar el gesto. Por favor, reinténtelo en un minuto.
+ Fallo al guardar el gesto. Por favor, vuelve a intentarlo en un minuto.
</notification>
<notification name="GestureSaveFailedObjectNotFound">
No se ha podido guardar el gesto porque no se pudo encontrar el objeto o el objeto asociado.
El objeto debe de haber sido borrado o estar fuera de rango (&apos;out of range&apos;).
</notification>
<notification name="GestureSaveFailedReason">
- Al guardar un gesto, hubo un problema por: [REASON]. Por favor, reintente guardarlo más tarde.
+ Al guardar un gesto, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde.
</notification>
<notification name="SaveNotecardFailObjectNotFound">
No se ha podido guardar la nota porque no se pudo encontrar el objeto o el objeto asociado del inventario.
El objeto debe de haber sido borrado o estar fuera de rango (&apos;out of range&apos;).
</notification>
<notification name="SaveNotecardFailReason">
- Al guardar una nota, hubo un problema por: [REASON]. Por favor, reintente guardarla más tarde.
+ Al guardar una nota, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarla más tarde.
</notification>
<notification name="ScriptCannotUndo">
- No se han podido deshacer todos los cambios en su versión del script.
-¿Quiere cargar la última versión guardada en el servidor?
-(**Cuidado** No podrá deshacer esta operación).
+ No se han podido deshacer todos los cambios en tu versión del script.
+¿Quieres cargar la última versión guardada en el servidor?
+(**Cuidado** No podrás deshacer esta operación).
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="SaveScriptFailReason">
- Al guardar un script, hubo un problema por: [REASON]. Por favor, reintente guardarlo más tarde.
+ Al guardar un script, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde.
</notification>
<notification name="SaveScriptFailObjectNotFound">
No se ha podido guardar el script porque no se pudo encontrar el objeto que incluye.
El objeto debe de haber sido borrado o estar fuera de rango (&apos;out of range&apos;)..
</notification>
<notification name="SaveBytecodeFailReason">
- Al guardar un script compilado, hubo un problema por: [REASON]. Por favor, reintente guardarlo más tarde..
+ Al guardar un script compilado, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde..
</notification>
<notification name="StartRegionEmpty">
Perdon, no está definida tu Posición inicial.
@@ -420,18 +441,17 @@ El objeto debe de haber sido borrado o estar fuera de rango (&apos;out of range&
No se ha podido escribir el archivo [[FILE]]
</notification>
<notification name="UnsupportedHardware">
- Atención: su sistema no tiene los requerimientos mínimos que necesita [APP_NAME]. Si sigue usando [APP_NAME], tendrá un funcionamiento pobre. Desafortunadamente, no podemos ofrecer soporte técnico para configuraciones inadecuadas del sistema.
+ Debes saber que tu ordenador no cumple los requisitos mínimos para la utilización de [APP_NAME]. Puede que experimentes un rendimiento muy bajo. Desafortunadamente, [SUPPORT_SITE] no puede dar asistencia técnica a sistemas con una configuración no admitida.
-MINSPECS
-Para más información, ¿quiere visitar [_URL]?
+¿Ir a [_URL] para más información?
<url name="url" option="0">
http://secondlife.com/support/sysreqs.php?lang=es
</url>
<usetemplate ignoretext="El hardware de mi ordenador no está admitido" name="okcancelignore" notext="No" yestext="Sí"/>
</notification>
<notification name="UnknownGPU">
- Tu sistema tiene una tarjeta gráfica desconocida, hoy por hoy, para [APP_NAME].
-Suele suceder con hardware nuevo aún no probado con [APP_NAME]. Lo más probable es que [APP_NAME] se ejecute correctamente, pero debes ajustar tus preferencias gráficas a niveles más adecuados.
+ Tu sistema usa una tarjeta gráfica que [APP_NAME] no reconoce.
+Suele suceder con hardware nuevo que todavía no ha sido probado con [APP_NAME]. Probablemente todo irá bien, pero deberás ajustar tus configuraciones gráficas.
(Yo &gt; Preferencias &gt; Gráficos).
<form name="form">
<ignore name="ignore" text="No se ha podido identificar mi tarjeta gráfica"/>
@@ -447,9 +467,9 @@ La calidad gráfica puede ajustarse en Preferencias &gt; Gráficos.
En la región [REGION] no se permite modificar el terreno.
</notification>
<notification name="CannotCopyWarning">
- No tiene permiso para copiar este ítem.
-Si lo da, lo perderá de su inventario.
-¿Realmente quiere darlo?
+ No tienes permiso para copiar este ítem.
+Si lo das, lo perderás de tu inventario.
+¿Realmente quieres darlo?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="CannotGiveItem">
@@ -459,19 +479,19 @@ Si lo da, lo perderá de su inventario.
Transacción cancelada.
</notification>
<notification name="TooManyItems">
- En una única transferencia del inventario, no puede dar más de 42 ítems.
+ No puedes dar más de 42 ítems en una única transferencia del inventario.
</notification>
<notification name="NoItems">
- No tiene permiso para transferir el ítem seleccionado.
+ No tienes permiso para transferir el ítem seleccionado.
</notification>
<notification name="CannotCopyCountItems">
- No tiene permiso para copiar [COUNT] de los
-ítems seleccionados. Si los da, los perderá de su inventario.
-¿Realmente quiere darlos?
+ No tienes permiso para copiar [COUNT] de los
+ítems seleccionados. Si los das, los perderás de tu inventario.
+¿Realmente quieres darlos?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="CannotGiveCategory">
- No tiene permiso para transferir
+ No tienes permiso para transferir
la carpeta seleccionada.
</notification>
<notification name="FreezeAvatar">
@@ -485,15 +505,15 @@ Temporalmente, será incapaz de moverse, usar el chat, o interactuar con el mund
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Descongelarle" yestext="Congelarle"/>
</notification>
<notification name="EjectAvatarFullname">
- ¿Expulsar a [AVATAR_NAME] de su terreno?
+ ¿Expulsar a [AVATAR_NAME] de tu terreno?
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Expulsar y Prohibir el acceso" yestext="Expulsar"/>
</notification>
<notification name="EjectAvatarNoBan">
- ¿Expulsar a este avatar de su terreno?
+ ¿Expulsar a este avatar de tu terreno?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar"/>
</notification>
<notification name="EjectAvatarFullnameNoBan">
- ¿Expulsar a [AVATAR_NAME] de su terreno?
+ ¿Expulsar a [AVATAR_NAME] de tu terreno?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar"/>
</notification>
<notification name="EjectAvatarFromGroup">
@@ -504,7 +524,7 @@ Temporalmente, será incapaz de moverse, usar el chat, o interactuar con el mund
</notification>
<notification name="AcquireErrorObjectSpan">
ERROR &apos;ACQUIRE&apos;: Los objetos están en más de una región.
-Por favor, mueva todos los objetos a adquirir a la
+Por favor, mueve todos los objetos a adquirir a la
misma región.
</notification>
<notification name="PromptGoToCurrencyPage">
@@ -518,27 +538,27 @@ misma región.
</notification>
<notification name="UnableToLinkObjects">
No se pudo enlazar estos [COUNT] objetos.
-Puede enlazar [MAX] objetos como máximo.
+Puedes enlazar [MAX] objetos como máximo.
</notification>
<notification name="CannotLinkIncompleteSet">
- Sólo puede enlazar objetos completos (no sus partes), y debe
+ Sólo puedes enlazar objetos completos (no sus partes), y debes
seleccionar más de uno.
</notification>
<notification name="CannotLinkModify">
- Imposible enlazarlos, porque no tiene permiso para modificar
+ Imposible enlazarlos, porque no tienes permiso para modificar
todos los objetos.
-Por favor, asegúrese de que no hay ninguno bloqueado, y de que es el propietario de todos.
+Por favor, asegúrate de que no hay ninguno bloqueado, y de que eres el propietario de todos.
</notification>
<notification name="CannotLinkDifferentOwners">
Imposible enlazarlos, porque hay objetos de distintos propietarios.
-Por favor, asegúrese de que es propietario de todos los objetos seleccionados.
+Por favor, asegúrate de que eres el propietario de todos los objetos seleccionados.
</notification>
<notification name="NoFileExtension">
No hay extensión de archivo en: &apos;[FILE]&apos;
-Por favor, asegúrese de que la extensión del archivo es correcta.
+Por favor, asegúrate de que la extensión del archivo es correcta.
</notification>
<notification name="InvalidFileExtension">
Extensión inválida de archivo: [EXTENSION]
@@ -546,7 +566,7 @@ Podría ser [VALIDS]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CannotUploadSoundFile">
- Ni se pudo abrir el archivo de sonido que se ha subido para leer:
+ No se pudo abrir el archivo de sonido que has subido para leer:
[FILE]
</notification>
<notification name="SoundFileNotRIFF">
@@ -605,13 +625,17 @@ Podría ser [VALIDS]
</notification>
<notification name="CannotUploadReason">
No se ha podido subir [FILE] por la siguiente razón: [REASON]
-Por favor, inténtelo más tarde.
+Por favor, inténtalo más tarde.
</notification>
<notification name="LandmarkCreated">
Se ha añadido &quot;[LANDMARK_NAME]&quot; a tu carpeta [FOLDER_NAME].
</notification>
+ <notification name="LandmarkAlreadyExists">
+ Ya tienes un hito de esta localización.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="CannotCreateLandmarkNotOwner">
- No puede crear un hito aquí porque el propietario del terreno no lo permite.
+ No puedes crear un hito aquí porque el propietario del terreno no lo permite.
</notification>
<notification name="CannotRecompileSelectObjectsNoScripts">
No se pudo &apos;recompilar&apos;.
@@ -643,23 +667,23 @@ Seleccione objetos con scripts.
<notification name="CannotSetRunningNotSelectObjectsNoScripts">
No se puede configurar ningún script como &apos;no ejecutándose&apos;.
-Seleccione objetos con scripts.
+Selecciona objetos con scripts.
</notification>
<notification name="NoFrontmostFloater">
- No hay nada a guardar.
+ No hay nada que guardar.
</notification>
<notification name="SeachFilteredOnShortWords">
- Se ha modificado su búsqueda,
+ Se ha modificado tu búsqueda,
eliminando las palabras demasiado cortas.
Buscando: [FINALQUERY]
</notification>
<notification name="SeachFilteredOnShortWordsEmpty">
- Los términos de su búsqueda son muy cortos,
+ Los términos de tu búsqueda son muy cortos,
por lo que no se ha hecho la búsqueda.
</notification>
<notification name="CouldNotTeleportReason">
- No se ha podido teleportar.
+ Fallo en el teleporte.
[REASON]
</notification>
<notification name="invalid_tport">
@@ -671,32 +695,32 @@ Si sigues recibiendo este mensaje, por favor, acude al [SUPPORT_SITE].
Si sigues recibiendo este mensaje, por favor, acude al [SUPPORT_SITE].
</notification>
<notification name="blocked_tport">
- Lo sentimos, en estos momentos los teleportes están bloqueados. Vuelva a intentarlo en un momento. Si sigue sin poder teleportarse, desconéctese y vuelva a iniciar sesión para solucionar el problema.
+ Lo sentimos, en estos momentos los teleportes están bloqueados. Vuelve a intentarlo en un momento. Si sigues sin poder teleportarte, desconéctate y vuelve a iniciar sesión para solucionar el problema.
</notification>
<notification name="nolandmark_tport">
Lo sentimos, pero el sistema no ha podido localizar el destino de este hito.
</notification>
<notification name="timeout_tport">
Lo sentimos, pero el sistema no ha podido completar el teleporte.
-Vuelva a intentarlo en un momento.
+Vuelve a intentarlo en un momento.
</notification>
<notification name="noaccess_tport">
- Lo sentimos, pero usted no tiene acceso al destino de este teleporte.
+ Lo sentimos, pero no tienes acceso al destino de este teleporte.
</notification>
<notification name="missing_attach_tport">
- Aún no han llegado sus objetos anexados. Espere unos segundos más o desconéctese y vuelva a iniciar sesión antes de teleportarse.
+ Aún no han llegado tus objetos anexados. Espera unos segundos más o desconéctate y vuelve a iniciar sesión antes de teleportarte.
</notification>
<notification name="too_many_uploads_tport">
- La cola de espera en esta región está actualmente obstruida, por lo que su petición de teleporte no se atenderá en un tiempo prudencial. Por favor, vuelva a intentarlo en unos minutos o vaya a una zona menos ocupada.
+ La cola de espera en esta región está actualmente obstruida, por lo que tu petición de teleporte no se atenderá en un tiempo prudencial. Por favor, vuelve a intentarlo en unos minutos o ve a una zona menos ocupada.
</notification>
<notification name="expired_tport">
- Lo sentimos, pero el sistema no ha podido atender a su petición de teleporte en un tiempo prudencial. Por favor, vuelva a intentarlo en unos pocos minutos.
+ Lo sentimos, pero el sistema no ha podido atender a tu petición de teleporte en un tiempo prudencial. Por favor, vuelve a intentarlo en unos pocos minutos.
</notification>
<notification name="expired_region_handoff">
- Lo sentimos, pero el sistema no ha podido completar su paso a otra región en un tiempo prudencial. Por favor, vuelva a intentarlo en unos pocos minutos.
+ Lo sentimos, pero el sistema no ha podido completar tu paso a otra región en un tiempo prudencial. Por favor, vuelve a intentarlo en unos pocos minutos.
</notification>
<notification name="no_host">
- Ha sido imposible encontrar el destino del teleporte: o está desactivado temporalmente o ya no existe. Por favor, vuelva a intentarlo en unos pocos minutos.
+ Ha sido imposible encontrar el destino del teleporte: o está desactivado temporalmente o ya no existe. Por favor, vuelve a intentarlo en unos pocos minutos.
</notification>
<notification name="no_inventory_host">
En estos momentos no está disponible el sistema del inventario.
@@ -706,10 +730,11 @@ Vuelva a intentarlo en un momento.
no se ha seleccionado una parcela.
</notification>
<notification name="CannotSetLandOwnerMultipleRegions">
- No se ha podido obtener la propiedad del terreno porque la selección se extiende por varias regiones. Por favor, seleccione un área más pequeña y reinténtelo.
+ No se ha podido obtener la propiedad del terreno porque la selección se extiende por varias regiones. Por favor, selecciona un área más pequeña y vuelve a intentarlo.
</notification>
<notification name="ForceOwnerAuctionWarning">
- Está parcela está siendo subastada. Forzar su propiedad cancelará la subasta y, probablemente, disguste a algunos residentes que ya hayan empezado a pujar. ¿Forzar la propiedad?
+ Esta parcela está subastándose. Forzar su propiedad cancelará la subasta y, potencialmente, puede disgustar a algunos residentes si la puja ya ha empezado.
+¿Forzar la propiedad?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="CannotContentifyNothingSelected">
@@ -753,23 +778,15 @@ Ha sido imposible encontrar en qué región está.
</notification>
<notification name="CannotDeedLandMultipleSelected">
No se ha podido transferir el terreno:
-ha seleccionado varias parcelas.
-
-Inténtelo seleccionando sólo una.
- </notification>
- <notification name="ParcelCanPlayMedia">
- Esta localización puede ejecutar media en streaming.
-Los media en streaming necesitan una conexión a internet rápida.
+has seleccionado varias parcelas.
-Si hay media, ¿reproducirlos en streaming?
-(Puedes cambiar más adelante esta opción en Preferencias &gt; Privacidad).
- <usetemplate name="okcancelbuttons" notext="Desactivar" yestext="Ejecutar los media"/>
+Inténtalo seleccionando sólo una.
</notification>
<notification name="CannotDeedLandWaitingForServer">
No se ha podido transferir el terreno:
esperando que el servidor informe acerca de la propiedad.
-Por favor, vuelva a intentarlo.
+Por favor, vuelve a intentarlo.
</notification>
<notification name="CannotDeedLandNoTransfer">
No se ha podido transferir el terreno:
@@ -779,18 +796,18 @@ En la región [REGION] no se permite transferir terrenos.
No se ha podido abandonar el terreno:
esperando que el servidor actualice la información de la parcela.
-Vuelva a intentarlo en unos segundos.
+Vuelve a intentarlo en unos segundos.
</notification>
<notification name="CannotReleaseLandSelected">
No se ha podido abandonar el terreno:
no es propietario de todas las parcelas seleccionadas.
-Por favor, seleccione una sola parcela.
+Por favor, selecciona una sola parcela.
</notification>
<notification name="CannotReleaseLandDontOwn">
No se ha podido abandonar el terreno:
-no tiene permisos sobre esta parcela.
-Las parcelas de su propiedad se muestran en verde.
+no tienes permisos sobre esta parcela.
+Las parcelas de tu propiedad se muestran en verde.
</notification>
<notification name="CannotReleaseLandRegionNotFound">
No se ha podido abandonar el terreno:
@@ -802,13 +819,13 @@ En la región [REGION] no se permite transferir terrenos.
</notification>
<notification name="CannotReleaseLandPartialSelection">
No se ha podido abandonar el terreno:
-debe seleccionar toda la parcela.
+debes seleccionar toda la parcela.
-Seleccione una parcela completa, o divídala primero.
+Selecciona una parcela completa, o divídela primero.
</notification>
<notification name="ReleaseLandWarning">
- Va a abandonar [AREA] m² de terreno.
-Al hacerlo, la quitará de entre sus posesiones de terreno, pero no recibirá ningún L$.
+ Vas a abandonar [AREA] m² de terreno.
+Al hacerlo, la quitarás de entre tus posesiones de terreno, pero no recibirás ningún L$.
¿Abandonar este terreno?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
@@ -816,13 +833,13 @@ Al hacerlo, la quitará de entre sus posesiones de terreno, pero no recibirá ni
<notification name="CannotDivideLandNothingSelected">
No se ha podido dividir el terreno:
-No ha seleccionado ninguna parcela.
+No has seleccionado ninguna parcela.
</notification>
<notification name="CannotDivideLandPartialSelection">
No se ha podido dividir el terreno:
-Ha seleccionado una parcela entera.
-Inténtelo seleccionando una parte.
+Has seleccionado una parcela entera.
+Inténtalo seleccionando una parte.
</notification>
<notification name="LandDivideWarning">
Dividir este terreno lo separará en dos parcelas, cada una de las cuales tendrá su propia configuración. Tras esta operación, algunas configuraciones volverán a las existentes por defecto.
@@ -844,29 +861,29 @@ No hay parcelas seleccionadas.
</notification>
<notification name="CannotJoinLandEntireParcelSelected">
No se ha podido unir el terreno:
-Sólo ha seleccionado una parcela.
+Sólo has seleccionado una parcela.
-Seleccione terreno que incluya algo de ambas parcelas.
+Selecciona terreno que incluya algo de ambas parcelas.
</notification>
<notification name="CannotJoinLandSelection">
No se ha podido unir el terreno:
-Debe seleccionar más de una parcela.
+Debes seleccionar más de una parcela.
-Seleccione terreno que incluya algo de ambas parcelas.
+Selecciona terreno que incluya algo de ambas parcelas.
</notification>
<notification name="JoinLandWarning">
- Al unir este terreno creará una parcela más grande formada por todas aquellas que tengan parte en el rectángulo seleccionado.
-Deberá reconfigurar el nombre y las opciones de la nueva parcela.
+ Al unir este terreno crearás una parcela más grande formada por todas aquellas que tengan parte en el rectángulo seleccionado.
+Deberás reconfigurar el nombre y las opciones de la nueva parcela.
¿Unir el terreno?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmNotecardSave">
- Esta nota debe guardarse antes de que se la pueda copiar o ver. ¿Guardar la nota?
+ Esta nota debe guardarse antes de que puedas copiarla o verla. ¿Guardar la nota?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmItemCopy">
- ¿Copiar este ítem a su inventario?
+ ¿Copiar este ítem a tu inventario?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Copiar"/>
</notification>
<notification name="ResolutionSwitchFail">
@@ -879,32 +896,31 @@ Deberá reconfigurar el nombre y las opciones de la nueva parcela.
Error, árboles no definidos: [SPECIES]
</notification>
<notification name="CannotSaveWearableOutOfSpace">
- No se ha podido guardar el archivo &apos;[NAME]&apos;. Tendrá que liberar algo de espacio en su ordenador y guardarlo de nuevo.
+ No se ha podido guardar el archivo &apos;[NAME]&apos;. Tendrás que liberar algo de espacio en tu ordenador y guardarlo de nuevo.
</notification>
<notification name="CannotSaveToAssetStore">
No se ha podido guardar [NAME] en la base central de almacenamiento.
Generalmente, esto es un fallo pasajero. Por favor, personaliza y guarda el ítem de aquí a unos minutos.
</notification>
<notification name="YouHaveBeenLoggedOut">
- Se te ha cerrado la sesión en [SECOND_LIFE]:
+ Vaya, se ha cerrado tu sesión en [SECOND_LIFE]
[MESSAGE]
-Aún puedes ver el chat y los MI existentes pulsando &apos;Ver MI y Chat&apos;. Si no, pulsa &apos;Salir&apos; para dejar ahora [SECOND_LIFE].
<usetemplate name="okcancelbuttons" notext="Salir" yestext="Ver MI y Chat"/>
</notification>
<notification name="OnlyOfficerCanBuyLand">
No se ha podido comprar terreno para el grupo:
-usted no tiene el permiso de comprar terreno para el grupo que tiene activado actualmente.
+no tienes el permiso de comprar terreno para el grupo que tienes activado actualmente.
</notification>
<notification label="Añadir como amigo" name="AddFriend">
Los amigos pueden darse permiso para localizarse en el mapa y para saber si el otro está conectado.
-¿Ofrecer a [NAME] que sea su amigo?
+¿Ofrecer a [NAME] que sea tu amigo?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification label="Añadir como amigo" name="AddFriendWithMessage">
Los amigos pueden darse permiso para localizarse en el mapa y para saber si el otro está conectado.
-¿Ofrecer a [NAME] que sea su amigo?
+¿Ofrecer a [NAME] que sea tu amigo?
<form name="form">
<input name="message">
¿Quieres formar parte de mis amigos?
@@ -914,112 +930,112 @@ usted no tiene el permiso de comprar terreno para el grupo que tiene activado ac
</form>
</notification>
<notification name="RemoveFromFriends">
- ¿Quiere quitar a [FIRST_NAME] [LAST_NAME] de su lista de amigos?
+ ¿Quieres quitar a [FIRST_NAME] [LAST_NAME] de tu lista de amigos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="RemoveMultipleFromFriends">
- ¿Quiere quitar a varios amigos de su lista de amigos?
+ ¿Quieres quitar a varios amigos de tu lista de amigos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="GodDeleteAllScriptedPublicObjectsByUser">
- ¿Está seguro de que quiere borrar todos los objetos con script que sean propiedad de
+ ¿Estás seguro de que quieres borrar todos los objetos con script que sean propiedad de
** [AVATAR_NAME] **
en todos los otros terrenos de este sim?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="GodDeleteAllScriptedObjectsByUser">
- ¿Está seguro de que quiere BORRAR TODOS los objetos con script que sean propiedad de
+ ¿Estás seguro de que quieres BORRAR TODOS los objetos con script que sean propiedad de
** [AVATAR_NAME] **
en TODO EL TERRENO de este sim?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="GodDeleteAllObjectsByUser">
- ¿Está seguro de que quiere BORRAR TODOS los objetos (con script o no) que sean propiedad de
+ ¿Estás seguro de que quieres BORRAR TODOS los objetos (con script o no) que sean propiedad de
** [AVATAR_NAME] **
en TODO EL TERRENO de este sim?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="BlankClassifiedName">
- Debe especificar un nombre para su clasificado.
+ Debes especificar un nombre para tu clasificado.
</notification>
<notification name="MinClassifiedPrice">
El pago para aparecer en la lista debe ser de, al menos, [MIN_PRICE] L$.
-Por favor, elija un pago mayor.
+Por favor, elige un pago mayor.
</notification>
<notification name="ConfirmObjectDeleteLock">
- Al menos uno de los ítems que ha seleccionado está bloqueado.
+ Al menos uno de los ítems que has seleccionado está bloqueado.
-¿Está seguro de que quiere borrar estos ítems?
+¿Estás seguro de que quieres borrar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoCopy">
- Al menos uno de los ítems que ha seleccionado no es copiable.
+ Al menos uno de los ítems que has seleccionado no es copiable.
-¿Está seguro de que quiere borrar estos ítems?
+¿Estás seguro de que quieres borrar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoOwn">
- No es el propietario de, al menos, uno de los ítems que ha seleccionado.
+ No eres el propietario de, al menos, uno de los ítems que has seleccionado.
-¿Está seguro de que quiere borrar estos ítems?
+¿Estás seguro de que quieres borrar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopy">
Al menos un objeto está bloqueado.
Al menos un objeto no es copiable.
-¿Está seguro de que quiere borrar estos ítems?
+¿Estás seguro de que quieres borrar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoOwn">
Al menos un objeto está bloqueado.
-No es propietario de, al menos, un objeto.
+No eres propietario de, al menos, un objeto.
-¿Está seguro de que quiere borrar estos ítems?
+¿Estás seguro de que quieres borrar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteNoCopyNoOwn">
Al menos un objeto no es copiable.
-No es propietario de, al menos, un objeto.
+No eres propietario de, al menos, un objeto.
-¿Está seguro de que quiere borrar estos ítems?
+¿Estás seguro de que quieres borrar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
Al menos un objeto está bloqueado.
Al menos un objeto no es copiable.
-No es propietario de, al menos, un objeto.
+No eres propietario de, al menos, un objeto.
-¿Está seguro de que quiere borrar estos ítems?
+¿Estás seguro de que quieres borrar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeLock">
Al menos un objeto está bloqueado.
-¿Está seguro de que quiere tomar estos ítems?
+¿Estás seguro de que quieres tomar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeNoOwn">
- No es el propietario de todos los objetos que está tomando.
-Si sigue, se aplicarán los permisos marcados para el próximo propietario, y es posible que se restrinja su posibilidad de hacer modificaciones o copias.
+ No eres el propietario de todos los objetos que estás tomando.
+Si sigues, se aplicarán los permisos marcados para el próximo propietario, y es posible que se restrinja tu posibilidad de hacer modificaciones o copias.
-¿Está seguro de que quiere tomar estos ítems?
+¿Estás seguro de que quieres tomar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmObjectTakeLockNoOwn">
Al menos un objeto está bloqueado.
-No es el propietario de todos los objetos que está tomando.
-Si sigue, se aplicarán los permisos marcados para el próximo propietario, y es posible que se restrinja su posibilidad de hacer modificaciones o copias
-Con todo, puede tomar lo actualmente seleccionado.
+No eres el propietario de todos los objetos que estás tomando.
+Si sigues, se aplicarán los permisos marcados para el próximo propietario, y es posible que se restrinja tu posibilidad de hacer modificaciones o copias.
+Con todo, puedes tomar lo actualmente seleccionado.
-¿Está seguro de que quiere tomar estos ítems?
+¿Estás seguro de que quieres tomar estos ítems?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="CantBuyLandAcrossMultipleRegions">
No se ha podido hacer la compra porque el terreno seleccionado se extiende por varias regiones.
-Por favor, seleccione un área más pequeña y reinténtelo.
+Por favor, selecciona un área más pequeña y vuelve a intentarlo.
</notification>
<notification name="DeedLandToGroup">
Al transferir esta parcela, se requerirá al grupo que tenga y mantenga el crédito suficiente para uso de terreno.
@@ -1040,13 +1056,14 @@ Si se vende una parcela transferida, el precio de venta se dividirá a partes ig
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="DisplaySetToSafe">
- Las configuraciones que se muestran se han fijado en los niveles guardados, pues usted especificó la opción de guardarlos.
+ Las configuraciones que se muestran se han fijado en los niveles guardados, pues especificaste la opción de guardarlos.
</notification>
<notification name="DisplaySetToRecommended">
- Las configuraciones que se muestran se han fijado en los niveles recomendados para la configuración de su sistema.
+ Las configuraciones que se muestran se han fijado en los niveles recomendados para la configuración de tu sistema.
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AvatarMovedDesired">
La localización que querías no está disponible en estos momentos.
@@ -1089,16 +1106,16 @@ Puedes revisar tu conexión a internet y volver a intentarlo en unos minutos, pu
</form>
</notification>
<notification name="WelcomeChooseSex">
- Su personaje aparecerá en un momento.
+ Tu personaje aparecerá en un momento.
-Para caminar, use las teclas del cursor.
-En cualquier momento, puede pulsar la tecla F1 para conseguir ayuda o para aprender más acerca de [SECOND_LIFE].
-Por favor, elija el avatar masculino o femenino.
-Puede cambiar más adelante su elección.
+Para caminar, usa las teclas del cursor.
+En cualquier momento, puedes pulsar la tecla F1 para conseguir ayuda o para aprender más acerca de [SECOND_LIFE].
+Por favor, elige el avatar masculino o femenino.
+Puedes cambiar más adelante tu elección.
<usetemplate name="okcancelbuttons" notext="Mujer" yestext="Varón"/>
</notification>
<notification name="NotEnoughCurrency">
- [NAME] cuesta [PRICE] L$. No tiene suficientes L$ para hacer eso.
+ [NAME] cuesta [PRICE] L$. No tienes suficientes L$ para hacer eso.
</notification>
<notification name="GrantedModifyRights">
[NAME] te ha dado permiso para modificar sus objetos.
@@ -1107,25 +1124,25 @@ Puede cambiar más adelante su elección.
Ha sido revocado tu privilegio de modificar los objetos de [NAME]
</notification>
<notification name="FlushMapVisibilityCaches">
- Esto limpiará las caches del mapa en esta región.
+ Esto limpiará las cachés del mapa en esta región.
Esto sólo es realmente útil para cuestiones de depuración (&apos;debugging&apos;).
-(A efectos prácticos, espere 5 minutos, y el mapa de cualquiera se actualizará después de que reinicie sesión).
+(A efectos prácticos, espera 5 minutos, y el mapa de cualquiera se actualizará después de que reinicies sesión).
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="BuyOneObjectOnly">
- No se puede comprar más de un objeto a la vez. Por favor, seleccione sólo un objeto y vuelva a intentarlo.
+ No se puede comprar más de un objeto a la vez. Por favor, selecciona sólo un objeto y vuelve a intentarlo.
</notification>
<notification name="OnlyCopyContentsOfSingleItem">
No se puede copiar a la vez los contenidos de más de un objeto.
-Por favor, selección sólo uno y reinténtelo.
+Por favor, selecciona sólo uno y vuelve a intentarlo.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="KickUsersFromRegion">
- ¿Teleportar a su base a todos los residentes en esta región?
+ ¿Teleportar a tu base a todos los residentes en esta región?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="EstateObjectReturn">
- ¿Está seguro de que quiere devolver los objetos propiedad de
+ ¿Estás seguro de que quieres devolver los objetos propiedad de
[USER_NAME] ?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
@@ -1133,50 +1150,50 @@ Por favor, selección sólo uno y reinténtelo.
No se han podido configurar las texturas de la región:
La textura del terreno [TEXTURE_NUM] tiene una profundidad de bites inválida: [TEXTURE_BIT_DEPTH].
-Cambie la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pulse de nuevo &apos;Aplicar&apos; .
+Cambia la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pulsa de nuevo &apos;Aplicar&apos; .
</notification>
<notification name="InvalidTerrainSize">
No se han podido configurar las texturas de la región:
La textura del terreno [TEXTURE_NUM] es demasiado grande: [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y].
-Cambie la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pulse de nuevo &apos;Aplicar&apos; .
+Cambia la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pulsa de nuevo &apos;Aplicar&apos; .
</notification>
<notification name="RawUploadStarted">
- Ha empezado la subida. Dependiendo de la velocidad de su conexión, llevará unos dos minutos.
+ Ha empezado la subida. Dependiendo de la velocidad de tu conexión, llevará unos dos minutos.
</notification>
<notification name="ConfirmBakeTerrain">
- ¿Realmente quiere predeterminar el terreno actual, haciéndolo el centro de los limites para elevarlo y rebajarlo, y el terreno por defecto para la herramienta &apos;Revertir&apos;?
+ ¿Realmente quieres predeterminar el terreno actual, haciéndolo el centro de los limites para elevarlo y rebajarlo, y el terreno por defecto para la herramienta &apos;Revertir&apos;?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="MaxAllowedAgentOnRegion">
- Sólo puede tener [MAX_AGENTS] residentes autorizados.
+ Sólo puedes tener [MAX_AGENTS] residentes autorizados.
</notification>
<notification name="MaxBannedAgentsOnRegion">
- Sólo puede tener [MAX_BANNED] residentes no admitidos.
+ Sólo puedes tener [MAX_BANNED] residentes no admitidos.
</notification>
<notification name="MaxAgentOnRegionBatch">
Fallo al intentar añadir [NUM_ADDED] agentes:
Se superan en [NUM_EXCESS] los [MAX_AGENTS] permitidos en [LIST_TYPE].
</notification>
<notification name="MaxAllowedGroupsOnRegion">
- Sólo puede tener [MAX_GROUPS] grupos permitidos.
+ Sólo puedes tener [MAX_GROUPS] grupos permitidos.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Predeterminar"/>
</notification>
<notification name="MaxManagersOnRegion">
- Sólo puede tener [MAX_MANAGER] administradores del estado.
+ Sólo puedes tener [MAX_MANAGER] administradores del estado.
</notification>
<notification name="OwnerCanNotBeDenied">
No se puede añadir a la lista de residentes no admitidos al propietario del estado.
</notification>
<notification name="CanNotChangeAppearanceUntilLoaded">
- No puede cambiar la apariencia hasta que no se carguen la ropa y la forma.
+ No puedes cambiar la apariencia hasta que no se carguen la ropa y la forma.
</notification>
<notification name="ClassifiedMustBeAlphanumeric">
- El nombre de su anuncio clasificado debe empezar o con un número o con una letra de la A a la Z. No se permiten signos de puntuación.
+ El nombre de tu anuncio clasificado debe empezar o con un número o con una letra de la A a la Z. No se permiten signos de puntuación.
</notification>
<notification name="CantSetBuyObject">
No puede configurar el Comprar el objeto, porque éste no está en venta.
-Por favor, ponga en venta el objeto y reinténtelo.
+Por favor, pon en venta el objeto y vuelve a intentarlo.
</notification>
<notification name="FinishedRawDownload">
Acabada la descarga del archivo raw de terreno en:
@@ -1256,15 +1273,15 @@ Esta actualización no es obligatoria, pero te sugerimos instalarla para mejorar
<usetemplate ignoretext="Abrir mi navegador para administrar mi cuenta" name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="WebLaunchSecurityIssues">
- Visite el wiki de [SECOND_LIFE] para más detalles sobre cómo informar de una cuestión de seguridad.
+ Visita el wiki de [SECOND_LIFE] para más detalles sobre cómo informar de una cuestión de seguridad.
<usetemplate ignoretext="Abrir mi navegador para informar de un fallo de seguridad" name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="WebLaunchQAWiki">
- Visite el wiki QA de [SECOND_LIFE].
+ Visita el wiki QA de [SECOND_LIFE].
<usetemplate ignoretext="Abrir mi navegador para el ver el wiki de &apos;QA&apos; (Control de Calidad)" name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="WebLaunchPublicIssue">
- Visite el Public Issue Tracker (sistema público de seguimiento de incidencias) de [SECOND_LIFE], donde podrá informar de errores y otros asuntos.
+ Visita el Public Issue Tracker (sistema público de seguimiento de incidencias) de [SECOND_LIFE], donde podrás informar de errores y otros asuntos.
<usetemplate ignoretext="Abrir mi navegador para usar el &apos;Public Issue Tracker&apos;" name="okcancelignore" notext="Cancelar" yestext="Ir a la página"/>
</notification>
<notification name="WebLaunchSupportWiki">
@@ -1280,26 +1297,26 @@ Esta actualización no es obligatoria, pero te sugerimos instalarla para mejorar
<usetemplate ignoretext="Abrir mi navegador para ver el portal de LSL" name="okcancelignore" notext="Cancelar" yestext="Ir a la página"/>
</notification>
<notification name="ReturnToOwner">
- ¿Está seguro de que quiere devolver los objetos seleccionados a sus propietarios? Los objetos transferibles que se hayan cedido volverán a sus propietarios anteriores.
+ ¿Estás seguro de que quieres devolver los objetos seleccionados a sus propietarios? Los objetos transferibles que se hayan cedido volverán a sus propietarios anteriores.
*ATENCIÓN* ¡Serán borrados los objetos no transferibles que estén cedidos!
<usetemplate ignoretext="Confirmar antes de devolver objetos a sus propietarios." name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- Actualmente, usted es miembro del grupo [GROUP].
+ Actualmente, eres miembro del grupo [GROUP].
¿Dejar el grupo?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
- ¿DE VERDAD quiere expulsar a todos los usuarios de este grid?
- <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los usuarios"/>
+ ¿Quieres realmente expulsar a todos los residentes de la cuadrícula?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los Residentes"/>
</notification>
<notification name="MuteLinden">
Lo sentimos, pero no puedes ignorar a un Linden.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CannotStartAuctionAlreadyForSale">
- No puede empezar una subasta en una parcela que ya está en venta. Desactive la venta de terreno si está seguro de querer iniciar una subasta.
+ No puedes empezar una subasta en una parcela que ya está en venta. Desactiva la venta de terreno si estás seguro de querer iniciar una subasta.
</notification>
<notification label="Falló ignorar el objeto según su nombre." name="MuteByNameFailed">
Ya has ignorado este nombre.
@@ -1307,33 +1324,36 @@ Esta actualización no es obligatoria, pero te sugerimos instalarla para mejorar
</notification>
<notification name="RemoveItemWarn">
Aunque esté permitido, borrar contenidos puede dañar el objeto.
-¿Quiere borrar ese ítem?
+¿Quieres borrar ese ítem?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="CantOfferCallingCard">
- En este momento, no se puede ofrecer una tarjeta de visita. Por favor, reinténtelo en un momento.
+ En este momento, no se puede ofrecer una tarjeta de visita. Por favor, vuelve a intentarlo en un momento.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CantOfferFriendship">
- En este momento, no se puede ofrecer el ser amigo. Por favor, reinténtelo en un momento.
+ En este momento, no se puede ofrecer el ser amigo. Por favor, vuelve a intentarlo en un momento.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="BusyModeSet">
Pasar al modo ocupado.
-Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respuesta en el modo ocupado). Se rehusarán todos los ofrecimientos de teleporte. Todas las ofertas de inventario irán a tu Papelera.
+Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respuesta en el modo ocupado). Se rehusarán todos los ofrecimientos de teleporte. Todas las ofertas de inventario irán a tu Papelera.
<usetemplate ignoretext="Cambio mi estado al modo ocupado" name="okignore" yestext="OK"/>
</notification>
<notification name="JoinedTooManyGroupsMember">
- Perteneces a demasiados grupos para poder entrar en otro. Por favor, sal de al menos uno antes de entrar en éste, o rehúsa la oferta.
+ Has superado tu número máximo de grupos. Por favor, sal de al menos uno antes de entrar en éste, o rehúsa la oferta.
[NAME] te ha invitado a ser miembro de un grupo.
-[INVITE]
<usetemplate name="okcancelbuttons" notext="Rehusar" yestext="Entrar"/>
</notification>
+ <notification name="JoinedTooManyGroups">
+ Has superado tu número máximo de grupos. Por favor, sal de al menos uno de ellos antes de crear uno nuevo o entrar en alguno.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="KickUser">
- ¿Con qué mensaje se expulsará a este usuario?
+ ¿Con qué mensaje quieres expulsar a este Residente?
<form name="form">
<input name="message">
- Un administrador le ha desconectado.
+ Un administrador te ha desconectado.
</input>
<button name="OK" text="OK"/>
<button name="Cancel" text="Cancelar"/>
@@ -1343,34 +1363,34 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue
¿Con qué mensaje se expulsará a cualquiera que esté actualmente en el grid?
<form name="form">
<input name="message">
- Un administrador le ha desconectado.
+ Un administrador te ha desconectado.
</input>
<button name="OK" text="OK"/>
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
<notification name="FreezeUser">
- ¿Con qué mensaje se congelará a este usuario?
+ ¿Con qué mensaje quieres congelar a este residente?
<form name="form">
<input name="message">
- Ha sido usted congelado. No puede moverse o escribir en el chat. Un administrador contactará con usted a través de un mensaje instantáneo (MI).
+ Has sido congelado. No puedes moverte o escribir en el chat. Un administrador se pondrá en contacto contigo a través de un mensaje instantáneo (MI).
</input>
<button name="OK" text="OK"/>
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
<notification name="UnFreezeUser">
- ¿Con qué mensaje se descongelará a este usuario?
+ ¿Con qué mensaje quieres congelar a este residente?
<form name="form">
<input name="message">
- Ya no está usted congelado.
+ Ya no estás congelado.
</input>
<button name="OK" text="OK"/>
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
<notification name="OfferTeleport">
- ¿Ofrecer teleporte a su posición con este mensaje?
+ ¿Ofrecer teleporte a tu posición con este mensaje?
<form name="form">
<input name="message">
Ven conmigo a [REGION]
@@ -1380,7 +1400,7 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue
</form>
</notification>
<notification name="OfferTeleportFromGod">
- ¿Convocar a este usuario a su posición?
+ ¿Obligar a este Residente a ir a tu localización?
<form name="form">
<input name="message">
Ven conmigo a [REGION]
@@ -1390,7 +1410,7 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue
</form>
</notification>
<notification name="TeleportFromLandmark">
- ¿Está seguro de que quiere teleportarse?
+ ¿Seguro que quieres teleportarte a &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
<usetemplate ignoretext="Confirmar que quiero teleportarme a un hito" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/>
</notification>
<notification name="TeleportToPick">
@@ -1398,11 +1418,11 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue
<usetemplate ignoretext="Confirmar el teleporte a una localización de los Destacados" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/>
</notification>
<notification name="TeleportToClassified">
- ¿Teleportarse a [CLASSIFIED]?
+ ¿Teleportarte a [CLASSIFIED]?
<usetemplate ignoretext="Confirmar el teleporte a una localización de los Clasificados" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/>
</notification>
<notification label="Mensaje a todo el estado" name="MessageEstate">
- Escriba un anuncio breve que se enviará a todo el que esté en su estado.
+ Escribe un anuncio breve que se enviará a todo el que esté en tu estado.
<form name="form">
<input name="message"/>
<button name="OK" text="OK"/>
@@ -1410,15 +1430,15 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue
</form>
</notification>
<notification label="Cambiar un estado Linden" name="ChangeLindenEstate">
- Va a hacer cambios en un estado propiedad de Linden (mainland, grid teen, orientación, etc.).
+ Estás a punto de cambiar un estado propiedad de Linden (continente, teen grid, orientación, etc.).
-Esto es EXTREMADAMENTE PELIGROSO, porque puede afectar radicalmente al funcionamiento de los usuarios. En mainland, se cambiarán miles de regiones, y se provocará un colapso en el espacio del servidor.
+Esto es EXTREMADAMENTE PELIGROSO porque puede afectar en gran manera la experiencia de los Residentes. En el Continente, cambiará miles de regiones y y se provocará un colapso en el espacio del servidor.
-¿Proceder?
+¿Continuar?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification label="Cambiar el acceso a un estado Linden" name="ChangeLindenAccess">
- Va a cambiar la lista de acceso de un estado propiedad de Linden (mainland, grid teen, orientación, etc.).
+ Vas a cambiar la lista de acceso de un estado propiedad de Linden (mainland, grid teen, orientación, etc.).
Esto es PELIGROSO, y sólo debe hacerse para deshacerse de ataques que permitan sacar o meter en el grid objetos o L$.
Se cambiarán miles de regiones, y se provocará un colapso en el espacio del servidor.
@@ -1461,26 +1481,26 @@ Se cambiarán miles de regiones, y se provocará un colapso en el espacio del se
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="EstateChangeCovenant">
- ¿Está seguro de que quiere cambiar el contrato del estado?
+ ¿Estás seguro de que quieres cambiar el contrato del estado?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="RegionEntryAccessBlocked">
- Usted no está autorizado en esa región por su nivel de calificación. Puede deberse a que no hay información validada de su edad.
+ No estás autorizado en esa región por su nivel de calificación. Puede deberse a que no hay información validada de tu edad.
-Por favor, compruebe que tiene instalado el último visor, y vaya a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
+Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RegionEntryAccessBlocked_KB">
- Usted no está autorizado en esa región por su nivel de calificación.
+ No estás autorizado en esa región por su nivel de calificación.
-¿Quiere ir a la Base de Conocimientos para aprender más sobre el nivel de calificación?
+¿Quieres ir a la Base de Conocimientos para aprender más sobre el nivel de calificación?
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es
</url>
<usetemplate ignoretext="No puedo entrar a esta región dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
</notification>
<notification name="RegionEntryAccessBlocked_Notify">
- Usted no está autorizado en esa región por su nivel de calificación.
+ No estás autorizado en esa región por su nivel de calificación.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
No estás autorizado en esta región por tus preferencias sobre el nivel de calificación.
@@ -1493,22 +1513,22 @@ Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferen
</form>
</notification>
<notification name="LandClaimAccessBlocked">
- Usted no puede reclamar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de su edad.
+ No puedes reclamar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de tu edad.
-Por favor, compruebe que tiene instalado el último visor, y vaya a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
+Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LandClaimAccessBlocked_KB">
- No puede reclamar este terreno por sus nivel de calificación.
+ No puedes reclamar este terreno por su nivel de calificación.
-¿Quiere ir a la Base de Conocimientos para más información sobre el nivel de calificación?
+¿Quieres ir a la Base de Conocimientos para más información sobre el nivel de calificación?
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es
</url>
- <usetemplate ignoretext="No puedo reclamar este terreno, dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
+ <usetemplate ignoretext="No puedo reclamar este terreno dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
</notification>
<notification name="LandClaimAccessBlocked_Notify">
- Por su nivel de calificación, usted no puede reclamar este terreno.
+ No puedes reclamar este terreno debido a su nivel de calificación.
</notification>
<notification name="LandClaimAccessBlocked_Change">
No puedes reclamar este terreno por tus preferencias sobre el nivel de calificación.
@@ -1517,22 +1537,22 @@ Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferen
<usetemplate ignoretext="Mis preferencias sobre el nivel de calificación me impiden reclamar este terreno" name="okcancelignore" notext="Cerrar" yestext="Cambiar preferencia"/>
</notification>
<notification name="LandBuyAccessBlocked">
- Usted no puede comprar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de su edad.
+ No puedes comprar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de tu edad.
-Por favor, compruebe que tiene instalado el último visor, y vaya a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
+Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LandBuyAccessBlocked_KB">
- No puede comprar este terreno por sus preferencias de nivel de calificación.
+ No puedes comprar este terreno por tus preferencias de nivel de calificación.
-¿Quiere ir a la Base de Conocimientos para más información sobre el nivel de calificación?
+¿Quieres ir a la Base de Conocimientos para más información sobre el nivel de calificación?
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es
</url>
- <usetemplate ignoretext="No puedo comprar este terreno, dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
+ <usetemplate ignoretext="No puedo comprar este terreno dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/>
</notification>
<notification name="LandBuyAccessBlocked_Notify">
- No puede comprar este terreno por su nivel de calificación.
+ No puedes comprar este terreno por su nivel de calificación.
</notification>
<notification name="LandBuyAccessBlocked_Change">
No puedes comprar este terreno por tus preferencias sobre el nivel de calificación.
@@ -1552,7 +1572,7 @@ Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferen
Hay problemas al añadir un administrador nuevo del estado. Uno o más estados deben de tener llena la lista de administradores.
</notification>
<notification name="ProblemAddingEstateGeneric">
- Hay problemas en este añadir a la lista del estado. Uno o más estados deben de tener llena la lista.
+ Hay problemas al añadir a la lista del estado. Uno o más estados deben de tener llena la lista.
</notification>
<notification name="UnableToLoadNotecardAsset">
En este momento, no se pueden cargar los datos de la&apos;s nota&apos;s.
@@ -1567,25 +1587,25 @@ Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferen
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="PublishClassified">
- Recuerde: las cuotas que se pagan por los clasificados no son reembolsables.
+ Recuerda: las cuotas que se pagan por los clasificados no son reembolsables.
¿Publicar ahora este anuncio por [AMOUNT] L$?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="SetClassifiedMature">
- ¿Este anuncio tiene contenido &apos;Mature&apos;?
+ ¿Este anuncio tiene contenido &apos;Moderado&apos;?
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="SetGroupMature">
- ¿Este grupo tiene contenido &apos;Mature&apos;?
+ ¿Este grupo tiene contenido &apos;Moderado&apos;?
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification label="Confirmar el reinicio" name="ConfirmRestart">
- ¿Verdaderamente quiere reiniciar la región de aquí a 2 minutos?
+ ¿Verdaderamente quieres reiniciar la región de aquí a 2 minutos?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification label="Mensaje a toda la región" name="MessageRegion">
- Escriba un anuncio breve que se enviará a todo el que esté en esta región.
+ Escribe un anuncio breve que se enviará a todo el que esté en esta región.
<form name="form">
<input name="message"/>
<button name="OK" text="OK"/>
@@ -1593,28 +1613,30 @@ Puedes pulsar &apos;Cambiar las Preferencias&apos; para incrementar las preferen
</form>
</notification>
<notification label="Cambiada la calificación de la región" name="RegionMaturityChange">
- Se ha actualizado la calificación de esta región.
-Llevará algún tiempo que el cambio se refleje en el mapa.
+ Se ha actualizado el nivel de calificación de esta región.
+Puede que lleve algún tiempo hasta que el cambio se vea reflejado en el mapa.
+
+Para entrar a regiones Adultas, los Residentes deben haber verificado su cuenta, bien verificando la edad o bien verificando una forma de pago.
</notification>
<notification label="Desajuste en la versión de voz" name="VoiceVersionMismatch">
Esta versión de [APP_NAME] no es compatible con la prestación de voz de esta región. Para que el chat de voz funcione correctamente debes actualizar [APP_NAME].
</notification>
<notification label="No se pudo comprar los objetos" name="BuyObjectOneOwner">
No se pueden comprar a la vez objetos de propietarios diferentes.
-Por favor, seleccione sólo un objeto y vuelva a intentarlo.
+Por favor, selecciona sólo un objeto y vuelve a intentarlo.
</notification>
<notification label="No se pudo comprar el contenido" name="BuyContentsOneOnly">
No se puede comprar a la vez los contenidos de más de un objeto.
-Por favor, seleccione sólo un objeto y vuelva a intentarlo.
+Por favor, selecciona sólo un objeto y vuelve a intentarlo.
</notification>
<notification label="No se pudo comprar el contenido" name="BuyContentsOneOwner">
No se pueden comprar a la vez objetos de propietarios diferentes.
-Por favor, seleccione sólo un objeto y vuelva a intentarlo.
+Por favor, selecciona sólo un objeto y vuelve a intentarlo.
</notification>
<notification name="BuyOriginal">
¿Comprar el objeto original de [OWNER] por [PRICE] L$?
-Usted pasará a ser el propietario de este objeto.
-Podrá:
+Pasarás a ser el propietario de este objeto.
+Podrás:
Modificarlo: [MODIFYPERM]
Copiarlo: [COPYPERM]
Revenderlo o darlo: [RESELLPERM]
@@ -1622,8 +1644,8 @@ Podrá:
</notification>
<notification name="BuyOriginalNoOwner">
¿Comprar el objeto original por [PRICE] L$?
-Usted pasará a ser el propietario de este objeto.
-Podrá:
+Pasarás a ser el propietario de este objeto.
+Podrás:
Modificarlo: [MODIFYPERM]
Copiarlo: [COPYPERM]
Revenderlo o darlo: [RESELLPERM]
@@ -1631,8 +1653,8 @@ Podrá:
</notification>
<notification name="BuyCopy">
¿Comprar una copia de [OWNER] por [PRICE] L$?
-El objeto se copiará a su inventario.
-Podrá:
+El objeto se copiará a tu inventario.
+Podrás:
Modificarlo: [MODIFYPERM]
Copiarlo: [COPYPERM]
Revenderlo o darlo: [RESELLPERM]
@@ -1640,8 +1662,8 @@ Podrá:
</notification>
<notification name="BuyCopyNoOwner">
¿Comprar una copia por [PRICE] L$?
-El objeto se copiará a su inventario.
-Podrá:
+El objeto se copiará a tu inventario.
+Podrás:
Modificarlo: [MODIFYPERM]
Copiarlo: [COPYPERM]
Revenderlo o darlo: [RESELLPERM]
@@ -1649,27 +1671,27 @@ Podrá:
</notification>
<notification name="BuyContents">
¿Comprar los contenidos de [OWNER] por [PRICE] L$?
-Serán copiados a su inventario.
+Serán copiados a tu inventario.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="BuyContentsNoOwner">
¿Comprar los contenidos por [PRICE] L$?
-Serán copiados a su inventario.
+Serán copiados a tu inventario.
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmPurchase">
- Esta transacción hará que:
+ Esta transacción consiste en:
[ACTION]
-¿Está seguro de querer hacer esta compra?
+¿Estás seguro de querer hacer esta compra?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmPurchasePassword">
- Esta transacción hará que:
+ Esta transacción consiste en:
[ACTION]
-¿Está seguro de querer hacer esta compra?
-Por favor, vuelva a escribir su contraseña y pulse OK.
+¿Estás seguro de querer hacer esta compra?
+Por favor, vuelva a escribir tu contraseña y pulsa OK.
<form name="form">
<input name="message"/>
<button name="ConfirmPurchase" text="OK"/>
@@ -1678,18 +1700,18 @@ Por favor, vuelva a escribir su contraseña y pulse OK.
</notification>
<notification name="SetPickLocation">
Nota:
-Ha actualizado la posición de este Destacado, pero los otros detalles permanecen con sus valores originales.
+Has actualizado la posición de este Destacado, pero los otros detalles permanecen con sus valores originales.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="MoveInventoryFromObject">
- Ha elegido ítems &apos;no copiables&apos; de su inventario. Esos ítems se quitarán de su inventario, no se copiarán.
+ Has elegido ítems &apos;no copiables&apos; de tu inventario. Esos ítems se quitarán de tu inventario, no se copiarán.
¿Mover el/los ítem/s del inventario?
<usetemplate ignoretext="Avisarme antes de que mueva ítems &apos;no copiables&apos; desde un objeto" name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="MoveInventoryFromScriptedObject">
- Ha elegido ítems &apos;no copiables&apos; de su inventario. Esos ítems se moverán a su inventario, no se copiarán.
-Dado que estos objetos tienen scripts, moverlos a su inventario puede provocar un mal funcionamiento del script.
+ Has elegido ítems &apos;no copiables&apos; de tu inventario. Esos ítems se moverán a tu inventario, no se copiarán.
+Dado que estos objetos tienen scripts, moverlos a tu inventario puede provocar un mal funcionamiento del script.
¿Mover el/los ítem/s del inventario?
<usetemplate ignoretext="Avisarme antes de que mueva ítems &apos;no copiables&apos; que puedan estropear un objeto con script" name="okcancelignore" notext="Cancelar" yestext="OK"/>
@@ -1701,40 +1723,40 @@ Dado que estos objetos tienen scripts, moverlos a su inventario puede provocar u
</form>
</notification>
<notification name="OpenObjectCannotCopy">
- En este objeto, no hay ítems que esté autorizado a copiar.
+ En este objeto, no hay ítems que estés autorizado a copiar.
</notification>
<notification name="WebLaunchAccountHistory">
¿Ir a tu [http://secondlife.com/account/ Panel de Control] para ver el historial de tu cuenta?
<usetemplate ignoretext="Abrir mi navegador para ver el historial de mi cuenta" name="okcancelignore" notext="Cancelar" yestext="Ir a la página"/>
</notification>
<notification name="ConfirmQuit">
- ¿Está seguro de que quiere salir?
+ ¿Estás seguro de que quieres salir?
<usetemplate ignoretext="Confirmar antes de salir" name="okcancelignore" notext="No salir" yestext="Salir"/>
</notification>
<notification name="HelpReportAbuseEmailLL">
- Usa esta herramienta para denunciar violaciones de las [http://secondlife.com/corporate/tos.php Condiciones de Servicio] o las [http://secondlife.com/corporate/cs.php Normas de la Comunidad].
+ Usa esta herramienta para denunciar violaciones de las [http://secondlife.com/corporate/tos.php Condiciones del Servicio] o las [http://secondlife.com/corporate/cs.php Normas de la Comunidad].
-Se investigan y resuelven todas las infracciones denunciadas. Puedes ver la resolución tomada en el [http://secondlife.com/support/incidentreport.php Informe de Incidentes].
+Se investigan y resuelven todas las infracciones denunciadas.
</notification>
<notification name="HelpReportAbuseSelectCategory">
- Por favor, elija una categoría para esta denuncia de infracción.
+ Por favor, elige una categoría para esta denuncia de infracción.
Seleccionar una categoría nos ayuda a clasificar y procesar las denuncias de infracciones.
</notification>
<notification name="HelpReportAbuseAbuserNameEmpty">
- Por favor, escriba el nombre del infractor.
+ Por favor, escribe el nombre del infractor.
Aportar el dato preciso nos ayuda a clasificar y procesar las denuncias de infracciones.
</notification>
<notification name="HelpReportAbuseAbuserLocationEmpty">
- Por favor, escriba la localización donde tuvo lugar la infracción.
+ Por favor, escribe la localización donde tuvo lugar la infracción.
Aportar el dato preciso nos ayuda a clasificar y procesar las denuncias de infracciones.
</notification>
<notification name="HelpReportAbuseSummaryEmpty">
- Por favor, escriba un resumen de la infracción que ha habido.
+ Por favor, escribe un resumen de la infracción que ha habido.
Aportar un resumen preciso nos ayuda a clasificar y procesar las denuncias de infracciones.
</notification>
<notification name="HelpReportAbuseDetailsEmpty">
- Por favor, escriba una descripción minuciosa de la infracción que ha habido.
-Sea tan específico como pueda, incluyendo los nombres y los detalles implicados en el incidente que denuncia.
+ Por favor, escribe una descripción minuciosa de la infracción que ha habido.
+Sé tan específico como puedas, incluyendo los nombres y los detalles implicados en el incidente que denuncias.
Aportar una descripción precisa nos ayuda a clasificar y procesar las denuncias de infracciones.
</notification>
<notification name="HelpReportAbuseContainsCopyright">
@@ -1757,7 +1779,7 @@ Linden Lab
[COMPONENTS]
</notification>
<notification label="Reemplazar el anexado actual" name="ReplaceAttachment">
- En ese punto de su cuerpo ya hay un objeto anexado. ¿Quiere reemplazarlo por el objeto que ha elegido?
+ En ese punto de tu cuerpo ya hay un objeto anexado. ¿Quieres reemplazarlo por el objeto que has elegido?
<form name="form">
<ignore name="ignore" save_option="true" text="Reemplazar un añadido actual con el ítem seleccionado"/>
<button ignore="Reemplazar automaticamente" name="Yes" text="OK"/>
@@ -1765,9 +1787,9 @@ Linden Lab
</form>
</notification>
<notification label="¡Aviso! Modo Ocupado" name="BusyModePay">
- Usted está en el modo Ocupado. Por tanto, no recibirá ningún ítem a cambio de esta pago.
+ Estás en el modo Ocupado. Por tanto, no recibirás ningún ítem a cambio de este pago.
-¿Quiere salir del modo Ocupado ante de completar esta transacción?
+¿Quieres salir del modo Ocupado antes de completar esta transacción?
<form name="form">
<ignore name="ignore" save_option="true" text="Voy a pagar a una persona u objeto mientras estoy en el modo ocupado"/>
<button ignore="Siempre salir del modo Ocupado" name="Yes" text="OK"/>
@@ -1775,7 +1797,7 @@ Linden Lab
</form>
</notification>
<notification name="ConfirmDeleteProtectedCategory">
- La carpeta &apos;[FOLDERNAME]&apos; pertenece al sistema, y borrar carpetas del sistema puede provocar inestabilidad. ¿Estás seguro de que quieres borrarla?
+ La carpeta &apos;[FOLDERNAME]&apos; pertenece al sistema, y borrar carpetas del sistema puede provocar inestabilidad. ¿Estás seguro de que quieres borrarla?
<usetemplate ignoretext="Confirmar antes de borrar una carpeta del sistema" name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmEmptyTrash">
@@ -1787,11 +1809,11 @@ Linden Lab
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
<notification name="ConfirmClearCookies">
- ¿Está seguro de que quiere limpiar sus cookies?
+ ¿Estás seguro de que quieres limpiar tus cookies?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sí"/>
</notification>
<notification name="ConfirmClearMediaUrlList">
- ¿Está seguro de que quiere vaciar su lista de URL guardadas?
+ ¿Estás seguro de que quieres vaciar tu lista de URL guardadas?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sí"/>
</notification>
<notification name="ConfirmEmptyLostAndFound">
@@ -1808,21 +1830,21 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
</form>
</notification>
<notification name="WLSavePresetAlert">
- ¿Quiere sobrescribir la preselección guardada?
+ ¿Quieres sobrescribir la preselección guardada?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="WLDeletePresetAlert">
- ¿Quiere borrar [SKY]?
+ ¿Quieres borrar [SKY]?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="WLNoEditDefault">
- No puede editar ni borrar una preselección por defecto.
+ No puedes editar ni borrar una preselección por defecto.
</notification>
<notification name="WLMissingSky">
Este archivo del ciclo de un día se refiere a un archivo perdido de cielo: [SKY].
</notification>
<notification name="PPSaveEffectAlert">
- Ya existe un efecto de procesamiento. ¿Desea sobreescribirlo?
+ Ya existe un efecto de procesamiento. ¿Quieres sobreescribirlo?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="NewSkyPreset">
@@ -1852,7 +1874,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
¡Esa preselección ya existe!
</notification>
<notification name="WaterNoEditDefault">
- No puede editar o borrar una preselección por defecto.
+ No puedes editar o borrar una preselección por defecto.
</notification>
<notification name="ChatterBoxSessionStartError">
No se puede empezar una nueva sesión de chat con [RECIPIENT].
@@ -1865,7 +1887,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="ForceCloseChatterBoxSession">
- Debe cerrarse su sesión de chat con [NAME].
+ Debe cerrarse tu sesión de chat con [NAME].
[REASON]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
@@ -1873,7 +1895,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
No puedes comprar un objeto mientras esté anexado.
</notification>
<notification label="Acerca de las solicitudes de autorización de débito" name="DebitPermissionDetails">
- Al admitir esta petición, le da permiso a un script para que coja dólares Linden (L$) de su cuenta. Para revocar este permiso, el propietario del objeto debe eliminarlo o reiniciar ese script del objeto.
+ Al admitir esta petición, le das permiso a un script para que coja dólares Linden (L$) de tu cuenta. Para revocar este permiso, el propietario del objeto debe eliminarlo o reiniciar ese script del objeto.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AutoWearNewClothing">
@@ -1908,10 +1930,10 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
Cancelado
</notification>
<notification name="CancelledSit">
- Cancelado el sentarse
+ Cancelado el sentarte
</notification>
<notification name="CancelledAttach">
- Candelado el anexar
+ Cancelado el anexar
</notification>
<notification name="ReplacedMissingWearable">
Reemplazadas las ropas o partes del cuerpo perdidas con sus equivalentes por defecto.
@@ -1933,7 +1955,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
(tardará unos 5 minutos).
</notification>
<notification name="UploadPayment">
- Ha pagado [AMOUNT] LS por la subida.
+ Has pagado [AMOUNT] LS por la subida.
</notification>
<notification name="UploadWebSnapshotDone">
Completada la subida de la foto del sitio web.
@@ -1948,14 +1970,13 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
No se encuentra en la base de datos el gesto [NAME].
</notification>
<notification name="UnableToLoadGesture">
- No se ha podido cargar el gesto [NAME].
-Por favor, vuelva a intentarlo.
+ No se puede cargar el gesto [NAME].
</notification>
<notification name="LandmarkMissing">
El hito ha desaparecido de la base de datos.
</notification>
<notification name="UnableToLoadLandmark">
- No se ha podido cargar el hito. Por favor, vuelva a intentarlo.
+ No se ha podido cargar el hito. Por favor, vuelve a intentarlo.
</notification>
<notification name="CapsKeyOn">
Tienes pulsada la tecla de mayúsculas.
@@ -1968,7 +1989,7 @@ Esto puede influir en tu contraseña.
No tienes permiso para ver esta nota.
</notification>
<notification name="RezItemNoPermissions">
- No tiene permisos suficientes para renderizar el objeto.
+ No tienes permisos suficientes para renderizar el objeto.
</notification>
<notification name="UnableToLoadNotecard">
En este momento no se puede cargar la nota.
@@ -1977,30 +1998,30 @@ Esto puede influir en tu contraseña.
El script ha desaparecido de la base de datos.
</notification>
<notification name="ScriptNoPermissions">
- No tiene permisos suficientes para ver el script.
+ No tienes permisos suficientes para ver el script.
</notification>
<notification name="UnableToLoadScript">
- No se ha podido cargar el script. Por favor, vuelva a intentarlo.
+ No se ha podido cargar el script. Por favor, vuelve a intentarlo.
</notification>
<notification name="IncompleteInventory">
- Los contenidos que está usted ofreciendo aún no están disponibles. Por favor, vuelva a ofrecerlos en un minuto.
+ Los contenidos que estás ofreciendo aún no están disponibles. Por favor, vuelve a ofrecerlos en un minuto.
</notification>
<notification name="CannotModifyProtectedCategories">
- No puede modificar categorías que están protegidas.
+ No puedes modificar categorías que están protegidas.
</notification>
<notification name="CannotRemoveProtectedCategories">
- No puede quitar categorías que están protegidas.
+ No puedes quitar categorías que están protegidas.
</notification>
<notification name="OfferedCard">
- Ha ofrecido una tarjeta de visita a [FIRST] [LAST]
+ Has ofrecido una tarjeta de visita a [FIRST] [LAST]
</notification>
<notification name="UnableToBuyWhileDownloading">
- No se puede comprar un objeto mientras se descargan sus datos.
-Por favor, vuelva a intentarlo.
+ No se puede comprar un objeto mientras se descargan los datos.
+Por favor, vuelve a intentarlo.
</notification>
<notification name="UnableToLinkWhileDownloading">
- No se puede enlazar un objeto mientras se descargan sus datos.
-Por favor, vuelva a intentarlo.
+ No se puede enlazar un objeto mientras se descargan los datos.
+Por favor, vuelve a intentarlo.
</notification>
<notification name="CannotBuyObjectsFromDifferentOwners">
No puedes comprar más de un objeto a la vez.
@@ -2022,16 +2043,16 @@ Por favor, selecciona un sólo objeto.
[NAME] ha recibido tu oferta de inventario.
</notification>
<notification name="InventoryDeclined">
- [NAME] ha rehusado su oferta del inventario.
+ [NAME] ha rehusado tu oferta del inventario.
</notification>
<notification name="ObjectMessage">
[NAME]: [MESSAGE]
</notification>
<notification name="CallingCardAccepted">
- Se ha aceptado su tarjeta de visita.
+ Se ha aceptado tu tarjeta de visita.
</notification>
<notification name="CallingCardDeclined">
- Se ha rehusado su tarjeta de visita.
+ Se ha rehusado tu tarjeta de visita.
</notification>
<notification name="TeleportToLandmark">
Puedes teleportarte a lugares como &apos;[NAME]&apos; abriendo el panel Lugares -a la derecha de tu pantalla- y seleccionando la sección Hitos.
@@ -2039,19 +2060,19 @@ Pulsa en un hito para seleccionarlo, y, luego, pulsa &apos;Teleportar&apos; en l
(También puedes pulsar dos veces en el hito o pulsarlo con el botón derecho del ratón y elegir &apos;Teleportar&apos;.)
</notification>
<notification name="TeleportToPerson">
- Puedes contactar con residentes como &apos;[NAME]&apos; abriendo el panel Gente, a la derecha de tu pantalla.
-Selecciona un residente de la lista y pulsa &apos;MI&apos; en la parte inferior del panel.
+ Puedes contactar con un Residente como &apos;[NAME]&apos; abriendo el panel Gente en el lado derecho de tu pantalla.
+Elige al Residente de la lista y pulsa &apos;MI&apos; en la parte inferior del panel.
(También puedes pulsar dos veces en su nombre o pulsarlo con el botón derecho y elegir &apos;MI&apos;).
</notification>
<notification name="CantSelectLandFromMultipleRegions">
- No puede seleccionar un terreno que cruce las fronteras entre servidores.
-Inténtelo seleccionando un trozo más pequeño de terreno.
+ No puedes seleccionar un terreno que cruce las fronteras entre servidores.
+Inténtalo seleccionando un trozo más pequeño de terreno.
</notification>
<notification name="SearchWordBanned">
- Se han excluido algunos términos de su búsqueda debido a restricciones en el contenido, según se especifica en las Normas de la Comunidad.
+ Se han excluido algunos términos de tu búsqueda debido a restricciones en el contenido, según se especifica en las Normas de la Comunidad.
</notification>
<notification name="NoContentToSearch">
- Por favor, elija al menos un tipo de contenido a buscar (&apos;PG&apos;, &apos;Mature&apos;, o &apos;Adult&apos;).
+ Por favor, elige al menos un tipo de contenido a buscar (&apos;PG&apos;, &apos;Mature&apos;, o &apos;Adult&apos;).
</notification>
<notification name="GroupVote">
[NAME] ha propuesto votar:
@@ -2107,13 +2128,13 @@ Por favor, reinstala el plugin o contacta con el vendedor si sigues teniendo pro
</form>
</notification>
<notification name="OwnedObjectsReturned">
- Se han devuelto a su inventario los objetos de los que usted era propietario en la parcela seleccionada.
+ Se han devuelto a tu inventario los objetos de los que eras propietario en la parcela seleccionada.
</notification>
<notification name="OtherObjectsReturned">
- Se han devuelto a su inventario los objetos de los que usted era propietario en la parcela propiedad de [FIRST] [LAST].
+ Se han devuelto a tu inventario los objetos de los que eras propietario en la parcela propiedad de [FIRST] [LAST].
</notification>
<notification name="OtherObjectsReturned2">
- Se han devuelto a su propietario los objetos que, en la parcela seleccionada, eran propiedad del residente &apos;[NAME]&apos;.
+ Se han devuelto a su propietario los objetos seleccionados en la parcela de terreno propiedad de &apos;[NAME]&apos;.
</notification>
<notification name="GroupObjectsReturned">
Se han devuelto a los inventarios de sus propietarios los objetos que estaban compartidos con el grupo [GROUPNAME] en la parcela seleccionada.
@@ -2121,11 +2142,11 @@ Los objetos transferibles que se transfirieron al grupo se han devuelto a sus pr
Los objetos no transferibles que se transfirieron al grupo han sido borrados.
</notification>
<notification name="UnOwnedObjectsReturned">
- Se han devuelto a sus propietarios los objetos de los que usted NO era propietario en la parcela seleccionada.
+ Se han devuelto a sus propietarios los objetos de los que NO eras propietario en la parcela seleccionada.
</notification>
<notification name="ServerObjectMessage">
Mensaje de [NAME]:
-[MSG]
+&lt;nolink&gt;[MSG]&lt;/nolink&gt;
</notification>
<notification name="NotSafe">
Este terreno tiene el daño activado.
@@ -2159,33 +2180,33 @@ Los scripts no funcionan aquí, excepto los pertenecientes al propietario del te
Sólo puedes reclamar terreno público de la región en que estás.
</notification>
<notification name="RegionTPAccessBlocked">
- No está autorizado en esa región por su nivel de calificación. Debe validar su edad y/o instalar el último visor.
+ No estás autorizado en esa región por su nivel de calificación. Debes validar tu edad y/o instalar el último visor.
-Por favor, vaya a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
+Por favor, dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación.
</notification>
<notification name="URBannedFromRegion">
- Se le ha prohibido el acceso a la región.
+ Se te ha prohibido el acceso a la región.
</notification>
<notification name="NoTeenGridAccess">
- Su cuenta no puede conectarse a esta región del grid teen.
+ Tu cuenta no puede conectarse a esta región del grid teen.
</notification>
<notification name="ImproperPaymentStatus">
- No tiene el estado de pago adecuado para entrar a esta región.
+ No tienes el estado de pago adecuado para entrar a esta región.
</notification>
<notification name="MustGetAgeParcel">
- Debe haber verificado su edad para entrar a esta parcela.
+ Debes haber verificado tu edad para entrar a esta parcela.
</notification>
<notification name="NoDestRegion">
No se ha encontrada la región de destino.
</notification>
<notification name="NotAllowedInDest">
- No está autorizado en el destino.
+ No estás autorizado en el destino.
</notification>
<notification name="RegionParcelBan">
- No puede cruzar la región por una parcela con el acceso prohibido. Intente otro camino.
+ No puedes cruzar la región por una parcela con el acceso prohibido. Intenta otro camino.
</notification>
<notification name="TelehubRedirect">
- Ha sido redirigido a un punto de teleporte.
+ Has sido redirigido a un punto de teleporte.
</notification>
<notification name="CouldntTPCloser">
No se puede teleportar a un destino tan cercano.
@@ -2194,17 +2215,17 @@ Por favor, vaya a la Base de Conocimientos para más detalles sobre el acceso a
Teleporte cancelado.
</notification>
<notification name="FullRegionTryAgain">
- En estos momentos, está llena la región a la que intenta entrar.
-Por favor, reinténtelo en unos momentos.
+ En estos momentos, está llena la región a la que estás intentando entrar.
+Por favor, vuelve a intentarlo en unos momentos.
</notification>
<notification name="GeneralFailure">
Fallo general.
</notification>
<notification name="RoutedWrongRegion">
- Mal dirigido a la región. Por favor, reinténtelo.
+ Mal dirigido a la región. Por favor, vuelve a intentarlo.
</notification>
<notification name="NoValidAgentID">
- ID de agente inválida.
+ ID de agente inválido.
</notification>
<notification name="NoValidSession">
ID de sesión inválido.
@@ -2219,13 +2240,13 @@ Por favor, reinténtelo en unos momentos.
No se puede crear la conexión.
</notification>
<notification name="InternalUsherError">
- Se ha producido un error interno al intentar acceder al destino de su teleporte. Puede que, en este momento, el servicio de [SECOND_LIFE] tenga problemas.
+ Se ha producido un error interno al intentar acceder al destino de tu teleporte. Puede que, en este momento, el servicio de [SECOND_LIFE] tenga problemas.
</notification>
<notification name="NoGoodTPDestination">
No se puede encontrar en esta región un buen destino para el teleporte.
</notification>
<notification name="InternalErrorRegionResolver">
- Ha sucedido un error interno al manejar las coordenadas globales de su petición de teleporte. Puede que, en este momento, el servicio de [SECOND_LIFE] tenga problemas.
+ Se ha producido un error interno al manejar las coordenadas globales de tu petición de teleporte. Puede que, en este momento, el servicio de [SECOND_LIFE] tenga problemas.
</notification>
<notification name="NoValidLanding">
No se ha podido encontrar un punto de aterrizaje válido.
@@ -2234,7 +2255,7 @@ Por favor, reinténtelo en unos momentos.
No se ha podido encontrar una parcela válida.
</notification>
<notification name="ObjectGiveItem">
- Un objeto de nombre [OBJECTFROMNAME], propiedad de [NAME_SLURL], te ha dado un/a [OBJECTTYPE]:
+ Un objeto de nombre [OBJECTFROMNAME], propiedad de [NAME_SLURL], te ha dado este [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Guardar"/>
@@ -2243,7 +2264,7 @@ Por favor, reinténtelo en unos momentos.
</form>
</notification>
<notification name="ObjectGiveItemUnknownUser">
- Un objeto de nombre [OBJECTFROMNAME], propiedad de (un residente desconocido) te ha dado un/a [OBJECTTYPE]:
+ Un objeto de nombre [OBJECTFROMNAME] propiedad de (un Residente desconocido) te ha dado este [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Guardar"/>
@@ -2252,12 +2273,12 @@ Por favor, reinténtelo en unos momentos.
</form>
</notification>
<notification name="UserGiveItem">
- [NAME_SLURL] te ha dado un/a [OBJECTTYPE]:
+ [NAME_SLURL] te ha dado este [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
- <button name="Keep" text="Guardar"/>
<button name="Show" text="Mostrar"/>
<button name="Discard" text="Descartar"/>
+ <button name="Mute" text="Ignorar"/>
</form>
</notification>
<notification name="GodMessage">
@@ -2282,6 +2303,9 @@ Por favor, reinténtelo en unos momentos.
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification name="TeleportOfferSent">
+ Teleporte ofrecido a [TO_NAME]
+ </notification>
<notification name="GotoURL">
[MESSAGE]
[URL]
@@ -2291,11 +2315,11 @@ Por favor, reinténtelo en unos momentos.
</form>
</notification>
<notification name="OfferFriendship">
- [NAME] le está ofreciendo amistad.
+ [NAME] te está ofreciendo amistad.
[MESSAGE]
-(Por defecto, usted podrá ver si están conectados los demás).
+(Por defecto, podrás ver si están conectados los demás).
<form name="form">
<button name="Accept" text="Aceptar"/>
<button name="Decline" text="Rehusar"/>
@@ -2305,23 +2329,29 @@ Por favor, reinténtelo en unos momentos.
Has ofrecido amistad a [TO_NAME]
</notification>
<notification name="OfferFriendshipNoMessage">
- [NAME] le está ofreciendo amistad.
+ [NAME] te está ofreciendo amistad.
-(Por defecto, usted podrá ver si están conectados los demás).
+(Por defecto, podrás ver si están conectados los demás).
<form name="form">
<button name="Accept" text="Aceptar"/>
<button name="Decline" text="Rehusar"/>
</form>
</notification>
<notification name="FriendshipAccepted">
- [NAME] ha aceptado su oferta de amistad.
+ [NAME] ha aceptado tu oferta de amistad.
</notification>
<notification name="FriendshipDeclined">
- [NAME] ha rehusado su oferta de amistad.
+ [NAME] ha rehusado tu oferta de amistad.
+ </notification>
+ <notification name="FriendshipAcceptedByMe">
+ Aceptado el ofrecimiento de amistad.
+ </notification>
+ <notification name="FriendshipDeclinedByMe">
+ Rehusado el ofrecimiento de amistad.
</notification>
<notification name="OfferCallingCard">
- [FIRST] [LAST] le está ofreciendo su tarjeta de visita.
-Esto añadirá un ítem a su inventario para que pueda enviar rápidamente a este residente un MI.
+ [FIRST] [LAST] te está ofreciendo su tarjeta de visita.
+Esto añadirá un marcador en tu inventario para que puedas enviarle rápidamente un MI.
<form name="form">
<button name="Accept" text="Aceptar"/>
<button name="Decline" text="Rehusar"/>
@@ -2332,7 +2362,7 @@ Esto añadirá un ítem a su inventario para que pueda enviar rápidamente a est
Si permaneces en esta región serás desconectado.
</notification>
<notification name="RegionRestartSeconds">
- Esta región se reiniciará en [SECONDS] segundos.
+ Esta región se reiniciará en [SECONDS] segundos.
Si permaneces en esta región serás desconectado.
</notification>
<notification name="LoadWebPage">
@@ -2359,7 +2389,7 @@ Del objeto: [OBJECTNAME]; propiedad de: [NAME]?
&apos;[OBJECTNAME]&apos;, un objeto propiedad de &apos;[NAME]&apos;, querría:
[QUESTIONS]
-¿Está de acuerdo?
+¿Estás de acuerdo?
<form name="form">
<button name="Yes" text="Sí"/>
<button name="No" text="No"/>
@@ -2393,82 +2423,25 @@ Si no confias en este objeto y en su creador, deberías rehusar esta petición.
<button name="Ignore" text="Ignorar"/>
</form>
</notification>
- <notification name="ScriptToast">
- El &apos;[TITLE]&apos; de [FIRST] [LAST] está esperando una respuesta del usuario.
- <form name="form">
- <button name="Open" text="Abrir el diálogo"/>
- <button name="Ignore" text="Ignorar"/>
- <button name="Block" text="Ignorar"/>
- </form>
- </notification>
- <notification name="FirstBalanceIncrease">
- Has recibido [AMOUNT] L$.
-Tu saldo de L$ se muestra arriba a la derecha.
- </notification>
- <notification name="FirstBalanceDecrease">
- Acabas de pagar [AMOUNT] L$.
-Tu saldo de L$ se muestra arriba a la derecha.
- </notification>
<notification name="BuyLindenDollarSuccess">
¡Gracias por tu pago!
-Tu saldo de L$ se actualizará cuando se complete el proceso. Si el proceso tarda más de 20 minutos, se cancelará tu transacción, y la cantidad se cargará en tu saldo de US$.
+Tu saldo de L$ se actualizará cuando se complete el proceso. Si el proceso tarda más de 20 minutos, se cancelará tu transacción, y la cantidad se cargará en tu saldo de US$.
Puedes revisar el estado de tu pago en el Historial de transacciones de tu [http://secondlife.com/account/ Panel de Control]
</notification>
- <notification name="FirstSit">
- Estás sentado.
-Usa las teclas de cursor (o AWSD) para mirar alrededor.
-Pulsa el botón &apos;Levantarme&apos; para ponerte de pie.
- </notification>
- <notification name="FirstMap">
- Pulsa y arrastra el mapa para ver los alrededores.
-Pulsa dos veces para teleportarte.
-Usa los controles de la derecha para encontrar cosas y mostrar diferentes fondos.
- </notification>
- <notification name="FirstBuild">
- Has abierto las herramientas de construcción. Cada objeto que estás viendo alrededor de ti se ha creado usando estas herramientas.
- </notification>
- <notification name="FirstTeleport">
- Sólo puedes teleportarte a ciertos lugares de esta región. La flecha apunta al destino que elegiste. Pulsa la flecha para que desaparezca.
- </notification>
<notification name="FirstOverrideKeys">
- A partir de ahora, sus teclas de movimiento las gestiona un objeto.
-Pruebe las teclas del cursor o AWSD para ver qué hacen.
-Algunos objetos (las pistolas, por ejemplo) le pedirán que, para usarlos, entre usted en vista subjetiva. Pulse &apos;M&apos; para hacerlo.
- </notification>
- <notification name="FirstAppearance">
- Estás modicando tu apariencia.
-Usa las teclas de cursor para mirar alrededor.
-Cuando lo hayas hecho, pulsa &apos;Guardar todo&apos;.
- </notification>
- <notification name="FirstInventory">
- Este es tu inventario: contiene los ítems de los que eres propietario.
-
-* Para vestirte algo, arrástralo hasta ti mismo.
-* Para colocar un objeto en el mundo, arrástralo hasta el suelo.
-* Para leer una nota, pulsa dos veces en ella.
+ A partir de ahora, tus teclas de movimiento las gestiona un objeto.
+Prueba las teclas del cursor o AWSD para ver qué hacen.
+Algunos objetos (las pistolas, por ejemplo) te pedirán que, para usarlos, entres en vista subjetiva. Pulsa &apos;M&apos; para hacerlo.
</notification>
<notification name="FirstSandbox">
Esta es una región &apos;sandbox&apos; (zona de pruebas) donde los Residentes pueden aprender a construir.
Los objetos que construyas aquí serán eliminados cuando la abandones; por tanto, no olvides pulsarlos con el botón derecho y elegir &apos;Tomar&apos; para que tu creación vaya a tu inventario.
</notification>
- <notification name="FirstFlexible">
- Este objeto es flexible. Los objetos flexibles han de ser inmateriales, no materiales.
- </notification>
- <notification name="FirstDebugMenus">
- Has abierto el menú Avanzado.
-
-Para activar este menú,
- Windows: Ctrl+Alt+D
- Mac: ⌥⌘D
- </notification>
- <notification name="FirstSculptedPrim">
- Está editando un prim &apos;sculpted&apos;. Los prim sculpted necesitan una textura especial para definir su forma.
- </notification>
<notification name="MaxListSelectMessage">
- Puede seleccionar un máximo de [MAX_SELECT] ítems de esta lista.
+ Puedes seleccionar un máximo de [MAX_SELECT] ítems de esta lista.
</notification>
<notification name="VoiceInviteP2P">
[NAME] te está invitando a un chat de voz.
@@ -2516,10 +2489,10 @@ Pulsa Aceptar o Rehusar para coger o no la llamada. Pulsa Ignorar para ignorar a
</form>
</notification>
<notification name="VoiceChannelFull">
- El chat de voz al que está intentando entrar, [VOICE_CHANNEL_NAME], ha llegado a su capacidad máxima. Por favor, inténtelo más tarde.
+ El chat de voz al que estás intentando entrar, [VOICE_CHANNEL_NAME], ha llegado a su capacidad máxima. Por favor, vuelve a intentarlo más tarde.
</notification>
<notification name="ProximalVoiceChannelFull">
- Lo sentimos. Este área ha llegado a su capacidad máxima de conversaciones por voz. Por favor, intente usar la voz en otra zona.
+ Lo sentimos. Este área ha llegado a su capacidad máxima de conversaciones por voz. Por favor, intenta usar la voz en otra zona.
</notification>
<notification name="VoiceChannelDisconnected">
Has sido desconectado de [VOICE_CHANNEL_NAME]. Vas a ser reconectado al chat de voz.
@@ -2537,22 +2510,22 @@ Pulsa Aceptar o Rehusar para coger o no la llamada. Pulsa Ignorar para ignorar a
Fallo al conectar a [VOICE_CHANNEL_NAME]; por favor, inténtalo más tarde. Vas a ser reconectado al chat de voz.
</notification>
<notification name="VoiceLoginRetry">
- Estamos creando un canal de voz para usted. Se puede tardar hasta un minuto.
+ Estamos creando un canal de voz para ti. Se puede tardar hasta un minuto.
</notification>
<notification name="Cannot enter parcel: not a group member">
Sólo los miembros de un grupo determinado pueden visitar esta zona.
</notification>
<notification name="Cannot enter parcel: banned">
- No puede entrar en esta parcela, se le ha prohibido el acceso.
+ No puedes entrar en esta parcela, se te ha prohibido el acceso.
</notification>
<notification name="Cannot enter parcel: not on access list">
- No puede entrar en esta parcela, no está en la lista de acceso.
+ No puedes entrar en esta parcela, no estás en la lista de acceso.
</notification>
<notification name="VoiceNotAllowed">
- No tiene permiso para conectarse al chat de voz de [VOICE_CHANNEL_NAME].
+ No tienes permiso para conectarte al chat de voz de [VOICE_CHANNEL_NAME].
</notification>
<notification name="VoiceCallGenericError">
- Ha ocurrido un error intentando conectarle al [VOICE_CHANNEL_NAME]. Por favor, inténtelo más tarde.
+ Se ha producido un error al intentar conectarte al [VOICE_CHANNEL_NAME]. Por favor, inténtalo más tarde.
</notification>
<notification name="ServerVersionChanged">
Acabas de entrar en una región que usa un servidor con una versión distinta, y esto puede influir en el funcionamiento. [[URL] Ver las notas de desarrollo].
@@ -2573,6 +2546,10 @@ Por tu seguridad, serán bloqueadas durante unos segundos.
<button name="respondbutton" text="Responder"/>
</form>
</notification>
+ <notification name="ConfirmCloseAll">
+ ¿Seguro que quieres cerrar todos los MI?
+ <usetemplate ignoretext="Confirmar antes de cerrar todos los MIs" name="okcancelignore" notext="Cancelar" yestext="OK"/>
+ </notification>
<notification name="AttachmentSaved">
Se ha guardado el adjunto.
</notification>
@@ -2598,10 +2575,10 @@ Por tu seguridad, serán bloqueadas durante unos segundos.
</notification>
<notification name="BottomTrayButtonCanNotBeShown">
El botón elegido no se puede mostrar correctamente.
-Se mostrará cuando tenga suficiente espacio.
+Se mostrará cuando haya suficiente espacio.
</notification>
<global name="UnsupportedCPU">
- - La velocidad de su CPU no cumple los requerimientos mínimos.
+ - La velocidad de tu CPU no cumple los requerimientos mínimos.
</global>
<global name="UnsupportedGLRequirements">
Parece que no tienes el hardware apropiado para [APP_NAME]. [APP_NAME] requiere una tarjeta gráfica OpenGL que admita texturas múltiples (&apos;multitexture support&apos;). Si la tienes, comprueba que tienes los últimos &apos;drivers&apos; para tu tarjeta gráfica, así como los últimos parches y &apos;service packs&apos; para tu sistema operativo.
@@ -2615,10 +2592,10 @@ Si los problemas persisten, por favor, acude a [SUPPORT_SITE].
510
</global>
<global name="UnsupportedGPU">
- - Su tarjeta gráfica no cumple los requerimientos mínimos.
+ - Tu tarjeta gráfica no cumple los requerimientos mínimos.
</global>
<global name="UnsupportedRAM">
- - La memoria de su sistema no cumple los requerimientos mínimos.
+ - La memoria de tu sistema no cumple los requerimientos mínimos.
</global>
<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
Si posees un terreno, puedes hacerlo tu Base.
diff --git a/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml
index 6f30286216..c64a93e0e5 100644
--- a/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml
@@ -1,8 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <panel name="panel_call_buttons">
- <button label="Llamar" name="call_btn"/>
- <button label="Colgar" name="end_call_btn"/>
- <button label="Controles de la voz" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="vertical_stack">
+ <layout_panel name="call_btn_panel">
+ <button label="Llamar" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Colgar" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Controles de la voz" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
index 83d7223272..e1ffc14823 100644
--- a/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
@@ -22,4 +22,5 @@
[COUNT] año/s
</string>
<text name="avatar_name" value="Desconocido"/>
+ <button name="profile_btn" tool_tip="Ver el perfil"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml
index 6513345448..cddbad1195 100644
--- a/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml
@@ -4,7 +4,7 @@
Lista de ignorados
</text>
<scroll_list name="blocked" tool_tip="Lista de los residentes ignorados actualmente"/>
- <button label="Ignorar al residente..." label_selected="Ignorar al residente..." name="Block resident..." tool_tip="Elige a un residente para ignorarle"/>
+ <button label="Ignorar al residente..." label_selected="Ignorar al residente..." name="Block resident..." tool_tip="Elige a un Residente para ignorarle"/>
<button label="Ignorar objetos según el nombre..." label_selected="Ignorar objetos según el nombre..." name="Block object by name..."/>
- <button label="No ignorar" label_selected="No ignorar" name="Unblock" tool_tip="Quitar objetos o residentes de la lista de ignorados"/>
+ <button label="No ignorar" label_selected="No ignorar" name="Unblock" tool_tip="Quita al Residente o al objeto de la lista de ignorados"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray.xml b/indra/newview/skins/default/xui/es/panel_bottomtray.xml
index 9924cd5ed6..74dc17f3de 100644
--- a/indra/newview/skins/default/xui/es/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/es/panel_bottomtray.xml
@@ -7,8 +7,13 @@
Muestra/Oculta el panel del control de voz
</string>
<layout_stack name="toolbar_stack">
+ <layout_panel name="speak_panel">
+ <talk_button name="talk">
+ <speak_button label="Hablar" label_selected="Hablar" name="speak_btn"/>
+ </talk_button>
+ </layout_panel>
<layout_panel name="gesture_panel">
- <gesture_combo_box label="Gestos" name="Gesture" tool_tip="Muestra/Oculta los gestos"/>
+ <gesture_combo_list label="Gestos" name="Gesture" tool_tip="Muestra/Oculta los gestos"/>
</layout_panel>
<layout_panel name="movement_panel">
<button label="Moverme" name="movement_btn" tool_tip="Muestra/Oculta los controles del movimiento"/>
@@ -19,5 +24,15 @@
<layout_panel name="snapshot_panel">
<button label="" name="snapshots" tool_tip="Hacer una foto"/>
</layout_panel>
+ <layout_panel name="im_well_panel">
+ <chiclet_im_well name="im_well">
+ <button name="Unread IM messages" tool_tip="Conversaciones"/>
+ </chiclet_im_well>
+ </layout_panel>
+ <layout_panel name="notification_well_panel">
+ <chiclet_notification name="notification_well">
+ <button name="Unread" tool_tip="Notificaciones"/>
+ </chiclet_notification>
+ </layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml
new file mode 100644
index 0000000000..8d1b84a5fd
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray_lite">
+ <layout_stack name="toolbar_stack_lite">
+ <layout_panel name="gesture_panel">
+ <gesture_combo_list label="Gestos" name="Gesture" tool_tip="Muestra/Oculta los gestos"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_classified_info.xml b/indra/newview/skins/default/xui/es/panel_classified_info.xml
index 3b82994e32..35fe174970 100644
--- a/indra/newview/skins/default/xui/es/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/es/panel_classified_info.xml
@@ -1,17 +1,48 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_classified_info">
+ <panel.string name="l$_price">
+ [PRICE] L$
+ </panel.string>
+ <panel.string name="click_through_text_fmt">
+ [TELEPORT] teleportes, [MAP] mapa, [PROFILE] perfil
+ </panel.string>
+ <panel.string name="date_fmt">
+ [day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
+ </panel.string>
+ <panel.string name="auto_renew_on">
+ Activada
+ </panel.string>
+ <panel.string name="auto_renew_off">
+ Desactivada
+ </panel.string>
<text name="title" value="Información del clasificado"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <text name="classified_name" value="[nombre]"/>
- <text name="classified_location" value="[cargando...]"/>
- <text name="content_type" value="[tipo de contenido]"/>
- <text name="category" value="[categoría]"/>
- <check_box label="Renovar automáticamente cada semana" name="auto_renew"/>
- <text name="price_for_listing" tool_tip="Precio por publicarlo.">
- [PRICE] L$
- </text>
- <text name="classified_desc" value="[descripción]"/>
+ <text_editor name="classified_name" value="[name]"/>
+ <text name="classified_location_label" value="Localización:"/>
+ <text_editor name="classified_location" value="[loading...]"/>
+ <text name="content_type_label" value="Tipo de contenido:"/>
+ <text_editor name="content_type" value="[content type]"/>
+ <text name="category_label" value="Categoría:"/>
+ <text_editor name="category" value="[category]"/>
+ <text name="creation_date_label" value="Fecha de creación:"/>
+ <text_editor name="creation_date" tool_tip="Fecha de creación" value="[date]"/>
+ <text name="price_for_listing_label" value="Precio por publicarlo:"/>
+ <text_editor name="price_for_listing" tool_tip="Precio por publicarlo." value="[price]"/>
+ <layout_stack name="descr_stack">
+ <layout_panel name="clickthrough_layout_panel">
+ <text name="click_through_label" value="Clics:"/>
+ <text_editor name="click_through_text" tool_tip="Información sobre Click through" value="[clicks]"/>
+ </layout_panel>
+ <layout_panel name="price_layout_panel">
+ <text name="auto_renew_label" value="Renovación:"/>
+ <text name="auto_renew" value="Activada"/>
+ </layout_panel>
+ <layout_panel name="descr_layout_panel">
+ <text name="classified_desc_label" value="Descripción:"/>
+ <text_editor name="classified_desc" value="[description]"/>
+ </layout_panel>
+ </layout_stack>
</panel>
</scroll_container>
<panel name="buttons">
diff --git a/indra/newview/skins/default/xui/es/panel_edit_classified.xml b/indra/newview/skins/default/xui/es/panel_edit_classified.xml
index e612104b3f..7afa50c0a2 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_classified.xml
@@ -3,12 +3,20 @@
<panel.string name="location_notice">
(se actualizará tras guardarlo)
</panel.string>
+ <string name="publish_label">
+ Publicar
+ </string>
+ <string name="save_label">
+ Guardar
+ </string>
<text name="title">
Editar el clasificado
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <icon label="" name="edit_icon" tool_tip="Pulsa para elegir una imagen"/>
+ <panel name="snapshot_panel">
+ <icon label="" name="edit_icon" tool_tip="Pulsa para elegir una imagen"/>
+ </panel>
<text name="Name:">
Título:
</text>
@@ -22,12 +30,19 @@
cargando...
</text>
<button label="Configurarlo en esta localización" name="set_to_curr_location_btn"/>
+ <text name="category_label" value="Categoría:"/>
+ <text name="content_type_label" value="Tipo de contenido:"/>
+ <icons_combo_box label="Contenido general" name="content_type">
+ <icons_combo_box.item label="Contenido moderado" name="mature_ci" value="Moderado"/>
+ <icons_combo_box.item label="Contenido general" name="pg_ci" value="General"/>
+ </icons_combo_box>
+ <text name="price_for_listing_label" value="Precio por publicarlo:"/>
<spinner label="L$" name="price_for_listing" tool_tip="Precio por publicarlo." value="50"/>
<check_box label="Renovar automáticamente cada semana" name="auto_renew"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Guardar" name="save_changes_btn"/>
+ <button label="[LABEL]" name="save_changes_btn"/>
<button label="Cancelar" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_pick.xml b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
index 839e9c6023..bde29f1665 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Editar el destacado" name="panel_edit_pick">
+ <panel.string name="location_notice">
+ (se actualizará tras guardarlo)
+ </panel.string>
<text name="title">
Editar el destacado
</text>
@@ -22,7 +25,7 @@
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Guardar [WHAT]" name="save_changes_btn"/>
+ <button label="Guardar el destacado" name="save_changes_btn"/>
<button label="Cancelar" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_profile.xml b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
index e1ff6ec92a..e7bd7aba17 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
@@ -34,9 +34,12 @@
</text>
<check_box label="Mostrarme en los resultados de la búsqueda" name="show_in_search_checkbox"/>
<text name="title_acc_status_text" value="Mi cuenta:"/>
+ <text_editor name="acc_status_text" value="Residente. No ha aportado información de pago."/>
<text name="my_account_link" value="[[URL] Ir a mi Panel de Control]"/>
- <text name="acc_status_text" value="Residente. No ha aportado información de pago."/>
<text name="title_partner_text" value="Mi compañero/a:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(obteniendo)" name="partner_text"/>
+ </panel>
<text name="partner_edit_link" value="[[URL] Editar]"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_friends.xml b/indra/newview/skins/default/xui/es/panel_friends.xml
index 833b71a038..e1cac7c2c3 100644
--- a/indra/newview/skins/default/xui/es/panel_friends.xml
+++ b/indra/newview/skins/default/xui/es/panel_friends.xml
@@ -16,5 +16,5 @@
<button label="Teleporte" name="offer_teleport_btn" tool_tip="Ofrecer a este amigo teleportarle hasta su posición"/>
<button label="Pagar" name="pay_btn" tool_tip="Dar dólares Linden (L$) a este amigo"/>
<button label="Quitar" name="remove_btn" tool_tip="Quitar a esta persona de su lista de amigos"/>
- <button label="Añadir" name="add_btn" tool_tip="Ofrecer ser mi amigo a un residente"/>
+ <button label="Añadir" name="add_btn" tool_tip="Ofrecer amistad a un Residente"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_control_panel.xml b/indra/newview/skins/default/xui/es/panel_group_control_panel.xml
index c55d69b8a7..b398293175 100644
--- a/indra/newview/skins/default/xui/es/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_control_panel.xml
@@ -1,9 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <button label="Perfil del grupo" name="group_info_btn"/>
- <panel name="panel_call_buttons">
- <button label="Llamar al grupo" name="call_btn"/>
- <button label="Colgar" name="end_call_btn"/>
- <button label="Abrir los controles de la voz" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="vertical_stack">
+ <layout_panel name="group_info_btn_panel">
+ <button label="Perfil del grupo" name="group_info_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Llamar al grupo" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Colgar" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Abrir los controles de la voz" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_general.xml b/indra/newview/skins/default/xui/es/panel_group_general.xml
index 4f7c7e599e..66d0c5be93 100644
--- a/indra/newview/skins/default/xui/es/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_general.xml
@@ -11,21 +11,39 @@ Deja el cursor sobre las opciones para ver más ayuda.
<panel.string name="incomplete_member_data_str">
Recuperando los datos de los miembros
</panel.string>
+ <panel name="group_info_top">
+ <texture_picker label="" name="insignia" tool_tip="Pulsa para elegir una imagen"/>
+ <text name="prepend_founded_by">
+ Fundador:
+ </text>
+ <name_box initial_value="(obteniendo)" name="founder_name"/>
+ <text name="join_cost_text">
+ Gratis
+ </text>
+ <button label="¡ENTRA AHORA!" name="btn_join"/>
+ </panel>
<text_editor name="charter">
Carta del grupo
</text_editor>
<name_list name="visible_members">
<name_list.columns label="Miembro" name="name" relwidth="0.40"/>
<name_list.columns label="Etiqueta" name="title" relwidth="0.25"/>
+ <name_list.columns label="Estado" name="status"/>
</name_list>
+ <text name="my_group_settngs_label">
+ Yo
+ </text>
<text name="active_title_label">
- Mi etiqueta
+ Mi etiqueta:
</text>
<combo_box name="active_title" tool_tip="Configura la etiqueta que se verá sobre el nombre de tu avatar cuando tengas activo este grupo."/>
<check_box label="Recibir los avisos del grupo" name="receive_notices" tool_tip="Configura si quieres recibir avisos del grupo. Desmárcalo si este grupo te envía &apos;spam&apos;."/>
<check_box label="Mostrarlo en mi perfil" name="list_groups_in_profile" tool_tip="Configura si quieres que este grupo se vea en tu perfil"/>
<panel name="preferences_container">
- <check_box label="Inscripción libre" name="open_enrollement" tool_tip="Configura si se permite la entrada de nuevos miembros sin ser invitados."/>
+ <text name="group_settngs_label">
+ Grupo
+ </text>
+ <check_box label="Cualquiera puede entrar" name="open_enrollement" tool_tip="Configura si se permite la entrada de nuevos miembros sin ser invitados."/>
<check_box label="Cuota de entrada" name="check_enrollment_fee" tool_tip="Configura si hay que pagar una cuota para entrar al grupo"/>
<spinner label="L$" left_delta="130" name="spin_enrollment_fee" tool_tip="Si la opción Cuota de entrada está marcada, los nuevos miembros han de pagar esta cuota para entrar al grupo." width="60"/>
<combo_box bottom_delta="-38" name="group_mature_check" tool_tip="Establece si la información de su grupo es &apos;mature&apos;." width="150">
diff --git a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml
index be08a1aaa7..872dfb13d7 100644
--- a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Información del grupo" name="GroupInfo">
+<panel label="Perfil del grupo" name="GroupInfo">
<panel.string name="default_needs_apply_text">
- Hay cambios sin guardar en la pestaña actual
+ Hay cambios sin guardar
</panel.string>
<panel.string name="want_apply_text">
¿Quieres guardar estos cambios?
@@ -12,25 +12,24 @@
<panel.string name="group_join_free">
Gratis
</panel.string>
- <text name="group_name" value="(Cargando...)"/>
- <line_editor label="Escribe aquí el nombre de tu nuevo grupo" name="group_name_editor"/>
- <texture_picker label="" name="insignia" tool_tip="Pulsa para elegir una imagen"/>
- <text name="prepend_founded_by">
- Fundador:
- </text>
- <name_box initial_value="(buscando)" name="founder_name"/>
- <text name="join_cost_text">
- Gratis
- </text>
- <button label="¡ENTRA AHORA!" name="btn_join"/>
- <accordion name="groups_accordion">
- <accordion_tab name="group_general_tab" title="General"/>
- <accordion_tab name="group_roles_tab" title="Roles"/>
- <accordion_tab name="group_notices_tab" title="Avisos"/>
- <accordion_tab name="group_land_tab" title="Terreno/Bienes"/>
- </accordion>
- <panel name="button_row">
- <button label="Crear" label_selected="Grupo nuevo" name="btn_create"/>
- <button label="Guardar" label_selected="Guardar" name="btn_apply"/>
+ <panel name="group_info_top">
+ <text name="group_name" value="(Cargando...)"/>
+ <line_editor label="Escribe aquí el nombre de tu nuevo grupo" name="group_name_editor"/>
</panel>
+ <layout_stack name="layout">
+ <layout_panel name="group_accordions">
+ <accordion name="groups_accordion">
+ <accordion_tab name="group_general_tab" title="General"/>
+ <accordion_tab name="group_roles_tab" title="Roles"/>
+ <accordion_tab name="group_notices_tab" title="Avisos"/>
+ <accordion_tab name="group_land_tab" title="Terreno/Bienes"/>
+ </accordion>
+ </layout_panel>
+ <layout_panel name="button_row">
+ <button label="Chat" name="btn_chat"/>
+ <button label="Llamar al grupo" name="btn_call" tool_tip="Llama a este grupo"/>
+ <button label="Guardar" label_selected="Guardar" name="btn_apply"/>
+ <button label="Crear un grupo" name="btn_create" tool_tip="Crea un grupo nuevo"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_invite.xml b/indra/newview/skins/default/xui/es/panel_group_invite.xml
index 08993d6ed8..0d877f78f2 100644
--- a/indra/newview/skins/default/xui/es/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_invite.xml
@@ -7,17 +7,14 @@
(cargando...)
</panel.string>
<panel.string name="already_in_group">
- No se invitará a algunos avatares porque ya están en el grupo.
+ Alguno de los Residentes que has elegido ya están en el grupo: no se les enviará la invitación.
</panel.string>
<text bottom_delta="-96" height="72" name="help_text" width="214">
- Puede seleccionar a varios residentes
-para invitarles a su grupo. Para
-empezar, pulse &apos;Abrir el selector de
-residentes&apos;.
+ Puedes elegir a varios Residentes para invitarles a tu grupo. Para empezar, pulsa &apos;Abrir el selector de residentes&apos;.
</text>
<button bottom_delta="-10" label="Abrir el selector de residentes" name="add_button" tool_tip=""/>
- <name_list bottom_delta="-160" height="156" name="invitee_list" tool_tip="Apretando la tecla Ctrl, pulsa en los nombres de los residentes para elegir a varios"/>
- <button label="Eliminar de la lista a los seleccionados" left_delta="-7" name="remove_button" tool_tip="Quitar a los residentes seleccionados de la lista de invitaciones" width="214"/>
+ <name_list bottom_delta="-160" height="156" name="invitee_list" tool_tip="Para seleccionar a varios residentes, ve pulsando sus nombres mientras mantienes apretada la tecla Ctrl"/>
+ <button label="Eliminar de la lista a los seleccionados" left_delta="-7" name="remove_button" tool_tip="Quitar de la lista a los Residentes seleccionados arriba" width="214"/>
<text name="role_text">
Elegir qué rol asignarles:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_group_land_money.xml b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
index 2ad290b49f..b763e2e74d 100644
--- a/indra/newview/skins/default/xui/es/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
@@ -1,65 +1,62 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Terreno y L$" name="land_money_tab">
- <string name="help_text">
+ <panel.string name="help_text">
Aparece una advertencia si el Terreno total en uso es menor que o igual a la Contribución total.
- </string>
- <button label="?" name="help_button"/>
- <string name="cant_view_group_land_text">
+ </panel.string>
+ <panel.string name="cant_view_group_land_text">
No tienes permiso para ver el terreno propiedad del grupo
- </string>
- <string name="cant_view_group_accounting_text">
+ </panel.string>
+ <panel.string name="cant_view_group_accounting_text">
No tienes permiso para ver la información de la cuenta del grupo.
- </string>
- <string name="loading_txt">
+ </panel.string>
+ <panel.string name="loading_txt">
Cargando...
- </string>
- <text name="group_land_heading" width="250">
- Terreno propiedad del grupo
- </text>
- <scroll_list name="group_parcel_list">
- <column label="Parcela" name="name" width="100"/>
- <column label="Región" name="location" width="100"/>
- <column label="Tipo" name="type" width="100"/>
- <column label="Superficie" name="area" width="81"/>
- <column label="" name="hidden"/>
- </scroll_list>
- <button label="Mapa" label_selected="Mapa" left="282" name="map_button" width="130"/>
- <text name="total_contributed_land_label">
- Contribución total:
- </text>
- <text name="total_contributed_land_value">
- [AREA] m²
- </text>
- <text name="total_land_in_use_label">
- Terreno total en uso:
- </text>
- <text name="total_land_in_use_value">
- [AREA] m²
- </text>
- <text name="land_available_label">
- Terreno disponible:
- </text>
- <text name="land_available_value">
- [AREA] m²
- </text>
- <text name="your_contribution_label">
- Tu contribución:
- </text>
- <string name="land_contrib_error">
+ </panel.string>
+ <panel.string name="land_contrib_error">
No se ha podido definir tu contribución de terreno
- </string>
- <text name="your_contribution_units">
- m²
- </text>
- <text name="your_contribution_max_value">
- ([AMOUNT] máx.)
- </text>
- <text name="group_over_limit_text">
- Se necesitan más créditos de terreno para mantener el terreno en uso
- </text>
- <text name="group_money_heading">
- L$ del grupo
- </text>
+ </panel.string>
+ <panel name="layout_panel_landmoney">
+ <scroll_list name="group_parcel_list">
+ <scroll_list.columns label="Parcela" name="name"/>
+ <scroll_list.columns label="Región" name="location"/>
+ <scroll_list.columns label="Tipo" name="type"/>
+ <scroll_list.columns label="Ãrea" name="area"/>
+ </scroll_list>
+ <text name="total_contributed_land_label">
+ Contribución total:
+ </text>
+ <text name="total_contributed_land_value">
+ [AREA] m²
+ </text>
+ <button label="Mapa" label_selected="Mapa" name="map_button"/>
+ <text name="total_land_in_use_label">
+ Terreno total en uso:
+ </text>
+ <text name="total_land_in_use_value">
+ [AREA] m²
+ </text>
+ <text name="land_available_label">
+ Terreno disponible:
+ </text>
+ <text name="land_available_value">
+ [AREA] m²
+ </text>
+ <text name="your_contribution_label">
+ Tu contribución:
+ </text>
+ <text name="your_contribution_units">
+ m²
+ </text>
+ <text name="your_contribution_max_value">
+ ([AMOUNT] máx.)
+ </text>
+ <text name="group_over_limit_text">
+ Se necesitan más créditos de terreno para mantener el terreno en uso
+ </text>
+ <text name="group_money_heading">
+ L$ del grupo
+ </text>
+ </panel>
<tab_container name="group_money_tab_container">
<panel label="RESUMEN" name="group_money_planning_tab">
<text_editor name="group_money_planning_text">
diff --git a/indra/newview/skins/default/xui/es/panel_group_list_item.xml b/indra/newview/skins/default/xui/es/panel_group_list_item.xml
index 4b6373f6ce..5c9f1c3688 100644
--- a/indra/newview/skins/default/xui/es/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_list_item.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="group_list_item">
<text name="group_name" value="Desconocido"/>
+ <button name="profile_btn" tool_tip="Ver el perfil"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_notices.xml b/indra/newview/skins/default/xui/es/panel_group_notices.xml
index 02365fc698..58e1919782 100644
--- a/indra/newview/skins/default/xui/es/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_notices.xml
@@ -36,7 +36,7 @@ El máximo es de 200 por día y grupo.
<text name="string">
Arrastra y suelta aquí un ítem para adjuntarlo:
</text>
- <button label="Quitar" label_selected="Remover lo anexado" name="remove_attachment"/>
+ <button label="Quitar" label_selected="Remover lo anexado" name="remove_attachment" tool_tip="Quita el adjunto de tu aviso"/>
<button label="Enviar" label_selected="Enviar" name="send_notice"/>
<group_drop_target name="drop_target" tool_tip="Para enviar un ítem con el aviso, arrástralo desde tu inventario hasta este cajetín. Para poder adjuntarlo, debes tener permiso para copiarlo y transferirlo."/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_roles.xml b/indra/newview/skins/default/xui/es/panel_group_roles.xml
index 29d96d8d9e..5ef81162bc 100644
--- a/indra/newview/skins/default/xui/es/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_roles.xml
@@ -1,27 +1,27 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Miembros y Roles" name="roles_tab">
<panel.string name="default_needs_apply_text">
- En esta pestaña hay cambios sin guardar
+ Hay cambios sin guardar
</panel.string>
<panel.string name="want_apply_text">
¿Quieres guardar estos cambios?
</panel.string>
- <tab_container height="164" name="roles_tab_container">
- <panel height="148" label="MIEMBROS" name="members_sub_tab" tool_tip="Miembros">
+ <tab_container name="roles_tab_container">
+ <panel label="MIEMBROS" name="members_sub_tab" tool_tip="Miembros">
<panel.string name="help_text">
Puede añadir o quitar los roles asignados a los miembros.
Seleccione varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada uno de ellos.
</panel.string>
<filter_editor label="Filtrar los miembros" name="filter_input"/>
- <name_list bottom_delta="-105" height="104" name="member_list">
+ <name_list name="member_list">
<name_list.columns label="Miembro" name="name"/>
<name_list.columns label="Donaciones" name="donated"/>
<name_list.columns label="Estatus" name="online"/>
</name_list>
- <button label="Invitar" name="member_invite" width="175"/>
+ <button label="Invitar" name="member_invite"/>
<button label="Expulsar" name="member_eject"/>
</panel>
- <panel height="148" label="ROLES" name="roles_sub_tab">
+ <panel label="ROLES" name="roles_sub_tab">
<panel.string name="help_text">
Los roles tienen una etiqueta propia y unas capacidades que se
permiten ejercer a sus miembros. Los miembros pueden
@@ -35,7 +35,7 @@ incluyendo el de Todos y el de Propietarios.
Inv_FolderClosed
</panel.string>
<filter_editor label="Filtrar los roles" name="filter_input"/>
- <scroll_list bottom_delta="-104" height="104" name="role_list">
+ <scroll_list name="role_list">
<scroll_list.columns label="Rol" name="name"/>
<scroll_list.columns label="Etiqueta" name="title"/>
<scroll_list.columns label="#" name="members"/>
@@ -56,7 +56,7 @@ incluyendo el de Todos y el de Propietarios.
</tab_container>
<panel name="members_footer">
<text name="static">
- Miembros asignados
+ Roles asignados
</text>
<scroll_list name="member_assigned_roles">
<scroll_list.columns label="" name="checkbox"/>
diff --git a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml b/indra/newview/skins/default/xui/es/panel_im_control_panel.xml
index 5f69c50b73..7d4db6a630 100644
--- a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/es/panel_im_control_panel.xml
@@ -1,13 +1,29 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Desconocido"/>
- <button label="Perfil" name="view_profile_btn"/>
- <button label="Añadir como amigo" name="add_friend_btn"/>
- <button label="Teleportarse" name="teleport_btn"/>
- <button label="Compartir" name="share_btn"/>
- <panel name="panel_call_buttons">
- <button label="Llamada" name="call_btn"/>
- <button label="Colgar" name="end_call_btn"/>
- <button label="Controles de Voz" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="button_stack">
+ <layout_panel name="view_profile_btn_panel">
+ <button label="Perfil" name="view_profile_btn"/>
+ </layout_panel>
+ <layout_panel name="add_friend_btn_panel">
+ <button label="Añadir como amigo" name="add_friend_btn"/>
+ </layout_panel>
+ <layout_panel name="teleport_btn_panel">
+ <button label="Teleportarme" name="teleport_btn" tool_tip="Ofrecer teleporte a esta persona"/>
+ </layout_panel>
+ <layout_panel name="share_btn_panel">
+ <button label="Compartir" name="share_btn"/>
+ </layout_panel>
+ <layout_panel name="pay_btn_panel">
+ <button label="Pagar" name="pay_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Llamar" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Colgar" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Controles de la voz" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_landmark_info.xml b/indra/newview/skins/default/xui/es/panel_landmark_info.xml
index c4d9d4a2b3..49a9f84cfe 100644
--- a/indra/newview/skins/default/xui/es/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/es/panel_landmark_info.xml
@@ -18,6 +18,7 @@
<string name="acquired_date">
[wkday,datetime,local][day,datetime,local] [mth,datetime,local] [year,datetime,local][hour,datetime,local]:[min,datetime,local]:[second,datetime,local]
</string>
+ <button name="back_btn" tool_tip="Atrás"/>
<text name="title" value="Añadir el perfil"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
diff --git a/indra/newview/skins/default/xui/es/panel_landmarks.xml b/indra/newview/skins/default/xui/es/panel_landmarks.xml
index 8c2aa96b3b..8f476403c7 100644
--- a/indra/newview/skins/default/xui/es/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/es/panel_landmarks.xml
@@ -2,7 +2,7 @@
<panel name="Landmarks">
<accordion name="landmarks_accordion">
<accordion_tab name="tab_favorites" title="Barra de favoritos"/>
- <accordion_tab name="tab_landmarks" title="Hitos"/>
+ <accordion_tab name="tab_landmarks" title="Mis hitos"/>
<accordion_tab name="tab_inventory" title="Mi Inventario"/>
<accordion_tab name="tab_library" title="Biblioteca"/>
</accordion>
diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml
index 5485575aec..0e4f118605 100644
--- a/indra/newview/skins/default/xui/es/panel_login.xml
+++ b/indra/newview/skins/default/xui/es/panel_login.xml
@@ -12,19 +12,29 @@
Nombre:
</text>
<line_editor label="Nombre" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/>
+ <text name="last_name_text">
+ Apellido:
+ </text>
<line_editor label="Apellido" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/>
- <check_box label="Recordar" name="remember_check"/>
+ <text name="password_text">
+ Contraseña:
+ </text>
+ <check_box label="Recordar la contraseña" name="remember_check"/>
<text name="start_location_text">
Empezar en:
</text>
<combo_box name="start_location_combo">
+ <combo_box.item label="Mi última posición" name="MyLastLocation"/>
<combo_box.item label="Mi Base" name="MyHome"/>
</combo_box>
<button label="Iniciar sesión" name="connect_btn"/>
</layout_panel>
<layout_panel name="links">
<text name="create_new_account_text">
- Registrarse
+ Registrarme
+ </text>
+ <text name="forgot_password_text">
+ ¿Olvidaste el nombre o la contraseña?
</text>
<text name="login_help">
¿Necesitas ayuda para conectarte?
diff --git a/indra/newview/skins/default/xui/es/panel_main_inventory.xml b/indra/newview/skins/default/xui/es/panel_main_inventory.xml
index 8656098467..3a1e96a821 100644
--- a/indra/newview/skins/default/xui/es/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/es/panel_main_inventory.xml
@@ -1,18 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Cosas" name="main inventory panel">
- <panel.string name="Title">
- Cosas
+ <panel.string name="ItemcountFetching">
+ Obtenidos [ITEM_COUNT] ítems... [FILTER]
</panel.string>
- <filter_editor label="Filtrar" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="Todos los ítems" name="All Items"/>
- <inventory_panel label="Ãtems recientes" name="Recent Items"/>
- </tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostrar más opciones"/>
- <button name="add_btn" tool_tip="Añadir un ítem nuevo"/>
- <dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/>
- </panel>
+ <panel.string name="ItemcountCompleted">
+ [ITEM_COUNT] ítems [FILTER]
+ </panel.string>
+ <text name="ItemcountText">
+ Ãtems:
+ </text>
<menu_bar name="Inventory Menu">
<menu label="Archivo" name="File">
<menu_item_call label="Abrir" name="Open"/>
@@ -61,4 +57,14 @@
<menu_item_check label="Las carpetas del sistema, arriba" name="System Folders To Top"/>
</menu>
</menu_bar>
+ <filter_editor label="Filtrar" name="inventory search editor"/>
+ <tab_container name="inventory filter tabs">
+ <inventory_panel label="Todos los ítems" name="All Items"/>
+ <inventory_panel label="Ãtems recientes" name="Recent Items"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Mostrar más opciones"/>
+ <button name="add_btn" tool_tip="Añadir un ítem nuevo"/>
+ <dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_me.xml b/indra/newview/skins/default/xui/es/panel_me.xml
index fe5c91bafe..ed253904aa 100644
--- a/indra/newview/skins/default/xui/es/panel_me.xml
+++ b/indra/newview/skins/default/xui/es/panel_me.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Mi perfil" name="panel_me">
<tab_container name="tabs">
- <panel label="PERFIL" name="panel_profile"/>
- <panel label="Destacados" name="panel_picks"/>
+ <panel label="MI PERFIL" name="panel_profile"/>
+ <panel label="MIS DESTACADOS" name="panel_picks"/>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_general.xml b/indra/newview/skins/default/xui/es/panel_media_settings_general.xml
index 3cf10e0e2c..46326d1e8b 100644
--- a/indra/newview/skins/default/xui/es/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_media_settings_general.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="General" name="Media Settings General">
<text name="home_label">
- Web:
+ Página inicial:
</text>
<text name="home_fails_whitelist_label">
(La Lista Blanca especificada no aprueba esta página)
@@ -13,7 +13,7 @@
<text name="current_url_label">
Página actual:
</text>
- <text name="current_url" tool_tip="La página actual para el origen de este media" value=""/>
+ <text name="current_url" tool_tip="Página actual para el origen de este media" value=""/>
<button label="Definir" name="current_url_reset_btn"/>
<check_box initial_value="false" label="Media en bucle" name="auto_loop"/>
<check_box initial_value="false" label="A la primera pulsación" name="first_click_interact"/>
diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_security.xml b/indra/newview/skins/default/xui/es/panel_media_settings_security.xml
index f4debc88fc..c72f562a68 100644
--- a/indra/newview/skins/default/xui/es/panel_media_settings_security.xml
+++ b/indra/newview/skins/default/xui/es/panel_media_settings_security.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Seguridad" name="Media Settings Security">
- <check_box initial_value="false" label="Permitir el acceso sólo a estas URL (según prefijo)" name="whitelist_enable"/>
+ <check_box initial_value="false" label="Permitir el acceso sólo a los patrones de URL especificados" name="whitelist_enable"/>
<text name="home_url_fails_some_items_in_whitelist">
Están marcadas las entradas que la página web no admite:
</text>
<button label="Añadir" name="whitelist_add"/>
<button label="Borrar" name="whitelist_del"/>
<text name="home_url_fails_whitelist">
- Atención: la página web especificada en la pestaña General no se admite en esta Lista Blanca. Se ha desactivado hasta que se añada una entrada correcta.
+ Atención: la página web especificada en la pestaña General no se admite en esta lista blanca. Se ha desactivado hasta que se añada una entrada correcta.
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_my_profile.xml b/indra/newview/skins/default/xui/es/panel_my_profile.xml
index 41623e8acb..5a6fd8b144 100644
--- a/indra/newview/skins/default/xui/es/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_my_profile.xml
@@ -1,37 +1,35 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Perfil" name="panel_profile">
<string name="no_partner_text" value="Ninguno/a"/>
+ <string name="no_group_text" value="Ninguno"/>
<string name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <panel name="second_life_image_panel">
- <icon label="" name="2nd_life_edit_icon" tool_tip="Pulsa el botón Editar el perfil para cambiar la imagen"/>
- </panel>
- <panel name="first_life_image_panel">
- <icon label="" name="real_world_edit_icon" tool_tip="Pulsa el botón Editar el perfil para cambiar la imagen"/>
- <text name="title_rw_descr_text" value="Mundo real:"/>
- </panel>
- <text name="me_homepage_text">
- Página web:
- </text>
- <text name="title_member_text" value="Miembro desde:"/>
- <text name="title_acc_status_text" value="Estado de la cuenta:"/>
- <text name="acc_status_text" value="Residente. No ha aportado información de pago."/>
- <text name="title_partner_text" value="Compañero/a:"/>
- <text name="title_groups_text" value="Grupos:"/>
- </panel>
- </scroll_container>
- <panel name="profile_buttons_panel">
- <button label="Añadir como amigo" name="add_friend"/>
- <button label="MI" name="im"/>
- <button label="Llamada" name="call"/>
- <button label="Mapa" name="show_on_map_btn"/>
- <button label="Teleporte" name="teleport"/>
- </panel>
- <panel name="profile_me_buttons_panel">
- <button label="Editar el perfil" name="edit_profile_btn" tool_tip="Edita tu información personal"/>
- <button label="Editar la apariencia" name="edit_appearance_btn" tool_tip="Crea o edita tu apariencia: físico, ropas, etc."/>
- </panel>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <panel name="second_life_image_panel">
+ <icon label="" name="2nd_life_edit_icon" tool_tip="Pulsa el botón Editar el perfil para cambiar la imagen"/>
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <icon label="" name="real_world_edit_icon" tool_tip="Pulsa el botón Editar el perfil para cambiar la imagen"/>
+ <text name="title_rw_descr_text" value="Mundo real:"/>
+ </panel>
+ <text name="title_member_text" value="Residente desde:"/>
+ <text name="title_acc_status_text" value="Estado de la cuenta:"/>
+ <text name="title_partner_text" value="Compañero/a:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(obteniendo)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Grupos:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Editar el perfil" name="edit_profile_btn" tool_tip="Modificar tu información personal"/>
+ <button label="Modificar la apariencia" name="edit_appearance_btn" tool_tip="Crear o modificar tu apariencia: tu físico, ropas, etc."/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_navigation_bar.xml b/indra/newview/skins/default/xui/es/panel_navigation_bar.xml
index 8e595096d9..e8e95c3bac 100644
--- a/indra/newview/skins/default/xui/es/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/es/panel_navigation_bar.xml
@@ -1,15 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="navigation_bar">
<panel name="navigation_panel">
- <button name="back_btn" tool_tip="Volver a lo localización anterior"/>
- <button name="forward_btn" tool_tip="Ir una localización adelante"/>
+ <pull_button name="back_btn" tool_tip="Volver a lo localización anterior"/>
+ <pull_button name="forward_btn" tool_tip="Ir una localización adelante"/>
<button name="home_btn" tool_tip="Teleportar a mi Base"/>
<location_input label="Localización" name="location_combo"/>
<search_combo_box label="Buscar" name="search_combo_box" tool_tip="Buscar">
<combo_editor label="Buscar en [SECOND_LIFE]" name="search_combo_editor"/>
</search_combo_box>
</panel>
- <favorites_bar name="favorite">
+ <favorites_bar name="favorite" tool_tip="¡Accede rápidamente a tus lugares favoritos de Second Life arrastrando hitos hasta aquí!">
+ <label name="favorites_bar_label" tool_tip="¡Accede rápidamente a tus lugares favoritos de Second Life arrastrando hitos hasta aquí!">
+ Barra de Favoritos
+ </label>
<chevron_button name="&gt;&gt;" tool_tip="Ver más de Mis favoritos"/>
</favorites_bar>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml
index 1df45108ab..af2b6e920b 100644
--- a/indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml
@@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="chat_bar">
- <string name="min_width">
- 192
- </string>
- <string name="max_width">
- 320
- </string>
<line_editor label="Pulsa aquí para chatear." name="chat_box" tool_tip="Pulsa Enter para decirlo o Ctrl+Enter para gritarlo"/>
<button name="show_nearby_chat" tool_tip="Muestra o esconde el registro del chat"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_media.xml b/indra/newview/skins/default/xui/es/panel_nearby_media.xml
new file mode 100644
index 0000000000..9bd90572d7
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_nearby_media.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="nearby_media">
+ <string name="empty_item_text">
+ &lt;vacío&gt;
+ </string>
+ <string name="parcel_media_name">
+ Media en streaming de la parcela
+ </string>
+ <string name="parcel_audio_name">
+ Audio en streaming de la parcela
+ </string>
+ <string name="playing_suffix">
+ (ejecutándose)
+ </string>
+ <panel name="minimized_controls">
+ <button label="Parar todo" name="all_nearby_media_disable_btn" tool_tip="Apagar todos los media cercanos"/>
+ <button label="Iniciar todo" name="all_nearby_media_enable_btn" tool_tip="Encender todos los media cercanos"/>
+ <button name="open_prefs_btn" tool_tip="Abrir las preferencias de los media"/>
+ <button label="Más &gt;&gt;" label_selected="Menos &lt;&lt;" name="more_less_btn" tool_tip="Controles avanzados"/>
+ </panel>
+ <panel name="nearby_media_panel">
+ <text name="nearby_media">
+ Media cercanos
+ </text>
+ <text name="show">
+ Mostrar:
+ </text>
+ <combo_box name="show_combo">
+ <combo_box.item label="Todo" name="All"/>
+ <combo_box.item label="En esta parcela" name="WithinParcel"/>
+ <combo_box.item label="Fuera de la parcela" name="OutsideParcel"/>
+ <combo_box.item label="En otros avatares" name="OnOthers"/>
+ </combo_box>
+ <scroll_list name="media_list">
+ <scroll_list.columns label="Cercanía" name="media_proximity"/>
+ <scroll_list.columns label="Visibilidad" name="media_visibility"/>
+ <scroll_list.columns label="Clase" name="media_class"/>
+ <scroll_list.columns label="Nombre" name="media_name"/>
+ <scroll_list.columns label="Depurar" name="media_debug"/>
+ </scroll_list>
+ <panel name="media_controls_panel">
+ <layout_stack name="media_controls">
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Parar los media seleccionados"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Ejecutar los media seleccionados"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Pausar los media seleccionados"/>
+ </layout_panel>
+ <layout_panel name="volume_slider_ctrl">
+ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volumen de los media seleccionados"/>
+ </layout_panel>
+ <layout_panel name="mute">
+ <button name="mute_btn" tool_tip="Silenciar el audio de los media seleccionados"/>
+ </layout_panel>
+ <layout_panel name="zoom">
+ <button name="zoom_btn" tool_tip="Zoom en los media seleccionados"/>
+ </layout_panel>
+ <layout_panel name="unzoom">
+ <button name="unzoom_btn" tool_tip="Alejar el zoom de los media seleccionados"/>
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_notes.xml b/indra/newview/skins/default/xui/es/panel_notes.xml
index 26d5a044c3..bf8da4cf73 100644
--- a/indra/newview/skins/default/xui/es/panel_notes.xml
+++ b/indra/newview/skins/default/xui/es/panel_notes.xml
@@ -13,10 +13,10 @@
</scroll_container>
</panel>
<panel name="notes_buttons_panel">
- <button label="Añadir" name="add_friend" tool_tip="Ofrecer amistad al residente"/>
+ <button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/>
<button label="MI" name="im" tool_tip="Abrir un mensaje instantáneo"/>
- <button label="Llamada" name="call" tool_tip="Llamar a este residente"/>
- <button label="Mapa" name="show_on_map_btn" tool_tip="Ver al residente en el mapa"/>
+ <button label="Llamada" name="call" tool_tip="Llamar a este Residente"/>
+ <button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/>
<button label="Teleportar" name="teleport" tool_tip="Ofrecer teleporte"/>
</panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/es/panel_online_status.xml b/indra/newview/skins/default/xui/es/panel_online_status.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_online_status.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/es/panel_online_status_toast.xml b/indra/newview/skins/default/xui/es/panel_online_status_toast.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_online_status_toast.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
index 7d966bba37..2f60df7743 100644
--- a/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
@@ -1,7 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="Outfits">
- <accordion name="outfits_accordion">
- <accordion_tab name="tab_cof" title="Vestuario actual"/>
- <accordion_tab name="tab_outfits" title="Mis vestuarios"/>
- </accordion>
+<panel label="Cosas" name="Outfits">
+ <tab_container name="appearance_tabs">
+ <inventory_panel label="MIS VESTUARIOS" name="outfitslist_tab"/>
+ <inventory_panel label="PUESTO" name="cof_tab"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Ver más opciones"/>
+ <dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/>
+ <button label="Guardar el vestuario" name="make_outfit_btn" tool_tip="Guardar la apariencia como un vestuario"/>
+ <button label="Ponerme" name="wear_btn" tool_tip="Ponerme el vestuario seleccionado"/>
+ <button label="M" name="look_edit_btn"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml
index 8fc265504b..8f805c3d18 100644
--- a/indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml
@@ -4,6 +4,6 @@
<menu_item_call label="Añadir al vestuario actual" name="add"/>
<menu_item_call label="Quitar del vestuario actual" name="remove"/>
<menu_item_call label="Renombrar" name="rename"/>
- <menu_item_call label="Quitar" name="remove_link"/>
- <menu_item_call label="Borrar" name="delete"/>
+ <menu_item_call label="Quitar el enlace" name="remove_link"/>
+ <menu_item_call label="Borrar el vestuario" name="delete"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index 35a6c4f641..6008c6a934 100644
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -5,29 +5,34 @@
<string name="no_one_near" value="No hay nadie cerca"/>
<string name="no_friends_online" value="No hay amigos conectados"/>
<string name="no_friends" value="No hay amigos"/>
- <string name="no_groups" value="No hay grupos"/>
<string name="people_filter_label" value="Filtrar a la gente"/>
<string name="groups_filter_label" value="Filtrar a los grupos"/>
+ <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Intenta encontrar el grupo con una búsqueda]"/>
+ <string name="no_groups_msg" value="[secondlife:///app/search/groups Intenta encontrar grupos a los que unirte.]"/>
<filter_editor label="Filtrar" name="filter_input"/>
<tab_container name="tabs">
- <panel label="CERCANÃA" name="nearby_panel">
+ <panel label="CERCANA" name="nearby_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="nearby_view_sort_btn" tool_tip="Opciones"/>
- <button name="add_friend_btn" tool_tip="Añadir a tu lista de amigos al residente seleccionado"/>
+ <button name="add_friend_btn" tool_tip="Añadir al Residente seleccionado a la lista de tus amigos"/>
</panel>
</panel>
- <panel label="AMIGOS" name="friends_panel">
+ <panel label="MIS AMIGOS" name="friends_panel">
<accordion name="friends_accordion">
<accordion_tab name="tab_online" title="Conectado"/>
- <accordion_tab name="tab_all" title="Todas"/>
+ <accordion_tab name="tab_all" title="Todos"/>
</accordion>
<panel label="bottom_panel" name="bottom_panel">
<button name="friends_viewsort_btn" tool_tip="Opciones"/>
- <button name="add_btn" tool_tip="Ofrecer amistad a un residente"/>
+ <button name="add_btn" tool_tip="Ofrecer amistad a un Residente"/>
<button name="del_btn" tool_tip="Quitar a la persona seleccionada de tu lista de amigos"/>
</panel>
+ <text name="no_friends_msg">
+ Para añadir amigos, prueba a hacer una [secondlife:///app/search/people búsqueda general] o pulsa en un usuario para añadirle como amigo.
+Si estás buscando gente para pasar el rato, [secondlife:///app/worldmap usa el mapa].
+ </text>
</panel>
- <panel label="GRUPOS" name="groups_panel">
+ <panel label="MIS GRUPOS" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="groups_viewsort_btn" tool_tip="Opciones"/>
<button name="plus_btn" tool_tip="Entrar en un grupo o crear uno"/>
@@ -37,17 +42,18 @@
<panel label="RECIENTE" name="recent_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="recent_viewsort_btn" tool_tip="Opciones"/>
- <button name="add_friend_btn" tool_tip="Añadir a tu lista de amigos al residente seleccionado"/>
+ <button name="add_friend_btn" tool_tip="Añadir al Residente seleccionado a la lista de tus amigos"/>
</panel>
</panel>
</tab_container>
<panel name="button_bar">
- <button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imagen, grupos y otra información de los residentes"/>
+ <button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
<button label="MI" name="im_btn" tool_tip="Abrir un mensaje instantáneo"/>
- <button label="Llamada" name="call_btn" tool_tip="Llamar a este residente"/>
+ <button label="Llamada" name="call_btn" tool_tip="Llamar a este Residente"/>
<button label="Compartir" name="share_btn"/>
<button label="Teleportarse" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
<button label="Perfil del grupo" name="group_info_btn" tool_tip="Ver la información del grupo"/>
<button label="Chat de grupo" name="chat_btn" tool_tip="Abrir el chat"/>
+ <button label="Multiconferencia" name="group_call_btn" tool_tip="Llamar a este grupo"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_place_profile.xml b/indra/newview/skins/default/xui/es/panel_place_profile.xml
index ad1b832979..6fe7895d45 100644
--- a/indra/newview/skins/default/xui/es/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_place_profile.xml
@@ -6,7 +6,7 @@
<string name="available" value="disponible"/>
<string name="allocated" value="asignados"/>
<string name="title_place" value="Añadir el perfil"/>
- <string name="title_teleport_history" value="Localización del historial de teleportes"/>
+ <string name="title_teleport_history" value="Historial de teleportes"/>
<string name="not_available" value="(No disp.)"/>
<string name="unknown" value="(desconocido)"/>
<string name="public" value="(público)"/>
@@ -41,6 +41,7 @@
<string name="acquired_date">
[wkday,datetime,local][day,datetime,local] [mth,datetime,local] [year,datetime,local][hour,datetime,local]:[min,datetime,local]:[second,datetime,local]
</string>
+ <button name="back_btn" tool_tip="Atrás"/>
<text name="title" value="Añadir el perfil"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
@@ -48,7 +49,7 @@
<text name="maturity_value" value="desconocido"/>
<accordion name="advanced_info_accordion">
<accordion_tab name="parcel_characteristics_tab" title="Parcela">
- <panel>
+ <panel name="parcel_characteristics_panel">
<text name="rating_label" value="Calificación:"/>
<text name="rating_value" value="desconocida"/>
<text name="voice_label" value="Voz:"/>
@@ -67,17 +68,24 @@
</panel>
</accordion_tab>
<accordion_tab name="region_information_tab" title="Región">
- <panel>
+ <panel name="region_information_panel">
<text name="region_name_label" value="Región:"/>
+ <text name="region_name" value="Mooseland"/>
<text name="region_type_label" value="Tipo:"/>
+ <text name="region_type" value="Moose"/>
<text name="region_rating_label" value="Calificación:"/>
+ <text name="region_rating" value="Adulto"/>
<text name="region_owner_label" value="Propietario:"/>
+ <text name="region_owner" value="moose Van Moose"/>
<text name="region_group_label" value="Grupo:"/>
+ <text name="region_group">
+ The Mighty Moose of mooseville soundvillemoose
+ </text>
<button label="Región/Estado" name="region_info_btn"/>
</panel>
</accordion_tab>
<accordion_tab name="estate_information_tab" title="Estado">
- <panel>
+ <panel name="estate_information_panel">
<text name="estate_name_label" value="Estado:"/>
<text name="estate_rating_label" value="Calificación:"/>
<text name="estate_owner_label" value="Propietario:"/>
@@ -85,7 +93,7 @@
</panel>
</accordion_tab>
<accordion_tab name="sales_tab" title="En venta">
- <panel>
+ <panel name="sales_panel">
<text name="sales_price_label" value="Precio:"/>
<text name="area_label" value="Ãrea:"/>
<text name="traffic_label" value="Tráfico:"/>
diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml
index 4a64fa3320..4818bff069 100644
--- a/indra/newview/skins/default/xui/es/panel_places.xml
+++ b/indra/newview/skins/default/xui/es/panel_places.xml
@@ -2,13 +2,14 @@
<panel label="Lugares" name="places panel">
<string name="landmarks_tab_title" value="MIS HITOS"/>
<string name="teleport_history_tab_title" value="HISTORIAL DE TELEPORTES"/>
- <filter_editor label="Filtrar los lugares" name="Filter"/>
+ <filter_editor label="Filtrar mis lugares" name="Filter"/>
<panel name="button_panel">
- <button label="Teleporte" name="teleport_btn"/>
+ <button label="Teleporte" name="teleport_btn" tool_tip="Teleportar a la zona elegida"/>
<button label="Mapa" name="map_btn"/>
- <button label="Editar" name="edit_btn"/>
- <button label="Cerrar" name="close_btn"/>
- <button label="Cancelar" name="cancel_btn"/>
+ <button label="Editar" name="edit_btn" tool_tip="Editar la información del hito"/>
+ <button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>
<button label="Guardar" name="save_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+ <button label="Cerrar" name="close_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
index 3dc6cad90e..a7c13b05b6 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
@@ -1,48 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
-<panel name="advanced">
- <panel.string name="resolution_format">
- [RES_X] x [RES_Y]
- </panel.string>
+<panel label="Avanzado" name="advanced">
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
- <check_box label="Bocadillos del chat" name="bubble_text_chat"/>
- <color_swatch name="background" tool_tip="Elegir el color de los bocadillos del chat"/>
- <slider label="Opacidad" name="bubble_chat_opacity"/>
- <text name="AspectRatioLabel1" tool_tip="ancho / alto">
- Proporción
- </text>
- <combo_box name="aspect_ratio" tool_tip="ancho / alto">
- <combo_box.item label="4:3 (Standard CRT)" name="item1"/>
- <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
- <combo_box.item label="8:5 (Widescreen)" name="item3"/>
- <combo_box.item label="16:9 (Widescreen)" name="item4"/>
- </combo_box>
- <check_box label="Detectar automáticamente" name="aspect_auto_detect"/>
- <text name="heading1">
- Cámara:
- </text>
+ <panel.string name="middle_mouse">
+ Botón medio del ratón
+ </panel.string>
<slider label="Ãngulo de visión" name="camera_fov"/>
<slider label="Distancia" name="camera_offset_scale"/>
<text name="heading2">
- Posicionamiento automático para:
+ Posición automática para:
</text>
<check_box label="Construir/Editar" name="edit_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara al entrar en o salir del modo de edición"/>
<check_box label="Apariencia" name="appearance_camera_movement" tool_tip="Usar el posicionamiento automático de la cámara mientras se está editando"/>
- <text name="heading3">
- Avatares:
- </text>
<check_box label="Verme en vista subjetiva" name="first_person_avatar_visible"/>
<check_box label="Las teclas del cursor siempre para moverme" name="arrow_keys_move_avatar_check"/>
<check_box label="Correr siempre: atajo de teclado" name="tap_tap_hold_to_run"/>
<check_box label="Al hablar, mover los labios del avatar" name="enable_lip_sync"/>
- <check_box label="Mostrar los errores de los scripts" name="show_script_errors"/>
+ <check_box label="Chat en bocadillos" name="bubble_text_chat"/>
+ <slider label="Opacidad" name="bubble_chat_opacity"/>
+ <color_swatch name="background" tool_tip="Elegir el color de los bocadillos del chat"/>
+ <check_box label="Mostrar los errores de los scripts en:" name="show_script_errors"/>
<radio_group name="show_location">
- <radio_item label="En el chat" name="0"/>
- <radio_item label="En una ventana" name="1"/>
+ <radio_item label="Chat" name="0"/>
+ <radio_item label="Ventanas distintas" name="1"/>
</radio_group>
- <check_box label="Modo &apos;un toque&apos; para el micrófono cuando pulses la tecla:" name="push_to_talk_toggle_check" tool_tip="En el modo &apos;un toque&apos;, pulsa y suelta el botón UNA VEZ para activar o desactivar el micrófono. Si no estás en el modo &apos;un toque&apos;, el micrófono sólo recogerá tu voz mientras mantengas pulsado el botón."/>
+ <check_box label="Cambiar entre hablar on/off cuando pulse:" name="push_to_talk_toggle_check" tool_tip="En el modo &apos;un toque&apos;, pulsa y suelta el botón UNA VEZ para activar o desactivar el micrófono. Si no estás en el modo &apos;un toque&apos;, el micrófono sólo recogerá tu voz mientras mantengas pulsado el botón."/>
<line_editor label="Botón de Apretar para Hablar" name="modifier_combo"/>
<button label="Elegir la tecla" name="set_voice_hotkey_button"/>
- <button label="Botón de en medio del ratón" name="set_voice_middlemouse_button"/>
+ <button label="Botón de en medio del ratón" name="set_voice_middlemouse_button" tool_tip="Reconfigurarlo al botón medio del ratón"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
index 433d7d15b4..f34edf149e 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
@@ -6,9 +6,9 @@
<check_box label="Cuando gaste o consiga L$" name="notify_money_change_checkbox"/>
<check_box label="Cuando mis amigos se conecten o desconecten" name="friends_online_notify_checkbox"/>
<text name="show_label" width="300">
- Mostrar siempre estos avisos:
+ Mostrar siempre:
</text>
<text name="dont_show_label">
- No mostrar nunca estos avisos:
+ No mostrar nunca:
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
index 89243afbb5..46d8984889 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Chat de texto" name="chat">
+ <text name="font_size">
+ Tamaño de la fuente:
+ </text>
<radio_group name="chat_font_size">
- <radio_item label="Disminuir" name="radio"/>
- <radio_item label="Media" name="radio2"/>
- <radio_item label="Aumentar" name="radio3"/>
+ <radio_item label="Disminuir" name="radio" value="0"/>
+ <radio_item label="Medio" name="radio2" value="1"/>
+ <radio_item label="Aumentar" name="radio3" value="2"/>
</radio_group>
+ <text name="font_colors">
+ Colores de la fuente:
+ </text>
<color_swatch label="Usted" name="user"/>
<text name="text_box1">
Yo
@@ -39,8 +45,14 @@
</text>
<check_box initial_value="true" label="Ejecutar la animación de escribir al hacerlo en el chat" name="play_typing_animation"/>
<check_box label="Cuando estoy desconectado, enviarme los MI al correo-e" name="send_im_to_email"/>
- <radio_group name="chat_window" tool_tip="Ver tus mensajes instantáneos en ventanas separadas o en una sola con varias pestañas (requiere volverse a conectar)">
- <radio_item label="Varias ventanas" name="radio"/>
- <radio_item label="Una ventana" name="radio2"/>
+ <text name="show_ims_in_label">
+ Mostrar los MI en:
+ </text>
+ <text name="requires_restart_label">
+ (requiere reiniciar)
+ </text>
+ <radio_group name="chat_window" tool_tip="Muestra tus mensajes instantáneos en varias ventanas flotantes o en una sola con varias pestañas (requiere que reinicies)">
+ <radio_item label="Varias ventanas" name="radio" value="0"/>
+ <radio_item label="Pestañas" name="radio2" value="1"/>
</radio_group>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
index 7402f6270d..ca157314aa 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
@@ -20,7 +20,7 @@
(requiere reiniciar)
</text>
<text name="maturity_desired_prompt">
- Quiero acceder a contenido calificado:
+ Quiero acceder a contenido:
</text>
<text name="maturity_desired_textbox"/>
<combo_box name="maturity_desired_combobox">
@@ -40,25 +40,28 @@
Etiquetas de los nombres:
</text>
<radio_group name="Name_Tag_Preference">
- <radio_item label="Off" name="radio"/>
- <radio_item label="On" name="radio2"/>
- <radio_item label="Mostrar brevemente" name="radio3"/>
+ <radio_item label="Off" name="radio" value="0"/>
+ <radio_item label="On" name="radio2" value="1"/>
+ <radio_item label="Mostrar brevemente" name="radio3" value="2"/>
</radio_group>
- <check_box label="Mostrar mi nombre" name="show_my_name_checkbox1"/>
+ <check_box label="Ver yo mi nombre" name="show_my_name_checkbox1"/>
<check_box initial_value="true" label="Etiquetas de los avatares en pequeño" name="small_avatar_names_checkbox"/>
<check_box label="Mostrar las etiquetas de grupo" name="show_all_title_checkbox1"/>
<text name="effects_color_textbox">
Mis efectos:
</text>
- <color_swatch label="" name="effect_color_swatch" tool_tip="Pulse para abrir el selector de color"/>
<text name="title_afk_text">
Ausente tras:
</text>
- <spinner label="Ausente tras:" name="afk_timeout_spinner"/>
- <text name="seconds_textbox">
- segundos
- </text>
+ <color_swatch label="" name="effect_color_swatch" tool_tip="Pulse para abrir el selector de color"/>
+ <combo_box label="Ausente tras:" name="afk">
+ <combo_box.item label="2 minutos" name="item0"/>
+ <combo_box.item label="5 minutos" name="item1"/>
+ <combo_box.item label="10 minutos" name="item2"/>
+ <combo_box.item label="30 minutos" name="item3"/>
+ <combo_box.item label="nunca" name="item4"/>
+ </combo_box>
<text name="text_box3">
- Respuesta cuando estoy en el modo ocupado:
+ Respuesta cuando estoy en modo ocupado:
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
index dc7d692531..87e7dc1e8a 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
@@ -6,11 +6,11 @@
<text name="QualitySpeed">
Calidad y velocidad:
</text>
- <text left="95" name="FasterText">
- El más rápido
+ <text name="FasterText">
+ Más rápido
</text>
<text name="BetterText">
- Mejor
+ Más calidad
</text>
<text name="ShadersPrefText">
Bajo
@@ -52,7 +52,7 @@
m
</text>
<slider label="Núm. máx. de partículas:" name="MaxParticleCount"/>
- <slider label="Calidad del procesamiento:" label_width="142" name="RenderPostProcess"/>
+ <slider label="Calidad de procesamiento:" label_width="142" name="RenderPostProcess"/>
<text name="MeshDetailText">
Detalle de la malla:
</text>
@@ -83,24 +83,23 @@
<text name="SkyMeshDetailText">
Bajo
</text>
- <text name="LightingDetailText" width="135">
- Detalles de la iluminación:
+ <text name="LightingDetailText">
+ Detalles de iluminación:
</text>
<radio_group name="LightingDetailRadio">
<radio_item label="Sólo el Sol y la Luna" name="SunMoon"/>
<radio_item label="Puntos de luz cercanos" name="LocalLights"/>
</radio_group>
<text name="TerrainDetailText">
- Nivel de detalle del
- terreno:
+ Detalle del terreno:
</text>
- <radio_group left_delta="60" name="TerrainDetailRadio">
+ <radio_group name="TerrainDetailRadio">
<radio_item label="Bajo" name="0"/>
<radio_item label="Alto" name="2"/>
</radio_group>
</panel>
<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
- <button label="Por defecto" left="110" name="Defaults" width="195"/>
+ <button label="Por defecto" name="Defaults"/>
<button label="Avanzado" name="Advanced"/>
<button label="Hardware" label_selected="Hardware" left="315" name="GraphicsHardwareButton"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
index fbc885abc4..bf2c6b7aa6 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
@@ -3,7 +3,7 @@
<panel.string name="log_in_to_change">
Conéctate para que cambie
</panel.string>
- <button label="Limpiar el historial" name="clear_cache"/>
+ <button label="Limpiar el historial" name="clear_cache" tool_tip="Limpia la imagen de la pantalla de conexión, la última posición, el historial de teleportes, web y caché de las texturas."/>
<text name="cache_size_label_l">
(Localizaciones, imágenes, web, historial de búsqueda)
</text>
@@ -11,17 +11,16 @@
<check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/>
<check_box label="Desconectar el micrófono cuando finalicen las llamadas" name="auto_disengage_mic_check"/>
<check_box label="Aceptar las &apos;cookies&apos;" name="cookies_enabled"/>
- <check_box label="Permitir la ejecución automática de los media" name="autoplay_enabled"/>
<text name="Logs:">
Registros:
</text>
<check_box label="Guardar en mi ordenador registros del chat" name="log_nearby_chat"/>
<check_box label="Guardar en mi ordenador registros de los MI" name="log_instant_messages"/>
<check_box label="Añadir fecha y hora" name="show_timestamps_check_im"/>
- <line_editor left="278" name="log_path_string" right="-20"/>
<text name="log_path_desc">
- Ruta de los registros
+ Ruta de los registros:
</text>
+ <line_editor left="278" name="log_path_string" right="-20"/>
<button label="Elegir" label_selected="Elegir" name="log_path_button" width="120"/>
<button label="Lista de ignorados" name="block_list"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
index d58878b120..fe9736f758 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Dispositivos y Cámara" name="Input panel">
+<panel label="Configurar" name="Input panel">
<button bottom_delta="-40" label="Otros dispositivos" name="joystick_setup_button"/>
<text name="Mouselook:">
Vista subjetiva:
@@ -18,29 +18,32 @@
kbps
</text>
<check_box label="Personalizar el puerto" name="connection_port_enabled"/>
- <spinner label="Número de puerto:" name="web_proxy_port"/>
+ <spinner label="Nº del puerto:" name="connection_port"/>
<text name="cache_size_label_l">
Tamaño de la caché
</text>
<text name="text_box5">
MB
</text>
- <button label="Elegir" label_selected="Elegir" name="set_cache"/>
- <button label="Recuperar" label_selected="Configurar" name="reset_cache"/>
<text name="Cache location">
- Ruta de la caché
+ Localización de la caché:
</text>
+ <button label="Elegir" label_selected="Elegir" name="set_cache"/>
+ <button label="Recuperar" label_selected="Reconfigurar" name="reset_cache"/>
<text name="Web:">
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Usar el navegador incorporado" name="internal" tool_tip="Usa el navegador incorporado para ayuda, enlaces web, etc. Este navegador se abre en una nueva ventana dentro de [APP_NAME]."/>
- <radio_item label="Usar mi navegador (IE, Firefox)" name="external" tool_tip="Usa tu navegador por defecto para ayuda, enlaces web, etc. No es aconsejable si estás a pantalla completa."/>
+ <radio_item label="Usar mi navegador (IE, Firefox, Safari)" name="external" tool_tip="Usa tu navegador por defecto para ayuda, enlaces web, etc. No es aconsejable si estás a pantalla completa." value="1"/>
+ <radio_item label="Usar el navegador incorporado" name="internal" tool_tip="Usa el navegador incorporado para ayuda, enlaces web, etc. Este navegador se abre en una nueva ventana dentro de [APP_NAME]." value=""/>
</radio_group>
- <check_box initial_value="false" label="Web proxy" name="web_proxy_enabled"/>
- <line_editor name="web_proxy_editor" tool_tip="Nombre o dirección IP del proxy que quieres usar"/>
- <button label="Buscar" label_selected="Buscar" name="set_proxy"/>
+ <check_box initial_value="verdadero" label="Activar plugins" name="browser_plugins_enabled"/>
+ <check_box initial_value="verdadero" label="Aceptar las &apos;cookies&apos;" name="cookies_enabled"/>
+ <check_box initial_value="verdadero" label="Activar Javascript" name="browser_javascript_enabled"/>
+ <check_box initial_value="false" label="Activar web proxy" name="web_proxy_enabled"/>
<text name="Proxy location">
- Localización del proxy
+ Localización del proxy:
</text>
+ <line_editor name="web_proxy_editor" tool_tip="Nombre o dirección IP del proxy que quieres usar"/>
+ <spinner label="Nº del puerto:" name="web_proxy_port"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
index 5ec5ba88fa..1e8b0c736c 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
@@ -1,14 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sonidos" name="Preference Media panel">
<slider label="Volumen general" name="System Volume"/>
- <check_box initial_value="true" label="Silenciar al minimizar" name="mute_when_minimized"/>
- <slider label="Ambiental" name="Wind Volume"/>
+ <check_box initial_value="true" label="Silenciar cuando minimice" name="mute_when_minimized"/>
<slider label="Botones" name="UI Volume"/>
- <slider label="Medios de comunicación" name="Media Volume"/>
- <slider label="Efectos sonoros" name="SFX Volume"/>
+ <slider label="Ambiental" name="Wind Volume"/>
+ <slider label="Efectos de sonido" name="SFX Volume"/>
<slider label="Música en streaming" name="Music Volume"/>
- <check_box label="Voz" name="enable_voice_check"/>
- <slider label="Voz" name="Voice Volume"/>
+ <check_box label="Activada" name="music_enabled"/>
+ <slider label="Multimedia" name="Media Volume"/>
+ <check_box label="Activada" name="enable_media"/>
+ <slider label="Chat de voz" name="Voice Volume"/>
+ <check_box label="Activado" name="enable_voice_check"/>
+ <check_box label="Permitir la ejecución automática de los media" name="media_auto_play_btn" tool_tip="Marcar esto para permitir la ejecución automática de los media" value="Sí"/>
+ <check_box label="Ejecutar para otros avatares los media anexados" name="media_show_on_others_btn" tool_tip="Al desmarcar esto se esconderán los media anexados a otros avatares cercanos" value="Sí"/>
+ <text name="voice_chat_settings">
+ Configuración del chat de voz
+ </text>
<text name="Listen from">
Oír desde:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
index 4701c67e06..174922e28e 100644
--- a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
@@ -1,6 +1,47 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="MediaControls">
+ <string name="min_width">
+ 300
+ </string>
+ <string name="min_height">
+ 75
+ </string>
+ <string name="zoom_medium_padding">
+ 1.1
+ </string>
+ <string name="top_world_view_avoid_zone">
+ 50
+ </string>
+ <layout_stack name="progress_indicator_area">
+ <panel name="media_progress_indicator">
+ <progress_bar name="media_progress_bar" tool_tip="Los media se están cargando"/>
+ </panel>
+ </layout_stack>
<layout_stack name="media_controls">
+ <layout_panel name="back">
+ <button name="back_btn" tool_tip="Navegar hacia atrás"/>
+ </layout_panel>
+ <layout_panel name="fwd">
+ <button name="fwd_btn" tool_tip="Navegar hacia adelante"/>
+ </layout_panel>
+ <layout_panel name="home">
+ <button name="home_btn" tool_tip="Página inicial"/>
+ </layout_panel>
+ <layout_panel name="media_stop">
+ <button name="media_stop_btn" tool_tip="Parar los media"/>
+ </layout_panel>
+ <layout_panel name="reload">
+ <button name="reload_btn" tool_tip="Recargar"/>
+ </layout_panel>
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Parar la carga"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Ejecutar los media"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Pausar los media"/>
+ </layout_panel>
<layout_panel name="media_address">
<line_editor name="media_address_url" tool_tip="URL de los media"/>
<layout_stack name="media_address_url_icons">
@@ -15,14 +56,24 @@
<layout_panel name="media_play_position">
<slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Progreso de la película"/>
</layout_panel>
+ <layout_panel name="skip_back">
+ <button name="skip_back_btn" tool_tip="Hacia atrás"/>
+ </layout_panel>
+ <layout_panel name="skip_forward">
+ <button name="skip_forward_btn" tool_tip="Hacia adelante"/>
+ </layout_panel>
<layout_panel name="media_volume">
<button name="media_mute_button" tool_tip="Silenciar este media"/>
<slider name="volume_slider" tool_tip="Volumen de los media"/>
</layout_panel>
- </layout_stack>
- <layout_stack>
- <panel name="media_progress_indicator">
- <progress_bar name="media_progress_bar" tool_tip="Los media se están cargando"/>
- </panel>
+ <layout_panel name="zoom_frame">
+ <button name="zoom_frame_btn" tool_tip="Zoom hacia los media"/>
+ </layout_panel>
+ <layout_panel name="close">
+ <button name="close_btn" tool_tip="Alejar el zoom"/>
+ </layout_panel>
+ <layout_panel name="new_window">
+ <button name="new_window_btn" tool_tip="Abrir la URL en el navegador"/>
+ </layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_profile.xml b/indra/newview/skins/default/xui/es/panel_profile.xml
index f61c7c3e33..d725bfe618 100644
--- a/indra/newview/skins/default/xui/es/panel_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_profile.xml
@@ -12,37 +12,41 @@
</string>
<string name="my_account_link_url" value="http://secondlife.com/my/account/index.php?lang=es-ES"/>
<string name="no_partner_text" value="Ninguno"/>
+ <string name="no_group_text" value="Ninguno"/>
<string name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <panel name="second_life_image_panel">
- <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
- </panel>
- <panel name="first_life_image_panel">
- <text name="title_rw_descr_text" value="Mundo real:"/>
- </panel>
- <text name="me_homepage_text">
- Web:
- </text>
- <text name="title_member_text" value="Miembro desde:"/>
- <text name="title_acc_status_text" value="Estado de la cuenta:"/>
- <text name="acc_status_text" value="Residente. No ha aportado información de pago."/>
- <text name="title_partner_text" value="Compañero/a:"/>
- <text name="title_groups_text" value="Grupos:"/>
- </panel>
- </scroll_container>
- <panel name="profile_buttons_panel">
- <button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad al residente"/>
- <button label="MI" name="im" tool_tip="Abrir un mensaje instantáneo"/>
- <button label="Llamada" name="call" tool_tip="Llamar a este residente"/>
- <button label="Mapa" name="show_on_map_btn" tool_tip="Ver al residente en el mapa"/>
- <button label="Teleportarse" name="teleport" tool_tip="Ofrecer teleporte"/>
- <button label="â–¼" name="overflow_btn" tool_tip="Pagar dinero o dar algo del inventario al residente"/>
- </panel>
- <panel name="profile_me_buttons_panel">
- <button label="Editar el perfil" name="edit_profile_btn"/>
- <button label="Modificar la apariencia" name="edit_appearance_btn"/>
- </panel>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="profile_scroll_panel">
+ <panel name="second_life_image_panel">
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <text name="title_rw_descr_text" value="Mundo real:"/>
+ </panel>
+ <text name="title_member_text" value="Residente desde:"/>
+ <text name="title_acc_status_text" value="Estado de la cuenta:"/>
+ <text name="title_partner_text" value="Compañero/a:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(obteniendo)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Grupos:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_buttons_panel">
+ <button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/>
+ <button label="MI" name="im" tool_tip="Abrir una sesión de mensajes instantáneos"/>
+ <button label="Llamar" name="call" tool_tip="Llamar a este Residente"/>
+ <button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/>
+ <button label="Teleportar" name="teleport" tool_tip="Ofrecer teleporte"/>
+ <button label="▼" name="overflow_btn" tool_tip="Pagar dinero al Residente o compartir algo del inventario con él"/>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Editar el perfil" name="edit_profile_btn" tool_tip="Modificar tu información personal"/>
+ <button label="Modificar la apariencia" name="edit_appearance_btn" tool_tip="Crear o modificar tu apariencia: tu físico, ropas, etc."/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_covenant.xml b/indra/newview/skins/default/xui/es/panel_region_covenant.xml
index 7713a173e5..0a5d7c2786 100644
--- a/indra/newview/skins/default/xui/es/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_covenant.xml
@@ -31,7 +31,7 @@
del estado.
</text>
<text bottom_delta="-31" name="covenant_instructions">
- Arrastra y suelta una nota para cambiar el contrato de este Estado.
+ Arrastra y suelta una nota para cambiar el contrato de este estado.
</text>
<text name="region_section_lbl">
Región
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 437ecd4e10..c51c3815d1 100644
--- a/indra/newview/skins/default/xui/es/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Estado" name="Estate">
<text name="estate_help_text">
- Los cambios en las configuraciones de esta
-pestaña afectarán a todas las regiones del estado.
+ En esta pestaña, los cambios en la configuración afectarán a todas las regiones del estado.
</text>
<text name="estate_text">
Estado:
@@ -24,10 +23,10 @@ pestaña afectarán a todas las regiones del estado.
<check_box label="Permitir el acceso público" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Acceso restringido a cuentas verificadas por:
+ Restringir el acceso a cuentas verificadas por:
</text>
- <check_box label="Información de pago aportada" name="limit_payment" tool_tip="Expulsar a los residentes no identificados"/>
- <check_box label="Verificación de la edad" name="limit_age_verified" tool_tip="Prohibir el acceso a residentes que no hayan verificado su edad. Para más información, ver [SUPPORT_SITE]."/>
+ <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="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"/>
@@ -40,7 +39,7 @@ pestaña afectarán a todas las regiones del estado.
</string>
<button label="?" name="abuse_email_address_help"/>
<button label="Aplicar" name="apply_btn"/>
- <button label="Echar usuarios del estado..." name="kick_user_from_estate_btn"/>
+ <button label="Expulsar a un Residente del Estado..." name="kick_user_from_estate_btn"/>
<button label="Enviar un mensaje al estado..." name="message_estate_btn"/>
<text name="estate_manager_label">
Administradores del estado:
diff --git a/indra/newview/skins/default/xui/es/panel_region_general.xml b/indra/newview/skins/default/xui/es/panel_region_general.xml
index ca8da6ccaf..54b60b276c 100644
--- a/indra/newview/skins/default/xui/es/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_general.xml
@@ -19,35 +19,26 @@
desconocido
</text>
<check_box label="No permitir modificar el terreno" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
<check_box label="Prohibir volar" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
<check_box label="Permitir el daño" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
<check_box label="Impedir los &apos;empujones&apos;" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
<check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help"/>
<check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help"/>
- <check_box label="Bloquear el mostrar el terreno en &#10;la búsqueda." name="block_parcel_search_check" tool_tip="Permitir que la gente vea esta región y sus parcelas en los resultados de la búsqueda."/>
- <button label="?" name="parcel_search_help"/>
- <spinner label="Nº máximo de avatares" name="agent_limit_spin" label_width="120" width="180"/>
- <button label="?" name="agent_limit_help"/>
- <spinner label="Plus de objetos" name="object_bonus_spin" label_width="120" width="180"/>
- <button label="?" name="object_bonus_help"/>
+ <check_box label="Bloquear el mostrar el terreno en
+la búsqueda." name="block_parcel_search_check" tool_tip="Permitir que la gente vea esta región y sus parcelas en los resultados de la búsqueda."/>
+ <spinner label="Nº máximo de avatares" label_width="120" name="agent_limit_spin" width="180"/>
+ <spinner label="Plus de objetos" label_width="120" name="object_bonus_spin" width="180"/>
<text label="Calificación" name="access_text">
Calificación:
</text>
- <combo_box label="&apos;Mature&apos;" name="access_combo">
- <combo_box.item label="&apos;Adult&apos;" name="Adult"/>
- <combo_box.item label="&apos;Mature&apos;" name="Mature"/>
- <combo_box.item label="&apos;PG&apos;" name="PG"/>
- </combo_box>
- <button label="?" name="access_help"/>
+ <icons_combo_box label="&apos;Mature&apos;" name="access_combo">
+ <icons_combo_box.item label="&apos;Adult&apos;" name="Adult" value="42"/>
+ <icons_combo_box.item label="&apos;Mature&apos;" name="Mature" value="21"/>
+ <icons_combo_box.item label="&apos;PG&apos;" name="PG" value="13"/>
+ </icons_combo_box>
<button label="Aplicar" name="apply_btn"/>
- <button label="Teleportar a su Base a un usuario..." name="kick_btn"/>
- <button label="Teleportar a su Base a todos los usuarios..." name="kick_all_btn"/>
- <button label="Enviar un mensaje a toda la región..." name="im_btn" width="250" />
+ <button label="Teleportar a su Base a un Residente..." name="kick_btn"/>
+ <button label="Teleportar a sus Bases a todos los Residentes..." name="kick_all_btn"/>
+ <button label="Enviar un mensaje a toda la región..." name="im_btn" width="250"/>
<button label="Administrar el Punto de Teleporte..." name="manage_telehub_btn" width="210"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml b/indra/newview/skins/default/xui/es/panel_region_general_layout.xml
new file mode 100644
index 0000000000..9ff88e2f79
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_region_general_layout.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Región" name="General">
+ <text name="region_text_lbl">
+ Región:
+ </text>
+ <text name="region_text">
+ desconocida
+ </text>
+ <text name="version_channel_text_lbl">
+ Versión:
+ </text>
+ <text name="version_channel_text">
+ desconocida
+ </text>
+ <text name="region_type_lbl">
+ Tipo:
+ </text>
+ <text name="region_type">
+ desconocido
+ </text>
+ <check_box label="No permitir modificar el terreno" name="block_terraform_check"/>
+ <check_box label="Prohibir volar" name="block_fly_check"/>
+ <check_box label="Permitir el daño" name="allow_damage_check"/>
+ <check_box label="Impedir los &apos;empujones&apos;" name="restrict_pushobject"/>
+ <check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/>
+ <check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/>
+ <check_box label="Bloquear el mostrar el terreno en la búsqueda" name="block_parcel_search_check" tool_tip="Permite que la gente vea esta región y sus parcelas en los resultados de la búsqueda"/>
+ <spinner label="Nº máximo de avatares" name="agent_limit_spin"/>
+ <spinner label="Plus de objetos" name="object_bonus_spin"/>
+ <text label="Calificación" name="access_text">
+ Calificación:
+ </text>
+ <combo_box label="Moderado" name="access_combo">
+ <combo_box.item label="Adulto" name="Adult"/>
+ <combo_box.item label="Moderado" name="Mature"/>
+ <combo_box.item label="General" name="PG"/>
+ </combo_box>
+ <button label="Aplicar" name="apply_btn"/>
+ <button label="Teleportar a su Base a un Residente..." name="kick_btn"/>
+ <button label="Teleportar a sus Bases a todos los Residentes..." name="kick_all_btn"/>
+ <button label="Enviar un mensaje a toda la región..." name="im_btn"/>
+ <button label="Administrar el Punto de Teleporte..." name="manage_telehub_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_texture.xml b/indra/newview/skins/default/xui/es/panel_region_texture.xml
index 83c22d20eb..047e8f2f30 100644
--- a/indra/newview/skins/default/xui/es/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_texture.xml
@@ -25,16 +25,16 @@
Rangos de la elevación de la textura
</text>
<text name="height_text_lbl6">
- Suroeste
+ Noroeste
</text>
<text name="height_text_lbl7">
- Noroeste
+ Noreste
</text>
<text name="height_text_lbl8">
- Sureste
+ Suroeste
</text>
<text name="height_text_lbl9">
- Noreste
+ Sureste
</text>
<spinner label="Baja" name="height_start_spin_0"/>
<spinner label="Baja" name="height_start_spin_1"/>
diff --git a/indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml
new file mode 100644
index 0000000000..9334d58af2
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="MI AVATAR" name="script_limits_my_avatar_panel">
+ <text name="script_memory">
+ Uso de scripts en el avatar
+ </text>
+ <text name="loading_text">
+ Cargando...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Tamaño (kb)" name="size"/>
+ <scroll_list.columns label="URLs" name="urls"/>
+ <scroll_list.columns label="Nombre del objeto" name="name"/>
+ <scroll_list.columns label="Localización" name="location"/>
+ </scroll_list>
+ <button label="Actualizar la lista" name="refresh_list_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml
new file mode 100644
index 0000000000..37dc0a576c
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="MEMORIA DE LA REGIÓN" name="script_limits_region_memory_panel">
+ <text name="script_memory">
+ Memoria de los scripts de la parcela
+ </text>
+ <text name="loading_text">
+ Cargando...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Tamaño (kb)" name="size"/>
+ <scroll_list.columns label="URLs" name="urls"/>
+ <scroll_list.columns label="Nombre del objeto" name="name"/>
+ <scroll_list.columns label="Propietario del objeto" name="owner"/>
+ <scroll_list.columns label="Parcela" name="parcel"/>
+ <scroll_list.columns label="Localización" name="location"/>
+ </scroll_list>
+ <button label="Actualizar la lista" name="refresh_list_btn"/>
+ <button label="Realzar" name="highlight_btn"/>
+ <button label="Devolver" name="return_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_side_tray.xml b/indra/newview/skins/default/xui/es/panel_side_tray.xml
index 1222f620f1..cf5afb3cd1 100644
--- a/indra/newview/skins/default/xui/es/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/es/panel_side_tray.xml
@@ -2,25 +2,28 @@
<!-- Side tray cannot show background because it is always
partially on screen to hold tab buttons. -->
<side_tray name="sidebar">
- <sidetray_tab description="Base." name="sidebar_home" tab_title="Home">
- <panel label="base" name="panel_home"/>
+ <sidetray_tab description="Manejar la barra lateral." name="sidebar_openclose" tab_title="Barra lateral"/>
+ <sidetray_tab description="Inicio." name="sidebar_home" tab_title="Inicio">
+ <panel label="Inicio" name="panel_home"/>
</sidetray_tab>
- <sidetray_tab description="Encuentra a tus amigos, contactos y gente que esté cerca." name="sidebar_people" tab_title="People">
+ <sidetray_tab description="Edita tu perfil público y tus destacados." name="sidebar_me" tab_title="Mi perfil">
<panel_container name="panel_container">
- <panel label="Información del grupo" name="panel_group_info_sidetray"/>
+ <panel label="Yo" name="panel_me"/>
+ </panel_container>
+ </sidetray_tab>
+ <sidetray_tab description="Encuentra a tus amigos, contactos y gente que esté cerca." name="sidebar_people" tab_title="Gente">
+ <panel_container name="panel_container">
+ <panel label="Perfil del grupo" name="panel_group_info_sidetray"/>
<panel label="Residentes y objetos ignorados" name="panel_block_list_sidetray"/>
</panel_container>
</sidetray_tab>
- <sidetray_tab description="Encontrar lugares donde ir o que ya visitaste." label="Lugares" name="sidebar_places" tab_title="Places">
+ <sidetray_tab description="Encontrar lugares donde ir o que ya visitaste." label="Lugares" name="sidebar_places" tab_title="Lugares">
<panel label="Lugares" name="panel_places"/>
</sidetray_tab>
- <sidetray_tab description="Edita tu perfil público y tus destacados." name="sidebar_me" tab_title="My Profile">
- <panel label="Yo" name="panel_me"/>
+ <sidetray_tab description="Mira tu inventario." name="sidebar_inventory" tab_title="Mi inventario">
+ <panel label="Modificar el inventario" name="sidepanel_inventory"/>
</sidetray_tab>
- <sidetray_tab description="Cambia tu apariencia y tu &apos;look&apos; actual." name="sidebar_appearance" tab_title="My Appearance">
+ <sidetray_tab description="Cambia tu apariencia y tu &apos;look&apos; actual." name="sidebar_appearance" tab_title="Mi apariencia">
<panel label="Modificar la apariencia" name="sidepanel_appearance"/>
</sidetray_tab>
- <sidetray_tab description="Mira tu inventario." name="sidebar_inventory" tab_title="My Inventory">
- <panel label="Modificar el inventario" name="sidepanel_inventory"/>
- </sidetray_tab>
</side_tray>
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 a3443aee25..1afa68106e 100644
--- a/indra/newview/skins/default/xui/es/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/es/panel_status_bar.xml
@@ -21,9 +21,11 @@
<panel.string name="buycurrencylabel">
[AMT] L$
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="Mi saldo: pulsa para comprar más L$"/>
+ <button label="" label_selected="" name="buycurrency" tool_tip="Mi saldo"/>
+ <button label="Comprar" name="buyL" tool_tip="Pulsa para comprar más L$"/>
<text name="TimeText" tool_tip="Hora actual (Pacífico)">
- 12:00 AM
+ 24:00 AM PST
</text>
+ <button name="media_toggle_btn" tool_tip="Iniciar/Parar todos los media (música, vídeo, páginas web)"/>
<button name="volume_btn" tool_tip="Control general del volumen"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history.xml b/indra/newview/skins/default/xui/es/panel_teleport_history.xml
index ff7cd5e723..a0ee30e8f6 100644
--- a/indra/newview/skins/default/xui/es/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/es/panel_teleport_history.xml
@@ -4,6 +4,7 @@
<accordion_tab name="today" title="Hoy"/>
<accordion_tab name="yesterday" title="Ayer"/>
<accordion_tab name="2_days_ago" title="Hace 2 días"/>
+ 5
<accordion_tab name="3_days_ago" title="Hace 3 días"/>
<accordion_tab name="4_days_ago" title="Hace 4 días"/>
<accordion_tab name="5_days_ago" title="Hace 5 días"/>
@@ -11,4 +12,7 @@
<accordion_tab name="1_month_and_older" title="1 mes y más"/>
<accordion_tab name="6_months_and_older" title="6 y más meses"/>
</accordion>
+ <panel name="bottom_panel">
+ <button name="gear_btn" tool_tip="Ver más opciones"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml
new file mode 100644
index 0000000000..10b37b6880
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="teleport_history_item">
+ <button name="profile_btn" tool_tip="Mostrar la información del ítem"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_appearance.xml b/indra/newview/skins/default/xui/es/sidepanel_appearance.xml
index da9f6bbcf1..0c7f63d662 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_appearance.xml
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Vestuarios" name="appearance panel">
<string name="No Outfit" value="No hay vestuario"/>
- <filter_editor label="Filtrar los vestuarios" name="Filter"/>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Ver más opciones"/>
- <button name="newlook_btn" tool_tip="Añadir un vestuario nuevo"/>
- <dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/>
- <button label="Ponerme" name="wear_btn"/>
+ <panel name="panel_currentlook">
+ <text name="currentlook_title">
+ (sin guardar)
+ </text>
</panel>
+ <filter_editor label="Filtrar los vestuarios" name="Filter"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
index e5a132ce1f..0d2eb0ac35 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="item properties" title="Propiedades del ítem del inventario">
+<panel name="item properties" title="Perfil del objeto">
<panel.string name="unknown">
(desconocidas)
</panel.string>
@@ -15,7 +15,8 @@
<panel.string name="acquiredDate">
[wkday,datetime,local][day,datetime,local] [mth,datetime,local] [year,datetime,local][hour,datetime,local]:[min,datetime,local]:[second,datetime,local]
</panel.string>
- <text name="title" value="Propiedades del ítem"/>
+ <text name="title" value="Perfil del objeto"/>
+ <text name="where" value="(Inventario)"/>
<panel label="">
<text name="LabelItemNameTitle">
Nombre:
@@ -37,34 +38,36 @@
<text name="LabelAcquiredDate">
Miér., 24 Mayo 2006 12:50:46
</text>
- <text name="OwnerLabel">
- Tú:
- </text>
- <check_box label="Editar" name="CheckOwnerModify"/>
- <check_box label="Copiar" name="CheckOwnerCopy"/>
- <check_box label="Revender" name="CheckOwnerTransfer"/>
- <text name="AnyoneLabel">
- Cualquiera:
- </text>
- <check_box label="Copiar" name="CheckEveryoneCopy"/>
- <text name="GroupLabel">
- Grupo:
- </text>
- <check_box label="Compartir" name="CheckShareWithGroup"/>
- <text name="NextOwnerLabel">
- El próximo propietario:
- </text>
- <check_box label="Editar" name="CheckNextOwnerModify"/>
- <check_box label="Copiar" name="CheckNextOwnerCopy"/>
- <check_box label="Revender" name="CheckNextOwnerTransfer"/>
+ <panel name="perms_inv">
+ <text name="perm_modify">
+ Tú puedes:
+ </text>
+ <check_box label="Modificar" name="CheckOwnerModify"/>
+ <check_box label="Copiarlo" name="CheckOwnerCopy"/>
+ <check_box label="Transferirlo" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ Cualquiera:
+ </text>
+ <check_box label="Copiarlo" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ Grupo:
+ </text>
+ <check_box label="Compartir" name="CheckShareWithGroup" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/>
+ <text name="NextOwnerLabel">
+ Próximo propietario:
+ </text>
+ <check_box label="Modificarlo" name="CheckNextOwnerModify"/>
+ <check_box label="Copiarlo" name="CheckNextOwnerCopy"/>
+ <check_box label="Transferirlo" name="CheckNextOwnerTransfer" tool_tip="El próximo propietario puede dar o revender este objeto"/>
+ </panel>
<check_box label="En venta" name="CheckPurchase"/>
<combo_box name="combobox sale copy">
<combo_box.item label="Copiar" name="Copy"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
- <spinner label="Precio:" name="Edit Cost"/>
- <text name="CurrencySymbol">
- L$
- </text>
+ <spinner label="Precio: L$" name="Edit Cost"/>
+ </panel>
+ <panel name="button_panel">
+ <button label="Cancelar" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
index a65a0d5e45..f40813d3c9 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="object properties" title="Propiedades del objeto">
+<panel name="object properties" title="Perfil del objeto">
<panel.string name="text deed continued">
- Transfeir
+ Transferir
</panel.string>
<panel.string name="text deed">
- Transfeir
+ Transferir
</panel.string>
<panel.string name="text modify info 1">
Puedes modificar este objeto
@@ -36,84 +36,94 @@
<panel.string name="Sale Mixed">
Mixed Sale
</panel.string>
- <panel label="">
+ <text name="title" value="Perfil del objeto"/>
+ <text name="where" value="(en el mundo)"/>
+ <panel label="" name="properties_panel">
<text name="Name:">
Nombre:
</text>
<text name="Description:">
Descripción:
</text>
- <text name="Creator:">
+ <text name="CreatorNameLabel">
Creador:
</text>
+ <text name="Creator Name">
+ Erica Linden
+ </text>
<text name="Owner:">
Propietario:
</text>
- <text name="Group:">
+ <text name="Owner Name">
+ Erica Linden
+ </text>
+ <text name="Group_label">
Grupo:
</text>
<button name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/>
<name_box initial_value="Cargando..." name="Group Name Proxy"/>
- <button label="Transfeir" label_selected="Transfeir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
- <check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/>
+ <button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
<text name="label click action">
- Al tocarlo:
+ Pulsa para:
</text>
<combo_box name="clickaction">
<combo_box.item label="Tocarlo (por defecto)" name="Touch/grab(default)"/>
<combo_box.item label="Sentarme en el objeto" name="Sitonobject"/>
<combo_box.item label="Comprar el objeto" name="Buyobject"/>
- <combo_box.item label="Pagar al objeto" name="Payobject"/>
+ <combo_box.item label="Pagar el objeto" name="Payobject"/>
<combo_box.item label="Abrir" name="Open"/>
</combo_box>
- <check_box label="En venta:" name="checkbox for sale"/>
- <combo_box name="sale type">
- <combo_box.item label="Copiarlo" name="Copy"/>
- <combo_box.item label="Contenidos" name="Contents"/>
- <combo_box.item label="Original" name="Original"/>
- </combo_box>
- <spinner label="Precio: L$" name="Edit Cost"/>
- <check_box label="Mostrar en la búsqueda" name="search_check" tool_tip="Permitir que la gente vea este objetos en los resultados de la búsqueda"/>
- <panel name="perms_build">
+ <panel name="perms_inv">
<text name="perm_modify">
Puedes modificar este objeto
</text>
<text name="Anyone can:">
Cualquiera:
</text>
- <check_box label="Moverse" name="checkbox allow everyone move"/>
- <check_box label="Copiarlo" name="checkbox allow everyone copy"/>
- <text name="Next owner can:">
- Próximo propietario:
- </text>
- <check_box label="Modificarlo" name="checkbox next owner can modify"/>
- <check_box label="Copiarlo" name="checkbox next owner can copy"/>
- <check_box label="Transferirlo" name="checkbox next owner can transfer" tool_tip="El próximo propietario puede dar o revender este objeto"/>
- <text name="B:">
- B:
- </text>
- <text name="O:">
- O:
- </text>
- <text name="G:">
- G:
- </text>
- <text name="E:">
- E:
- </text>
- <text name="N:">
- N:
+ <check_box label="Copiar" name="checkbox allow everyone copy"/>
+ <check_box label="Mover" name="checkbox allow everyone move"/>
+ <text name="GroupLabel">
+ Grupo:
</text>
- <text name="F:">
- F:
+ <check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación de este objeto. Debes transferirlo para activar las restricciones según los roles."/>
+ <text name="NextOwnerLabel">
+ Próximo propietario:
</text>
+ <check_box label="Modificar" name="checkbox next owner can modify"/>
+ <check_box label="Copiar" name="checkbox next owner can copy"/>
+ <check_box label="Transferir" name="checkbox next owner can transfer" tool_tip="El próximo propietario puede dar o revender este objeto"/>
</panel>
+ <check_box label="En venta" name="checkbox for sale"/>
+ <combo_box name="sale type">
+ <combo_box.item label="Copiar" name="Copy"/>
+ <combo_box.item label="Contenidos" name="Contents"/>
+ <combo_box.item label="Original" name="Original"/>
+ </combo_box>
+ <spinner label="Precio: L$" name="Edit Cost"/>
+ <check_box label="Mostrar en la búsqueda" name="search_check" tool_tip="Permitir que la gente vea este objeto en los resultados de la búsqueda"/>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Abrir" name="open_btn"/>
<button label="Pagar" name="pay_btn"/>
<button label="Comprar" name="buy_btn"/>
- <button label="Cancelar" name="cancel_btn"/>
- <button label="Guardar" name="save_btn"/>
+ <button label="Detalles" name="details_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 4b96b7f31f..a8fc7f6b58 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -1,9 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- This file contains strings that used to be hardcoded in the source.
It is only for those strings which do not belong in a floater.
- For example, the strings used in avatar chat bubbles, and strings
+ For example, the strings used in avatar chat bubbles, and strings
that are returned from one component and may appear in many places-->
<strings>
+ <string name="CAPITALIZED_APP_NAME">
+ SECOND LIFE
+ </string>
<string name="SUPPORT_SITE">
Portal de Soporte de Second Life
</string>
@@ -11,7 +14,22 @@
Identificando el hardware...
</string>
<string name="StartupLoading">
- Cargando
+ Instalando [APP_NAME]...
+ </string>
+ <string name="StartupClearingCache">
+ Limpiando la caché...
+ </string>
+ <string name="StartupInitializingTextureCache">
+ Iniciando la caché de las texturas...
+ </string>
+ <string name="StartupInitializingVFS">
+ Iniciando VFS...
+ </string>
+ <string name="ProgressRestoring">
+ Restaurando...
+ </string>
+ <string name="ProgressChangingResolution">
+ Cambiando la resolución...
</string>
<string name="LoginInProgress">
Iniciando la sesión. [APP_NAME] debe de aparecer congelado. Por favor, espere.
@@ -73,6 +91,9 @@
<string name="LoginFailedNoNetwork">
Error de red: no se ha podido conectar; por favor, revisa tu conexión a internet.
</string>
+ <string name="LoginFailed">
+ Error en el inicio de sesión.
+ </string>
<string name="Quit">
Salir
</string>
@@ -80,7 +101,25 @@
http://join.secondlife.com/index.php?lang=es-ES
</string>
<string name="AgentLostConnection">
- Esta región puede estar teniendo problemas. Por favor, compruebe su conexión a internet.
+ Esta región puede estar teniendo problemas. Por favor, comprueba tu conexión a internet.
+ </string>
+ <string name="SavingSettings">
+ Guardando tus configuraciones...
+ </string>
+ <string name="LoggingOut">
+ Cerrando sesión...
+ </string>
+ <string name="ShuttingDown">
+ Cerrando...
+ </string>
+ <string name="YouHaveBeenDisconnected">
+ Has sido desconectado de la región en la que estabas.
+ </string>
+ <string name="SentToInvalidRegion">
+ Has sido enviado a una región no válida.
+ </string>
+ <string name="TestingDisconnect">
+ Probando la desconexión del visor
</string>
<string name="TooltipPerson">
Persona
@@ -134,7 +173,25 @@
Pulsa para ver la información de este lugar
</string>
<string name="TooltipAgentUrl">
- Pulsa para ver el perfil de este residente
+ Pulsa para ver el perfil del Residente
+ </string>
+ <string name="TooltipAgentMute">
+ Pulsa para silenciar a este Residente
+ </string>
+ <string name="TooltipAgentUnmute">
+ Pulsa para quitar el silencio a este Residente
+ </string>
+ <string name="TooltipAgentIM">
+ Pulsa para enviar un MI a este Residente
+ </string>
+ <string name="TooltipAgentPay">
+ Pulsa para pagar a este Residente
+ </string>
+ <string name="TooltipAgentOfferTeleport">
+ Pulsa para enviar una petición de teleporte a este Residente
+ </string>
+ <string name="TooltipAgentRequestFriend">
+ Pulsa para enviar una petición de amistad a este Residente
</string>
<string name="TooltipGroupUrl">
Pulsa para ver la descripción de este grupo
@@ -161,12 +218,31 @@
Pulsa para ejecutar el comando secondlife://
</string>
<string name="CurrentURL" value="URL actual: [CurrentURL]"/>
+ <string name="TooltipPrice" value="[PRICE] L$"/>
<string name="SLurlLabelTeleport">
Teleportarse a
</string>
<string name="SLurlLabelShowOnMap">
Mostrarla en el mapa
</string>
+ <string name="SLappAgentMute">
+ Silenciar
+ </string>
+ <string name="SLappAgentUnmute">
+ Quitar el silencio
+ </string>
+ <string name="SLappAgentIM">
+ MI
+ </string>
+ <string name="SLappAgentPay">
+ Pagar
+ </string>
+ <string name="SLappAgentOfferTeleport">
+ Ofrecer teleporte a
+ </string>
+ <string name="SLappAgentRequestFriend">
+ Petición de amistad
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Cerrar (⌘W)
</string>
@@ -185,9 +261,6 @@
<string name="BUTTON_DOCK">
Fijar
</string>
- <string name="BUTTON_UNDOCK">
- Soltar
- </string>
<string name="BUTTON_HELP">
Ver la Ayuda
</string>
@@ -212,9 +285,6 @@
<string name="AvatarNameWaiting">
(esperando)
</string>
- <string name="AvatarNameHippos">
- (hipopótamos)
- </string>
<string name="GroupNameNone">
(ninguno)
</string>
@@ -323,6 +393,9 @@
<string name="symbolic link">
el enlace
</string>
+ <string name="symbolic folder link">
+ enlace de la carpeta
+ </string>
<string name="AvatarAway">
Ausente
</string>
@@ -575,6 +648,9 @@
<string name="hang_up">
Desconectado del chat de voz
</string>
+ <string name="reconnect_nearby">
+ Vas a ser reconectado al chat de voz con los cercanos
+ </string>
<string name="ScriptQuestionCautionChatGranted">
&apos;[OBJECTNAME]&apos;, un objeto propiedad de &apos;[OWNERNAME]&apos;, localizado en [REGIONNAME] con la posición [REGIONPOS], ha recibido permiso para: [PERMISSIONS].
</string>
@@ -737,6 +813,9 @@
<string name="invalid">
inválido/a
</string>
+ <string name="NewWearable">
+ Nuevo [WEARABLE_ITEM]
+ </string>
<string name="next">
Siguiente
</string>
@@ -767,11 +846,8 @@
<string name="TeleportOffer">
Ofrecimiento de teleporte
</string>
- <string name="StartUpNotification">
- Llegó [%d] aviso nuevo mientras estabas ausente...
- </string>
<string name="StartUpNotifications">
- Llegaron [%d] avisos nuevos mientras estabas ausente...
+ Llegaron avisos nuevos mientras estabas ausente...
</string>
<string name="OverflowInfoChannelString">
Tienes [%d] aviso/s más
@@ -807,11 +883,13 @@
Pulsa ESC para salir de la vista subjetiva
</string>
<string name="InventoryNoMatchingItems">
- No se han encontrado tales ítems en el inventario.
+ No se han encontrado tales ítems en el inventario. Intenta con [secondlife:///app/search/groups &quot;Buscar&quot;].
+ </string>
+ <string name="FavoritesNoMatchingItems">
+ Arrastra aquí un hito para tenerlo en tus favoritos.
</string>
<string name="InventoryNoTexture">
- No tienes una copia de esta
-textura en tu inventario
+ No tienes en tu inventario una copia de esta textura
</string>
<string name="no_transfer" value="(no transferible)"/>
<string name="no_modify" value="(no modificable)"/>
@@ -826,6 +904,7 @@ textura en tu inventario
No hay contenido
</string>
<string name="WornOnAttachmentPoint" value="(lo llevas en: [ATTACHMENT_POINT])"/>
+ <string name="ActiveGesture" value="[GESLABEL] (activo)"/>
<string name="Chat" value="Chat :"/>
<string name="Sound" value="Sonido :"/>
<string name="Wait" value="--- Espera :"/>
@@ -893,7 +972,7 @@ textura en tu inventario
Partes del cuerpo
</string>
<string name="InvFolder Trash">
- la Papelera
+ Papelera
</string>
<string name="InvFolder Photo Album">
Ãlbum de fotos
@@ -919,6 +998,9 @@ textura en tu inventario
<string name="InvFolder My Outfits">
Mis vestuarios
</string>
+ <string name="InvFolder Accessories">
+ Accesorios
+ </string>
<string name="InvFolder Friends">
Amigos
</string>
@@ -1269,11 +1351,164 @@ textura en tu inventario
todos los estados que administras para [OWNER]
</string>
<string name="RegionInfoAllowedResidents">
- Residentes autorizados: ([ALLOWEDAGENTS], de un máx. de [MAXACCESS])
+ Resientes autorizados: ([ALLOWEDAGENTS], de un máx. de [MAXACCESS])
</string>
<string name="RegionInfoAllowedGroups">
Grupos autorizados: ([ALLOWEDGROUPS], de un máx. de [MAXACCESS])
</string>
+ <string name="ScriptLimitsParcelScriptMemory">
+ Memoria de los scripts de la parcela
+ </string>
+ <string name="ScriptLimitsParcelsOwned">
+ Parcelas listadas: [PARCELS]
+ </string>
+ <string name="ScriptLimitsMemoryUsed">
+ Memoria usada: [COUNT] kb de un máx de [MAX] kb; [AVAILABLE] kb disponibles
+ </string>
+ <string name="ScriptLimitsMemoryUsedSimple">
+ Memoria usada: [COUNT] kb
+ </string>
+ <string name="ScriptLimitsParcelScriptURLs">
+ URLs de los scripts de la parcela
+ </string>
+ <string name="ScriptLimitsURLsUsed">
+ URLs usadas: [COUNT] de un máx. de [MAX]; [AVAILABLE] disponibles
+ </string>
+ <string name="ScriptLimitsURLsUsedSimple">
+ URLs usadas: [COUNT]
+ </string>
+ <string name="ScriptLimitsRequestError">
+ Error al obtener la información
+ </string>
+ <string name="ScriptLimitsRequestNoParcelSelected">
+ No hay una parcela seleccionada
+ </string>
+ <string name="ScriptLimitsRequestWrongRegion">
+ Error: la información del script sólo está disponible en tu región actual
+ </string>
+ <string name="ScriptLimitsRequestWaiting">
+ Obteniendo la información...
+ </string>
+ <string name="ScriptLimitsRequestDontOwnParcel">
+ No tienes permiso para examinar esta parcela
+ </string>
+ <string name="SITTING_ON">
+ Sentado en
+ </string>
+ <string name="ATTACH_CHEST">
+ Tórax
+ </string>
+ <string name="ATTACH_HEAD">
+ Cabeza
+ </string>
+ <string name="ATTACH_LSHOULDER">
+ Hombro izquierdo
+ </string>
+ <string name="ATTACH_RSHOULDER">
+ Hombro derecho
+ </string>
+ <string name="ATTACH_LHAND">
+ Mano izq.
+ </string>
+ <string name="ATTACH_RHAND">
+ Mano der.
+ </string>
+ <string name="ATTACH_LFOOT">
+ Pie izq.
+ </string>
+ <string name="ATTACH_RFOOT">
+ Pie der.
+ </string>
+ <string name="ATTACH_BACK">
+ Anterior
+ </string>
+ <string name="ATTACH_PELVIS">
+ Pelvis
+ </string>
+ <string name="ATTACH_MOUTH">
+ Boca
+ </string>
+ <string name="ATTACH_CHIN">
+ Barbilla
+ </string>
+ <string name="ATTACH_LEAR">
+ Oreja izq.
+ </string>
+ <string name="ATTACH_REAR">
+ Oreja der.
+ </string>
+ <string name="ATTACH_LEYE">
+ Ojo izq.
+ </string>
+ <string name="ATTACH_REYE">
+ Ojo der.
+ </string>
+ <string name="ATTACH_NOSE">
+ Nariz
+ </string>
+ <string name="ATTACH_RUARM">
+ Brazo der.
+ </string>
+ <string name="ATTACH_RLARM">
+ Antebrazo der.
+ </string>
+ <string name="ATTACH_LUARM">
+ Brazo izq.
+ </string>
+ <string name="ATTACH_LLARM">
+ Antebrazo izq.
+ </string>
+ <string name="ATTACH_RHIP">
+ Cadera der.
+ </string>
+ <string name="ATTACH_RULEG">
+ Muslo der.
+ </string>
+ <string name="ATTACH_RLLEG">
+ Pantorrilla der.
+ </string>
+ <string name="ATTACH_LHIP">
+ Cadera izq.
+ </string>
+ <string name="ATTACH_LULEG">
+ Muslo izq.
+ </string>
+ <string name="ATTACH_LLLEG">
+ Pantorrilla izq.
+ </string>
+ <string name="ATTACH_BELLY">
+ Vientre
+ </string>
+ <string name="ATTACH_RPEC">
+ Pecho derecho
+ </string>
+ <string name="ATTACH_LPEC">
+ Pecho izquierdo
+ </string>
+ <string name="ATTACH_HUD_CENTER_2">
+ HUD: Centro 2
+ </string>
+ <string name="ATTACH_HUD_TOP_RIGHT">
+ HUD: arriba der.
+ </string>
+ <string name="ATTACH_HUD_TOP_CENTER">
+ HUD: arriba centro
+ </string>
+ <string name="ATTACH_HUD_TOP_LEFT">
+ HUD: arriba izq.
+ </string>
+ <string name="ATTACH_HUD_CENTER_1">
+ HUD: Centro 1
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_LEFT">
+ HUD: abajo izq.
+ </string>
+ <string name="ATTACH_HUD_BOTTOM">
+ HUD: abajo
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_RIGHT">
+ HUD: abajo der.
+ </string>
<string name="CursorPos">
Línea [LINE], Columna [COLUMN]
</string>
@@ -1283,11 +1518,17 @@ textura en tu inventario
<string name="PanelContentsNewScript">
Script nuevo
</string>
+ <string name="PanelContentsTooltip">
+ Contenido del objeto
+ </string>
+ <string name="BusyModeResponseDefault">
+ El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado. Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI.
+ </string>
<string name="MuteByName">
(por el nombre)
</string>
<string name="MuteAgent">
- (residente)
+ (Residente)
</string>
<string name="MuteObject">
(objeto)
@@ -1318,6 +1559,15 @@ textura en tu inventario
<string name="ClassifiedUpdateAfterPublish">
(se actualizará tras la publicación)
</string>
+ <string name="NoPicksClassifiedsText">
+ No has creado destacados ni clasificados. Pulsa el botón Más para crear uno.
+ </string>
+ <string name="NoAvatarPicksClassifiedsText">
+ El usuario no tiene clasificados ni destacados
+ </string>
+ <string name="PicksClassifiedsLoadingText">
+ Cargando...
+ </string>
<string name="MultiPreviewTitle">
Vista previa
</string>
@@ -1388,12 +1638,18 @@ textura en tu inventario
Cancelar
</string>
<string name="UploadingCosts">
- Subir este/a [%s] cuesta
+ Subir [NAME] cuesta [AMOUNT] L$
+ </string>
+ <string name="BuyingCosts">
+ Comprar esto cuesta [AMOUNT] L$
</string>
<string name="UnknownFileExtension">
Extensión de archivo desconocida [.%s]
Se esperaba .wav, .tga, .bmp, .jpg, .jpeg, o .bvh
</string>
+ <string name="MuteObject2">
+ Ignorar
+ </string>
<string name="AddLandmarkNavBarMenu">
Guardarme este hito...
</string>
@@ -1664,41 +1920,17 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
Cortos
</string>
<string name="Attached Earlobes">
- Lóbulos cortos
- </string>
- <string name="Back Bangs">
- Back Bangs
- </string>
- <string name="Back Bangs Down">
- Back Bangs Down
- </string>
- <string name="Back Bangs Up">
- Back Bangs Up
+ Lóbulos
</string>
<string name="Back Fringe">
Nuca: largo
</string>
- <string name="Back Hair">
- Back Hair
- </string>
- <string name="Back Hair Down">
- Back Hair Down
- </string>
- <string name="Back Hair Up">
- Back Hair Up
- </string>
<string name="Baggy">
Marcadas
</string>
<string name="Bangs">
Bangs
</string>
- <string name="Bangs Down">
- Bangs Down
- </string>
- <string name="Bangs Up">
- Bangs Up
- </string>
<string name="Beady Eyes">
Ojos pequeños
</string>
@@ -1711,9 +1943,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Big Butt">
Culo grande
</string>
- <string name="Big Eyeball">
- Big Eyeball
- </string>
<string name="Big Hair Back">
Pelo: moño
</string>
@@ -1888,9 +2117,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Corner Down">
Hacia abajo
</string>
- <string name="Corner Normal">
- Corner Normal
- </string>
<string name="Corner Up">
Hacia arriba
</string>
@@ -1900,9 +2126,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Crooked Nose">
Nariz torcida
</string>
- <string name="Cropped Hair">
- Cropped Hair
- </string>
<string name="Cuff Flare">
Acampanado
</string>
@@ -1921,15 +2144,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Default Heels">
Tacones por defecto
</string>
- <string name="Default Toe">
- Default Toe
- </string>
<string name="Dense">
Densas
</string>
- <string name="Dense hair">
- Dense hair
- </string>
<string name="Double Chin">
Mucha papada
</string>
@@ -1975,9 +2192,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Eye Spacing">
Ojos: separación
</string>
- <string name="Eyeball Size">
- Eyeball Size
- </string>
<string name="Eyebrow Arc">
Cejas: arco
</string>
@@ -2002,36 +2216,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Eyeliner Color">
Contorno de ojos: color
</string>
- <string name="Eyes Back">
- Eyes Back
- </string>
<string name="Eyes Bugged">
Eyes Bugged
</string>
- <string name="Eyes Forward">
- Eyes Forward
- </string>
- <string name="Eyes Long Head">
- Eyes Long Head
- </string>
- <string name="Eyes Shear Left Up">
- Ojos arriba - izq.
- </string>
- <string name="Eyes Shear Right Up">
- Ojos arriba - der.
- </string>
- <string name="Eyes Short Head">
- Eyes Short Head
- </string>
- <string name="Eyes Spread">
- Eyes Spread
- </string>
- <string name="Eyes Sunken">
- Eyes Sunken
- </string>
- <string name="Eyes Together">
- Eyes Together
- </string>
<string name="Face Shear">
Cara: simetría
</string>
@@ -2041,30 +2228,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Far Set Eyes">
Ojos separados
</string>
- <string name="Fat">
- Fat
- </string>
- <string name="Fat Head">
- Fat Head
- </string>
<string name="Fat Lips">
Prominentes
</string>
- <string name="Fat Lower">
- Fat Lower
- </string>
- <string name="Fat Lower Lip">
- Fat Lower Lip
- </string>
- <string name="Fat Torso">
- Fat Torso
- </string>
- <string name="Fat Upper">
- Fat Upper
- </string>
- <string name="Fat Upper Lip">
- Fat Upper Lip
- </string>
<string name="Female">
Mujer
</string>
@@ -2101,24 +2267,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Freckles">
Pecas
</string>
- <string name="Front Bangs Down">
- Front Bangs Down
- </string>
- <string name="Front Bangs Up">
- Front Bangs Up
- </string>
<string name="Front Fringe">
Flequillo
</string>
- <string name="Front Hair">
- Front Hair
- </string>
- <string name="Front Hair Down">
- Front Hair Down
- </string>
- <string name="Front Hair Up">
- Front Hair Up
- </string>
<string name="Full Back">
Sin cortar
</string>
@@ -2392,9 +2543,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Long arms">
Brazos largos
</string>
- <string name="Longcuffs">
- Longcuffs
- </string>
<string name="Loose Pants">
Pantalón suelto
</string>
@@ -2557,9 +2705,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="No Eyeshadow">
Menos
</string>
- <string name="No Heels">
- No Heels
- </string>
<string name="No Lipgloss">
Sin brillo
</string>
@@ -2617,9 +2762,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Nostril Width">
Ventana: ancho
</string>
- <string name="Old">
- Old
- </string>
<string name="Opaque">
Opaco
</string>
@@ -2719,9 +2861,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Pointy Heels">
De aguja
</string>
- <string name="Pointy Toe">
- Pointy Toe
- </string>
<string name="Ponytail">
Cola de caballo
</string>
@@ -2746,15 +2885,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Red Hair">
Pelirrojo
</string>
- <string name="Red Skin">
- Red Skin
- </string>
<string name="Regular">
Regular
</string>
- <string name="Regular Muscles">
- Regular Muscles
- </string>
<string name="Right Part">
Raya: der.
</string>
@@ -2764,9 +2897,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Round">
Redondear
</string>
- <string name="Round Forehead">
- Round Forehead
- </string>
<string name="Ruddiness">
Rubicundez
</string>
@@ -2779,24 +2909,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Saddle Bags">
Cartucheras
</string>
- <string name="Saddlebags">
- Cartucheras
- </string>
- <string name="Scrawny">
- Scrawny
- </string>
<string name="Scrawny Leg">
Piernas flacas
</string>
<string name="Separate">
Más ancho
</string>
- <string name="Shading">
- Shading
- </string>
- <string name="Shadow hair">
- Shadow hair
- </string>
<string name="Shallow">
Sin marcar
</string>
@@ -2809,15 +2927,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Shear Front">
Shear Front
</string>
- <string name="Shear Left">
- Shear Left
- </string>
<string name="Shear Left Up">
Arriba - izq.
</string>
- <string name="Shear Right">
- Shear Right
- </string>
<string name="Shear Right Up">
Arriba - der.
</string>
@@ -2878,15 +2990,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Shoulders">
Hombros
</string>
- <string name="Side Bangs">
- Side Bangs
- </string>
- <string name="Side Bangs Down">
- Side Bangs Down
- </string>
- <string name="Side Bangs Up">
- Side Bangs Up
- </string>
<string name="Side Fringe">
Lados: franja
</string>
@@ -2902,9 +3005,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Sides Hair Up">
Subir lados del pelo
</string>
- <string name="Skinny">
- Skinny
- </string>
<string name="Skinny Neck">
Cuello estrecho
</string>
@@ -2953,9 +3053,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Socks Length">
Calcetines: largo
</string>
- <string name="Some">
- Some
- </string>
<string name="Soulpatch">
Perilla
</string>
@@ -2974,9 +3071,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Squash Head">
Cabeza aplastada
</string>
- <string name="Squash/Stretch Head">
- Squash/Stretch Head
- </string>
<string name="Stretch Head">
Cabeza estirada
</string>
@@ -2995,20 +3089,8 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Sweep Forward">
Sweep Forward
</string>
- <string name="Swept Back">
- Swept Back
- </string>
- <string name="Swept Back Hair">
- Swept Back Hair
- </string>
- <string name="Swept Forward">
- Swept Forward
- </string>
- <string name="Swept Forward Hair">
- Swept Forward Hair
- </string>
<string name="Tall">
- Alta
+ Más
</string>
<string name="Taper Back">
Cubierta trasera
@@ -3025,9 +3107,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Thick Toe">
Empeine alto
</string>
- <string name="Thickness">
- Thickness
- </string>
<string name="Thin">
Delgadas
</string>
@@ -3058,12 +3137,6 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="Tight Sleeves">
Puños ceñidos
</string>
- <string name="Tilt Left">
- Tilt Left
- </string>
- <string name="Tilt Right">
- Tilt Right
- </string>
<string name="Toe Shape">
Punta: forma
</string>
@@ -3119,7 +3192,7 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
Pelo blanco
</string>
<string name="Wide">
- Ancho
+ Aumentar
</string>
<string name="Wide Back">
Completa
@@ -3205,6 +3278,21 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="IM_moderator_label">
(Moderador)
</string>
+ <string name="started_call">
+ Llamada de voz iniciada
+ </string>
+ <string name="joined_call">
+ Entrando a la llamada de voz
+ </string>
+ <string name="ringing-im">
+ Haciendo la llamada de voz...
+ </string>
+ <string name="connected-im">
+ Conectado, pulsa Colgar para salir
+ </string>
+ <string name="hang_up-im">
+ Se colgó la llamada de voz
+ </string>
<string name="only_user_message">
Usted es el único usuario en esta sesión.
</string>
@@ -3214,6 +3302,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="invite_message">
Pulse el botón [BUTTON NAME] para aceptar/conectar este chat de voz.
</string>
+ <string name="muted_message">
+ Has ignorado a este residente. Enviándole un mensaje, automáticamente dejarás de ignorarle.
+ </string>
+ <string name="generic">
+ Error en lo solicitado, por favor, inténtalo más tarde.
+ </string>
<string name="generic_request_error">
Error al hacer lo solicitado; por favor, inténtelo más tarde.
</string>
@@ -3232,19 +3326,153 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="not_a_mod_error">
Usted no es un moderador de la sesión.
</string>
+ <string name="muted">
+ Un moderador del grupo ha desactivado tu chat de texto.
+ </string>
<string name="muted_error">
Un moderador del grupo le ha desactivado el chat de texto.
</string>
<string name="add_session_event">
No se ha podido añadir usuarios a la sesión de chat con [RECIPIENT].
</string>
+ <string name="message">
+ No se ha podido enviar tu mensaje a la sesión de chat con [RECIPIENT].
+ </string>
<string name="message_session_event">
No se ha podido enviar su mensaje a la sesión de chat con [RECIPIENT].
</string>
+ <string name="mute">
+ Error moderando.
+ </string>
+ <string name="removed">
+ Se te ha sacado del grupo.
+ </string>
<string name="removed_from_group">
Ha sido eliminado del grupo.
</string>
<string name="close_on_no_ability">
Usted ya no tendrá más la capacidad de estar en la sesión de chat.
</string>
+ <string name="unread_chat_single">
+ [SOURCES] ha dicho algo nuevo
+ </string>
+ <string name="unread_chat_multiple">
+ [SOURCES] ha dicho algo nuevo
+ </string>
+ <string name="paid_you_ldollars">
+ [NAME] te ha pagado [AMOUNT] L$
+ </string>
+ <string name="you_paid_ldollars">
+ Has pagado [AMOUNT] L$ a [NAME] por [REASON].
+ </string>
+ <string name="you_paid_ldollars_no_reason">
+ Has pagado [AMOUNT] L$ a [NAME].
+ </string>
+ <string name="you_paid_ldollars_no_name">
+ Has pagado [AMOUNT] L$ por [REASON].
+ </string>
+ <string name="for a parcel of land">
+ para una parcela de terreno
+ </string>
+ <string name="for a land access pass">
+ para un pase de acceso a terrenos
+ </string>
+ <string name="for deeding land">
+ for deeding land
+ </string>
+ <string name="to create a group">
+ para crear un grupo
+ </string>
+ <string name="to join a group">
+ para entrar a un grupo
+ </string>
+ <string name="to upload">
+ to upload
+ </string>
+ <string name="giving">
+ Dando [AMOUNT] L$
+ </string>
+ <string name="uploading_costs">
+ Subir esto cuesta [AMOUNT] L$
+ </string>
+ <string name="this_costs">
+ Esto cuesta [AMOUNT] L$
+ </string>
+ <string name="buying_selected_land">
+ Compra del terreno seleccionado por [AMOUNT] L$
+ </string>
+ <string name="this_object_costs">
+ Este objeto cuesta [AMOUNT] L$
+ </string>
+ <string name="group_role_everyone">
+ Todos
+ </string>
+ <string name="group_role_officers">
+ Oficiales
+ </string>
+ <string name="group_role_owners">
+ Propietarios
+ </string>
+ <string name="uploading_abuse_report">
+ Subiendo...
+
+Denuncia de infracción
+ </string>
+ <string name="New Shape">
+ Anatomía nueva
+ </string>
+ <string name="New Skin">
+ Piel nueva
+ </string>
+ <string name="New Hair">
+ Pelo nuevo
+ </string>
+ <string name="New Eyes">
+ Ojos nuevos
+ </string>
+ <string name="New Shirt">
+ Camisa nueva
+ </string>
+ <string name="New Pants">
+ Pantalón nuevo
+ </string>
+ <string name="New Shoes">
+ Zapatos nuevos
+ </string>
+ <string name="New Socks">
+ Calcetines nuevos
+ </string>
+ <string name="New Jacket">
+ Chaqueta nueva
+ </string>
+ <string name="New Gloves">
+ Guantes nuevos
+ </string>
+ <string name="New Undershirt">
+ Camiseta nueva
+ </string>
+ <string name="New Underpants">
+ Ropa interior nueva
+ </string>
+ <string name="New Skirt">
+ Falda nueva
+ </string>
+ <string name="New Alpha">
+ Nueva Alfa
+ </string>
+ <string name="New Tattoo">
+ Tatuaje nuevo
+ </string>
+ <string name="Invalid Wearable">
+ No se puede poner
+ </string>
+ <string name="New Script">
+ Script nuevo
+ </string>
+ <string name="New Folder">
+ Carpeta nueva
+ </string>
+ <string name="Contents">
+ Contenidos
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/es/teleport_strings.xml b/indra/newview/skins/default/xui/es/teleport_strings.xml
index 0a605277f2..7e7ed6202f 100644
--- a/indra/newview/skins/default/xui/es/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/es/teleport_strings.xml
@@ -60,6 +60,9 @@ Vuelva a intentarlo en un momento.
<message name="completing">
Completando el teleporte.
</message>
+ <message name="completed_from">
+ Teleporte realizado desde [T_SLURL]
+ </message>
<message name="resolving">
Especificando el destino.
</message>
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 e7e2d8a0ee..5d630cdf48 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="À PROPOS DES TERRAINS">
+<floater name="floaterland" title="À PROPOS DU TERRAIN">
+ <floater.string name="maturity_icon_general">
+ &quot;Parcel_PG_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_moderate">
+ &quot;Parcel_M_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_adult">
+ &quot;Parcel_R_Dark&quot;
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] minutes
</floater.string>
@@ -15,7 +24,7 @@
<tab_container name="landtab" tab_min_width="60">
<panel label="GÉNÉRAL" name="land_general_panel">
<panel.string name="new users only">
- Nouveaux utilisateurs uniquement
+ Nouveaux résidents uniquement
</panel.string>
<panel.string name="anyone">
Tout le monde
@@ -109,7 +118,7 @@
<text name="Selling with no objects in parcel.">
Objets non inclus dans la vente
</text>
- <button label="Annuler la vente du terrain" label_selected="Annuler la vente du terrain" left="275" name="Cancel Land Sale" width="165"/>
+ <button label="Annuler la vente du terrain" label_selected="Annuler la vente du terrain" name="Cancel Land Sale"/>
<text name="Claimed:">
Acquis :
</text>
@@ -312,21 +321,21 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
</text>
<check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est cochée, n&apos;importe qui peut terraformer votre terrain. Il vaut mieux ne pas cocher cette option pour toujours pouvoir modifer votre propre terrain."/>
<check_box label="Voler" name="check fly" tool_tip="Si cette option est cochée, les résidents peuvent voler sur votre terrain. Si elle n&apos;est pas cochée, ils ne pourront voler que lorsqu&apos;ils arrivent et passent au dessus de votre terrain."/>
- <text left="152" name="allow_label2">
+ <text name="allow_label2">
Construire :
</text>
- <check_box label="Tous" left="285" name="edit objects check"/>
- <check_box label="Groupe" left="395" name="edit group objects check"/>
- <text left="152" name="allow_label3" width="150">
+ <check_box label="Tous" name="edit objects check"/>
+ <check_box label="Groupe" name="edit group objects check"/>
+ <text name="allow_label3">
Laisser entrer des objets :
</text>
- <check_box label="Tous" left="285" name="all object entry check"/>
- <check_box label="Groupe" left="395" name="group object entry check"/>
- <text left="152" name="allow_label4">
+ <check_box label="Tous" name="all object entry check"/>
+ <check_box label="Groupe" name="group object entry check"/>
+ <text name="allow_label4">
Exécuter des scripts :
</text>
- <check_box label="Tous" left="285" name="check other scripts"/>
- <check_box label="Groupe" left="395" name="check group scripts"/>
+ <check_box label="Tous" name="check other scripts"/>
+ <check_box label="Groupe" name="check group scripts"/>
<text name="land_options_label">
Options du terrain :
</text>
@@ -367,11 +376,11 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
Photo :
</text>
<texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
- <text bottom="-323" name="landing_point">
+ <text name="landing_point">
Lieu d&apos;arrivée : [LANDING]
</text>
- <button bottom="-323" label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d&apos;arrivée des visiteurs. Définit l&apos;emplacement de votre avatar sur ce terrain."/>
- <button bottom="-323" label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Effacer le lieu d&apos;arrivée"/>
+ <button label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d&apos;arrivée des visiteurs. Définit l&apos;emplacement de votre avatar sur ce terrain."/>
+ <button label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Effacer le lieu d&apos;arrivée"/>
<text bottom="-343" name="Teleport Routing: ">
Règles de téléportation :
</text>
@@ -391,11 +400,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
Page d&apos;accueil :
</text>
<line_editor left="97" name="media_url"/>
- <button label="Choisir" label_selected="Définir..." name="set_media_url"/>
- <text name="CurrentURL:">
- Page actuelle :
- </text>
- <button label="Réinitialiser..." label_selected="Réinitialiser..." name="reset_media_url" tool_tip="Actualiser l&apos;URL"/>
+ <button label="Choisir" name="set_media_url"/>
<check_box label="Masquer l&apos;URL" left="97" name="hide_media_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL du média. Cette option n&apos;est pas disponible pour les fichiers HTML."/>
<text name="Description:">
Description :
@@ -444,6 +449,9 @@ musique :
<panel.string name="access_estate_defined">
(défini par le domaine
</panel.string>
+ <panel.string name="allow_public_access">
+ Autoriser l&apos;accès public ([MATURITY])
+ </panel.string>
<panel.string name="estate_override">
Au moins une de ces options est définie au niveau du domaine.
</panel.string>
diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
index ecd9dd0863..503fe5c154 100644
--- a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="MODIFIER LES DROITS RELATIFS AU CONTENU">
+<floater name="floaterbulkperms" title="MODIFIER LES DROITS">
<floater.string name="nothing_to_modify_text">
- La sélection contient des contenus non modifiables.
+ Certains contenus sont non modifiables.
</floater.string>
<floater.string name="status_text">
- Permissions paramétrées sur [NAME]
+ Droits paramétrés sur [NAME]
</floater.string>
<floater.string name="start_text">
Demande de changement des droits lancée...
@@ -33,7 +33,7 @@
<button label="√ Tout" label_selected="Tout" name="check_all"/>
<button label="Effacer" label_selected="Aucun" name="check_none"/>
<text name="newperms">
- Nouvelles permissions
+ Nouveaux droits
</text>
<text name="GroupLabel">
Groupe :
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
index c7437c4603..4eaff8535e 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
@@ -4,7 +4,7 @@
Achetez [LINDENS] L$ pour environ [LOCALAMOUNT]
</floater.string>
<text left="5" name="info_need_more" right="-5">
- Vous avez besoin de plus de L$
+ Plus de L$ sont requis
</text>
<text name="contacting">
En train de contacter
@@ -38,7 +38,7 @@ le Lindex...
Estimation en cours...
</text>
<text name="buy_action">
- [NAME] L$ [PRICE]
+ [ACTION]
</text>
<text name="total_label">
Mon nouveau solde sera de
@@ -53,14 +53,14 @@ le Lindex...
Saisissez à nouveau le montant pour voir le taux de change actuel.
</text>
<text name="purchase_warning_repurchase">
- La confirmation de cet achat n&apos;achète que des L$, pas l&apos;objet.
+ Confirmer cet achat n'achète que des L$, pas l'objet.
</text>
<text bottom_delta="16" name="purchase_warning_notenough">
Vous n&apos;achetez pas assez de L$. Veuillez augmenter le montant.
</text>
<button label="Acheter" name="buy_btn"/>
<button label="Annuler" name="cancel_btn"/>
- <text left="5" name="info_cannot_buy" width="200" right="-5">
+ <text left="5" name="info_cannot_buy" right="-5" width="200">
Achat impossible
</text>
<button label="Accéder au Web" name="error_web"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml
index 309c93cf3b..558551b649 100644
--- a/indra/newview/skins/default/xui/fr/floater_camera.xml
+++ b/indra/newview/skins/default/xui/fr/floater_camera.xml
@@ -9,6 +9,18 @@
<floater.string name="move_tooltip">
Déplacer la caméra vers le haut et le bas, la gauche et la droite
</floater.string>
+ <floater.string name="orbit_mode_title">
+ Faire tourner
+ </floater.string>
+ <floater.string name="pan_mode_title">
+ Faire un panoramique
+ </floater.string>
+ <floater.string name="avatar_view_mode_title">
+ Préréglages
+ </floater.string>
+ <floater.string name="free_mode_title">
+ Voir l&apos;objet
+ </floater.string>
<panel name="controls">
<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
<panel name="zoom" tool_tip="Zoomer en direction du point central">
@@ -25,7 +37,7 @@
<panel name="buttons">
<button label="" name="orbit_btn" tool_tip="Faire tourner la caméra"/>
<button label="" name="pan_btn" tool_tip="Faire un panoramique"/>
- <button label="" name="avatarview_btn" tool_tip="Vue subjective"/>
+ <button label="" name="avatarview_btn" tool_tip="Préréglages"/>
<button label="" name="freecamera_btn" tool_tip="Voir l&apos;objet"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
index 8d7fe76b35..7ead543c78 100644
--- a/indra/newview/skins/default/xui/fr/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
@@ -26,6 +26,6 @@
Couleur actuelle :
</text>
<text left="8" name="(Drag below to save.)" width="220">
- (Faire glisser dessous pour enregistrer.)
+ Enreg. : faire glisser dessous
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml
index 82b54aeffc..d5ee070dcd 100644
--- a/indra/newview/skins/default/xui/fr/floater_customize.xml
+++ b/indra/newview/skins/default/xui/fr/floater_customize.xml
@@ -155,7 +155,7 @@
</text>
<panel label="Chemise" name="Shirt">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Créer une chemise" label_selected="Créer une chemise" name="Create New"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
@@ -188,7 +188,7 @@
</panel>
<panel label="Pantalon" name="Pants">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Créer un pantalon" label_selected="Créer un pantalon" name="Create New"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
@@ -246,7 +246,7 @@
Chaussures :
</text>
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/>
@@ -279,7 +279,7 @@
Chaussettes :
</text>
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/>
@@ -313,7 +313,7 @@
</text>
<texture_picker label="Tissu (dessus)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/>
<texture_picker label="Tissu (dessous)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="81"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="81"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/>
@@ -346,7 +346,7 @@
Gants :
</text>
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/>
@@ -379,7 +379,7 @@
Débardeur :
</text>
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/>
@@ -412,7 +412,7 @@
Caleçon :
</text>
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/>
@@ -445,7 +445,7 @@
Jupe :
</text>
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
<button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/>
@@ -483,7 +483,7 @@
<button label="Enlever" label_selected="Enlever" name="Take Off"/>
<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
- <button label="Annuler modification" label_selected="Annuler modification" name="Revert"/>
+ <button label="Rétablir" label_selected="Rétablir" name="Revert"/>
</panel>
<panel label="Alpha" name="Alpha">
<text name="title">
@@ -519,7 +519,7 @@
<button label="Enlever" label_selected="Enlever" name="Take Off"/>
<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
- <button label="Annuler modification" label_selected="Annuler modification" name="Revert"/>
+ <button label="Rétablir" label_selected="Rétablir" name="Revert"/>
</panel>
</tab_container>
<scroll_container left="251" name="panel_container"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
index 15cc6cd1ba..a381f64cd9 100644
--- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
@@ -4,7 +4,7 @@
<panel label="Cycle du jour" name="Day Cycle">
<button label="?" name="WLDayCycleHelp" />
<text name="WL12am">
- Minuit
+ Min.
</text>
<text name="WL3am">
3h
@@ -28,7 +28,7 @@
21h
</text>
<text name="WL12am2">
- Minuit
+ Min.
</text>
<text name="WL12amHash">
|
@@ -84,7 +84,7 @@
<text name="DayCycleText3" left="280" width="200">
Prévisualiser :
</text>
- <button label="Jouer" label_selected="Jouer" name="WLAnimSky" left_delta="90"/>
+ <button label="Lire" label_selected="Lire" name="WLAnimSky" left_delta="90"/>
<button label="Stop !" label_selected="Stop" name="WLStopAnimSky" />
<button label="Utiliser heure domaine" label_selected="Aller heure domaine"
name="WLUseLindenTime" />
diff --git a/indra/newview/skins/default/xui/fr/floater_event.xml b/indra/newview/skins/default/xui/fr/floater_event.xml
index 02192c65ec..b005ce3b36 100644
--- a/indra/newview/skins/default/xui/fr/floater_event.xml
+++ b/indra/newview/skins/default/xui/fr/floater_event.xml
@@ -9,6 +9,18 @@
<floater.string name="dont_notify">
Ne pas prévenir
</floater.string>
+ <floater.string name="moderate">
+ Modéré
+ </floater.string>
+ <floater.string name="adult">
+ Adulte
+ </floater.string>
+ <floater.string name="general">
+ Général
+ </floater.string>
+ <floater.string name="unknown">
+ Inconnu
+ </floater.string>
<layout_stack name="layout">
<layout_panel name="profile_stack">
<text name="event_name">
@@ -21,12 +33,21 @@
Organisé par :
</text>
<text initial_value="(récupération en cours)" name="event_runby"/>
+ <text name="event_date_label">
+ Date :
+ </text>
<text name="event_date">
10/10/2010
</text>
+ <text name="event_duration_label">
+ Durée :
+ </text>
<text name="event_duration">
1 heure
</text>
+ <text name="event_covercharge_label">
+ Prix :
+ </text>
<text name="event_cover">
Gratuit
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml
index 113df0acc4..1e0f5672a4 100644
--- a/indra/newview/skins/default/xui/fr/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_gesture.xml
@@ -9,9 +9,9 @@
<floater.string name="copy_name">
Copie de [COPY_NAME]
</floater.string>
- <scroll_list bottom_delta="-385" height="360" name="gesture_list">
- <scroll_list.columns label="Nom" name="name" width="145"/>
- <scroll_list.columns label="Chat" name="trigger" width="85"/>
+ <scroll_list name="gesture_list">
+ <scroll_list.columns label="Nom" name="name"/>
+ <scroll_list.columns label="Chat" name="trigger"/>
<scroll_list.columns label="" name="key"/>
<scroll_list.columns label="Touche" name="shortcut"/>
</scroll_list>
diff --git a/indra/newview/skins/default/xui/fr/floater_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
index 187814eba2..e20da40bcf 100644
--- a/indra/newview/skins/default/xui/fr/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
@@ -2,7 +2,7 @@
<floater name="godtools floater" title="OUTILS DIVINS">
<tab_container name="GodTools Tabs">
<panel label="Grille" name="grid">
- <button label="Éjecter tous" label_selected="Éjecter tous" name="Kick all users" width="175"/>
+ <button label="Éjecter tous les résidents" label_selected="Éjecter tous les résidents" name="Kick all users" width="175"/>
<button label="Vider le cache cartographique de la région" label_selected="Vider le cache cartographique de la région" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
</panel>
<panel label="Région" name="region">
diff --git a/indra/newview/skins/default/xui/fr/floater_im.xml b/indra/newview/skins/default/xui/fr/floater_im.xml
index 0e4039d3af..15b01dbf12 100644
--- a/indra/newview/skins/default/xui/fr/floater_im.xml
+++ b/indra/newview/skins/default/xui/fr/floater_im.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="Message instantané">
<text name="only_user_message">
- Vous êtes le seul participant à cette session.
+ Vous êtes le seul résident participant à cette session.
</text>
<text name="offline_message">
[FIRST] [LAST] est déconnecté(e).
@@ -31,7 +31,7 @@
Un modérateur de groupe a désactivé votre chat écrit.
</string>
<string name="add_session_event">
- Impossible d&apos;ajouter des participants à la session de chat avec [RECIPIENT].
+ Impossible d&apos;ajouter des résidents à la session de chat avec [RECIPIENT].
</string>
<string name="message_session_event">
Impossible d&apos;envoyer votre message à la session de chat avec [RECIPIENT].
diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
index 20dffbbbc8..39a861d8bd 100644
--- a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
@@ -25,16 +25,16 @@
Normal, fenêtre en arrière-plan
</floater.string>
<floater.string name="client_frame_time_critical_msg">
- Taux de défilement client ci-dessous [CLIENT_FRAME_RATE_CRITICAL]
+ Taux de défilement [CLIENT_FRAME_RATE_CRITICAL]
</floater.string>
<floater.string name="client_frame_time_warning_msg">
- Taux de défilement client entre [CLIENT_FRAME_RATE_CRITICAL] et [CLIENT_FRAME_RATE_WARNING]
+ Taux de défilement entre [CLIENT_FRAME_RATE_CRITICAL] et [CLIENT_FRAME_RATE_WARNING]
</floater.string>
<floater.string name="client_frame_time_normal_msg">
Normal
</floater.string>
<floater.string name="client_draw_distance_cause_msg">
- Cause possible : la limite d&apos;affichage est trop élevée
+ Cause possible : limite d&apos;affichage trop élevée
</floater.string>
<floater.string name="client_texture_loading_cause_msg">
Cause possible : images en cours de chargement
@@ -43,7 +43,7 @@
Cause possible : trop d&apos;images en mémoire
</floater.string>
<floater.string name="client_complex_objects_cause_msg">
- Cause possible : trop d&apos;objets complexes dans la scène
+ Cause possible : trop d&apos;objets complexes
</floater.string>
<floater.string name="network_text_msg">
Réseau
@@ -70,10 +70,10 @@
300
</floater.string>
<floater.string name="network_ping_critical_msg">
- Temps de connexion ping supérieur à [NETWORK_PING_CRITICAL] ms
+ Connexion ping > [NETWORK_PING_CRITICAL] ms
</floater.string>
<floater.string name="network_ping_warning_msg">
- Temps de connexion ping entre [NETWORK_PING_WARNING] et [NETWORK_PING_CRITICAL] ms
+ Connexion ping entre [NETWORK_PING_WARNING] et [NETWORK_PING_CRITICAL] ms
</floater.string>
<floater.string name="network_packet_loss_cause_msg">
Mauvaise connexion possible ou réglage de la bande passante trop élevé.
@@ -94,10 +94,10 @@
20
</floater.string>
<floater.string name="server_frame_time_critical_msg">
- Taux de défilement du simulateur au dessous de [SERVER_FRAME_RATE_CRITICAL]
+ Défilement du simulateur &lt; [SERVER_FRAME_RATE_CRITICAL]
</floater.string>
<floater.string name="server_frame_time_warning_msg">
- Taux de défilement du simulateur entre [SERVER_FRAME_RATE_CRITICAL] et [SERVER_FRAME_RATE_WARNING]
+ Défilement simulateur entre [SERVER_FRAME_RATE_CRITICAL] et [SERVER_FRAME_RATE_WARNING]
</floater.string>
<floater.string name="server_frame_time_normal_msg">
Normal
@@ -112,7 +112,7 @@
Cause possible : trop de trafic réseau
</floater.string>
<floater.string name="server_agent_cause_msg">
- Cause possible : trop de personnes en mouvement dans la région
+ Cause possible : trop de personnes en mouvement
</floater.string>
<floater.string name="server_images_cause_msg">
Cause possible : trop de calculs d&apos;images
diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
index 52b1a16bbc..7647452e91 100644
--- a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script ed float" title="SCRIPT : NOUVEAU SCRIPT">
<floater.string name="not_allowed">
- Ce script ne peut pas être copié, visualisé ou modifié. Pour visualiser ou modifier un script à l&apos;intérieur d&apos;un objet, vous devez avoir les permissions requises.
+ Ce script ne peut pas être copié, visualisé ou modifié. Pour visualiser ou modifier un script à l&apos;intérieur d&apos;un objet, vous devez avoir les droits requis.
</floater.string>
<floater.string name="script_running">
Exécution en cours
@@ -9,7 +9,7 @@
<floater.string name="Title">
SCRIPT : [NAME]
</floater.string>
- <button label="Réinitialiser" label_selected="Réinitialiser" left="390" name="Reset" width="100"/>
- <check_box initial_value="true" label="Exécution en cours" left="4" name="running"/>
- <check_box initial_value="true" label="Mono" left_delta="160" name="mono"/>
+ <button label="Réinitialiser" label_selected="Réinitialiser" name="Reset"/>
+ <check_box initial_value="true" label="Exécution en cours" name="running"/>
+ <check_box initial_value="true" label="Mono" name="mono"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml
index 0e8887bb96..fac569557e 100644
--- a/indra/newview/skins/default/xui/fr/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_moveview.xml
@@ -18,6 +18,15 @@
<string name="fly_back_tooltip">
Voler vers l&apos;arrière (appuyer sur la flèche vers le bas ou S)
</string>
+ <string name="walk_title">
+ Marcher
+ </string>
+ <string name="run_title">
+ Courir
+ </string>
+ <string name="fly_title">
+ Voler
+ </string>
<panel name="panel_actions">
<button label="" label_selected="" name="turn left btn" tool_tip="Tourner à gauche (appuyer sur la flèche de gauche ou sur A)"/>
<button label="" label_selected="" name="turn right btn" tool_tip="Tourner à droite (appuyer sur la flèche de droite ou sur D)"/>
@@ -30,6 +39,5 @@
<button label="" name="mode_walk_btn" tool_tip="Mode marche"/>
<button label="" name="mode_run_btn" tool_tip="Mode course"/>
<button label="" name="mode_fly_btn" tool_tip="Mode vol"/>
- <button label="Atterrir" name="stop_fly_btn" tool_tip="Atterrir"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml b/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml
index 72775169cb..a59253a746 100644
--- a/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT PRÈS DE VOUS"/>
+<floater name="nearby_chat" title="CHAT PRÈS DE MOI"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
index f83000cf87..fd569a7f95 100644
--- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="PERMISSIONS DE CHARGEMENT PAR DÉFAUT">
+<floater name="perm prefs" title="DROITS DE CHARGEMENT PAR DÉFAUT">
<panel label="Droits" name="permissions">
<button label="?" label_selected="?" name="help"/>
<check_box label="Partager avec le groupe" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml
index 406e91a18a..052e43388b 100644
--- a/indra/newview/skins/default/xui/fr/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preferences.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater min_width="330" name="Preferences" title="PRÉFÉRENCES" width="626">
+<floater name="Preferences" title="PRÉFÉRENCES">
<button label="OK" label_selected="OK" name="OK"/>
<button label="Annuler" label_selected="Annuler" name="Cancel"/>
- <tab_container name="pref core" tab_width="126" width="626">
+ <tab_container name="pref core">
<panel label="Général" name="general"/>
<panel label="Graphiques" name="display"/>
<panel label="Confidentialité" name="im"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
index dc40d31a79..9fc9d14026 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
@@ -19,7 +19,7 @@
<combo_item name="Unconstrained">
Sans contraintes
</combo_item>
- <combo_item name="1:1" tool_tip="Logo du groupe ou profil dans le monde physique">
+ <combo_item name="1:1" tool_tip="Logo du groupe ou profil dans la vie réelle">
1:1
</combo_item>
<combo_item name="4:3" tool_tip="Profil [SECOND_LIFE]">
@@ -28,7 +28,7 @@
<combo_item name="10:7" tool_tip="Petites annonces, repères">
10:7
</combo_item>
- <combo_item name="3:2" tool_tip="À propos des terrains">
+ <combo_item name="3:2" tool_tip="À propos du terrain">
3:2
</combo_item>
<combo_item name="16:10">
diff --git a/indra/newview/skins/default/xui/fr/floater_publish_classified.xml b/indra/newview/skins/default/xui/fr/floater_publish_classified.xml
new file mode 100644
index 0000000000..39a2b086f1
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_publish_classified.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="publish_classified" title="Publication de l&apos;annonce">
+ <text name="explanation_text">
+ Votre petite annonce sera visible pendant une semaine à partir de sa date de publication.
+
+Rappel : les frais liés aux annonces passées ne sont pas remboursables.
+ </text>
+ <spinner label="Coût de l&apos;annonce :" name="price_for_listing" tool_tip="Coût de l’annonce." value="50"/>
+ <text name="l$_text" value="L$"/>
+ <text name="more_info_text">
+ En savoir plus (lien vers l&apos;aide sur les annonces)
+ </text>
+ <button label="Publier" name="publish_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index 74738b7e31..ccb862acac 100644
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -62,8 +62,8 @@
<check_box label="Interface" name="ui_check"/>
<check_box label="HUD" name="hud_check"/>
<check_box label="Garder ouvert après enregistrement" name="keep_open_check"/>
- <check_box label="Contraindre les proportions" name="keep_aspect_check"/>
- <check_box label="Arrêt sur image (plein écran)" name="freeze_frame_check"/>
+ <check_box label="Conserver les proportions" name="keep_aspect_check"/>
+ <check_box label="Figer l&apos;image (plein écran)" name="freeze_frame_check"/>
<button label="Rafraîchir" name="new_snapshot_btn"/>
<check_box label="Rafraîchissement automatique" name="auto_snapshot_check"/>
<button label="Enregistrer ([AMOUNT] L$)" name="upload_btn" width="118"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_sys_well.xml b/indra/newview/skins/default/xui/fr/floater_sys_well.xml
index 47b761aed9..dbdd32974c 100644
--- a/indra/newview/skins/default/xui/fr/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sys_well.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notification_chiclet" title="NOTIFICATIONS">
+<floater name="sys_well_window" title="NOTIFICATIONS">
<string name="title_im_well_window">
CONVERSATIONS
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 3488ae15d1..16d276f8c2 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" short_title="OUTILS DE CONSTRUCTION" title="">
+<floater name="toolbox floater" short_title="OUTILS POUR LA CONSTRUCTION" title="">
<floater.string name="status_rotate">
Pour faire tourner l&apos;objet, faîtes glisser les bandes de couleur.
</floater.string>
@@ -61,7 +61,7 @@
<radio_item label="Bouger" name="radio position"/>
<radio_item label="Pivoter (Ctrl)" name="radio rotate"/>
<radio_item label="Étirer (Ctrl+Maj)" name="radio stretch"/>
- <radio_item label="Sélectionner une face" name="radio select face"/>
+ <radio_item label="Choisir une face" name="radio select face"/>
</radio_group>
<check_box label="Modification liée" name="checkbox edit linked parts"/>
<text name="RenderingCost" tool_tip="Affiche le coût du rendu calculé pour cet objet">
@@ -96,7 +96,7 @@
<check_box initial_value="true" label="Centrer" name="checkbox copy centers"/>
<check_box label="Pivoter" name="checkbox copy rotates"/>
<radio_group name="land_radio_group">
- <radio_item label="Sélectionner le terrain" name="radio select land"/>
+ <radio_item label="Choisir le terrain" name="radio select land"/>
<radio_item label="Aplatir" name="radio flatten"/>
<radio_item label="Élever" name="radio raise"/>
<radio_item label="Abaisser" name="radio lower"/>
@@ -179,9 +179,9 @@
<text name="Group:">
Groupe :
</text>
- <button label="Définir..." label_selected="Définir..." name="button set group" tool_tip="Choisissez un groupe pour partager les permissions de cet objet"/>
+ <button label="Définir..." label_selected="Définir..." name="button set group" tool_tip="Choisissez un groupe pour partager les droits de cet objet"/>
<name_box initial_value="Chargement..." name="Group Name Proxy"/>
- <button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les permissions au prochain propriétaire. Seul un officier peut céder les objets d&apos;un groupe."/>
+ <button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les droits au prochain propriétaire. Seul un officier peut céder les objets d&apos;un groupe."/>
<check_box label="Partager" name="checkbox share with group" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Transférer."/>
<text name="label click action">
Cliquer pour :
@@ -280,7 +280,7 @@
<combo_box.item label="Caoutchouc" name="Rubber"/>
</combo_box>
<text name="text cut">
- Découpe du tracé (début/fin)
+ Découpe du tracé (déb./fin)
</text>
<spinner label="D" name="cut begin"/>
<spinner label="F" name="cut end"/>
@@ -339,8 +339,8 @@
<text name="text revolutions">
Révolutions
</text>
- <texture_picker label="Texture du sculptie" name="sculpt texture control" tool_tip="Cliquez pour sélectionner une image"/>
- <check_box label="Mirroir" name="sculpt mirror control" tool_tip="Inverse le sculptie le long de l&apos;axe X"/>
+ <texture_picker label="Texture de la sculptie" name="sculpt texture control" tool_tip="Cliquez pour sélectionner une image"/>
+ <check_box label="Mirroir" name="sculpt mirror control" tool_tip="Inverse la sculptie le long de l&apos;axe X"/>
<check_box label="A l&apos;envers" name="sculpt invert control" tool_tip="Inverse les normales des sculpties, qui apparaissent alors à l&apos;envers"/>
<text name="label sculpt type">
Type de raccord
@@ -355,7 +355,7 @@
</panel>
<panel label="Attributs" name="Features">
<text name="select_single">
- Sélectionnez un prim pour modifier les attributs.
+ Choisir une prim pour changer les attributs.
</text>
<text name="edit_object">
Modifier les attributs de l&apos;objet :
@@ -441,9 +441,9 @@
<check_box label="Inverser" name="checkbox flip s"/>
<spinner label="Vertical (V)" name="TexScaleV"/>
<check_box label="Inverser" name="checkbox flip t"/>
- <spinner label="RotationËš" left="122" name="TexRot" width="58"/>
- <spinner label="Répétitions / Mètre" left="122" name="rptctrl" width="58"/>
- <button label="Appliquer" label_selected="Appliquer" left_delta="68" name="button apply" width="75"/>
+ <spinner label="RotationËš" name="TexRot" />
+ <spinner label="Répétitions / Mètre" name="rptctrl"/>
+ <button label="Appliquer" label_selected="Appliquer" name="button apply"/>
<text name="tex offset">
Décalage de la texture
</text>
@@ -474,7 +474,7 @@
<text name="label_area">
Surface : [AREA] m²
</text>
- <button label="À propos des terrains" label_selected="À propos des terrains" name="button about land" width="142"/>
+ <button label="À propos du terrain" label_selected="À propos du terrain" name="button about land" width="142"/>
<check_box label="Afficher les propriétaires" name="checkbox show owners" tool_tip="Colorier les parcelles en fonction du type de leur propriétaire : Vert = votre terrain Turquoise = le terrain de votre groupe Rouge = appartenant à d&apos;autres Jaune = en vente Mauve = aux enchères Gris = public"/>
<text name="label_parcel_modify">
Modifier la parcelle
diff --git a/indra/newview/skins/default/xui/fr/floater_tos.xml b/indra/newview/skins/default/xui/fr/floater_tos.xml
index 2c8e8bc5bc..cdfd26f402 100644
--- a/indra/newview/skins/default/xui/fr/floater_tos.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tos.xml
@@ -9,9 +9,9 @@
<text name="tos_title">
Acceptation des Conditions Générales d&apos;Utilisation
</text>
- <check_box label="J&apos;accepte les Conditions d&apos;utilisation" name="agree_chk"/>
+ <check_box label="J&apos;accepte les Conditions d&apos;utilisation et le Règlement sur le respect de la vie privée" name="agree_chk"/>
<text name="tos_heading">
- Veuillez lire attentivement les Conditions d&apos;utilisation suivantes. Pour vous connecter à [SECOND_LIFE], vous devez accepter l&apos;accord.
+ Veuillez lire attentivement les Conditions d&apos;utilisation et le Règlement sur le respect de la vie privée suivants. Vous devez les accepter pour pouvoir vous connecter à [SECOND_LIFE].
</text>
<text_editor name="tos_text">
TOS_TEXT
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
index 54ba2ad3e5..1a7bc228fa 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
@@ -16,6 +16,9 @@
Il n&apos;y a personne près de vous avec le chat vocal activé
</string>
<layout_stack name="my_call_stack">
+ <layout_panel name="my_panel">
+ <text name="user_text" value="Mon avatar :"/>
+ </layout_panel>
<layout_panel name="leave_call_btn_panel">
<button label="Quitter l&apos;appel" name="leave_call_btn"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml
index 1a74017330..96723b0fe6 100644
--- a/indra/newview/skins/default/xui/fr/floater_water.xml
+++ b/indra/newview/skins/default/xui/fr/floater_water.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="ÉDITEUR D&apos;EAU AVANCÉE">
+<floater name="Water Floater" title="ÉDITEUR D&apos;EAU AVANCÉ">
<floater.string name="WLDefaultWaterNames">
Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
</floater.string>
<text name="KeyFramePresetsText" width="120">
- Préréglages eau :
+ Préréglages :
</text>
<button label="Nouveau" label_selected="Nouveau" name="WaterNewPreset"/>
<button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WaterSavePreset" width="75"/>
<button label="Supprimer" label_selected="Supprimer" left_delta="80" name="WaterDeletePreset"/>
<tab_container name="Water Tabs">
- <panel label="Paramètres" name="Settings">
+ <panel label="PARAMÈTRES" name="Settings">
<text name="BHText">
Couleur du brouillard dans l&apos;eau
</text>
@@ -34,7 +34,7 @@
Décalage Fresnel
</text>
<text name="DensMultText">
- Réfraction au dessus
+ Réfraction au-dessus
</text>
<text name="WaterScaleBelowText">
Réfraction en dessous
@@ -43,7 +43,7 @@
Multiplicateur de flou
</text>
</panel>
- <panel label="Image" name="Waves">
+ <panel label="IMAGE" name="Waves">
<text name="BHText">
Direction grande vague
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
index d92fadd048..74f1697449 100644
--- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="WindLight floater" title="ÉDITEUR DE CIEL AVANCÉ" width="706">
<text name="KeyFramePresetsText">
- Préréglages ciel :
+ Préréglages :
</text>
<button label="Nouveau" label_selected="Nouveau" name="WLNewPreset"/>
<button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WLSavePreset" width="75"/>
<button label="Supprimer" label_selected="Supprimer" left_delta="80" name="WLDeletePreset"/>
- <button label="Éditeur du cycle du jour" label_selected="Éditeur du cycle du jour" left_pad="20" left_delta="95" name="WLDayCycleMenuButton" width="150"/>
+ <button label="Éditeur du cycle du jour" label_selected="Éditeur du cycle du jour" left_delta="95" left_pad="20" name="WLDayCycleMenuButton" width="150"/>
<tab_container name="WindLight Tabs" width="706">
- <panel label="Atmosphère" name="Atmosphere">
+ <panel label="ATMOSPHÈRE" name="Atmosphere">
<text name="BHText">
Bleu de l&apos;horizon
</text>
@@ -62,7 +62,7 @@
</text>
<button label="?" name="WLMaxAltitudeHelp"/>
</panel>
- <panel label="Éclairage" name="Lighting">
+ <panel label="LUMIÈRE" name="Lighting">
<text name="SLCText">
Couleur soleil/lune
</text>
@@ -118,7 +118,7 @@
</text>
<button label="?" name="WLStarBrightnessHelp"/>
</panel>
- <panel label="Nuages" name="Clouds">
+ <panel label="NUAGES" name="Clouds">
<text name="WLCloudColorText">
Couleur des nuages
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml
index 19ea764ae8..4d500857ea 100644
--- a/indra/newview/skins/default/xui/fr/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_world_map.xml
@@ -1,91 +1,70 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="worldmap" title="CARTE DU MONDE">
- <panel name="objects_mapview" width="542"/>
<panel name="layout_panel_1">
<text name="events_label">
Légende
</text>
</panel>
- <panel>
- <button label="Afficher mon emplacement" label_selected="Afficher mon emplacement" name="Show My Location" tool_tip="Centrer la carte sur l&apos;emplacement de mon avatar" width="165"/>
+ <panel name="layout_panel_2">
+ <button name="Show My Location" tool_tip="Centrer la carte sur l’emplacement de mon avatar"/>
<text name="me_label">
Moi
</text>
- <check_box label="Résident" name="people_chk"/>
- <icon left="-262" name="person"/>
<text name="person_label">
Résident
</text>
- <check_box label="Infohub" name="infohub_chk"/>
- <icon left="-266" name="infohub"/>
<text name="infohub_label">
Infohub
</text>
- <check_box label="Terrain à vendre" name="land_for_sale_chk"/>
- <icon left="-266" name="landforsale"/>
<text name="land_sale_label">
Vente de terrains
</text>
- <icon left="-270" name="square2"/>
<text name="by_owner_label">
- par le propriétaire
+ propriétaire
</text>
<text name="auction_label">
enchères
</text>
- <button label="Aller chez moi" label_selected="Aller chez moi" left="-120" name="Go Home" tool_tip="Me téléporter jusqu&apos;à mon domicile" width="108"/>
+ <button name="Go Home" tool_tip="Me téléporter jusqu’à mon domicile"/>
<text name="Home_label">
Domicile
</text>
- <text left="-144" name="events_label">
+ <text name="events_label">
Événements :
</text>
- <check_box label="PG" name="event_chk"/>
- <icon left="-132" name="event"/>
<text name="pg_label">
Général
</text>
- <check_box initial_value="true" label="Mature" name="event_mature_chk"/>
- <icon left="-132" name="events_mature_icon"/>
+ <check_box initial_value="true" name="event_mature_chk"/>
<text name="mature_label">
Modéré
</text>
- <check_box label="Adult" name="event_adult_chk"/>
- <icon left="-132" name="events_adult_icon"/>
<text name="adult_label">
Adulte
</text>
</panel>
- <panel>
+ <panel name="layout_panel_3">
<text name="find_on_map_label">
Situer sur la carte
</text>
</panel>
- <panel>
- <combo_box label="Amis connectés" name="friend combo" tool_tip="Afficher les amis sur la carte" width="232">
+ <panel name="layout_panel_4">
+ <combo_box label="Amis connectés" name="friend combo" tool_tip="Afficher les amis sur la carte">
<combo_box.item label="Mes amis connectés" name="item1"/>
</combo_box>
- <icon left="-270" name="landmark_icon"/>
- <combo_box label="Mes repères" name="landmark combo" tool_tip="Repère à afficher sur la carte" width="232">
+ <combo_box label="Mes repères" name="landmark combo" tool_tip="Repère à afficher sur la carte">
<combo_box.item label="Mes repères" name="item1"/>
</combo_box>
- <search_editor label="Régions par nom" name="location" tool_tip="Saisissez le nom d&apos;une région" width="155"/>
- <button label="Trouver" label_selected="&gt;" left_delta="160" name="DoSearch" tool_tip="Recherchez sur la carte" width="75"/>
+ <search_editor label="Régions par nom" name="location" tool_tip="Tapez le nom d&apos;une région"/>
+ <button label="Trouver" name="DoSearch" tool_tip="Rechercher une région"/>
<button name="Clear" tool_tip="Effacer les lignes de suivi et réinitialiser la carte"/>
- <scroll_list left="-270" name="search_results" width="252">
- <scroll_list.columns label="" name="icon"/>
- <scroll_list.columns label="" name="sim_name"/>
- </scroll_list>
- <button label="Téléporter" label_selected="Téléporter" left="-270" name="Teleport" tool_tip="Téléporter à l&apos;endroit sélectionné"/>
- <button label="Copier la SLurl" left="-270" name="copy_slurl" tool_tip="Copie l&apos;emplacement actuel sous la forme d&apos;une SLurl à utiliser sur le Web."/>
- <button label="Afficher la sélection" label_selected="Afficher la destination" name="Show Destination" tool_tip="Centrer la carte sur l&apos;endroit sélectionné" width="165"/>
+ <button label="Téléporter" name="Teleport" tool_tip="Me téléporter à l&apos;emplacement sélectionné"/>
+ <button label="Copier la SLurl" name="copy_slurl" tool_tip="Copie l’emplacement actuel sous la forme d’une SLurl à utiliser sur le Web."/>
+ <button label="Afficher la sélection" name="Show Destination" tool_tip="Centrer la carte sur l&apos;emplacement sélectionné"/>
</panel>
- <panel>
+ <panel name="layout_panel_5">
<text name="zoom_label">
Zoomer
</text>
</panel>
- <panel>
- <slider label="Zoom" left="-270" name="zoom slider"/>
- </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/language_settings.xml b/indra/newview/skins/default/xui/fr/language_settings.xml
index 71418d446a..117ae16ee8 100644
--- a/indra/newview/skins/default/xui/fr/language_settings.xml
+++ b/indra/newview/skins/default/xui/fr/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">french</string>
+ <string name="DarwinLocale">fr_FR.UTF-8</string>
+ <string name="LinuxLocale">fr_FR.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
index ccb93f129e..8d51c1b4e3 100644
--- a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
@@ -8,7 +8,7 @@
<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
<menu_item_call label="Ignorer" name="Avatar Mute"/>
<menu_item_call label="Signaler" name="abuse"/>
- <menu_item_call label="Geler" name="Freeze..."/>
+ <menu_item_call label="Figer" name="Freeze..."/>
<menu_item_call label="Expulser" name="Eject..."/>
<menu_item_call label="Débogage" name="Debug..."/>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
index 289912cd05..b42271e969 100644
--- a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
@@ -8,7 +8,7 @@
<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
<menu_item_call label="Ignorer" name="Avatar Mute"/>
<menu_item_call label="Signaler" name="abuse"/>
- <menu_item_call label="Geler" name="Freeze..."/>
+ <menu_item_call label="Figer" name="Freeze..."/>
<menu_item_call label="Expulser" name="Eject..."/>
<menu_item_call label="Débogage" name="Debug..."/>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
index e370e8d3b8..c8643708da 100644
--- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
@@ -10,8 +10,8 @@
<menu_item_call label="Chaussettes" name="Socks"/>
<menu_item_call label="Veste" name="Jacket"/>
<menu_item_call label="Gants" name="Gloves"/>
- <menu_item_call label="Sous-vêtements (homme)" name="Self Undershirt"/>
- <menu_item_call label="Sous-vêtements (femme)" name="Self Underpants"/>
+ <menu_item_call label="Débardeur" name="Self Undershirt"/>
+ <menu_item_call label="Caleçon" name="Self Underpants"/>
<menu_item_call label="Tatouage" name="Self Tattoo"/>
<menu_item_call label="Alpha" name="Self Alpha"/>
<menu_item_call label="Tous les habits" name="All Clothes"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
index e5746dd4c2..0da9a1806d 100644
--- a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
@@ -9,7 +9,7 @@
<menu_item_call label="Ignorer" name="block"/>
<menu_item_call label="Ne plus ignorer" name="unblock"/>
<menu_item_call label="Signaler" name="report"/>
- <menu_item_call label="Geler" name="freeze"/>
+ <menu_item_call label="Figer" name="freeze"/>
<menu_item_call label="Expulser" name="eject"/>
<menu_item_call label="Débogage" name="debug"/>
<menu_item_call label="Situer sur la carte" name="find_on_map"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml
index 0e5abdad0a..57b0a768c2 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml
@@ -18,8 +18,8 @@
<menu_item_call label="Nouvelle veste" name="New Jacket"/>
<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
<menu_item_call label="Nouveaux gants" name="New Gloves"/>
- <menu_item_call label="Nouveaux sous-vêtements (homme)" name="New Undershirt"/>
- <menu_item_call label="Nouveaux sous-vêtements (femme)" name="New Underpants"/>
+ <menu_item_call label="Nouveau débardeur" name="New Undershirt"/>
+ <menu_item_call label="Nouveau caleçon" name="New Underpants"/>
<menu_item_call label="Nouvel alpha" name="New Alpha"/>
<menu_item_call label="Nouveau tatouage" name="New Tattoo"/>
</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_land.xml b/indra/newview/skins/default/xui/fr/menu_land.xml
index 80cc49aa42..b84daee3ae 100644
--- a/indra/newview/skins/default/xui/fr/menu_land.xml
+++ b/indra/newview/skins/default/xui/fr/menu_land.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Land Pie">
- <menu_item_call label="À propos des terrains" name="Place Information..."/>
+ <menu_item_call label="À propos du terrain" name="Place Information..."/>
<menu_item_call label="M&apos;asseoir ici" name="Sit Here"/>
<menu_item_call label="Acheter ce terrain" name="Land Buy"/>
<menu_item_call label="Acheter un pass" name="Land Buy Pass"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_mini_map.xml b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
index a9facb2c30..9dc40af502 100644
--- a/indra/newview/skins/default/xui/fr/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
+<menu name="Popup">
<menu_item_call label="Zoom rapproché" name="Zoom Close"/>
<menu_item_call label="Zoom moyen" name="Zoom Medium"/>
<menu_item_call label="Zoom éloigné" name="Zoom Far"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml
index 1837be9c5d..6492a83e06 100644
--- a/indra/newview/skins/default/xui/fr/menu_object.xml
+++ b/indra/newview/skins/default/xui/fr/menu_object.xml
@@ -5,6 +5,7 @@
<menu_item_call label="Construire" name="Build"/>
<menu_item_call label="Ouvrir" name="Open"/>
<menu_item_call label="M&apos;asseoir ici" name="Object Sit"/>
+ <menu_item_call label="Me lever" name="Object Stand Up"/>
<menu_item_call label="Profil de l&apos;objet" name="Object Inspect"/>
<menu_item_call label="Zoomer en avant" name="Zoom In"/>
<context_menu label="Porter â–¶" name="Put On">
@@ -18,6 +19,7 @@
<menu_item_call label="Retour" name="Return..."/>
<menu_item_call label="Supprimer" name="Delete"/>
</context_menu>
+ <menu_item_call label="Acheter" name="Pie Object Bye"/>
<menu_item_call label="Prendre" name="Pie Object Take"/>
<menu_item_call label="Prendre une copie" name="Take Copy"/>
<menu_item_call label="Payer" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby.xml
index 08a97ee403..26bd3978a9 100644
--- a/indra/newview/skins/default/xui/fr/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/fr/menu_people_nearby.xml
@@ -5,6 +5,7 @@
<menu_item_call label="Supprimer cet ami" name="Remove Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="Appeler" name="Call"/>
+ <menu_item_call label="Carte" name="Map"/>
<menu_item_call label="Partager" name="Share"/>
<menu_item_call label="Payer" name="Pay"/>
<menu_item_check label="Ignorer/Ne plus ignorer" name="Block/Unblock"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml b/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml
index ab5016465d..ddf898b791 100644
--- a/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml
@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="profile_overflow_menu">
+ <menu_item_call label="Carte" name="show_on_map"/>
<menu_item_call label="Payer" name="pay"/>
<menu_item_call label="Partager" name="share"/>
<menu_item_call label="Ignorer" name="block"/>
<menu_item_call label="Ne plus ignorer" name="unblock"/>
<menu_item_call label="Éjecter" name="kick"/>
- <menu_item_call label="Geler" name="freeze"/>
- <menu_item_call label="Dégeler" name="unfreeze"/>
+ <menu_item_call label="Figer" name="freeze"/>
+ <menu_item_call label="Libérer" name="unfreeze"/>
<menu_item_call label="Représentant du service consommateur" name="csr"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 21f39682ba..b8a3b65101 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -9,8 +9,8 @@
<menu_item_call label="Mon profil" name="Profile"/>
<menu_item_call label="Mon apparence" name="Appearance"/>
<menu_item_check label="Mon inventaire" name="Inventory"/>
- <menu_item_call label="Mon inventaire" name="ShowSidetrayInventory"/>
- <menu_item_call label="Mes gestes" name="Gestures"/>
+ <menu_item_check label="Mon inventaire" name="ShowSidetrayInventory"/>
+ <menu_item_check label="Mes gestes" name="Gestures"/>
<menu label="Mon statut" name="Status">
<menu_item_call label="Absent" name="Set Away"/>
<menu_item_call label="Occupé" name="Set Busy"/>
@@ -22,9 +22,8 @@
<menu label="Communiquer" name="Communicate">
<menu_item_call label="Mes amis" name="My Friends"/>
<menu_item_call label="Mes groupes" name="My Groups"/>
- <menu_item_check label="Chat près de vous" name="Nearby Chat"/>
- <menu_item_call label="Personnes près de vous" name="Active Speakers"/>
- <menu_item_check label="Média près de vous" name="Nearby Media"/>
+ <menu_item_check label="Chat près de moi" name="Nearby Chat"/>
+ <menu_item_call label="Personnes près de moi" name="Active Speakers"/>
</menu>
<menu label="Monde" name="World">
<menu_item_check label="Mini-carte" name="Mini-Map"/>
@@ -32,14 +31,20 @@
<menu_item_call label="Photo" name="Take Snapshot"/>
<menu_item_call label="Créer un repère pour ce lieu" name="Create Landmark Here"/>
<menu label="Profil du lieu" name="Land">
- <menu_item_call label="À propos des terrains" name="About Land"/>
+ <menu_item_call label="À propos du terrain" name="About Land"/>
<menu_item_call label="Région/Domaine" name="Region/Estate"/>
</menu>
<menu_item_call label="Acheter ce terrain" name="Buy Land"/>
<menu_item_call label="Mes terrains" name="My Land"/>
<menu label="Afficher" name="LandShow">
<menu_item_check label="Contrôles de mouvement" name="Movement Controls"/>
- <menu_item_check label="Contrôles d&apos;affichage" name="Camera Controls"/>
+ <menu_item_check label="Contrôles d’affichage" name="Camera Controls"/>
+ <menu_item_check label="Lignes d&apos;interdiction" name="Ban Lines"/>
+ <menu_item_check label="Balises" name="beacons"/>
+ <menu_item_check label="Limites du terrain" name="Property Lines"/>
+ <menu_item_check label="Propriétaires de terrains" name="Land Owners"/>
+ <menu_item_check label="Coordonnées" name="Coordinates"/>
+ <menu_item_check label="Propriétés de la parcelle" name="Parcel Properties"/>
</menu>
<menu_item_call label="Me téléporter chez moi" name="Teleport Home"/>
<menu_item_call label="Définir le domicile ici" name="Set Home to Here"/>
@@ -74,11 +79,12 @@
</menu>
<menu_item_call label="Lien" name="Link"/>
<menu_item_call label="Annuler le lien" name="Unlink"/>
- <menu_item_check label="Modifier les parties reliées" name="Edit Linked Parts"/>
+ <menu_item_check label="Modifier les parties liées" name="Edit Linked Parts"/>
<menu_item_call label="Point central sur la sélection" name="Focus on Selection"/>
<menu_item_call label="Zoomer sur la sélection" name="Zoom to Selection"/>
<menu label="Objet" name="Object">
- <menu_item_call label="Acheter" name="Menu Object Take"/>
+ <menu_item_call label="Acheter" name="Menu Object Buy"/>
+ <menu_item_call label="Prendre" name="Menu Object Take"/>
<menu_item_call label="Prendre une copie" name="Take Copy"/>
<menu_item_call label="Enregistrer dans mon inventaire" name="Save Object Back to My Inventory"/>
<menu_item_call label="Enregistrer dans le contenu des objets" name="Save Object Back to Object Contents"/>
@@ -100,11 +106,11 @@
<menu_item_check label="Afficher le rayon lumineux pour la sélection" name="Show Light Radius for Selection"/>
<menu_item_check label="Afficher le faisceau de sélection lumineux" name="Show Selection Beam"/>
<menu_item_check label="Fixer sur la grille" name="Snap to Grid"/>
- <menu_item_call label="Fixer les coordonnées XY de l’objet sur la grille" name="Snap Object XY to Grid"/>
+ <menu_item_call label="Fixer les coordonnées XY de l&apos;objet sur la grille" name="Snap Object XY to Grid"/>
<menu_item_call label="Utiliser la sélection pour la grille" name="Use Selection for Grid"/>
<menu_item_call label="Options de la grille" name="Grid Options"/>
</menu>
- <menu label="Sélectionner les parties reliées" name="Select Linked Parts">
+ <menu label="Sélectionner les parties liées" name="Select Linked Parts">
<menu_item_call label="Sélectionner la partie suivante" name="Select Next Part"/>
<menu_item_call label="Sélectionner la partie précédente" name="Select Previous Part"/>
<menu_item_call label="Inclure la partie suivante" name="Include Next Part"/>
@@ -121,7 +127,7 @@
<menu_item_call label="Arrêter mon animation" name="Stop Animating My Avatar"/>
<menu_item_call label="Refixer les textures" name="Rebake Texture"/>
<menu_item_call label="Taille de l&apos;interface par défaut" name="Set UI Size to Default"/>
- <menu_item_call label="Définir la taille de la fenêtre..." name="Set Window Size..."/>
+ <menu_item_call label="Définir la taille de la fenêtre…" name="Set Window Size..."/>
<menu_item_check label="Limiter la distance de sélection" name="Limit Select Distance"/>
<menu_item_check label="Désactiver les contraintes de la caméra" name="Disable Camera Distance"/>
<menu_item_check label="Photo haute résolution" name="HighResSnapshot"/>
@@ -146,7 +152,6 @@
<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="SurfacePath" name="SurfacePath"/>
<menu_item_check label="Ciel" name="Sky"/>
<menu_item_check label="Eau" name="Water"/>
<menu_item_check label="Sol" name="Ground"/>
@@ -170,7 +175,7 @@
<menu_item_call label="Effacer le cache du groupe" name="ClearGroupCache"/>
<menu_item_check label="Effet de lissage de la souris" name="Mouse Smoothing"/>
<menu label="Raccourcis" name="Shortcuts">
- <menu_item_call label="Image ([COST] L$)..." name="Upload Image"/>
+ <menu_item_call label="Image ([COST] L$)..." name="Upload Image"/>
<menu_item_check label="Rechercher" name="Search"/>
<menu_item_call label="Relâcher les touches" name="Release Keys"/>
<menu_item_call label="Taille de l&apos;interface par défaut" name="Set UI Size to Default"/>
@@ -271,7 +276,7 @@
<menu_item_check label="Atlas des textures" name="Texture Atlas"/>
<menu_item_check label="Rendu des lumières jointes" name="Render Attached Lights"/>
<menu_item_check label="Rendu des particules jointes" name="Render Attached Particles"/>
- <menu_item_check label="Hover Glow Objects" name="Hover Glow Objects"/>
+ <menu_item_check label="Objets en surbrillance avec le pointeur" name="Hover Glow Objects"/>
</menu>
<menu label="Réseau" name="Network">
<menu_item_check label="Pauser l&apos;avatar" name="AgentPause"/>
@@ -291,7 +296,7 @@
<menu_item_call label="Arrêter l&apos;enregistrement" name="Stop Record"/>
</menu>
<menu label="Monde" name="World">
- <menu_item_check label="Sim Sun Override" name="Sim Sun Override"/>
+ <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="Dump Region Object Cache" name="Dump Region Object Cache"/>
@@ -364,14 +369,14 @@
<menu label="Admin" name="Admin">
<menu label="Object">
<menu_item_call label="Prendre une copie" name="Take Copy"/>
- <menu_item_call label="Forcer le propriétaire sur moi" name="Force Owner To Me"/>
+ <menu_item_call label="Téléporter le 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>
<menu label="Parcelle" name="Parcel">
- <menu_item_call label="Forcer le propriétaire sur moi" name="Owner To Me"/>
+ <menu_item_call label="Téléporter le propriétaire" name="Owner To Me"/>
<menu_item_call label="Définir sur le contenu Linden" name="Set to Linden Content"/>
<menu_item_call label="Réclamer un terrain public" name="Claim Public Land"/>
</menu>
@@ -391,8 +396,8 @@
<menu_item_call label="Chaussettes" name="Socks"/>
<menu_item_call label="Veste" name="Jacket"/>
<menu_item_call label="Gants" name="Gloves"/>
- <menu_item_call label="Sous-vêtements (homme)" name="Menu Undershirt"/>
- <menu_item_call label="Sous-vêtements (femme)" name="Menu Underpants"/>
+ <menu_item_call label="Débardeur" name="Menu Undershirt"/>
+ <menu_item_call label="Caleçon" name="Menu Underpants"/>
<menu_item_call label="Jupe" name="Skirt"/>
<menu_item_call label="Alpha" name="Alpha"/>
<menu_item_call label="Tatouage" name="Tattoo"/>
diff --git a/indra/newview/skins/default/xui/fr/mime_types_linux.xml b/indra/newview/skins/default/xui/fr/mime_types_linux.xml
index fc5e7ad659..3a7ff979ee 100644
--- a/indra/newview/skins/default/xui/fr/mime_types_linux.xml
+++ b/indra/newview/skins/default/xui/fr/mime_types_linux.xml
@@ -41,7 +41,7 @@
Cette parcelle propose du contenu audio
</tooltip>
<playtip name="audio_playtip">
- Jouer le contenu audio qui se trouve ici
+ Lire le contenu audio qui se trouve ici
</playtip>
</widgetset>
<scheme name="rtsp">
diff --git a/indra/newview/skins/default/xui/fr/mime_types_mac.xml b/indra/newview/skins/default/xui/fr/mime_types_mac.xml
index fc5e7ad659..3a7ff979ee 100644
--- a/indra/newview/skins/default/xui/fr/mime_types_mac.xml
+++ b/indra/newview/skins/default/xui/fr/mime_types_mac.xml
@@ -41,7 +41,7 @@
Cette parcelle propose du contenu audio
</tooltip>
<playtip name="audio_playtip">
- Jouer le contenu audio qui se trouve ici
+ Lire le contenu audio qui se trouve ici
</playtip>
</widgetset>
<scheme name="rtsp">
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index e122032447..38c6b57f5c 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -107,7 +107,7 @@ Veuillez ne sélectionner qu&apos;un seul objet.
</notification>
<notification name="FriendsAndGroupsOnly">
Les résidents qui ne sont pas vos amis ne sauront pas que vous avez choisi d&apos;ignorer leurs appels et leurs messages instantanés.
- <usetemplate name="okbutton" yestext="Oui"/>
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GrantModifyRights">
Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
@@ -178,7 +178,7 @@ Voulez-vous continuer ?
<notification name="JoinGroupNoCost">
Vous vous apprêtez à rejoindre le groupe [NAME].
Voulez-vous continuer ?
- <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Fusionner"/>
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Rejoindre"/>
</notification>
<notification name="JoinGroupCannotAfford">
Rejoindre ce groupe coûte [COST] L$.
@@ -316,7 +316,7 @@ La limite de [MAX_ATTACHMENTS] objets joints a été dépassée. Veuillez commen
Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
</notification>
<notification name="MustHaveAccountToLogIn">
- Oups! Vous avez oublié de fournir certaines informations.
+ Zut ! Vous avez oublié de fournir certaines informations.
Vous devez saisir le nom et le prénom de votre avatar.
Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en créer un maintenant ?
@@ -445,9 +445,8 @@ L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
Impossible d&apos;écrire le fichier [[FILE]]
</notification>
<notification name="UnsupportedHardware">
- Votre ordinateur ne satisfait pas la configuration système requise pour [APP_NAME]. Les performances risquent d&apos;être médiocres. Malheureusement, la page [SUPPORT_SITE] n’offre aucune assistance pour les problèmes de configuration système.
+ Votre ordinateur ne satisfait pas la configuration système requise pour [APP_NAME]. Les performances risquent d&apos;être médiocres. Malheureusement, la section [SUPPORT_SITE] n&apos;offre aucune aide pour les problèmes de configuration système.
-MINSPECS
Consulter [_URL] pour en savoir plus ?
<url name="url" option="0">
http://secondlife.com/support/sysreqs.php?lang=fr
@@ -496,14 +495,14 @@ Souhaitez-vous vraiment donner ces objets ?
Vous n&apos;êtes pas autorisé à transférer le dossier sélectionné.
</notification>
<notification name="FreezeAvatar">
- Geler cet avatar ?
+ Figer cet avatar ?
Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
- <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Libérer" yestext="Figer"/>
</notification>
<notification name="FreezeAvatarFullname">
- Geler [AVATAR_NAME] ?
+ Figer [AVATAR_NAME] ?
Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
- <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
+ <usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Libérer" yestext="Figerf"/>
</notification>
<notification name="EjectAvatarFullname">
Expulser [AVATAR_NAME] de votre terrain ?
@@ -1296,8 +1295,8 @@ Quitter le groupe ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
- Souhaitez-vous vraiment éjecter tous les utilisateurs de la grille ?
- <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous"/>
+ Souhaitez-vous vraiment éjecter tous les résidents de la grille ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous les résidents"/>
</notification>
<notification name="MuteLinden">
Désolé, vous ne pouvez pas ignorer un Linden.
@@ -1337,7 +1336,7 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="KickUser">
- Éjecter cet utilisateur avec quel message ?
+ Éjecter ce résident avec quel message ?
<form name="form">
<input name="message">
Un administrateur vous a déconnecté.
@@ -1357,20 +1356,20 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
</form>
</notification>
<notification name="FreezeUser">
- Geler cet utilisateur avec quel message ?
+ Figer ce résident avec quel message ?
<form name="form">
<input name="message">
- Vous avez été gelé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM).
+ Vous avez été figé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM).
</input>
<button name="OK" text="OK"/>
<button name="Cancel" text="Annuler"/>
</form>
</notification>
<notification name="UnFreezeUser">
- Dégeler cet utilisateur avec quel message ?
+ Libérer ce résident avec quel message ?
<form name="form">
<input name="message">
- Vous n&apos;êtes plus gelé.
+ Vous n&apos;êtes plus figé.
</input>
<button name="OK" text="OK"/>
<button name="Cancel" text="Annuler"/>
@@ -1387,7 +1386,7 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
</form>
</notification>
<notification name="OfferTeleportFromGod">
- Demander au résident de venir vous rejoindre ?
+ Exiger du résident qu&apos;il vienne vous rejoindre ?
<form name="form">
<input name="message">
On se rejoint à [REGION] ?
@@ -1419,7 +1418,7 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
<notification label="Modifier un domaine Linden" name="ChangeLindenEstate">
Vous vous apprêtez à modifier un domaine appartenant aux Lindens (continent, zone réservée aux ados, orientation etc.).
-Cela est extrêmement délicat car l&apos;expérience des résidents est en jeu. Sur le continent, cela modifiera des milliers de régions et sera difficile à digérer pour le serveur.
+Cela est extrêmement délicat car l&apos;expérience des résidents est en jeu. Sur le continent, cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
Continuer ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
@@ -1566,7 +1565,7 @@ En cliquant sur Modifier les préférences, vous pourrez changer votre catégori
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="NotAllowedToViewNotecard">
- Permissions pour afficher la note insuffisantes.
+ Droits pour afficher la note insuffisants.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="MissingNotecardAssetID">
@@ -1977,7 +1976,7 @@ Cela risque d&apos;impacter votre mot de passe.
Vous n&apos;avez pas le droit de consulter cette note.
</notification>
<notification name="RezItemNoPermissions">
- Permissions insuffisantes pour rezzer l&apos;objet.
+ Droits insuffisants pour rezzer l&apos;objet.
</notification>
<notification name="UnableToLoadNotecard">
Impossible de lire les données de la note actuellement.
@@ -1986,7 +1985,7 @@ Cela risque d&apos;impacter votre mot de passe.
Script absent de la base de données.
</notification>
<notification name="ScriptNoPermissions">
- Permissions insuffisantes pour voir le script.
+ Droits insuffisants pour voir le script.
</notification>
<notification name="UnableToLoadScript">
Impossible de charger le script. Merci de réessayer.
@@ -2335,6 +2334,12 @@ Veuillez réessayer dans quelques minutes.
<notification name="FriendshipDeclined">
[NAME] a refusé votre amitié.
</notification>
+ <notification name="FriendshipAcceptedByMe">
+ Amitié acceptée.
+ </notification>
+ <notification name="FriendshipDeclinedByMe">
+ Amitié refusée.
+ </notification>
<notification name="OfferCallingCard">
[FIRST] [LAST] vous offre sa carte de visite.
Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d&apos;envoyer rapidement un IM à ce résident.
@@ -2410,7 +2415,7 @@ Accepter cette requête ?
</form>
</notification>
<notification name="ScriptToast">
- [FIRST] [LAST]&apos;s &apos;[TITLE]&apos; demande la participation de l&apos;utilisateur.
+ Le/La [TITLE] de [FIRST] [LAST] demande la participation du résident.
<form name="form">
<button name="Open" text="Ouvrir la boîte de dialogue"/>
<button name="Ignore" text="Ignorer"/>
@@ -2543,7 +2548,7 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité.
</notification>
<notification name="ConfirmCloseAll">
Êtes-vous certain de vouloir fermer tous les IM ?
- <usetemplate name="okcancelignore" notext="Annuler" yestext="OK"/>
+ <usetemplate ignoretext="Confirmer avant de fermer tous les IM." name="okcancelignore" notext="Annuler" yestext="OK"/>
</notification>
<notification name="AttachmentSaved">
L&apos;élément joint a été sauvegardé.
diff --git a/indra/newview/skins/default/xui/fr/panel_classified_info.xml b/indra/newview/skins/default/xui/fr/panel_classified_info.xml
index 784c6baae9..e4aecfdfc0 100644
--- a/indra/newview/skins/default/xui/fr/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/fr/panel_classified_info.xml
@@ -9,16 +9,46 @@
<panel.string name="l$_price">
[PRICE] L$
</panel.string>
+ <panel.string name="click_through_text_fmt">
+ [TELEPORT] téléporter, [MAP] carte, [PROFILE] profil
+ </panel.string>
+ <panel.string name="date_fmt">
+ [day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
+ </panel.string>
+ <panel.string name="auto_renew_on">
+ Activé
+ </panel.string>
+ <panel.string name="auto_renew_off">
+ Désactivé
+ </panel.string>
<text name="title" value="Infos sur la petite annonce"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<text_editor name="classified_name" value="[name]"/>
+ <text name="classified_location_label" value="Emplacement :"/>
<text_editor name="classified_location" value="[loading...]"/>
+ <text name="content_type_label" value="Type de contenu :"/>
<text_editor name="content_type" value="[content type]"/>
+ <text name="category_label" value="Catégorie :"/>
<text_editor name="category" value="[category]"/>
- <check_box label="Renouvellement automatique toutes les semaines" name="auto_renew"/>
- <text_editor name="price_for_listing" tool_tip="Coût de l&apos;annonce."/>
- <text_editor name="classified_desc" value="[description]"/>
+ <text name="creation_date_label" value="Date de création :"/>
+ <text_editor name="creation_date" tool_tip="Date de création" value="[date]"/>
+ <text name="price_for_listing_label" value="Coût de l&apos;annonce :"/>
+ <text_editor name="price_for_listing" tool_tip="Coût de l&apos;annonce." value="[price]"/>
+ <layout_stack name="descr_stack">
+ <layout_panel name="clickthrough_layout_panel">
+ <text name="click_through_label" value="Clics :"/>
+ <text_editor name="click_through_text" tool_tip="Parcourir les données en cliquant" value="[clicks]"/>
+ </layout_panel>
+ <layout_panel name="price_layout_panel">
+ <text name="auto_renew_label" value="Renouv. auto :"/>
+ <text name="auto_renew" value="Activé"/>
+ </layout_panel>
+ <layout_panel name="descr_layout_panel">
+ <text name="classified_desc_label" value="Description :"/>
+ <text_editor name="classified_desc" value="[description]"/>
+ </layout_panel>
+ </layout_stack>
</panel>
</scroll_container>
<panel name="buttons">
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_classified.xml b/indra/newview/skins/default/xui/fr/panel_edit_classified.xml
index 1f44f2fe09..2e2b848c93 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_classified.xml
@@ -3,12 +3,20 @@
<panel.string name="location_notice">
(mise à jour après l&apos;enregistrement)
</panel.string>
+ <string name="publish_label">
+ Publier
+ </string>
+ <string name="save_label">
+ Enregistrer
+ </string>
<text name="title">
Modifier la petite annonce
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <icon label="" name="edit_icon" tool_tip="Cliquez pour sélectionner une image"/>
+ <panel name="snapshot_panel">
+ <icon label="" name="edit_icon" tool_tip="Cliquer pour sélectionner une image"/>
+ </panel>
<text name="Name:">
Titre :
</text>
@@ -22,20 +30,19 @@
en cours de chargement...
</text>
<button label="Définir sur l&apos;emplacement actuel" name="set_to_curr_location_btn"/>
- <combo_box name="content_type">
- <combo_item name="mature_ci">
- Contenu Modéré
- </combo_item>
- <combo_item name="pg_ci">
- Contenu Général
- </combo_item>
- </combo_box>
+ <text name="category_label" value="Catégorie :"/>
+ <text name="content_type_label" value="Type de contenu :"/>
+ <icons_combo_box label="Contenu Général" name="content_type">
+ <icons_combo_box.item label="Contenu Modéré" name="mature_ci" value="Mature"/>
+ <icons_combo_box.item label="Contenu Général" name="pg_ci" value="PG"/>
+ </icons_combo_box>
+ <text name="price_for_listing_label" value="Coût de l&apos;annonce :"/>
<spinner label="L$" name="price_for_listing" tool_tip="Coût de l&apos;annonce." value="50"/>
- <check_box label="Renouvellement automatique toutes les semaines" name="auto_renew"/>
+ <check_box label="Renouvellement auto toutes les semaines" name="auto_renew"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Enregistrer" name="save_changes_btn"/>
+ <button label="[LABEL]" name="save_changes_btn"/>
<button label="Annuler" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml b/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml
index 73e136ade6..b1a437497d 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml
@@ -2,7 +2,7 @@
<panel name="edit_gloves_panel">
<panel name="avatar_gloves_color_panel">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="gloves_main_tab" title="Gants"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml b/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml
index cee44eb795..b757f60b18 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml
@@ -3,7 +3,7 @@
<panel name="avatar_jacket_color_panel">
<texture_picker label="Tissu (haut)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image"/>
<texture_picker label="Tissu (bas)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="jacket_main_tab" title="Veste"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pants.xml b/indra/newview/skins/default/xui/fr/panel_edit_pants.xml
index 71d82c817f..0cebe1e76a 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_pants.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_pants.xml
@@ -2,7 +2,7 @@
<panel name="edit_pants_panel">
<panel name="avatar_pants_color_panel">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="pants_main_tab" title="Pantalon"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
index f234529764..0bbcbe833f 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Modifier la préférence" name="panel_edit_pick">
+ <panel.string name="location_notice">
+ (mise à jour après enregistrement)
+ </panel.string>
<text name="title">
Modifier la préférence
</text>
@@ -22,7 +25,7 @@
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Enregistrer [WHAT]" name="save_changes_btn"/>
+ <button label="Enregistrer" name="save_changes_btn"/>
<button label="Annuler" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
index d10a7f37e1..4be12054df 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
@@ -33,14 +33,14 @@
<icon label="" name="2nd_life_edit_icon" tool_tip="Cliquez pour sélectionner une image"/>
</panel>
<panel name="first_life_image_panel">
- <text name="real_world_photo_title_text" value="Monde physique :"/>
+ <text name="real_world_photo_title_text" value="Vie réelle :"/>
</panel>
<icon label="" name="real_world_edit_icon" tool_tip="Cliquez pour sélectionner une image"/>
<text name="title_homepage_text">
Page d&apos;accueil :
</text>
<line_editor name="homepage_edit" value="http://"/>
- <check_box label="Afficher dans les résultats de recherche" name="show_in_search_checkbox"/>
+ <check_box label="Afficher avec la recherche" name="show_in_search_checkbox"/>
<text name="title_acc_status_text" value="Mon compte :"/>
<text_editor name="acc_status_text" value="Résident. Aucune info de paiement enregistrée."/>
<text name="my_account_link" value="[[URL] Accéder à ma Page d&apos;accueil]"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml
index cf28cd8c1e..d6035415d8 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml
@@ -2,7 +2,7 @@
<panel name="edit_shirt_panel">
<panel name="avatar_shirt_color_panel">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="shirt_main_tab" title="Chemise"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml b/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml
index a8e0910a15..ef6d72629c 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml
@@ -2,7 +2,7 @@
<panel name="edit_shoes_panel">
<panel name="avatar_shoes_color_panel">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="shoes_main_tab" title="Chaussures"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml
index e9784b9510..1250c7819d 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml
@@ -2,7 +2,7 @@
<panel name="edit_skirt_panel">
<panel name="avatar_skirt_color_panel">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="skirt_main_tab" title="Jupe"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_socks.xml b/indra/newview/skins/default/xui/fr/panel_edit_socks.xml
index 6fc6a3dc77..bcd69b7dc5 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_socks.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_socks.xml
@@ -2,7 +2,7 @@
<panel name="edit_socks_panel">
<panel name="avatar_socks_color_panel">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="socks_main_tab" title="Chaussettes"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml b/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml
index 90dcae18ec..dd2670bd75 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml
@@ -2,7 +2,7 @@
<panel name="edit_underpants_panel">
<panel name="avatar_underpants_color_panel">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="underpants_main_tab" title="Caleçon"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml
index 950cdd7639..93a08f1189 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml
@@ -2,7 +2,7 @@
<panel name="edit_undershirt_panel">
<panel name="avatar_undershirt_color_panel">
<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/>
- <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+ <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="undershirt_main_tab" title="Débardeur"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
index c6ab686b0e..1efc9b00a4 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
@@ -34,10 +34,10 @@
Modification des gants
</string>
<string name="edit_undershirt_title">
- Modification des sous-vêtements (homme)
+ Modification du débardeur
</string>
<string name="edit_underpants_title">
- Modification des sous-vêtements (femme)
+ Modification du caleçon
</string>
<string name="edit_alpha_title">
Modification du masque alpha
@@ -79,10 +79,10 @@
Gants :
</string>
<string name="undershirt_desc_text">
- Sous-vêtements (homme) :
+ Débardeur :
</string>
<string name="underpants_desc_text">
- Sous-vêtements (femme) :
+ Caleçon :
</string>
<string name="alpha_desc_text">
Masque alpha :
@@ -96,6 +96,6 @@
</panel>
<panel name="button_panel">
<button label="Enregistrer sous" name="save_as_button"/>
- <button label="Annuler modification" width="130" name="revert_button"/>
+ <button label="Rétablir" width="130" name="revert_button"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_friends.xml b/indra/newview/skins/default/xui/fr/panel_friends.xml
index 10ec952aa3..ad9e3daf3d 100644
--- a/indra/newview/skins/default/xui/fr/panel_friends.xml
+++ b/indra/newview/skins/default/xui/fr/panel_friends.xml
@@ -16,5 +16,5 @@
<button label="Téléporter" name="offer_teleport_btn" tool_tip="Proposez à cet ami d&apos;être téléporté là où vous êtes"/>
<button label="Payer" name="pay_btn" tool_tip="Donnez des L$ à cet ami"/>
<button label="Supprimer" name="remove_btn" tool_tip="Supprimez ce résident de votre liste d&apos;amis"/>
- <button label="Ajouter" name="add_btn" tool_tip="Proposer à ce résident de devenir votre ami"/>
+ <button label="Ajouter" name="add_btn" tool_tip="Proposer à un résident de devenir votre ami"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
index 7fc10833ea..e1eeaa8601 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
@@ -15,10 +15,10 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to
<filter_editor label="Filtrer les membres" name="filter_input"/>
<name_list name="member_list">
<name_list.columns label="Membre" name="name"/>
- <name_list.columns label="Donation" name="donated" width="116"/>
- <name_list.columns label="Statut" name="online" width="136"/>
+ <name_list.columns label="Donation" name="donated"/>
+ <name_list.columns label="Statut" name="online"/>
</name_list>
- <button label="Inviter" name="member_invite" width="165"/>
+ <button label="Inviter" name="member_invite"/>
<button label="Expulser" name="member_eject"/>
</panel>
<panel label="RÔLES" name="roles_sub_tab">
@@ -47,7 +47,7 @@ notamment les rôles Tous et Propriétaire.
<scroll_list.columns label="#" name="members"/>
</scroll_list>
<button label="Nouveau rôle" name="role_create"/>
- <button label="Supprimer le rôle" name="role_delete" width="120"/>
+ <button label="Supprimer le rôle" name="role_delete"/>
</panel>
<panel height="148" label="POUVOIRS" name="actions_sub_tab" tool_tip="Vous pouvez afficher une description du pouvoir et voir quels membres et rôles peuvent s&apos;en servir.">
<panel.string name="help_text">
diff --git a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
index 115e25e487..1f2169e22c 100644
--- a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
@@ -14,7 +14,7 @@
<layout_panel name="share_btn_panel">
<button label="Partager" name="share_btn"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
+ <layout_panel name="pay_btn_panel">
<button label="Payer" name="pay_btn"/>
</layout_panel>
<layout_panel name="call_btn_panel">
diff --git a/indra/newview/skins/default/xui/fr/panel_landmark_info.xml b/indra/newview/skins/default/xui/fr/panel_landmark_info.xml
index a2f82c72df..4001616034 100644
--- a/indra/newview/skins/default/xui/fr/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/fr/panel_landmark_info.xml
@@ -13,7 +13,7 @@
Aucune information sur ce lieu n&apos;est disponible actuellement, veuillez réessayer ultérieurement.
</string>
<string name="server_forbidden_text">
- Les informations sur ce lieu ne sont pas disponibles car l&apos;accès y est restreint. Veuillez vérifier vos permissions avec le propriétaire de la parcelle.
+ Les informations sur ce lieu ne sont pas disponibles car l&apos;accès y est restreint. Veuillez vérifier vos droits avec le propriétaire de la parcelle.
</string>
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index 209a803e07..8569a544fa 100644
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -21,7 +21,7 @@
</text>
<check_box label="Enregistrer" name="remember_check"/>
<text name="start_location_text">
- Commencer à :
+ Lieu de départ :
</text>
<combo_box name="start_location_combo" width="152">
<combo_box.item label="Dernier emplacement" name="MyLastLocation"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
index 5faba01339..1a4450cccc 100644
--- a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
@@ -1,18 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Choses" name="main inventory panel">
- <panel.string name="Title">
- Choses
+ <panel.string name="ItemcountFetching">
+ Récupération de [ITEM_COUNT] objets... [FILTER]
</panel.string>
- <filter_editor label="Filtrer l&apos;inventaire" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="MON INVENTAIRE" name="All Items"/>
- <inventory_panel label="RÉCENT" name="Recent Items"/>
- </tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
- <button name="add_btn" tool_tip="Ajouter un nouvel article"/>
- <dnd_button name="trash_btn" tool_tip="Supprimer l&apos;article sélectionné"/>
- </panel>
+ <panel.string name="ItemcountCompleted">
+ [ITEM_COUNT] objets [FILTER]
+ </panel.string>
+ <text name="ItemcountText">
+ Objets :
+ </text>
<menu_bar name="Inventory Menu">
<menu label="Fichier" name="File">
<menu_item_call label="Ouvrir" name="Open"/>
@@ -61,4 +57,14 @@
<menu_item_check label="Dossiers système en premier" name="System Folders To Top"/>
</menu>
</menu_bar>
+ <filter_editor label="Filtrer l&apos;inventaire" name="inventory search editor"/>
+ <tab_container name="inventory filter tabs">
+ <inventory_panel label="MON INVENTAIRE" name="All Items"/>
+ <inventory_panel label="RÉCENT" name="Recent Items"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
+ <button name="add_btn" tool_tip="Ajouter un nouvel article"/>
+ <dnd_button name="trash_btn" tool_tip="Supprimer l&apos;article sélectionné"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml
index afd2d9cd8f..e048e66810 100644
--- a/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml
@@ -8,7 +8,7 @@
</text>
<line_editor name="home_url" tool_tip="La page d&apos;accueil pour cette source média"/>
<text name="preview_label">
- Prévisualiser
+ Aperçu
</text>
<text name="current_url_label">
Page actuelle :
@@ -20,7 +20,7 @@
<check_box initial_value="false" label="Zoom auto" name="auto_zoom"/>
<check_box initial_value="false" label="Lecture auto du média" name="auto_play"/>
<text name="media_setting_note">
- Remarque : kes résidents peuvent ignorer ce paramètre
+ Remarque : les résidents peuvent ignorer ce paramètre
</text>
<check_box initial_value="false" label="Mise à l&apos;échelle auto du média sur la face de l&apos;objet" name="auto_scale"/>
<text name="size_label">
diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml
index 6f6ae035a1..f456ee1c83 100644
--- a/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml
+++ b/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml
@@ -11,10 +11,10 @@
Mini
</combo_item>
</combo_box>
- <check_box initial_value="false" label="Désactiver la navigation et l&apos;interactivité" name="perms_owner_interact"/>
+ <check_box initial_value="false" label="Activer la navigation et l&apos;interactivité" name="perms_owner_interact"/>
<check_box initial_value="false" label="Afficher la barre de contrôles" name="perms_owner_control"/>
- <check_box initial_value="false" label="Désactiver la navigation et l&apos;interactivité" name="perms_group_interact"/>
+ <check_box initial_value="false" label="Activer la navigation et l&apos;interactivité" name="perms_group_interact"/>
<check_box initial_value="false" label="Afficher la barre de contrôles" name="perms_group_control"/>
- <check_box initial_value="false" label="Désactiver la navigation et l&apos;interactivité" name="perms_anyone_interact"/>
+ <check_box initial_value="false" label="Activer la navigation et l&apos;interactivité" name="perms_anyone_interact"/>
<check_box initial_value="false" label="Afficher la barre de contrôles" name="perms_anyone_control"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_my_profile.xml b/indra/newview/skins/default/xui/fr/panel_my_profile.xml
index 73affc3420..ce2e5f4c60 100644
--- a/indra/newview/skins/default/xui/fr/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_my_profile.xml
@@ -26,7 +26,7 @@
</panel>
<panel name="first_life_image_panel">
<icon label="" name="real_world_edit_icon" tool_tip="Cliquez sur le bouton Modifier le profil ci-dessous pour changer d&apos;image"/>
- <text name="title_rw_descr_text" value="Monde physique :"/>
+ <text name="title_rw_descr_text" value="Vie réelle :"/>
</panel>
<text name="title_member_text" value="Résident depuis :"/>
<text name="title_acc_status_text" value="Statut du compte :"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_navigation_bar.xml b/indra/newview/skins/default/xui/fr/panel_navigation_bar.xml
index 974c0cd032..45caf2323d 100644
--- a/indra/newview/skins/default/xui/fr/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_navigation_bar.xml
@@ -11,7 +11,7 @@
</panel>
<favorites_bar name="favorite" tool_tip="Faites glisser des repères ici pour un accès rapide à vos lieux favoris dans Second Life.">
<label name="favorites_bar_label" tool_tip="Faites glisser des repères ici pour un accès rapide à vos lieux favoris dans Second Life.">
- Barre des Favoris
+ Favoris
</label>
<chevron_button name="&gt;&gt;" tool_tip="Afficher d&apos;avantage de Favoris"/>
</favorites_bar>
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 f1a7ebb35c..b506a202bd 100644
--- a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
@@ -4,6 +4,6 @@
<panel name="chat_caption">
<text
name="sender_name"
-width="170">CHAT PRÈS DE VOUS</text>
+width="170">CHAT PRÈS DE MOI</text>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
index 8ed441cbae..82cdf292ab 100644
--- a/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
@@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="chat_bar">
- <string name="min_width">
- 192
- </string>
- <string name="max_width">
- 320
- </string>
<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"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml
index 53b9bc6f82..ef5a42555e 100644
--- a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_media">
- <string name="media_item_count_format">
- (%ld articles de média)
- </string>
<string name="empty_item_text">
&lt;vide&gt;
</string>
@@ -16,16 +13,23 @@
(lecture en cours)
</string>
<panel name="minimized_controls">
- <button label="Tout arrêter" name="all_nearby_media_disable_btn" tool_tip="Désactiver tous les médias près de vous"/>
- <button label="Tout lancer" name="all_nearby_media_enable_btn" tool_tip="Activer tous les médias près de vous"/>
+ <button label="Arrêter" name="all_nearby_media_disable_btn" tool_tip="Désactiver tous les médias près de vous"/>
+ <button label="Lire" name="all_nearby_media_enable_btn" tool_tip="Activer tous les médias près de vous"/>
<button name="open_prefs_btn" tool_tip="Ouvrir les préférences de média"/>
<button label="Plus &gt;&gt;" label_selected="Moins &lt;&lt;" name="more_less_btn" tool_tip="Options avancées"/>
</panel>
<panel name="nearby_media_panel">
+ <text name="nearby_media">
+ Médias proches
+ </text>
+ <text name="show">
+ Voir :
+ </text>
<combo_box name="show_combo">
<combo_box.item label="Tout" name="All"/>
- <combo_box.item label="Dans cette parcelle" name="WithinParcel"/>
+ <combo_box.item label="Sur cette parcelle" name="WithinParcel"/>
<combo_box.item label="En dehors de la parcelle" name="OutsideParcel"/>
+ <combo_box.item label="Sur les autres avatars" name="OnOthers"/>
</combo_box>
<scroll_list name="media_list">
<scroll_list.columns label="Proximité" name="media_proximity"/>
@@ -34,19 +38,19 @@
<scroll_list.columns label="Nom" name="media_name"/>
<scroll_list.columns label="Débogage" name="media_debug"/>
</scroll_list>
- <panel>
+ <panel name="media_controls_panel">
<layout_stack name="media_controls">
<layout_panel name="stop">
<button name="stop_btn" tool_tip="Arrêter le média sélectionné"/>
</layout_panel>
<layout_panel name="play">
- <button name="play_btn" tool_tip="Jouer le média sélectionné"/>
+ <button name="play_btn" tool_tip="Lire le média sélectionné"/>
</layout_panel>
<layout_panel name="pause">
- <button name="pause_btn" tool_tip="Pauser le média sélectionné"/>
+ <button name="pause_btn" tool_tip="Suspendre la lecture du média sélectionné"/>
</layout_panel>
<layout_panel name="volume_slider_ctrl">
- <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume audio pour le média sélectionné"/>
+ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume audio du média sélectionné"/>
</layout_panel>
<layout_panel name="mute">
<button name="mute_btn" tool_tip="Couper l&apos;audio sur le média sélectionné"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_notes.xml b/indra/newview/skins/default/xui/fr/panel_notes.xml
index ba052a0e07..f4e4f8a4ab 100644
--- a/indra/newview/skins/default/xui/fr/panel_notes.xml
+++ b/indra/newview/skins/default/xui/fr/panel_notes.xml
@@ -13,7 +13,7 @@
</scroll_container>
</layout_panel>
<layout_panel name="notes_buttons_panel">
- <button label="Devenir amis" name="add_friend" tool_tip="Proposer à ce résident de devenir votre ami"/>
+ <button label="Devenir amis" name="add_friend" tool_tip="Proposer à un résident de devenir votre ami"/>
<button label="IM" name="im" width="30" tool_tip="Ouvrir une session IM"/>
<button label="Appeler" name="call" width="60" tool_tip="Appeler ce résident"/>
<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_online_status_toast.xml b/indra/newview/skins/default/xui/fr/panel_online_status_toast.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_online_status_toast.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
index f129f56261..8d17d9ffdf 100644
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -7,6 +7,8 @@
<string name="no_friends" value="Pas d&apos;amis"/>
<string name="people_filter_label" value="Filtrer les personnes"/>
<string name="groups_filter_label" value="Filtrer les groupes"/>
+ <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Trouver le groupe via la recherche ?]"/>
+ <string name="no_groups_msg" value="[secondlife:///app/search/groups Rechercher des groupes à rejoindre.]"/>
<filter_editor label="Filtre" name="filter_input"/>
<tab_container name="tabs">
<panel label="PRÈS DE VOUS" name="nearby_panel">
@@ -20,15 +22,15 @@
<accordion_tab name="tab_online" title="En ligne"/>
<accordion_tab name="tab_all" title="Tout"/>
</accordion>
- <text name="no_friends_msg">
- Pour ajouter des amis, essayez [secondlife:///app/search/people la recherche globale] ou cliquez sur un utilisateur pour l&apos;ajouter à vos amis.
-Si vous voulez rencontrer d&apos;autres résidents, ouvrez la [secondlife:///app/worldmap carte].
- </text>
<panel label="bottom_panel" name="bottom_panel">
<button name="friends_viewsort_btn" tool_tip="Options"/>
- <button name="add_btn" tool_tip="Proposer à ce résident de devenir votre ami"/>
+ <button name="add_btn" tool_tip="Proposer à un résident de devenir votre ami"/>
<button name="del_btn" tool_tip="Supprimer le résident sélectionné de votre liste d&apos;amis"/>
</panel>
+ <text name="no_friends_msg">
+ Pour ajouter des amis, utilisez la [secondlife:///app/search/people recherche] ou cliquez-droit sur le résident à ajouter comme ami.
+Si vous souhaitez rencontrer d&apos;autres résidents, cliquez sur [secondlife:///app/worldmap la carte].
+ </text>
</panel>
<panel label="MES GROUPES" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
diff --git a/indra/newview/skins/default/xui/fr/panel_place_profile.xml b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
index 620bab0c24..598e94166e 100644
--- a/indra/newview/skins/default/xui/fr/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
@@ -18,16 +18,16 @@
<string name="all_residents_text" value="Tous les résidents"/>
<string name="group_text" value="Groupe"/>
<string name="can_resell">
- Le terrain acheté dans cette région peut être revendu.
+ Le terrain acheté dans la région peut être revendu.
</string>
<string name="can_not_resell">
- Le terrain acheté dans cette région ne peut pas être revendu.
+ Le terrain acheté dans la région ne peut pas être revendu.
</string>
<string name="can_change">
- Le terrain acheté dans cette région peut être fusionné ou divisé.
+ Le terrain acheté dans la région peut être fusionné ou divisé.
</string>
<string name="can_not_change">
- Le terrain acheté dans cette région ne peut pas être fusionné ou divisé.
+ Le terrain acheté dans la région ne peut être fusionné ou divisé.
</string>
<string name="server_update_text">
Les informations sur le lieu ne sont pas disponibles sans mise à jour du serveur.
@@ -36,7 +36,7 @@
Aucune information sur ce lieu n&apos;est disponible actuellement, veuillez réessayer ultérieurement.
</string>
<string name="server_forbidden_text">
- Les informations sur ce lieu ne sont pas disponibles car l&apos;accès y est restreint. Veuillez vérifier vos permissions auprès du propriétaire de la parcelle.
+ Les informations sur ce lieu ne sont pas disponibles car l&apos;accès y est restreint. Veuillez vérifier vos droits auprès du propriétaire de la parcelle.
</string>
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
@@ -68,59 +68,59 @@
<text name="maturity_value" value="(inconnu)"/>
<accordion name="advanced_info_accordion">
<accordion_tab name="parcel_characteristics_tab" title="Parcelle">
- <panel>
- <text name="rating_label" value="Catégorie :"/>
- <text name="rating_value" value="(inconnu)"/>
- <text name="voice_label" value="Voix :"/>
- <text name="voice_value" value="Activée"/>
- <text name="fly_label" value="Voler :"/>
+ <panel name="parcel_characteristics_panel">
+ <text name="rating_label" value="Catégorie :"/>
+ <text name="rating_value" value="inconnu"/>
+ <text name="voice_label" value="Voix :"/>
+ <text name="voice_value" value="Activé"/>
+ <text name="fly_label" value="Voler :"/>
<text name="fly_value" value="Activé"/>
- <text name="push_label" value="Appuyer :"/>
+ <text name="push_label" value="Pousser :"/>
<text name="push_value" value="Désactivé"/>
- <text name="build_label" value="Construire :"/>
+ <text name="build_label" value="Construire :"/>
<text name="build_value" value="Activé"/>
- <text name="scripts_label" value="Scripts :"/>
- <text name="scripts_value" value="Activés"/>
- <text name="damage_label" value="Dégâts :"/>
- <text name="damage_value" value="Désactivés"/>
- <button label="À propos des terrains" name="about_land_btn"/>
+ <text name="scripts_label" value="Scripts :"/>
+ <text name="scripts_value" value="Activé"/>
+ <text name="damage_label" value="Dégâts :"/>
+ <text name="damage_value" value="Désactivé"/>
+ <button label="À propos du terrain" name="about_land_btn"/>
</panel>
</accordion_tab>
<accordion_tab name="region_information_tab" title="Région">
- <panel>
+ <panel name="region_information_panel">
<text name="region_name_label" value="Région :"/>
<text name="region_name" value="Pays des orignaux"/>
- <text name="region_type_label" value="Type :"/>
+ <text name="region_type_label" value="Type :"/>
<text name="region_type" value="Orignal"/>
- <text name="region_rating_label" value="Catégorie :"/>
+ <text name="region_rating_label" value="Catégorie :"/>
<text name="region_rating" value="Adulte"/>
- <text name="region_owner_label" value="Propriétaire :"/>
+ <text name="region_owner_label" value="Propriétaire :"/>
<text name="region_owner" value="orignal Van Orignal"/>
- <text name="region_group_label" value="Groupe :"/>
+ <text name="region_group_label" value="Groupe :"/>
<text name="region_group">
- Le puissant orignal d&apos;Orignalville
+ Le puissant orignal d’Orignalville
</text>
<button label="Région/Domaine" name="region_info_btn"/>
</panel>
</accordion_tab>
<accordion_tab name="estate_information_tab" title="Domaine">
- <panel>
- <text name="estate_name_label" value="Domaine :"/>
- <text name="estate_rating_label" value="Catégorie :"/>
- <text name="estate_owner_label" value="Propriétaire :"/>
- <text name="covenant_label" value="Règlement :"/>
+ <panel name="estate_information_panel">
+ <text name="estate_name_label" value="Domaine :"/>
+ <text name="estate_rating_label" value="Catégorie :"/>
+ <text name="estate_owner_label" value="Propriétaire :"/>
+ <text name="covenant_label" value="Règlement :"/>
</panel>
</accordion_tab>
<accordion_tab name="sales_tab" title="À vendre">
- <panel>
- <text name="sales_price_label" value="Prix :"/>
+ <panel name="sales_panel">
+ <text name="sales_price_label" value="Prix :"/>
<text name="area_label" value="Surface :"/>
<text name="traffic_label" value="Trafic :"/>
<text name="primitives_label" value="Prims :"/>
- <text name="parcel_scripts_label" value="Scripts :"/>
- <text name="terraform_limits_label" value="Limites de terraformage :"/>
- <text name="subdivide_label" value="Possibilité de division/fusion :"/>
- <text name="resale_label" value="Possibilité de revente :"/>
+ <text name="parcel_scripts_label" value="Scripts :"/>
+ <text name="terraform_limits_label" value="Limites de terraformage :"/>
+ <text name="subdivide_label" value="Possibilité de sous-division/fusion :"/>
+ <text name="resale_label" value="Possibilité de revente :"/>
<text name="sale_to_label" value="À vendre à :"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml
index f6a64f0c58..92b0a6c1db 100644
--- a/indra/newview/skins/default/xui/fr/panel_places.xml
+++ b/indra/newview/skins/default/xui/fr/panel_places.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Lieux" name="places panel">
<string name="landmarks_tab_title" value="MES REPÈRES"/>
- <string name="teleport_history_tab_title" value="HISTORIQUE DES TÉLÉPORTATIONS"/>
- <filter_editor label="Filtrer Mes lieux" name="Filter"/>
+ <string name="teleport_history_tab_title" value="HISTORIQUE DES TÉLÉP."/>
+ <filter_editor label="Filtrer les endroits" name="Filter"/>
<panel name="button_panel">
<button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
<button label="Carte" name="map_btn"/>
<button label="Éditer" name="edit_btn" tool_tip="Modifier les informations du repère"/>
- <button name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
- <button label="Fermer" name="close_btn"/>
- <button label="Annuler" name="cancel_btn"/>
+ <button label="â–¼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
<button label="Enregistrer" name="save_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+ <button label="Fermer" name="close_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
index 4b8559fdde..f8ecfbedac 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
@@ -3,6 +3,9 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <panel.string name="middle_mouse">
+ Bouton central de la souris
+ </panel.string>
<slider label="Angle de vue" name="camera_fov"/>
<slider label="Distance" name="camera_offset_scale"/>
<text name="heading2">
@@ -19,7 +22,7 @@
<color_swatch name="background" tool_tip="Choisir la couleur des bulles de chat"/>
<check_box label="Afficher les erreurs de script dans :" name="show_script_errors"/>
<radio_group name="show_location">
- <radio_item label="Chat près de vous" name="0"/>
+ <radio_item label="Chat près de moi" name="0"/>
<radio_item label="Autre fenêtre" name="1"/>
</radio_group>
<check_box label="Activer/désactiver la fonction Parler quand j&apos;appuie sur :" name="push_to_talk_toggle_check" tool_tip="En mode bascule, appuyez une fois sur la touche de contrôle de la fonction, puis relâchez-la pour activer/désactiver votre micro. Si vous n&apos;êtes pas en mode bascule, le micro ne diffuse votre voix que quand vous maintenez la touche de contrôle de la fonction enfoncée."/>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index 27242ec3de..64635fbac0 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Chat écrit" name="chat">
+ <text name="font_size">
+ Taille de la police :
+ </text>
<radio_group name="chat_font_size">
- <radio_item label="Moins" name="radio" value="0"/>
+ <radio_item label="Petite" name="radio" value="0"/>
<radio_item label="Moyenne" name="radio2" value="1"/>
- <radio_item label="Plus" name="radio3" value="2"/>
+ <radio_item label="Grande" name="radio3" value="2"/>
</radio_group>
+ <text name="font_colors">
+ Couleurs de police :
+ </text>
<color_swatch label="Vous" name="user"/>
<text name="text_box1">
Moi
@@ -40,6 +46,12 @@
<check_box initial_value="true" label="Jouer l&apos;animation clavier quand vous écrivez" name="play_typing_animation"/>
<check_box label="M&apos;envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/>
<check_box label="Activer l&apos;historique des chats en texte brut" name="plain_text_chat_history"/>
+ <text name="show_ims_in_label">
+ Afficher les IM dans :
+ </text>
+ <text name="requires_restart_label">
+ (redémarrage requis)
+ </text>
<radio_group name="chat_window" tool_tip="Afficher vos messages instantanés dans plusieurs fenêtres ou dans une seule fenêtre avec plusieurs onglets (redémarrage requis)">
<radio_item label="Plusieurs fenêtres" name="radio" value="0"/>
<radio_item label="Onglets" name="radio2" value="1"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
index c3bbe18a7c..8e8ee26af4 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
@@ -44,7 +44,7 @@
<radio_item label="Activé" name="radio2" value="1"/>
<radio_item label="Afficher brièvement" name="radio3" value="2"/>
</radio_group>
- <check_box label="Afficher mon nom" name="show_my_name_checkbox1"/>
+ <check_box label="Montrer mon nom" name="show_my_name_checkbox1"/>
<check_box initial_value="true" label="Affichage en petit" name="small_avatar_names_checkbox"/>
<check_box label="Afficher les titres de groupe" name="show_all_title_checkbox1"/>
<text name="effects_color_textbox">
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
index aa004d2c84..450ad64ae4 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -17,7 +17,7 @@
<text name="QualitySpeed">
Qualité et vitesse :
</text>
- <text left="35" name="FasterText">
+ <text name="FasterText">
Plus rapide
</text>
<text name="BetterText">
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
index 3c789574a4..eae49e7810 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
@@ -17,8 +17,8 @@
<text name="text_box2">
kbps
</text>
- <check_box label="Port de connexion personnalisé" name="connection_port_enabled"/>
- <spinner label="Numéro de port :" name="connection_port"/>
+ <check_box label="Port de connexion" name="connection_port_enabled"/>
+ <spinner label="Numéro :" name="connection_port"/>
<text name="cache_size_label_l">
Taille de la mémoire
</text>
@@ -34,9 +34,12 @@
Web :
</text>
<radio_group name="use_external_browser">
- <radio_item label="Utiliser le navigateur intégré" name="internal" tool_tip="Utilisez le navigateur intégré pour obtenir de l&apos;aide, ouvrir des liens, etc. Ce navigateur s&apos;ouvre dans [APP_NAME]." value="0"/>
<radio_item label="Utiliser mon navigateur (IE, Firefox, Safari)" name="external" tool_tip="Utiliser le navigateur web système par défaut pour l&apos;aide, les liens etc. Non recommandé en mode plein écran." value="1"/>
+ <radio_item label="Utiliser le navigateur intégré" name="internal" tool_tip="Utilisez le navigateur intégré pour obtenir de l&apos;aide, ouvrir des liens, etc. Ce navigateur s&apos;ouvre dans [APP_NAME]." value=""/>
</radio_group>
+ <check_box initial_value="true" label="Activer les plugins" name="browser_plugins_enabled"/>
+ <check_box initial_value="true" label="Accepter les cookies" name="cookies_enabled"/>
+ <check_box initial_value="true" label="Activer Javascript" name="browser_javascript_enabled"/>
<check_box initial_value="false" label="Activer le proxy Web" name="web_proxy_enabled"/>
<text name="Proxy location">
Emplacement du proxy :
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
index 663775559a..4c055a2b8d 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sons" name="Preference Media panel">
<slider label="Volume principal" name="System Volume"/>
- <check_box initial_value="true" label="Couper le son quand minimisé" name="mute_when_minimized"/>
+ <check_box initial_value="true" label="Couper quand minimisé" name="mute_when_minimized"/>
<slider label="Boutons" name="UI Volume"/>
<slider label="Ambiant" name="Wind Volume"/>
<slider label="Effets sonores" name="SFX Volume"/>
@@ -13,9 +13,12 @@
<check_box label="Activé" name="enable_voice_check"/>
<check_box label="Autoriser la lecture automatique du média" name="media_auto_play_btn" tool_tip="Cochez pour autoriser la lecture automatique du média" value="vrai"/>
<check_box label="Jouer le média aux autres avatars" name="media_show_on_others_btn" tool_tip="Décochez pour masquer le média aux autres avatars près de vous" value="vrai"/>
- <text name="Listen from">
+ <text name="voice_chat_settings">
Paramètres du chat vocal
</text>
+ <text name="Listen from">
+ Écouter à partir de :
+ </text>
<radio_group name="ear_location">
<radio_item label="Position de la caméra" name="0"/>
<radio_item label="Position de l&apos;avatar" name="1"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
index c7ab31c4b3..f6b9bdcb81 100644
--- a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
@@ -31,7 +31,7 @@
<button name="stop_btn" tool_tip="Arrêter le chargement"/>
</layout_panel>
<layout_panel name="play">
- <button name="play_btn" tool_tip="Jouer le média"/>
+ <button name="play_btn" tool_tip="Lire le média"/>
</layout_panel>
<layout_panel name="pause">
<button name="pause_btn" tool_tip="Pauser le média"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml
index 364426fed1..f801aee312 100644
--- a/indra/newview/skins/default/xui/fr/panel_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_profile.xml
@@ -24,7 +24,7 @@
<text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
</panel>
<panel name="first_life_image_panel">
- <text name="title_rw_descr_text" value="Monde physique :"/>
+ <text name="title_rw_descr_text" value="Vie réelle :"/>
</panel>
<text name="title_member_text" value="Résident depuis :"/>
<text name="title_acc_status_text" value="Statut du compte :"/>
@@ -41,9 +41,9 @@
</scroll_container>
</layout_panel>
<layout_panel name="profile_buttons_panel">
- <button label="Devenir amis" name="add_friend" tool_tip="Proposer à ce résident de devenir votre ami"/>
- <button label="IM" name="im" tool_tip="Ouvrir une session IM" width="30"/>
- <button label="Appeler" name="call" tool_tip="Appeler ce résident" width="60"/>
+ <button label="Devenir amis" name="add_friend" tool_tip="Proposer à un résident de devenir votre ami"/>
+ <button label="IM" name="im" tool_tip="Ouvrir une session IM"/>
+ <button label="Appeler" name="call" tool_tip="Appeler ce résident"/>
<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/>
<button label="Téléporter" name="teleport" tool_tip="Proposez une téléportation"/>
<button label="▼" name="overflow_btn" tool_tip="Payer ou partager l&apos;inventaire avec le résident"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
index cd1d0c4886..a30306d116 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
@@ -70,13 +70,12 @@ toutes les parcelles du domaine.
Le terrain acheté dans cette région peut être revendu.
</string>
<string name="can_not_resell">
- Le terrain acheté dans cette région ne peut pas être revendu.
+ Le terrain acheté dans la région ne peut pas être revendu.
</string>
<string name="can_change">
- Le terrain acheté dans cette région peut être fusionné ou divisé.
+ Le terrain acheté dans la région peut être fusionné ou divisé.
</string>
<string name="can_not_change">
- Le terrain acheté dans cette région ne peut pas être fusionné ou
-divisé.
+ Le terrain acheté dans la région ne peut être fusionné ou divisé.
</string>
</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 f9262ea478..2c12547d61 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
@@ -5,7 +5,7 @@
onglet affecteront toutes les régions du
domaine.
</text>
- <text top_pad="8" bottom_delta="-34" name="estate_text">
+ <text bottom_delta="-34" name="estate_text" top_pad="8">
Domaine :
</text>
<text name="estate_name">
@@ -20,8 +20,8 @@ domaine.
<text name="Only Allow">
Limiter l&apos;accès aux comptes vérifiés par :
</text>
- <check_box label="Informations de paiement enregistrées" name="limit_payment" tool_tip="Bannir les résidents non identifiés"/>
- <check_box label="Vérification de mon â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="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="Autoriser les chats vocaux" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<text name="abuse_email_text">
@@ -74,5 +74,5 @@ domaine.
<button label="Ajouter..." name="add_banned_avatar_btn"/>
<button label="Supprimer..." name="remove_banned_avatar_btn"/>
<button label="Envoyer un message au domaine..." name="message_estate_btn"/>
- <button label="Éjecter le résident du domaine..." name="kick_user_from_estate_btn"/>
+ <button label="Éjecter un résident du domaine..." name="kick_user_from_estate_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml
index 711278d614..925f4375da 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_general.xml
@@ -19,35 +19,25 @@
(inconnu)
</text>
<check_box label="Interdire le terraformage" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
<check_box label="Interdire le vol" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
<check_box label="Autoriser les dégâts" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
<check_box label="Interdire les bousculades" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
<check_box label="Autoriser la revente" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help"/>
<check_box label="Autoriser la fusion/division" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help"/>
<check_box label="Ne pas afficher dans la recherche" name="block_parcel_search_check" tool_tip="Afficher cette région et ses parcelles dans les résultats de recherche"/>
- <button label="?" name="parcel_search_help"/>
- <spinner label="Nombre maximum d&apos;avatars" name="agent_limit_spin" label_width="160" width="240"/>
- <button label="?" name="agent_limit_help"/>
- <spinner label="Bonus objet" name="object_bonus_spin" label_width="160" width="240"/>
- <button label="?" name="object_bonus_help"/>
+ <spinner label="Nombre maximum d&apos;avatars" label_width="160" name="agent_limit_spin" width="240"/>
+ <spinner label="Bonus objet" label_width="160" name="object_bonus_spin" width="240"/>
<text label="Maturité" name="access_text">
Catégorie :
</text>
- <combo_box label="Modéré" name="access_combo">
- <combo_box.item label="Adult" name="Adult"/>
- <combo_box.item label="Modéré" name="Mature"/>
- <combo_box.item label="Général" name="PG"/>
- </combo_box>
- <button label="?" name="access_help"/>
+ <icons_combo_box label="Modéré" name="access_combo">
+ <icons_combo_box.item label="Adult" name="Adult" value="42"/>
+ <icons_combo_box.item label="Modéré" name="Mature" value="21"/>
+ <icons_combo_box.item label="Général" name="PG" value="13"/>
+ </icons_combo_box>
<button label="Appliquer" name="apply_btn"/>
- <button label="Téléporter un résident chez lui..." name="kick_btn"/>
- <button label="Téléporter tous les résidents chez eux..." name="kick_all_btn"/>
+ <button label="Téléporter un résident chez lui…" name="kick_btn"/>
+ <button label="Téléporter tous les résidents chez eux…" name="kick_all_btn"/>
<button label="Envoyer un message à la région..." name="im_btn"/>
<button label="Gérer le Téléhub..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml b/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml
index e709100fa2..663ae55134 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml
@@ -3,19 +3,19 @@
<text name="region_text_lbl">
Région :
</text>
- <text name="region_text" left_delta="56">
+ <text left_delta="56" name="region_text">
inconnu
</text>
<text name="version_channel_text_lbl">
Version :
</text>
- <text name="version_channel_text" left_delta="56">
+ <text left_delta="56" name="version_channel_text">
inconnu
</text>
<text name="region_type_lbl">
Type :
</text>
- <text name="region_type" left_delta="56">
+ <text left_delta="56" name="region_type">
inconnu
</text>
<check_box label="Interdire le terraformage" name="block_terraform_check"/>
@@ -25,8 +25,8 @@
<check_box label="Autoriser la revente de terrains" name="allow_land_resell_check"/>
<check_box label="Autoriser la fusion/division de terrains" name="allow_parcel_changes_check"/>
<check_box label="Interdire l&apos;affichage du terrain dans les recherches" name="block_parcel_search_check" tool_tip="Permettre aux autres résidents de voir cette région et ses parcelles dans les résultats de recherche"/>
- <spinner label="Nombre maximum d&apos;avatars" name="agent_limit_spin" label_width="160" width="240"/>
- <spinner label="Bonus objet" name="object_bonus_spin" label_width="160" width="240"/>
+ <spinner label="Nombre maximum d&apos;avatars" label_width="160" name="agent_limit_spin" width="240"/>
+ <spinner label="Bonus objet" label_width="160" name="object_bonus_spin" width="240"/>
<text label="Accès" name="access_text">
Catégorie :
</text>
@@ -36,8 +36,8 @@
<combo_box.item label="Général" name="PG"/>
</combo_box>
<button label="Appliquer" name="apply_btn"/>
- <button label="Téléporter un résident chez lui..." name="kick_btn"/>
- <button label="Téléporter tous les résidents chez eux..." name="kick_all_btn"/>
+ <button label="Téléporter un résident chez lui…" name="kick_btn"/>
+ <button label="Téléporter tous les résidents chez eux…" name="kick_all_btn"/>
<button label="Envoyer un message à la région..." name="im_btn"/>
<button label="Gérer le téléhub..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_texture.xml b/indra/newview/skins/default/xui/fr/panel_region_texture.xml
index e95d911c01..c0b667137a 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_texture.xml
@@ -28,25 +28,25 @@
Limites d&apos;élévation de texture
</text>
<text name="height_text_lbl6">
- Sud-ouest
+ Nord-ouest
</text>
<text name="height_text_lbl7">
- Nord-ouest
+ Nord-est
</text>
<text name="height_text_lbl8">
- Sud-est
+ Sud-ouest
</text>
<text name="height_text_lbl9">
- Nord-est
+ Sud-est
</text>
<text name="height_text_lbl10" width="460">
Ces valeurs représentent les limites de mélange pour les textures ci-dessus.
</text>
<text name="height_text_lbl11">
- En mètres, la valeur Bas correspond à la hauteur maximum de la texture n°1 et la valeur Haut correspond à la hauteur minimum de la texture n°4.
+ En mètres, la valeur Bas correspond à la hauteur max. de la texture n°1
</text>
<text name="height_text_lbl12">
- et la valeur Haut correspond à la hauteur minimum de la texture n°4.
+ et la valeur Haut correspond à la hauteur min. de la texture n°4.
</text>
<text name="height_text_lbl13">
Nord-est
@@ -63,10 +63,10 @@
Ces valeurs représentent les limites de mélange pour les textures ci-dessus.
</text>
<text name="height_text_lbl15">
- En mètres, la valeur BASSE correspond à la hauteur MAXIMUM de la Texture #1,
+ La valeur Bas correspond à la hauteur max. de la Texture 1,
</text>
<text name="height_text_lbl16">
- et la valeur HAUTE correspond à la hauteur MINIMUM de la Texture #4.
+ et la valeur Haut correspond à la hauteur min. de la Texture 4.
</text>
<button label="Appliquer" name="apply_btn"/>
</panel>
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 e58e806f99..657bf792cf 100644
--- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
@@ -22,10 +22,10 @@
[AMT] L$
</panel.string>
<button label="" label_selected="" name="buycurrency" tool_tip="Mon solde"/>
- <button label="Acheter des L$" name="buyL" tool_tip="Cliquez pour acheter plus de L$"/>
+ <button label="Acheter" name="buyL" tool_tip="Cliquez pour acheter plus de L$"/>
<text name="TimeText" tool_tip="Heure actuelle (Pacifique)">
00h00 PST
</text>
- <button name="media_toggle_btn" tool_tip="Cliquer pour activer/désactiver le média"/>
+ <button name="media_toggle_btn" tool_tip="Arrêter tous les médias (musique, vidéo, pages web)"/>
<button name="volume_btn" tool_tip="Contrôle du volume global"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml
index 3367353b28..c049de48b1 100644
--- a/indra/newview/skins/default/xui/fr/role_actions.xml
+++ b/indra/newview/skins/default/xui/fr/role_actions.xml
@@ -17,21 +17,21 @@
<action_set description="Ces pouvoirs permettent de modifier le profil public du groupe, sa charte et son logo." name="Group Identity">
<action description="Modifier le profil public du groupe" longdescription="Modifiez la charte, le logo et l&apos;affichage dans les résultats de recherche. Vous pouvez faire cela dans la section Général." name="group change identity" value="11"/>
</action_set>
- <action_set description="Ces pouvoirs incluent les pouvoirs de céder, modifier et vendre les terrains de ce groupe. Pour accéder à la fenêtre À propos des terrains, cliquez sur le sol avec le bouton droit de la souris et sélectionnez À propos des terrains, ou cliquez sur l&apos;icône i dans la barre de navigation." name="Parcel Management">
+ <action_set description="Ces pouvoirs incluent les pouvoirs de céder, modifier et vendre les terrains de ce groupe. Pour accéder à la fenêtre À propos du terrain, cliquez sur le sol avec le bouton droit de la souris et sélectionnez À propos du terrain, ou cliquez sur l&apos;icône i dans la barre de navigation." name="Parcel Management">
<action description="Transférer et acheter des parcelles pour le groupe" longdescription="Transférez et achetez des parcelles pour le groupe à partir du menu À propos du terrain &gt; Général." name="land deed" value="12"/>
<action description="Abandonner le terrain" longdescription="Abandonnez des parcelles du groupe à Linden Lab. Attention : ce pouvoir autorise l&apos;abandon d&apos;un terrain appartenant au groupe. Ce terrain sera alors définitivement perdu. Assurez-vous de bien comprendre ce pouvoir avant de l&apos;attribuer." name="land release" value="13"/>
<action description="Vendre du terrain" longdescription="Vendez des parcelles du groupe. Attention : ce pouvoir autorise la vente d&apos;un terrain appartenant au groupe. Ce terrain sera alors définitivement perdu. Assurez-vous de bien comprendre ce pouvoir avant de l&apos;attribuer." name="land set sale info" value="14"/>
<action description="Diviser et fusionner des parcelles" longdescription="Divisez et fusionnez des parcelles. Pour ce faire, cliquez sur le sol avec le bouton droit de la souris, sélectionnez Modifier le terrain et faites glisser la souris sur le terrain pour faire une sélection. Pour diviser une parcelle, sélectionnez ce que vous souhaitez diviser et cliquez sur Sous-diviser. Pour fusionner des parcelles, sélectionnez-en deux ou plus qui sont contiguës et cliquez sur Fusionner." name="land divide join" value="15"/>
</action_set>
<action_set description="Ces pouvoirs permettent de modifier le nom de la parcelle, son référencement dans la recherche et le lieu de téléportation." name="Parcel Identity">
- <action description="Activez Afficher le lieu dans la recherche et définissez la catégorie" longdescription="Activez Afficher le lieu dans la recherche et définissez la catégorie d&apos;une parcelle dans l&apos;onglet À propos des terrains &gt; Options." name="land find places" value="17"/>
- <action description="Modifiez le nom et la description de la parcelle, ainsi que les paramètres d&apos;affichage du lieu dans la recherche" longdescription="Modifiez le nom et la description de la parcelle, ainsi que les paramètres d&apos;affichage du lieu dans la recherche. Pour ce faire, utilisez l&apos;onglet À propos des terrains &gt; Options." name="land change identity" value="18"/>
+ <action description="Activez Afficher le lieu dans la recherche et définissez la catégorie" longdescription="Activez Afficher le lieu dans la recherche et définissez la catégorie d&apos;une parcelle dans l&apos;onglet À propos du terrain &gt; Options." name="land find places" value="17"/>
+ <action description="Modifiez le nom et la description de la parcelle, ainsi que les paramètres d&apos;affichage du lieu dans la recherche" longdescription="Modifiez le nom et la description de la parcelle, ainsi que les paramètres d&apos;affichage du lieu dans la recherche. Pour ce faire, utilisez l&apos;onglet À propos du terrain &gt; Options." name="land change identity" value="18"/>
<action description="Définir le lieu d&apos;arrivée et le routage des téléportations" longdescription="Définissez le lieu d&apos;arrivée des téléportations et le routage à partir du menu À propos du terrain &gt; Options." name="land set landing point" value="19"/>
</action_set>
<action_set description="Ces pouvoirs permettent de définir les options de la parcelle concernant la musique, les médias, la création d&apos;objets et le relief." name="Parcel Settings">
<action description="Modifier la musique et les médias" longdescription="Changez la musique et les médias à partir du menu À propos du terrain &gt; Médias." name="land change media" value="20"/>
<action description="Changer l&apos;option Modifier le terrain" longdescription="Changez l&apos;option Modifier le terrain à partir du menu À propos du terrain &gt; Options. Attention : ce pouvoir permet de terraformer votre terrain et de placer ou déplacer des plantes Linden. Assurez-vous de bien comprendre ce pouvoir avant de l&apos;attribuer. " name="land edit" value="21"/>
- <action description="Changer diverses options du terrain" longdescription="Activez Sécurisé (pas de dégâts), Voler, et autorisez les autres résidents à : modifier le terrain, construire, créer des repères et exécuter des scripts sur les terrains appartenant au groupe dans l&apos;onglet propos des terrains &gt; Options." name="land options" value="22"/>
+ <action description="Changer diverses options du terrain" longdescription="Activez Sécurisé (pas de dégâts), Voler, et autorisez les autres résidents à : modifier le terrain, construire, créer des repères et exécuter des scripts sur les terrains appartenant au groupe dans l&apos;onglet propos du terrain &gt; Options." name="land options" value="22"/>
</action_set>
<action_set description="Ces pouvoirs permettent aux membres d&apos;outrepasser les restrictions sur les parcelles du groupe." name="Parcel Powers">
<action description="Toujours autoriser Modifier le terrain" longdescription="Vous pouvez modifier le relief d&apos;une parcelle du groupe, même si l&apos;option est désactivée à partir du menu À propos du terrain &gt; Options." name="land allow edit land" value="23"/>
@@ -40,11 +40,11 @@
<action description="Toujours autoriser à créer des repères" longdescription="Vous pouvez créer un repère sur une parcelle du groupe, même si l&apos;option est désactivée à partir du menu À propos du terrain &gt; Options." name="land allow landmark" value="26"/>
<action description="Autoriser à définir un domicile sur le terrain du groupe" longdescription="Un membre dans un rôle avec ce pouvoir peut utiliser le menu Monde &gt; Repères &gt; Définir le domicile ici sur une parcelle cédée à ce groupe." name="land allow set home" value="28"/>
</action_set>
- <action_set description="Ces pouvoirs permettent d&apos;autoriser ou d&apos;interdire l&apos;accès à des parcelles du groupe et de geler ou d&apos;expulser des résidents." name="Parcel Access">
+ <action_set description="Ces pouvoirs permettent d&apos;autoriser ou d&apos;interdire l&apos;accès à des parcelles du groupe et de figer ou d&apos;expulser des résidents." name="Parcel Access">
<action description="Gérer la liste d&apos;accès à la parcelle" longdescription="Gérez la liste des résidents autorisés sur la parcelle à partir du menu À propos du terrain &gt; Accès." name="land manage allowed" value="29"/>
- <action description="Gérer la liste noire de cette parcelle" longdescription="Gérez les listes des résidents bannis des parcelles dans l&apos;onglet À propos des terrains &gt; Accès." name="land manage banned" value="30"/>
- <action description="Modifiez les paramètres Vendre des pass à" longdescription="Modifiez les paramètres Vendre des pass à dans l&apos;onglet À propos des terrains &gt; Accès." name="land manage passes" value="31"/>
- <action description="Expulser et geler des résidents" longdescription="Les membres dans un rôle avec ce pouvoir peuvent se charger des résidents indésirables sur une parcelle appartenant au groupe en cliquant dessus, puis en sélectionnant Expulser ou Geler." name="land admin" value="32"/>
+ <action description="Gérer la liste noire de cette parcelle" longdescription="Gérez les listes des résidents bannis des parcelles dans l&apos;onglet À propos du terrain &gt; Accès." name="land manage banned" value="30"/>
+ <action description="Modifiez les paramètres Vendre des pass à" longdescription="Modifiez les paramètres Vendre des pass à dans l&apos;onglet À propos du terrain &gt; Accès." name="land manage passes" value="31"/>
+ <action description="Expulser et figer des résidents" longdescription="Les membres dans un rôle avec ce pouvoir peuvent se charger des résidents indésirables sur une parcelle appartenant au groupe en cliquant dessus, puis en sélectionnant Expulser ou Figer." name="land admin" value="32"/>
</action_set>
<action_set description="Ces pouvoirs permettent de renvoyer des objets du groupe et de placer ou déplacer des plantes Linden pour aménager le paysage. Utilisez ce pouvoir avec précaution car les objets renvoyés le sont définitivement." name="Parcel Content">
<action description="Renvoyer les objets transférés au groupe" longdescription="Vous pouvez renvoyer des objets appartenant au groupe à partir du menu À propos du terrain &gt; Objets." name="land return group owned" value="48"/>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
index f791877fa8..c8e76118a1 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
@@ -19,7 +19,7 @@
Vous ne pouvez pas modifier ces objets
</panel.string>
<panel.string name="text modify warning">
- Cet objet comprend des parties reliées
+ Cet objet comprend des parties liées
</panel.string>
<panel.string name="Cost Default">
Prix : L$
@@ -38,33 +38,33 @@
</panel.string>
<text name="title" value="Profil de l&apos;objet"/>
<text name="where" value="(dans Second Life)"/>
- <panel label="">
+ <panel label="" name="properties_panel">
<text name="Name:">
- Nom :
+ Nom :
</text>
<text name="Description:">
Description :
</text>
<text name="CreatorNameLabel">
- Créateur :
+ Créateur :
</text>
<text name="Creator Name">
Erica Linden
</text>
<text name="Owner:">
- Propriétaire :
+ Propriétaire :
</text>
<text name="Owner Name">
Erica Linden
</text>
<text name="Group_label">
- Groupe :
+ Groupe :
</text>
- <button name="button set group" tool_tip="Choisissez un groupe pour partager les permissions de cet objet"/>
- <name_box initial_value="Chargement..." name="Group Name Proxy"/>
- <button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les permissions au prochain propriétaire. Seul un officier peut céder les objets d&apos;un groupe."/>
+ <button name="button set group" tool_tip="Choisir un groupe pour partager les droits relatifs à cet objet"/>
+ <name_box initial_value="Chargement…" name="Group Name Proxy"/>
+ <button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les droits au prochain propriétaire. Seul un officier peut céder les objets partagés d&apos;un groupe."/>
<text name="label click action">
- Cliquer pour :
+ Cliquer pour :
</text>
<combo_box name="clickaction">
<combo_box.item label="Toucher (défaut)" name="Touch/grab(default)"/>
@@ -78,16 +78,16 @@
Vous pouvez modifier cet objet
</text>
<text name="Anyone can:">
- N&apos;importe qui :
+ N&apos;importe qui :
</text>
<check_box label="Copier" name="checkbox allow everyone copy"/>
<check_box label="Bouger" name="checkbox allow everyone move"/>
<text name="GroupLabel">
- Groupe :
+ Groupe :
</text>
- <check_box label="Partager" name="checkbox share with group" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Transférer."/>
+ <check_box label="Partager" name="checkbox share with group" tool_tip="Autoriser tous les membres du groupe choisi à partager vos droits de modification pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Céder."/>
<text name="NextOwnerLabel">
- Le prochain propriétaire :
+ Le prochain propriétaire :
</text>
<check_box label="Modifier" name="checkbox next owner can modify"/>
<check_box label="Copier" name="checkbox next owner can copy"/>
@@ -99,30 +99,31 @@
<combo_box.item label="Contenus" name="Contents"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
- <spinner label="Prix : L$" name="Edit Cost"/>
- <check_box label="Afficher dans les résultats de recherche" name="search_check" tool_tip="Permettre aux autres résidents de voir cet objet dans les résultats de recherche"/>
+ <spinner label="Prix : L$" name="Edit Cost"/>
+ <check_box label="Afficher avec la recherche" name="search_check" tool_tip="Permettre aux autres résidents de voir cet objet dans les résultats de recherche"/>
<text name="B:">
- B :
+ B :
</text>
<text name="O:">
- O :
+ O :
</text>
<text name="G:">
G :
</text>
<text name="E:">
- E :
+ E :
</text>
<text name="N:">
- N :
+ N :
</text>
<text name="F:">
- F :
+ F :
</text>
</panel>
<panel name="button_panel">
<button label="Ouvrir" name="open_btn"/>
<button label="Payer" name="pay_btn"/>
<button label="Acheter" name="buy_btn"/>
+ <button label="Détails" name="details_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index f25fe09c84..0ea11bb80f 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -23,7 +23,22 @@
Détection du matériel...
</string>
<string name="StartupLoading">
- Chargement
+ Chargement de [APP_NAME]...
+ </string>
+ <string name="StartupClearingCache">
+ Vidage du cache...
+ </string>
+ <string name="StartupInitializingTextureCache">
+ Initialisation du cache des textures...
+ </string>
+ <string name="StartupInitializingVFS">
+ Initialisation VFS…
+ </string>
+ <string name="ProgressRestoring">
+ Restauration...
+ </string>
+ <string name="ProgressChangingResolution">
+ Changement de la résolution...
</string>
<string name="Fullbright">
Fullbright (Legacy)
@@ -88,6 +103,9 @@
<string name="LoginFailedNoNetwork">
Erreur réseau : impossible d&apos;établir la connexion. Veuillez vérifier votre connexion réseau.
</string>
+ <string name="LoginFailed">
+ Échec de la connexion.
+ </string>
<string name="Quit">
Quitter
</string>
@@ -97,6 +115,24 @@
<string name="AgentLostConnection">
Il y a peut-être des problèmes techniques dans cette région. Veuillez vérifier votre connexion Internet.
</string>
+ <string name="SavingSettings">
+ Enregistrement des paramètres...
+ </string>
+ <string name="LoggingOut">
+ Déconnexion...
+ </string>
+ <string name="ShuttingDown">
+ Arrêt en cours...
+ </string>
+ <string name="YouHaveBeenDisconnected">
+ Vous avez été déconnecté de la région où vous étiez.
+ </string>
+ <string name="SentToInvalidRegion">
+ Vous avez été transféré vers une région non valide.
+ </string>
+ <string name="TestingDisconnect">
+ Test de déconnexion du client
+ </string>
<string name="TooltipPerson">
Personne
</string>
@@ -151,6 +187,24 @@
<string name="TooltipAgentUrl">
Cliquez pour afficher le profil de ce résident
</string>
+ <string name="TooltipAgentMute">
+ Cliquer pour ignorer ce résident
+ </string>
+ <string name="TooltipAgentUnmute">
+ Cliquer pour ne plus ignorer ce résident
+ </string>
+ <string name="TooltipAgentIM">
+ Cliquer pour envoyer un IM à ce résident
+ </string>
+ <string name="TooltipAgentPay">
+ Cliquer pour payer ce résident
+ </string>
+ <string name="TooltipAgentOfferTeleport">
+ Cliquer pour proposer une téléportation à ce résident
+ </string>
+ <string name="TooltipAgentRequestFriend">
+ Cliquer pour demander à ce résident d&apos;être votre ami
+ </string>
<string name="TooltipGroupUrl">
Cliquez pour afficher la description de ce groupe
</string>
@@ -176,12 +230,31 @@
Cliquez pour exécuter la commande secondlife:// command
</string>
<string name="CurrentURL" value=" URL actuelle : [CurrentURL]"/>
+ <string name="TooltipPrice" value="[PRICE] L$-"/>
<string name="SLurlLabelTeleport">
Me téléporter vers
</string>
<string name="SLurlLabelShowOnMap">
Afficher la carte pour
</string>
+ <string name="SLappAgentMute">
+ Ignorer
+ </string>
+ <string name="SLappAgentUnmute">
+ Ne plus ignorer
+ </string>
+ <string name="SLappAgentIM">
+ IM
+ </string>
+ <string name="SLappAgentPay">
+ Payer
+ </string>
+ <string name="SLappAgentOfferTeleport">
+ Proposer une téléportation à
+ </string>
+ <string name="SLappAgentRequestFriend">
+ Demande d&apos;amitié
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Fermer (⌘W)
</string>
@@ -335,6 +408,9 @@
<string name="symbolic link">
lien
</string>
+ <string name="symbolic folder link">
+ lien du dossier
+ </string>
<string name="AvatarEditingAppearance">
(Apparence en cours de modification)
</string>
@@ -758,6 +834,9 @@
<string name="invalid">
non valide
</string>
+ <string name="NewWearable">
+ Nouv. [WEARABLE_ITEM]
+ </string>
<string name="next">
Suivant
</string>
@@ -825,7 +904,7 @@
Appuyez sur ESC pour quitter la vue subjective
</string>
<string name="InventoryNoMatchingItems">
- Aucun objet correspondant dans l&apos;inventaire. Essayer la [secondlife:///app/search/groups &quot;Recherche&quot;].
+ Objet inexistant dans l&apos;inventaire. Voir [secondlife:///app/search/groups &quot;Rechercher&quot;].
</string>
<string name="FavoritesNoMatchingItems">
Faites glisser un repère ici pour l&apos;ajouter à vos Favoris.
@@ -846,6 +925,7 @@
Aucun contenu
</string>
<string name="WornOnAttachmentPoint" value=" (porté sur [ATTACHMENT_POINT])"/>
+ <string name="ActiveGesture" value="[GESLABEL] (actif)"/>
<string name="PermYes">
Oui
</string>
@@ -945,6 +1025,9 @@
<string name="InvFolder My Outfits">
Mes tenues
</string>
+ <string name="InvFolder Accessories">
+ Accessoires
+ </string>
<string name="InvFolder Friends">
Amis
</string>
@@ -1201,10 +1284,10 @@
Problème lors du téléchargement
</string>
<string name="CompileQueueInsufficientPermDownload">
- Permissions insuffisantes pour télécharger un script.
+ Droits insuffisants pour télécharger un script.
</string>
<string name="CompileQueueInsufficientPermFor">
- Permissions insuffisantes pour
+ Droits insuffisants pour
</string>
<string name="CompileQueueUnknownFailure">
Échec du téléchargement, erreur inconnue
@@ -1468,6 +1551,12 @@
<string name="PanelContentsNewScript">
Nouveau script
</string>
+ <string name="PanelContentsTooltip">
+ Contenu de l&apos;objet
+ </string>
+ <string name="BusyModeResponseDefault">
+ Le résident auquel vous avez envoyé un message est en mode Occupé, ce qui signifie qu&apos;il a demandé à ne pas être dérangé. Votre message restera affiché dans son panneau IM afin qu&apos;il puisse le lire ultérieurement.
+ </string>
<string name="MuteByName">
(par nom)
</string>
@@ -1506,6 +1595,9 @@
<string name="NoPicksClassifiedsText">
Vous n&apos;avez pas créé de favoris ni de petites annonces Cliquez sur le bouton Plus pour créer un favori ou une petite annonce.
</string>
+ <string name="NoAvatarPicksClassifiedsText">
+ L&apos;utilisateur n&apos;a ni favoris ni petites annonces
+ </string>
<string name="PicksClassifiedsLoadingText">
Chargement...
</string>
@@ -1579,7 +1671,10 @@
Annuler
</string>
<string name="UploadingCosts">
- Charger %s coûte
+ Le chargement de [NAME] coûte [AMOUNT] L$
+ </string>
+ <string name="BuyingCosts">
+ Cet achat coûte [AMOUNT] L$
</string>
<string name="UnknownFileExtension">
Extension de fichier inconnue .%s
@@ -2263,7 +2358,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
Brillant
</string>
<string name="Glove Fingers">
- Doigts avec gants
+ Gants avec doigts
</string>
<string name="Glove Length">
Longueur des gants
@@ -3025,7 +3120,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
Cheveux lisses
</string>
<string name="Socks Length">
- Longueur des chaussettes
+ Longueur
</string>
<string name="Soulpatch">
Barbichette
@@ -3366,4 +3461,120 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
<string name="unread_chat_multiple">
[SOURCES] ont dit quelque chose de nouveau
</string>
+ <string name="paid_you_ldollars">
+ [NAME] vous a payé [AMOUNT] L$
+ </string>
+ <string name="you_paid_ldollars">
+ Vous avez payé à [AMOUNT] L$ [REASON].
+ </string>
+ <string name="you_paid_ldollars_no_reason">
+ Vous avez payé à [NAME] [AMOUNT] L$.
+ </string>
+ <string name="you_paid_ldollars_no_name">
+ Vous avez payé à [AMOUNT] L$ [REASON].
+ </string>
+ <string name="for a parcel of land">
+ pour une parcelle de terrain
+ </string>
+ <string name="for a land access pass">
+ pour un pass d&apos;accès au terrain
+ </string>
+ <string name="for deeding land">
+ pour une cession de terrain
+ </string>
+ <string name="to create a group">
+ pour créer un groupe
+ </string>
+ <string name="to join a group">
+ pour rejoindre un groupe
+ </string>
+ <string name="to upload">
+ pour charger
+ </string>
+ <string name="giving">
+ Donner [AMOUNT] L$
+ </string>
+ <string name="uploading_costs">
+ Le chargement coûte [AMOUNT] L$
+ </string>
+ <string name="this_costs">
+ Cela coûte [AMOUNT] L$
+ </string>
+ <string name="buying_selected_land">
+ Achat du terrain sélectionné pour [AMOUNT] L$
+ </string>
+ <string name="this_object_costs">
+ Cet objet coûte [AMOUNT] L$
+ </string>
+ <string name="group_role_everyone">
+ Tous
+ </string>
+ <string name="group_role_officers">
+ Officiers
+ </string>
+ <string name="group_role_owners">
+ Propriétaires
+ </string>
+ <string name="uploading_abuse_report">
+ Chargement en cours...
+
+de l&apos;infraction signalée
+ </string>
+ <string name="New Shape">
+ Nouvelle silhouette
+ </string>
+ <string name="New Skin">
+ Nouvelle peau
+ </string>
+ <string name="New Hair">
+ Nouveaux cheveux
+ </string>
+ <string name="New Eyes">
+ Nouveaux yeux
+ </string>
+ <string name="New Shirt">
+ Nouvelle chemise
+ </string>
+ <string name="New Pants">
+ Nouveau pantalon
+ </string>
+ <string name="New Shoes">
+ Nouvelles chaussures
+ </string>
+ <string name="New Socks">
+ Nouvelles chaussettes
+ </string>
+ <string name="New Jacket">
+ Nouvelle veste
+ </string>
+ <string name="New Gloves">
+ Nouveaux gants
+ </string>
+ <string name="New Undershirt">
+ Nouveau débardeur
+ </string>
+ <string name="New Underpants">
+ Nouveau caleçon
+ </string>
+ <string name="New Skirt">
+ Nouvelle jupe
+ </string>
+ <string name="New Alpha">
+ Nouvel alpha
+ </string>
+ <string name="New Tattoo">
+ Nouveau tatouage
+ </string>
+ <string name="Invalid Wearable">
+ Objet à porter non valide
+ </string>
+ <string name="New Script">
+ Nouveau script
+ </string>
+ <string name="New Folder">
+ Nouveau dossier
+ </string>
+ <string name="Contents">
+ Contenus
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/fr/teleport_strings.xml b/indra/newview/skins/default/xui/fr/teleport_strings.xml
index b76ae370fd..7c291c0984 100644
--- a/indra/newview/skins/default/xui/fr/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/fr/teleport_strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<teleport_messages name="">
+<teleport_messages>
<message_set name="errors">
<message name="invalid_tport">
Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir vous téléporter.
@@ -61,6 +61,9 @@ Veuillez réessayer dans un moment.
<message name="completing">
Téléportation sur le point d&apos;aboutir.
</message>
+ <message name="completed_from">
+ Téléportation depuis [T_SLURL] terminée
+ </message>
<message name="resolving">
Destination en cours de résolution.
</message>
diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml
index a2fcaa63f6..495c24f5e9 100644
--- a/indra/newview/skins/default/xui/it/floater_about.xml
+++ b/indra/newview/skins/default/xui/it/floater_about.xml
@@ -1,26 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Informazioni su [APP_NAME]">
+<floater name="floater_about" title="INFO [CAPITALIZED_APP_NAME]">
<floater.string name="AboutHeader">
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])
[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
</floater.string>
<floater.string name="AboutCompiler">
- Fatto con [COMPILER] versione [COMPILER_VERSION]
+ Generato con [COMPILER] versione [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Tu sei in [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] a [REGION] ospitata da [HOSTNAME] ([HOSTIP])
+ Tu sei [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] in [REGION] located at &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
[SERVER_VERSION]
[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]]
</floater.string>
<floater.string name="AboutSystem">
CPU: [CPU]
Memoria: [MEMORY_MB] MB
-Versione Sistema Operativo: [OS_VERSION]
-Venditore Scheda Grafica: [GRAPHICS_CARD_VENDOR]
-Scheda Grafica: [GRAPHICS_CARD]
+Versione sistema operativo: [OS_VERSION]
+Venditore scheda grafica: [GRAPHICS_CARD_VENDOR]
+Scheda grafica: [GRAPHICS_CARD]
</floater.string>
<floater.string name="AboutDriver">
- Versione Driver Scheda Grafica: [GRAPHICS_DRIVER_VERSION]
+ Versione driver Windows per grafica: [GRAPHICS_DRIVER_VERSION]
</floater.string>
<floater.string name="AboutLibs">
Versione OpenGL: [OPENGL_VERSION]
@@ -35,7 +35,7 @@ Versione Vivox: [VIVOX_VERSION]
(nessuno)
</floater.string>
<floater.string name="AboutTraffic">
- Pacchetti Perduti: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+ Pacchetti perduti: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) Informazioni
</floater.string>
<tab_container name="about_tab">
<panel label="Informazioni" name="support_panel">
@@ -43,13 +43,19 @@ Versione Vivox: [VIVOX_VERSION]
</panel>
<panel label="Ringraziamenti" name="credits_panel">
<text_editor name="credits_editor">
- Second Life è offerto da Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl and many others.
+ Second Life ti è offerto da Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others.
- Si ringraziano i seguenti residenti per aver contribuito a rendere questa versione la migliore possibile: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+Si ringraziano i seguenti residenti per aver contribuito a rendere questa versione la migliore possibile: (in corso)
- Per avere successo nel business, sii coraggioso, sii il primo, sii differente. --Henry Marchant
+
+
+
+
+
+Senza dubbio è una mente rara quella che può rendere brillantemente ovvio il finora mai esistito. Dichiarare &quot;Avrei potuto pensare a tutto questo&quot; è molto comune e fuorviante, per il motivo che non l&apos;hanno fatto, e anche questo fatto è assai significativo e rivelativo.
+ -- Douglas Adams
</text_editor>
</panel>
<panel label="Licenze" name="licenses_panel">
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 4c82475a6f..bc23c2e8ff 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="INFO SUL TERRENO">
+<floater name="floaterland" title="INFORMAZIONI SUL TERRENO">
+ <floater.string name="maturity_icon_general">
+ &quot;Parcel_PG_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_moderate">
+ &quot;Parcel_M_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_adult">
+ &quot;Parcel_R_Dark&quot;
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] minuti
</floater.string>
@@ -10,12 +19,12 @@
[SECONDS] secondi
</floater.string>
<floater.string name="Remaining">
- restante
+ rimanenti
</floater.string>
<tab_container name="landtab">
<panel label="GENERALE" name="land_general_panel">
<panel.string name="new users only">
- Solo ai nuovi residenti
+ Soltanto nuovi residenti
</panel.string>
<panel.string name="anyone">
A chiunque
@@ -81,10 +90,12 @@ Vai al menu Mondo &gt; Informazioni sul terreno oppure seleziona un altro appezz
<text name="Group:">
Gruppo:
</text>
- <text left="119" name="GroupText" width="227"/>
- <button label="Imposta..." label_selected="Imposta..." name="Set..."/>
+ <text left="119" name="GroupText" width="227">
+ Leyla Linden
+ </text>
+ <button label="Imposta" name="Set..."/>
<check_box label="Permetti cessione al gruppo" left="119" name="check deed" tool_tip="Un funzionario del gruppo può cedere questa terra al gruppo stesso cosicchè essa sarà  supportata dalle terre del gruppo."/>
- <button label="Cedi..." label_selected="Cedi..." name="Deed..." tool_tip="Puoi solo offrire terra se sei un funzionario del gruppo selezionato."/>
+ <button label="Cedi" name="Deed..." tool_tip="Puoi solo offrire terra se sei un funzionario del gruppo selezionato."/>
<check_box label="Il proprietario fa un contributo con la cessione" left="119" name="check contrib" tool_tip="Quando la terra è ceduta al gruppo, il proprietario precedente contribuisce con abbastanza allocazione di terra per supportarlo."/>
<text name="For Sale:">
In vendita:
@@ -126,13 +137,14 @@ Vai al menu Mondo &gt; Informazioni sul terreno oppure seleziona un altro appezz
0
</text>
<button label="Acquista il terreno..." label_selected="Acquista il terreno..." left="130" name="Buy Land..." width="125"/>
- <button label="Acquista per il gruppo..." label_selected="Acquista per il gruppo..." name="Buy For Group..."/>
+ <button label="Informazioni script" name="Scripts..."/>
+ <button label="Acquista per il gruppo" name="Buy For Group..."/>
<button label="Compra pass..." label_selected="Compra pass..." left="130" name="Buy Pass..." tool_tip="Un pass ti da un accesso temporaneo in questo territorio." width="125"/>
- <button label="Abbandona la terra..." label_selected="Abbandona la terra..." name="Abandon Land..."/>
- <button label="Reclama la terra..." label_selected="Reclama la terra..." name="Reclaim Land..."/>
- <button label="Vendita Linden..." label_selected="Vendita Linden..." name="Linden Sale..." tool_tip="La terra deve essere posseduta, con contenuto impostato, e non già messa in asta."/>
+ <button label="Abbandona la terra" name="Abandon Land..."/>
+ <button label="Reclama la terra" name="Reclaim Land..."/>
+ <button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere posseduta, con contenuto impostato, e non già messa in asta."/>
</panel>
- <panel label="COVENANT" name="land_covenant_panel">
+ <panel label="REGOLAMENTO" name="land_covenant_panel">
<panel.string name="can_resell">
La terra acquistata in questa regione può essere rivenduta.
</panel.string>
@@ -196,7 +208,7 @@ o suddivisa.
La terra in questa regione non può essere unita/suddivisa.
</text>
</panel>
- <panel label="OBJECTS" name="land_objects_panel">
+ <panel label="OGGETTI" name="land_objects_panel">
<panel.string name="objects_available_text">
[COUNT] dei [MAX] ([AVAILABLE] disponibili)
</panel.string>
@@ -207,7 +219,7 @@ o suddivisa.
Fattore bonus degli oggetti della regione: [BONUS]
</text>
<text name="Simulator primitive usage:">
- Uso dei Primative :
+ Uso dei Prim:
</text>
<text left="214" name="objects_available" width="230">
[COUNT] dei [MAX] ([AVAILABLE] dsponibili)
@@ -231,7 +243,7 @@ o suddivisa.
[COUNT]
</text>
<button label="Mostra" label_selected="Mostra" name="ShowOwner" right="-135" width="60"/>
- <button label="Restituisci..." label_selected="Restituisci..." name="ReturnOwner..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/>
+ <button label="Restituisci" name="ReturnOwner..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/>
<text left="14" name="Set to group:" width="180">
Imposta al gruppo:
</text>
@@ -239,7 +251,7 @@ o suddivisa.
[COUNT]
</text>
<button label="Mostra" label_selected="Mostra" name="ShowGroup" right="-135" width="60"/>
- <button label="Restituisci..." label_selected="Restituisci..." name="ReturnGroup..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/>
+ <button label="Restituisci" name="ReturnGroup..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/>
<text left="14" name="Owned by others:" width="180">
Posseduti da altri:
</text>
@@ -247,7 +259,7 @@ o suddivisa.
[COUNT]
</text>
<button label="Mostra" label_selected="Mostra" name="ShowOther" right="-135" width="60"/>
- <button label="Restituisci..." label_selected="Restituisci..." name="ReturnOther..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/>
+ <button label="Restituisci" name="ReturnOther..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/>
<text left="14" name="Selected / sat upon:" width="193">
Selezionati / sui quali sei sopra:
</text>
@@ -255,7 +267,7 @@ o suddivisa.
[COUNT]
</text>
<text left="4" name="Autoreturn" width="412">
- Autorestituisci gli oggetti degli altri residenti (minuti, 0 per disabilitata):
+ Restituzione automatica degli oggetti di altri residenti (minuti, 0 per disattivarla):
</text>
<line_editor name="clean other time" right="-20"/>
<text name="Object Owners:" width="150">
@@ -303,7 +315,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
Nessuna spinta (Impostazione regionale)
</panel.string>
<text name="allow_label">
- Permetti agli altri residenti di:
+ Permetti ad altri residenti di:
</text>
<check_box label="Modificare il terreno" name="edit land check" tool_tip="Se spuntato, chiunque può terraformare il tuo terreno. E&apos; preferibile lasciare questo quadrato non spuntato, dato che sarai sempre in grado di modificare il tuo terreno."/>
<check_box label="Permetti il volo" name="check fly" tool_tip="Se spuntato, gli altri residenti potranno volare sul tuo terreno. Se non spuntato, potranno solamente arrivare in volo o sorvolare il terreno."/>
@@ -323,11 +335,11 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
<check_box label="Tutti i residenti" name="check other scripts"/>
<check_box label="Gruppo" name="check group scripts"/>
<text name="land_options_label">
- Opzioni della terra:
+ Opzioni per il terreno:
</text>
<check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su &apos;sicuro&apos;, disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento a morte."/>
<check_box label="Nessuna spinta" name="PushRestrictCheck" tool_tip="Previeni i colpi. Selezionare questa opzione può essere utile per prevenire comportamenti dannosi sul tuo terreno."/>
- <check_box label="Mostra luogo nel Cerca (L$30/settimana)" name="ShowDirectoryCheck" tool_tip="Lascia che questa terra sia vista dagli altri nei risultati di ricerca"/>
+ <check_box label="Mostra luogo nella ricerca (30 L$/settimana)" name="ShowDirectoryCheck" tool_tip="Lascia che questa terra sia vista dagli altri nei risultati di ricerca"/>
<combo_box left="282" name="land category with adult" width="140">
<combo_box.item label="Tutte le categorie" name="item0"/>
<combo_box.item label="Luogo dei Linden" name="item1"/>
@@ -385,10 +397,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
Home Page:
</text>
<line_editor left="97" name="media_url"/>
- <button label="Imposta..." label_selected="Imposta..." name="set_media_url" width="63"/>
- <text name="CurrentURL:">
- Pagina attuale:
- </text>
+ <button label="Imposta" name="set_media_url"/>
<check_box label="Nascondi indirizzo URL Media" left="94" name="hide_media_url" tool_tip="Abilitando questa opzione nasconderai l&apos;indirizzo url dei media a tutte le persone non autorizzate a vedere le informazioni del terreno. Nota che questo non è disponibile per contenuto di tipo HTML."/>
<text name="Description:">
Descrizione:
@@ -400,9 +409,7 @@ Texture:
</text>
<texture_picker label="" left="97" name="media texture" tool_tip="Clicca per scegliere un&apos;immagine"/>
<text name="replace_texture_help" width="285">
- (Gli oggetti che hanno questa texture applicata
-mostreranno il video o la pagina web dopo che avrai
-cliccato sulla freccia play.)
+ Gli oggetti che utilizzano questa texture mostreranno il video o la pagina web dopo aver cliccato sulla freccia di riproduzione. Seleziona la miniatura per scegliere una texture diversa.
</text>
<check_box label="Auto ridimensiona" left="94" name="media_auto_scale" tool_tip="Spuntando questa opzione, nell&apos;appezzamento il contenuto media si ridimensionerà automaticamente. Potrebbe darsi che appaia un po&apos; più lento e che diminuisca la qualità visiva ma nessun altro riadattamento o allineamento della texture sarà necessario."/>
<text left="99" name="media_size" tool_tip="Aumenta grandezza per far vedere meglio i media web, lascia a 0 per impostare il default." width="120">
@@ -420,12 +427,17 @@ Media:
<check_box label="Fai ripetere il video" left="265" name="media_loop" tool_tip="Fai ripetere il video continuamente. Quando il video è finito, reinizierà dal principio."/>
</panel>
<panel label="SUONO" name="land_audio_panel">
- <check_box label="Attiva Voice" name="parcel_enable_voice_channel"/>
- <check_box label="Attiva Voice (stabilito dalla Proprietà)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="Nascondi URL" name="hide_music_url" tool_tip="Questa opzione consente di nascondere l&apos;url della musica a chi non è autorizzato a visionare le informazioni di questo parcel."/>
+ <check_box label="Attiva voce" name="parcel_enable_voice_channel"/>
+ <check_box label="Attiva voce (stabilito dalla proprietà)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="Limita il chat vocale a questo lotto" name="parcel_enable_voice_channel_local"/>
</panel>
<panel label="ACCESSO" name="land_access_panel">
<panel.string name="access_estate_defined">
- (Definito dalla Proprietà)
+ (Definito dalla proprietà)
+ </panel.string>
+ <panel.string name="allow_public_access">
+ Consenti accesso pubblico ([MATURITY])
</panel.string>
<panel.string name="estate_override">
Una o più di queste impostazioni sono già impostate a livello regionale
@@ -433,12 +445,12 @@ Media:
<text name="Limit access to this parcel to:">
Accesso a questo terreno
</text>
- <check_box label="Permetti Accesso Pubblico [MATURITY]" name="public_access"/>
+ <check_box label="Consenti l&apos;accesso pubblico [MATURITY]" name="public_access"/>
<text name="Only Allow">
- Accesso ristretto ai Residenti verificati con:
+ Consenti l&apos;accesso soltanto ai residenti verificati tramite:
</text>
- <check_box label="Informazioni di pagamento on File [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Manda via residenti non identificati."/>
- <check_box label="Verifica dell&apos;età [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Espelli residenti che non hanno verificato l&apos;età. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
+ <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="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_activeim.xml b/indra/newview/skins/default/xui/it/floater_activeim.xml
index d19882fa48..0c1f0448e1 100644
--- a/indra/newview/skins/default/xui/it/floater_activeim.xml
+++ b/indra/newview/skins/default/xui/it/floater_activeim.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_activeim" title="ATTIVA IM"/>
+<floater name="floater_activeim" title="IM ATTIVO"/>
diff --git a/indra/newview/skins/default/xui/it/floater_animation_preview.xml b/indra/newview/skins/default/xui/it/floater_animation_preview.xml
index 74a994825d..c3ee23898c 100644
--- a/indra/newview/skins/default/xui/it/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_animation_preview.xml
@@ -23,22 +23,22 @@ La lunghezza massima è [MAX_LENGTH] secondi.
Impossibile leggere la definizione del vincolo.
</floater.string>
<floater.string name="E_ST_NO_FILE">
- Non può aprire il file BVH.
+ Impossibile aprire il file BVH.
</floater.string>
<floater.string name="E_ST_NO_HIER">
- HIERARCHY header non valido.
+ Intestazione HIERARCHY non valida.
</floater.string>
<floater.string name="E_ST_NO_JOINT">
- Impossibile trovare la RADICE o UNIONE. ????????????
+ Impossibile trovare la ROOT o JOINT.
</floater.string>
<floater.string name="E_ST_NO_NAME">
- Impossibile trovare il nome MISTO. ??????
+ 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. ?????
+ Impossibile trovare CHANNELS.
</floater.string>
<floater.string name="E_ST_NO_ROTATION">
Impossibile ottenere un ordine di rotazione.
@@ -47,22 +47,22 @@ La lunghezza massima è [MAX_LENGTH] secondi.
Rotazione dell&apos;asse non disponibile.
</floater.string>
<floater.string name="E_ST_NO_MOTION">
- Impossibile trovare il GESTO.
+ Impossibile trovare MOTION.
</floater.string>
<floater.string name="E_ST_NO_FRAMES">
- Impossibile ottenere il numero dei 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 ottenre una posizione dei valori.
+ 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 la traduzione del file.
+ Impossibile aprire il file di traduzione.
</floater.string>
<floater.string name="E_ST_NO_XLT_HEADER">
Impossibile leggere l&apos;intestazione della traduzione.
@@ -71,31 +71,31 @@ La lunghezza massima è [MAX_LENGTH] secondi.
Impossibile leggere i nomi della traduzione.
</floater.string>
<floater.string name="E_ST_NO_XLT_IGNORE">
- Impossibile leggere la traduzione ignora il valore. ?????
+ 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">
- Cannot read translation outname value.
+ 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 unire il nome del bambino.
+ Impossibile trovare il nome mergechild.
</floater.string>
<floater.string name="E_ST_NO_XLT_MERGEPARENT">
- Impossibile unire il nome del genitore.
+ Impossibile ottenere il nome mergeparent.
</floater.string>
<floater.string name="E_ST_NO_XLT_PRIORITY">
- Impossibile ottenre il valore di priorità.
+ Impossibile ottenere il valore di priorità.
</floater.string>
<floater.string name="E_ST_NO_XLT_LOOP">
- Impossibile ottenere il valore di loop.
+ Impossibile ottenere il valore di ripetizione.
</floater.string>
<floater.string name="E_ST_NO_XLT_EASEIN">
- Impossibile essere in agio nei valori. ?????????
+ Impossibile ottenere i valori easeIn.
</floater.string>
<floater.string name="E_ST_NO_XLT_EASEOUT">
Cannot get ease Out values.
@@ -106,38 +106,41 @@ La lunghezza massima è [MAX_LENGTH] secondi.
<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à" label_width="72" name="priority" tool_tip="Controlla quali altre animazioni possono prevalere su questa animazione" width="110"/>
- <check_box label="Ciclica" name="loop_check" tool_tip="Rendi questa animazione in loop"/>
- <spinner label="In(%)" name="loop_in_point" tool_tip="Imposta il momento nel quale l&apos;animazione inizia il loop"/>
- <spinner label="Out(%)" name="loop_out_point" tool_tip="Imposta il momento nel quale l&apos;animazione ferma il loop"/>
+ <spinner label="Priorità" label_width="72" name="priority" tool_tip="Definisce quali altre animazioni possono essere sostituite da questa animazione" width="110"/>
+ <check_box label="Ciclica" name="loop_check" tool_tip="Riproduce questa animazione in ripetizione"/>
+ <spinner label="In(%)" name="loop_in_point" tool_tip="Imposta il punto sul quale ritorna l&apos;animazione"/>
+ <spinner label="Out(%)" name="loop_out_point" tool_tip="Imposta il punto sul quale termina l&apos;animazione"/>
<text name="hand_label">
Postura della mano
</text>
- <combo_box left_delta="100" name="hand_pose_combo" tool_tip="Controlla ciò che fanno le mani durante l&apos;animazione" width="184">
+ <combo_box left_delta="100" name="hand_pose_combo" tool_tip="Definisce ciò che fanno le mani durante l&apos;animazione" width="184">
<combo_box.item label="Stendi" name="Spread"/>
<combo_box.item label="Rilassato" name="Relaxed"/>
- <combo_box.item label="indica entrambi" name="PointBoth"/>
+ <combo_box.item label="Indica entrambi" 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 sinistra" name="FistLeft"/>
+ <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 Destra" name="SaluteRight"/>
- <combo_box.item label="Scrivendo" name="Typing"/>
- <combo_box.item label="Pace Destra" name="PeaceRight"/>
+ <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 left_delta="100" name="emote_combo" tool_tip="Controlla ciò che fà il viso durante l&apos;animazione" width="184">
+ <combo_box left_delta="100" name="emote_combo" tool_tip="Definisce ciò che fa il viso durante l&apos;animazione" width="184">
<combo_box.item label="(Nessuno)" name="[None]"/>
<combo_box.item label="Aaaaah" name="Aaaaah"/>
<combo_box.item label="Spavento" name="Afraid"/>
@@ -147,7 +150,7 @@ La lunghezza massima è [MAX_LENGTH] secondi.
<combo_box.item label="Pianto" name="Cry"/>
<combo_box.item label="Disdegno" name="Disdain"/>
<combo_box.item label="Imbarazzato" name="Embarrassed"/>
- <combo_box.item label="Accigliato ?????" name="Frown"/>
+ <combo_box.item label="Accigliato" name="Frown"/>
<combo_box.item label="Bacio" name="Kiss"/>
<combo_box.item label="Risata" name="Laugh"/>
<combo_box.item label="Plllppt" name="Plllppt"/>
@@ -165,13 +168,13 @@ La lunghezza massima è [MAX_LENGTH] secondi.
<combo_box left_delta="154" name="preview_base_anim" tool_tip="Da usarsi per controllare il comportamento dell&apos;animazione mentre l&apos;avatar svolge azioni abituali." width="130">
<combo_box.item label="In piedi" name="Standing"/>
<combo_box.item label="Camminando" name="Walking"/>
- <combo_box.item label="Sedendo" name="Sitting"/>
- <combo_box.item label="Volando" name="Flying"/>
+ <combo_box.item label="Seduto" name="Sitting"/>
+ <combo_box.item label="Volo" name="Flying"/>
</combo_box>
- <spinner label="Avvio lento (sec)" label_width="125" name="ease_in_time" tool_tip="Tempo (in seconds) oltre il quale le animazioni si miscelano" width="192"/>
- <spinner bottom_delta="-20" label="Arresto lento (sec)" label_width="125" left="10" name="ease_out_time" tool_tip="Tempo (in seconds) oltre il quale le animazioni terminano di miscelarsi" width="192"/>
+ <spinner label="Avvio lento (sec)" label_width="125" name="ease_in_time" tool_tip="Durata (in secondi) della fusione in entrata delle animazioni" width="192"/>
+ <spinner bottom_delta="-20" label="Arresto lento (sec)" label_width="125" left="10" name="ease_out_time" tool_tip="Durata (in secondi) della fusione in uscita delle animazioni" width="192"/>
<button bottom_delta="-32" name="play_btn" tool_tip="Riproduci la tua animazione"/>
- <button name="pause_btn" tool_tip="La tua animazione in Pause"/>
+ <button name="pause_btn" tool_tip="Metti in pausa la tua animazione"/>
<button label="" name="stop_btn" tool_tip="Ferma la riproduzione dell&apos;animazione"/>
<text name="bad_animation_text">
Impossibile leggere il file dell&apos;animazione.
diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml
index aa7b79fc50..4cad8b744d 100644
--- a/indra/newview/skins/default/xui/it/floater_auction.xml
+++ b/indra/newview/skins/default/xui/it/floater_auction.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="INIZIA LA VENDITA DI TERRA LINDEN">
+<floater name="floater_auction" title="INIZIA LA VENDITA DI TERRENO LINDEN">
<floater.string name="already for sale">
Non puoi mettere in asta terreni che sono già in vendita.
</floater.string>
<check_box initial_value="true" label="Includi barriere di selezione gialle" name="fence_check"/>
<button label="Fotografia" label_selected="Fotografia" name="snapshot_btn"/>
<button label="Vendi a chiunque" label_selected="Vendi a chiunque" name="sell_to_anyone_btn"/>
- <button label="Annulla le Impostazioni" label_selected="Annulla le Impostazioni" name="reset_parcel_btn"/>
- <button label="Inizia l&apos;Asta" label_selected="Inizia l&apos;Asta" name="start_auction_btn"/>
+ <button label="Cancella impostazioni" label_selected="Cancella impostazioni" name="reset_parcel_btn"/>
+ <button label="Inizia l&apos;asta" label_selected="Inizia l&apos;asta" name="start_auction_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
index e583d0b8b5..7c037801e9 100644
--- a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
@@ -21,18 +21,18 @@
<tab_container name="ResidentChooserTabs">
<panel label="Cerca" name="SearchPanel">
<text name="InstructSearchResidentName">
- Scrivi parte del nome di una persona:
+ Comincia a digitare il nome della persona:
</text>
<button label="Vai" label_selected="Vai" name="Find"/>
</panel>
<panel label="Amici" name="FriendsPanel">
<text name="InstructSelectFriend">
- Seleziona una persona:
+ Scegli una persona:
</text>
</panel>
<panel label="Vicino a me" name="NearMePanel">
<text name="InstructSelectResident">
- Seleziona una persona nei dintorni:
+ Scegli una persona nei dintorni
</text>
<slider bottom_delta="-36" label="Range" name="near_me_range"/>
<text name="meters">
@@ -43,5 +43,5 @@
</panel>
</tab_container>
<button label="OK" label_selected="OK" name="ok_btn"/>
- <button label="Cancella" label_selected="Cancella" name="cancel_btn"/>
+ <button label="Annulla" label_selected="Annulla" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
index e5ce07f300..2935f0fdb6 100644
--- a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="AVATAR TEXTURES">
+<floater name="avatar_texture_debug" title="TEXTURE DI AVATAR">
<floater.string name="InvalidAvatar">
AVATAR NON VALIDO
</floater.string>
@@ -7,26 +7,37 @@
Texture Composite
</text>
<button label="Deposito" label_selected="Deposito" name="Dump"/>
- <texture_picker label="Capelli" name="hair_grain"/>
- <texture_picker label="Capelli Alpha" name="hair_alpha"/>
- <texture_picker label="Trucco" name="head_bodypaint"/>
- <texture_picker label="Testa Alpha" name="head_alpha"/>
- <texture_picker label="Tatuaggio Testa" name="head_tattoo"/>
- <texture_picker label="Occhio" name="eyes_iris"/>
- <texture_picker label="Occhi Alpha" name="eyes_alpha"/>
- <texture_picker label="Bodypaint Corpo Superiore" name="upper_bodypaint"/>
- <texture_picker label="Maglietta intima" name="upper_undershirt"/>
- <texture_picker label="Guanti" name="upper_gloves"/>
- <texture_picker label="Camicia" name="upper_shirt"/>
- <texture_picker label="Giacca superiore" name="upper_jacket"/>
- <texture_picker label="Alpha Superiore" name="upper_alpha"/>
- <texture_picker label="Tatuaggio superiore" name="upper_tattoo"/>
- <texture_picker label="Bodypaint Corpo Inferiore" name="lower_bodypaint"/>
- <texture_picker label="Slip" name="lower_underpants"/>
- <texture_picker label="Calze" name="lower_socks"/>
- <texture_picker label="Scarpe" name="lower_shoes"/>
- <texture_picker label="Pantaloni" name="lower_pants"/>
- <texture_picker label="Giacca" name="lower_jacket"/>
- <texture_picker label="Alpha Inferiore" name="lower_alpha"/>
- <texture_picker label="Tatuaggio basso" name="lower_tattoo"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <texture_picker label="Capigliature" name="hair-baked"/>
+ <texture_picker label="Capigliature" name="hair_grain"/>
+ <texture_picker label="Alpha dei capelli" name="hair_alpha"/>
+ <texture_picker label="Testa" name="head-baked"/>
+ <texture_picker label="Makeup" name="head_bodypaint"/>
+ <texture_picker label="Alpha della testa" name="head_alpha"/>
+ <texture_picker label="Tatuaggio della testa" name="head_tattoo"/>
+ <texture_picker label="Occhi" name="eyes-baked"/>
+ <texture_picker label="Occhio" name="eyes_iris"/>
+ <texture_picker label="Alpha degli occhi" name="eyes_alpha"/>
+ <texture_picker label="Parte superiore del corpo" name="upper-baked"/>
+ <texture_picker label="Bodypaint parte superiore del corpo" name="upper_bodypaint"/>
+ <texture_picker label="Maglietta intima" name="upper_undershirt"/>
+ <texture_picker label="Guanti" name="upper_gloves"/>
+ <texture_picker label="Camicia" name="upper_shirt"/>
+ <texture_picker label="Parte superiore della giacca" name="upper_jacket"/>
+ <texture_picker label="Alpha superiore" name="upper_alpha"/>
+ <texture_picker label="Tatuaggio superiore" name="upper_tattoo"/>
+ <texture_picker label="Parte inferiore del corpo" name="lower-baked"/>
+ <texture_picker label="Bodypaint parte inferiore del corpo" name="lower_bodypaint"/>
+ <texture_picker label="Slip" name="lower_underpants"/>
+ <texture_picker label="Calzini" name="lower_socks"/>
+ <texture_picker label="Scarpe" name="lower_shoes"/>
+ <texture_picker label="Pantaloni" name="lower_pants"/>
+ <texture_picker label="Giacca" name="lower_jacket"/>
+ <texture_picker label="Alpha inferiore" name="lower_alpha"/>
+ <texture_picker label="Tattuaggio inferiore" name="lower_tattoo"/>
+ <texture_picker label="Gonna" name="skirt-baked"/>
+ <texture_picker label="Gonna" name="skirt"/>
+ </panel>
+ </scroll_container>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_beacons.xml b/indra/newview/skins/default/xui/it/floater_beacons.xml
index 8fd69d811d..ca6711468d 100644
--- a/indra/newview/skins/default/xui/it/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/it/floater_beacons.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="BEACONS">
+<floater name="beacons" title="MARCATORI">
<panel name="beacons_panel">
<text name="label_show">
Mostra:
</text>
- <check_box label="Beacons" name="beacons"/>
- <check_box label="Highlights" name="highlights"/>
- <text name="beacon_width_label" tool_tip="Beacon width">
+ <check_box label="Marcatori" name="beacons"/>
+ <check_box label="In evidenza" name="highlights"/>
+ <text name="beacon_width_label" tool_tip="Larghezza marcatore">
Larghezza:
</text>
<text name="label_objects">
@@ -15,7 +15,7 @@
<check_box label="Fisico" name="physical"/>
<check_box label="Scripted" name="scripted"/>
<check_box label="Tocca solo" name="touch_only"/>
- <check_box label="Fonte del Suono" name="sounds"/>
- <check_box label="Fonte delle Particle" name="particles"/>
+ <check_box label="Fonti sonore" name="sounds"/>
+ <check_box label="Fonti delle particelle" name="particles"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml
index 233efef19b..326aab1a31 100644
--- a/indra/newview/skins/default/xui/it/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_build_options.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="build options floater" title="GRID OPTIONS">
- <spinner label="Grid Units (meters)" label_width="192" name="GridResolution" width="250"/>
+<floater name="build options floater" title="OPZIONI DELLA GRIGLIA">
+ <spinner label="Unità griglia (metri)" label_width="192" name="GridResolution" width="250"/>
<spinner label="Estensione della griglia (metri)" label_width="192" name="GridDrawSize" width="250"/>
- <check_box label="Usa allineamento sub-unitario" name="GridSubUnit"/>
- <check_box label="Guarda le cross-sections" name="GridCrossSection"/>
- <text name="grid_opacity_label" tool_tip="Opacità della Grid">
+ <check_box label="Usa sottounità" name="GridSubUnit"/>
+ <check_box label="Guarda le sezioni trasversali" name="GridCrossSection"/>
+ <text name="grid_opacity_label" tool_tip="Opacità della griglia">
Opacità:
</text>
<slider label="Trasparenza della griglia" name="GridOpacity" width="250"/>
diff --git a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
index 26890dc209..89f4a0cb71 100644
--- a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
@@ -13,27 +13,27 @@
Conclusa richiesta di modifica dei permessi.
</floater.string>
<check_box label="Animazioni" name="check_animation"/>
- <icon name="icon_animation" tool_tip="Animazioni"/>
+ <icon name="icon_animation" tool_tip="Animazione"/>
<check_box label="Parti del corpo" name="check_bodypart"/>
- <icon name="icon_bodypart" tool_tip="Parti del Corpo"/>
+ <icon name="icon_bodypart" tool_tip="Parti del corpo"/>
<check_box label="Abiti" name="check_clothing"/>
<icon name="icon_clothing" tool_tip="Vestiario"/>
<check_box label="Gesture" name="check_gesture"/>
- <icon name="icon_gesture" tool_tip="Gestures"/>
+ <icon name="icon_gesture" tool_tip="Gesture"/>
<check_box label="Notecard" name="check_notecard"/>
- <icon name="icon_notecard" tool_tip="Notecards"/>
+ <icon name="icon_notecard" tool_tip="Biglietti"/>
<check_box label="Oggetti" name="check_object"/>
<icon name="icon_object" tool_tip="Oggetti"/>
<check_box label="Script" name="check_script"/>
- <icon name="icon_script" tool_tip="Scripts"/>
+ <icon name="icon_script" tool_tip="Script"/>
<check_box label="Suoni" name="check_sound"/>
<icon name="icon_sound" tool_tip="Suoni"/>
<check_box label="Texture" name="check_texture"/>
- <icon name="icon_texture" tool_tip="Textures"/>
- <button label="√ Tutto" label_selected="Tutti" name="check_all"/>
- <button label="Pulisci" label_selected="Nessuno" name="check_none"/>
+ <icon name="icon_texture" tool_tip="Texture"/>
+ <button label="√ Tutti" label_selected="Tutti" name="check_all"/>
+ <button label="Cancella" label_selected="Nessuno" name="check_none"/>
<text name="newperms">
- Nuovo Permessi del Contenuto
+ Nuovi permessi del contenuto
</text>
<text name="GroupLabel">
Gruppo:
@@ -44,11 +44,11 @@
</text>
<check_box label="Copia" name="everyone_copy"/>
<text name="NextOwnerLabel">
- Prossimo proprietario:
+ Proprietario successivo:
</text>
<check_box label="Modificare" name="next_owner_modify"/>
<check_box label="Copiare" name="next_owner_copy"/>
- <check_box initial_value="true" label="Transfer" name="next_owner_transfer" tool_tip="Prossimo proprietario può donare o rivendere questo oggetto"/>
- <button label="Ok" name="apply"/>
- <button label="Cancella" name="close"/>
+ <check_box initial_value="true" label="Trasferisci" name="next_owner_transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
+ <button label="OK" name="apply"/>
+ <button label="Annulla" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_contents.xml b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
index e84d396138..a54751e629 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
@@ -8,8 +8,7 @@
</text>
<button label="Annulla" label_selected="Annulla" name="cancel_btn" width="73"/>
<button label="Compra" label_selected="Compra" left_delta="-77" name="buy_btn" width="73"/>
- <check_box bottom="-234" label="Indossa adesso
-l&apos;indumento" left_delta="-125" name="wear_check"/>
+ <check_box bottom="-234" label="Indossa adesso l&apos;indumento" left_delta="-125" name="wear_check"/>
<string name="no_copy_text">
(non copiabile)
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
index 9d97f7d72d..1327e8b172 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="COMPRA L$">
+<floater name="buy currency" title="ACQUISTA L$">
<floater.string name="buy_currency">
- Compra L$ [LINDENS] per approx. [LOCALAMOUNT]
+ Acquista [LINDENS] L$ per circa [LOCALAMOUNT]
</floater.string>
<text font="SansSerifLarge" left="5" name="info_need_more" right="-5">
- Necessiti di più L$
+ Ti servono più L$
</text>
<text name="contacting">
Sto contattando il LindeX...
</text>
<text name="info_buying">
- COMPRA L$
+ Acquista L$
</text>
<text name="balance_label">
Io ho
@@ -19,7 +19,7 @@
[AMT]L$
</text>
<text name="currency_action" width="45">
- Io voglio comprare
+ Voglio acquistare
</text>
<text name="currency_label">
L$
@@ -31,13 +31,13 @@
Al prezzo
</text>
<text name="currency_est">
- approx. [LOCALAMOUNT]
+ circa [LOCALAMOUNT]
</text>
<text name="getting_data">
- Calcolando...
+ Stima in corso...
</text>
<text name="buy_action">
- [NAME] [PRICE]L$
+ [ACTION]
</text>
<text name="total_label">
Il mio saldo sarà
@@ -46,18 +46,18 @@
[AMT]L$
</text>
<text name="currency_links">
- [http://www.secondlife.com/ payment method] | [http://www.secondlife.com/ currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate]
+ [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate]
</text>
<text name="exchange_rate_note">
- Ri-scrivi un importo per vedere l&apos;ultimo rapporto di cambio.
+ Riscrivi l&apos;importo per vedere l&apos;ultimo tasso al cambio.
</text>
<text name="purchase_warning_repurchase">
- Confermando questo acquisto di soli L$, non l&apos;oggetto.
+ La conferma di questo acquisto compra solo L$, non l&apos;oggetto.
</text>
<text bottom_delta="16" name="purchase_warning_notenough">
- Non stai acquistando abbastanza L$. Per favore aumenta l&apos;importo.
+ Non stai acquistando abbastanza L$. Aumenta l&apos;importo.
</text>
- <button label="Compra ora" name="buy_btn"/>
+ <button label="Acquista adesso" name="buy_btn"/>
<button label="Cancella" name="cancel_btn"/>
<text left="5" name="info_cannot_buy" right="-5">
Non in grado di acquistare
diff --git a/indra/newview/skins/default/xui/it/floater_buy_land.xml b/indra/newview/skins/default/xui/it/floater_buy_land.xml
index 9fa5bd5570..2e78168209 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_land.xml
@@ -1,5 +1,132 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="COMPRA LA TERRA">
+<floater name="buy land" title="ACQUISTA TERRENO">
+ <floater.string name="can_resell">
+ Può essere rivenduto.
+ </floater.string>
+ <floater.string name="can_not_resell">
+ Può non essere rivenduto.
+ </floater.string>
+ <floater.string name="can_change">
+ Può essere unito o suddiviso.
+ </floater.string>
+ <floater.string name="can_not_change">
+ Non può essere unito o suddiviso.
+ </floater.string>
+ <floater.string name="cant_buy_for_group">
+ Non sei autorizzato ad acquistare terreno per il tuo gruppo attivo.
+ </floater.string>
+ <floater.string name="no_land_selected">
+ Nessun terreno selezionato.
+ </floater.string>
+ <floater.string name="multiple_parcels_selected">
+ Hai selezionato lotti diversi.
+Prova a selezionare un&apos;area più piccola.
+ </floater.string>
+ <floater.string name="no_permission">
+ Non sei autorizzato ad acquistare terreno per il tuo gruppo attivo.
+ </floater.string>
+ <floater.string name="parcel_not_for_sale">
+ Il terreno selezionato non è in vendita.
+ </floater.string>
+ <floater.string name="group_already_owns">
+ Il gruppo possiede già il terreno.
+ </floater.string>
+ <floater.string name="you_already_own">
+ Sei già proprietario del terreno.
+ </floater.string>
+ <floater.string name="set_to_sell_to_other">
+ Il terreno selezionato è già impostato per la vendita ad un altro gruppo.
+ </floater.string>
+ <floater.string name="no_public_land">
+ L&apos;area selezionata non è pubblica.
+ </floater.string>
+ <floater.string name="not_owned_by_you">
+ Hai selezionato terreno di proprietà di un altro residente.
+Prova a scegliere una superficie più piccola.
+ </floater.string>
+ <floater.string name="processing">
+ Stiamo elaborando il tuo acquisto...
+
+(Potrebbe volerci un minuto o due.)
+ </floater.string>
+ <floater.string name="fetching_error">
+ Si &apos;e verificato un errore mentre si stavano ottenendo le informazioni sull&apos;acquisto del terreno.
+ </floater.string>
+ <floater.string name="buying_will">
+ Acuistando il terreno:
+ </floater.string>
+ <floater.string name="buying_for_group">
+ Acuistando il terreno per il gruppo:
+ </floater.string>
+ <floater.string name="cannot_buy_now">
+ Non puoi comprare ora:
+ </floater.string>
+ <floater.string name="not_for_sale">
+ Non in vendita:
+ </floater.string>
+ <floater.string name="none_needed">
+ nessuno necessario
+ </floater.string>
+ <floater.string name="must_upgrade">
+ Per acquistare terreno devi passare a un livello di abbonamento superiore.
+ </floater.string>
+ <floater.string name="cant_own_land">
+ Con questo account puoi essere proprietario di terreno.
+ </floater.string>
+ <floater.string name="land_holdings">
+ Sei proprietario di [BUYER] m² di terreno.
+ </floater.string>
+ <floater.string name="pay_to_for_land">
+ Paga [AMOUNT] L$ a [SELLER] per questa terra
+ </floater.string>
+ <floater.string name="buy_for_US">
+ Acquista L$ [AMOUNT] per circa [LOCAL_AMOUNT],
+ </floater.string>
+ <floater.string name="parcel_meters">
+ Questo lotto è di [AMOUNT] m²
+ </floater.string>
+ <floater.string name="premium_land">
+ Questo terreno è premium, e costerà come [AMOUNT] m².
+ </floater.string>
+ <floater.string name="discounted_land">
+ Questo terreno è scontato, e costerà come [AMOUNT] m².
+ </floater.string>
+ <floater.string name="meters_supports_object">
+ [AMOUNT] m²
+consente [AMOUNT2] oggetti
+ </floater.string>
+ <floater.string name="sold_with_objects">
+ venduta con oggetti
+ </floater.string>
+ <floater.string name="sold_without_objects">
+ Oggetti non inclusi
+ </floater.string>
+ <floater.string name="info_price_string">
+ L$ [PRICE]
+([PREZZO_PER_MQ] L$/m²)
+[VENDUTO_CON_OGGETTI]
+ </floater.string>
+ <floater.string name="insufficient_land_credits">
+ Il gruppo [GROUP] avrà bisogno di contributi di crediti di utilizzo terreno sufficienti a coprire il terreno prima che l&apos;acquisto sia completato.
+ </floater.string>
+ <floater.string name="have_enough_lindens">
+ Hai [AMOUNT] L$, che sono sufficienti per comprare questo terreno.
+ </floater.string>
+ <floater.string name="not_enough_lindens">
+ Hai solo [AMOUNT] L$, ed hai bisogno di altri [AMOUNT2] L$.
+ </floater.string>
+ <floater.string name="balance_left">
+ Dopo l&apos;acquisto, ti rimarranno [AMOUNT] L$.
+ </floater.string>
+ <floater.string name="balance_needed">
+ Hai bisogno di acquistare almeno [AMOUNT] L$ per comprare questo terreno.
+ </floater.string>
+ <floater.string name="no_parcel_selected">
+ (nessun terreno selezionato)
+ </floater.string>
+ <floater.string name="icon_PG" value="Parcel_PG_Dark"/>
+ <floater.string name="icon_M" value="Parcel_M_Dark"/>
+ <floater.string name="icon_R" value="Parcel_R_Dark"/>
<text name="region_name_label">
Regione:
</text>
@@ -58,8 +185,8 @@
</text>
<text name="info_price">
L$ 1500
-(L$ 1.1/m²)
-sold with objects
+( 1.1 L$/m²)
+venduto con oggetti
</text>
<text name="info_action">
Comprando questa terra:
@@ -75,16 +202,16 @@ sold with objects
Solo i membri premium possono possedere terra.
</text>
<combo_box name="account_level">
- <combo_box.item label="US$9.95/mese, addebitato mensilmente" name="US$9.95/month,billedmonthly"/>
- <combo_box.item label="US$7.50/mese, addebitato trimestralmente" name="US$7.50/month,billedquarterly"/>
- <combo_box.item label="US$6.00/mese, addebitato annualmente" name="US$6.00/month,billedannually"/>
+ <combo_box.item label="US$ 9.95 al mese, addebitato mensilmente" name="US$9.95/month,billedmonthly"/>
+ <combo_box.item label="US$ 7.50 al mese, addebitato trimestralmente" name="US$7.50/month,billedquarterly"/>
+ <combo_box.item label="US$ 6.00 al mese, addebitato annualmente" name="US$6.00/month,billedannually"/>
</combo_box>
<text name="land_use_action">
- Aumenta il tasso di pagamento mensile delle tasse d&apos;uso della terra a 40 US$/mese.
+ Aumenta le tariffe mensili di utilizzo del terreno a 40 US$/mese.
</text>
<text name="land_use_reason">
Tu occupi 1309 m² di terreno.
-This parcel is 512 m² di terreno.
+Questo lotto consiste in 512 m² di terreno.
</text>
<text name="purchase_action">
Paga il residente Joe 4000 L$ per la terra
@@ -99,7 +226,7 @@ This parcel is 512 m² di terreno.
1000
</line_editor>
<text name="currency_est">
- per circa. [LOCAL_AMOUNT]
+ per circa [LOCAL_AMOUNT]
</text>
<text name="currency_balance">
Possiedi 2.100 L$.
@@ -107,133 +234,4 @@ This parcel is 512 m² di terreno.
<check_box label="Rimuovi [AMOUNT] m² di contribuzione dal gruppo." name="remove_contribution"/>
<button label="Compra" name="buy_btn"/>
<button label="Annulla" name="cancel_btn"/>
- <string name="can_resell">
- Può essere rivenduta.
- </string>
- <string name="can_not_resell">
- Può non essere rivenduta.
- </string>
- <string name="can_change">
- Può essere unita o suddivisa.
- </string>
- <string name="can_not_change">
- Non può essere unita o suddivisa.
- </string>
- <string name="cant_buy_for_group">
- Non hai il permesso di comprare terra per il tuo gruppo attivo.
- </string>
- <string name="no_land_selected">
- Nessuna terra selezionata.
- </string>
- <string name="multiple_parcels_selected">
- Hai selezionato appezzamenti diversi.
-Prova a selezionare un&apos;area più piccola.
- </string>
- <string name="no_permission">
- Non hai il permesso di comprare terra per il tuo gruppo attivo.
- </string>
- <string name="parcel_not_for_sale">
- Il terreno selezionato non è in vendita.
- </string>
- <string name="group_already_owns">
- Il gruppo possiede già il terreno.
- </string>
- <string name="you_already_own">
- Possiedi già il terreno.
- </string>
- <string name="set_to_sell_to_other">
- Il terreno selezionato è già impostato per la vendita ad un altro gruppo.
- </string>
- <string name="no_public_land">
- L&apos;area selezionata non è pubblica.
- </string>
- <string name="not_owned_by_you">
- Hai selezionato una terra posseduta da un altro utente.
-Prova a selezionare un&apos;area più piccola.
- </string>
- <string name="processing">
- Stiamo elaborando il tuo acquisto...
-
-(Potrebbe volerci un minuto o due.)
- </string>
- <string name="fetching_error">
- C&apos;e stato un errore mentre si stavano ottenendo le informazioni sull&apos;acquisto della terra.
- </string>
- <string name="buying_will">
- Comprando questa terra:
- </string>
- <string name="buying_for_group">
- Comprare la terra per il gruppo farà:
- </string>
- <string name="cannot_buy_now">
- Non puoi comprare ora:
- </string>
- <string name="not_for_sale">
- Non in vendita:
- </string>
- <string name="none_needed">
- nessuno necessario
- </string>
- <string name="must_upgrade">
- Il tuo tipo di account ha bisogno di un upgrade per possedere terra.
- </string>
- <string name="cant_own_land">
- Il tuo account può possedere terra.
- </string>
- <string name="land_holdings">
- Tu occupi [BUYER] m² di terreno.
- </string>
- <string name="pay_to_for_land">
- Paga [AMOUNT] L$ a [SELLER] per questa terra
- </string>
- <string name="buy_for_US">
- Compra L$ [AMOUNT] per circa. [LOCAL_AMOUNT],
- </string>
- <string name="parcel_meters">
- Questo parcel è [AMOUNT] m²
- </string>
- <string name="premium_land">
- Questo terreno è premium, e costerà [AMOUNT] m².
- </string>
- <string name="discounted_land">
- Questo terreno è scontato, e costerà [AMOUNT] m².
- </string>
- <string name="meters_supports_object">
- [AMOUNT] m²
-mantiene [AMOUNT2] oggetti
- </string>
- <string name="sold_with_objects">
- venduta con oggetti
- </string>
- <string name="sold_without_objects">
- Oggetti non inclusi
- </string>
- <string name="info_price_string">
- L$ [PRICE]
-(L$ [PREZZO_PER_QM]/m²)
-[VENDUTO_CON_OGGETTI]
- </string>
- <string name="insufficient_land_credits">
- Il gruppo [GROUP] avrà bisogno di contribuzioni anticipate, mediante crediti d&apos;uso terriero,
-sufficienti a coprire l&apos;area del terreno prima che l&apos;acquisto
-sia completato.
- </string>
- <string name="have_enough_lindens">
- Hai [AMOUNT] L$, che sono sufficienti per comprare questa terra.
- </string>
- <string name="not_enough_lindens">
- Hai solo [AMOUNT] L$, ed hai bisogno di altri [AMOUNT2] L$.
- </string>
- <string name="balance_left">
- Dopo l&apos;acquisto, ti rimarranno [AMOUNT] L$.
- </string>
- <string name="balance_needed">
- Hai bisogno di acquistare almeno [AMOUNT] L$ per comprare questo terreno.
- </string>
- <string name="no_parcel_selected">
- (nessun terreno selezionato)
- </string>
- <string name="buy_currency">
- Compra [LINDENS] L$ per appross. [USD] US$
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_object.xml b/indra/newview/skins/default/xui/it/floater_buy_object.xml
index 5f3413931b..895d8aa746 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_object.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="COMPRA COPIA DELL&apos;OGGETTO">
+<floater name="contents" title="ACQUISTA COPIA DELL&apos;OGGETTO">
<text name="contents_text">
Contiene:
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_camera.xml b/indra/newview/skins/default/xui/it/floater_camera.xml
index 182f82f17f..febbfd2739 100644
--- a/indra/newview/skins/default/xui/it/floater_camera.xml
+++ b/indra/newview/skins/default/xui/it/floater_camera.xml
@@ -9,23 +9,35 @@
<floater.string name="move_tooltip">
Muovi la telecamera su e giù e a sinistra e destra
</floater.string>
+ <floater.string name="orbit_mode_title">
+ Ruota visuale
+ </floater.string>
+ <floater.string name="pan_mode_title">
+ Panoramica
+ </floater.string>
+ <floater.string name="avatar_view_mode_title">
+ Valori predefiniti
+ </floater.string>
+ <floater.string name="free_mode_title">
+ Vedi oggetto
+ </floater.string>
<panel name="controls">
- <joystick_track name="cam_track_stick" tool_tip="Sposta la visuale sù e giù, sinistra e destra"/>
+ <joystick_track name="cam_track_stick" tool_tip="Sposta la visuale in su e in giù, a sinistra e a destra"/>
<panel name="zoom" tool_tip="Avvicina la telecamera nell&apos;inquadratura">
- <slider_bar name="zoom_slider" tool_tip="Zoom verso il focus"/>
+ <slider_bar name="zoom_slider" tool_tip="Zoom verso il centro focale"/>
</panel>
- <joystick_rotate name="cam_rotate_stick" tool_tip="Ruota la visuale intorno al focus"/>
+ <joystick_rotate name="cam_rotate_stick" tool_tip="Ruota la visuale intorno al punto focale"/>
<panel name="camera_presets">
<button name="rear_view" tool_tip="Visuale posteriore"/>
- <button name="group_view" tool_tip="Visuale di Gruppo"/>
- <button name="front_view" tool_tip="Visuale Frontale"/>
- <button name="mouselook_view" tool_tip="Visuale Mouselook"/>
+ <button name="group_view" tool_tip="Visuale di gruppo"/>
+ <button name="front_view" tool_tip="Visuale frontale"/>
+ <button name="mouselook_view" tool_tip="Visuale soggettiva"/>
</panel>
</panel>
<panel name="buttons">
<button label="" name="orbit_btn" tool_tip="Ruota la visuale"/>
- <button label="" name="pan_btn" tool_tip="Visuale Panoramica"/>
- <button label="" name="avatarview_btn" tool_tip="Guardare un avatar"/>
+ <button label="" name="pan_btn" tool_tip="Visuale panoramica"/>
+ <button label="" name="avatarview_btn" tool_tip="Valori predefiniti"/>
<button label="" name="freecamera_btn" tool_tip="Vedi oggetto"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_color_picker.xml b/indra/newview/skins/default/xui/it/floater_color_picker.xml
index 8551d65da2..38d4a0a037 100644
--- a/indra/newview/skins/default/xui/it/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/it/floater_color_picker.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="SELETTORE di COLORE">
+<floater name="ColorPicker" title="SELETTORE DI COLORE">
<text name="r_val_text">
Rosso:
</text>
@@ -24,10 +24,10 @@
Luminosità:
</text>
<spinner left="84" name="lspin" width="47"/>
- <check_box label="Applica ora" name="apply_immediate"/>
+ <check_box label="Applica adesso" name="apply_immediate"/>
<button left_delta="150" name="color_pipette"/>
<button label="Annulla" label_selected="Annulla" left_delta="55" name="cancel_btn"/>
- <button label="Ok" label_selected="Ok" name="select_btn"/>
+ <button label="OK" label_selected="OK" name="select_btn"/>
<text name="Current color:">
Colore attuale:
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml
index 63e08444cd..75ddf43f65 100644
--- a/indra/newview/skins/default/xui/it/floater_customize.xml
+++ b/indra/newview/skins/default/xui/it/floater_customize.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater customize" title="ASPETTO" width="551">
<tab_container name="customize tab container" tab_min_width="120" width="549">
- <placeholder label="Parti del corpo" name="body_parts_placeholder"/>
+ <text label="Parti del corpo" name="body_parts_placeholder">
+ Parti del corpo
+ </text>
<panel label="Forma del corpo" left="124" name="Shape" width="389">
<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/>
<button label="Corpo" label_selected="Corpo" name="Body"/>
@@ -14,8 +16,8 @@
<button label="Torso" label_selected="Torso" name="Torso"/>
<button label="Gambe" label_selected="Gambe" name="Legs"/>
<radio_group name="sex radio">
- <radio_item label="Femmina" name="radio"/>
- <radio_item label="Maschio" name="radio2"/>
+ <radio_item label="Femmina" name="radio" value="0"/>
+ <radio_item label="Maschio" name="radio2" value="1"/>
</radio_group>
<text name="title">
[DESC]
@@ -33,8 +35,7 @@
Ubicato in [PATH]
</text>
<text name="not worn instructions">
- Indossa una nuova Forma del Corpo trascinandone una dall&apos;inventario
-sul tuo avatar. In alternativa, puoi crearne una nuova ed indossarla.
+ Metti una nuova figura corporea trascinandola dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
@@ -67,8 +68,7 @@ sul tuo avatar. In alternativa, puoi crearne una nuova ed indossarla.
Ubicata in [PATH]
</text>
<text name="not worn instructions">
- Indossa una nuova pelle trascinandola dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne una nuova da zero ed indossarla.
+ Per mettere una nuova pelle, trascinala dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
@@ -105,8 +105,7 @@ In alternativa, puoi crearne una nuova da zero ed indossarla.
Ubicati in [PATH]
</text>
<text name="not worn instructions">
- Indossa dei nuovi capelli trascinandoli dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne di nuovi da zero ed indossarli.
+ Per cambiare capelli, trascinali dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
<text name="no modify instructions">
Non hai il permesso per modificare questo indumento.
@@ -137,8 +136,7 @@ In alternativa, puoi crearne di nuovi da zero ed indossarli.
Ubicati in [PATH]
</text>
<text name="not worn instructions">
- Indossa dei nuovi occhi trascinandoli dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne di nuovi da zero ed indossarli.
+ Puoi cambiare gli occhi trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
@@ -152,12 +150,14 @@ In alternativa, puoi crearne di nuovi da zero ed indossarli.
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/>
</panel>
- <placeholder label="Vestiti" name="clothes_placeholder"/>
+ <text label="Vestiti" name="clothes_placeholder">
+ Abiti
+ </text>
<panel label="Camicia" name="Shirt">
<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea una nuova camicia" label_selected="Crea una nuova camicia" name="Create New"/>
<button label="Togli" label_selected="Togli" name="Take Off"/>
+ <button label="Crea una nuova camicia" label_selected="Crea una nuova camicia" name="Create New"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/>
@@ -177,8 +177,7 @@ In alternativa, puoi crearne di nuovi da zero ed indossarli.
Ubicata in [PATH]
</text>
<text name="not worn instructions">
- Indossa una nuova maglietta trascinandola dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne una nuova da zero ed indossarla.
+ Metti una nuova camicia trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
@@ -190,8 +189,8 @@ In alternativa, puoi crearne una nuova da zero ed indossarla.
<panel label="Pantaloni" name="Pants">
<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea nuovi pantaloni" label_selected="Crea nuovi pantaloni" name="Create New"/>
<button label="Togli" label_selected="Togli" name="Take Off"/>
+ <button label="Crea nuovi pantaloni" label_selected="Crea nuovi pantaloni" name="Create New"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/>
@@ -211,8 +210,7 @@ In alternativa, puoi crearne una nuova da zero ed indossarla.
Ubicati in [PATH]
</text>
<text name="not worn instructions">
- Indossa dei nuovi pantaloni trascinandoli dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo.
+ Metti dei nuovi pantaloni trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
@@ -238,9 +236,9 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo.
Ubicate in [PATH]
</text>
<text name="not worn instructions">
- Indossa delle nuove scarpe trascinandole dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo.
+ Metti delle nuove scarpe trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea nuove scarpe" label_selected="Crea nuove scarpe" name="Create New"/>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
</text>
@@ -249,7 +247,6 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo.
</text>
<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea nuove scarpe" label_selected="Crea nuove scarpe" name="Create New"/>
<button label="Togli" label_selected="Togli" name="Take Off"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
@@ -272,9 +269,9 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo.
Ubicato in [PATH]
</text>
<text name="not worn instructions">
- Indossa delle nuove calze trascinandole dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo.
+ Metti delle nuove calze trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea nuove calze" label_selected="Crea nuove calze" name="Create New"/>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
</text>
@@ -283,7 +280,6 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo.
</text>
<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea nuove calze" label_selected="Crea nuove calze" name="Create New"/>
<button label="Togli" label_selected="Togli" name="Take Off"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
@@ -306,9 +302,9 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo.
Ubicata in [PATH]
</text>
<text name="not worn instructions">
- Indossa una nuova giacca trascinandola dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne una nuova da zero ed indossarla.
+ Metti una nuova giacca trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea una nuova giacca" label_selected="Crea una nuova giacca" name="Create New"/>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
</text>
@@ -318,7 +314,6 @@ In alternativa, puoi crearne una nuova da zero ed indossarla.
<texture_picker label="Tessuto: superiore" name="Upper Fabric" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
<texture_picker label="Tessuto: inferiore" name="Lower Fabric" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea una nuova giacca" label_selected="Crea una nuova giacca" name="Create New"/>
<button label="Togli" label_selected="Togli" name="Take Off"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
@@ -341,9 +336,9 @@ In alternativa, puoi crearne una nuova da zero ed indossarla.
Ubicati in [PATH]
</text>
<text name="not worn instructions">
- Indossa dei nuovi guanti trascinandoli dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne un paio nuovo da zero ed indossarlo.
+ Metti dei nuovi guanti trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea nuovi guanti" label_selected="Crea nuovi guanti" name="Create New"/>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
</text>
@@ -352,7 +347,6 @@ In alternativa, puoi crearne un paio nuovo da zero ed indossarlo.
</text>
<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea nuovi guanti" label_selected="Crea nuovi guanti" name="Create New"/>
<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
@@ -375,9 +369,9 @@ In alternativa, puoi crearne un paio nuovo da zero ed indossarlo.
Ubicata in [PATH]
</text>
<text name="not worn instructions">
- Indossa una nuova canottiera trascinandola dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne una nuovo da zero ed indossarla.
+ Metti una nuova maglietta intima trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea una nuova canottiera" label_selected="Crea una nuova canottiera" name="Create New"/>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
</text>
@@ -386,7 +380,6 @@ In alternativa, puoi crearne una nuovo da zero ed indossarla.
</text>
<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea una nuova canottiera" label_selected="Crea una nuova canottiera" name="Create New"/>
<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
@@ -409,9 +402,9 @@ In alternativa, puoi crearne una nuovo da zero ed indossarla.
Ubicato in [PATH]
</text>
<text name="not worn instructions">
- Indossa delle nuove mutande trascinandole dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne una paio nuovo da zero ed indossarlo.
+ Metti dei nuovi slip trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea nuove mutande" label_selected="Crea nuove mutande" name="Create New"/>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
</text>
@@ -420,7 +413,6 @@ In alternativa, puoi crearne una paio nuovo da zero ed indossarlo.
</text>
<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea nuove mutande" label_selected="Crea nuove mutande" name="Create New"/>
<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
@@ -443,9 +435,9 @@ In alternativa, puoi crearne una paio nuovo da zero ed indossarlo.
Ubicata in [PATH]
</text>
<text name="not worn instructions">
- Indossa una nuova gonna trascinandola dall&apos;inventario al tuo avatar.
-In alternativa, puoi crearne una nuova da zero ed indossarla.
+ Metti una nuova gonna trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea una nuova gonna" label_selected="Crea una nuova gonna" name="Create New"/>
<text name="no modify instructions">
Non hai il permesso di modificare questo indumento.
</text>
@@ -454,13 +446,12 @@ In alternativa, puoi crearne una nuova da zero ed indossarla.
</text>
<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
- <button label="Crea una nuova gonna" label_selected="Crea una nuova gonna" name="Create New"/>
<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
<button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/>
<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/>
</panel>
- <panel label="Alpha" name="Alpha">
+ <panel label="Tatuaggio" name="Tattoo">
<text name="title">
[DESC]
</text>
@@ -468,7 +459,7 @@ In alternativa, puoi crearne una nuova da zero ed indossarla.
[DESC]: non può essere modificato
</text>
<text name="title_loading">
- [DESC]: caricando...
+ [DESC]: caricamento in corso...
</text>
<text name="title_not_worn">
[DESC]: non indossato
@@ -477,27 +468,24 @@ In alternativa, puoi crearne una nuova da zero ed indossarla.
Collocato in [PATH]
</text>
<text name="not worn instructions">
- Metti una nuova alpha mask trascinandone una dall&apos;inventario del tuo avatar.
-In alternativa, creane una nuova partendo da zero e indossala.
+ Metti un nuovo tatuaggio trascinandolo dal tuo inventario al avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea un nuovo tatuaggio" label_selected="Crea un nuovo tatuaggio" name="Create New"/>
<text name="no modify instructions">
- Non hai i permessi per modificare questa vestibilità.
+ Non hai i permessi per modificare questo capo.
</text>
<text name="Item Action Label">
- Alpha:
+ Tatuaggio:
</text>
- <texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/>
- <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una foto"/>
- <texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/>
- <texture_picker label="Alpha dell&apos;occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/>
- <texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegiere una fotografia"/>
- <button label="Crea nuova alpha" label_selected="Crea nuova alpha" name="Create New"/>
+ <texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Tattuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
<button label="Togli" label_selected="Togli" name="Take Off"/>
<button label="Salva" label_selected="Salva" name="Save"/>
<button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/>
<button label="Ripristina" label_selected="Ripristina" name="Revert"/>
</panel>
- <panel label="Tatuaggio" name="Tattoo">
+ <panel label="Alpha (Trasparenza)" name="Alpha">
<text name="title">
[DESC]
</text>
@@ -505,7 +493,7 @@ In alternativa, creane una nuova partendo da zero e indossala.
[DESC]: non può essere modificato
</text>
<text name="title_loading">
- [DESC]: caricando...
+ [DESC]: caricamento in corso...
</text>
<text name="title_not_worn">
[DESC]: non indossato
@@ -514,19 +502,20 @@ In alternativa, creane una nuova partendo da zero e indossala.
Collocato in [PATH]
</text>
<text name="not worn instructions">
- Metti un nuovo tatuaggio trascinandone uno dall&apos;inventario del tuo avatar.
-In alternativa, creane uno nuovo partendo da zero e indossalo.
+ Metti una nuova alpha mask trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
</text>
+ <button label="Crea nuovo Alpha" label_selected="Crea nuovo Alpha" name="Create New"/>
<text name="no modify instructions">
- Non hai i permessi per moficare questa vestibilità.
+ Non hai i permessi per modificare questo capo.
</text>
<text name="Item Action Label">
- Tatuaggio:
+ Alpha:
</text>
- <texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una foto"/>
- <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
- <texture_picker label="Tatuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
- <button label="Crea Nuovo tatuaggio" label_selected="Crea un nuovo tatuaggio" name="Create New"/>
+ <texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Alpha dell&apos;occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegliere una fotografia"/>
<button label="Togli" label_selected="Togli" name="Take Off"/>
<button label="Salva" label_selected="Salva" name="Save"/>
<button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/>
@@ -534,6 +523,7 @@ In alternativa, creane uno nuovo partendo da zero e indossalo.
</panel>
</tab_container>
<scroll_container left="254" name="panel_container"/>
+ <button label="Informazioni script" label_selected="Informazioni script" name="script_info" tool_tip="Mostra gli script collegati al tuo avatar"/>
<button label="Crea vestiario" label_selected="Crea vestiario" name="make_outfit_btn"/>
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
<button label="OK" label_selected="OK" name="Ok"/>
diff --git a/indra/newview/skins/default/xui/it/floater_device_settings.xml b/indra/newview/skins/default/xui/it/floater_device_settings.xml
index 2410a16882..97aa64086d 100644
--- a/indra/newview/skins/default/xui/it/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_device_settings.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="OPZIONI PER IL DISPOSITIVO VOICE CHAT"/>
+<floater name="floater_device_settings" title="OPZIONI CHAT VOCALE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_event.xml b/indra/newview/skins/default/xui/it/floater_event.xml
new file mode 100644
index 0000000000..a0807e04c9
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_event.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Evento" name="Event" title="DETTAGLI DELL&apos;EVENTO">
+ <floater.string name="none">
+ nessuno
+ </floater.string>
+ <floater.string name="notify">
+ Avvisare
+ </floater.string>
+ <floater.string name="dont_notify">
+ Non avvisare
+ </floater.string>
+ <floater.string name="moderate">
+ Moderato
+ </floater.string>
+ <floater.string name="adult">
+ Adulto
+ </floater.string>
+ <floater.string name="general">
+ Generale
+ </floater.string>
+ <floater.string name="unknown">
+ Sconosciuto
+ </floater.string>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <text name="event_name">
+ Evento senza nome...di Doom De doom! Doom doom.
+ </text>
+ <text name="event_category">
+ (nessuna categoria)
+ </text>
+ <text name="event_runby_label">
+ Organizzato da:
+ </text>
+ <text initial_value="(recupero)" name="event_runby"/>
+ <text name="event_date_label">
+ Data:
+ </text>
+ <text name="event_date">
+ 10/10/2010
+ </text>
+ <text name="event_duration_label">
+ Durata:
+ </text>
+ <text name="event_duration">
+ 1 ora
+ </text>
+ <text name="event_covercharge_label">
+ Costo:
+ </text>
+ <text name="event_cover">
+ Gratis
+ </text>
+ <text name="event_location_label">
+ Luogo:
+ </text>
+ <text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
+ <text name="rating_label" value="Categoria:"/>
+ <text name="rating_value" value="sconosciuto"/>
+ <expandable_text name="event_desc">
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </expandable_text>
+ </layout_panel>
+ <layout_panel name="button_panel">
+ <button name="create_event_btn" tool_tip="Crea evento"/>
+ <button name="god_delete_event_btn" tool_tip="Elimina evento"/>
+ <button label="Avvisami" name="notify_btn"/>
+ <button label="Teleport" name="teleport_btn"/>
+ <button label="Mappa" name="map_btn"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml
index eefa3bb392..b9419ebc22 100644
--- a/indra/newview/skins/default/xui/it/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/it/floater_gesture.xml
@@ -1,24 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Posti" name="gestures" title="GESTURES">
+<floater label="Luoghi" name="gestures" title="GESTURE">
<floater.string name="loading">
- Caricando...
+ Caricamento in corso...
</floater.string>
<floater.string name="playing">
- (Riproducendo)
+ (Riproduzione in corso)
</floater.string>
<floater.string name="copy_name">
Copia di [COPY_NAME]
</floater.string>
- <scroll_list bottom_delta="-385" height="360" name="gesture_list">
- <scroll_list.columns label="Nome" name="name" width="129"/>
- <scroll_list.columns label="Chat" name="trigger" width="106"/>
- <scroll_list.columns label="Pulsante" name="shortcut" width="65"/>
+ <scroll_list name="gesture_list">
+ <scroll_list.columns label="Nome" name="name"/>
+ <scroll_list.columns label="Chat" name="trigger"/>
+ <scroll_list.columns label="Pulsante" name="shortcut"/>
</scroll_list>
<panel label="bottom_panel" name="bottom_panel">
- <menu_button name="gear_btn" tool_tip="Più opzioni"/>
+ <menu_button name="gear_btn" tool_tip="Altre opzioni"/>
<button name="new_gesture_btn" tool_tip="Crea nuova gesture"/>
- <button name="activate_btn" tool_tip="Attiva/Disattiva la gesture selezionata"/>
- <button name="del_btn" tool_tip="Cancella questa gesture"/>
+ <button name="activate_btn" tool_tip="Attiva/Disattiva gesture selezionata"/>
+ <button name="del_btn" tool_tip="Elimina questa gesture"/>
</panel>
<button label="Modifica" name="edit_btn"/>
<button label="Play" name="play_btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_god_tools.xml b/indra/newview/skins/default/xui/it/floater_god_tools.xml
new file mode 100644
index 0000000000..23d44780ac
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_god_tools.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="GOD TOOLS">
+ <tab_container name="GodTools Tabs">
+ <panel label="Grid" name="grid">
+ <button label="Espelli tutti i residenti" label_selected="Espelli tutti i residenti" name="Kick all users"/>
+ </panel>
+ <panel label="Region" name="region">
+ <check_box label="Reset Home On Teleport" name="check reset home" tool_tip="Quando un residente esce con un teleport, reimposta la sua posizione di base sul luogo di destinazione."/>
+ </panel>
+ </tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
index 08326b1da3..384e7c1272 100644
--- a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
@@ -22,8 +22,7 @@
Attiva VBO:
</text>
<check_box initial_value="true" label="Attiva oggetti OpenGL Vertex Buffer" name="vbo" tool_tip="Attivandolo su un hardware moderno aumenta la performance. Ma, su un vecchio hardware, spesso l&apos;implementazione dei VBO è scarsa e potresti avere dei crash quando è attivato."/>
- <slider label="Texture Memory (MB):" name="GraphicsCardTextureMemory" tool_tip="Spazio di memoria da ssegnare alle textures. Memoria della scheda video in Defaults. Ridurre questa impostazione potrebbe migliorare il rendimento ma potrebbe anche rendere le textures poco definite."/>
- <spinner label="Indice della distanza
-della nebbia:" name="fog"/>
+ <slider label="Memoria texture (MB):" name="GraphicsCardTextureMemory" tool_tip="Spazio di memoria da ssegnare alle textures. Utilizza la memoria della scheda video come impostazione predefinita. La riduzione di questa impostazione potrebbe migliorare il rendimento ma potrebbe anche rendere le texture poco definite."/>
+ <spinner label="Indice della distanza della nebbia:" name="fog"/>
<button label="OK" label_selected="OK" name="OK"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_help_browser.xml b/indra/newview/skins/default/xui/it/floater_help_browser.xml
index 9a158c5216..008643afac 100644
--- a/indra/newview/skins/default/xui/it/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/it/floater_help_browser.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_help_browser" title="HELP BROWSER">
+<floater name="floater_help_browser" title="BROWSER DELL&apos;AIUTO">
+ <floater.string name="loading_text">
+ Caricamento in corso...
+ </floater.string>
<layout_stack name="stack1">
- <layout_panel name="external_controls">
- <button label="Apri nel mio Web Browser" name="open_browser"/>
- </layout_panel>
+ <layout_panel name="external_controls"/>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_hud.xml b/indra/newview/skins/default/xui/it/floater_hud.xml
index e458913452..437d2d6496 100644
--- a/indra/newview/skins/default/xui/it/floater_hud.xml
+++ b/indra/newview/skins/default/xui/it/floater_hud.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="TUTORIAL"/>
+<floater name="floater_hud" title="ESERCITAZIONE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_im.xml b/indra/newview/skins/default/xui/it/floater_im.xml
index 6303615e60..aa916adf2c 100644
--- a/indra/newview/skins/default/xui/it/floater_im.xml
+++ b/indra/newview/skins/default/xui/it/floater_im.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="">
<string name="only_user_message">
- Sei l&apos;unico utente di questa sessione.
+ Sei il solo residente presente nella sessione.
</string>
<string name="offline_message">
[FIRST] [LAST] è offline.
@@ -10,7 +10,7 @@
Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat.
</string>
<string name="muted_message">
- Hai bloccato questo residente. Spedendo un messaggio sarà automaticamente sbloccati.
+ Hai bloccato questo residente. Quando gli invii un messaggio, verrà automaticamente sbloccato.
</string>
<string name="generic_request_error">
Errore durante la richiesta, riprova più tardi.
@@ -31,7 +31,7 @@
Un moderatore di gruppo ti ha disabilitato dalla chat di testo.
</string>
<string name="add_session_event">
- Impossibile aggiungere utenti alla chat con [RECIPIENT].
+ Impossibile aggiungere residenti alla sessione chat con [RECIPIENT].
</string>
<string name="message_session_event">
Impossibile inviare il messaggio nella chat con [RECIPIENT].
diff --git a/indra/newview/skins/default/xui/it/floater_im_container.xml b/indra/newview/skins/default/xui/it/floater_im_container.xml
index 2970639f4c..fb8e77b32f 100644
--- a/indra/newview/skins/default/xui/it/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/it/floater_im_container.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="Instant Messages"/>
+<multi_floater name="floater_im_box" title="CONVERSAZIONI"/>
diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml
index 830c65b443..8d395ea04b 100644
--- a/indra/newview/skins/default/xui/it/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/it/floater_im_session.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="panel_im">
<layout_stack name="im_panels">
- <layout_panel label="Pannello di Controllo IM" name="panel_im_control_panel"/>
+ <layout_panel label="Pannello di controllo IM" name="panel_im_control_panel"/>
<layout_panel>
<line_editor label="A" name="chat_editor"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/floater_image_preview.xml b/indra/newview/skins/default/xui/it/floater_image_preview.xml
index 341202d8bc..6169c0222d 100644
--- a/indra/newview/skins/default/xui/it/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_image_preview.xml
@@ -12,15 +12,15 @@ immagine come:
</text>
<combo_box label="Tipo d&apos;abito" left="120" name="clothing_type_combo" width="166">
<combo_box.item label="Immagine" name="Image"/>
- <combo_box.item label="Capelli" name="Hair"/>
- <combo_box.item label="Testa Femminile" name="FemaleHead"/>
- <combo_box.item label="Corpo Femminile Superiore" name="FemaleUpperBody"/>
- <combo_box.item label="Corpo Femminile Inferiore" name="FemaleLowerBody"/>
- <combo_box.item label="Testa Maschile" name="MaleHead"/>
- <combo_box.item label="Corpo Maschile Superiore" name="MaleUpperBody"/>
- <combo_box.item label="Corpo Maschile Inferiore" name="MaleLowerBody"/>
+ <combo_box.item label="Capigliature" name="Hair"/>
+ <combo_box.item label="Testa femminile" name="FemaleHead"/>
+ <combo_box.item label="Parte superiore del corpo femminile" name="FemaleUpperBody"/>
+ <combo_box.item label="Parte inferiore del corpo femminile" name="FemaleLowerBody"/>
+ <combo_box.item label="Testa maschile" name="MaleHead"/>
+ <combo_box.item label="Parte superiore del corpo maschile" name="MaleUpperBody"/>
+ <combo_box.item label="Parte inferiore del corpo maschile" name="MaleLowerBody"/>
<combo_box.item label="Gonna" name="Skirt"/>
- <combo_box.item label="Sculpted Prim" name="SculptedPrim"/>
+ <combo_box.item label="Prim Sculpted" name="SculptedPrim"/>
</combo_box>
<text name="bad_image_text">
Non è stato possibile leggere l&apos;immagine.
diff --git a/indra/newview/skins/default/xui/it/floater_incoming_call.xml b/indra/newview/skins/default/xui/it/floater_incoming_call.xml
index fc7b8de6f4..81a6ea7a60 100644
--- a/indra/newview/skins/default/xui/it/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/it/floater_incoming_call.xml
@@ -1,16 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="incoming call" title="UNA PERSONA SCONOSCIUTA STA&apos; CHIAMANDO">
+<floater name="incoming call" title="UNA PERSONA SCONOSCIUTA STA CHIAMANDO">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
<floater.string name="localchat">
- Voice Chat nei dintorni
+ Chat vocale nei dintorni
</floater.string>
<floater.string name="anonymous">
anonimo
</floater.string>
<floater.string name="VoiceInviteP2P">
- stà chiamando.
+ sta chiamando.
</floater.string>
<floater.string name="VoiceInviteAdHoc">
- ha aggiunto una chiamata in Voice Chat ad una conferenza in chat.
+ ha aderito ad una chiamata in chat vocale in conferenza.
+ </floater.string>
+ <floater.string name="VoiceInviteGroup">
+ ha accettato una chiamata in Chat vocale con il gruppo [GROUP].
</floater.string>
<text name="question">
Vuoi abbandonare [CURRENT_CHAT] e aderire a questa voice chat?
diff --git a/indra/newview/skins/default/xui/it/floater_inventory.xml b/indra/newview/skins/default/xui/it/floater_inventory.xml
index 5049bb3e58..2aa6795988 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="INVENTARIO">
+<floater name="Inventory" title="IL MIO INVENTARIO">
<floater.string name="Title">
- Inventario
+ IL MIO INVENTARIO
</floater.string>
<floater.string name="TitleFetching">
- Inventario (Fetching [ITEM_COUNT] Items...) [FILTER]
+ IL MIO INVENTARIO (recupero di [ITEM_COUNT] articoli...) [FILTER]
</floater.string>
<floater.string name="TitleCompleted">
- Inventario ([ITEM_COUNT] Items) [FILTER]
+ IL MIO INVENTARIO ([ITEM_COUNT] articoli) [FILTER]
</floater.string>
<floater.string name="Fetched">
- Raggiunto ??????????
+ Completato
</floater.string>
<panel label="Pannello dell&apos;Inventario" name="Inventory Panel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
index aaf7b71656..d3dc4d7eae 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
@@ -56,7 +56,7 @@
</text>
<check_box label="Condividi" name="CheckShareWithGroup"/>
<text name="NextOwnerLabel" width="230">
- Prossimo Proprietario:
+ Proprietario successivo:
</text>
<check_box label="Modifica" name="CheckNextOwnerModify"/>
<check_box label="Copiare" left_delta="88" name="CheckNextOwnerCopy"/>
diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
index 93bf11b069..f7b2b1ab4a 100644
--- a/indra/newview/skins/default/xui/it/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="LAG METER">
+<floater name="floater_lagmeter" title="MISURATORE LAG">
<floater.string name="max_title_msg">
Misuratore del lag
</floater.string>
@@ -136,7 +136,7 @@
<text left="30" name="client_lag_cause" right="-10"/>
<button label="" label_selected="" name="network_lagmeter" tool_tip="Stato del lag del network"/>
<text name="network">
- Network
+ Rete
</text>
<text font="SansSerifSmall" name="network_text">
Normale
@@ -150,5 +150,5 @@
Normale
</text>
<text left="30" name="server_lag_cause" right="-32"/>
- <button label="&gt;&gt;" name="minimize" tool_tip="Pulsante per minimizzare"/>
+ <button label="&gt;&gt;" name="minimize" tool_tip="Cambia dimensioni floater"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_land_holdings.xml b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
index 9f2884448d..1b2f2605f7 100644
--- a/indra/newview/skins/default/xui/it/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="LA MIA TERRA">
+<floater name="land holdings floater" title="IL MIO TERRENO">
<scroll_list name="parcel list">
- <column label="Parcel" name="name"/>
+ <column label="Lotto" name="name"/>
<column label="Regione" name="location"/>
<column label="Tipo" name="type"/>
<column label="Area" name="area"/>
</scroll_list>
<button label="Teletrasportati" label_selected="Teletrasportati" name="Teleport" tool_tip="Teletrasportati al centro di questo terreno."/>
- <button label="Mappa" label_selected="Mappa" name="Show on Map" tool_tip="Mostra questa terra nella mappa del mondo" width="130"/>
+ <button label="Mappa" label_selected="Mappa" name="Show on Map" tool_tip="Mostra il terreno sulla mappa del mondo" width="130"/>
<text name="contrib_label">
Contributi ai tuoi gruppi:
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
index d86b834c38..0bd2b02323 100644
--- a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script ed float" title="SCRIPT: NUOVO SCRIPT">
<floater.string name="not_allowed">
- Non puoi vedere o modificare questo script, perchè è impostato come &quot;no copy&quot;. Necesiti tutti i permessi per vedere o modificare lo script dentro un oggetto.
+ Per impostazione, questo script non può essere visualizzato né modificato. Per visualizzare o modificare uno script all&apos;interno di un oggetto, devi avere i necessari diritti di modifica.
</floater.string>
<floater.string name="script_running">
In esecuzione
</floater.string>
<floater.string name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<button label="Ripristina" label_selected="Ripristina" name="Reset"/>
<check_box initial_value="true" label="In esecuzione" left="4" name="running"/>
diff --git a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
index b699b280b6..47fe2de051 100644
--- a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="LSL WIKI">
+<floater name="script ed float" title="RIFERIMENTO LSL">
<check_box label="Segui il cursore" name="lock_check"/>
<combo_box label="Blocca" left_delta="120" name="history_combo" width="70"/>
<button label="Indietro" left_delta="75" name="back_btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_map.xml b/indra/newview/skins/default/xui/it/floater_map.xml
index ec4bd4ef4a..70ab8dcb5a 100644
--- a/indra/newview/skins/default/xui/it/floater_map.xml
+++ b/indra/newview/skins/default/xui/it/floater_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
+<floater name="Map" title="Mini mappa">
<floater.string name="mini_map_north">
N
</floater.string>
diff --git a/indra/newview/skins/default/xui/it/floater_media_browser.xml b/indra/newview/skins/default/xui/it/floater_media_browser.xml
index 0e25cef60b..0a8c0f1c41 100644
--- a/indra/newview/skins/default/xui/it/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/it/floater_media_browser.xml
@@ -9,13 +9,13 @@
<layout_stack name="stack1">
<layout_panel name="nav_controls">
<button label="Indietro" name="back" width="75"/>
- <button label="Avanti" name="forward" left_delta="75" width="70"/>
- <button label="Ricarica" name="reload" left_delta="75"/>
+ <button label="Avanti" left_delta="75" name="forward" width="70"/>
+ <button label="Ricarica" left_delta="75" name="reload"/>
<combo_box left_delta="75" name="address" width="510"/>
- <button label="Vai" name="go" left_delta="515"/>
+ <button label="Vai" left_delta="515" name="go"/>
</layout_panel>
<layout_panel name="parcel_owner_controls">
- <button label="Invia questo URL al terreno" name="assign"/>
+ <button label="Invia la pagina attuale al lotto" name="assign"/>
</layout_panel>
<layout_panel name="external_controls">
<button label="Apri nel web browser" name="open_browser"/>
diff --git a/indra/newview/skins/default/xui/it/floater_media_settings.xml b/indra/newview/skins/default/xui/it/floater_media_settings.xml
index b99a11b881..d521502a4c 100644
--- a/indra/newview/skins/default/xui/it/floater_media_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_media_settings.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="media_settings" title="IMPOSTAZIONI MEDIA">
<button label="OK" label_selected="OK" name="OK"/>
- <button label="Cancella" label_selected="Cancella" name="Cancel"/>
+ <button label="Annulla" label_selected="Annulla" name="Cancel"/>
<button label="Applica" label_selected="Applica" name="Apply"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
index ee3d642fef..63074d5a4c 100644
--- a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="SIMULA UNA PERDITA DI MEMORIA">
+<floater name="MemLeak" title="SIMULA UNA FUGA DI MEMORIA">
<spinner label="Perdità di velocità (bytes per frame):" name="leak_speed"/>
<spinner label="Memoria Persa Max (MB):" name="max_leak"/>
<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/it/floater_moveview.xml b/indra/newview/skins/default/xui/it/floater_moveview.xml
index edc5d9178d..26d861c566 100644
--- a/indra/newview/skins/default/xui/it/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/it/floater_moveview.xml
@@ -1,35 +1,43 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="move_floater">
<string name="walk_forward_tooltip">
- Cammina in avanti (premi Freccia Sù o W)
+ Cammina in avanti (premi freccia su o W)
</string>
<string name="walk_back_tooltip">
- Cammina indietro (premi Freccia Giù o S)
+ Cammina indietro (premi freccia giù o S)
</string>
<string name="run_forward_tooltip">
- Corri in avanti (premi Freccia Sù o W)
+ Corri in avanti (premi freccia su o W)
</string>
<string name="run_back_tooltip">
- Corri indietro (premi Freccia Giù o S)
+ Corri indietro (premi freccia giù o S)
</string>
<string name="fly_forward_tooltip">
- Vola in avanti (premi Freccia Sù o W)
+ Vola in avanti (premi freccia su o W)
</string>
<string name="fly_back_tooltip">
- Vola indietro (premi Freccia Giù o S)
+ Vola indietro (premi freccia giù o S)
+ </string>
+ <string name="walk_title">
+ Cammina
+ </string>
+ <string name="run_title">
+ Corri
+ </string>
+ <string name="fly_title">
+ Vola
</string>
<panel name="panel_actions">
- <button label="" label_selected="" name="turn left btn" tool_tip="Gira a sinistra (premi Freccia Sinistra o A)"/>
- <button label="" label_selected="" name="turn right btn" tool_tip="Gira a destra (premi Freccia Destra o D)"/>
- <button label="" label_selected="" name="move up btn" tool_tip="Vola in alto, premi &quot;E&quot;"/>
- <button label="" label_selected="" name="move down btn" tool_tip="Vola in basso, premi &quot;C&quot;"/>
- <joystick_turn name="forward btn" tool_tip="Cammina in avanti (premi Freccia Sù o W)"/>
- <joystick_turn name="backward btn" tool_tip="Cammina indietro (premi Freccia Giù o S)"/>
+ <button label="" label_selected="" name="turn left btn" tool_tip="Gira a sinistra (premi freccia sinistra o A)"/>
+ <button label="" label_selected="" name="turn right btn" tool_tip="Gira a destra (premi freccia destra o D)"/>
+ <button label="" label_selected="" name="move up btn" tool_tip="Vola in alto, premi E"/>
+ <button label="" label_selected="" name="move down btn" tool_tip="Vola in basso, premi C"/>
+ <joystick_turn name="forward btn" tool_tip="Cammina in avanti (premi freccia su o W)"/>
+ <joystick_turn name="backward btn" tool_tip="Cammina indietro (premi freccia giù o S)"/>
</panel>
<panel name="panel_modes">
- <button label="" name="mode_walk_btn" tool_tip="Modalità per camminare"/>
- <button label="" name="mode_run_btn" tool_tip="Modalità per correre"/>
- <button label="" name="mode_fly_btn" tool_tip="Modalità di volo"/>
- <button label="Ferma il volo" name="stop_fly_btn" tool_tip="Ferma il volo"/>
+ <button label="" name="mode_walk_btn" tool_tip="Modalità cammina"/>
+ <button label="" name="mode_run_btn" tool_tip="Modalità corsa"/>
+ <button label="" name="mode_fly_btn" tool_tip="Modalità volo"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_mute_object.xml b/indra/newview/skins/default/xui/it/floater_mute_object.xml
index 81cd46ec4d..dd1a2b67d7 100644
--- a/indra/newview/skins/default/xui/it/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_mute_object.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="BLOCCA OGGETTO PER NOME">
+<floater name="mute by name" title="BLOCCA OGGETTO IN BASE AL NOME">
<text name="message">
Blocca un oggetto:
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_nearby_chat.xml b/indra/newview/skins/default/xui/it/floater_nearby_chat.xml
index 364b62fbdb..9878fe85ea 100644
--- a/indra/newview/skins/default/xui/it/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/it/floater_nearby_chat.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT VICINA"/>
+<floater name="nearby_chat" title="CHAT NEI DINTORNI"/>
diff --git a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml
new file mode 100644
index 0000000000..dff5f33e57
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="modal container" title="Salva vestiario">
+ <button label="Salva" label_selected="Salva" name="Save"/>
+ <button label="Annulla" label_selected="Annulla" name="Cancel"/>
+ <text name="Save item as:">
+ Salva quello che indosso
+come nuovo vestiario:
+ </text>
+ <line_editor name="name ed">
+ [DESC] (nuovo)
+ </line_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_outgoing_call.xml b/indra/newview/skins/default/xui/it/floater_outgoing_call.xml
index b4536e31cc..268d46e07e 100644
--- a/indra/newview/skins/default/xui/it/floater_outgoing_call.xml
+++ b/indra/newview/skins/default/xui/it/floater_outgoing_call.xml
@@ -1,28 +1,40 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="outgoing call" title="CHIAMANDO">
+<floater name="outgoing call" title="CHIAMATA IN CORSO">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
<floater.string name="localchat">
- Voice Chat nei dintorni
+ Chat vocale nei dintorni
</floater.string>
<floater.string name="anonymous">
anonimo
</floater.string>
<floater.string name="VoiceInviteP2P">
- stà chiamando.
+ sta chiamando.
</floater.string>
<floater.string name="VoiceInviteAdHoc">
- ha aderito ad una chiamata Voice Chat con una chat in conferenza.
+ ha aderito ad una chiamata in chat vocale in conferenza.
</floater.string>
<text name="connecting">
- Connettendo a [CALLEE_NAME]
+ Collegamento in corso a [CALLEE_NAME]
</text>
<text name="calling">
- Chiamando [CALLEE_NAME]
+ Chiamata a [CALLEE_NAME]
</text>
<text name="noanswer">
- Nessuna risposta. Per favore riprova più tardi.
+ Nessuna risposta. Riprova più tardi.
+ </text>
+ <text name="nearby">
+ Sei stato scollegato da [VOICE_CHANNEL_NAME]. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_other">
+ [VOICE_CHANNEL_NAME] ha chiuso la chiamata. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_agent">
+ Hai chiuso la chiamata. [RECONNECT_NEARBY]
</text>
<text name="leaving">
- Abbandonando [CURRENT_CHAT].
+ Chiusura chat [CURRENT_CHAT].
</text>
- <button label="Cancella" label_selected="Cancella" name="Cancel"/>
+ <button label="Annulla" label_selected="Annulla" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_pay.xml b/indra/newview/skins/default/xui/it/floater_pay.xml
index 59004bbbd7..c1ea8ec9c8 100644
--- a/indra/newview/skins/default/xui/it/floater_pay.xml
+++ b/indra/newview/skins/default/xui/it/floater_pay.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money" title="">
<string name="payee_group">
- Paga Gruppo
+ Paga gruppo
</string>
<string name="payee_resident">
- Paga Residente
+ Paga residente
</string>
<text left="5" name="payee_label" width="105">
Paga:
@@ -18,7 +18,7 @@
<button label="10 L$" label_selected="10 L$" left="118" name="fastpay 10" width="80"/>
<button label="20 L$" label_selected="20 L$" left="210" name="fastpay 20"/>
<text left="4" name="amount text">
- O, scegli importo:
+ Oppure, scegli importo:
</text>
<line_editor left="70" name="amount" width="49"/>
<button label="Paga" label_selected="Paga" left="127" name="pay btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_pay_object.xml b/indra/newview/skins/default/xui/it/floater_pay_object.xml
index c51a2b7b31..37f549b5da 100644
--- a/indra/newview/skins/default/xui/it/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_pay_object.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money" title="">
<string halign="left" name="payee_group" width="100">
- Paga Gruppo
+ Paga gruppo
</string>
<string halign="left" name="payee_resident" width="120">
- Pags Residente
+ Paga residente
</string>
<icon name="icon_person" tool_tip="Persona"/>
<text left="120" name="payee_name">
@@ -15,14 +15,14 @@
</text>
<icon name="icon_object" tool_tip="Oggetti"/>
<text left="120" name="object_name_text">
- ...
+ Il mio oggetto con un nome veramente lungo
</text>
<button label="1 L$" label_selected="1 L$" left="125" name="fastpay 1" width="70"/>
<button label="5 L$" label_selected="5 L$" left="200" name="fastpay 5" width="70"/>
<button label="10 L$" label_selected="10 L$" left="125" name="fastpay 10" width="70"/>
<button label="20 L$" label_selected="20 L$" left="200" name="fastpay 20" width="70"/>
<text halign="left" left="5" name="amount text">
- O, scegli importo:
+ Oppure, scegli importo:
</text>
<line_editor left="74" name="amount" width="50"/>
<button label="Paga" label_selected="Paga" name="pay btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
index 67e4093951..a02b3b5075 100644
--- a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="PERMESSI di UPLOAD in DEFAULT">
+<floater name="perm prefs" title="DIRITTI DI CARICAMENTO PREDEFINITI">
<panel label="Permessi" name="permissions">
<button label="?" label_selected="?" name="help"/>
<check_box label="Condividi con il gruppo" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/it/floater_postcard.xml b/indra/newview/skins/default/xui/it/floater_postcard.xml
index de246db826..cb2916268a 100644
--- a/indra/newview/skins/default/xui/it/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/it/floater_postcard.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="ISTANTANEA IN EMAIL">
+<floater name="Postcard" title="INVIA FOTO VIA E-MAIL">
<text name="to_label" width="135">
Email del destinatario:
</text>
@@ -35,6 +35,6 @@
Vieni a vedere!
</string>
<string name="upload_message">
- Spedendo...
+ Invio...
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml
index a76b9e3e27..c5b6654a69 100644
--- a/indra/newview/skins/default/xui/it/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/it/floater_preferences.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater min_width="350" name="Preferences" title="PREFERENZE" width="646">
+<floater name="Preferences" title="PREFERENZE">
<button label="OK" label_selected="OK" name="OK"/>
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
- <tab_container name="pref core" tab_width="146" width="646">
+ <tab_container name="pref core" tab_width="100">
<panel label="Generale" name="general"/>
<panel label="Grafica" name="display"/>
- <panel label="Privacy" name="im"/>
- <panel label="Suono" name="audio"/>
+ <panel label="Riservatezza" name="im"/>
+ <panel label="Audio e media" name="audio"/>
<panel label="Chat" name="chat"/>
<panel label="Notifiche" name="msgs"/>
- <panel label="Configurazione" name="input"/>
- <panel label="Avanzato" name="advanced1"/>
+ <panel label="Impostazione" name="input"/>
+ <panel label="Avanzate" name="advanced1"/>
</tab_container>
</floater>
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 006198781b..73082c9526 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="Esegui inworld" label_selected="Ferma" left="20" name="Anim play btn" tool_tip="Riproduci questa animazione così che gli altri possano vederla" width="131"/>
+ <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"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml
index 850f4c21ac..4e926cedc9 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml
@@ -24,6 +24,9 @@
<floater.string name="Title">
Gesture: [NAME]
</floater.string>
+ <text name="name_text">
+ Nome:
+ </text>
<text name="desc_label">
Descrizione:
</text>
@@ -47,18 +50,18 @@
<text name="steps_label">
Fasi:
</text>
- <button label="Sù" name="up_btn"/>
+ <button label="Su" name="up_btn"/>
<button label="Giù" name="down_btn"/>
<button label="Elimina" name="delete_btn"/>
<radio_group name="animation_trigger_type">
- <radio_item label="Inizia" name="start"/>
- <radio_item label="Stop" name="stop"/>
+ <radio_item label="Attiva" name="start"/>
+ <radio_item label="Ferma" name="stop"/>
</radio_group>
<check_box label="finché le animazioni sono eseguite" left="226" name="wait_anim_check"/>
<check_box label="tempo in secondi" name="wait_time_check"/>
<line_editor left_delta="114" name="wait_time_editor"/>
<text name="help_label">
- Tutte le fasi avvengono simultaneamente, a meno che non aggiungi una fase attendi.
+ Tutte le fasi avvengono contemporaneamente, a meno che non aggiungi fasi di attesa.
</text>
<check_box label="Attiva" name="active_check" tool_tip="Le gesture attivate possono essere eseguite scrivendo in chat la parola chiave o premendo i tasti chiave. Le gesture generalmente si disattivano quando c&apos;è un conflitto nei relativi tasti."/>
<button label="Anteprima" name="preview_btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml
index 660b868cae..d490416cc7 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTURE SHORTCUT"/>
+<floater name="Gesture" title="SCORCIATOIA GESTURE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml
index 942d5ed1ce..eb0bc4d868 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="TASTO RAPIDO PER GESTURE">
+<floater name="Gesture" title="SCORCIATOIA GESTURE">
<text name="trigger_label">
Chat:
</text>
@@ -8,8 +8,8 @@
</text>
<combo_box label="Nessuno" name="modifier_combo"/>
<combo_box label="Nessuno" name="key_combo"/>
- <text name="replace_text" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, parola chiave &apos;ciao&apos; sostituendo con &apos;buongiorno&apos; cambierà la chat da &apos;Io dico ciao&apos; in &apos;Io dico buongiorno&apos; non appena attiverete la gesture!">
+ <text name="replace_text" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave &apos;ciao&apos; con &apos;buongiorno&apos;, nella chat il testo &apos;Volevo dire ciao&apos; diventerà &apos;Volevo dire buongiorno&apos; e verrà attivata la gesture.">
Sostituisci:
</text>
- <line_editor name="replace_editor" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, parola chiave &apos;ciao&apos; sostituendo con &apos;buongiorno&apos; cambierà la chat da &apos;Io dico ciao&apos; in &apos;Io dico buongiorno&apos; non appena attiverete la gesture"/>
+ <line_editor name="replace_editor" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave &apos;ciao&apos; con &apos;buongiorno&apos;, nella chat il testo &apos;Volevo dire ciao&apos; diventerà &apos;Volevo dire buongiorno&apos; e verrà attivata la gesture"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml
index 7c1f55ddba..d490416cc7 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="TASTO RAPIDO GESTURE"/>
+<floater name="Gesture" title="SCORCIATOIA GESTURE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
index 08f5087242..70e28dde35 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="NOTE:">
+<floater name="preview notecard" title="BIGLIETTO:">
<floater.string name="no_object">
- Impossibile trovare l&apos;oggetto che contiene questa nota.
+ Impossibile trovare un oggetto contenente questo biglietto
</floater.string>
<floater.string name="not_allowed">
- Non hai i permessi per leggere questa nota.
+ Non hai il permesso di leggere questo biglietto.
</floater.string>
<floater.string name="Title">
- Notecard: [NAME]
+ Biglietto: [NAME]
</floater.string>
<floater.string label="Salva" label_selected="Salva" name="Save">
Salva
diff --git a/indra/newview/skins/default/xui/it/floater_preview_sound.xml b/indra/newview/skins/default/xui/it/floater_preview_sound.xml
index 182243561c..8eb9573e54 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_sound.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview_sound">
<floater.string name="Title">
- Suono: [NAME]
+ Suono : [NAME]
</floater.string>
<text name="desc txt">
Descrizione:
</text>
- <button label="Avvia inworld" label_selected="Avvia inworld" name="Sound play btn" tool_tip="Riproduci questo suono in modo che gli altri possano sentirlo"/>
- <button label="Avvia localmente" label_selected="Avvia localmente" name="Sound audition btn" tool_tip="Riproduci questo suono in modo che solo tu possa sentirlo"/>
+ <button label="Riproduci in Second Life" label_selected="Riproduci in Second Life" name="Sound play btn" tool_tip="Riproduci questo suono in modo che anche gli altri possano udirlo"/>
+ <button label="Avvia localmente" label_selected="Avvia localmente" name="Sound audition btn" tool_tip="Riproduci questo suono in modo che solo tu possa udirlo"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_texture.xml b/indra/newview/skins/default/xui/it/floater_preview_texture.xml
index dd24079ea3..5b4054514e 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_texture.xml
@@ -10,35 +10,38 @@
Descrizione:
</text>
<text name="dimensions">
- [WIDTH]px x [HEIGHT]px
+ [WIDTH] px x [HEIGHT] px
</text>
- <combo_box name="combo_aspect_ratio" tool_tip="Anteprima del rapporto d&apos;aspetto impostato">
+ <text name="aspect_ratio">
+ Antreprima rapporto di visualizzazione
+ </text>
+ <combo_box name="combo_aspect_ratio" tool_tip="Anteprima con rapporto di visualizzazione fisso">
<combo_item name="Unconstrained">
Libero
</combo_item>
- <combo_item name="1:1" tool_tip="Immagine del Gruppo o Profilo nel Mondo Reale">
+ <combo_item name="1:1" tool_tip="Logo del gruppo o profilo nel mondo reale">
1:1
</combo_item>
- <combo_item name="4:3" tool_tip="[SECOND_LIFE] profilo">
+ <combo_item name="4:3" tool_tip="Profilo [SECOND_LIFE]">
4:3
</combo_item>
- <combo_item name="10:7" tool_tip="Annunci ed elenco del Cerca, landmarks">
+ <combo_item name="10:7" tool_tip="Annunci e inserzioni, punti di riferimento">
10:7
</combo_item>
- <combo_item name="3:2" tool_tip="Info sul terreno">
+ <combo_item name="3:2" tool_tip="Informazioni sul terreno">
3:2
</combo_item>
<combo_item name="16:10">
16:10
</combo_item>
- <combo_item name="16:9" tool_tip="Preferiti nel Profilo">
+ <combo_item name="16:9" tool_tip="Preferiti del Profilo">
16:9
</combo_item>
<combo_item name="2:1">
2:1
</combo_item>
</combo_box>
- <button label="OK" name="keep"/>
- <button label="Cancella" name="discard"/>
- <button label="Salva come:" name="save_tex_btn"/>
+ <button label="OK" name="Keep"/>
+ <button label="Elimina" name="Discard"/>
+ <button label="Salva con nome" name="save_tex_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_publish_classified.xml b/indra/newview/skins/default/xui/it/floater_publish_classified.xml
new file mode 100644
index 0000000000..6984412728
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_publish_classified.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="publish_classified" title="Pubblicazione inserzione">
+ <text name="explanation_text">
+ La tua inserzione sarà visibile per una settimana dal giorno della sua pubblicazione.
+
+Ricordiamo che i costi per gli annunci non possono essere rimborsati
+ </text>
+ <spinner label="Prezzo per inserzione:" name="price_for_listing" tool_tip="Prezzo per inserzione:" value="50"/>
+ <text name="l$_text" value="L$"/>
+ <text name="more_info_text">
+ Maggiori informazioni (link alla guida sugli annunci)
+ </text>
+ <button label="Pubblica" name="publish_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_region_info.xml b/indra/newview/skins/default/xui/it/floater_region_info.xml
index 98808e4b55..dc2c24ca56 100644
--- a/indra/newview/skins/default/xui/it/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/it/floater_region_info.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="REGIONE/PROPRIETA&apos;"/>
+<floater name="regioninfo" title="Regione/proprietà immobiliare"/>
diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
index a1e430b6b2..4827cc739d 100644
--- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_report_abuse" title="DENUNCIA DI ABUSO">
<floater.string name="Screenshot">
- Fotografia
+ Immagine
</floater.string>
- <check_box label="Utilizza questa fotografia" name="screen_check"/>
+ <check_box label="Utilizza questa immagine" name="screen_check"/>
<text name="reporter_title">
Segnalato da:
</text>
@@ -41,8 +41,8 @@
<combo_box name="category_combo" tool_tip="Categoria -- scegli la categoria che descrive meglio questa segnalazione">
<combo_box.item label="Scegli la categoria" name="Select_category"/>
<combo_box.item label="Età &gt; Far finta di essere minore" name="Age__Age_play"/>
- <combo_box.item label="Età &gt; Residente adulto nella Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
- <combo_box.item label="Età &gt; Residente minorenne al di fuori della &apos;Second Life per Teenager&apos;" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+ <combo_box.item label="Età &gt; Residente adulto in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
+ <combo_box.item label="Età &gt; Residente minorenne fuori da Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Assalto &gt; sandbox da combattimento / area pericolosa" name="Assault__Combat_sandbox___unsafe_area"/>
<combo_box.item label="Assalto &gt; Area sicura" name="Assault__Safe_area"/>
<combo_box.item label="Assalto &gt; Test di armi in sandbox" name="Assault__Weapons_testing_sandbox"/>
@@ -82,7 +82,7 @@
<text name="abuser_name_title">
Nome di chi ha commesso l&apos;abuso:
</text>
- <button label="Scegli un residente" label_selected="" name="select_abuser" tool_tip="Scegli il nome di chi ha commesso l&apos;abuso dalla lista"/>
+ <button label="Scegli" label_selected="" name="select_abuser" tool_tip="Scegli il nome di chi ha commesso l&apos;abuso dalla lista"/>
<text name="abuser_name_title2">
Luogo dell&apos;abuso:
</text>
@@ -93,10 +93,10 @@
Dettagli:
</text>
<text name="bug_aviso">
- Specifica data, luogo, natura dell&apos;abuso, testo rilevante di chat/IM, e se possibile indica l&apos;oggetto.
+ Fornisci informazioni specifiche il più possibile
</text>
<text name="incomplete_title">
- * Nota: segnalazioni incomplete non saranno esaminate
+ * le segnalazioni incomplete non saranno esaminate
</text>
<button label="Segnala abuso" label_selected="Segnala abuso" name="send_btn"/>
<button label="Annulla" label_selected="Annulla" name="cancel_btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_script_limits.xml b/indra/newview/skins/default/xui/it/floater_script_limits.xml
new file mode 100644
index 0000000000..2383b85bb7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_script_limits.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="scriptlimits" title="INFORMAZIONI SULLO SCRIPT"/>
diff --git a/indra/newview/skins/default/xui/it/floater_script_preview.xml b/indra/newview/skins/default/xui/it/floater_script_preview.xml
index 9428297397..d007774f43 100644
--- a/indra/newview/skins/default/xui/it/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_preview.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview lsl text" title="SCRIPT: SCRIPT DI ROTAZIONE">
<floater.string name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<text name="desc txt">
Descrizione:
diff --git a/indra/newview/skins/default/xui/it/floater_script_queue.xml b/indra/newview/skins/default/xui/it/floater_script_queue.xml
index 728fbe8c8d..f4117d30a2 100644
--- a/indra/newview/skins/default/xui/it/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_queue.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="RESETTA IL PROGRESSO">
+<floater name="queue" title="AZZERA AVANZAMENTO">
<floater.string name="Starting">
- Conteggio [START] degli [COUNT] articoli.
+ Avvio di [START] di [COUNT] oggetti.
</floater.string>
<floater.string name="Done">
- Eseguito.
+ Fine.
</floater.string>
<floater.string name="Resetting">
- Resettando
+ Ripristino in corso
</floater.string>
<floater.string name="Running">
In esecuzione
diff --git a/indra/newview/skins/default/xui/it/floater_search.xml b/indra/newview/skins/default/xui/it/floater_search.xml
index 6afdd2437e..05f5dfe719 100644
--- a/indra/newview/skins/default/xui/it/floater_search.xml
+++ b/indra/newview/skins/default/xui/it/floater_search.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_search" title="TROVA">
<floater.string name="loading_text">
- Caricando...
+ Caricamento in corso...
</floater.string>
<floater.string name="done_text">
- Eseguito
+ Fine
</floater.string>
<layout_stack name="stack1">
<layout_panel name="browser_layout">
<text name="refresh_search">
- Redo search to reflect current God level
+ Ripeti ricerca in modo che rifletta il livello di diritti Admin attuale
</text>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/it/floater_select_key.xml b/indra/newview/skins/default/xui/it/floater_select_key.xml
index 181b7d5292..014bc76ffb 100644
--- a/indra/newview/skins/default/xui/it/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/it/floater_select_key.xml
@@ -2,6 +2,6 @@
<floater name="modal container" title="">
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
<text name="Save item as:">
- clicca un tasto per impostare la modalità PARLA con il tuo pulsante.
+ Premi una chiave per configurarla come pulsante da premere per parlare.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_sell_land.xml b/indra/newview/skins/default/xui/it/floater_sell_land.xml
index 2a4fa05b54..0f8d24ebbd 100644
--- a/indra/newview/skins/default/xui/it/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_sell_land.xml
@@ -1,21 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="VENDI LA TERRA">
+<floater name="sell land" title="VENDI TERRENO">
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<text name="info_parcel_label">
- Parcel:
+ Lotto:
</text>
<text left="82" name="info_parcel">
- NOME DEL PARCEL
+ NOME DEL LOTTO
</text>
<text name="info_size_label">
- Misura:
+ Dimensioni:
</text>
<text left="82" name="info_size">
[AREA] m²
</text>
<text bottom_delta="-57" height="28" name="info_action">
- Vendere questo parcel:
+ Per vendere questo lotto:
</text>
<text name="price_label">
1. Imposta un prezzo:
@@ -30,36 +30,36 @@
0
</line_editor>
<text name="price_per_m">
- (L$[PER_METER] per m²)
+ ([PER_METER] L$ per m²)
</text>
<text name="sell_to_label">
- 2. Vendi la terra a:
+ 2. Vendi il terreno a:
</text>
<text name="sell_to_text">
- Scegli se vendere a chiunque o ad un specifico compratore.
+ Scegli se vendere a chiunque o ad un determinato acquirente.
</text>
<combo_box name="sell_to">
<combo_box.item label="- Seleziona uno -" name="--selectone--"/>
<combo_box.item label="Chiunque" name="Anyone"/>
- <combo_box.item label="Persona Specifica:" name="Specificuser:"/>
+ <combo_box.item label="Persona specifica:" name="Specificuser:"/>
</combo_box>
<button label="Seleziona" name="sell_to_select_agent"/>
<text name="sell_objects_label">
3. Vendi gli oggetti con la terra?
</text>
<text name="sell_objects_text">
- Gli oggetti trasferibili del proprietaio della Terra cambieranno proprietà.
+ Gli oggetti trasferibili del proprietario presenti sul lotto cambieranno di proprietà.
</text>
<radio_group bottom_delta="-58" name="sell_objects">
- <radio_item label="No, mantieni la proprietà sugli oggetti" name="no"/>
+ <radio_item label="No, mantieni la proprietà degli oggetti" name="no"/>
<radio_item label="Si, vendi gli oggetti con la terra" name="yes"/>
</radio_group>
- <button label="Mostra Oggetti" name="show_objects"/>
+ <button label="Mostra oggetti" name="show_objects"/>
<text name="nag_message_label">
RICORDA: Tutte le vendite sono definitive.
</text>
- <button label="Imposta Terra in Vendita" name="sell_btn"/>
- <button label="Cancella" name="cancel_btn"/>
+ <button label="Imposta terreno come in vendita" name="sell_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
</panel>
</scroll_container>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_settings_debug.xml b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
index 385a7ed6e9..aab00a26ce 100644
--- a/indra/newview/skins/default/xui/it/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="DEBUG SETTINGS">
- <combo_box name="boolean_combo">
- <combo_box.item label="VERO" name="TRUE"/>
- <combo_box.item label="FALSO" name="FALSE"/>
- </combo_box>
+<floater name="settings_debug" title="PARAMETRI DI DEBUG">
+ <radio_group name="boolean_combo">
+ <radio_item label="VERO" name="TRUE" value="vero"/>
+ <radio_item label="FALSO" name="FALSE" value=""/>
+ </radio_group>
<color_swatch label="Colore" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
<spinner label="x" name="val_spinner_2"/>
diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml
index 668c3c8c9e..03aaed46be 100644
--- a/indra/newview/skins/default/xui/it/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml
@@ -4,23 +4,23 @@
Destinazione della fotografia
</text>
<radio_group label="Tipo di fotografia" name="snapshot_type_radio" width="228">
- <radio_item label="Invia via email" name="postcard"/>
- <radio_item label="Salva nel tuo inventario ([AMOUNT] L$)" name="texture"/>
- <radio_item label="Salva sul tuo pc" name="local"/>
+ <radio_item label="E-mail" name="postcard"/>
+ <radio_item label="Il mio inventario (L$[AMOUNT])" name="texture"/>
+ <radio_item label="Salva sul mio computer" name="local"/>
</radio_group>
<text name="file_size_label">
- Grandezza del file: [SIZE] KB
+ [SIZE] KB
</text>
<button label="Aggiorna la fotografia" name="new_snapshot_btn"/>
<button label="Invia" name="send_btn"/>
<button label="Salva ([AMOUNT] L$)" name="upload_btn"/>
<flyout_button label="Salva" name="save_btn" tool_tip="Salva l&apos;immagine come file">
<flyout_button_item label="Salva" name="save_item"/>
- <flyout_button_item label="Salva come..." name="saveas_item"/>
+ <flyout_button_item label="Salva con nome..." name="saveas_item"/>
</flyout_button>
<button label="Annulla" name="discard_btn"/>
- <button label="Espandi &gt;&gt;" name="more_btn" tool_tip="Opzioni Avanzate"/>
- <button label="&lt;&lt; Diminuisci" name="less_btn" tool_tip="Opzioni Avanzate"/>
+ <button label="Altro" name="more_btn" tool_tip="Opzioni Avanzate"/>
+ <button label="Meno" name="less_btn" tool_tip="Opzioni Avanzate"/>
<text name="type_label2">
Grandezza
</text>
@@ -59,7 +59,7 @@
<spinner label="Larghezza" label_width="58" name="snapshot_width" width="116"/>
<spinner label="Altezza" label_width="41" left="130" name="snapshot_height" width="101"/>
<check_box label="Mantieni le proporzioni" name="keep_aspect_check"/>
- <slider label="Qualità d&apos;immagine" name="image_quality_slider"/>
+ <slider label="Qualità dell&apos;immagine" name="image_quality_slider"/>
<text name="layer_type_label" width="55">
Fotografa:
</text>
@@ -68,11 +68,10 @@
<combo_box.item label="Profondità" name="Depth"/>
<combo_box.item label="Colori primari degli oggetti" name="ObjectMattes"/>
</combo_box>
- <check_box label="Mostra l&apos;interfaccia nella fotografia" name="ui_check"/>
- <check_box bottom_delta="-17" label="Mostra i dispositivi indossati nella foto" name="hud_check"/>
+ <check_box label="Interfaccia" name="ui_check"/>
+ <check_box bottom_delta="-17" label="HUD" name="hud_check"/>
<check_box bottom_delta="-17" label="Mantieni aperto dopo aver salvato" name="keep_open_check"/>
- <check_box bottom_delta="-17" label="Blocca l&apos;anteprima
-(Anteprima a schermo intero)" name="freeze_frame_check"/>
+ <check_box bottom_delta="-17" label="Congela il frame (pieno schermo)" name="freeze_frame_check"/>
<check_box bottom_delta="-29" label="Auto-Aggiorna" name="auto_snapshot_check"/>
<string name="unknown">
sconosciuto
diff --git a/indra/newview/skins/default/xui/it/floater_stats.xml b/indra/newview/skins/default/xui/it/floater_stats.xml
index 7c8e6ba1a1..aed2a03a21 100644
--- a/indra/newview/skins/default/xui/it/floater_stats.xml
+++ b/indra/newview/skins/default/xui/it/floater_stats.xml
@@ -2,68 +2,68 @@
<floater name="Statistics" title="STATISTICHE">
<scroll_container name="statistics_scroll">
<container_view name="statistics_view">
- <stat_view label="Base" name="basic">
+ <stat_view label="Di base" name="basic">
<stat_bar label="FPS" name="fps"/>
- <stat_bar label="Larghezza Banda" name="bandwidth"/>
- <stat_bar label="Perdita Pacchetti" name="packet_loss"/>
+ <stat_bar label="Larghezza banda" name="bandwidth"/>
+ <stat_bar label="Perdita pacchetti" name="packet_loss"/>
<stat_bar label="Tempo Ping Sim" name="ping"/>
</stat_view>
- <stat_view label="Avanzato" name="advanced">
+ <stat_view label="Avanzata" name="advanced">
<stat_view label="Render" name="render">
- <stat_bar label="KTris Disegnate" name="ktrisframe"/>
- <stat_bar label="KTris Disegnate" name="ktrissec"/>
- <stat_bar label="Totale Oggetti" name="objs"/>
- <stat_bar label="Nuovi Oggetti" name="newobjs"/>
+ <stat_bar label="KTris disegnate" name="ktrisframe"/>
+ <stat_bar label="KTris disegnate" name="ktrissec"/>
+ <stat_bar label="Totale oggetti" name="objs"/>
+ <stat_bar label="Nuovi oggetti" name="newobjs"/>
</stat_view>
<stat_view label="Texture" name="texture">
<stat_bar label="Conteggio" name="numimagesstat"/>
- <stat_bar label="Conteggio Grezzo" name="numrawimagesstat"/>
+ <stat_bar label="Conteggio grezzo" name="numrawimagesstat"/>
<stat_bar label="Memoria GL" name="gltexmemstat"/>
- <stat_bar label="Memoria Formattata" name="formattedmemstat"/>
- <stat_bar label="Memoria Complessiva" name="rawmemstat"/>
- <stat_bar label="Memoria Impegnata" name="glboundmemstat"/>
+ <stat_bar label="Memoria formattata" name="formattedmemstat"/>
+ <stat_bar label="Memoria complessiva" name="rawmemstat"/>
+ <stat_bar label="Memoria impegnata" name="glboundmemstat"/>
</stat_view>
<stat_view label="Rete" name="network">
- <stat_bar label="Pacchetti In Ingresso" name="packetsinstat"/>
- <stat_bar label="Pacchetti In Uscita" name="packetsoutstat"/>
+ <stat_bar label="Pacchetti in ingresso" name="packetsinstat"/>
+ <stat_bar label="Pacchetti in uscita" name="packetsoutstat"/>
<stat_bar label="Oggetti" name="objectkbitstat"/>
<stat_bar label="Texture" name="texturekbitstat"/>
- <stat_bar label="Risorse Server" name="assetkbitstat"/>
+ <stat_bar label="Risorse server" name="assetkbitstat"/>
<stat_bar label="Layer" name="layerskbitstat"/>
- <stat_bar label="Effettivi In Ingresso" name="actualinkbitstat"/>
- <stat_bar label="Effettivi in Uscita" name="actualoutkbitstat"/>
+ <stat_bar label="Effettivi in ingresso" name="actualinkbitstat"/>
+ <stat_bar label="Effettivi in uscita" name="actualoutkbitstat"/>
<stat_bar label="Operazioni pendenti VFS" name="vfspendingoperations"/>
</stat_view>
</stat_view>
<stat_view label="Simulatore" name="sim">
<stat_bar label="Dilatazione temporale" name="simtimedilation"/>
<stat_bar label="FPS Sim" name="simfps"/>
- <stat_bar label="FPS Motore Fisico" name="simphysicsfps"/>
- <stat_view label="Dettagli Motore Fisico" name="physicsdetail">
- <stat_bar label="Oggetti Pinzati" name="physicspinnedtasks"/>
+ <stat_bar label="FPS motore fisico" name="simphysicsfps"/>
+ <stat_view label="Dettagli motore fisico" name="physicsdetail">
+ <stat_bar label="Oggetti pinzati" name="physicspinnedtasks"/>
<stat_bar label="Oggetti a basso LOD" name="physicslodtasks"/>
- <stat_bar label="Memoria Allocata" name="physicsmemoryallocated"/>
- <stat_bar label="Agenti Aggiornamenti al Sec" name="simagentups"/>
- <stat_bar label="Agenti Principali" name="simmainagents"/>
- <stat_bar label="Agenti Figli" name="simchildagents"/>
+ <stat_bar label="Memoria allocata" name="physicsmemoryallocated"/>
+ <stat_bar label="Aggiornamenti agenti al sec" name="simagentups"/>
+ <stat_bar label="Avatar principali" name="simmainagents"/>
+ <stat_bar label="Avatar secondari" name="simchildagents"/>
<stat_bar label="Oggetti" name="simobjects"/>
- <stat_bar label="Oggetti Attivi" name="simactiveobjects"/>
- <stat_bar label="Script Attivi" name="simactivescripts"/>
- <stat_bar label="Eventi Script" name="simscripteps"/>
- <stat_bar label="Pacchetti In Ingresso" name="siminpps"/>
- <stat_bar label="Pacchetti In Uscita" name="simoutpps"/>
- <stat_bar label="Download Pendenti" name="simpendingdownloads"/>
- <stat_bar label="Upload Pendenti" name="simpendinguploads"/>
- <stat_bar label="Numero totale byte non risposti" name="simtotalunackedbytes"/>
+ <stat_bar label="Oggetti attivi" name="simactiveobjects"/>
+ <stat_bar label="Script attivi" name="simactivescripts"/>
+ <stat_bar label="Eventi di script" name="simscripteps"/>
+ <stat_bar label="Pacchetti in ingresso" name="siminpps"/>
+ <stat_bar label="Pacchetti in uscita" name="simoutpps"/>
+ <stat_bar label="Download in attesa" name="simpendingdownloads"/>
+ <stat_bar label="Caricamenti in attesa" name="simpendinguploads"/>
+ <stat_bar label="Numero totale byte non confermati (Unacked)" name="simtotalunackedbytes"/>
</stat_view>
<stat_view label="Tempo (ms)" name="simperf">
- <stat_bar label="Tempo Totale Frame" name="simframemsec"/>
- <stat_bar label="Tempo Netto" name="simnetmsec"/>
- <stat_bar label="Tempo Motore Fisico" name="simsimphysicsmsec"/>
- <stat_bar label="Tempo Simulazione" name="simsimothermsec"/>
- <stat_bar label="Tempo Agenti" name="simagentmsec"/>
- <stat_bar label="Tempo Immagini" name="simimagesmsec"/>
- <stat_bar label="Tempo Script" name="simscriptmsec"/>
+ <stat_bar label="Tempo totale Frame" name="simframemsec"/>
+ <stat_bar label="Tempo netto" name="simnetmsec"/>
+ <stat_bar label="Tempo motore fisico" name="simsimphysicsmsec"/>
+ <stat_bar label="Tempo simulazione" name="simsimothermsec"/>
+ <stat_bar label="Tempo avatar" name="simagentmsec"/>
+ <stat_bar label="Tempo immagini" name="simimagesmsec"/>
+ <stat_bar label="Tempo script" name="simscriptmsec"/>
</stat_view>
</stat_view>
</container_view>
diff --git a/indra/newview/skins/default/xui/it/floater_sys_well.xml b/indra/newview/skins/default/xui/it/floater_sys_well.xml
index 057d3657d0..e1c0b89902 100644
--- a/indra/newview/skins/default/xui/it/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/it/floater_sys_well.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sys_well_window" title="NOTIFICHE">
+<floater name="sys_well_window" title="AVVISI">
<string name="title_im_well_window">
- SESSIONE IM
+ CONVERSAZIONI
</string>
<string name="title_notification_well_window">
- NOTIFICHE
+ AVVISI
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_telehub.xml b/indra/newview/skins/default/xui/it/floater_telehub.xml
index 08f5564c7b..15312a8959 100644
--- a/indra/newview/skins/default/xui/it/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/it/floater_telehub.xml
@@ -21,9 +21,9 @@
<button label="Aggiungi punti rigenerazione" name="add_spawn_point_btn" width="165"/>
<button label="Rimuovi punti" left="175" name="remove_spawn_point_btn" width="105"/>
<text name="spawn_point_help">
- Seleziona un oggetto e click &quot;Aggiungi Spawn&quot; per specificare la posizione.
+ Seleziona un oggetto e fai clic su Aggiungi per specificare la posizione.
Ora puoi spostare o cancellare l&apos;oggetto.
-Le Posizioni sono relative al centro del telehub.
+Le posizioni sono relative al centro del telehub.
Seleziona un oggetto nella lista per evidenziarlo nel mondo.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
index e57c37073a..7b77584ba0 100644
--- a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Foto: TEXTURE">
+<floater name="texture picker" title="PREFERITO: TEXTURE">
<string name="choose_picture">
Clicca per scegliere l&apos;immagine
</string>
<text name="Multiple">
- Textures multiple
+ Texture multiple
</text>
<text name="unknown">
- Misura: [Dimensions]
+ Dimensioni: [DIMENSIONS]
</text>
<button label="Default" label_selected="Default" name="Default"/>
<button label="Niente" label_selected="Niente" name="None"/>
<button label="Vuoto" label_selected="Vuoto" name="Blank"/>
<check_box label="Mostra cartelle" name="show_folders_check"/>
- <search_editor label="Filtro Textures" name="inventory search editor"/>
- <check_box label="Applica ora" name="apply_immediate_check"/>
+ <search_editor label="Filtro texture" name="inventory search editor"/>
+ <check_box label="Applica adesso" name="apply_immediate_check"/>
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
- <button label="Ok" label_selected="Ok" name="Select"/>
+ <button label="OK" label_selected="OK" name="Select"/>
<string name="pick title">
Scegli:
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index dda957025b..6ad8d68df2 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" short_title="STRUMENTI/ATTREZZI PER COSTRUIRE" title="" width="288">
+<floater name="toolbox floater" short_title="STRUMENTI PER COSTRUZIONE" title="" width="288">
<floater.string name="status_rotate">
Sposta le fasce colorate per ruotare l&apos;oggetto
</floater.string>
@@ -16,7 +16,7 @@
Clicca e trascina per spostare la camera
</floater.string>
<floater.string name="status_grab">
- Trascina per spostare, Ctrl per sollevare, Ctrl+Shift per ruotare
+ Trascina per spostare, Ctrl per sollevare, Ctrl+Maiusc per ruotare
</floater.string>
<floater.string name="status_place">
Clicca inworld per costruire
@@ -50,32 +50,32 @@
<radio_group name="focus_radio_group">
<radio_item label="Zoom" name="radio zoom"/>
<radio_item label="Guarda ruotando (Ctrl)" name="radio orbit"/>
- <radio_item label="Panoramica (Ctrl+Shift)" name="radio pan"/>
+ <radio_item label="Panoramica (Ctrl+Maiusc)" name="radio pan"/>
</radio_group>
<radio_group name="move_radio_group">
<radio_item label="Muovi" name="radio move"/>
<radio_item label="Alza (Ctrl)" name="radio lift"/>
- <radio_item label="Ruota (Ctrl+Shift)" name="radio spin"/>
+ <radio_item label="Gira (Ctrl+Maiusc)" name="radio spin"/>
</radio_group>
<radio_group name="edit_radio_group">
<radio_item label="Sposta" name="radio position"/>
<radio_item label="Ruota (Ctrl)" name="radio rotate"/>
- <radio_item label="Estendi/Stira???!!!! (Ctrl+Shift)" name="radio stretch"/>
- <radio_item label="Seleziona Faccia multimediale" name="radio select face"/>
+ <radio_item label="Allunga (Ctrl+Maiusc)" name="radio stretch"/>
+ <radio_item label="Seleziona faccia" name="radio select face"/>
</radio_group>
<check_box label="Modifica parti collegate" name="checkbox edit linked parts"/>
- <text name="RenderingCost" tool_tip="Mostra il rendering cost calcolato per questo oggetto">
+ <text name="RenderingCost" tool_tip="Mostra il costo di rendering calcolato per questo oggetto">
þ: [COUNT]
</text>
<check_box label="Ridimens. simmetricamente" name="checkbox uniform"/>
<check_box initial_value="true" label="Ridimensiona le texture" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Posiziona nella rete???!!!" name="checkbox snap to grid"/>
+ <check_box initial_value="true" label="Posiziona nella griglia" name="checkbox snap to grid"/>
<combo_box left_delta="48" name="combobox grid mode" tool_tip="Scegli il tipo di righello per posizionare l&apos;oggetto">
- <combo_box.item label="Rete del Mondo" name="World"/>
+ <combo_box.item label="Rete del mondo" name="World"/>
<combo_box.item label="Rete locale" name="Local"/>
- <combo_box.item label="Riferimento della rete???!!!!" name="Reference"/>
+ <combo_box.item label="Griglia di riferimento" name="Reference"/>
</combo_box>
- <button label="Opzioni..." label_selected="Opzioni..." name="Options..." tool_tip="Vedi più opzioni delle rete"/>
+ <button label="Opzioni..." 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"/>
@@ -91,10 +91,10 @@
<button label="" label_selected="" name="ToolRing" tool_tip="Anello"/>
<button label="" label_selected="" name="ToolTree" tool_tip="Albero"/>
<button label="" label_selected="" name="ToolGrass" tool_tip="Erba"/>
- <check_box label="Mantieni lo strumento/attrezzo selezionato" name="checkbox sticky"/>
- <check_box label="Seleziona la Copia" name="checkbox copy selection"/>
- <check_box initial_value="true" label="Centra la Copia" name="checkbox copy centers"/>
- <check_box label="Ruotare la Copia" name="checkbox copy rotates"/>
+ <check_box label="Mantieni lo strumento selezionato" name="checkbox sticky"/>
+ <check_box label="Copia la selezione" name="checkbox copy selection"/>
+ <check_box initial_value="true" label="Centra la copia" name="checkbox copy centers"/>
+ <check_box label="Ruota la copia" name="checkbox copy rotates"/>
<radio_group name="land_radio_group">
<radio_item label="Seleziona il terreno" name="radio select land"/>
<radio_item label="Appiattisci" name="radio flatten"/>
@@ -114,26 +114,26 @@
<text name="Strength:">
Potenza
</text>
- <button label="Applica" label_selected="Applica" left="146" name="button apply to selection" tool_tip="Modifica la terra selezionata"/>
+ <button label="Applica" label_selected="Applica" left="146" name="button apply to selection" tool_tip="Modifica il terreno selezionato"/>
<text left="134" name="obj_count">
Oggetti: [COUNT]
</text>
<text left="134" name="prim_count">
- Prims: [COUNT]
+ Prim: [COUNT]
</text>
<tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30" width="288">
<panel label="Generale" name="General">
<panel.string name="text deed continued">
- Intesta
+ Cessione
</panel.string>
<panel.string name="text deed">
Cedi al gruppo
</panel.string>
<panel.string name="text modify info 1">
- Puoi modificare questo oggetto
+ Tu puoi modificare questo oggetto
</panel.string>
<panel.string name="text modify info 2">
- Puoi modificare questi oggetti
+ Tu puoi modificare questi oggetti
</panel.string>
<panel.string name="text modify info 3">
Non puoi modificare questo oggetto
@@ -148,10 +148,10 @@
Prezzo: L$
</panel.string>
<panel.string name="Cost Total">
- Prezzo Totale: L$
+ Prezzo totale: L$
</panel.string>
<panel.string name="Cost Per Unit">
- Prezzo per Unità: L$
+ Prezzo per: L$
</panel.string>
<panel.string name="Cost Mixed">
Prezzo misto
@@ -180,20 +180,20 @@
<text name="Group:">
Gruppo:
</text>
- <button label="Imposta..." label_selected="Imposta..." name="button set group" tool_tip="Scegli un gruppo per condividere i permessi di questo oggetto"/>
- <name_box initial_value="Caricando..." name="Group Name Proxy"/>
- <button label="Intesta" label_selected="Intesta" left_delta="152" name="button deed" tool_tip="Intestando permette di regalare questo oggetto con i permessi del prossimo proprietario. Gli oggetti condivisi dal gruppo posso essere instestati solo da un officer del gruppo." width="98"/>
- <check_box label="Condividi" name="checkbox share with group" tool_tip="Permetti ai membri del gruppo selezionato di condividere i tuoi permessi modify per questo oggetto. Tu devi Intestare per attivare le restrizioni al ruolo."/>
+ <button label="Imposta..." label_selected="Imposta..." name="button set group" tool_tip="Scegli un gruppo con cui condividere i diritti relativi all&apos;oggetto"/>
+ <name_box initial_value="Caricamento in corso..." name="Group Name Proxy"/>
+ <button label="Cessione" label_selected="Cessione" left_delta="152" name="button deed" tool_tip="Con una cessione si trasferisce il bene con i diritti al proprietario successivo Gli oggetti in proprietà condivisa di gruppo possono essere ceduti soltanto da un funzionario del gruppo." width="98"/>
+ <check_box label="Condividi" name="checkbox share with group" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/>
<text name="label click action" width="220">
- Clicca:
+ Fai clic per:
</text>
<combo_box name="clickaction" width="192">
- <combo_box.item label="Tocca (default)" name="Touch/grab(default)"/>
+ <combo_box.item label="Tocca (predefinito)" name="Touch/grab(default)"/>
<combo_box.item label="Siediti sull&apos;oggetto" name="Sitonobject"/>
<combo_box.item label="Compra l&apos;oggetto" name="Buyobject"/>
<combo_box.item label="Paga l&apos;oggetto" name="Payobject"/>
<combo_box.item label="Apri" name="Open"/>
- <combo_box.item label="Zoom" name="Zoom"/>
+ <combo_box.item label="Ingrandisci" name="Zoom"/>
</combo_box>
<check_box label="In vendita:" name="checkbox for sale"/>
<combo_box name="sale type">
@@ -205,7 +205,7 @@
<check_box label="Mostra nella ricerca" name="search_check" tool_tip="Permetti che l&apos;oggetto sia visibile nella ricerca"/>
<panel name="perms_build">
<text name="perm_modify">
- Puoi modificare questo oggetto
+ Tu puoi modificare questo oggetto
</text>
<text name="Anyone can:">
Chiunque:
@@ -213,11 +213,11 @@
<check_box label="Sposta" name="checkbox allow everyone move"/>
<check_box label="Copia" name="checkbox allow everyone copy"/>
<text name="Next owner can:">
- Prossimo proprietario:
+ Proprietario successivo:
</text>
<check_box label="Modificare" name="checkbox next owner can modify"/>
<check_box label="Copiare" left_delta="80" name="checkbox next owner can copy"/>
- <check_box label="Transfer" left_delta="67" name="checkbox next owner can transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
+ <check_box label="Trasferisci" left_delta="67" name="checkbox next owner can transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
<text name="B:">
B:
</text>
@@ -241,7 +241,7 @@
<panel label="Oggetto" name="Object">
<check_box label="Bloccato" name="checkbox locked" tool_tip="Previene lo spostamento o la cancellazione dell&apos;oggetto. Spesso utile mentre si costruisce per evitare involontarie modifiche."/>
<check_box label="Fisico" name="Physical Checkbox Ctrl" tool_tip="Permette all&apos;oggetto di essere spostato e di subire gli effetti della gravità"/>
- <check_box label="Temporaneo" name="Temporary Checkbox Ctrl" tool_tip="Causa la cancellazione dell&apos;oggetto 1 minuto dopo la sua creazione"/>
+ <check_box label="Temporaneo" name="Temporary Checkbox Ctrl" tool_tip="Determina la cancellazione dell&apos;oggetto 1 minuto dopo la sua creazione"/>
<check_box label="Fantasma" name="Phantom Checkbox Ctrl" tool_tip="Rende l&apos;oggetto penetrabile dagli altri oggetti e dagli avatars"/>
<text name="label position">
Posizione (metri)
@@ -281,7 +281,7 @@
<combo_box.item label="Gomma" name="Rubber"/>
</combo_box>
<text name="text cut">
- Riduci una sezione (begin/end)
+ Riduci una sezione (inizio/fine)
</text>
<spinner label="I" name="cut begin"/>
<spinner label="F" name="cut end"/>
@@ -301,7 +301,7 @@
<combo_box.item label="Triangolare" name="Triangle"/>
</combo_box>
<text name="text twist">
- Attorciglia (begin/end)
+ Attorciglia (inizio/fine)
</text>
<spinner label="I" name="Twist Begin"/>
<spinner label="F" name="Twist End"/>
@@ -319,13 +319,13 @@
<spinner label="X" name="Shear X"/>
<spinner label="Y" name="Shear Y"/>
<text name="advanced_cut" width="149">
- Riduci un bordo (begin/end)
+ Riduci un bordo (inizio/fine)
</text>
<text name="advanced_dimple">
- Fossetta???!!!! (begin/end)
+ Scava (inizio/fine)
</text>
<text name="advanced_slice">
- Taglia???!!! (begin/end)
+ Taglia (inizio/fine)
</text>
<spinner label="I" name="Path Limit Begin"/>
<spinner label="F" name="Path Limit End"/>
@@ -361,7 +361,7 @@
<text name="edit_object">
Modifica le caratteristiche dell&apos;oggetto:
</text>
- <check_box label="Flessibilità" name="Flexible1D Checkbox Ctrl" tool_tip="Permetti all&apos;oggetto di flettersi lungo l&apos;asse Z (Client-side only)"/>
+ <check_box label="Flessibilità" name="Flexible1D Checkbox Ctrl" tool_tip="Consenti all&apos;oggetto di flettersi lungo l&apos;asse Z (solo lato client)"/>
<spinner label="Morbidezza" label_width="72" name="FlexNumSections" width="135"/>
<spinner label="Gravità" label_width="72" name="FlexGravity" width="135"/>
<spinner label="Elasticità" label_width="72" name="FlexFriction" width="135"/>
@@ -372,11 +372,11 @@
<spinner label="Forza Z" label_width="72" name="FlexForceZ" width="135"/>
<check_box label="Luce" name="Light Checkbox Ctrl" tool_tip="Imposta l&apos;oggetto come sorgente di luce"/>
<color_swatch label="" name="colorswatch" tool_tip="Clicca per aprire il selettore dei colori"/>
- <texture_picker label="" name="light texture control" tool_tip="Clicca per scegliere una proiezione dell&apos;immagine (funziona solo con deferred rendering attivato)"/>
+ <texture_picker label="" name="light texture control" tool_tip="Clicca per scegliere un&apos;immagine da proiettare (funziona solo con il rendering differito attivato)"/>
<spinner label="Intensità" label_width="72" name="Light Intensity" width="135"/>
- <spinner label="FOV" name="Light FOV"/>
+ <spinner label="Angolo di vista" name="Light FOV"/>
<spinner label="Raggio" label_width="72" name="Light Radius" width="135"/>
- <spinner label="Focus" name="Light Focus"/>
+ <spinner label="Centro focale" name="Light Focus"/>
<spinner label="Attenuazione" label_width="72" name="Light Falloff" width="135"/>
<spinner label="Atmosfera" name="Light Ambiance"/>
</panel>
@@ -395,8 +395,7 @@
<text name="glow label">
Bagliore
</text>
- <check_box bottom_delta="-21" label="Massima
-luminosità" name="checkbox fullbright"/>
+ <check_box bottom_delta="-21" label="Massima luminosità" name="checkbox fullbright"/>
<text name="tex gen">
Applicazione
della texture
@@ -438,32 +437,32 @@ della texture
<combo_box.item label="Trama" name="weave"/>
</combo_box>
<text name="tex scale">
- Ripeti / Lato
+ Ripetizioni / Faccia
</text>
<spinner label="Orizzontale (U)" name="TexScaleU"/>
<check_box label="Inverti" name="checkbox flip s"/>
<spinner label="Verticale (V)" name="TexScaleV"/>
<check_box label="Inverti" name="checkbox flip t"/>
- <spinner label="RotazioneËš" left="120" name="TexRot" width="60"/>
- <spinner label="Ripete / Metri" left="120" name="rptctrl" width="60"/>
- <button label="Applica" label_selected="Applica" left_delta="72" name="button apply"/>
+ <spinner label="RotazioneËš" name="TexRot" />
+ <spinner label="Ripetizioni / Metro" name="rptctrl" />
+ <button label="Applica" label_selected="Applica" name="button apply"/>
<text name="tex offset">
- Bilanciamento della Texture
+ Bilanciamento della texture
</text>
<spinner label="Orizzontale (U)" name="TexOffsetU"/>
<spinner label="Verticale (V)" name="TexOffsetV"/>
<panel name="Add_Media">
<text name="media_tex">
- Media
+ Multimediale
</text>
- <button name="add_media" tool_tip="Aggiungi Media"/>
+ <button name="add_media" tool_tip="Aggiungi media"/>
<button name="delete_media" tool_tip="Cancella questa media texture"/>
- <button name="edit_media" tool_tip="Modifica questo Media"/>
- <button label="Alllinea" label_selected="Allinea Media" name="button align" tool_tip="Allinea media texture (must load first)"/>
+ <button name="edit_media" tool_tip="Modifica questo media"/>
+ <button label="Alllinea" label_selected="Allinea media" name="button align" tool_tip="Allinea texture del media (il caricamento deve prima essere completato)"/>
</panel>
</panel>
<panel label="Contenuto" name="Contents">
- <button label="Nuovo Script" label_selected="Nuovo Script" name="button new script"/>
+ <button label="Nuovo Script" label_selected="Nuovo script" name="button new script"/>
<button label="Permessi" name="button permissions"/>
</panel>
</tab_container>
@@ -472,29 +471,22 @@ della texture
Informazioni sul terreno
</text>
<text name="label_area_price">
- Prezzo: L$[PRICE] per [AREA] m²
+ Prezzo: L$ [PRICE] per [AREA] m²
</text>
<text name="label_area">
- Area: [AREA] m²
+ Zona: [AREA] m²
</text>
- <button label="Info sul terreno" label_selected="Info sul terreno" name="button about land" width="156"/>
- <check_box label="Mostra i proprietari" name="checkbox show owners" tool_tip="Colora i terreni in base ai loro proprietari:
-
-Verde = il tuo terreno
-Acqua = la terra del tuo gruppo
-Rosso = posseduta da altri
-Giallo = in vendita
-Viola = in asta
-Grigia = pubblica"/>
+ <button label="Informazioni sui terreni" label_selected="Informazioni sui terreni" name="button about land" width="156"/>
+ <check_box label="Mostra i proprietari" name="checkbox show owners" tool_tip="Colora i terreni in base ai loro proprietari: Verde = il tuo terreno Acqua = la terra del tuo gruppo Rosso = posseduta da altri Giallo = in vendita Viola = in asta Grigia = pubblica"/>
<text name="label_parcel_modify">
Modifica il terreno
</text>
<button label="Suddividi" label_selected="Suddividi" name="button subdivide land" width="156"/>
- <button label="Aderisci" label_selected="Aderisci" name="button join land" width="156"/>
+ <button label="Iscriviti" label_selected="Iscriviti" name="button join land" width="156"/>
<text name="label_parcel_trans">
- Transazioni del territorio
+ Transazioni terreno
</text>
- <button label="Compra la Terra" label_selected="Compra la Terra" name="button buy land" width="156"/>
- <button label="Abbandona la Terra" label_selected="Abbandona la Terra" name="button abandon land" width="156"/>
+ <button label="Acquista terreno" label_selected="Acquista terreno" name="button buy land" width="156"/>
+ <button label="Abbandona il terreno" label_selected="Abbandona il terreno" name="button abandon land" width="156"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_top_objects.xml b/indra/newview/skins/default/xui/it/floater_top_objects.xml
index 8f7f3e060a..939c5e83a0 100644
--- a/indra/newview/skins/default/xui/it/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/it/floater_top_objects.xml
@@ -1,58 +1,59 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="top_objects" title="Oggetti principali">
+ <floater.string name="top_scripts_title">
+ Script pesanti
+ </floater.string>
+ <floater.string name="top_scripts_text">
+ [COUNT] script richiedono un totale di [TIME] ms
+ </floater.string>
+ <floater.string name="scripts_score_label">
+ Ora
+ </floater.string>
+ <floater.string name="scripts_mono_time_label">
+ Ora &apos;Mono&apos;
+ </floater.string>
+ <floater.string name="top_colliders_title">
+ Oggetti con maggiori collisioni
+ </floater.string>
+ <floater.string name="top_colliders_text">
+ I [COUNT] oggetti che sperimentano il maggior numero di collisioni
+ </floater.string>
+ <floater.string name="colliders_score_label">
+ Punteggio
+ </floater.string>
+ <floater.string name="none_descriptor">
+ Nulla di rilevato.
+ </floater.string>
<text name="title_text">
In caricamento...
</text>
<scroll_list name="objects_list">
- <column label="Punteggio" name="score" width="84"/>
- <column label="Nome" name="name" width="84"/>
- <column label="Proprietario" name="owner" width="84"/>
- <column label="Ubicazione" name="location" width="84"/>
- <column label="Ora" name="time" width="84"/>
- <column label="Ora (Mono)" name="mono_time" width="84"/>
+ <scroll_list.columns label="Punteggio" name="score" width="84"/>
+ <scroll_list.columns label="Nome" name="name" width="84"/>
+ <scroll_list.columns label="Proprietario" name="owner" width="84"/>
+ <scroll_list.columns label="Ubicazione" name="location" width="84"/>
+ <scroll_list.columns label="Ora" name="time" width="84"/>
+ <scroll_list.columns label="Ora (Mono)" name="mono_time" width="84"/>
+ <scroll_list.columns label="URL" name="URLs"/>
</scroll_list>
- <line_editor font="SansSerifSmall" left="90" name="id_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="90" name="object_name_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="90" name="owner_name_editor" width="280"/>
<text name="id_text">
ID oggetto:
</text>
+ <line_editor font="SansSerifSmall" left="90" name="id_editor" width="280"/>
<button label="Mostra segnali luminosi" name="show_beacon_btn" width="150"/>
<text name="obj_name_text">
Nome dell&apos;oggetto:
</text>
+ <line_editor font="SansSerifSmall" left="90" name="object_name_editor" width="280"/>
<button label="Filtro" name="filter_object_btn" width="150"/>
<text name="owner_name_text">
Proprietario:
</text>
+ <line_editor font="SansSerifSmall" left="90" name="owner_name_editor" width="280"/>
<button label="Filtro" name="filter_owner_btn" width="150"/>
+ <button label="Aggiorna" name="refresh_btn" width="150"/>
<button label="Restituisci selezionato" name="return_selected_btn" width="150"/>
<button label="Restituisci tutti" left="170" name="return_all_btn"/>
<button label="Disabilita selezionato" name="disable_selected_btn" width="150"/>
<button label="Disabilita per tutti" left="170" name="disable_all_btn"/>
- <button label="Aggiorna" name="refresh_btn" width="150"/>
- <string name="top_scripts_title">
- Script pesanti
- </string>
- <string name="top_scripts_text">
- [COUNT] script richiedono un totale di [TIME] ms
- </string>
- <string name="scripts_score_label">
- Ora
- </string>
- <string name="scripts_mono_time_label">
- Ora &apos;Mono&apos;
- </string>
- <string name="top_colliders_title">
- Oggetti con maggiori collisioni
- </string>
- <string name="top_colliders_text">
- I [COUNT] oggetti che sperimentano il maggior numero di collisioni
- </string>
- <string name="colliders_score_label">
- Punteggio
- </string>
- <string name="none_descriptor">
- Nulla di rilevato.
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_tos.xml b/indra/newview/skins/default/xui/it/floater_tos.xml
index f3f8072f56..a11ccdc3af 100644
--- a/indra/newview/skins/default/xui/it/floater_tos.xml
+++ b/indra/newview/skins/default/xui/it/floater_tos.xml
@@ -2,9 +2,9 @@
<floater name="modal container" title="">
<button label="Continua" label_selected="Continua" name="Continue"/>
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
- <check_box label="Accetto i Termini di Servizio" name="agree_chk"/>
+ <check_box label="Accetto i Termini del servizio e le Regole sulla privacy" name="agree_chk"/>
<text name="tos_heading">
- Per favore leggi attentamente i seguenti Termini di Servizio. Per continuare il log in [SECOND_LIFE], devi accettare le condizioni.
+ Sei pregato di leggere attentamente i Termini del servizio e le Regole sulla privacy di seguito. Per continuare l&apos;accesso a [SECOND_LIFE], devi accettare le condizioni.
</text>
<text_editor name="tos_text">
TOS_TEXT
diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
index e4c54d44eb..07368da0dd 100644
--- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
@@ -1,25 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="Controlli del Voice">
+<floater name="floater_voice_controls" title="Regolazione voce">
<string name="title_nearby">
- VOICE NEI DINTORNI
+ VOCE NEI DINTORNI
</string>
<string name="title_group">
- Chiamata di Gruppo con [GROUP]
+ Chiamata di gruppo con [GROUP]
</string>
<string name="title_adhoc">
- Conference Call
+ Chiamata in conferenza
</string>
<string name="title_peer_2_peer">
- Chiama con [NAME]
+ Chiamata con [NAME]
</string>
<string name="no_one_near">
- Nessuno vicino
+ Nessuno nei dintorni ha attivato la funzione voce
</string>
- <panel name="control_panel">
- <layout_stack>
- <layout_panel name="leave_btn_panel">
- <button label="Chiudi Chiamata" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="my_call_stack">
+ <layout_panel name="my_panel">
+ <text name="user_text" value="Il mio avatar:"/>
+ </layout_panel>
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Abbandona chiamata" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml
index d2849440d6..c6ab646fbf 100644
--- a/indra/newview/skins/default/xui/it/floater_water.xml
+++ b/indra/newview/skins/default/xui/it/floater_water.xml
@@ -8,7 +8,7 @@
<button label="Salva" label_selected="Salva" name="WaterSavePreset"/>
<button label="Cancella" label_selected="Cancella" name="WaterDeletePreset"/>
<tab_container name="Water Tabs">
- <panel label="Impostazioni" name="Settings">
+ <panel label="IMPOSTAZIONI" name="Settings">
<text name="BHText">
Colore della nebbiosità dell&apos;acqua
</text>
@@ -62,7 +62,7 @@
</text>
<button label="?" left="650" name="WaterBlurMultiplierHelp"/>
</panel>
- <panel label="Immagine" name="Waves">
+ <panel label="IMMAGINE" name="Waves">
<text name="BHText">
Direzione della grande onda
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml
index dcb7620bd5..7c3754f004 100644
--- a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml
@@ -3,7 +3,7 @@
<button label="Salva" label_selected="Salva" name="Save"/>
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
<text name="Save item as:">
- Salva oggetto come:
+ Salva oggetto nel mio inventario come:
</text>
<line_editor name="name ed">
Nuovo [DESC]
diff --git a/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml
index 6d68db058d..9abc968b94 100644
--- a/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml
+++ b/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="whitelist_entry">
+<floater name="whitelist_entry" title="VOCE DELLA LISTA BIANCA">
<text name="media_label">
Inserisci un URL o una configurazione URL da aggiungere alla lista dei domini permessi
</text>
<line_editor name="whitelist_entry" tool_tip="Inserisci un URL o una configurazione URL alla lista bianca"/>
<button label="OK" name="ok_btn"/>
- <button label="Cancella" name="cancel_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_windlight_options.xml b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
index e86d656e39..1f6f0fab58 100644
--- a/indra/newview/skins/default/xui/it/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
@@ -4,15 +4,15 @@
Cieli predefiniti:
</text>
<button label="Nuovo" label_selected="Nuovo" name="WLNewPreset"/>
- <button label="Salva" label_selected="Salva" name="WLSavePreset" left_delta="72"/>
- <button label="Elimina" label_selected="Elimina" name="WLDeletePreset" left_delta="72"/>
- <button font="SansSerifSmall" width="165" left_delta="85" label="Editor del ciclo giorno/notte" label_selected="Editor del ciclo giorno/notte" name="WLDayCycleMenuButton"/>
+ <button label="Salva" label_selected="Salva" left_delta="72" name="WLSavePreset"/>
+ <button label="Elimina" label_selected="Elimina" left_delta="72" name="WLDeletePreset"/>
+ <button font="SansSerifSmall" label="Editor del ciclo giorno/notte" label_selected="Editor del ciclo giorno/notte" left_delta="85" name="WLDayCycleMenuButton" width="165"/>
<tab_container name="WindLight Tabs">
- <panel label="Atmosfera" name="Atmosphere">
+ <panel label="ATMOSFERA" name="Atmosphere">
<text name="BHText">
Blu dell&apos;Orizzonte
</text>
- <button label="?" name="WLBlueHorizonHelp" left="189"/>
+ <button label="?" left="189" name="WLBlueHorizonHelp"/>
<text name="BHText2">
R
</text>
@@ -25,14 +25,14 @@
<text name="BHText5">
I
</text>
- <text name="BDensText" font="SansSerifSmall">
+ <text font="SansSerifSmall" name="BDensText">
Altezza della Foschia all&apos;Orizzonte
</text>
- <button label="?" name="WLHazeHorizonHelp" left="189" />
+ <button label="?" left="189" name="WLHazeHorizonHelp"/>
<text name="BDensText2">
Densità del Blu
</text>
- <button label="?" name="WLBlueDensityHelp" />
+ <button label="?" name="WLBlueDensityHelp"/>
<text name="BHText6">
R
</text>
@@ -52,17 +52,17 @@
<text name="DensMultText">
Moltiplicatore di Densità
</text>
- <button label="?" name="WLDensityMultHelp" left="645"/>
+ <button label="?" left="645" name="WLDensityMultHelp"/>
<text name="WLDistanceMultText">
Moltiplicatore della Distanza
</text>
- <button label="?" name="WLDistanceMultHelp" left="645"/>
+ <button label="?" left="645" name="WLDistanceMultHelp"/>
<text name="MaxAltText">
Altitudine Massima
</text>
- <button label="?" name="WLMaxAltitudeHelp" left="645"/>
+ <button label="?" left="645" name="WLMaxAltitudeHelp"/>
</panel>
- <panel label="Illuminazione" name="Lighting">
+ <panel label="ILLUMINAZIONE" name="Lighting">
<text name="SLCText">
Colore Sole/Luna
</text>
@@ -118,7 +118,7 @@
</text>
<button label="?" name="WLStarBrightnessHelp"/>
</panel>
- <panel label="Nuvole" name="Clouds">
+ <panel label="NUVOLE" name="Clouds">
<text name="WLCloudColorText">
Colore delle Nuvole
</text>
@@ -151,15 +151,15 @@
<text name="WLCloudCoverageText">
Copertura delle Nuvole
</text>
- <button label="?" name="WLCloudCoverageHelp" left="415"/>
+ <button label="?" left="415" name="WLCloudCoverageHelp"/>
<text name="WLCloudScaleText">
Altitudine delle Nuvole
</text>
- <button label="?" name="WLCloudScaleHelp" left="415"/>
+ <button label="?" left="415" name="WLCloudScaleHelp"/>
<text name="WLCloudDetailText">
Dettagli Nuvole (XY/ Densità)
</text>
- <button label="?" name="WLCloudDetailHelp" left="415"/>
+ <button label="?" left="415" name="WLCloudDetailHelp"/>
<text name="BHText8">
X
</text>
@@ -180,7 +180,7 @@
<button label="?" name="WLCloudScrollYHelp"/>
<check_box label="Blocca" name="WLCloudLockY"/>
<check_box label="Mostra le Nuvole Classiche" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp" left="645"/>
+ <button label="?" left="645" name="WLClassicCloudsHelp"/>
</panel>
</tab_container>
<string name="WLDefaultSkyNames">
diff --git a/indra/newview/skins/default/xui/it/floater_window_size.xml b/indra/newview/skins/default/xui/it/floater_window_size.xml
new file mode 100644
index 0000000000..036b74b7d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_window_size.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="window_size" title="DIMENSIONE FINESTRA">
+ <string name="resolution_format">
+ [RES_X] x [RES_Y]
+ </string>
+ <text name="windowsize_text">
+ Imposta dimensione finestra:
+ </text>
+ <combo_box name="window_size_combo" tool_tip="larghezza x altezza">
+ <combo_box.item label="1000 x 700 (default)" name="item0"/>
+ <combo_box.item label="1024 x 768" name="item1"/>
+ <combo_box.item label="1280 x 720 (720p)" name="item2"/>
+ <combo_box.item label="1920 x 1080 (1080p)" name="item3"/>
+ </combo_box>
+ <button label="Imposta" name="set_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_world_map.xml b/indra/newview/skins/default/xui/it/floater_world_map.xml
index a672df0d96..31d7a8df9e 100644
--- a/indra/newview/skins/default/xui/it/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/it/floater_world_map.xml
@@ -5,66 +5,66 @@
Legenda
</text>
</panel>
- <panel>
- <button font="SansSerifSmall" label="Mostra la mia posizione" label_selected="Mostra la mia posizione" left_delta="91" name="Show My Location" tool_tip="Centra la mappa sul luogo dove si trova il mio avatar" width="135"/>
- <text name="person_label">
+ <panel name="layout_panel_2">
+ <button name="Show My Location" tool_tip="Centra la mappa sulla posizione del mio avatar"/>
+ <text name="me_label">
Io
</text>
- <check_box label="Residenti" name="people_chk"/>
- <check_box label="Punto informativo" name="infohub_chk"/>
+ <text name="person_label">
+ Persona
+ </text>
<text name="infohub_label">
Infohub
</text>
- <check_box bottom="-170" label="Terra in vendita" name="land_for_sale_chk"/>
- <icon bottom="-170" name="landforsale"/>
<text name="land_sale_label">
- Vendita di terra
+ Vendita terreno
+ </text>
+ <text name="by_owner_label">
+ da parte del proprietario
</text>
<text name="auction_label">
- per conto del proprietario
+ asta di terreni
</text>
- <button label="Vai a Casa" label_selected="Vai a Casa" name="Go Home" tool_tip="Teleport a casa mia"/>
+ <button name="Go Home" tool_tip="Teleport a casa"/>
<text name="Home_label">
- Casa
+ Home
</text>
<text name="events_label">
Eventi:
</text>
- <check_box label="PG" name="event_chk"/>
- <check_box initial_value="true" label="Mature" name="event_mature_chk"/>
+ <text name="pg_label">
+ Generale
+ </text>
+ <check_box initial_value="vero" name="event_mature_chk"/>
<text name="mature_label">
- Mature
+ Moderato
+ </text>
+ <text name="adult_label">
+ Adulto
</text>
- <check_box label="Adult" name="event_adult_chk"/>
</panel>
- <panel>
+ <panel name="layout_panel_3">
<text name="find_on_map_label">
- Trova sulla Mappa
+ Trova sulla mappa
</text>
</panel>
- <panel>
- <combo_box label="Amici Online" name="friend combo" tool_tip="Mostra amici sulla mappa">
- <combo_box.item label="Miei Amici Online" name="item1"/>
+ <panel name="layout_panel_4">
+ <combo_box label="Amici online" name="friend combo" tool_tip="Mostra amici sulla mappa">
+ <combo_box.item label="I miei amici online" name="item1"/>
</combo_box>
- <combo_box label="Miei Landmarks" name="landmark combo" tool_tip="Landmark da mostrare sulla mappa">
- <combo_box.item label="Miei Landmarks" name="item1"/>
+ <combo_box label="I miei punti di riferimento" name="landmark combo" tool_tip="Punto di riferimento da mostrare sulla mappa">
+ <combo_box.item label="I miei punti di riferimento" name="item1"/>
</combo_box>
- <search_editor label="Regione per nome" name="location" tool_tip="Scrivi il nome di una regione"/>
- <button label="Trova" name="DoSearch" tool_tip="Cerca regione"/>
- <scroll_list bottom_delta="-310" height="304" name="search_results">
- <scroll_list.columns label="" name="icon"/>
- <scroll_list.columns label="" name="sim_name"/>
- </scroll_list>
- <button font="SansSerifSmall" label="Teletrasporto" label_selected="Teletrasporto" name="Teleport" tool_tip="Teletrasporto al luogo prescelto"/>
- <button font="SansSerifSmall" label="Copia SLurl" name="copy_slurl" tool_tip="Copia il luogo attuale come SLurl per essere usato nel web."/>
- <button font="SansSerifSmall" label="Mostra Selezione" label_selected="Mostra destinazione" left_delta="91" name="Show Destination" tool_tip="Centra la mappa sul luogo prescelto" width="135"/>
+ <search_editor label="Regioni secondo il nome" name="location" tool_tip="Digita il nome di una regione"/>
+ <button label="Trova" name="DoSearch" tool_tip="Cerca la regione"/>
+ <button name="Clear" tool_tip="Elimina le linee di monitoraggio e reimposta la mappa"/>
+ <button label="Teleport" name="Teleport" tool_tip="Teleport al luogo selezionato"/>
+ <button label="Copia SLurl" name="copy_slurl" tool_tip="Copia la posizione attuale come un SLurl da usare nel Web."/>
+ <button label="Mostra la selezione" name="Show Destination" tool_tip="Centra la mappa sul luogo selezionato"/>
</panel>
- <panel>
+ <panel name="layout_panel_5">
<text name="zoom_label">
- Zoom
+ Ingrandisci
</text>
</panel>
- <panel>
- <slider label="Zoom" name="zoom slider"/>
- </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/inspect_avatar.xml b/indra/newview/skins/default/xui/it/inspect_avatar.xml
index 61f7a69234..ec5561a5b2 100644
--- a/indra/newview/skins/default/xui/it/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/it/inspect_avatar.xml
@@ -5,17 +5,17 @@
-->
<floater name="inspect_avatar">
<string name="Subtitle">
- [ETA&apos;]
+ [AGE]
</string>
<string name="Details">
- [PROFILO_SL]
+ [SL_PROFILE]
</string>
- <slider name="volume_slider" tool_tip="Volume del Voice" value="0.5"/>
- <button label="Aggiungi Amico" name="add_friend_btn"/>
+ <slider name="volume_slider" tool_tip="Volume voce" value="0.5"/>
+ <button label="Aggiungi amico" name="add_friend_btn"/>
<button label="IM" name="im_btn"/>
- <button label="Di più" name="view_profile_btn"/>
+ <button label="Profilo" name="view_profile_btn"/>
<panel name="moderator_panel">
- <button label="Disattiva il Voice" name="disable_voice"/>
- <button label="Attiva Voice" name="enable_voice"/>
+ <button label="Disattiva voce" name="disable_voice"/>
+ <button label="Attiva voce" name="enable_voice"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/inspect_group.xml b/indra/newview/skins/default/xui/it/inspect_group.xml
index d7b86fdbcb..2416f4bb12 100644
--- a/indra/newview/skins/default/xui/it/inspect_group.xml
+++ b/indra/newview/skins/default/xui/it/inspect_group.xml
@@ -5,18 +5,18 @@
-->
<floater name="inspect_group">
<string name="PrivateGroup">
- Gruppo Privato
+ Gruppo privato
</string>
<string name="FreeToJoin">
Adesione libera
</string>
<string name="CostToJoin">
- L$[AMOUNT] per aderire
+ L$ [AMOUNT] per aderire
</string>
<string name="YouAreMember">
- Tu sei un Membro
+ Tu sei un iscritto
</string>
- <button label="Aderire" name="join_btn"/>
- <button label="Abbandona" name="leave_btn"/>
- <button label="Vedi Profilo" name="view_profile_btn"/>
+ <button label="Iscriviti" name="join_btn"/>
+ <button label="Chiudi" name="leave_btn"/>
+ <button label="Vedi profilo" name="view_profile_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/inspect_object.xml b/indra/newview/skins/default/xui/it/inspect_object.xml
index 7e6d195cb1..fd58c18e0b 100644
--- a/indra/newview/skins/default/xui/it/inspect_object.xml
+++ b/indra/newview/skins/default/xui/it/inspect_object.xml
@@ -9,10 +9,10 @@
</string>
<string name="CreatorAndOwner">
Di [CREATOR]
-owner [OWNER]
+proprietario [OWNER]
</string>
<string name="Price">
- L$[AMOUNT]
+ L$ [AMOUNT]
</string>
<string name="PriceFree">
Gratis!
@@ -21,14 +21,14 @@ owner [OWNER]
Tocca
</string>
<string name="Sit">
- Siedi
+ Siediti
</string>
- <button label="Compra" name="buy_btn"/>
+ <button label="Acquista" name="buy_btn"/>
<button label="Paga" name="pay_btn"/>
- <button label="Fai una Copia" name="take_free_copy_btn"/>
+ <button label="Prendi copia" name="take_free_copy_btn"/>
<button label="Tocca" name="touch_btn"/>
- <button label="Siedi" name="sit_btn"/>
+ <button label="Siediti" name="sit_btn"/>
<button label="Apri" name="open_btn"/>
- <icon name="secure_browsing" tool_tip="Secure Browsing"/>
- <button label="Ulteriore" name="more_info_btn"/>
+ <icon name="secure_browsing" tool_tip="Browsing sicuro"/>
+ <button label="Altro" name="more_info_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/inspect_remote_object.xml b/indra/newview/skins/default/xui/it/inspect_remote_object.xml
index 9fabe2ca0b..b2d96ad757 100644
--- a/indra/newview/skins/default/xui/it/inspect_remote_object.xml
+++ b/indra/newview/skins/default/xui/it/inspect_remote_object.xml
@@ -8,6 +8,6 @@
Proprietario:
</text>
<button label="Mappa" name="map_btn"/>
- <button label="Bloccare" name="block_btn"/>
+ <button label="Blocca" name="block_btn"/>
<button label="Chiudi" name="close_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/language_settings.xml b/indra/newview/skins/default/xui/it/language_settings.xml
index 71418d446a..82cf789a6b 100644
--- a/indra/newview/skins/default/xui/it/language_settings.xml
+++ b/indra/newview/skins/default/xui/it/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">italian</string>
+ <string name="DarwinLocale">it_IT.UTF-8</string>
+ <string name="LinuxLocale">it_IT.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_other.xml b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
index ff068b90a5..3dfadd9690 100644
--- a/indra/newview/skins/default/xui/it/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
@@ -2,16 +2,16 @@
<!-- *NOTE: See also menu_avatar_other.xml -->
<context_menu name="Avatar Pie">
<menu_item_call label="Vedi profilo" name="Profile..."/>
- <menu_item_call label="Chiedi amicizia" name="Add Friend"/>
+ <menu_item_call label="Aggiungi amico" name="Add Friend"/>
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Chiama" name="Call"/>
- <menu_item_call label="Invita nel gruppo" name="Invite..."/>
+ <menu_item_call label="Invita al gruppo" name="Invite..."/>
<menu_item_call label="Blocca" name="Avatar Mute"/>
- <menu_item_call label="Denuncia" name="abuse"/>
+ <menu_item_call label="Segnala" name="abuse"/>
<menu_item_call label="Congela" name="Freeze..."/>
<menu_item_call label="Espelli" name="Eject..."/>
<menu_item_call label="Debug" name="Debug..."/>
- <menu_item_call label="Avvicinati" name="Zoom In"/>
+ <menu_item_call label="Zoom avanti" name="Zoom In"/>
<menu_item_call label="Paga" name="Pay..."/>
- <menu_item_call label="Profilo oggetto" name="Object Inspect"/>
+ <menu_item_call label="Profilo dell&apos;oggetto" name="Object Inspect"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_self.xml b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
index 9711b5918a..f30b286901 100644
--- a/indra/newview/skins/default/xui/it/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
@@ -5,8 +5,8 @@
<menu_item_call label="Stacca" name="Detach"/>
<menu_item_call label="Lascia" name="Drop"/>
<menu_item_call label="Alzati" name="Stand Up"/>
- <menu_item_call label="Il mio aspetto fisico" name="Appearance..."/>
- <menu_item_call label="I miei amici" name="Friends..."/>
+ <menu_item_call label="Il mio aspetto" name="Appearance..."/>
+ <menu_item_call label="I miei amici..." name="Friends..."/>
<menu_item_call label="I miei gruppi" name="Groups..."/>
<menu_item_call label="Il mio profilo" name="Profile..."/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml
index 522c7ab4e6..b93b695300 100644
--- a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml
@@ -2,6 +2,6 @@
<menu name="Avatar Icon Menu">
<menu_item_call label="Vedi profilo" name="Show Profile"/>
<menu_item_call label="Manda IM..." name="Send IM"/>
- <menu_item_call label="Chiedi amicizia..." name="Add Friend"/>
+ <menu_item_call label="Aggiungi come amico..." name="Add Friend"/>
<menu_item_call label="Togli amicizia..." name="Remove Friend"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_other.xml b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
index a435fcd311..8a1ff3d7ec 100644
--- a/indra/newview/skins/default/xui/it/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
@@ -2,15 +2,15 @@
<!-- *NOTE: See also menu_attachment_other.xml -->
<context_menu name="Avatar Pie">
<menu_item_call label="Vedi profilo" name="Profile..."/>
- <menu_item_call label="Chiedi amicizia" name="Add Friend"/>
+ <menu_item_call label="Aggiungi amico" name="Add Friend"/>
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Chiama" name="Call"/>
- <menu_item_call label="Invita nel gruppo" name="Invite..."/>
+ <menu_item_call label="Invita al gruppo" name="Invite..."/>
<menu_item_call label="Blocca" name="Avatar Mute"/>
- <menu_item_call label="Denuncia" name="abuse"/>
+ <menu_item_call label="Segnala" name="abuse"/>
<menu_item_call label="Congela" name="Freeze..."/>
<menu_item_call label="Espelli" name="Eject..."/>
<menu_item_call label="Debug" name="Debug..."/>
- <menu_item_call label="Avvicinati" name="Zoom In"/>
+ <menu_item_call label="Zoom avanti" name="Zoom In"/>
<menu_item_call label="Paga" name="Pay..."/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
index b7a9f8efbe..09219cb843 100644
--- a/indra/newview/skins/default/xui/it/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Self Pie">
<menu_item_call label="Alzati" name="Stand Up"/>
- <context_menu label="Vola &gt;" name="Take Off &gt;">
- <context_menu label="Abiti &gt;" name="Clothes &gt;">
- <menu_item_call label="Gonna" name="Shirt"/>
+ <context_menu label="Togli â–¶" name="Take Off &gt;">
+ <context_menu label="Abiti â–¶" name="Clothes &gt;">
+ <menu_item_call label="Camicia" name="Shirt"/>
<menu_item_call label="Pantaloni" name="Pants"/>
<menu_item_call label="Gonna" name="Skirt"/>
<menu_item_call label="Scarpe" name="Shoes"/>
@@ -13,15 +13,15 @@
<menu_item_call label="Maglietta intima" name="Self Undershirt"/>
<menu_item_call label="Slip" name="Self Underpants"/>
<menu_item_call label="Tatuaggio" name="Self Tattoo"/>
- <menu_item_call label="Alfa (trasparenza)" name="Self Alpha"/>
+ <menu_item_call label="Alpha (Trasparenza)" name="Self Alpha"/>
<menu_item_call label="Tutti gli abiti" name="All Clothes"/>
</context_menu>
- <context_menu label="HUD &gt;" name="Object Detach HUD"/>
- <context_menu label="Stacca &gt;" name="Object Detach"/>
+ <context_menu label="HUD â–¶" name="Object Detach HUD"/>
+ <context_menu label="Stacca â–¶" name="Object Detach"/>
<menu_item_call label="Stacca tutto" name="Detach All"/>
</context_menu>
- <menu_item_call label="Il mio aspetto fisico" name="Appearance..."/>
- <menu_item_call label="I miei amici" name="Friends..."/>
+ <menu_item_call label="Il mio aspetto" name="Appearance..."/>
+ <menu_item_call label="I miei amici..." name="Friends..."/>
<menu_item_call label="I miei gruppi" name="Groups..."/>
<menu_item_call label="Il mio profilo" name="Profile..."/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_bottomtray.xml b/indra/newview/skins/default/xui/it/menu_bottomtray.xml
index 185cf75183..7203d002d2 100644
--- a/indra/newview/skins/default/xui/it/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/it/menu_bottomtray.xml
@@ -2,11 +2,11 @@
<menu name="hide_camera_move_controls_menu">
<menu_item_check label="Tasto Gesture" name="ShowGestureButton"/>
<menu_item_check label="Tasto Movimento" name="ShowMoveButton"/>
- <menu_item_check label="Tasto Camera" name="ShowCameraButton"/>
- <menu_item_check label="Tasto Snapshot" name="ShowSnapshotButton"/>
+ <menu_item_check label="Tasto Visuale" name="ShowCameraButton"/>
+ <menu_item_check label="Tasto Foto" name="ShowSnapshotButton"/>
<menu_item_call label="Taglia" name="NearbyChatBar_Cut"/>
<menu_item_call label="Copia" name="NearbyChatBar_Copy"/>
<menu_item_call label="Incolla" name="NearbyChatBar_Paste"/>
- <menu_item_call label="Cancella" name="NearbyChatBar_Delete"/>
- <menu_item_call label="Seleziona Tutto" name="NearbyChatBar_Select_All"/>
+ <menu_item_call label="Elimina" name="NearbyChatBar_Delete"/>
+ <menu_item_call label="Seleziona tutto" name="NearbyChatBar_Select_All"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_favorites.xml b/indra/newview/skins/default/xui/it/menu_favorites.xml
index 9c4966d198..7813ef44b5 100644
--- a/indra/newview/skins/default/xui/it/menu_favorites.xml
+++ b/indra/newview/skins/default/xui/it/menu_favorites.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="Popup">
<menu_item_call label="Teleport" name="Teleport To Landmark"/>
- <menu_item_call label="Vedi/Modifica Landmark" name="Landmark Open"/>
+ <menu_item_call label="Vedi/Modifica punto di riferimento" name="Landmark Open"/>
<menu_item_call label="Copia SLurl" name="Copy slurl"/>
<menu_item_call label="Mostra sulla mappa" name="Show On Map"/>
<menu_item_call label="Copia" name="Landmark Copy"/>
<menu_item_call label="Incolla" name="Landmark Paste"/>
- <menu_item_call label="Cancella" name="Delete"/>
+ <menu_item_call label="Elimina" name="Delete"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_gesture_gear.xml b/indra/newview/skins/default/xui/it/menu_gesture_gear.xml
index c4f9d21d14..7cfcc6287e 100644
--- a/indra/newview/skins/default/xui/it/menu_gesture_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_gesture_gear.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_gesture_gear">
- <menu_item_call label="Aggiungi/Cancella dai favoriti" name="activate"/>
+ <menu_item_call label="Aggiungi/Rimuovi dai preferiti" name="activate"/>
<menu_item_call label="Copia" name="copy_gesture"/>
<menu_item_call label="Incolla" name="paste"/>
<menu_item_call label="Copia UUID" name="copy_uuid"/>
- <menu_item_call label="Salva outfit" name="save_to_outfit"/>
+ <menu_item_call label="Salva vestiario" name="save_to_outfit"/>
<menu_item_call label="Modifica" name="edit_gesture"/>
<menu_item_call label="Ispeziona" name="inspect"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_group_plus.xml b/indra/newview/skins/default/xui/it/menu_group_plus.xml
index 6b7692a067..3b76fb94a9 100644
--- a/indra/newview/skins/default/xui/it/menu_group_plus.xml
+++ b/indra/newview/skins/default/xui/it/menu_group_plus.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_call label="Unisciti al gruppo..." name="item_join"/>
+ <menu_item_call label="Aderisci al gruppo..." name="item_join"/>
<menu_item_call label="Nuovo gruppo..." name="item_new"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_hide_navbar.xml b/indra/newview/skins/default/xui/it/menu_hide_navbar.xml
index a87e76a19b..ee50a18ba5 100644
--- a/indra/newview/skins/default/xui/it/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/it/menu_hide_navbar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="hide_navbar_menu">
<menu_item_check label="Mostra la barra di navigazione" name="ShowNavbarNavigationPanel"/>
- <menu_item_check label="Mostra la barra dei favoriti" name="ShowNavbarFavoritesPanel"/>
+ <menu_item_check label="Mostra la barra dei Preferiti" name="ShowNavbarFavoritesPanel"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_im_well_button.xml b/indra/newview/skins/default/xui/it/menu_im_well_button.xml
new file mode 100644
index 0000000000..9e471b771c
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+ <menu_item_call label="Chiudi tutto" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml
index f39ad316fe..baa4e671b0 100644
--- a/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml
+++ b/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="IMChiclet Group Menu">
- <menu_item_call label="Informazioni gruppo" name="Show Profile"/>
+ <menu_item_call label="Informazioni sul gruppo" name="Show Profile"/>
<menu_item_call label="Mostra sessione" name="Chat"/>
<menu_item_call label="Fine sessione" name="End Session"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml
index e89576b1f9..2eacbb09ad 100644
--- a/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml
+++ b/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="IMChiclet P2P Menu">
<menu_item_call label="Vedi profilo" name="Show Profile"/>
- <menu_item_call label="Chiedi amicizia" name="Add Friend"/>
+ <menu_item_call label="Aggiungi amico" name="Add Friend"/>
<menu_item_call label="Mostra sessione" name="Send IM"/>
<menu_item_call label="Fine sessione" name="End Session"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml
index 968fbd37ae..ca6d5a4ad8 100644
--- a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml
@@ -1,17 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<menu name="Gear Menu">
<menu_item_call label="Vedi profilo" name="view_profile"/>
- <menu_item_call label="Chiedi amicizia" name="add_friend"/>
+ <menu_item_call label="Aggiungi amico" name="add_friend"/>
<menu_item_call label="IM" name="im"/>
<menu_item_call label="Chiama" name="call"/>
<menu_item_call label="Teleport" name="teleport"/>
- <menu_item_call label="Invita nel gruppo" name="invite_to_group"/>
+ <menu_item_call label="Invita al gruppo" name="invite_to_group"/>
<menu_item_call label="Blocca" name="block"/>
- <menu_item_call label="Denuncia" name="report"/>
+ <menu_item_call label="Sblocca" name="unblock"/>
+ <menu_item_call label="Segnala" name="report"/>
<menu_item_call label="Congela" name="freeze"/>
<menu_item_call label="Espelli" name="eject"/>
<menu_item_call label="Debug" name="debug"/>
<menu_item_call label="Trova sulla mappa" name="find_on_map"/>
- <menu_item_call label="Avvicinati" name="zoom_in"/>
+ <menu_item_call label="Zoom avanti" name="zoom_in"/>
<menu_item_call label="Paga" name="pay"/>
+ <menu_item_call label="Condividi" name="share"/>
</menu>
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 74d828fc20..eb10ebd0b6 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,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<menu name="Gear Menu">
<menu_item_call label="Tocca" name="touch"/>
- <menu_item_call label="Siedi" name="sit"/>
+ <menu_item_call label="Siediti" name="sit"/>
<menu_item_call label="Paga" name="pay"/>
- <menu_item_call label="Compra" name="buy"/>
+ <menu_item_call label="Acquista" name="buy"/>
<menu_item_call label="Prendi" name="take"/>
<menu_item_call label="Prendi copia" name="take_copy"/>
<menu_item_call label="Apri" name="open"/>
<menu_item_call label="Modifica" name="edit"/>
<menu_item_call label="Indossa" name="wear"/>
- <menu_item_call label="Denuncia" name="report"/>
+ <menu_item_call label="Segnala" name="report"/>
<menu_item_call label="Blocca" name="block"/>
- <menu_item_call label="Avvicinati" name="zoom_in"/>
- <menu_item_call label="Cancella" name="remove"/>
- <menu_item_call label="Più info" name="more_info"/>
+ <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>
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
index 1812a21b0d..359afcc283 100644
--- a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<menu name="Gear Menu">
<menu_item_call label="Alzati" name="stand_up"/>
- <menu_item_call label="Il mio aspetto fisico" name="my_appearance"/>
+ <menu_item_call label="Il mio aspetto" name="my_appearance"/>
<menu_item_call label="Il mio profilo" name="my_profile"/>
- <menu_item_call label="I miei amici" name="my_friends"/>
+ <menu_item_call label="I miei amici..." name="my_friends"/>
<menu_item_call label="I miei gruppi" name="my_groups"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml
index edb9490914..9662f6f937 100644
--- a/indra/newview/skins/default/xui/it/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/it/menu_inventory.xml
@@ -10,9 +10,9 @@
<menu_item_call label="Svuota gli oggetti persi e ritrovati" name="Empty Lost And Found"/>
<menu_item_call label="Nuova Cartella" name="New Folder"/>
<menu_item_call label="Nuovo Script" name="New Script"/>
- <menu_item_call label="Nuova Notecard" name="New Note"/>
+ <menu_item_call label="Nuovo biglietto" name="New Note"/>
<menu_item_call label="Nuova Gesture" name="New Gesture"/>
- <menu label="Maglietta Intima" name="New Clothes">
+ <menu label="Maglietta intima" name="New Clothes">
<menu_item_call label="Nuova Maglietta" name="New Shirt"/>
<menu_item_call label="Nuovi Pantaloni" name="New Pants"/>
<menu_item_call label="Nuove Scarpe" name="New Shoes"/>
@@ -23,47 +23,46 @@
<menu_item_call label="Nuova Canottiera" name="New Undershirt"/>
<menu_item_call label="Nuove Mutande" name="New Underpants"/>
<menu_item_call label="Nuovo Alfa Mask" name="New Alpha Mask"/>
- <menu_item_call label="Nuovo Tatuaggio" name="New Tattoo"/>
+ <menu_item_call label="Nuovo tatuaggio" name="New Tattoo"/>
</menu>
- <menu label="Nuove Parti del Corpo" name="New Body Parts">
+ <menu label="Nuove parti del corpo" name="New Body Parts">
<menu_item_call label="Nuova Forma del corpo" name="New Shape"/>
<menu_item_call label="Nuova Pelle" name="New Skin"/>
<menu_item_call label="Nuovi Capelli" name="New Hair"/>
<menu_item_call label="Nuovi Occhi" name="New Eyes"/>
</menu>
- <menu label="Cambia Tipo" name="Change Type">
+ <menu label="Cambia tipo" name="Change Type">
<menu_item_call label="Predefinito" name="Default"/>
<menu_item_call label="Guanti" name="Gloves"/>
<menu_item_call label="Giacca" name="Jacket"/>
<menu_item_call label="Pantaloni" name="Pants"/>
- <menu_item_call label="Shape" name="Shape"/>
+ <menu_item_call label="Figura corporea" name="Shape"/>
<menu_item_call label="Scarpe" name="Shoes"/>
<menu_item_call label="Camicia" name="Shirt"/>
<menu_item_call label="Gonna" name="Skirt"/>
<menu_item_call label="Slip" name="Underpants"/>
- <menu_item_call label="Maglietta Intima" name="Undershirt"/>
+ <menu_item_call label="Maglietta intima" name="Undershirt"/>
</menu>
<menu_item_call label="Teletrasportati" name="Landmark Open"/>
<menu_item_call label="Apri" name="Animation Open"/>
<menu_item_call label="Apri" name="Sound Open"/>
+ <menu_item_call label="Sostituisci vestiti" name="Replace Outfit"/>
+ <menu_item_call label="Aggiungi al vestiario" name="Add To Outfit"/>
<menu_item_call label="Elimina oggetto" name="Purge Item"/>
<menu_item_call label="Ripristina oggetto" name="Restore Item"/>
- <menu_item_call label="Vai al Link" name="Goto Link"/>
<menu_item_call label="Apri" name="Open"/>
<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="Copia" name="Copy"/>
<menu_item_call label="Incolla" name="Paste"/>
- <menu_item_call label="Incolla come Link" name="Paste As Link"/>
+ <menu_item_call label="Incolla come link" name="Paste As Link"/>
<menu_item_call label="Cancella" name="Delete"/>
- <menu_item_call label="Togli gli oggetti" name="Take Off Items"/>
- <menu_item_call label="Aggiungi all&apos;outfit" name="Add To Outfit"/>
- <menu_item_call label="Sostituisci outfit" name="Replace Outfit"/>
+ <menu_item_call label="Elimina la cartella di sistema" name="Delete System Folder"/>
<menu_item_call label="Inizia la conferenza chat" name="Conference Chat Folder"/>
<menu_item_call label="Esegui" name="Sound Play"/>
- <menu_item_call label="Informazioni sul Landmark" name="About Landmark"/>
- <menu_item_call label="Esegui inworld" name="Animation Play"/>
+ <menu_item_call label="Informazioni sul punto di riferimento" name="About Landmark"/>
+ <menu_item_call label="Riproduci in Second Life" name="Animation Play"/>
<menu_item_call label="Esegui localmente" name="Animation Audition"/>
<menu_item_call label="Invia un Instant Message" name="Send Instant Message"/>
<menu_item_call label="Offri teletrasporto..." name="Offer Teleport..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_inventory_add.xml b/indra/newview/skins/default/xui/it/menu_inventory_add.xml
index d33dabc4c3..05f53f44ba 100644
--- a/indra/newview/skins/default/xui/it/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/it/menu_inventory_add.xml
@@ -1,32 +1,32 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_inventory_add">
- <menu label="Carica sul server" name="upload">
+ <menu label="Carica nel server" name="upload">
<menu_item_call label="Immagine ([COST]L$)..." name="Upload Image"/>
<menu_item_call label="Suono ([COST]L$)..." name="Upload Sound"/>
<menu_item_call label="Animazione ([COST]L$)..." name="Upload Animation"/>
<menu_item_call label="In blocco ([COST]L$ per file)..." name="Bulk Upload"/>
</menu>
- <menu_item_call label="Nuova Cartella" name="New Folder"/>
- <menu_item_call label="Nuovo Script" name="New Script"/>
- <menu_item_call label="Nuova Notecard" name="New Note"/>
- <menu_item_call label="Nuova Gesture" name="New Gesture"/>
- <menu label="Nuovi Abiti" name="New Clothes">
- <menu_item_call label="Nuova Camicia" name="New Shirt"/>
- <menu_item_call label="Nuovi Pantaloni" name="New Pants"/>
- <menu_item_call label="Nuove Scarpe" name="New Shoes"/>
- <menu_item_call label="Nuove Calze" name="New Socks"/>
- <menu_item_call label="Nuova Giacca" name="New Jacket"/>
- <menu_item_call label="Nuova Gonna" name="New Skirt"/>
- <menu_item_call label="Nuovi Guanti" name="New Gloves"/>
- <menu_item_call label="Nuova Maglietta Intima" name="New Undershirt"/>
- <menu_item_call label="Nuovi Slip" name="New Underpants"/>
- <menu_item_call label="Nuovo Alfa (Trasparenza)" name="New Alpha"/>
- <menu_item_call label="Nuovo Tatuaggio" name="New Tattoo"/>
+ <menu_item_call label="Nuova cartella" name="New Folder"/>
+ <menu_item_call label="Nuovo script" name="New Script"/>
+ <menu_item_call label="Nuovo biglietto" name="New Note"/>
+ <menu_item_call label="Nuova gesture" name="New Gesture"/>
+ <menu label="Maglietta intima" name="New Clothes">
+ <menu_item_call label="Nuova camicia" name="New Shirt"/>
+ <menu_item_call label="Nuovi pantaloni" name="New Pants"/>
+ <menu_item_call label="Nuove scarpe" name="New Shoes"/>
+ <menu_item_call label="Nuove calze" name="New Socks"/>
+ <menu_item_call label="Nuova giacca" name="New Jacket"/>
+ <menu_item_call label="Nuova gonna" name="New Skirt"/>
+ <menu_item_call label="Nuovi guanti" name="New Gloves"/>
+ <menu_item_call label="Nuova maglietta intima" name="New Undershirt"/>
+ <menu_item_call label="Nuovi slip" name="New Underpants"/>
+ <menu_item_call label="Nuovo Alfa (trasparenza)" name="New Alpha"/>
+ <menu_item_call label="Nuovo tatuaggio" name="New Tattoo"/>
</menu>
- <menu label="Nuove Parti del Corpo" name="New Body Parts">
- <menu_item_call label="Nuova Shape" name="New Shape"/>
- <menu_item_call label="Nuova Pelle" name="New Skin"/>
- <menu_item_call label="Nuovi Capelli" name="New Hair"/>
- <menu_item_call label="Nuovi Occhi" name="New Eyes"/>
+ <menu label="Nuove parti del corpo" name="New Body Parts">
+ <menu_item_call label="Nuova figura corporea" name="New Shape"/>
+ <menu_item_call label="Nuova pelle" name="New Skin"/>
+ <menu_item_call label="Nuovi capelli" name="New Hair"/>
+ <menu_item_call label="Nuovi occhi" name="New Eyes"/>
</menu>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml
index e97af5c950..cf87148f2e 100644
--- a/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_gear_default">
- <menu_item_call label="Nuova Finestra di Inventory" name="new_window"/>
- <menu_item_call label="Ordina per nome" name="sort_by_name"/>
- <menu_item_call label="Ordina per data (più recenti)" name="sort_by_recent"/>
- <menu_item_call label="Mostra i Filtri" name="show_filters"/>
- <menu_item_call label="Cancella i Filtri" name="reset_filters"/>
- <menu_item_call label="Chiudi le cartelle" name="close_folders"/>
+ <menu_item_call label="Nuova finestra inventario" name="new_window"/>
+ <menu_item_call label="Ordina in base al nome" name="sort_by_name"/>
+ <menu_item_call label="Mostra prima i più recenti" name="sort_by_recent"/>
+ <menu_item_call label="Mostra filtri" name="show_filters"/>
+ <menu_item_call label="Ripristina filtri" name="reset_filters"/>
+ <menu_item_call label="Chiudi tutte le cartelle" name="close_folders"/>
<menu_item_call label="Svuota cestino" name="empty_trash"/>
- <menu_item_call label="Svuota Persi e Ritrovati" name="empty_lostnfound"/>
+ <menu_item_call label="Svuota oggetti smarriti" name="empty_lostnfound"/>
<menu_item_call label="Salva texture come" name="Save Texture As"/>
<menu_item_call label="Trova originale" name="Find Original"/>
<menu_item_call label="Trova tutti i link" name="Find All Links"/>
diff --git a/indra/newview/skins/default/xui/it/menu_land.xml b/indra/newview/skins/default/xui/it/menu_land.xml
index 173c080c3f..f510078e14 100644
--- a/indra/newview/skins/default/xui/it/menu_land.xml
+++ b/indra/newview/skins/default/xui/it/menu_land.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Land Pie">
- <menu_item_call label="Info sul terreno" name="Place Information..."/>
- <menu_item_call label="Siedi qui" name="Sit Here"/>
- <menu_item_call label="Compra questo terreno" name="Land Buy"/>
- <menu_item_call label="Compra permesso" name="Land Buy Pass"/>
+ <menu_item_call label="Informazioni sui terreni" name="Place Information..."/>
+ <menu_item_call label="Siediti qui" name="Sit Here"/>
+ <menu_item_call label="Acquista questo terreno" name="Land Buy"/>
+ <menu_item_call label="Acquista Permesso" name="Land Buy Pass"/>
<menu_item_call label="Costruisci" name="Create"/>
<menu_item_call label="Modifica terreno" name="Edit Terrain"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_landmark.xml b/indra/newview/skins/default/xui/it/menu_landmark.xml
index 58e3e992ed..b3cddab783 100644
--- a/indra/newview/skins/default/xui/it/menu_landmark.xml
+++ b/indra/newview/skins/default/xui/it/menu_landmark.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="landmark_overflow_menu">
<menu_item_call label="Copia SLurl" name="copy"/>
- <menu_item_call label="Cancella" name="delete"/>
- <menu_item_call label="Crea luogo consigliato" name="pick"/>
- <menu_item_call label="Aggiungi alla barra dei favoriti" name="add_to_favbar"/>
+ <menu_item_call label="Elimina" name="delete"/>
+ <menu_item_call label="Crea Luogo consigliato" name="pick"/>
+ <menu_item_call label="Aggiungi alla barra dei Preferiti" name="add_to_favbar"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml
index db3b84df29..36eeadc478 100644
--- a/indra/newview/skins/default/xui/it/menu_login.xml
+++ b/indra/newview/skins/default/xui/it/menu_login.xml
@@ -10,21 +10,21 @@
<menu label="Debug" name="Debug">
<menu label="Modifica" name="Edit">
<menu_item_call label="Annulla" name="Undo"/>
- <menu_item_call label="Ripeti" name="Redo"/>
+ <menu_item_call label="Rifai" name="Redo"/>
<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="Cancella" name="Delete"/>
+ <menu_item_call label="Elimina" name="Delete"/>
<menu_item_call label="Duplica" name="Duplicate"/>
- <menu_item_call label="Seleziona Tutto" name="Select All"/>
+ <menu_item_call label="Seleziona tutto" name="Select All"/>
<menu_item_call label="Deseleziona" name="Deselect"/>
</menu>
- <menu_item_call label="Mostra Impostazioni di Debug" name="Debug Settings"/>
- <menu_item_call label="Impostazioni colori Interfaccia" name="UI/Color Settings"/>
- <menu_item_call label="Mostra la finestra laterale" name="Show Side Tray"/>
- <menu label="Test Interfaccia Utente" name="UI Tests"/>
- <menu_item_call label="Mostra i Termini di Servizio (TOS)" name="TOS"/>
- <menu_item_call label="Mostra Messaggi critici" name="Critical"/>
- <menu_item_call label="Test Web browser" name="Web Browser Test"/>
+ <menu_item_call label="Mostra impostazioni di debug" name="Debug Settings"/>
+ <menu_item_call label="Impostazioni colori interfaccia" name="UI/Color Settings"/>
+ <menu label="Test interfaccia utente" name="UI Tests"/>
+ <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 Web" name="Web Browser Test"/>
</menu>
</menu_bar>
diff --git a/indra/newview/skins/default/xui/it/menu_mini_map.xml b/indra/newview/skins/default/xui/it/menu_mini_map.xml
index 7caa7fd226..fa574230e0 100644
--- a/indra/newview/skins/default/xui/it/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/it/menu_mini_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
+<menu name="Popup">
<menu_item_call label="Zoom ravvicinato" name="Zoom Close"/>
<menu_item_call label="Zoom Medio" name="Zoom Medium"/>
<menu_item_call label="Zoom Distante" name="Zoom Far"/>
diff --git a/indra/newview/skins/default/xui/it/menu_navbar.xml b/indra/newview/skins/default/xui/it/menu_navbar.xml
index 3d855cf701..e42d913a6f 100644
--- a/indra/newview/skins/default/xui/it/menu_navbar.xml
+++ b/indra/newview/skins/default/xui/it/menu_navbar.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="Navbar Menu">
<menu_item_check label="Mostra le coordinate" name="Show Coordinates"/>
- <menu_item_check label="Mostra proprietà parcel" name="Show Parcel Properties"/>
- <menu_item_call label="Landmark" name="Landmark"/>
+ <menu_item_check label="Mostra proprietà lotto" name="Show Parcel Properties"/>
+ <menu_item_call label="Punto di riferimento" name="Landmark"/>
<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="Cancella" name="Delete"/>
+ <menu_item_call label="Elimina" name="Delete"/>
<menu_item_call label="Seleziona tutto" name="Select All"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_nearby_chat.xml b/indra/newview/skins/default/xui/it/menu_nearby_chat.xml
index 2a625fc763..719a6d3261 100644
--- a/indra/newview/skins/default/xui/it/menu_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/it/menu_nearby_chat.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="NearBy Chat Menu">
<menu_item_call label="Mostra le persone vicine..." name="nearby_people"/>
- <menu_item_check label="Mostra Testo bloccato" name="muted_text"/>
- <menu_item_check label="Mostra Icone amici" name="show_buddy_icons"/>
+ <menu_item_check label="Mostra il testo bloccato" name="muted_text"/>
+ <menu_item_check label="Mostra icone amici" name="show_buddy_icons"/>
<menu_item_check label="Mostra nomi" name="show_names"/>
- <menu_item_check label="Mostra Icone e nomi" name="show_icons_and_names"/>
- <menu_item_call label="Dimensioni del Font" name="font_size"/>
+ <menu_item_check label="Mostra icone e nomi" name="show_icons_and_names"/>
+ <menu_item_call label="Dimensioni caratteri" name="font_size"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_notification_well_button.xml b/indra/newview/skins/default/xui/it/menu_notification_well_button.xml
new file mode 100644
index 0000000000..8c82e30f0e
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+ <menu_item_call label="Chiudi tutto" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml
index 955d4c8776..237b6b3a0e 100644
--- a/indra/newview/skins/default/xui/it/menu_object.xml
+++ b/indra/newview/skins/default/xui/it/menu_object.xml
@@ -4,21 +4,24 @@
<menu_item_call label="Modifica" name="Edit..."/>
<menu_item_call label="Costruisci" name="Build"/>
<menu_item_call label="Apri" name="Open"/>
- <menu_item_call label="Siedi qui" name="Object Sit"/>
- <menu_item_call label="Profilo oggetto" name="Object Inspect"/>
- <context_menu label="Metti &gt;" name="Put On">
+ <menu_item_call label="Siediti qui" name="Object Sit"/>
+ <menu_item_call label="Alzati" name="Object Stand Up"/>
+ <menu_item_call label="Profilo dell&apos;oggetto" name="Object Inspect"/>
+ <menu_item_call label="Zoom avanti" name="Zoom In"/>
+ <context_menu label="Indossa â–¶" name="Put On">
<menu_item_call label="Indossa" name="Wear"/>
- <context_menu label="Attacca &gt;" name="Object Attach"/>
- <context_menu label="Attacca HUD &gt;" name="Object Attach HUD"/>
+ <context_menu label="Attacca â–¶" name="Object Attach"/>
+ <context_menu label="Attacca HUD â–¶" name="Object Attach HUD"/>
</context_menu>
- <context_menu label="Togli &gt;" name="Remove">
- <menu_item_call label="Prendi" name="Pie Object Take"/>
- <menu_item_call label="Denuncia abuso" name="Report Abuse..."/>
+ <context_menu label="Togli â–¶" name="Remove">
+ <menu_item_call label="Segnala abuso" name="Report Abuse..."/>
<menu_item_call label="Blocca" name="Object Mute"/>
<menu_item_call label="Restituisci" name="Return..."/>
- <menu_item_call label="Cancella" name="Delete"/>
+ <menu_item_call label="Elimina" name="Delete"/>
</context_menu>
+ <menu_item_call label="Acquista" name="Pie Object Bye"/>
+ <menu_item_call label="Prendi" name="Pie Object Take"/>
<menu_item_call label="Prendi copia" name="Take Copy"/>
<menu_item_call label="Paga" name="Pay..."/>
- <menu_item_call label="Compra" name="Buy..."/>
+ <menu_item_call label="Acquista" name="Buy..."/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_participant_list.xml b/indra/newview/skins/default/xui/it/menu_participant_list.xml
index 33c8fc404d..e641d38508 100644
--- a/indra/newview/skins/default/xui/it/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/it/menu_participant_list.xml
@@ -1,16 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Participant List Context Menu">
+ <menu_item_check label="Ordina in base al nome" name="SortByName"/>
+ <menu_item_check label="Ordina in base a intervenuti recenti" name="SortByRecentSpeakers"/>
<menu_item_call label="Vedi profilo" name="View Profile"/>
- <menu_item_call label="Chiedi amicizia" name="Add Friend"/>
+ <menu_item_call label="Aggiungi amico" name="Add Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="Chiama" name="Call"/>
<menu_item_call label="Condividi" name="Share"/>
<menu_item_call label="Paga" name="Pay"/>
- <menu_item_check label="Blocca/Sblocca" name="Block/Unblock"/>
- <menu_item_check label="Muta testo" name="MuteText"/>
- <menu_item_check label="Consenti chat di testo" name="AllowTextChat"/>
- <menu_item_call label="Muta questo partecipante" name="ModerateVoiceMuteSelected"/>
- <menu_item_call label="Muta tutti gli altri" name="ModerateVoiceMuteOthers"/>
- <menu_item_call label="Riabilita questo partecipante" name="ModerateVoiceUnMuteSelected"/>
- <menu_item_call label="Riabilita tutti gli altri" name="ModerateVoiceUnMuteOthers"/>
+ <menu_item_check label="Blocca voce" name="Block/Unblock"/>
+ <menu_item_check label="Blocca testo" name="MuteText"/>
+ <context_menu label="Opzioni moderatore &gt;" name="Moderator Options">
+ <menu_item_check label="Consenti chat di testo" name="AllowTextChat"/>
+ <menu_item_call label="Disattiva audio di questo participante" name="ModerateVoiceMuteSelected"/>
+ <menu_item_call label="Disattiva audio di tutti gli altri" name="ModerateVoiceMuteOthers"/>
+ <menu_item_call label="Riattiva audio di questo participante" name="ModerateVoiceUnMuteSelected"/>
+ <menu_item_call label="Disattiva audio di tutti gli altri" name="ModerateVoiceUnMuteOthers"/>
+ </context_menu>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
index ad8927be13..1f987890c4 100644
--- a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_check label="Ordina per nome" name="sort_name"/>
- <menu_item_check label="Ordina per stato" name="sort_status"/>
+ <menu_item_check label="Ordina in base al nome" name="sort_name"/>
+ <menu_item_check label="Ordina in base allo stato" name="sort_status"/>
<menu_item_check label="Icone persone" name="view_icons"/>
- <menu_item_call label="Mostra gli &amp; oggetti dei residenti bloccati" name="show_blocked_list"/>
+ <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_groups.xml b/indra/newview/skins/default/xui/it/menu_people_groups.xml
new file mode 100644
index 0000000000..30a97a1c72
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+ <menu_item_call label="Mostra informazioni" name="View Info"/>
+ <menu_item_call label="Chat" name="Chat"/>
+ <menu_item_call label="Chiama" name="Call"/>
+ <menu_item_call label="Attiva" name="Activate"/>
+ <menu_item_call label="Chiudi" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby.xml b/indra/newview/skins/default/xui/it/menu_people_nearby.xml
index be071a5074..a974bd181d 100644
--- a/indra/newview/skins/default/xui/it/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby.xml
@@ -1,10 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Avatar Context Menu">
<menu_item_call label="Vedi profilo" name="View Profile"/>
- <menu_item_call label="Chiedi amicizia" name="Add Friend"/>
+ <menu_item_call label="Aggiungi amico" name="Add Friend"/>
+ <menu_item_call label="Rimuovi amico" name="Remove Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="Chiama" name="Call"/>
+ <menu_item_call label="Mappa" name="Map"/>
<menu_item_call label="Condividi" name="Share"/>
<menu_item_call label="Paga" name="Pay"/>
<menu_item_check label="Blocca/Sblocca" name="Block/Unblock"/>
+ <menu_item_call label="Offri Teleport" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
index f9fda2fb98..9784a4cc9a 100644
--- a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Multi-Selected People Context Menu">
- <menu_item_call label="Chiedi amicizie" name="Add Friends"/>
+ <menu_item_call label="Aggiungi amici" name="Add Friends"/>
+ <menu_item_call label="Rimuovi amici" name="Remove Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="Chiama" name="Call"/>
<menu_item_call label="Condividi" name="Share"/>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
index c1b384196d..aae2313702 100644
--- a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_check label="Ordina mettendo per primo chi ha parlato per ultimo" name="sort_by_recent_speakers"/>
- <menu_item_check label="Ordina per nome" name="sort_name"/>
- <menu_item_check label="Ordina per Distanza" name="sort_distance"/>
- <menu_item_check label="Vedi le icone delle persone" name="view_icons"/>
- <menu_item_call label="Mostra gli &amp; oggetti dei residenti bloccati" name="show_blocked_list"/>
+ <menu_item_check label="Ordina in base a intervenuti recenti" name="sort_by_recent_speakers"/>
+ <menu_item_check label="Ordina in base al nome" name="sort_name"/>
+ <menu_item_check label="Ordina in base alla distanza" name="sort_distance"/>
+ <menu_item_check label="Icone persone" name="view_icons"/>
+ <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml
index f8fd9dca79..7fccd1621a 100644
--- a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
<menu_item_check label="Mostra prima i più recenti" name="sort_most"/>
- <menu_item_check label="Ordina per nome" name="sort_name"/>
- <menu_item_check label="Vedi le icone delle persone" name="view_icons"/>
- <menu_item_call label="Mostra gli &amp; oggetti dei residenti bloccati" name="show_blocked_list"/>
+ <menu_item_check label="Ordina in base al nome" name="sort_name"/>
+ <menu_item_check label="Icone persone" name="view_icons"/>
+ <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_picks.xml b/indra/newview/skins/default/xui/it/menu_picks.xml
index e84b321ccf..000d219ed0 100644
--- a/indra/newview/skins/default/xui/it/menu_picks.xml
+++ b/indra/newview/skins/default/xui/it/menu_picks.xml
@@ -4,5 +4,5 @@
<menu_item_call label="Modifica" name="pick_edit"/>
<menu_item_call label="Teleport" name="pick_teleport"/>
<menu_item_call label="Mappa" name="pick_map"/>
- <menu_item_call label="Cancella" name="pick_delete"/>
+ <menu_item_call label="Elimina" name="pick_delete"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_picks_plus.xml b/indra/newview/skins/default/xui/it/menu_picks_plus.xml
index d758a9715e..7fbd5abd57 100644
--- a/indra/newview/skins/default/xui/it/menu_picks_plus.xml
+++ b/indra/newview/skins/default/xui/it/menu_picks_plus.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="picks_plus_menu">
- <menu_item_call label="Nuovo luogo consigliato" name="create_pick"/>
- <menu_item_call label="Nuovo Annuncio" name="create_classified"/>
+ <menu_item_call label="Nuovo luogo preferito" name="create_pick"/>
+ <menu_item_call label="Nuovo annuncio" name="create_classified"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_place.xml b/indra/newview/skins/default/xui/it/menu_place.xml
index 5b9261b159..5381a4effa 100644
--- a/indra/newview/skins/default/xui/it/menu_place.xml
+++ b/indra/newview/skins/default/xui/it/menu_place.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="place_overflow_menu">
- <menu_item_call label="Prendi il Landmark" name="landmark"/>
- <menu_item_call label="Crea luogo consigliato" name="pick"/>
- <menu_item_call label="Compra Permesso" name="pass"/>
+ <menu_item_call label="Salva come punto di riferimento" name="landmark"/>
+ <menu_item_call label="Crea Luogo consigliato" name="pick"/>
+ <menu_item_call label="Acquista Permesso" name="pass"/>
<menu_item_call label="Modifica" name="edit"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_place_add_button.xml b/indra/newview/skins/default/xui/it/menu_place_add_button.xml
index 6dd10f422e..0e783c0000 100644
--- a/indra/newview/skins/default/xui/it/menu_place_add_button.xml
+++ b/indra/newview/skins/default/xui/it/menu_place_add_button.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_folder_gear">
<menu_item_call label="Aggiungi cartella" name="add_folder"/>
- <menu_item_call label="Aggiungi landmark" name="add_landmark"/>
+ <menu_item_call label="Aggiungi punto di riferimento" name="add_landmark"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml
index 45765bf77d..59fbb86ddc 100644
--- a/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_folder_gear">
- <menu_item_call label="Aggiungi Landmark" name="add_landmark"/>
+ <menu_item_call label="Aggiungi punto di riferimento" name="add_landmark"/>
<menu_item_call label="Aggiungi cartella" name="add_folder"/>
<menu_item_call label="Taglia" name="cut"/>
<menu_item_call label="Copia" name="copy_folder"/>
<menu_item_call label="Incolla" name="paste"/>
- <menu_item_call label="Rinomina" name="rename"/>
- <menu_item_call label="Cancella" name="delete"/>
- <menu_item_call label="Apri" name="expand"/>
- <menu_item_call label="Chiudi" name="collapse"/>
+ <menu_item_call label="Modifica nome" name="rename"/>
+ <menu_item_call label="Elimina" name="delete"/>
+ <menu_item_call label="Espandi" name="expand"/>
+ <menu_item_call label="Comprimi" name="collapse"/>
<menu_item_call label="Apri tutte le cartelle" name="expand_all"/>
<menu_item_call label="Chiudi tutte le cartelle" name="collapse_all"/>
- <menu_item_check label="Ordina per data" name="sort_by_date"/>
+ <menu_item_check label="Ordina in base alla data" name="sort_by_date"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml
index 2c5b8a848c..32d7abc259 100644
--- a/indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_ladmark_gear">
<menu_item_call label="Teleport" name="teleport"/>
- <menu_item_call label="Maggiori Informazioni" name="more_info"/>
- <menu_item_call label="Mostra sulla Mappa" name="show_on_map"/>
- <menu_item_call label="Aggiungi Landmark" name="add_landmark"/>
- <menu_item_call label="Aggiungi Cartella" name="add_folder"/>
+ <menu_item_call label="Maggiori informazioni" name="more_info"/>
+ <menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
+ <menu_item_call label="Aggiungi Punto di riferimento" name="add_landmark"/>
+ <menu_item_call label="Aggiungi cartella" name="add_folder"/>
<menu_item_call label="Taglia" name="cut"/>
- <menu_item_call label="Copia Landmark" name="copy_landmark"/>
+ <menu_item_call label="Copia punto di riferimento" name="copy_landmark"/>
<menu_item_call label="Copia SLurl" name="copy_slurl"/>
<menu_item_call label="Incolla" name="paste"/>
- <menu_item_call label="Rinomina" name="rename"/>
- <menu_item_call label="Cancella" name="delete"/>
+ <menu_item_call label="Modifica nome" name="rename"/>
+ <menu_item_call label="Elimina" name="delete"/>
<menu_item_call label="Apri tutte le cartelle" name="expand_all"/>
<menu_item_call label="Chiudi tutte le cartelle" name="collapse_all"/>
- <menu_item_check label="Ordina per Data" name="sort_by_date"/>
- <menu_item_call label="Crea Luogo Consigliato" name="create_pick"/>
+ <menu_item_check label="Ordina in base alla data" name="sort_by_date"/>
+ <menu_item_call label="Crea Luogo consigliato" name="create_pick"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_profile_overflow.xml b/indra/newview/skins/default/xui/it/menu_profile_overflow.xml
index 76a04a127e..56b695c597 100644
--- a/indra/newview/skins/default/xui/it/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/it/menu_profile_overflow.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="profile_overflow_menu">
+ <menu_item_call label="Mappa" name="show_on_map"/>
<menu_item_call label="Paga" name="pay"/>
<menu_item_call label="Condividi" name="share"/>
+ <menu_item_call label="Blocca" name="block"/>
+ <menu_item_call label="Sblocca" name="unblock"/>
+ <menu_item_call label="Espelli" name="kick"/>
+ <menu_item_call label="Congela" name="freeze"/>
+ <menu_item_call label="Scongela" name="unfreeze"/>
+ <menu_item_call label="CSR" name="csr"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml
index 71acda5a9d..409a62c31b 100644
--- a/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml
@@ -2,5 +2,5 @@
<menu name="Teleport History Gear Context Menu">
<menu_item_call label="Apri tutte le cartelle" name="Expand all folders"/>
<menu_item_call label="Chiudi tutte le cartelle" name="Collapse all folders"/>
- <menu_item_call label="Cancella la storia dei Teleport" name="Clear Teleport History"/>
+ <menu_item_call label="Cancella la cronologia Teleport" name="Clear Teleport History"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
index c01230584b..81053fbd65 100644
--- a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Teleport History Item Context Menu">
<menu_item_call label="Teleport" name="Teleport"/>
- <menu_item_call label="Più informazioni" name="More Information"/>
+ <menu_item_call label="Maggiori informazioni" name="More Information"/>
<menu_item_call label="Copia negli appunti" name="CopyToClipboard"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_text_editor.xml b/indra/newview/skins/default/xui/it/menu_text_editor.xml
index baab233a21..4636ce9929 100644
--- a/indra/newview/skins/default/xui/it/menu_text_editor.xml
+++ b/indra/newview/skins/default/xui/it/menu_text_editor.xml
@@ -3,6 +3,6 @@
<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="Cancella" name="Delete"/>
- <menu_item_call label="Seleziona Tutto" name="Select All"/>
+ <menu_item_call label="Elimina" name="Delete"/>
+ <menu_item_call label="Seleziona tutto" name="Select All"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_agent.xml b/indra/newview/skins/default/xui/it/menu_url_agent.xml
index 874f7a8df9..37755d5749 100644
--- a/indra/newview/skins/default/xui/it/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_agent.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Mostra profilo" name="show_agent"/>
- <menu_item_call label="Copia nome negli appunti" name="url_copy_label"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Mostra profilo residente" name="show_agent"/>
+ <menu_item_call label="Copia nome negli Appunti" name="url_copy_label"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_group.xml b/indra/newview/skins/default/xui/it/menu_url_group.xml
index ac9dab2b3c..d9a792ebdf 100644
--- a/indra/newview/skins/default/xui/it/menu_url_group.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_group.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Mostra info gruppo" name="show_group"/>
- <menu_item_call label="Copia gruppo negli appunti" name="url_copy_label"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Mostra informazioni gruppo" name="show_group"/>
+ <menu_item_call label="Copia gruppo negli Appunti" name="url_copy_label"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_http.xml b/indra/newview/skins/default/xui/it/menu_url_http.xml
index b8f965f2d6..e0153d9169 100644
--- a/indra/newview/skins/default/xui/it/menu_url_http.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_http.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Apri pagina web" name="url_open"/>
+ <menu_item_call label="Apri pagina Web" name="url_open"/>
<menu_item_call label="Apri nel browser interno" name="url_open_internal"/>
<menu_item_call label="Apri nel browser esterno" name="url_open_external"/>
- <menu_item_call label="Copia URL negli appunti" name="url_copy"/>
+ <menu_item_call label="Copia URL negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_inventory.xml b/indra/newview/skins/default/xui/it/menu_url_inventory.xml
index 0b410b4eff..a45a6bbc10 100644
--- a/indra/newview/skins/default/xui/it/menu_url_inventory.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_inventory.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Mostra elemento dell&apos;inventory" name="show_item"/>
- <menu_item_call label="Copia nome negli appunti" name="url_copy_label"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Mostra oggetto dell&apos;inventario" name="show_item"/>
+ <menu_item_call label="Copia nome negli Appunti" name="url_copy_label"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_map.xml b/indra/newview/skins/default/xui/it/menu_url_map.xml
index 096efcd1b9..cb7935b3ed 100644
--- a/indra/newview/skins/default/xui/it/menu_url_map.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_map.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
- <menu_item_call label="Teleportati nel luogo" name="teleport_to_location"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Teleport al luogo" name="teleport_to_location"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_objectim.xml b/indra/newview/skins/default/xui/it/menu_url_objectim.xml
index 67a9f0b914..763e65f17c 100644
--- a/indra/newview/skins/default/xui/it/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_objectim.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Mostra info oggetto" name="show_object"/>
+ <menu_item_call label="Mostra informazioni oggetto" name="show_object"/>
<menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
- <menu_item_call label="Teleportati sul luogo dell&apos;oggetto" name="teleport_to_object"/>
- <menu_item_call label="Copia nome oggetto negli appunti" name="url_copy_label"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Teleport sul luogo dell&apos;oggetto" name="teleport_to_object"/>
+ <menu_item_call label="Copia nome oggetto negli Appunti" name="url_copy_label"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_parcel.xml b/indra/newview/skins/default/xui/it/menu_url_parcel.xml
index e40d05f423..a032c33585 100644
--- a/indra/newview/skins/default/xui/it/menu_url_parcel.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_parcel.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Mostra info appezzamento" name="show_parcel"/>
+ <menu_item_call label="Mostra informazioni lotto" name="show_parcel"/>
<menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_slapp.xml b/indra/newview/skins/default/xui/it/menu_url_slapp.xml
index 2e5ad64a59..b368aa9141 100644
--- a/indra/newview/skins/default/xui/it/menu_url_slapp.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_slapp.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Lancia questo comando" name="run_slapp"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Esegui questo comando" name="run_slapp"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_slurl.xml b/indra/newview/skins/default/xui/it/menu_url_slurl.xml
index 1850252669..355c7dbed9 100644
--- a/indra/newview/skins/default/xui/it/menu_url_slurl.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_slurl.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Mostra info del luogo" name="show_place"/>
+ <menu_item_call label="Mostra informazioni del luogo" name="show_place"/>
<menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
- <menu_item_call label="Teleporta nel luogo" name="teleport_to_location"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Teleport al luogo" name="teleport_to_location"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_teleport.xml b/indra/newview/skins/default/xui/it/menu_url_teleport.xml
index 0a09090c26..c129e61f25 100644
--- a/indra/newview/skins/default/xui/it/menu_url_teleport.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_teleport.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Teleportati in questo posto" name="teleport"/>
- <menu_item_call label="Mostra Sulla mappa" name="show_on_map"/>
- <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/>
+ <menu_item_call label="Teleport a questa destinazione" name="teleport"/>
+ <menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
+ <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index f9605da22a..36b44abf4b 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -2,67 +2,68 @@
<menu_bar name="Main Menu">
<menu label="Io" name="Me">
<menu_item_call label="Preferenze" name="Preferences"/>
- <menu_item_call label="Il mio Pannello di Controllo" name="Manage My Account">
+ <menu_item_call label="Il mio Dashboard" name="Manage My Account">
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=it"/>
</menu_item_call>
<menu_item_call label="Compra L$" name="Buy and Sell L$"/>
- <menu_item_call label="Il Mio Profilo" name="Profile"/>
- <menu_item_call label="Il Mio Aspetto" name="Appearance"/>
- <menu_item_check label="Il Mio Inventory" name="Inventory"/>
- <menu_item_call label="Mostra Inventory su Barra Laterale" name="ShowSidetrayInventory"/>
- <menu_item_call label="Le mie Gesture" name="Gestures"/>
- <menu label="Il Mio Stato" name="Status">
- <menu_item_call label="Non Disponibile" name="Set Away"/>
- <menu_item_call label="Non Disponibile" name="Set Busy"/>
+ <menu_item_call label="Il mio profilo" name="Profile"/>
+ <menu_item_call label="Il mio aspetto" name="Appearance"/>
+ <menu_item_check label="Il mio inventario" name="Inventory"/>
+ <menu_item_check label="Il mio inventario" name="ShowSidetrayInventory"/>
+ <menu_item_check label="Le mie gesture" name="Gestures"/>
+ <menu label="Il mio 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 Status Amministratore" name="Request Admin Options"/>
- <menu_item_call label="Lascia Status Amministratore" name="Leave Admin Options"/>
+ <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="Esci da [APP_NAME]" name="Quit"/>
</menu>
<menu label="Comunica" name="Communicate">
- <menu_item_call label="I Miei Amici" name="My Friends"/>
- <menu_item_call label="I Miei Gruppi" name="My Groups"/>
- <menu_item_check label="Chat Limitrofa" name="Nearby Chat"/>
- <menu_item_call label="Persone Vicine" name="Active Speakers"/>
- <menu_item_check label="MultiMedia Vicini" name="Nearby Media"/>
+ <menu_item_call label="I miei amici..." name="My Friends"/>
+ <menu_item_call label="I miei gruppi" name="My Groups"/>
+ <menu_item_check label="Chat nei dintorni" name="Nearby Chat"/>
+ <menu_item_call label="Persone vicine" name="Active Speakers"/>
</menu>
<menu label="Mondo" name="World">
- <menu_item_check label="Muovi" name="Movement Controls"/>
- <menu_item_check label="Vista" name="Camera Controls"/>
- <menu_item_call label="Info Terreno" name="About Land"/>
- <menu_item_call label="Regione/Proprietà Immobiliari" name="Region/Estate"/>
- <menu_item_call label="Compra Terreno" name="Buy Land"/>
- <menu_item_call label="Il Mio Terreno" name="My Land"/>
- <menu label="Mostra" name="Land">
- <menu_item_check label="Linee Non Accessibili" name="Ban Lines"/>
- <menu_item_check label="Segnalatori" name="beacons"/>
- <menu_item_check label="Linee di Confine" name="Property Lines"/>
- <menu_item_check label="Proprietari della Terra" name="Land Owners"/>
+ <menu_item_check label="Mini mappa" name="Mini-Map"/>
+ <menu_item_check label="Mappa del mondo" name="World Map"/>
+ <menu_item_call label="Istantanea" name="Take Snapshot"/>
+ <menu_item_call label="Crea punto di riferimento per questo luogo" name="Create Landmark Here"/>
+ <menu label="Profilo del posto" name="Land">
+ <menu_item_call label="Informazioni sui terreni" name="About Land"/>
+ <menu_item_call label="Regione/proprietà immobiliare" name="Region/Estate"/>
</menu>
- <menu label="Landmark" name="Landmarks">
- <menu_item_call label="Crea Landmark Qui" name="Create Landmark Here"/>
- <menu_item_call label="Imposta Qui come Casa" name="Set Home to Here"/>
+ <menu_item_call label="Acquista questo terreno" name="Buy Land"/>
+ <menu_item_call label="Il mio terreno" name="My Land"/>
+ <menu label="Mostra" name="LandShow">
+ <menu_item_check label="Comandi del movimento" name="Movement Controls"/>
+ <menu_item_check label="Comandi visualizzazione" name="Camera Controls"/>
+ <menu_item_check label="Linee di divieto" name="Ban Lines"/>
+ <menu_item_check label="Marcatori" name="beacons"/>
+ <menu_item_check label="Linee di confine" name="Property Lines"/>
+ <menu_item_check label="Proprietari di terreno" name="Land Owners"/>
+ <menu_item_check label="Coordinate" name="Coordinates"/>
+ <menu_item_check label="Proprietà del lotto" name="Parcel Properties"/>
</menu>
- <menu_item_call label="Teleport Casa" name="Teleport Home"/>
- <menu_item_check label="Mini-Mappa" name="Mini-Map"/>
- <menu_item_check label="Mappa del Mondo" name="World Map"/>
- <menu_item_call label="Foto" name="Take Snapshot"/>
+ <menu_item_call label="Teleport a Casa" name="Teleport Home"/>
+ <menu_item_call label="Imposta come Casa mia" name="Set Home to Here"/>
<menu label="Sole" name="Environment Settings">
<menu_item_call label="Alba" name="Sunrise"/>
<menu_item_call label="Mezzogiorno" name="Noon"/>
<menu_item_call label="Tramonto" name="Sunset"/>
<menu_item_call label="Mezzanotte" name="Midnight"/>
- <menu_item_call label="Usa l&apos;ora della Proprietà" name="Revert to Region Default"/>
+ <menu_item_call label="Orario della proprietà" name="Revert to Region Default"/>
<menu_item_call label="Editor dell&apos;ambiente" name="Environment Editor"/>
</menu>
</menu>
- <menu label="Build" name="BuildTools">
- <menu_item_check label="Build" name="Show Build Tools"/>
- <menu label="Seleziona Strumento Build" name="Select Tool">
- <menu_item_call label="Strumento Focalizza" name="Focus"/>
+ <menu label="Costruisci" name="BuildTools">
+ <menu_item_check label="Costruisci" name="Show Build Tools"/>
+ <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="Crea Strumento" name="Create"/>
+ <menu_item_call label="Crea strumento" name="Create"/>
<menu_item_call label="Strumento Terreno" name="Land"/>
</menu>
<menu label="Modifica" name="Edit">
@@ -71,92 +72,86 @@
<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="Cancella" name="Delete"/>
+ <menu_item_call label="Elimina" name="Delete"/>
<menu_item_call label="Duplica" name="Duplicate"/>
- <menu_item_call label="Seleziona Tutto" name="Select All"/>
+ <menu_item_call label="Seleziona tutto" name="Select All"/>
<menu_item_call label="Deseleziona" name="Deselect"/>
</menu>
- <menu_item_call label="Unisci" name="Link"/>
- <menu_item_call label="Separa" name="Unlink"/>
- <menu_item_call label="Focalizza su Selezione" name="Focus on Selection"/>
- <menu_item_call label="Avvicina alla Selezione" name="Zoom to Selection"/>
+ <menu_item_call label="Collegamento" name="Link"/>
+ <menu_item_call label="Scollega" name="Unlink"/>
+ <menu_item_check label="Modifica le parti collegate" name="Edit Linked Parts"/>
+ <menu_item_call label="Ingrandisci selezione" name="Focus on Selection"/>
+ <menu_item_call label="Zoom sulla selezione" name="Zoom to Selection"/>
<menu label="Oggetto" name="Object">
- <menu_item_call label="Compra" name="Menu Object Take"/>
- <menu_item_call label="Prendi Copia" name="Take Copy"/>
- <menu_item_call label="Salva Nuovamente nell&apos;Inventory" name="Save Object Back to My Inventory"/>
- <menu_item_call label="Salva Nuovamente Nel Contenuto Oggetto" name="Save Object Back to Object Contents"/>
+ <menu_item_call label="Acquista" name="Menu Object Buy"/>
+ <menu_item_call label="Prendi" name="Menu Object Take"/>
+ <menu_item_call label="Prendi copia" name="Take Copy"/>
+ <menu_item_call label="Salva nell&apos;inventario" name="Save Object Back to My Inventory"/>
+ <menu_item_call label="Salva nei contenuti oggetto" name="Save Object Back to Object Contents"/>
</menu>
<menu label="Script" name="Scripts">
- <menu_item_call label="Ricompila Script (Mono)" name="Mono"/>
- <menu_item_call label="Ricompila gli Script(LSL)" name="LSL"/>
- <menu_item_call label="Reimposta gli Script" name="Reset Scripts"/>
- <menu_item_call label="Imposta gli Script in Esecuzione" name="Set Scripts to Running"/>
- <menu_item_call label="Imposta gli Script Non In Esecuzione" name="Set Scripts to Not Running"/>
+ <menu_item_call label="Ricompila script (Mono)" name="Mono"/>
+ <menu_item_call label="Ricompila gli script (LSL)" name="LSL"/>
+ <menu_item_call label="Reimposta script" name="Reset Scripts"/>
+ <menu_item_call label="Imposta gli script come in esecuzione" name="Set Scripts to Running"/>
+ <menu_item_call label="Imposta script come non in esecuzione" name="Set Scripts to Not Running"/>
</menu>
<menu label="Opzioni" name="Options">
- <menu_item_check label="Modifica Parti Unite" name="Edit Linked Parts"/>
- <menu_item_call label="Imposta Permessi di Upload predefiniti" name="perm prefs"/>
- <menu_item_check label="Mostra Permessi Avanzati" name="DebugPermissions"/>
- <menu label="Selezione" name="Selection">
- <menu_item_check label="Seleziona Solo i Miei Oggetti" name="Select Only My Objects"/>
- <menu_item_check label="Seleziona Solo Oggetti Mobili" name="Select Only Movable Objects"/>
- <menu_item_check label="Seleziona Se Racchiuso" name="Select By Surrounding"/>
- </menu>
- <menu label="Mostra" name="Show">
- <menu_item_check label="Mostra Selezione Nascosta" name="Show Hidden Selection"/>
- <menu_item_check label="Mostra Raggio Luce per Selezione" name="Show Light Radius for Selection"/>
- <menu_item_check label="Mostra Raggio Selezione" name="Show Selection Beam"/>
- </menu>
- <menu label="Griglia" name="Grid">
- <menu_item_check label="Allinea al Righello" name="Snap to Grid"/>
- <menu_item_call label="Allinea Coordinate XY alla Griglia" name="Snap Object XY to Grid"/>
- <menu_item_call label="Usa Selezione per la Griglia" name="Use Selection for Grid"/>
- <menu_item_call label="Opzioni Griglia" name="Grid Options"/>
- </menu>
+ <menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/>
+ <menu_item_check label="Mostra autorizzazioni avanzate" name="DebugPermissions"/>
+ <menu_item_check label="Seleziona solo i miei oggetti" name="Select Only My Objects"/>
+ <menu_item_check label="Seleziona solo gli oggetti spostabili" name="Select Only Movable Objects"/>
+ <menu_item_check label="Seleziona circostante" name="Select By Surrounding"/>
+ <menu_item_check label="Seleziona mostra nascosti" name="Show Hidden Selection"/>
+ <menu_item_check label="Seleziona mostra il raggio luminoso per la selezione" name="Show Light Radius for Selection"/>
+ <menu_item_check label="Mostra il raggio indicatore" name="Show Selection Beam"/>
+ <menu_item_check label="Posiziona nella griglia" name="Snap to Grid"/>
+ <menu_item_call label="Posiziona coordinate XY dell&apos;oggetto sulla griglia" name="Snap Object XY to Grid"/>
+ <menu_item_call label="Usa la selezione per la griglia" name="Use Selection for Grid"/>
+ <menu_item_call label="Opzioni della griglia" name="Grid Options"/>
</menu>
- <menu label="Seleziona Parti Unite" name="Select Linked Parts">
- <menu_item_call label="Seleziona Prossima Parte" name="Select Next Part"/>
- <menu_item_call label="Seleziona Parte Precedente" name="Select Previous Part"/>
- <menu_item_call label="Includi Prossima Parte" name="Include Next Part"/>
- <menu_item_call label="Includi Parte Precedente" name="Include Previous Part"/>
+ <menu label="Seleziona parti collegate" name="Select Linked Parts">
+ <menu_item_call label="Seleziona parte successiva" name="Select Next Part"/>
+ <menu_item_call label="Seleziona parte precedente" name="Select Previous Part"/>
+ <menu_item_call label="Includi parte successiva" name="Include Next Part"/>
+ <menu_item_call label="Includi parte precedente" name="Include Previous Part"/>
</menu>
</menu>
<menu label="Aiuto" name="Help">
<menu_item_call label="[SECOND_LIFE] Aiuto" name="Second Life Help"/>
- <menu_item_call label="Tutorial" name="Tutorial"/>
- <menu_item_call label="Denuncia Abuso" name="Report Abuse"/>
- <menu_item_call label="Segnala Bug" name="Report Bug"/>
+ <menu_item_call label="Segnala abuso" name="Report Abuse"/>
+ <menu_item_call label="Segnala bug" name="Report Bug"/>
</menu>
- <menu label="Avanzato" name="Advanced">
- <menu_item_check label="Imposta non disponibile dopo 30 Minuti" name="Go Away/AFK When Idle"/>
- <menu_item_call label="Ferma le Animazioni" name="Stop Animating My Avatar"/>
- <menu_item_call label="Ridisegna le Texture" name="Rebake Texture"/>
- <menu_item_call label="Riporta le Dimensioni dell&apos;interfaccia ai Valori Predefiniti" name="Set UI Size to Default"/>
- <menu_item_check label="Limita Distanza di Selezione" name="Limit Select Distance"/>
- <menu_item_check label="Disabilita i Vincoli della Camera" name="Disable Camera Distance"/>
+ <menu label="Avanzate" name="Advanced">
+ <menu_item_call label="Ferma animazione" name="Stop Animating My Avatar"/>
+ <menu_item_call label="Ridisegna le texture" name="Rebake Texture"/>
+ <menu_item_call label="Imposta dimensioni dell&apos;interfaccia sui valori predefiniti" name="Set UI Size to Default"/>
+ <menu_item_call label="Imposta dimensioni della finestra..." name="Set Window Size..."/>
+ <menu_item_check label="Limita distanza di selezione" name="Limit Select Distance"/>
+ <menu_item_check label="Disabilita vincoli fotocamera" name="Disable Camera Distance"/>
<menu_item_check label="Foto ad alta risoluzione" name="HighResSnapshot"/>
- <menu_item_check label="Manda Foto su Disco Senza Avvisi" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Comprimi le Foto su Disco" name="CompressSnapshotsToDisk"/>
- <menu label="Strumenti di Performance" name="Performance Tools">
- <menu_item_call label="Misuratore Lag" name="Lag Meter"/>
- <menu_item_check label="Barra Statistiche" name="Statistics Bar"/>
- <menu_item_check label="Mostra Il Costo Visualizzazione Avatar (ARC)" name="Avatar Rendering Cost"/>
+ <menu_item_check label="Manda foto su disco senza avvisi" name="QuietSnapshotsToDisk"/>
+ <menu_item_check label="Comprimi le foto su disco" name="CompressSnapshotsToDisk"/>
+ <menu label="Strumenti di performance" name="Performance Tools">
+ <menu_item_call label="Misuratore lag" name="Lag Meter"/>
+ <menu_item_check label="Barra statistiche" name="Statistics Bar"/>
+ <menu_item_check label="Mostra costo di rendering dell&apos;avatar" name="Avatar Rendering Cost"/>
</menu>
- <menu label="Evidenziazione e Visibilità" name="Highlighting and Visibility">
- <menu_item_check label="Effetto Lampeggiante Segnalatore" name="Cheesy Beacon"/>
- <menu_item_check label="Nascondi Particelle" name="Hide Particles"/>
- <menu_item_check label="Nascondi Selezionati" name="Hide Selected"/>
- <menu_item_check label="Evidenzia Trasparente" name="Highlight Transparent"/>
- <menu_item_check label="Mostra Attachment HUD" name="Show HUD Attachments"/>
- <menu_item_check label="Mostra Mirino in Soggettiva" name="ShowCrosshairs"/>
- <menu_item_check label="Mostra Tooltip sul Terreno" name="Land Tips"/>
+ <menu label="Evidenziazione e visibilità" name="Highlighting and Visibility">
+ <menu_item_check label="Effetto marcatore lampeggiante" name="Cheesy Beacon"/>
+ <menu_item_check label="Nascondi particelle" name="Hide Particles"/>
+ <menu_item_check label="Nascondi selezionati" name="Hide Selected"/>
+ <menu_item_check label="Evidenzia trasparenza" name="Highlight Transparent"/>
+ <menu_item_check label="Mostra elementi HUD" name="Show HUD Attachments"/>
+ <menu_item_check label="Mostra mirino visuale soggettiva" name="ShowCrosshairs"/>
+ <menu_item_check label="Mostra tooltip terreno" name="Land Tips"/>
</menu>
- <menu label="Modalità di Rendering" name="Rendering Types">
+ <menu label="Modalità di rendering" name="Rendering Types">
<menu_item_check label="Semplice" name="Simple"/>
- <menu_item_check label="Alfa (Trasparenza)" name="Alpha"/>
+ <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="Superfici" name="SurfacePath"/>
+ <menu_item_check label="Superficie" name="SurfacePath"/>
<menu_item_check label="Cielo" name="Sky"/>
<menu_item_check label="Acqua" name="Water"/>
<menu_item_check label="Suolo" name="Ground"/>
@@ -166,161 +161,162 @@
<menu_item_check label="Particelle" name="Particles"/>
<menu_item_check label="Urti" name="Bump"/>
</menu>
- <menu label="Caratteristiche di Rendering" name="Rendering Features">
- <menu_item_check label="Interfaccia Utente" name="UI"/>
+ <menu label="Caratteristiche di rendering" name="Rendering Features">
+ <menu_item_check label="Interfaccia utente" name="UI"/>
<menu_item_check label="Selezionati" name="Selected"/>
<menu_item_check label="Evidenziato" name="Highlighted"/>
- <menu_item_check label="Texture Dinamiche" name="Dynamic Textures"/>
- <menu_item_check label="Ombre dei Piedi" name="Foot Shadows"/>
+ <menu_item_check label="Texture dinamiche" name="Dynamic Textures"/>
+ <menu_item_check label="Ombre dei piedi" name="Foot Shadows"/>
<menu_item_check label="Nebbia" name="Fog"/>
- <menu_item_check label="Oggetti Flessibili" name="Flexible Objects"/>
+ <menu_item_check label="Oggetti flessibili" name="Flexible Objects"/>
</menu>
- <menu_item_check label="Esegui Thread Multipli" name="Run Multiple Threads"/>
- <menu_item_call label="Pulisci la Cache di Gruppo" name="ClearGroupCache"/>
- <menu_item_check label="Fluidità Mouse" name="Mouse Smoothing"/>
- <menu_item_check label="Mostra IM nella Chat Limitrofa" name="IMInChat"/>
+ <menu_item_check label="Esegui thread multipli" name="Run Multiple Threads"/>
+ <menu_item_call label="Pulisci cache di gruppo" name="ClearGroupCache"/>
+ <menu_item_check label="Fluidità mouse" name="Mouse Smoothing"/>
<menu label="Scorciatoie" name="Shortcuts">
- <menu_item_check label="Ricerca" name="Search"/>
- <menu_item_call label="Rilascia Tasti" name="Release Keys"/>
- <menu_item_call label="Imposta dimensioni Interfacca a Valori Predefiniti" name="Set UI Size to Default"/>
- <menu_item_check label="Corri Sempre" name="Always Run"/>
+ <menu_item_call label="Immagine ([COST]L$)..." name="Upload Image"/>
+ <menu_item_check label="Cerca" name="Search"/>
+ <menu_item_call label="Rilascia tasti" name="Release Keys"/>
+ <menu_item_call label="Imposta dimensioni dell&apos;interfaccia sui valori predefiniti" name="Set UI Size to Default"/>
+ <menu_item_check label="Corri sempre" name="Always Run"/>
<menu_item_check label="Vola" name="Fly"/>
- <menu_item_call label="Chiudi Finestra" name="Close Window"/>
- <menu_item_call label="Chiudi Tutte le Finestre" name="Close All Windows"/>
- <menu_item_call label="Foto su Disco" name="Snapshot to Disk"/>
+ <menu_item_call label="Chiudi finestra" name="Close Window"/>
+ <menu_item_call label="Chiudi tutte le finestre" name="Close All Windows"/>
+ <menu_item_call label="Foto su disco" name="Snapshot to Disk"/>
<menu_item_call label="Soggettiva" name="Mouselook"/>
<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;Ultimo che ha parlato" name="Look at Last Chatter"/>
- <menu label="Seleziona Strumento Build" name="Select Tool">
- <menu_item_call label="Strumento Focalizza" name="Focus"/>
+ <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="Crea Strumento" name="Create"/>
+ <menu_item_call label="Crea strumento" name="Create"/>
<menu_item_call label="Strumento Terreno" name="Land"/>
</menu>
- <menu_item_call label="Avvicina" name="Zoom In"/>
- <menu_item_call label="Zoom Predefinito" name="Zoom Default"/>
- <menu_item_call label="Allontana" name="Zoom Out"/>
- <menu_item_call label="Alterna Schermo Intero" name="Toggle Fullscreen"/>
+ <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"/>
+ <menu_item_call label="Alterna schermo intero" name="Toggle Fullscreen"/>
</menu>
- <menu_item_call label="Mostra Impostazioni di Debug" name="Debug Settings"/>
- <menu_item_check label="Mostra Menu Sviluppo" name="Debug Mode"/>
+ <menu_item_call label="Mostra impostazioni di debug" name="Debug Settings"/>
+ <menu_item_check label="Mostra menu sviluppo" name="Debug Mode"/>
</menu>
<menu label="Sviluppo" name="Develop">
<menu label="Console" name="Consoles">
- <menu_item_check label="Console Texture" name="Texture Console"/>
+ <menu_item_check label="Console texture" name="Texture Console"/>
<menu_item_check label="Console di Debug" name="Debug Console"/>
- <menu_item_call label="Console Notifiche" name="Notifications"/>
- <menu_item_check label="Console Dimensioni Texture" name="Texture Size"/>
- <menu_item_check label="Console Categoria Texture" name="Texture Category"/>
- <menu_item_check label="Timer Veloci" name="Fast Timers"/>
+ <menu_item_call label="Console notifiche" name="Notifications"/>
+ <menu_item_check label="Console dimensioni texture" name="Texture Size"/>
+ <menu_item_check label="Console categoria texture" name="Texture Category"/>
+ <menu_item_check label="Timer veloci" name="Fast Timers"/>
<menu_item_check label="Memoria" name="Memory"/>
- <menu_item_call label="Info Regione Sulla Console di Debug" name="Region Info to Debug Console"/>
- <menu_item_check label="Camera" name="Camera"/>
+ <menu_item_call label="Informazioni regione sulla console di debug" name="Region Info to Debug Console"/>
+ <menu_item_check label="Fotocamera" name="Camera"/>
<menu_item_check label="Vento" name="Wind"/>
+ <menu_item_check label="Badge" name="Badge"/>
</menu>
- <menu label="Mostra Info" name="Display Info">
- <menu_item_check label="Mostra Tempo" name="Show Time"/>
- <menu_item_check label="Mostra Info Rendering" name="Show Render Info"/>
- <menu_item_check label="Mostra Colore sotto il Cursore" name="Show Color Under Cursor"/>
- <menu_item_check label="Mostra Aggiornamenti agli Oggetti" name="Show Updates"/>
+ <menu label="Mostra informazioni" name="Display Info">
+ <menu_item_check label="Mostra orario" name="Show Time"/>
+ <menu_item_check label="Mostra informazioni di rendering" name="Show Render Info"/>
+ <menu_item_check label="Mostra colore sotto il cursore" name="Show Color Under Cursor"/>
+ <menu_item_check label="Mostra aggiornamenti agli oggetti" name="Show Updates"/>
</menu>
- <menu label="Forza Errori" name="Force Errors">
- <menu_item_call label="Forza Breakpoint" name="Force Breakpoint"/>
+ <menu label="Forza un errore" name="Force Errors">
+ <menu_item_call label="Forza punto di rottura" name="Force Breakpoint"/>
<menu_item_call label="Forza LLError e Crash" name="Force LLError And Crash"/>
- <menu_item_call label="Forza Accesso Invalido alla Memoria" name="Force Bad Memory Access"/>
- <menu_item_call label="Forza Ciclo Infinito" name="Force Infinite Loop"/>
- <menu_item_call label="Forza il Crash del Driver" name="Force Driver Carsh"/>
- <menu_item_call label="Forza Eccezione Software" name="Force Software Exception"/>
- <menu_item_call label="Forza Disconnessione Viewer" name="Force Disconnect Viewer"/>
- <menu_item_call label="Simula un Memory Leak" name="Memory Leaking Simulation"/>
+ <menu_item_call label="Forza accesso non valido alla memoria" name="Force Bad Memory Access"/>
+ <menu_item_call label="Forza ciclo infinito" name="Force Infinite Loop"/>
+ <menu_item_call label="Forza il crash del driver" name="Force Driver Carsh"/>
+ <menu_item_call label="Forza eccezione software" name="Force Software Exception"/>
+ <menu_item_call label="Forza scollegamento viewer" name="Force Disconnect Viewer"/>
+ <menu_item_call label="Simula fuga di memoria" name="Memory Leaking Simulation"/>
</menu>
- <menu label="Test di Rendering" name="Render Tests">
- <menu_item_check label="Spostamento Camera" name="Camera Offset"/>
- <menu_item_check label="Framerate Casuale" name="Randomize Framerate"/>
- <menu_item_check label="Test Frame" name="Frame Test"/>
+ <menu label="Prove di rendering" name="Render Tests">
+ <menu_item_check label="Spostamento fotocamera" name="Camera Offset"/>
+ <menu_item_check label="Veloc. di visualizzazione casuale" name="Randomize Framerate"/>
+ <menu_item_check label="Test frame" name="Frame Test"/>
</menu>
<menu label="Rendering" name="Rendering">
<menu_item_check label="Assi" name="Axes"/>
<menu_item_check label="Wireframe" name="Wireframe"/>
- <menu_item_check label="Illuminazione Globale" name="Global Illumination"/>
- <menu_item_check label="Texture delle Animation" name="Animation Textures"/>
- <menu_item_check label="Disabilita Textures" name="Disable Textures"/>
- <menu_item_check label="Rendering Luci degli Attachment" name="Render Attached Lights"/>
- <menu_item_check label="Visualizza Particelle dagli Attachment" name="Render Attached Particles"/>
- <menu_item_check label="Gli Oggetti Brillano quando sono sotto il Cursore" name="Hover Glow Objects"/>
+ <menu_item_check label="Illuminazione globale" name="Global Illumination"/>
+ <menu_item_check label="Texture delle animazioni" name="Animation Textures"/>
+ <menu_item_check label="Disabilita texture" name="Disable Textures"/>
+ <menu_item_check label="Rendering delle luci unite" name="Render Attached Lights"/>
+ <menu_item_check label="Rendering particelle unite" name="Render Attached Particles"/>
+ <menu_item_check label="Gli oggetti brillano quando sono sotto il cursore" name="Hover Glow Objects"/>
</menu>
<menu label="Rete" name="Network">
- <menu_item_check label="Metti in Pausa Avatar" name="AgentPause"/>
- <menu_item_call label="Perdi un Pacchetto" name="Drop a Packet"/>
+ <menu_item_check label="Metti in pausa" name="AgentPause"/>
+ <menu_item_call label="Lascia un pacchetto" name="Drop a Packet"/>
</menu>
- <menu_item_call label="Urti, Spinte &amp; Contatti" name="Bumps, Pushes &amp;amp; Hits"/>
+ <menu_item_call label="Urti, spinte e contatti" name="Bumps, Pushes &amp;amp; Hits"/>
<menu label="Mondo" name="World">
- <menu_item_check label="Sostituisci al Sole della Regione" name="Sim Sun Override"/>
- <menu_item_check label="Effetto Lampeggiante Indicatore" name="Cheesy Beacon"/>
- <menu_item_check label="Fissa il Clima" name="Fixed Weather"/>
- <menu_item_call label="Stampa la Cache degli Oggetti in Regione" name="Dump Region Object Cache"/>
+ <menu_item_check label="Esclusione al sole della regione" name="Sim Sun Override"/>
+ <menu_item_check label="Effetto marcatore lampeggiante" name="Cheesy Beacon"/>
+ <menu_item_check label="Clima fisso" name="Fixed Weather"/>
+ <menu_item_call label="Dump della cache oggetti regione" name="Dump Region Object Cache"/>
</menu>
- <menu label="Interfaccia Utente" name="UI">
- <menu_item_call label="Test Browser Web" name="Web Browser Test"/>
- <menu_item_call label="Stampa Info per Oggetto Selezionato" name="Print Selected Object Info"/>
- <menu_item_call label="Statistiche Memoria" name="Memory Stats"/>
- <menu_item_check label="Doppio Click Pilota Automatico" name="Double-ClickAuto-Pilot"/>
- <menu_item_check label="Debug Click" name="Debug Clicks"/>
- <menu_item_check label="Debug Eventi del Mouse" name="Debug Mouse Events"/>
+ <menu label="Interfaccia utente" name="UI">
+ <menu_item_call label="Test browser Web" name="Web Browser Test"/>
+ <menu_item_call label="Stampa informazioni oggetto selezionato" name="Print Selected Object Info"/>
+ <menu_item_call label="Statistiche memoria" name="Memory Stats"/>
+ <menu_item_check label="Doppio clic pilota automatico" name="Double-ClickAuto-Pilot"/>
+ <menu_item_check label="Debug clic" name="Debug Clicks"/>
+ <menu_item_check label="Debug eventi mouse" name="Debug Mouse Events"/>
</menu>
<menu label="XUI" name="XUI">
- <menu_item_call label="Ricarica Impostazioni Colori" name="Reload Color Settings"/>
+ <menu_item_call label="Ricarica impostazioni colori" name="Reload Color Settings"/>
<menu_item_call label="Test Mostra Font" name="Show Font Test"/>
<menu_item_call label="Carica da XML" name="Load from XML"/>
<menu_item_call label="Salva in XML" name="Save to XML"/>
- <menu_item_check label="Mostra Nomi XUI" name="Show XUI Names"/>
- <menu_item_call label="Manda IM di Test" name="Send Test IMs"/>
+ <menu_item_check label="Mostra nomi XUI" name="Show XUI Names"/>
+ <menu_item_call label="Manda IM di prova" name="Send Test IMs"/>
</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 Corpo" name="Upper Body"/>
- <menu_item_call label="Parte Inferiore del Corpo" name="Lower Body"/>
+ <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>
- <menu label="Test Personaggio" name="Character Tests">
- <menu_item_call label="Alterna la Geometria dei Personaggi" name="Toggle Character Geometry"/>
- <menu_item_check label="Consenti Selezione Avatar" name="Allow Select Avatar"/>
+ <menu label="Test personaggio" name="Character Tests">
+ <menu_item_call label="Alterna la geometria dei personaggi" name="Toggle Character Geometry"/>
+ <menu_item_check label="Consenti selezione avatar" name="Allow Select Avatar"/>
</menu>
- <menu_item_call label="Forza i Parametri ai Valori Predefiniti" name="Force Params to Default"/>
- <menu_item_check label="Info delle Animation" name="Animation Info"/>
+ <menu_item_call label="Forza i parametri sui valori predefiniti" name="Force Params to Default"/>
+ <menu_item_check label="Informazioni sull&apos;animazione" name="Animation Info"/>
<menu_item_check label="Animazioni lente" name="Slow Motion Animations"/>
- <menu_item_check label="Disabilita Livello di Dettaglio" name="Disable LOD"/>
- <menu_item_check label="Mostra Schemi Collisione" name="Show Collision Skeleton"/>
- <menu_item_check label="Mostra Agent Destinazione" name="Display Agent Target"/>
- <menu_item_call label="Debug Texture dell&apos;Avatar" name="Debug Avatar Textures"/>
+ <menu_item_check label="Disabilita livello di dettaglio" name="Disable LOD"/>
+ <menu_item_check label="Mostra schemi collisione" name="Show Collision Skeleton"/>
+ <menu_item_check label="Mostra bersaglio" name="Display Agent Target"/>
+ <menu_item_call label="Debug texture dell&apos;avatar" name="Debug Avatar Textures"/>
</menu>
<menu_item_check label="Texture HTTP" name="HTTP Textures"/>
- <menu_item_check label="Finestra Console al Prossimo Lancio" name="Console Window"/>
- <menu_item_check label="Mostra Menu Admin" name="View Admin Options"/>
- <menu_item_call label="Richiedi Status Amministrator" name="Request Admin Options"/>
- <menu_item_call label="Lascia lo Stato di Admin" name="Leave Admin Options"/>
+ <menu_item_check label="Finestra Console al prossimo lancio" name="Console Window"/>
+ <menu_item_check label="Mostra menu Admin" name="View Admin Options"/>
+ <menu_item_call label="Richiedi diritti Admin" name="Request Admin Options"/>
+ <menu_item_call label="Lascia stato Admin" name="Leave Admin Options"/>
</menu>
- <menu label="Amministratore" name="Admin">
+ <menu label="Admin" name="Admin">
<menu label="Object">
- <menu_item_call label="Prendi Copia" name="Take Copy"/>
- <menu_item_call label="Rendimi Proprietario" name="Force Owner To Me"/>
- <menu_item_call label="Forza Proprietario Facoltativo?" name="Force Owner Permissive"/>
- <menu_item_call label="Cancella" name="Delete"/>
+ <menu_item_call label="Prendi copia" name="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>
- <menu label="Appezzamento" name="Parcel">
- <menu_item_call label="Rendimi Proprietario" name="Owner To Me"/>
- <menu_item_call label="Imposta al Contenuto Linden" name="Set to Linden Content"/>
- <menu_item_call label="Prendi Terreno Pubblico" name="Claim Public Land"/>
+ <menu label="Lotto" name="Parcel">
+ <menu_item_call label="Rendimi proprietario" name="Owner To Me"/>
+ <menu_item_call label="Imposta sul contenuto Linden" name="Set to Linden Content"/>
+ <menu_item_call label="Rivendica terreno pubblico" name="Claim Public Land"/>
</menu>
<menu label="Regione" name="Region">
- <menu_item_call label="Stampa i Dati Temporanei degli Asset" name="Dump Temp Asset Data"/>
- <menu_item_call label="Salva Stato Regione" name="Save Region State"/>
+ <menu_item_call label="Dump di dati temporanei degli asset" name="Dump Temp Asset Data"/>
+ <menu_item_call label="Salva stato regione" name="Save Region State"/>
</menu>
- <menu_item_call label="Strumenti SuperUser" name="God Tools"/>
+ <menu_item_call label="Strumenti Admin" name="God Tools"/>
</menu>
</menu_bar>
diff --git a/indra/newview/skins/default/xui/it/mime_types_linux.xml b/indra/newview/skins/default/xui/it/mime_types_linux.xml
index 5db3eddca8..3bc30b507a 100644
--- a/indra/newview/skins/default/xui/it/mime_types_linux.xml
+++ b/indra/newview/skins/default/xui/it/mime_types_linux.xml
@@ -2,24 +2,24 @@
<mimetypes name="default">
<widgetset name="web">
<label name="web_label">
- Contenuto del Web
+ Contenuti Web
</label>
<tooltip name="web_tooltip">
- Questo luogo ha un contenuto Web
+ Questo luogo presenta contenuti Web
</tooltip>
<playtip name="web_playtip">
- Mostra il contenuto Web
+ Mostra contenuti Web
</playtip>
</widgetset>
<widgetset name="movie">
<label name="movie_label">
- Video
+ Filmato
</label>
<tooltip name="movie_tooltip">
- Qui c&apos;è un video da riprodurre
+ C&apos;è un filmato da vedere qui
</tooltip>
<playtip name="movie_playtip">
- Riproduci video
+ Riproduci il filmato
</playtip>
</widgetset>
<widgetset name="image">
@@ -27,10 +27,10 @@
Immagine
</label>
<tooltip name="image_tooltip">
- C&apos;è un immagine in questo luogo
+ C&apos;è un&apos;immagine in questo luogo
</tooltip>
<playtip name="image_playtip">
- Guarda l&apos;immagine di questo luogo
+ Vedi l&apos;immagine di questo luogo
</playtip>
</widgetset>
<widgetset name="audio">
@@ -38,25 +38,25 @@
Audio
</label>
<tooltip name="audio_tooltip">
- In questo luogo c&apos;è l&apos;audio
+ C&apos;è un audio in questo luogo
</tooltip>
<playtip name="audio_playtip">
- Riproduci l&apos;audio in questo luogo
+ Riproduci l&apos;audio di questo luogo
</playtip>
</widgetset>
<scheme name="rtsp">
<label name="rtsp_label">
- Real Time Streaming
+ Streaming in tempo reale
</label>
</scheme>
<mimetype name="blank">
<label name="blank_label">
- - Vuoto -
+ - Nessuno -
</label>
</mimetype>
<mimetype name="none/none">
<label name="none/none_label">
- - Vuoto -
+ - Nessuno -
</label>
</mimetype>
<mimetype name="audio/*">
@@ -76,7 +76,7 @@
</mimetype>
<mimetype name="video/vnd.secondlife.qt.legacy">
<label name="vnd.secondlife.qt.legacy_label">
- Video (QuickTime)
+ Filmato (QuickTime)
</label>
</mimetype>
<mimetype name="application/javascript">
@@ -116,7 +116,7 @@
</mimetype>
<mimetype name="application/x-director">
<label name="application/x-director_label">
- Direttore Macromedia
+ Macromedia Director
</label>
</mimetype>
<mimetype name="audio/mid">
@@ -186,32 +186,32 @@
</mimetype>
<mimetype name="video/mpeg">
<label name="video/mpeg_label">
- Video (MPEG)
+ Filmato (MPEG)
</label>
</mimetype>
<mimetype name="video/mp4">
<label name="video/mp4_label">
- Video (MP4)
+ Filmato (MP4)
</label>
</mimetype>
<mimetype name="video/quicktime">
<label name="video/quicktime_label">
- Video (QuickTime)
+ Filmato (QuickTime)
</label>
</mimetype>
<mimetype name="video/x-ms-asf">
<label name="video/x-ms-asf_label">
- Video (Windows Media ASF)
+ Filmato (Windows Media ASF)
</label>
</mimetype>
<mimetype name="video/x-ms-wmv">
<label name="video/x-ms-wmv_label">
- Video (Windows Media WMV)
+ Filmato (Windows Media WMV)
</label>
</mimetype>
<mimetype name="video/x-msvideo">
<label name="video/x-msvideo_label">
- Video (AVI)
+ Filmato (AVI)
</label>
</mimetype>
</mimetypes>
diff --git a/indra/newview/skins/default/xui/it/mime_types_mac.xml b/indra/newview/skins/default/xui/it/mime_types_mac.xml
index f91c9ce5bd..3bc30b507a 100644
--- a/indra/newview/skins/default/xui/it/mime_types_mac.xml
+++ b/indra/newview/skins/default/xui/it/mime_types_mac.xml
@@ -2,13 +2,13 @@
<mimetypes name="default">
<widgetset name="web">
<label name="web_label">
- Argomento nel Web
+ Contenuti Web
</label>
<tooltip name="web_tooltip">
- Questo luogo ha un argomento nel Web
+ Questo luogo presenta contenuti Web
</tooltip>
<playtip name="web_playtip">
- Mostra l&apos;argomento del Web
+ Mostra contenuti Web
</playtip>
</widgetset>
<widgetset name="movie">
@@ -30,7 +30,7 @@
C&apos;è un&apos;immagine in questo luogo
</tooltip>
<playtip name="image_playtip">
- Vedere l&apos;immagine di questo luogo
+ Vedi l&apos;immagine di questo luogo
</playtip>
</widgetset>
<widgetset name="audio">
@@ -46,7 +46,7 @@
</widgetset>
<scheme name="rtsp">
<label name="rtsp_label">
- Real Time Streaming
+ Streaming in tempo reale
</label>
</scheme>
<mimetype name="blank">
@@ -86,17 +86,17 @@
</mimetype>
<mimetype name="application/ogg">
<label name="application/ogg_label">
- Ogg Audio/Video
+ Audio/Video Ogg
</label>
</mimetype>
<mimetype name="application/pdf">
<label name="application/pdf_label">
- PDF Document
+ Documento PDF
</label>
</mimetype>
<mimetype name="application/postscript">
<label name="application/postscript_label">
- Postscript Document
+ Documento Postscript
</label>
</mimetype>
<mimetype name="application/rtf">
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 2a370a2ed0..6736c6a6f1 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -11,18 +11,29 @@
</global>
<template name="okbutton">
<form>
- <button name="OK" text="$yestext"/>
+ <button name="OK_okbutton" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okignore">
+ <form>
+ <button name="OK_okignore" text="$yestext"/>
</form>
</template>
- <template name="okignore"/>
<template name="okcancelbuttons">
<form>
- <button name="Cancel" text="$notext"/>
+ <button name="OK_okcancelbuttons" text="$yestext"/>
+ <button name="Cancel_okcancelbuttons" text="$notext"/>
+ </form>
+ </template>
+ <template name="okcancelignore">
+ <form>
+ <button name="OK_okcancelignore" text="$yestext"/>
+ <button name="Cancel_okcancelignore" text="$notext"/>
</form>
</template>
- <template name="okcancelignore"/>
<template name="okhelpbuttons">
<form>
+ <button name="OK_okhelpbuttons" text="$yestext"/>
<button name="Help" text="$helptext"/>
</form>
</template>
@@ -30,12 +41,13 @@
<form>
<button name="Yes" text="$yestext"/>
<button name="No" text="$notext"/>
+ <button name="Cancel_yesnocancelbuttons" text="$canceltext"/>
</form>
</template>
- <notification functor="GenericAcknowledge" label="Messaggio di Notifica Sconosciuto" name="MissingAlert">
- La versione di [APP_NAME] non riesce a visualizzare la notifica che ha ricevuto. Verifica di avere l&apos;ultima versione del Viewer installata.
+ <notification functor="GenericAcknowledge" label="Messaggio di notifica sconosciuto" name="MissingAlert">
+ La versione di [APP_NAME] non riesce a visualizzare la notifica appena ricevuta. Verifica di avere l&apos;ultima versione del Viewer installata.
-Dettaglio Errore: La notifica di nome &apos;[_NAME]&apos; non è stata trovata in notifications.xml.
+Dettagli errore: La notifica denominata &apos;[_NAME]&apos; non è stata trovata in notifications.xml.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="FloaterNotFound">
@@ -56,11 +68,11 @@ Dettaglio Errore: La notifica di nome &apos;[_NAME]&apos; non è stata trovata i
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Si"/>
</notification>
<notification name="BadInstallation">
- Errore mentre si aggiornava [APP_NAME]. [http://get.secondlife.com Scarica l&apos;ultima versione] del Viewer.
+ Il programma [APP_NAME] ha riscontrato un&apos;errore durante il tentativo di aggiornamento. [http://get.secondlife.com Scarica l&apos;ultima versione] del Viewer.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LoginFailedNoNetwork">
- Non è possibile connettersi a [SECOND_LIFE_GRID].
+ Non è possibile collegarsi alla [SECOND_LIFE_GRID].
&apos;[DIAGNOSTIC]&apos;
Accertati che la tua connessione Internet stia funzionando correttamente.
<usetemplate name="okbutton" yestext="OK"/>
@@ -93,14 +105,18 @@ Scegli solo un oggetto e riprova.
Salva tutte le modifiche alle parti del corpo/abiti?
<usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Non Salvare" yestext="Salva Tutto"/>
</notification>
+ <notification name="FriendsAndGroupsOnly">
+ Chi non è tuo amico non saprà che hai scelto di ignorare le loro chiamate e IM.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="GrantModifyRights">
- Dare i diritti di modifica ad un altro residente gli consente di cambiare, cancellare o prendere QUALUNQUE oggetto che hai in [SECOND_LIFE]. Fai MOLTA attenzione quando concedi questo permesso.
-Vuoi davvero dare i diritti di modifica a [FIRST_NAME] [LAST_NAME]?
+ Quando concedi i diritti di modifica ad un altro residente, gli permetti di modificare, eliminare o prendere QUALSIASI oggetto che possiedi in Second Life. Pertanto ti consigliamo di essere ben sicuro quando concedi questo diritto.
+Vuoi concedere i diritti di modifica a [FIRST_NAME] [LAST_NAME]?
<usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
<notification name="GrantModifyRightsMultiple">
- Dare i diritti di modifica ad un altro residente gli consente di cambiare QUALUNQUE oggetto che hai in [SECOND_LIFE]. Fai MOLTA attenzione quando concedi questo permesso.
-Vuoi davvero dare i diritti di modifica ai residenti selezionati?
+ Quando concedi i diritti di modifica ad un altro residente, gli permetti di modificare QUALSIASI oggetto che possiedi in Second Life. Pertanto ti consigliamo di essere ben sicuro quando concedi questo diritto.
+Vuoi concedere i diritti di modifica ai residenti selezionati?
<usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
<notification name="RevokeModifyRights">
@@ -130,7 +146,7 @@ Vuoi davvero dare i diritti di modifica ai residenti selezionati?
Non si possono rimuovere membri da quel ruolo.
I membri devono dimettersi volontariamente dal ruolo.
Confermi l&apos;operazione?
- <usetemplate ignoretext="Conferma prima di aggiungere un nuovo Proprietario del Gruppo" name="okcancelignore" notext="No" yestext="Si"/>
+ <usetemplate ignoretext="Conferma prima di aggiungere un nuovo proprietario del gruppo" name="okcancelignore" notext="No" yestext="Si"/>
</notification>
<notification name="AssignDangerousActionWarning">
Stai per aggiungere il potere &apos;[ACTION_NAME]&apos; al ruolo &apos;[ROLE_NAME]&apos;.
@@ -150,23 +166,30 @@ Aggiungi questo potere a &apos;[ROLE_NAME]&apos;?
Aggiungi questo potere a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
- <notification name="ClickUnimplemented">
- Mi dispiace, non è ancora stato implementato.
+ <notification name="AttachmentDrop">
+ Stai per abbandonare il tuo accessorio.
+ Vuoi continuare?
+ <usetemplate ignoretext="Conferma prima di distaccare gli accessori" name="okcancelignore" notext="No" yestext="Sì"/>
</notification>
<notification name="JoinGroupCanAfford">
Iscriversi a questo gruppo costa [COST]L$.
Vuoi proseguire?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Iscriviti"/>
</notification>
+ <notification name="JoinGroupNoCost">
+ Aderisci al gruppo [NAME].
+Continuare?
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Iscriviti"/>
+ </notification>
<notification name="JoinGroupCannotAfford">
Iscriversi a questo gruppo costa [COST]L$.
Non hai abbastanza L$ per iscriverti a questo gruppo.
</notification>
<notification name="CreateGroupCost">
- La Creazione di questo gruppo costerà L$100.
-I Gruppi devono avere più di un membro, o saranno cancellati definitivamente.
-Per favore invita altri membri entro le prossime 48 ore.
- <usetemplate canceltext="Annulla" name="okcancelbuttons" notext="Cancella" yestext="Crea un gruppo per L$100"/>
+ La creazione di questo gruppo costerà L$ 100.
+I gruppi devono avere più di un partecipante, o saranno eliminati definitivamente.
+Invita altri partecipanti entro le prossime 48 ore.
+ <usetemplate canceltext="Annulla" name="okcancelbuttons" notext="Annulla" yestext="Crea un gruppo per L$ 100"/>
</notification>
<notification name="LandBuyPass">
Pagando [COST]L$ puoi entrare in questa terra (&apos;[PARCEL_NAME]&apos;) per [TIME] ore. Compri un pass?
@@ -182,10 +205,10 @@ Il tuo prezzo di vendità è [SALE_PRICE]L$ ed è autorizzato alla vendita a [NA
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmLandSaleToAnyoneChange">
- ATTENZIONE: Cliccando &apos;vendi a tutti&apos; rende questo terreno disponibile all&apos;intera comunità [SECOND_LIFE], perfino a quelli che non sono in questa regione.
+ ATTENZIONE: Quando selezioni &apos;vendi a tutti&apos;, rendi questo terreno disponibile all&apos;intera comunità di [SECOND_LIFE], anche alle persone che non si trovano in questa regione.
-Stai mettendo in vendita il terrendo selezionato di [LAND_SIZE] m².
-Il prezzo di vendità è [SALE_PRICE]L$ e verrà autorizzato alla vendita a [NAME].
+Il terrendo selezionato di [LAND_SIZE] m² sta per essere messo in vendita.
+Il prezzo di vendità sarà [SALE_PRICE]L$ e [NAME] viene autorizzato alla vendita.
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ReturnObjectsDeededToGroup">
@@ -246,10 +269,10 @@ L&apos;intera regione ha l&apos;abilitazione danni.
Gli script devono essere autorizzati all&apos;esecuzione affinchè le armi funzionino.
</notification>
<notification name="MultipleFacesSelected">
- Multiple facce multimediale sono attualmente selezionate.
-Se prosegui con questa azione, esempi separati del media saranno impostati su facce multimediali dell&apos;oggetto. ???!!!
-Per impostare il media su una sola faccia multimediale, scegli Seleziona Faccia e clicca la faccia desiderata dell&apos;oggetto e poi clicca Aggiungi.
- <usetemplate ignoretext="Il Media sarà impostato su facce multimediali multiple" name="okcancelignore" notext="Cancella" yestext="OK"/>
+ Sono state selezionate più facce.
+Se prosegui con questa azione, sulle diverse facce dell&apos;oggetto verranno definite sessioni multimediali distinte.
+Per collocare il media su una sola faccia, scegli Seleziona faccia, clicca su una faccia e clicca su Aggiungi.
+ <usetemplate ignoretext="Il canale multimediale sarà impostato su più facce selezionate" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="MustBeInParcel">
Devi essere dentro il terreno per impostare il suo Punto di Atterraggio.
@@ -287,8 +310,8 @@ La cartella equipaggiamento non contiene abbigliamento, parti del corpo o attach
Non puoi indossare abiti e parti del corpo che sono nel cestino
</notification>
<notification name="MaxAttachmentsOnOutfit">
- L&apos;oggetto non può essere attaccato.
-Superato il limite di oggetti attaccati [MAX_ATTACHMENTS]. Per favore prima stacca un altro oggetto.
+ L&apos;oggetto non può essere collegato.
+Superato il limite di oggetti collegati [MAX_ATTACHMENTS]. Per favore prima stacca un altro oggetto.
</notification>
<notification name="CannotWearInfoNotComplete">
Non puoi indossare quell&apos;elemento perchè non è ancora stato caricato. Riprova fra un minuto.
@@ -304,11 +327,11 @@ Hai bisogno di un account per entrare in [SECOND_LIFE]. Ne vuoi creare uno adess
<usetemplate name="okcancelbuttons" notext="Riprova" yestext="Crea un nuovo account"/>
</notification>
<notification name="AddClassified">
- L&apos;inserzione apparirà nella sezione &apos;Annunci&apos; della Ricerca e su [http://secondlife.com/community/classifieds secondlife.com] per una settimana.
-Compila la tua inserzione, e quindi clicca &apos;Pubblica...&apos; per aggiungerla all&apos;elenco.
-Ti sarà chiesto un prezzo da pagare quando clicchi Pubblica.
-Pagando di più il tuo annuncio apparirà più in alto nella lista, e apparirà anche più in alto quando la gente cerca per Parole Chiavi.
- <usetemplate ignoretext="Come Creare una nuova Inserzione" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ L&apos;inserzione comparirà nella sezione &apos;Annunci&apos; della Ricerca e su [http://secondlife.com/community/classifieds secondlife.com] per una settimana.
+Compila la tua inserzione, quindi clicca &apos;Pubblica...&apos; per aggiungerla all&apos;elenco degli annunci.
+Quando clicchi su Pubblica, ti verrà chiesto di indicare quale prezzo vuoi pagare.
+Pagando di più, il tuo annuncio comparirà più in alto nella lista delle inserzioni, nonché nei risultati delle ricerche in base a parole chiave.
+ <usetemplate ignoretext="Come creare una nuova inserzione" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="DeleteClassified">
Cancella annuncio &apos;[NAME]&apos;?
@@ -316,14 +339,18 @@ Non ci sono rimborsi per la tariffa pagata.
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="DeleteMedia">
- Hai selezionato la cancellazione del media associato a questa faccia multimediale.
-Sei sicuro di voler continuare?
- <usetemplate ignoretext="Confemra la cancellazione del multimedia dall&apos;oggetto" name="okcancelignore" notext="No" yestext="Si"/>
+ Hai selezionato la cancellazione del media associato a questa faccia.
+Vuoi continuare?
+ <usetemplate ignoretext="Conferma prima di eliminare elemnti multimediali dall&apos;oggetto" name="okcancelignore" notext="No" yestext="Sì"/>
</notification>
<notification name="ClassifiedSave">
Salva le modifiche all&apos;annuncio [NAME]?
<usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Non salvare" yestext="Salva"/>
</notification>
+ <notification name="ClassifiedInsufficientFunds">
+ Denaro insufficiente per creare un&apos;inserzione.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="DeleteAvatarPick">
Cancella il favorito [PICK]?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
@@ -341,26 +368,18 @@ Sei sicuro di voler continuare?
<notification name="SelectHistoryItemToView">
Scegli un item storico da vedere.
</notification>
- <notification name="ResetShowNextTimeDialogs">
- Vuoi riabilitare tutti le finestre di popup, che precedentemente hai indicato che &apos;Non vuoi vedere più&apos;?
- <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
- </notification>
- <notification name="SkipShowNextTimeDialogs">
- Vuoi disabilitare tutti i popup che possono essere ignorati?
- <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
- </notification>
<notification name="CacheWillClear">
- La Cache verrà cancellata dopo la ripartenza di [APP_NAME].
+ La cache verrà cancellata dopo il riavvio di [APP_NAME].
</notification>
<notification name="CacheWillBeMoved">
- La Cache verrà mossa dopo la ripartenza di [APP_NAME].
-Nota: Questo cancellerà anche la cache.
+ La cache verrà spostata dopo il riavvio di [APP_NAME].
+Nota: questa operazione cancellerà la cache.
</notification>
<notification name="ChangeConnectionPort">
- Le importazioni di Porte avranno effetto dopo la ripartenza di [APP_NAME].
+ Le impostazioni della porta avranno effetto dopo il riavvio di [APP_NAME].
</notification>
<notification name="ChangeSkin">
- La nuova skin apparirà dopo la ripartenza di [APP_NAME].
+ La nuova pelle comparirà dopo il riavvio di [APP_NAME].
</notification>
<notification name="GoToAuctionPage">
Vai alla pagina web [SECOND_LIFE] per vedere i dettagli dell&apos;asta oppure fai un&apos;offerta?
@@ -409,8 +428,8 @@ L&apos;oggetto potrebbe essere troppo lontano oppure essere stato cancellato.
C&apos;è stato un problema salvando lo script compilato a causa del seguente motivo: [REASON]. Riprova a salvare lo script più tardi.
</notification>
<notification name="StartRegionEmpty">
- Oops, la tua Regione di Inizio non è stata impostata.
-Per favore scrivi il nome della Regione nello spazio Regione di Inizio oppure scegli la mia ultima Ubicazione o Casa Mia come ultima ubicazione.
+ La tua Regione di inizio non è stata definita.
+Per scegliere il luogo dove vuoi trovarti all&apos;accesso, digita il nome della regione nel campo del luogo di partenza oppure scegli La mia ultima Ubicazione o Casa mia.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CouldNotStartStopScript">
@@ -424,28 +443,27 @@ L&apos;oggetto potrebbe essere troppo lontano oppure essere stato cancellato.
Non è stato possibile scrivere il file [[FILE]]
</notification>
<notification name="UnsupportedHardware">
- Attenzione: Il tuo sistema non soddisfa i requisiti minimi per il funzionamento [APP_NAME]. Se continui ad usare [APP_NAME], potresti osservare una lentezza eccessiva. Sfortunatamente non possiamo fornire supporto tecnico per configurazioni di sistema non supportate.
+ Ti informiamo che il tuo computer non dispone dei requisiti minimi di sistema per [APP_NAME]. Il funzionamento può pertanto risultare ridotto. Purtroppo la pagina [SUPPORT_SITE] non può fornire assistenza tecnica in caso di problemi dovuti a configurazioni di sistema non compatibili.
-MINSPECS
-Vuoi visitare [_URL] per maggiori informazioni?
+Visitare [_URL] per ulteriori informazioni?
<url name="url" option="0">
http://secondlife.com/support/sysreqs.php?lang=it
</url>
- <usetemplate ignoretext="L&apos;hardware di questo computer non è supportato" name="okcancelignore" notext="No" yestext="Si"/>
+ <usetemplate ignoretext="L&apos;hardware di questo computer non è compatibile" name="okcancelignore" notext="No" yestext="Si"/>
</notification>
<notification name="UnknownGPU">
- Il tuo sistema contiene una scheda grafica ancora sconosciuta a [APP_NAME].
-Questo succede spesso con nuovo hardware che non è ancora stato verificato con [APP_NAME]. Probabilmente [APP_NAME] funzionerà correttamente, ma forse devi regolare le impostazioni grafiche a qualcosa di più appropriato.
+ Il tuo sistema utilizza una scheda grafica che [APP_NAME] non riconosce.
+Questo succede spesso con un nuovo hardware che non è stato ancora testato con [APP_NAME]. Probabilmente tutto andrà bene, ma devi riconfigurare le tue impostazioni grafiche.
(Io &gt; Preferenze &gt; Grafica).
<form name="form">
- <ignore name="ignore" text="La mia scheda grafica non è stata identificata"/>
+ <ignore name="ignore" text="La tua scheda grafica non è stata riconosciuta"/>
</form>
</notification>
<notification name="DisplaySettingsNoShaders">
- [APP_NAME] si è interrotta mentre stava inizializzando i driver grafici.
-La Qualità Grafica verrà impostata a Basso per evitare alcuni errori comuni di driver. Questo disabiliterà alcune caratteristiche grafiche.
-Si raccomanda di aggiornare i driver della scheda grafica.
-La Qualità Grafica può essere aumentata in Preferenze &gt; Grafica.
+ L&apos;esecuzione di [APP_NAME] si è interrotta durante l&apos;inizializzazione dei driver grafici.
+La qualità grafica verrà impostata a livello basso per evitare alcuni errori comuni di driver. Alcune funzionalità grafiche saranno disattivate.
+Si consiglia di aggiornare i driver della scheda grafica.
+La qualità grafica può essere aumentata in Preferenze &gt; Grafica.
</notification>
<notification name="RegionNoTerraforming">
La regione [REGION] non consente di terraformare.
@@ -600,7 +618,7 @@ Attese [VALIDS]
Impossibile creare il file in uscita: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- [APP_NAME] non supporta ancora l&apos;upload in blocco di file di animazione.
+ [APP_NAME] non supporta ancora il caricamento in blocco di file di animazione.
</notification>
<notification name="CannotUploadReason">
Impossibile importare il file [FILE] a causa del seguente motivo: [REASON]
@@ -609,6 +627,10 @@ Riprova più tardi.
<notification name="LandmarkCreated">
Hai aggiunto &quot;[LANDMARK_NAME]&quot; alla tua [FOLDER_NAME] cartella.
</notification>
+ <notification name="LandmarkAlreadyExists">
+ Hai già il punto di riferimento di questo luogo.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="CannotCreateLandmarkNotOwner">
Non puoi creare qui un landmark perchè il proprietario di questo terreno non lo consente.
</notification>
@@ -632,7 +654,7 @@ Seleziona oggetti con degli script.
Seleziona oggetti con script su cui hai i permessi di modifica.
</notification>
<notification name="CannotOpenScriptObjectNoMod">
- Impossibile aprire la script dell&apos;oggetto senza i permessi modify.
+ Impossibile aprire la script dell&apos;oggetto senza i diritti di modifica.
</notification>
<notification name="CannotSetRunningSelectObjectsNoScripts">
Impossibile mettere &apos;in esecuzione&apos; gli script.
@@ -657,16 +679,16 @@ Ho cercato: [FINALQUERY]
Le parole che hai usato per la ricerca sono troppo corte e non è stato possibile iniziare la ricerca.
</notification>
<notification name="CouldNotTeleportReason">
- Impossibile eseguire il teleport.
+ Teleport non riuscito.
[REASON]
</notification>
<notification name="invalid_tport">
- E&apos; stato incontrato un problema eseguendo la tua richiesta di teleport. Potresti avere bisogno di riloggarti per ritentare il teleport.
-Se continui a ricevere questo errore, controlla [SUPPORT_SITE].
+ C&apos;è stato un problema nell&apos;elaborare la tua richiesta di teleport. Potresti dover effettuare nuovamente l&apos;accesso prima di poter usare il teleport.
+Se si continua a visualizzare questo messaggio, consulta la pagina [SUPPORT_SITE].
</notification>
<notification name="invalid_region_handoff">
- Ci sono stati problemi eseguendo il passaggio di regione. Potresti avere bisogno di riloggarti per ritentare il passaggio di regione.
-Se continui a ricevere questo errore, controlla [SUPPORT_SITE].
+ Si è verificato un problema nel tentativo di attraversare regioni. È possibile che per potere attraversare le regioni, tu debba effettuare nuovamente l&apos;accesso.
+Se si continua a visualizzare questo messaggio, consulta la pagina [SUPPORT_SITE].
</notification>
<notification name="blocked_tport">
Spiacenti, il teletrasporto è bloccato al momento. Prova di nuovo tra pochi istanti. Se ancora non potrai teletrasportarti, per favore scollegati e ricollegati per risolvere il problema.
@@ -706,8 +728,8 @@ Nessun terreno selezionato.
Impossibile forzare la proprietà del terreno perchè la selezione si estende su diverse regioni. Seleziona una area più piccola e riprova.
</notification>
<notification name="ForceOwnerAuctionWarning">
- Questo terreno è venduta all&apos;asta. Forzare la proprietà cancellerà l&apos;asta e potrebbe disturbare residenti che abbiano già fatto offerte.
-Vuoi forzare la proprietà?
+ Questo lotto è all&apos;asta. La designazione di un proprietario determinerà l&apos;annullamento automatico dell&apos;asta e probabilmente può scontentare qualche residente se l&apos;asta è già iniziata.
+Vuoi designare un proprietario?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="CannotContentifyNothingSelected">
@@ -735,7 +757,7 @@ Nessun terreno selezionato.
Non riesco a trovare la regione dove è situato il terreno.
</notification>
<notification name="CannotCloseFloaterBuyLand">
- Non puoi chiudere la finestra di Acquisto Terreno finchè [APP_NAME] non finisce di stimare il prezzo di questa transazione.
+ Non puoi chiudere la finestra Acquista terreno finché [APP_NAME] non finisce di stimare il prezzo di questa transazione.
</notification>
<notification name="CannotDeedLandNothingSelected">
Impossibile cedere il terreno:
@@ -746,8 +768,8 @@ Nessun terreno selezionato.
Nessun gruppo selezionato.
</notification>
<notification name="CannotDeedLandNoRegion">
- Non è possibile donare il terreno:
-Non riesco a trovare la regione in cui si trova.
+ Non è possibile effettuare la cessione del terreno:
+Impossibile trovare la regione in cui si trova il terreno.
</notification>
<notification name="CannotDeedLandMultipleSelected">
Impossibile cedere il terreno:
@@ -755,13 +777,6 @@ Hai selezionato più di un terreno.
Prova a selezionare un solo terreno.
</notification>
- <notification name="ParcelCanPlayMedia">
- Questo posto può mostrare contenuto multimediale in streaming. Questo richiede una connessione Internet veloce.
-
-Mostra contenuto multimediale quando disponibile?
-(Puoi cambiare questa opzione anche successivamente su Preferenze &gt; Privacy.)
- <usetemplate name="okcancelbuttons" notext="Disabilita" yestext="Abilita MultiMedia"/>
- </notification>
<notification name="CannotDeedLandWaitingForServer">
Impossibile cedere il terreno:
Sto aspettando il server per segnalare la proprietà.
@@ -791,7 +806,7 @@ I terreni di tua proprietà vengono visualizzati in verde.
</notification>
<notification name="CannotReleaseLandRegionNotFound">
Non è possibile abbandonare il terreno:
-Non riesco a trovare la regione in cui si trova.
+Impossibile trovare la regione in cui si trova il terreno.
</notification>
<notification name="CannotReleaseLandNoTransfer">
Impossibile abbandonare il terreno:
@@ -829,11 +844,11 @@ Dividi il terreno?
</notification>
<notification name="CannotDivideLandNoRegion">
Non è possibile suddividere il terreno:
-Non riesco a trovare la regione in cui si trova.
+Impossibile trovare la regione in cui si trova il terreno.
</notification>
<notification name="CannotJoinLandNoRegion">
Non è possibile unire il terreno:
-Non riesco a trovare la regione in cui si trova.
+Impossibile trovare la regione in cui si trova il terreno.
</notification>
<notification name="CannotJoinLandNothingSelected">
Impossibile unire il terreno:
@@ -880,12 +895,11 @@ Unisci il terreno?
</notification>
<notification name="CannotSaveToAssetStore">
Non è possibile salvare [NAME] nel database centrale degli asset.
-Questo normalmente è un problema temporaneo. Riadatta e salva i vestiti e riprova fra qualche minuto.
+In genere si tratta di un problema temporaneo. Attendi alcuni minuti per modificare e salvare nuovamente gli elementi indossabili.
</notification>
<notification name="YouHaveBeenLoggedOut">
- Sei stato sconnesso da [SECOND_LIFE]:
+ Accidenti. Sei stato scollegato da [SECOND_LIFE]
[MESSAGE]
-Puoi ancora vedere gli IM e la chat cliccando &apos;Vedi IM &amp; Chat&apos;. Altrimenti clicca &apos;Esci&apos; per uscire immediatamente da[APP_NAME].
<usetemplate name="okcancelbuttons" notext="Esci" yestext="Vedi IM &amp; Chat"/>
</notification>
<notification name="OnlyOfficerCanBuyLand">
@@ -1043,37 +1057,39 @@ Cedi questo terreno di [AREA] m² al gruppo &apos;[GROUP_NAME]&apos;?
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AvatarMovedDesired">
- L&apos;ubicazione desiderata non è attualmente disponibile. Sei stato trasportato in una regione vicina.
+ L&apos;ubicazione prescelta non è attualmente disponibile.
+Sei stato trasferito in una regione vicina.
</notification>
<notification name="AvatarMovedLast">
- La tua ultima ubicazione non è al momento disponibile.
-Sei stato trasferito in una regione vicina .
+ La tua ultima posizione non è al momento disponibile.
+Sei stato trasferito in una regione vicina.
</notification>
<notification name="AvatarMovedHome">
L&apos;ubicazione di casa tua non è al momento disponibile.
-Sei stato trasferito in un&apos;ubicazione vicina.
-Potresti impostare una nuova ubicazione.
+Sei stato trasferito in una regione vicina.
+Ti consigliamo di impostare una nuova posizione iniziale.
</notification>
<notification name="ClothingLoading">
- Sto ancora scaricando i tuoi abiti.
-Puoi comunque usare [SECOND_LIFE] normalmente e gli altri ti vedranno correttamente.
+ Gli abiti sono in corso di scaricamento.
+Puoi comunque usare [SECOND_LIFE] normalmente e gli altri residenti ti vedranno correttamente.
<form name="form">
- <ignore name="ignore" text="Lo scarico degli abiti sta impiegando parecchio tempo"/>
+ <ignore name="ignore" text="Lo scaricamento sta richiedendo parecchio tempo"/>
</form>
</notification>
<notification name="FirstRun">
- L&apos;installazione di [APP_NAME] è completa.
+ L&apos;installazione di [APP_NAME] è terminata.
-Se questa è la prima volta che usi [SECOND_LIFE], devi creare un account prima che tu possa fare il log in.
-Vuoi ritornare su [http://join.secondlife.com secondlife.com] per creare un nuovo account?
+Se questa è la prima volta che usi [SECOND_LIFE], devi creare un account prima che tu possa effettuare l&apos;accesso.
+Vuoi tornare a [http://join.secondlife.com secondlife.com] per creare un nuovo account?
<usetemplate name="okcancelbuttons" notext="Continua" yestext="Nuovo Account..."/>
</notification>
<notification name="LoginPacketNeverReceived">
- Ci sono problemi di connessione. Può darsi che siano nella tua connessione Internet oppure in [SECOND_LIFE_GRID].
+ Ci sono problemi di connessione. È possibile che ci siano problemi con la tua connessione Internet oppure sulla [SECOND_LIFE_GRID].
-Puoi controllare la tua connessione Internet e riprovare fra qualche minuto, oppure cliccare Aiuto per vedere il [SUPPORT_SITE], oppure cliccare Teleport per tentare di teleportarti a casa.
+Controlla la tua connessione Internet e riprova fra qualche minuto, oppure clicca su Aiuto per visualizzare la pagina [SUPPORT_SITE], oppure clicca su Teleport per tentare il teleport a casa tua.
<url name="url">
http://it.secondlife.com/support/
</url>
@@ -1095,10 +1111,10 @@ Scegli un avatar maschile o femminile. Puoi sempre cambiare idea più tardi.
[NAME] [PRICE]L$ Non hai abbastanza L$ per farlo.
</notification>
<notification name="GrantedModifyRights">
- [NAME] ti ha dato il permesso di editare i suoi oggetti.
+ [NAME] ti ha dato il permesso di modificare i suoi oggetti.
</notification>
<notification name="RevokedModifyRights">
- Ti è stato revocato il permesso di modificare gli oggetti di [NAME]
+ Non sei più autorizzato a modificare gli oggetti di [NAME]
</notification>
<notification name="FlushMapVisibilityCaches">
Questo reinizializzerà la cache della mappa di questa regione.
@@ -1177,107 +1193,107 @@ Imposta l&apos;oggetto per la vendita e riprova.
[DOWNLOAD_PATH].
</notification>
<notification name="DownloadWindowsMandatory">
- E&apos; disponibile una nuova versione di [APP_NAME].
+ È disponibile una nuova versione di [APP_NAME].
[MESSAGE]
-Devi scaricarla per usare [APP_NAME].
+Devi scaricare questo aggiornamento per utilizzare [APP_NAME].
<usetemplate name="okcancelbuttons" notext="Esci" yestext="Scarica l&apos;aggiornamento"/>
</notification>
<notification name="DownloadWindows">
- E&apos; disponibile una versione aggiornata di [APP_NAME].
+ È disponibile una versione aggiornata di [APP_NAME].
[MESSAGE]
-Questo aggiornamento non è obbligatorio, ma è consigliabile installarlo per migliorare le prestazioni e la stabilità.
+Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità.
<usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica l&apos;aggiornamento"/>
</notification>
<notification name="DownloadWindowsReleaseForDownload">
- E&apos; disponibile una versione aggiornata di [APP_NAME].
+ È disponibile una versione aggiornata di [APP_NAME].
[MESSAGE]
-Questo aggiornamento non è obbligatorio, ma è consigliabile installarlo per migliorare le prestazioni e la stabilità.
+Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità.
<usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica l&apos;aggiornamento"/>
</notification>
<notification name="DownloadLinuxMandatory">
- Una nuova versione di [APP_NAME] è disponibile.
+ È disponibile una nuova versione di [APP_NAME].
[MESSAGE]
-Devi scaricare questo aggiornamento per utilizzarlo [APP_NAME].
- <usetemplate name="okcancelbuttons" notext="Esci" yestext="Download"/>
+Devi scaricare questo aggiornamento per utilizzare [APP_NAME].
+ <usetemplate name="okcancelbuttons" notext="Esci" yestext="Scarica"/>
</notification>
<notification name="DownloadLinux">
- E&apos; disponibile una versione aggiornata di [APP_NAME].
+ È disponibile una versione aggiornata di [APP_NAME].
[MESSAGE]
-Questo aggiornamento non è necessario, ti consigliamo di installarlo per migliorare il rendimento e la stabilità.
- <usetemplate name="okcancelbuttons" notext="Continua" yestext="Download"/>
+Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità.
+ <usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica"/>
</notification>
<notification name="DownloadLinuxReleaseForDownload">
- E&apos; disponibile una versione aggiornata di [APP_NAME].
+ È disponibile una versione aggiornata di [APP_NAME].
[MESSAGE]
-Questo aggiornamento non è obbligatorio, ma è consigliata l&apos;installazione per migliorare le prestazioni e l&apos;affidabilità.
- <usetemplate name="okcancelbuttons" notext="Continua" yestext="Download"/>
+Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità.
+ <usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica"/>
</notification>
<notification name="DownloadMacMandatory">
- E&apos; disponibile una nuova versione di [APP_NAME].
+ È disponibile una nuova versione di [APP_NAME].
[MESSAGE]
-Devi scaricarla per usare [APP_NAME].
+Devi scaricare questo aggiornamento per utilizzare [APP_NAME].
-Scarico nella cartella Applicazioni?
+Scaricare nella cartella Applicazioni?
<usetemplate name="okcancelbuttons" notext="Esci" yestext="Scarica l&apos;aggiornamento"/>
</notification>
<notification name="DownloadMac">
- E&apos; disponibile una versione aggiornata di [APP_NAME].
+ È disponibile una versione aggiornata di [APP_NAME].
[MESSAGE]
-Questo aggiornamento non è obbligatorio, ma è consigliabile installarlo per migliorare le prestazioni e la stabilità.
+Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità.
-Scarico nella cartella Applicazioni?
+Scaricare nella cartella Applicazioni?
<usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica l&apos;aggiornamento"/>
</notification>
<notification name="DownloadMacReleaseForDownload">
- E&apos; disponibile una versione aggiornata di [APP_NAME].
+ È disponibile una versione aggiornata di [APP_NAME].
[MESSAGE]
-Questo aggiornamento non è obbligatorio, ma è consigliabile installarlo per migliorare le prestazioni e la stabilità.
+Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità.
-Scarico nella cartella Applicazioni?
+Scaricare nella cartella Applicazioni?
<usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica l&apos;aggiornamento"/>
</notification>
<notification name="DeedObjectToGroup">
La cessione di questo oggetto farà in modo che il gruppo:
* Riceva i L$ pagati all&apos;oggetto
- <usetemplate ignoretext="Conferma la donazione di un oggetto al gruppo" name="okcancelignore" notext="Annulla" yestext="Cedi"/>
+ <usetemplate ignoretext="Conferma la cessione di un oggetto al gruppo" name="okcancelignore" notext="Annulla" yestext="Cedi"/>
</notification>
<notification name="WebLaunchExternalTarget">
- Vuoi aprire il browser per vedere questo contenuto?
- <usetemplate ignoretext="Lancia il browser per vedere la pagina web" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ Vuoi aprire il browser per vedere questi contenuti?
+ <usetemplate ignoretext="Lancia il browser per consultare una pagina web" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="WebLaunchJoinNow">
Vuoi andare su [http://secondlife.com/account/ Dashboard] per gestire il tuo account?
- <usetemplate ignoretext="Lancia il browser pe gestire il mio account" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ <usetemplate ignoretext="Lancia il browser per gestire il mio account" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="WebLaunchSecurityIssues">
Visita la Wiki di [SECOND_LIFE] per i dettagli su come segnalare un problema di sicurezza.
- <usetemplate ignoretext="Lancia il browser per imparare a segnalare un Problema di Sicurezza" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ <usetemplate ignoretext="Lancia il browser per imparare a segnalare un problema di sicurezza" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="WebLaunchQAWiki">
Visita il controllo di qualità Wiki [SECOND_LIFE].
- <usetemplate ignoretext="Lancia il browser per vedere il QA Wiki" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ <usetemplate ignoretext="Lancia il browser per vedere la pagina Wiki sul controllo di qualità" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="WebLaunchPublicIssue">
Visita il registro pubblico dei problemi di [SECOND_LIFE], dove puoi segnalare bug ed altri problemi.
- <usetemplate ignoretext="Lancia il browser per vedere il Registro dei Problemi Pubblici" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/>
+ <usetemplate ignoretext="Lancia il browser per vedere il registro pubblico di monitoraggio dei problemi" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/>
</notification>
<notification name="WebLaunchSupportWiki">
Vai al blog ufficiale Linden, per le ultime notizie ed informazioni.
<usetemplate ignoretext="Lancia il browser per vedere il blog" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="WebLaunchLSLGuide">
- Vuoi aprire la Guida per lo Scripting per avere aiuto con lo scripting?
- <usetemplate ignoretext="Lancia il browser per vedere la Guida per lo Scripting" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ Vuoi aprire la Guida per lo scripting per avere aiuto con lo scripting?
+ <usetemplate ignoretext="Lancia il browser per vedere la Guida per lo scripting" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="WebLaunchLSLWiki">
- Vuoi visitare il Portale LSL per avere aiuto con lo Scripting?
+ Vuoi visitare il Portale LSL per avere aiuto con lo scripting?
<usetemplate ignoretext="Lancia il browser per vedere il Portale LSL" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/>
</notification>
<notification name="ReturnToOwner">
Confermi di voler restituire gli oggetti selezionati ai loro proprietari? Gli oggetti trasferibili ceduti al gruppo, verranno restituiti ai proprietari precedenti.
*ATTENZIONE* Gli oggetti ceduti non trasferibili verranno cancellati!
- <usetemplate ignoretext="Conferma la restituzione degli oggetti ai loro proprietari" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ <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 [GROUP].
@@ -1285,18 +1301,18 @@ Vuoi lasciare il gruppo?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
- Vuoi VERAMENTE espellere tutti gli utenti dalla griglia?
- <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti gli utenti"/>
+ Vuoi veramente espellere tutti i residenti dalla griglia?
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti i residenti"/>
</notification>
<notification name="MuteLinden">
- Mi dispiace, non puoi bloccare un Linden.
+ Spiacenti, non puoi bloccare un Linden.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CannotStartAuctionAlreadyForSale">
Non è possibile mettere in vendita all&apos;asta un terreno che è già impostato per la vendita. Disabilita la vendita del terreno, se sei certo di voler avviare una vendita all&apos;asta.
</notification>
- <notification label="E&apos; fallito Il Blocco dell&apos;Oggetto" name="MuteByNameFailed">
- Hai già bloccato questo nome.
+ <notification label="Il blocco dell&apos;oggetto in base al nome non è riuscito," name="MuteByNameFailed">
+ hai già bloccato questo nome.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RemoveItemWarn">
@@ -1313,18 +1329,21 @@ Vuoi cancellare quell&apos;elemento?
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="BusyModeSet">
- E&apos; stata impostata la modalità Non Disponibile.
-La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Disponibile. Tutte le offerte di teleport verranno declinate. Tutte le offerte di Inventory andranno nel Cestino.
- <usetemplate ignoretext="Cambio il mio stato in Non Disponibile" name="okignore" yestext="OK"/>
+ È stata impostata la modalità Non disponibile.
+La chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non disponibile. Tutte le offerte di teleport verranno rifiutate. Tutte le offerte di Inventario andranno nel Cestino.
+ <usetemplate ignoretext="Cambio il mio stato sulla modalità Non disponibile" name="okignore" yestext="OK"/>
</notification>
<notification name="JoinedTooManyGroupsMember">
- Hai raggiunto il limite massimo di gruppi. Devi lasciare un gruppo prima di poterti unire a questo, oppure puoi declinare questa offerta.
-[NAME] ti ha invitato ad unirti al gruppo come membro.
-[INVITE]
+ Hai raggiunto il numero massimo di gruppi. Per favore abbandona almeno un gruppo prima di aderire a questo, oppure declina l&apos;offerta.
+[NAME] ti invita ad aderire ad un gruppo.
<usetemplate name="okcancelbuttons" notext="Declino" yestext="Unisciti"/>
</notification>
+ <notification name="JoinedTooManyGroups">
+ Hai raggiunto il numero massimo di gruppi. Per favore abbandona almeno un gruppo prima di aderire o crearne uno nuovo.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="KickUser">
- Espelli questo utente con quale messaggio?
+ Espelli questo residente con quale messaggio?
<form name="form">
<input name="message">
Un amministratore ti ha disconnesso.
@@ -1344,7 +1363,7 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di
</form>
</notification>
<notification name="FreezeUser">
- Immobilizza questo utente con quale messaggio?
+ Congela questo residente con quale messaggio?
<form name="form">
<input name="message">
Sei stato immobilizzato. Non puoi muoverti o usare la chat. Un amministratore ti contatterà con un messaggio (IM).
@@ -1354,7 +1373,7 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di
</form>
</notification>
<notification name="UnFreezeUser">
- Smobilizza questo utente con quale messaggio?
+ Scongela questo residente con quale messaggio?
<form name="form">
<input name="message">
Non sei più immobilizzato.
@@ -1374,7 +1393,7 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di
</form>
</notification>
<notification name="OfferTeleportFromGod">
- Vuoi trasportare divinamente l&apos;utente nel posto dove sei?
+ Chiedere, in qualità di Admin, al residente di raggiungerti?
<form name="form">
<input name="message">
Raggiungimi in [REGION]
@@ -1384,16 +1403,16 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di
</form>
</notification>
<notification name="TeleportFromLandmark">
- Confermi di volerti teleportare?
- <usetemplate ignoretext="Conferma il teleport verso un Landmark" name="okcancelignore" notext="Annulla" yestext="Teleportati"/>
+ Sei sicuro di volere il teleport a &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
+ <usetemplate ignoretext="Conferma il teleport verso un punto di riferimento" name="okcancelignore" notext="Annulla" yestext="Teleportati"/>
</notification>
<notification name="TeleportToPick">
Teleport a [PICK]?
- <usetemplate ignoretext="Conferma il teleport verso l&apos;ubicazione nei Posti Consigliati" name="okcancelignore" notext="Annulla" yestext="Teleport"/>
+ <usetemplate ignoretext="Conferma che voglio il teleport verso l&apos;ubicazione nei Luoghi preferiti" name="okcancelignore" notext="Annulla" yestext="Teleport"/>
</notification>
<notification name="TeleportToClassified">
Teleport a [CLASSIFIED]?
- <usetemplate ignoretext="Confermo il teleport verso questa ubicazione negli Annunci" name="okcancelignore" notext="Cancella" yestext="Teleport"/>
+ <usetemplate ignoretext="Conferma il teleport verso questa posizione negli annunci" name="okcancelignore" notext="Annulla" yestext="Teleport"/>
</notification>
<notification label="Manda un messaggio a tutti nella tua proprietà" name="MessageEstate">
Scrivi un annuncio breve che verrà mandato a tutti quelli che sono in questo momento nella tua proprietà.
@@ -1404,11 +1423,11 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di
</form>
</notification>
<notification label="Cambia la tipologia della proprietà Linden" name="ChangeLindenEstate">
- Stai per cambiare la tipologia della proprietà Linden (mainland, griglia minorenni, orientamento, ecc.).
+ Stai per apportare modifiche ad una proprietà che appartiene a Linden (continente, teen grid, orientamento e così via).
-Questo è ESTREMAMENTE PERICOLOSO perchè può cambiare radicalmente l&apos;esperienza degli utenti. Sulla mainland cambierà migliaia di regioni e produrrà seri problemi ai vari server.
+Questa è un&apos;operazione da effettuare con molta cautela, in quanto può incidere profondamente sulla vita dei residenti in Second Life. Sul continente, l&apos;azione modificherà migliaia di regioni e creerà un grosso carico sul server.
-Confermi?
+Vuoi procedere?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification label="Cambia la tipologia Linden di accesso alla proprietà" name="ChangeLindenAccess">
@@ -1471,19 +1490,19 @@ Vuoi andare alla Knowledge Base per ulteriori informazioni sulle categorie di ac
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/it
</url>
- <usetemplate ignoretext="Non posso entrare in questa Regione, a causa delle restrizioni sulla Categoria di Accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/>
+ <usetemplate ignoretext="Non posso entrare in questa regione a causa delle restrizioni della categoria di accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/>
</notification>
<notification name="RegionEntryAccessBlocked_Notify">
Non sei ammesso in questa regione a causa della tua categoria d&apos;accesso.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- Non ti è consentito entrare in quella Regione a causa della tua Categoria di Accesso impostata nelle Preferenze.
+ Non ti è consentito entrare in quella regione a causa della tua categoria di accesso impostata nelle preferenze.
-Puoi cliccare su &apos;Cambia Preferenze&apos; per alzare la tua preferenza di Categoria di Accesso e quindi riuscire ad entrare. Sarai in grado di ricercare e di accedere da adesso in poi contenuto [REGIONMATURITY]. Se più tardi volessi cambiare di nuovo le tue impostazioni, vai su Me &gt; Preferenze &gt; Generali.
+Puoi cliccare su Cambia preferenze per modificare la categoria di accesso e quindi riuscire ad entrare. Da adesso potrai accedere ai contenuti [REGIONMATURITY] ed effettuare ricerche in questa categoria. Se in seguito tu volessi cambiare di nuovo le tue impostazioni, apri la finestra di dialogo da Io &gt; Preferenze &gt; Generale.
<form name="form">
- <button name="OK" text="Cambia Preferenza"/>
+ <button name="OK" text="Cambia preferenza"/>
<button default="true" name="Cancel" text="Chiudi"/>
- <ignore name="ignore" text="Le mie preferenze attivate nel Rating (Classificazione) prevengono il mio ingresso in una Regione"/>
+ <ignore name="ignore" text="La categoria di accesso impostata mi impedisce di entrare in una regione"/>
</form>
</notification>
<notification name="LandClaimAccessBlocked">
@@ -1499,16 +1518,16 @@ Vuoi andare alla Knowledge Base per maggiori informazioni sulle categorie di acc
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/it
</url>
- <usetemplate ignoretext="Non posso richiedere questo Terreno, a causa delle restrizioni sulla Categoria di Accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/>
+ <usetemplate ignoretext="Non posso richiedere questo terreno a causa delle restrizioni della categoria di accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/>
</notification>
<notification name="LandClaimAccessBlocked_Notify">
Non puoi prendere possesso di questa terra a causa della tua categoria di accesso.
</notification>
<notification name="LandClaimAccessBlocked_Change">
- Non puoi richiedere questo Terreno a causa delle tue preferenze di Categoria di Accesso.
+ Non puoi richiedere questo terreno a causa della tua categoria di accesso.
-Puoi cliccare su &apos;Cambia Preferenze&apos; per alzare la tua preferenza di Categoria di Accesso e quindi riuscire ad entrare. Sarai in grado di ricercare e di accedere da adesso in poi contenuto [REGIONMATURITY]. Se più tardi volessi cambiare di nuovo le tue impostazioni, vai su Me &gt; Preferenze &gt; Generali.
- <usetemplate ignoretext="Le mie preferenze di Categoria di Accesso mi impediscono di chiedere questo Terreno" name="okcancelignore" notext="Chiudi" yestext="Cambia le preferenze"/>
+Puoi cliccare su Cambia preferenze per modificare la categoria di accesso e quindi riuscire ad entrare. Da adesso potrai accedere ai contenuti [REGIONMATURITY] ed effettuare ricerche in questa categoria. Se in seguito tu volessi cambiare di nuovo le tue impostazioni, apri la finestra di dialogo da Io &gt; Preferenze &gt; Generale.
+ <usetemplate ignoretext="Le mie preferenze di categoria di accesso mi impediscono di richiedere terreno" name="okcancelignore" notext="Chiudi" yestext="Cambia le preferenze"/>
</notification>
<notification name="LandBuyAccessBlocked">
Non puoi acquistare questo terreno a causa della tua categoria di accesso. Questo può essere dovuto ad una mancanza di informazioni valide che confermino la tua età.
@@ -1523,16 +1542,16 @@ Vuoi andare alla Knowledge Base per maggiori informazioni sulle categorie di acc
<url name="url">
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/it
</url>
- <usetemplate ignoretext="Non posso comprare questo Terreno , a causa delle restrizioni della Categoria di Accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/>
+ <usetemplate ignoretext="Non posso acquistare questo terreno a causa delle restrizioni della categoria di accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/>
</notification>
<notification name="LandBuyAccessBlocked_Notify">
Non puoi acquistare questa land a causa della tua categoria di accesso.
</notification>
<notification name="LandBuyAccessBlocked_Change">
- Non puoi comprare questo Terreno a causa delle tue preferenze di Categoria di Accesso.
+ Non puoi acquistare questo terreno a causa della tua categoria di accesso.
-Puoi cliccare su &apos;Cambia Preferenze&apos; per alzare la tua preferenza di Categoria di Accesso e quindi riuscire ad entrare. Sarai in grado di ricercare e di accedere da adesso in poi contenuto [REGIONMATURITY]. Se più tardi volessi cambiare di nuovo le tue impostazioni, vai su Me &gt; Preferenze &gt; Generali.
- <usetemplate ignoretext="Le mie Preferenze di Accesso mi impediscono l&apos;acquisto di questo Terreno" name="okcancelignore" notext="Chiudi" yestext="Cambia le preferenze"/>
+Puoi cliccare su Cambia preferenze per modificare la categoria di accesso e quindi riuscire ad entrare. Da adesso potrai accedere ai contenuti [REGIONMATURITY] ed effettuare ricerche in questa categoria. Se in seguito tu volessi cambiare di nuovo le tue impostazioni, apri la finestra di dialogo da Io &gt; Preferenze &gt; Generale.
+ <usetemplate ignoretext="Le mie Preferenze di accesso mi impediscono di acquistare terreno" name="okcancelignore" notext="Chiudi" yestext="Cambia le preferenze"/>
</notification>
<notification name="TooManyPrimsSelected">
Hai selezionato troppi prim. Seleziona non più di [MAX_PRIM_COUNT] prim e riprova
@@ -1587,11 +1606,13 @@ Pubblica questo annuncio adesso per [AMOUNT]L$?
</form>
</notification>
<notification label="Cambiato il contenuto Mature" name="RegionMaturityChange">
- La classificazione del contenuto Mature di questa regione è stata aggiornata.
-Può essere necessario un po&apos; di tempo prima che questo cambiamento sia visibile sulle mappe.
+ La classificazione di questa regione è stata aggiornata.
+Un periodo di tempo è necessario prima che la modifica venga integrata nella mappa.
+
+Per accedere a regioni per adulti, i residenti devono avere un Account verificato, mediante verifica dell&apos;età oppure mediante verifica della modalità di pagamento.
</notification>
<notification label="Versione voice non compatibile" name="VoiceVersionMismatch">
- Questa versione di [APP_NAME] non è compatibile con le capacità di Chat Voice in questa regione. Per poter far funzionare correttamente la Chat Voice devi aggiornare [APP_NAME].
+ Questa versione di [APP_NAME] non è compatibile con la funzionalità di chat vocale in questa regione. Affinché la chat vocale funzioni correttamente, dovrai aggiornare [APP_NAME].
</notification>
<notification label="Impossibile comprare oggetti" name="BuyObjectOneOwner">
Impossibile comprare oggetti da proprietari diversi nello stesso momento.
@@ -1680,36 +1701,36 @@ Hai aggiornato l&apos;ubicazione di questo preferito ma gli altri dettagli conse
Questi elementi verranno trasferiti nel tuo inventario, ma non copiati.
Trasferisci gli elementi nell&apos;inventario?
- <usetemplate ignoretext="Avvertimi quando rimuovo gli elementi &apos;no-copy&apos; da un oggetto" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ <usetemplate ignoretext="Avvertimi quando tento di rimuovore elementi per i quali non è consentita la copia da un oggetto" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="MoveInventoryFromScriptedObject">
Hai selezionato elementi dell&apos;inventario non copiabili. Questi elementi verranno trasferiti nel tuo inventario, non verranno copiati.
Dato che questo oggetto è scriptato, il trasferimento di questi elementi nel tuo inventario potrebbe causare un malfunzionamento degli script.
Trasferisci gli elementi nell&apos;inventario?
- <usetemplate ignoretext="Avvertimi se la rimozione di elementi &apos;no-copy&apos; possono danneggiare un oggetto scriptato" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ <usetemplate ignoretext="Avvertimi se tento di rimuovore di elementi per i quali non è consentita la copia e che potrebbero danneggiare un oggetto scriptato" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ClickActionNotPayable">
- Attenzione: E&apos; stata impostata l&apos;azione &apos;Paga Oggetto&apos;, ma funzionerà soltanto se inserisci uno script con un evento money().
+ Attenzione: l&apos;azione Paga oggetto è stata impostata, ma funzionerà soltanto se inserisci uno script con un evento money().
<form name="form">
- <ignore name="ignore" text="Ho impostato l&apos;azione &apos;Paga Oggetto&apos; costruendo un oggetto senza uno script money()"/>
+ <ignore name="ignore" text="Ho impostato l&apos;azione Paga oggetto costruendo un oggetto senza uno script money()"/>
</form>
</notification>
<notification name="OpenObjectCannotCopy">
Non ci sono elementi in questo oggetto che tu possa copiare.
</notification>
<notification name="WebLaunchAccountHistory">
- Vai su [http://secondlife.com/account/ Dashboard] per vedere la storia delle tue Transazioni?
- <usetemplate ignoretext="Lancia il browser per vedere la storia del mio account" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/>
+ Vai al [http://secondlife.com/account/ Dashboard] per vedere la cronologia del tuo account?
+ <usetemplate ignoretext="Lancia il browser per vedere la cronologia del mio account" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/>
</notification>
<notification name="ConfirmQuit">
Confermi di voler uscire?
- <usetemplate ignoretext="Conferma Uscita" name="okcancelignore" notext="Non Uscire" yestext="Esci"/>
+ <usetemplate ignoretext="Conferma prima di uscire" name="okcancelignore" notext="Non uscire" yestext="Esci"/>
</notification>
<notification name="HelpReportAbuseEmailLL">
- Usa questo strumento per segnalare violazioni del [http://secondlife.com/corporate/tos.php Terms of Service] e [http://secondlife.com/corporate/cs.php Community Standards].
+ Usa questo strumento per segnalare violazioni a [http://secondlife.com/corporate/tos.php Terms of Service] e [http://secondlife.com/corporate/cs.php Community Standards].
-Tutti gli abusi segnalati verranno investigati e risolti. Puoi verificare lo stato delle segnalazione leggendo [http://secondlife.com/support/incidentreport.php Incident Report].
+Ogni abuso segnalato verrà esaminato e risolto.
</notification>
<notification name="HelpReportAbuseSelectCategory">
Scegli una categoria per questa segnalazione di abuso.
@@ -1733,15 +1754,15 @@ Devi essere il più specifico possibile, includendo i nomi e i dettagli dell&apo
Inserendo una descrizione accurata ci aiuti a gestire ed elaborare le segnalazioni di abuso.
</notification>
<notification name="HelpReportAbuseContainsCopyright">
- Gentile Residente,
+ Gentile residente,
-Sembra che tu stia segnalando una violazione di proprietà intellettuale. Cerca di essere sicuro che la tua segnalazione stia riportando correttamente:
+Ci risulta che tu stia segnalando una violazione di proprietà intellettuale. Per segnalare correttamente la violazione:
-(1) Il processo di Abuso. Puoi inviare una segnalazione di abuso se ritieni che un residente stia sfruttando il sistema di permessi di [SECOND_LIFE], per esempio usando CopyBot o simili strumenti di copia, per rubare i diritti della proprietà intellettuale. L&apos;Ufficio Abusi investigherà e deciderà adeguate azioni disciplinari per comportamenti che violano i [http://secondlife.com/corporate/tos.php Termini di Servizio] di [SECOND_LIFE] oppure i [http://secondlife.com/corporate/cs.php Standard di Comunità]. Si tenga però presente che l&apos;ufficio Abusi non gestisce e non risponde alle richieste di rimozione di contentuo da [SECOND_LIFE].
+(1) Definizione di abuso. Puoi inviare una segnalazione di abuso se ritieni che un residente stia sfruttando il sistema di permessi di [SECOND_LIFE], per esempio usando CopyBot o simili strumenti di copia, per rubare i diritti di proprietà intellettuale. L&apos;Ufficio abusi investigherà e deciderà adeguate azioni disciplinari per comportamenti che violano i [http://secondlife.com/corporate/tos.php Termini del servizio] di [SECOND_LIFE] oppure gli [http://secondlife.com/corporate/cs.php Standard della comunità]. Tieni comunque presente che l&apos;Ufficio abusi non gestisce e non risponde alle richieste di rimozione di contenuti da [SECOND_LIFE].
-(2) Il processo di rimozione DMCA o processo di rimozione dei contenuti. Per richiedere la rimozione di contenuto da [SECOND_LIFE], DEVI compilare una denuncia valid di furto come definito nella nostra [http://secondlife.com/corporate/dmca.php Policy DMCA].
+(2) DMCA o rimozione di contenuti. Per richiedere la rimozione di contenuti da [SECOND_LIFE], devi compilare una denuncia valida di violazione come definito nelle nostra [http://secondlife.com/corporate/dmca.php Regole DMCA] (leggi sul copyright).
-Se desideri egualmente continuare con il processo di Abuso, chiudi questa finestra e completa la compilazione della segnalazione. Puoi specificare la categoria specifica &apos;CopyBot o Sfruttamento Permessi&apos;.
+Per continuare con il procedimento di abuso, chiudi questa finestra e completa la compilazione della segnalazione. È possibile che dovrai specificare la categoria CopyBot o Sfruttamento dei diritti.
Grazie,
@@ -1755,7 +1776,7 @@ Linden Lab
C&apos;è già un oggetto indossato in questo punto del corpo.
Vuoi sostituirlo con l&apos;oggetto selezionato?
<form name="form">
- <ignore name="ignore" save_option="true" text="Sostituisci un preesistente attachment con l&apos;elemento selezionato"/>
+ <ignore name="ignore" save_option="true" text="Sostituisci un pezzo collegato con l&apos;elemento selezionato"/>
<button ignore="Replace Automatically" name="Yes" text="OK"/>
<button ignore="Never Replace" name="No" text="Annulla"/>
</form>
@@ -1765,21 +1786,21 @@ Vuoi sostituirlo con l&apos;oggetto selezionato?
Desideri abbandonare la modalità &apos;Occupato&apos; prima di completare questa transazione?
<form name="form">
- <ignore name="ignore" save_option="true" text="Sto per pagare una persona o un oggetto mentro sono Non Disponibile"/>
+ <ignore name="ignore" save_option="true" text="Sto per pagare una persona o un oggetto mentro sono in modalià Non disponibile"/>
<button ignore="Always leave Busy Mode" name="Yes" text="OK"/>
<button ignore="Never leave Busy Mode" name="No" text="Abbandona"/>
</form>
</notification>
<notification name="ConfirmDeleteProtectedCategory">
- La cartella &apos;[FOLDERNAME]&apos; è una cartella di sistema. La cancellazione delle cartelle di sistema può creare instabilità. Sei sicuro di volerla cancellare?
- <usetemplate ignoretext="Conferma prima di cancellare una cartella di sistema" name="okcancelignore" notext="Cancella" yestext="OK"/>
+ La cartella &apos;[FOLDERNAME]&apos; è una cartella di sistema. L&apos;eliminazione di cartelle di sistema può creare instabilità. Sei sicuro di volerla eliminare?
+ <usetemplate ignoretext="Chiedi conferma prima di eliminare una cartella di sistema" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmEmptyTrash">
- Vuoi veramente cancellare permanentemente il contenuto del tuo Cestino?
- <usetemplate ignoretext="Conferma lo svuotamento del contenuto del Cestino" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ Vuoi veramente eliminare in modo permanente il contenuto del tuo Cestino?
+ <usetemplate ignoretext="Conferma prima di svuotare la cartella del Cestino inventario" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmClearBrowserCache">
- Vuoi veramente cancellare la storia dei viaggi, web e delle ricerche fatte?
+ Vuoi veramente eliminare la cronologia viaggi, web e ricerche fatte?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="ConfirmClearCookies">
@@ -1791,14 +1812,14 @@ Desideri abbandonare la modalità &apos;Occupato&apos; prima di completare quest
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Si"/>
</notification>
<notification name="ConfirmEmptyLostAndFound">
- Vuoi veramente cancellare permanentemente il contenuto dei tuoi Persi e Ritrovati?
- <usetemplate ignoretext="Conferma lo svuotamento della cartella Persi e Ritrovati" name="okcancelignore" notext="No" yestext="Si"/>
+ Vuoi veramente eliminare in modo definitivo il contenuto dei tuoi Oggetti smarriti?
+ <usetemplate ignoretext="Conferma prima di svuotare della cartella Oggetti smarriti" name="okcancelignore" notext="No" yestext="Si"/>
</notification>
<notification name="CopySLURL">
Lo SLurl seguente è stato copiato negli Appunti:
[SLURL]
-Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubicazione, o provala incollandola nella barra indirizzo di un browser web.
+Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubicazione, o provala incollandola nella barra degli indirizzi di un browser web.
<form name="form">
<ignore name="ignore" text="Lo SLurl è stato copiato negli Appunti"/>
</form>
@@ -1866,18 +1887,18 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="Cannot_Purchase_an_Attachment">
- Non puoi comprare un oggetto mentre è indossato.
+ Non puoi comprare un oggetto mentre è unito.
</notification>
<notification label="Informazioni sulle richieste per il permesso di addebito" name="DebitPermissionDetails">
Accettare questa richiesta da allo script il permesso continuativo di prendere Linden dollar (L$) dal tuo account. Per revocare questo permesso, il proprietario dell&apos;oggetto deve cancellare l&apos;oggetto oppure reimpostare gli script nell&apos;oggetto.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AutoWearNewClothing">
- Vuoi indossare automaticamente gli oggetti che stai per creare?
- <usetemplate ignoretext="Indossa gli abiti che creo mentre modifico il Mio Aspetto" name="okcancelignore" notext="No" yestext="Si"/>
+ Vuoi indossare automaticamente gli indumenti che stai per creare?
+ <usetemplate ignoretext="Indossare gli abiti che creo mentre modifico il mio aspetto" name="okcancelignore" notext="No" yestext="Si"/>
</notification>
<notification name="NotAgeVerified">
- Devi avere l&apos;Età Verificata per visitare quest&apos;area. Vuoi andare sul sito [SECOND_LIFE] per verificare la tua età?
+ Per entrare in questa zona, devi avere eseguito la verifica dell&apos;età. Vuoi andare sul sito di [SECOND_LIFE] per verificare la tua età?
[_URL]
<url name="url" option="0">
@@ -1886,13 +1907,13 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
<usetemplate ignoretext="Non ho verificato la mia età" name="okcancelignore" notext="No" yestext="Si"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
- Devi avere le Informazioni di Pagamento registrate per poter visitare quest&apos;area. Vuoi andare sul sito di [SECOND_LIFE] ed impostarle?
+ Per poter visitare questa zona devi avere devi aver fornito informazioni di pagamento a Linden Lab. Vuoi andare sul sito di [SECOND_LIFE] ed impostarle?
[_URL]
<url name="url" option="0">
https://secondlife.com/account/index.php?lang=it
</url>
- <usetemplate ignoretext="Manca la registrazione delle Informazioni di Pagamento" name="okcancelignore" notext="No" yestext="Si"/>
+ <usetemplate ignoretext="Manca la registrazione delle informazioni di pagamento" name="okcancelignore" notext="No" yestext="Si"/>
</notification>
<notification name="MissingString">
La stringa [STRING_NAME] non è presente in strings.xml
@@ -1922,7 +1943,7 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
[FIRST] [LAST] è Offline
</notification>
<notification name="AddSelfFriend">
- Anche se sei molto piacevole, non puoi aggiungerti come amicizia.
+ Anche se sei molto simpatico, non puoi aggiungere te stesso all&apos;elenco degli amici.
</notification>
<notification name="UploadingAuctionSnapshot">
Sto importando le fotografie per l&apos;uso inworld e per il web...
@@ -1941,11 +1962,10 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
Terrain.raw caricato
</notification>
<notification name="GestureMissing">
- Manca la Gesture [NAME] dal database.
+ Manca la gesture [NAME] dal database.
</notification>
<notification name="UnableToLoadGesture">
Impossibile caricare la gesture [NAME].
-Riprova.
</notification>
<notification name="LandmarkMissing">
Landmark non trovato nel database.
@@ -1954,14 +1974,14 @@ Riprova.
Impossibile caricare il Landmark di riferimento. Riprova.
</notification>
<notification name="CapsKeyOn">
- Hai il Blocco delle Maiuscole attivato.
-Questo potrebbe influenzare la tua password.
+ Hai il blocco delle maiuscole attivato.
+Questo potrebbe incidere sulla tua password.
</notification>
<notification name="NotecardMissing">
Notecard non trovata nel database.
</notification>
<notification name="NotecardNoPermissions">
- Non hai il permesso di vedere questa notecard.
+ Non hai il permesso di vedere questo biglietto.
</notification>
<notification name="RezItemNoPermissions">
Permessi insufficienti per creare un oggetto.
@@ -1999,7 +2019,7 @@ Riprova.
Riprova.
</notification>
<notification name="CannotBuyObjectsFromDifferentOwners">
- Puoi comprare oggetti solo da un proprietario per volta.
+ Puoi acquistare oggetti soltanto da un proprietario per volta.
Seleziona solo un oggetto.
</notification>
<notification name="ObjectNotForSale">
@@ -2012,10 +2032,10 @@ Seleziona solo un oggetto.
Esci dalla modalità divina, livello [LEVEL]
</notification>
<notification name="CopyFailed">
- Non hai i permessi per copiare.
+ Non hai l&apos;autorizzazione a copiare.
</notification>
<notification name="InventoryAccepted">
- [NAME] ha ricevuto la tua offerta di Inventory.
+ [NAME] ha ricevuto la tua offerta di inventario.
</notification>
<notification name="InventoryDeclined">
[NAME] non ha accettato la tua offerta dall&apos;inventario.
@@ -2030,14 +2050,14 @@ Seleziona solo un oggetto.
Il tuo biglietto da visita non è stato accettato.
</notification>
<notification name="TeleportToLandmark">
- Puoi teleportarti alle ubicazioni come &apos;[NAME]&apos; aprendo il pannello Luoghi sul lato destro dello schermo, e quindi selezionare la linguetta Landmarks.
-Clicca su un landmark per selezionarlo e quindi clicca &apos;Teleport&apos; sul fondo del pannello.
-(Puoi anche fare doppio-click sul landmark oppure cliccarlo con il tasto destro e scegliere &apos;Teleport&apos;.)
+ Puoi teleportarti alle ubicazioni come &apos;[NAME]&apos; aprendo il pannello Luoghi sul lato destro dello schermo, quindi selezionare la scheda Punti di riferimento.
+Clicca su un punto di riferimento per selezionarlo, quindi clicca su Teleport sul lato inferiore del pannello.
+(Puoi anche fare doppio clic sul punto di riferimento oppure cliccare su di esso con il tasto destro del mouse e scegliere Teleport.)
</notification>
<notification name="TeleportToPerson">
- Puoi contattare residenti come &apos;[NAME]&apos; aprendo il pannello Persone sul lato destro dello schermo.
-Seleziona il residente dalla lista, e clica &apos;IM&apos; in fondo al pannello.
-(Puoi anche fare doppio click sul loro nome nella lista, oppure cliccare con il tasto destro e scegliere &apos;IM&apos;).
+ Puoi contattare il residente &apos;[NAME]&apos; aprendo il pannello Persone nel lato destro del tuo schermo.
+Seleziona il residente dall&apos;elenco, clicca su &apos;IM&apos; in basso nel pannello.
+(Puoi anche fare doppio clic sul nome nell&apos;elenco oppure fare clic con il pulsante destro del mouse e selezionare &apos;IM&apos;).
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Non è possibile selezionare il terreno attraverso i confini del server.
@@ -2087,19 +2107,19 @@ Prova a selezionare una parte di terreno più piccola.
[NAMES]
</notification>
<notification name="NoQuickTime">
- Il Software QuickTime di Apple non sembra installato sul tuo computer.
-Se vuoi vedere contenuto multimediale sugli appezzamenti che lo supportano devi andare su [http://www.apple.com/quicktime QuickTime site] e installare il Player QuickTime.
+ Il software QuickTime di Apple sembra non essere installato sul tuo computer.
+Se vuoi vedere contenuto multimediale in streaming sui lotti che lo supportano, vai alla pagina [http://www.apple.com/quicktime QuickTime] e installa il Player QuickTime.
</notification>
<notification name="NoPlugin">
- Nessun Media Plugin è stato trovato per gestire &quot;[MIME_TYPE]&quot; il tipo mime. Il Media di questo tipo non è disponibile.
+ Non è stato trovato alcun plugin multimediale per gestire il tipo mime [MIME_TYPE]. Il media di questo tipo non è disponibile.
</notification>
<notification name="MediaPluginFailed">
- Questo Media Plugin non funziona:
+ Questo plugin multimediale non funziona:
[PLUGIN]
-Per favore re-installa il plugin o contatta il venditore se continui ad avere questi problemi.
+Reinstalla il plugin o contatta il venditore se continui ad avere questi problemi.
<form name="form">
- <ignore name="ignore" text="Mancato funzionamento del Media Plugin"/>
+ <ignore name="ignore" text="Mancato funzionamento del plugin multimediale"/>
</form>
</notification>
<notification name="OwnedObjectsReturned">
@@ -2109,7 +2129,7 @@ Per favore re-installa il plugin o contatta il venditore se continui ad avere qu
Gli oggetti selezionati sul terreno che è di proprietà di [FIRST] [LAST] sono stati restituiti nel suo inventario.
</notification>
<notification name="OtherObjectsReturned2">
- Gli oggetti selezionati sul terreno di proprietà del residente &apos;[NAME]&apos; sono stati restituiti al loro proprietario.
+ Sono stati restituiti al proprietario gli oggetti selezionati sul lotto nella terra di proprietà del residente &apos;[NAME]&apos;.
</notification>
<notification name="GroupObjectsReturned">
Gli oggetti selezionati sul terreno e condivisi con il gruppo [GROUPNAME] sono stati restituiti nell&apos;inventario dei propietari.
@@ -2121,24 +2141,24 @@ Gli oggetti non trasferibili che erano stati ceduti al gruppo sono stati cancell
</notification>
<notification name="ServerObjectMessage">
Messaggio da [NAME]:
-[MSG]
+&lt;nolink&gt;[MSG]&lt;/nolink&gt;
</notification>
<notification name="NotSafe">
- Questo terreno è abilitato ai Danni da combattimento.
-Qui potresti ricevere ferite. Se dovessi morire verrai teleportato a casa tua.
+ Su questo terreno sono abilitati i danni.
+Qui potresti essere ferito. Se dovessi morire verrai teleportato a casa tua.
</notification>
<notification name="NoFly">
- Quest&apos;are ha il volo disabilitato.
+ In questa zona è proibito il volo.
Qui non puoi volare.
</notification>
<notification name="PushRestricted">
- Quest&apos;area non consente le spinte. Non puoi spingere gli altri a meno che tu non sia il proprietario del terreno.
+ Questa zona non consente le spinte. Non puoi spingere gli altri a meno che tu non sia il proprietario del terreno.
</notification>
<notification name="NoVoice">
- Quest&apos;area ha la chat voice disabilitata. Non puoi sentire nessuno parlare.
+ Questa zona ha la chat vocale disattivata. Non puoi sentire nessuno parlare.
</notification>
<notification name="NoBuild">
- Quest&apos;area ha il building disabilitato. Qui non puoi costruire o rezzare oggetti.
+ In questa zona è proibita la costruzione. Qui non puoi costruire né rezzare oggetti.
</notification>
<notification name="ScriptsStopped">
Un amministratore ha temporaneamente disabilitato gli script in questa regione.
@@ -2149,10 +2169,10 @@ Qui non puoi volare.
<notification name="NoOutsideScripts">
Questo terreno non consente script esterni.
-Qui funzinano solo gli script del proprietario del terreno.
+Qui funzionano soltanto gli script del proprietario del terreno.
</notification>
<notification name="ClaimPublicLand">
- Puoi solo chiedere terreni pubblici nella regione in cui sei posizionato.
+ Puoi solo richiedere terreni pubblici nella regione in cui sei posizionato.
</notification>
<notification name="RegionTPAccessBlocked">
Non puoi entrare in quella regione a causa della tua categoria di accesso. Può essere necessario validare l&apos;età e/o installare l&apos;ultima versione del programma.
@@ -2230,7 +2250,7 @@ Riprova tra qualche istante.
Non è stato trovato nessun territorio valido.
</notification>
<notification name="ObjectGiveItem">
- L&apos;oggetto [OBJECTFROMNAME] posseduto da [NAME_SLURL] ti ha dato [OBJECTTYPE]:
+ Un oggetto denominato [OBJECTFROMNAME] di proprietà di [NAME_SLURL] ti ha dato questo [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Prendi"/>
@@ -2239,7 +2259,7 @@ Riprova tra qualche istante.
</form>
</notification>
<notification name="ObjectGiveItemUnknownUser">
- Un oggetto di nome [OBJECTFROMNAME] posseduto da un residente sconosciuto ti ha dato [OBJECTTYPE]:
+ Un oggetto chiamato [OBJECTFROMNAME] di proprietà di (residente sconosciuto) ti ha dato questo [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Prendi"/>
@@ -2248,12 +2268,12 @@ Riprova tra qualche istante.
</form>
</notification>
<notification name="UserGiveItem">
- [NAME_SLURL] ti ha dato [OBJECTTYPE]:
+ [NAME_SLURL] ti ha dato questo [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
- <button name="Keep" text="Prendi"/>
<button name="Show" text="Mostra"/>
<button name="Discard" text="Rifiuta"/>
+ <button name="Mute" text="Blocca"/>
</form>
</notification>
<notification name="GodMessage">
@@ -2278,6 +2298,9 @@ Riprova tra qualche istante.
<button name="Cancel" text="Cancella"/>
</form>
</notification>
+ <notification name="TeleportOfferSent">
+ Offerta di Teleport inviata a [TO_NAME]
+ </notification>
<notification name="GotoURL">
[MESSAGE]
[URL]
@@ -2315,22 +2338,27 @@ Riprova tra qualche istante.
<notification name="FriendshipDeclined">
[NAME] ha rifiutato la tua offerta di amicizia.
</notification>
+ <notification name="FriendshipAcceptedByMe">
+ Offerta di amicizia accettata.
+ </notification>
+ <notification name="FriendshipDeclinedByMe">
+ Offerta di amicizia rifiutata.
+ </notification>
<notification name="OfferCallingCard">
- [FIRST] [LAST] ti ha offerto il suo biglietto da visita.
-Questo aggiungerà un segnalibro nel tuo inventario.
-in modo da poter rapidamente inviargli un IM al residente.
+ [FIRST] [LAST] ti offre il suo biglietto da visita.
+Questo sarà aggiunto nel tuo inventario come segnalibro per consentirti di inviare rapidamente messaggi IM a questo residente.
<form name="form">
<button name="Accept" text="Accetta"/>
<button name="Decline" text="Rifiuta"/>
</form>
</notification>
<notification name="RegionRestartMinutes">
- Questa regione farà il restart fra [MINUTES] minuti.
-Se rimani qui verrai disconnesso.
+ Questa regione verrà riavviata fra [MINUTES] minuti.
+Se rimani qui verrai scollegato da Second Life.
</notification>
<notification name="RegionRestartSeconds">
- Questa regione farà il restart fra [SECONDS] secondi.
-Se rimani qui verrai disconnesso.
+ Questa regione verrà riavviata fra [SECONDS] secondi.
+Se rimani qui verrai scollegato da Second Life.
</notification>
<notification name="LoadWebPage">
Caricare pagina web [URL]?
@@ -2367,9 +2395,9 @@ Va bene?
Un oggetto di nome &apos;[OBJECTNAME]&apos;, posseduto da &apos;[NAME]&apos; vorrebbe:
[QUESTIONS]
-Se non ti fidi di questo oggetto e del suo creatore dovresti declinare la richiesta.
+Se non ti fidi di questo oggetto e del suo ideatore, dovresti rifiutare la richiesta.
-Consenti questa richiesta?
+Concedi questa richiesta?
<form name="form">
<button name="Grant" text="Accetta"/>
<button name="Deny" text="Nega"/>
@@ -2390,44 +2418,12 @@ Consenti questa richiesta?
<button name="Ignore" text="Ignora"/>
</form>
</notification>
- <notification name="ScriptToast">
- [FIRST] [LAST]&apos;s &apos;[TITLE]&apos; richiede il contributo dell&apos;utente.
- <form name="form">
- <button name="Open" text="Apri il Dialog"/>
- <button name="Ignore" text="Ignora"/>
- <button name="Block" text="Blocca"/>
- </form>
- </notification>
- <notification name="FirstBalanceIncrease">
- Hai appena ricevuto [AMOUNT]L$.
-Il tuo saldo in L$ è mostrato in alto a destra.
- </notification>
- <notification name="FirstBalanceDecrease">
- Hai appena pagato [AMOUNT]L$.
-Il tuo saldo in L$ è mostrato in alto a destra.
- </notification>
<notification name="BuyLindenDollarSuccess">
- Grazie per il pagamento!
+ Grazie per aver inviato il pagamento.
-Il tuo saldo in L$ sarà aggiornato al termine dell&apos;elaborazione. Se l&apos;elaborazione dovesse impiegare più di 20 minuti, la transazione verrà annullata. In quel caso l&apos;ammontare dell&apos;acquisto verrà rimborsato nel tuo saldo in US$.
+Il tuo saldo in L$ sarà aggiornato al termine dell&apos;elaborazione. Se l&apos;elaborazione dovesse impiegare più di 20 minuti, la transazione verrà annullata. In quel caso l&apos;ammontare dell&apos;acquisto verrà accreditato sul tuo saldo in US$.
-Lo stato del tuo pagamento potrà essere controllato nella pagina della Storia delle tue Transazioni su [http://secondlife.com/account/ Pannello di Controllo]
- </notification>
- <notification name="FirstSit">
- Sei seduto.
-Usa le frecce (oppure AWSD) per guardarti intorno.
-Clicca il bottone &apos;Alzati&apos; per alzarti.
- </notification>
- <notification name="FirstMap">
- Clicca e trascina la mappa per guardare attorno.
-Fai doppio click per teleportarti.
-Usa i controlli sulla destra per trovare cose e visualizzare sfondi differenti.
- </notification>
- <notification name="FirstBuild">
- Hai aperto gli Strumenti di Build. Ogni oggetto attorno a te è stato costruito con questi strumenti.
- </notification>
- <notification name="FirstTeleport">
- Puoi teleportarti solo in certe aree di questa regione. La freccia indica la tua destinazione. Clicca sulla freccia per farla sparire.
+Potrai controllare lo stato del pagamento nella pagina della cronologia delle transazioni nel tuo [http://secondlife.com/account/ Dashboard]
</notification>
<notification name="FirstOverrideKeys">
I tuoi movimenti della tastiera vengono ora gestiti da un oggetto.
@@ -2435,42 +2431,17 @@ Prova i tasti freccia o AWSD per vedere quello che fanno.
Alcuni oggetti (come pistole) richiedono di andare in mouselook per il loro utilizzo.
Premi &apos;M&apos; per farlo.
</notification>
- <notification name="FirstAppearance">
- Stai modificando il tuo aspetto.
-Usa le frecce per guardarti attorno.
-Quando hai finito premi &apos;Salva Tutto&apos;.
- </notification>
- <notification name="FirstInventory">
- Questo è il tuo Inventory, che contiene gli elementi che possiedi.
-
-* Per indossare qualcosa, trascinala su di te.
-* Per rezzare qualcosa inworld, trascinala sul suolo.
-* Per leggere una notecard, fai doppio click.
- </notification>
<notification name="FirstSandbox">
- Questa è una Sandbox, serve per aiutare i Residenti ad imparare a costruire.
-
-Gli oggetti che costruisci qui saranno cancellati dopo che te ne sei andato, perciò non dimenticare di cliccare sulle tue creazioni col tasto destro e scegliere &apos;Prendi&apos; per trasferirle nel tuo Inventory.
- </notification>
- <notification name="FirstFlexible">
- Questo oggetto è flessibile. Gli oggetti Flexy devono essere fantasma e non fisici.
- </notification>
- <notification name="FirstDebugMenus">
- Hai abilitato il menu Avanzato.
+ Questa è una Sandbox, serve ai residenti per imparare a costruire.
-Per abilitarlo/disabilitarlo,
- Windows: Ctrl+Alt+D
- Mac: &#8997;&#8984;D
- </notification>
- <notification name="FirstSculptedPrim">
- Stai modificando un prim Sculpted. Gli oggetti Sculpted hanno bisogno di una texture speciale per definire la loro forma.
+Gli oggetti che costruisci qui verranno eliminati dopo che te ne sei andato, perciò non dimenticare di cliccare sulle tue creazioni col tasto destro del mouse e scegliere Prendi per trasferirle nel tuo Inventario.
</notification>
<notification name="MaxListSelectMessage">
È possibile selezionare solo fino a [MAX_SELECT] oggetti da questa lista.
</notification>
<notification name="VoiceInviteP2P">
- [NAME] ti sta invitando ad una chiamata in Chat Voice.
-Clicca Accetta per unirti alla chiamata oppure Declina per declinare l&apos;invito. Clicca Blocca per bloccare questo chiamante.
+ [NAME] ti sta invitando ad una chiamata in chat vocale.
+Clicca su Accetta per unirti alla chiamata oppure su Declina to declinare l&apos;invito. Clicca su Blocca per bloccare questo chiamante.
<form name="form">
<button name="Accept" text="Accetta"/>
<button name="Decline" text="Rifiuta"/>
@@ -2478,17 +2449,17 @@ Clicca Accetta per unirti alla chiamata oppure Declina per declinare l&apos;invi
</form>
</notification>
<notification name="AutoUnmuteByIM">
- Hai appena inviato un IM a [FIRST] [LAST], che è stato automaticamente sbloccato.
+ [FIRST] [LAST] ha ricevuto un IM ed è stato automaticamente sbloccato.
</notification>
<notification name="AutoUnmuteByMoney">
- Hai appena inviato del denaro a [FIRST] [LAST], che è stato automaticamente sbloccato.
+ [FIRST] [LAST] ha ricevuto del denaro e pertanto è stato automaticamente sbloccato.
</notification>
<notification name="AutoUnmuteByInventory">
- Hai appena offerto un elemento dell&apos;Inventory a [FIRST] [LAST], che è stato automaticamente sbloccato.
+ A [FIRST] [LAST] è stato offerto un elemento dell&apos;Inventario e pertanto è stato automaticamente sbloccato.
</notification>
<notification name="VoiceInviteGroup">
- [NAME] si è aggiunto alla chiamata in Chat Voice con il gruppo [GROUP].
-Clicca Accetta per unirti alla chiamata oppure Declina per declinare l&apos;invito. Clicca Blocca per bloccare questo chiamante.
+ [NAME] si è aggiunto alla chiamata in chat vocale con il gruppo [GROUP].
+Clicca su Accetta per unirti alla chiamata oppure su Declina to declinare l&apos;invito. Clicca su Blocca per bloccare questo chiamante.
<form name="form">
<button name="Accept" text="Accetta"/>
<button name="Decline" text="Rifiuta"/>
@@ -2496,8 +2467,8 @@ Clicca Accetta per unirti alla chiamata oppure Declina per declinare l&apos;in
</form>
</notification>
<notification name="VoiceInviteAdHoc">
- [NAME] si è aggiunto alla chiamata in Chat Voice con una conferenza.
-Clicca Accetta per unirti alla chiamata oppure Declina to declinare l&apos;invito. Clicca Blocca per bloccare questo chiamante.
+ [NAME] si è aggiunto alla chiamata in chat vocale con una conferenza.
+Clicca su Accetta per unirti alla chiamata oppure su Declina to declinare l&apos;invito. Clicca su Blocca per bloccare questo chiamante.
<form name="form">
<button name="Accept" text="Accetta"/>
<button name="Decline" text="Rifiuta"/>
@@ -2506,7 +2477,7 @@ Clicca Accetta per unirti alla chiamata oppure Declina to declinare l&apos;invit
</notification>
<notification name="InviteAdHoc">
[NAME] ti sta invitando ad una conferenza in chat.
-Clicca Accetta per unirti alla chat oppure Declina per declinare l&apos;invito. Clicca Blocca per bloccare questo chiamante.
+Clicca su Accetta per unirti alla chat oppure su Declina per declinare l&apos;invito. Clicca su Blocca per bloccare questo chiamante.
<form name="form">
<button name="Accept" text="Accetta"/>
<button name="Decline" text="Rifiuta"/>
@@ -2520,25 +2491,25 @@ Clicca Accetta per unirti alla chat oppure Declina per declinare l&apos;invito.
Siamo spiacenti. Questa area ha raggiunto la capacità massima per le chiamate voice. Si prega di provare ad usare il voice in un&apos;altra area.
</notification>
<notification name="VoiceChannelDisconnected">
- Sei stato disconnesso da [VOICE_CHANNEL_NAME]. Verrai ora riconnesso alla Chat Voice Locale.
+ Sei stato scollegato da [VOICE_CHANNEL_NAME]. Verrai ora ricollegato alla chat vocale nei dintorni.
</notification>
<notification name="VoiceChannelDisconnectedP2P">
- [VOICE_CHANNEL_NAME] ha terminato la chiamata. Verrai ora riconnesso alla Chat Voice Locale.
+ [VOICE_CHANNEL_NAME] ha chiuso la chiamata. Verrai ora ricollegato alla chat vocale nei dintorni.
</notification>
<notification name="P2PCallDeclined">
- [VOICE_CHANNEL_NAME] ha declinato la tua chiamata. Verrai ora riconnesso alla Chat Voice Locale.
+ [VOICE_CHANNEL_NAME] ha declinato la tua chiamata. Verrai ora ricollegato alla chat vocale nei dintorni.
</notification>
<notification name="P2PCallNoAnswer">
- [VOICE_CHANNEL_NAME] non è disponibile per la tua chiamata. Verrai ora riconnesso alla Chat Voice Locale.
+ [VOICE_CHANNEL_NAME] non è disponibile per la tua chiamata. Verrai ora ricollegato alla chat vocale nei dintorni.
</notification>
<notification name="VoiceChannelJoinFailed">
- Connessione a [VOICE_CHANNEL_NAME] fallita, riprova più tardi. Verrai ora riconnesso alla Chat Voice Locale.
+ Collegamento a [VOICE_CHANNEL_NAME] non riuscito, riprova più tardi. Verrai ora ricollegato alla chat vocale nei dintorni.
</notification>
<notification name="VoiceLoginRetry">
Stiamo creando una canale voice per te. Questo può richiedere fino a un minuto.
</notification>
<notification name="Cannot enter parcel: not a group member">
- Soltanto i membri di uno specifico gruppo possono visitare quest&apos;area.
+ Soltanto i membri di un determinato gruppo possono visitare questa zona.
</notification>
<notification name="Cannot enter parcel: banned">
Non puoi entrare nel terreno, sei stato bloccato.
@@ -2553,17 +2524,17 @@ Clicca Accetta per unirti alla chat oppure Declina per declinare l&apos;invito.
Si è verificato un errore durante il tentativo di collegarti a una voice chat con [VOICE_CHANNEL_NAME]. Riprova più tardi.
</notification>
<notification name="ServerVersionChanged">
- Sei appena entrato in una regione che usa una versione differente del server, questo potrebbe influenzare le prestazioni. [[URL] Guarda le Release Notes.]
+ Sei appena entrato in una regione che usa una versione differente del server: ciò potrebbe incidere sule prestazioni. [[URL] Visualizza le note sulla versione.]
</notification>
<notification name="UnsupportedCommandSLURL">
- Lo SLurl che hai cliccato non è attivo.
+ Lo SLurl su cui hai cliccato non è valido.
</notification>
<notification name="BlockedSLURL">
- Uno SLurl è stato ricevuto da un browser sconosciuto e per la tua sicurezza è stato bloccato.
+ Uno SLurl è stato ricevuto da un browser sconosciuto o non sicuro e, per sicurezza, è stato bloccato.
</notification>
<notification name="ThrottledSLURL">
- Multipli SLurls sono stati ricevuti da un browser sconosciuto in un breve periodo.
-Per la tua sicurezza verranno bloccati per alcuni secondi.
+ Sono stati ricevuti più SLurl da un browser sconosciuto o non sicuro in un breve periodo di tempo.
+Per sicurezza, verranno bloccati per alcuni secondi.
</notification>
<notification name="IMToast">
[MESSAGE]
@@ -2571,19 +2542,23 @@ Per la tua sicurezza verranno bloccati per alcuni secondi.
<button name="respondbutton" text="Rispondi"/>
</form>
</notification>
+ <notification name="ConfirmCloseAll">
+ Sicuro di voler chiudere tutti gli IM?
+ <usetemplate ignoretext="Conferma prima della chiusura di tutti gli IM" name="okcancelignore" notext="Annulla" yestext="OK"/>
+ </notification>
<notification name="AttachmentSaved">
- L&apos;Allegato (Attachment) è stato salvato.
+ L&apos;elemento da collegare è stato salvato.
</notification>
<notification name="UnableToFindHelpTopic">
- Impossibilitato a trovare il tema aiuto per questo elemento (nozione)???!!!!.
+ Impossibile trovare l&apos;argomento nell&apos;aiuto per questo elemento.
</notification>
<notification name="ObjectMediaFailure">
- Errore del Server: aggiornamento del Media o mancato funzionamento.
+ Errore del server: mancato aggiornamento o ottenimento del media.
&apos;[ERROR]&apos;
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="TextChatIsMutedByModerator">
- Il tuo testo nella chat è stato interrotto dal moderatore.
+ La tua chat di testo è stata interrotta dal moderatore.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="VoiceIsMutedByModerator">
@@ -2592,19 +2567,19 @@ Per la tua sicurezza verranno bloccati per alcuni secondi.
</notification>
<notification name="ConfirmClearTeleportHistory">
Sei sicuro di volere cancellare la cronologia dei tuoi teleport?
- <usetemplate name="okcancelbuttons" notext="Cancella" yestext="OK"/>
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
<notification name="BottomTrayButtonCanNotBeShown">
- Il bottone selezionato non può essere mostrato in questo momento.
-Il bottone verrà mostrato quando ci sarà abbastanza spazio.
+ Il pulsante selezionato non può essere visualizzato in questo momento.
+Il pulsante verrà visualizzato quando lo spazio sarà sufficiente.
</notification>
<global name="UnsupportedCPU">
- La velocità della tua CPU non soddisfa i requisiti minimi.
</global>
<global name="UnsupportedGLRequirements">
- Non sembra che tu abbia i requisiti hardware adeguati per [APP_NAME]. [APP_NAME] richiede una scheda grafica OpenGL con supporto multitexture. Se tu ce l&apos;hai, dovresti accertarti di avere i driver, i service pack e le patch più recenti della scheda grafica e del tuo sistema operativo.
+ Non sembra che tu abbia i requisiti hardware adeguati per [APP_NAME]. [APP_NAME] richiede una scheda grafica OpenGL con supporto multitexture. Se ne hai una in dotazione, accertati di avere i driver, i service pack e i patch più recenti per la scheda grafica e per il sistema operativo.
-Se continui ad avere problemi, visita [SUPPORT_SITE].
+Se continui ad avere problemi, visita la pagina [SUPPORT_SITE].
</global>
<global name="UnsupportedCPUAmount">
796
@@ -2619,7 +2594,7 @@ Se continui ad avere problemi, visita [SUPPORT_SITE].
- La memoria del tuo sistema non soddisfa i requisiti minimi.
</global>
<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
- Se possiedi una parte di terra, puoi creare qui la tua ubicazione di casa.
-Altrimenti, puoi guardare sulla Mappa e trovare luoghi segnalati come &quot;Infohub&quot;.
+ Se sei proprietario di un appezzamento di terreno, puoi definirlo come la tua posizione iniziale.
+In alternativa, puoi guardare sulla mappa e trovare luoghi segnalati come &quot;Infohub&quot;.
</global>
</notifications>
diff --git a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml
index 4a7c9b11c7..be001d09f8 100644
--- a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml
@@ -1,8 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <panel name="panel_call_buttons">
- <button label="Chiama" name="call_btn"/>
- <button label="Abbandona Chiamata" name="end_call_btn"/>
- <button label="Voice Controls" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="vertical_stack">
+ <layout_panel name="call_btn_panel">
+ <button label="Chiama" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Abbandona chiamata" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Regolazione voce" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
index 40f805774e..4c7f298590 100644
--- a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
@@ -1,25 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="avatar_list_item">
<string name="FormatSeconds">
- [COUNT]s
+ [COUNT] s
</string>
<string name="FormatMinutes">
- [COUNT]m
+ [COUNT] m
</string>
<string name="FormatHours">
- [COUNT]h
+ [COUNT] h
</string>
<string name="FormatDays">
- [COUNT]d
+ [COUNT] g
</string>
<string name="FormatWeeks">
- [COUNT]w
+ [COUNT] sett
</string>
<string name="FormatMonths">
- [COUNT]mon
+ [COUNT] mes
</string>
<string name="FormatYears">
- [COUNT]y
+ [COUNT] a
</string>
<text name="avatar_name" value="Sconosciuto"/>
+ <button name="profile_btn" tool_tip="Vedi profilo"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml
index cf833924ae..610f561a65 100644
--- a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="block_list_panel">
<text name="title_text">
- Lista bloccata
+ Blocca lista
</text>
- <scroll_list name="blocked" tool_tip="Lista dei residenti bloccati"/>
- <button label="Blocca il Residente..." label_selected="Blocca Residente..." name="Block resident..." tool_tip="Scegli un residente da bloccare"/>
+ <scroll_list name="blocked" tool_tip="Lista degli attuali residenti bloccati"/>
+ <button label="Blocca il residente..." label_selected="Blocca il residente..." name="Block resident..." tool_tip="Scegli un residente da bloccare"/>
<button label="Blocca l&apos;oggetto per nome..." label_selected="Blocca l&apos;oggetto per nome..." name="Block object by name..."/>
- <button label="Sblocca" label_selected="Sblocca" name="Unblock" tool_tip="Rimuovi dalla lista il residente o l&apos;oggetto bloccato"/>
+ <button label="Sblocca" label_selected="Sblocca" name="Unblock" tool_tip="Rimuovi un residente o un oggetto dalla lista bloccati"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_bottomtray.xml b/indra/newview/skins/default/xui/it/panel_bottomtray.xml
index f2aab63dce..c0218fad5e 100644
--- a/indra/newview/skins/default/xui/it/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/it/panel_bottomtray.xml
@@ -1,23 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="bottom_tray">
<string name="SpeakBtnToolTip">
- Microfono on/off
+ Accende o spegne il microfono
</string>
<string name="VoiceControlBtnToolTip">
- Mostra/nascondi il pannello voice control
+ Mostra o nasconde il pannello di regolazione voce
</string>
<layout_stack name="toolbar_stack">
+ <layout_panel name="speak_panel">
+ <talk_button name="talk">
+ <speak_button label="Parla" label_selected="Parla" name="speak_btn"/>
+ </talk_button>
+ </layout_panel>
<layout_panel name="gesture_panel">
- <gesture_combo_box label="Gesture" name="Gesture" tool_tip="Mostra/nascondi gestures"/>
+ <gesture_combo_list label="Gesture" name="Gesture" tool_tip="Mostra o nasconde le gesture"/>
</layout_panel>
<layout_panel name="movement_panel">
- <button label="Sposta" name="movement_btn" tool_tip="Mostra/nascondi i controlli del movimento"/>
+ <button label="Sposta" name="movement_btn" tool_tip="Mostra o nasconde i comandi del movimento"/>
</layout_panel>
<layout_panel name="cam_panel">
- <button label="Visualizza" name="camera_btn" tool_tip="Mostra/nascondi i controlli della camera"/>
+ <button label="Visuale" name="camera_btn" tool_tip="Mostra o nasconde le regolazioni della visuale"/>
</layout_panel>
<layout_panel name="snapshot_panel">
<button label="" name="snapshots" tool_tip="Scatta una foto"/>
</layout_panel>
+ <layout_panel name="im_well_panel">
+ <chiclet_im_well name="im_well">
+ <button name="Unread IM messages" tool_tip="Conversazioni"/>
+ </chiclet_im_well>
+ </layout_panel>
+ <layout_panel name="notification_well_panel">
+ <chiclet_notification name="notification_well">
+ <button name="Unread" tool_tip="Notifiche"/>
+ </chiclet_notification>
+ </layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml
new file mode 100644
index 0000000000..ff576c7dd2
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray_lite">
+ <layout_stack name="toolbar_stack_lite">
+ <layout_panel name="gesture_panel">
+ <gesture_combo_list label="Gesture" name="Gesture" tool_tip="Mostra/nasconde gesture"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_classified_info.xml b/indra/newview/skins/default/xui/it/panel_classified_info.xml
index 2ba127d34a..3d363d9c75 100644
--- a/indra/newview/skins/default/xui/it/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/it/panel_classified_info.xml
@@ -1,17 +1,48 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_classified_info">
- <text name="title" value="Info sugli Annunci"/>
+ <panel.string name="l$_price">
+ L$ [PRICE]
+ </panel.string>
+ <panel.string name="click_through_text_fmt">
+ [TELEPORT] teleport, [MAP] mappa, [PROFILE] profilo
+ </panel.string>
+ <panel.string name="date_fmt">
+ [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
+ </panel.string>
+ <panel.string name="auto_renew_on">
+ Abilitato
+ </panel.string>
+ <panel.string name="auto_renew_off">
+ Disattivato
+ </panel.string>
+ <text name="title" value="Informazioni inserzione"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <text name="classified_name" value="[nome]"/>
- <text name="classified_location" value="[caricando...]"/>
- <text name="content_type" value="[tipo di contenuto]"/>
- <text name="category" value="[categoria]"/>
- <check_box label="Auto rinnovo settimanale" name="auto_renew"/>
- <text name="price_for_listing" tool_tip="Prezzo di listino.">
- L$[PREZZO]
- </text>
- <text name="classified_desc" value="[descrizione]"/>
+ <text_editor name="classified_name" value="[name]"/>
+ <text name="classified_location_label" value="Luogo:"/>
+ <text_editor name="classified_location" value="[loading...]"/>
+ <text name="content_type_label" value="Tipo di contenuto:"/>
+ <text_editor name="content_type" value="[content type]"/>
+ <text name="category_label" value="Categoria:"/>
+ <text_editor name="category" value="[category]"/>
+ <text name="creation_date_label" value="Data di creazione:"/>
+ <text_editor name="creation_date" tool_tip="Data di creazione" value="[date]"/>
+ <text name="price_for_listing_label" value="Prezzo per inserzione:"/>
+ <text_editor name="price_for_listing" tool_tip="Prezzo per inserzione:" value="[price]"/>
+ <layout_stack name="descr_stack">
+ <layout_panel name="clickthrough_layout_panel">
+ <text name="click_through_label" value="Clic:"/>
+ <text_editor name="click_through_text" tool_tip="Dati di click through" value="[clicks]"/>
+ </layout_panel>
+ <layout_panel name="price_layout_panel">
+ <text name="auto_renew_label" value="Rinnovo automatico:"/>
+ <text name="auto_renew" value="Abilitato"/>
+ </layout_panel>
+ <layout_panel name="descr_layout_panel">
+ <text name="classified_desc_label" value="Descrizione:"/>
+ <text_editor name="classified_desc" value="[descrizione]"/>
+ </layout_panel>
+ </layout_stack>
</panel>
</scroll_container>
<panel name="buttons">
diff --git a/indra/newview/skins/default/xui/it/panel_edit_alpha.xml b/indra/newview/skins/default/xui/it/panel_edit_alpha.xml
index 652bef0430..286ee626cf 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_alpha.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_alpha.xml
@@ -2,7 +2,7 @@
<panel name="edit_alpha_panel">
<panel name="avatar_alpha_color_panel">
<texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/>
- <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Click to choose a picture"/>
+ <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una fotografia"/>
<texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/>
<texture_picker label="Alpha dell&apos;occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/>
<texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegliere una fotografia"/>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_classified.xml b/indra/newview/skins/default/xui/it/panel_edit_classified.xml
index 81ef121dd8..bbe8ebbc32 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_classified.xml
@@ -1,14 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Modifica gli Annunci" name="panel_edit_classified">
+<panel label="Modifica inserzione" name="panel_edit_classified">
<panel.string name="location_notice">
- (sarà aggiornato dopo il salvataggio)
+ (si aggiornerà dopo il salvataggio)
</panel.string>
+ <string name="publish_label">
+ Pubblica
+ </string>
+ <string name="save_label">
+ Salva
+ </string>
<text name="title">
- Modifica gli Annunci
+ Modifica inserzione
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <icon label="" name="edit_icon" tool_tip="Clicca per selezionare un&apos;immagine"/>
+ <panel name="snapshot_panel">
+ <icon label="" name="edit_icon" tool_tip="Clicca per selezionare un&apos;immagine"/>
+ </panel>
<text name="Name:">
Titolo:
</text>
@@ -19,15 +27,22 @@
Luogo:
</text>
<text name="classified_location">
- caricando...
+ caricamento...
</text>
- <button label="Imposta sul luogo attuale" name="set_to_curr_location_btn"/>
- <spinner label="L$" name="price_for_listing" tool_tip="Fissare il Prezzo." value="50"/>
- <check_box label="Auto-rinnovo settimanale" name="auto_renew"/>
+ <button label="Imposta come luogo attuale" name="set_to_curr_location_btn"/>
+ <text name="category_label" value="Categoria:"/>
+ <text name="content_type_label" value="Tipo di contenuto:"/>
+ <icons_combo_box label="Contenuto generale" name="content_type">
+ <icons_combo_box.item label="Contenuto moderato" name="mature_ci" value="Moderato"/>
+ <icons_combo_box.item label="Contenuto generale" name="pg_ci" value="Generale"/>
+ </icons_combo_box>
+ <text name="price_for_listing_label" value="Prezzo per inserzione:"/>
+ <spinner label="L$" name="price_for_listing" tool_tip="Prezzo per inserzione:" value="50"/>
+ <check_box label="Rinnovo automatico ogni settimana" name="auto_renew"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Salva" name="save_changes_btn"/>
- <button label="Cancella" name="cancel_btn"/>
+ <button label="[LABEL]" name="save_changes_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_hair.xml b/indra/newview/skins/default/xui/it/panel_edit_hair.xml
index 137a5cabeb..534ff457ff 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_hair.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_hair.xml
@@ -7,6 +7,6 @@
<accordion_tab name="hair_color_tab" title="Colore"/>
<accordion_tab name="hair_style_tab" title="Stile"/>
<accordion_tab name="hair_eyebrows_tab" title="Sopracciglia"/>
- <accordion_tab name="hair_facial_tab" title="Facciale"/>
+ <accordion_tab name="hair_facial_tab" title="Del viso"/>
</accordion>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_pick.xml b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
index 7f2e82e4ff..d2d97cfc71 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
@@ -1,7 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Modifica scelta ????" name="panel_edit_pick">
+<panel label="Modifica scelta" name="panel_edit_pick">
+ <panel.string name="location_notice">
+ (si aggiornerà dopo il salvataggio)
+ </panel.string>
<text name="title">
- Modifica scelta ????
+ Modifica scelta
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
@@ -16,13 +19,13 @@
Luogo:
</text>
<text name="pick_location">
- caricando...
+ caricamento...
</text>
<button label="Imposta come luogo attuale" name="set_to_curr_location_btn"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Salva [WHAT]" name="save_changes_btn"/>
- <button label="Cancella" name="cancel_btn"/>
+ <button label="Salva luogo preferito" name="save_changes_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_profile.xml b/indra/newview/skins/default/xui/it/panel_edit_profile.xml
index b9779c77b5..3ecf4bcaf2 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_profile.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Modifica del profilo" name="edit_profile_panel">
+<panel label="Modifica profilo" name="edit_profile_panel">
<string name="CaptionTextAcctInfo">
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
</string>
<string name="RegisterDateFormat">
- [REG_DATE] ([ETA&apos;])
+ [REG_DATE] ([AGE])
</string>
<string name="AcctTypeResident" value="Residente"/>
<string name="AcctTypeTrial" value="Prova"/>
@@ -26,23 +26,26 @@
<icon label="" name="2nd_life_edit_icon" tool_tip="Clicca per selezionare un&apos;immagine"/>
</panel>
<panel name="first_life_image_panel">
- <text name="real_world_photo_title_text" value="Mondo Reale:"/>
+ <text name="real_world_photo_title_text" value="Mondo reale:"/>
</panel>
<icon label="" name="real_world_edit_icon" tool_tip="Clicca per selezionare un&apos;immagine"/>
<text name="title_homepage_text">
- Homepage:
+ Home page:
</text>
<check_box label="Mostrami nei risultati della ricerca" name="show_in_search_checkbox"/>
- <text name="title_acc_status_text" value="Mio Account:"/>
- <text name="my_account_link" value="[[URL] Vai al mio pannello personale]"/>
- <text name="acc_status_text" value="Residente. No payment info on file."/>
- <text name="title_partner_text" value="Mio Partner:"/>
- <text name="partner_edit_link" value="[[URL] Modifica]"/>
+ <text name="title_acc_status_text" value="Il mio account:"/>
+ <text_editor name="acc_status_text" value="Residente. Nessuna informazione di pagamento disponibile."/>
+ <text name="my_account_link" value="[[URL] Go to My Dashboard]"/>
+ <text name="title_partner_text" value="Il mio partner:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(recupero)" name="partner_text"/>
+ </panel>
+ <text name="partner_edit_link" value="[[URL] Edit]"/>
</panel>
</panel>
</scroll_container>
<panel name="profile_me_buttons_panel">
- <button label="Salva le modifiche" name="save_btn"/>
- <button label="Cancella" name="cancel_btn"/>
+ <button label="Salva modifiche" name="save_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_shape.xml b/indra/newview/skins/default/xui/it/panel_edit_shape.xml
index f22b393ecd..cc0676b43c 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_shape.xml
@@ -5,8 +5,8 @@
Sesso:
</text>
<radio_group name="sex_radio">
- <radio_item label="Femminile" name="radio"/>
- <radio_item label="Maschile" name="radio2"/>
+ <radio_item label="Femmina" name="radio"/>
+ <radio_item label="Maschio" name="radio2"/>
</radio_group>
</panel>
<accordion name="wearable_accordion">
@@ -17,7 +17,7 @@
<accordion_tab name="shape_nose_tab" title="Naso"/>
<accordion_tab name="shape_mouth_tab" title="Bocca"/>
<accordion_tab name="shape_chin_tab" title="Mento"/>
- <accordion_tab name="shape_torso_tab" title="Busto"/>
+ <accordion_tab name="shape_torso_tab" title="Torace"/>
<accordion_tab name="shape_legs_tab" title="Gambe"/>
</accordion>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_shirt.xml b/indra/newview/skins/default/xui/it/panel_edit_shirt.xml
index 5d902ae40b..631d609d60 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_shirt.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_shirt.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_shirt_panel">
<panel name="avatar_shirt_color_panel">
- <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere una foto"/>
+ <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere una fotografia"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
</panel>
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/it/panel_edit_skin.xml b/indra/newview/skins/default/xui/it/panel_edit_skin.xml
index 2fa76d4afc..9e05599470 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_skin.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_skin_panel">
<panel name="avatar_skin_color_panel">
- <texture_picker label="Tatuaggi Testa" name="Head Tattoos" tool_tip="Clicca per scegliere un&apos;immagine"/>
- <texture_picker label="Tatuaggi superiori" name="Upper Tattoos" tool_tip="Clicca per scegliere un&apos;immagine"/>
- <texture_picker label="Tatuaggi inferiori" name="Lower Tattoos" tool_tip="Clicca per scegliere un&apos;immagine"/>
+ <texture_picker label="Tatuaggi testa" name="Head Tattoos" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Tatuaggi superiori" name="Upper Tattoos" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Tatuaggi inferiori" name="Lower Tattoos" tool_tip="Clicca per scegliere una fotografia"/>
</panel>
<accordion name="wearable_accordion">
<accordion_tab name="skin_color_tab" title="Colore della pelle"/>
- <accordion_tab name="skin_face_tab" title="Dettagli del Viso"/>
- <accordion_tab name="skin_makeup_tab" title="Trucco"/>
- <accordion_tab name="skin_body_tab" title="Dettagli del Corpo"/>
+ <accordion_tab name="skin_face_tab" title="Dettagli del viso"/>
+ <accordion_tab name="skin_makeup_tab" title="Makeup"/>
+ <accordion_tab name="skin_body_tab" title="Dettagli del corpo"/>
</accordion>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_socks.xml b/indra/newview/skins/default/xui/it/panel_edit_socks.xml
index 1d1eb4bd3a..d2af3ebd5a 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_socks.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_socks.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_socks_panel">
<panel name="avatar_socks_color_panel">
- <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere una foto"/>
+ <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere una fotografia"/>
<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
</panel>
<accordion name="wearable_accordion">
- <accordion_tab name="socks_main_tab" title="Calze"/>
+ <accordion_tab name="socks_main_tab" title="Calzini"/>
</accordion>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml
index 5435a28ff9..d8cfa15b25 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_tattoo_panel">
<panel name="avatar_tattoo_color_panel">
- <texture_picker label="Tatuaggio sulla testa" name="Head Tattoo" tool_tip="Clicca per scegliere una foto"/>
- <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una foto"/>
- <texture_picker label="Tatuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una foto"/>
+ <texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
+ <texture_picker label="Tattuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
index baf585dad0..2583cf4e0e 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
@@ -1,55 +1,55 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Indossabile" name="panel_edit_wearable">
<string name="edit_shape_title">
- Modifica la Shape
+ Modifica della figura corporea
</string>
<string name="edit_skin_title">
- Modifica la Skin
+ Modifica della pelle
</string>
<string name="edit_hair_title">
- Modifica capelli
+ Modifica dei capelli
</string>
<string name="edit_eyes_title">
- Modifica occhi
+ Modifica degli occhi
</string>
<string name="edit_shirt_title">
- Modifica camicia
+ Modifica della camicia
</string>
<string name="edit_pants_title">
- Modifica pantaloni
+ Modifica dei pantaloni
</string>
<string name="edit_shoes_title">
- Modifica scarpe
+ Modifica delle scarpe
</string>
<string name="edit_socks_title">
- Modifica calze
+ Modifica delle calze
</string>
<string name="edit_jacket_title">
- Modifica Giacca
+ Modifica della giacca
</string>
<string name="edit_skirt_title">
- Modifica gonna
+ Modifica della gonna
</string>
<string name="edit_gloves_title">
- Modifica guanti
+ Modifica dei guanti
</string>
<string name="edit_undershirt_title">
- Modifica maglietta intima
+ Modifica della maglietta intima
</string>
<string name="edit_underpants_title">
- Modifica slip
+ Modifica dello slip
</string>
<string name="edit_alpha_title">
- Modifica Alpha Mask
+ Modifica di Alpha Mask
</string>
<string name="edit_tattoo_title">
- Modifica tatuaggio
+ Modifica del tatuaggio
</string>
<string name="shape_desc_text">
- Shape:
+ Figura corporea:
</string>
<string name="skin_desc_text">
- Skin:
+ Pelle:
</string>
<string name="hair_desc_text">
Capelli:
@@ -90,9 +90,9 @@
<string name="tattoo_desc_text">
Tatuaggio:
</string>
- <text name="edit_wearable_title" value="Modifica Shape"/>
+ <text name="edit_wearable_title" value="Modifica della figura corporea"/>
<panel label="Camicia" name="wearable_type_panel">
- <text name="description_text" value="Shape:"/>
+ <text name="description_text" value="Figura corporea:"/>
</panel>
<panel name="button_panel">
<button label="Salva con nome" name="save_as_button"/>
diff --git a/indra/newview/skins/default/xui/it/panel_friends.xml b/indra/newview/skins/default/xui/it/panel_friends.xml
index a3a985f5aa..cfe162a67b 100644
--- a/indra/newview/skins/default/xui/it/panel_friends.xml
+++ b/indra/newview/skins/default/xui/it/panel_friends.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="friends">
<string name="Multiple">
- Amici multipli
+ Più amici
</string>
<scroll_list name="friend_list" tool_tip="Tieni premuto shift o control mentre clicchi per selezionare più di un amico">
<column name="icon_online_status" tool_tip="Stato Online"/>
@@ -16,5 +16,5 @@
<button label="Teleport" name="offer_teleport_btn" tool_tip="Offri a questo amico un teleport per dove sei tu ora"/>
<button label="Paga" name="pay_btn" tool_tip="Dai Linden dollar (L$) a questo amico"/>
<button label="Rimuovi" name="remove_btn" tool_tip="Rimuovi questa persona dalla tua lista amici"/>
- <button label="Aggiungi" name="add_btn" tool_tip="Offri amicizia ad un residente"/>
+ <button label="Aggiungi" name="add_btn" tool_tip="Offri amicizia a un residente"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml b/indra/newview/skins/default/xui/it/panel_group_control_panel.xml
index c2bceaeef6..2d17e4a0cd 100644
--- a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_control_panel.xml
@@ -1,9 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <button label="Profilo del Gruppo" name="group_info_btn"/>
- <panel name="panel_call_buttons">
- <button label="Chiama Gruppo" name="call_btn"/>
- <button label="Chiudi Chiamata" name="end_call_btn"/>
- <button label="Apri Controlli Voice" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="vertical_stack">
+ <layout_panel name="group_info_btn_panel">
+ <button label="Profilo del gruppo" name="group_info_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Chiama il gruppo" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Abbandona chiamata" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Apri la regolazione voce" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_general.xml b/indra/newview/skins/default/xui/it/panel_group_general.xml
index 0ca1ce2064..e21f9d2049 100644
--- a/indra/newview/skins/default/xui/it/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_general.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Generale" name="general_tab">
<panel.string name="help_text">
- La tabella generale contiene informazioni generali su questo gruppo, lista dei membri, preferenze generali del gruppo e opzioni dei membri.
+ La scheda generale contiene informazioni generali su questo gruppo, lista dei soci, preferenze del gruppo e opzioni dei soci.
-Muovi il tuo mouse sopra le opzioni per maggior aiuto.
+Muovi il tuo mouse sopra le opzioni per maggiore aiuto.
</panel.string>
<panel.string name="group_info_unchanged">
Le informazioni generali sul gruppo sono cambiate
@@ -11,27 +11,45 @@ Muovi il tuo mouse sopra le opzioni per maggior aiuto.
<panel.string name="incomplete_member_data_str">
Rilevando i dati dei membri
</panel.string>
+ <panel name="group_info_top">
+ <texture_picker label="" name="insignia" tool_tip="Clicca per scegliere una fotografia"/>
+ <text name="prepend_founded_by">
+ Fondatore:
+ </text>
+ <name_box initial_value="(recupero)" name="founder_name"/>
+ <text name="join_cost_text">
+ Gratis
+ </text>
+ <button label="ADERISCI ADESSO!" name="btn_join"/>
+ </panel>
<text_editor name="charter">
Statuto del gruppo
</text_editor>
<name_list name="visible_members">
- <name_list.columns label="Membro" name="name"/>
+ <name_list.columns label="Socio" name="name"/>
<name_list.columns label="Titolo" name="title"/>
+ <name_list.columns label="Stato" name="status"/>
</name_list>
+ <text name="my_group_settngs_label">
+ Io
+ </text>
<text name="active_title_label">
- Mio Titolo
+ Il mio titolo:
</text>
- <combo_box name="active_title" tool_tip="Imposta il titolo nella tag del tuo avatar quando questo gruppo è attivo."/>
- <check_box label="Ricevi notice dal gruppo" name="receive_notices" tool_tip="Imposta se vuoi ricevere Notice da questo. De-seleziona questa casella se il gruppo ti manda spam."/>
- <check_box label="Mostra nel mio Profilo" name="list_groups_in_profile" tool_tip="Imposta se vuoi mostrare questo gruppo nel tuo profilo"/>
+ <combo_box name="active_title" tool_tip="Imposta il titolo che compare con il nome del tuo avatar quando questo gruppo è attivo."/>
+ <check_box label="Ricevi avvisi dal gruppo" name="receive_notices" tool_tip="Imposta se vuoi ricevere avvisi da questo gruppo. Deseleziona questa casella se il gruppo ti manda messaggi indesiderati."/>
+ <check_box label="Mostra nel mio profilo" name="list_groups_in_profile" tool_tip="Imposta se vuoi mostrare questo gruppo nel tuo profilo"/>
<panel name="preferences_container">
- <check_box label="Iscrizione libera" name="open_enrollement" tool_tip="Imposta se questo gruppo permette ai nuovi membri di aderire senza essere invitati."/>
- <check_box label="Tassa d&apos;iscrizione" name="check_enrollment_fee" tool_tip="Imposta se richiedere una tassa d&apos;iscrizione per aderire al gruppo"/>
- <spinner label="L$" left_delta="136" name="spin_enrollment_fee" tool_tip="I nuovi membri devono pagare questa tassa d&apos;iscrizione quando tassa d&apos;iscrizione è selezionata." width="60"/>
+ <text name="group_settngs_label">
+ Gruppo
+ </text>
+ <check_box label="Chiunque può aderire" name="open_enrollement" tool_tip="Imposta se questo gruppo permette ai nuovi membri di aderire senza essere invitati."/>
+ <check_box label="Quota di adesione" name="check_enrollment_fee" tool_tip="Imposta se richiedere una tassa d&apos;iscrizione per aderire al gruppo"/>
+ <spinner label="L$" left_delta="136" name="spin_enrollment_fee" tool_tip="I nuovi soci devono pagare questa tassa d&apos;iscrizione quando è selezionata." width="60"/>
<combo_box name="group_mature_check" tool_tip="Imposta se le informazioni sul tuo gruppo sono da considerarsi Mature.">
<combo_box.item label="Contenuto PG" name="pg"/>
<combo_box.item label="Contenuto Mature" name="mature"/>
</combo_box>
- <check_box initial_value="true" label="Mostra nella ricerca" name="show_in_group_list" tool_tip="Permetti alle persone di vedere questo gruppo nei risultati del Cerca"/>
+ <check_box initial_value="true" label="Mostra nella ricerca" name="show_in_group_list" tool_tip="Permetti alle persone di vedere questo gruppo nei risultati della ricerca"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
index 26255943ed..da797b309f 100644
--- a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
@@ -1,36 +1,35 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Informazioni sul gruppo" name="GroupInfo">
+<panel label="Profilo del gruppo" name="GroupInfo">
<panel.string name="default_needs_apply_text">
- Ci sono variazioni non salvate nella tabella attuale
+ Ci sono modifiche non salvate
</panel.string>
<panel.string name="want_apply_text">
- Vuoi salvare queste variazioni?
+ Vuoi salvare le modifiche?
</panel.string>
<panel.string name="group_join_btn">
- Aderisci (L$[AMOUNT])
+ Aderisci ([AMOUNT] L$)
</panel.string>
<panel.string name="group_join_free">
Gratis
</panel.string>
- <text name="group_name" value="(Caricando...)"/>
- <line_editor label="Scrivi qui il nuovo nome del tuo gruppo" name="group_name_editor"/>
- <texture_picker label="" name="insignia" tool_tip="Clicca per scegliere uan fotografia"/>
- <text name="prepend_founded_by">
- Fondatore:
- </text>
- <name_box initial_value="(recuperando)" name="founder_name"/>
- <text name="join_cost_text">
- Gratis
- </text>
- <button label="ADERISCI ORA!" name="btn_join"/>
- <accordion name="groups_accordion">
- <accordion_tab name="group_general_tab" title="Generale"/>
- <accordion_tab name="group_roles_tab" title="Ruoli"/>
- <accordion_tab name="group_notices_tab" title="Notice"/>
- <accordion_tab name="group_land_tab" title="Terra/Beni ?????"/>
- </accordion>
- <panel name="button_row">
- <button label="Crea" label_selected="Nuovo gruppo" name="btn_create"/>
- <button label="Salva" label_selected="Salva" name="btn_apply"/>
+ <panel name="group_info_top">
+ <text name="group_name" value="(Caricamento in corso...)"/>
+ <line_editor label="Scrivi qui il nome del gruppo" name="group_name_editor"/>
</panel>
+ <layout_stack name="layout">
+ <layout_panel name="group_accordions">
+ <accordion name="groups_accordion">
+ <accordion_tab name="group_general_tab" title="Generale"/>
+ <accordion_tab name="group_roles_tab" title="Ruoli"/>
+ <accordion_tab name="group_notices_tab" title="Avvisi"/>
+ <accordion_tab name="group_land_tab" title="Terra/Beni"/>
+ </accordion>
+ </layout_panel>
+ <layout_panel name="button_row">
+ <button label="Chat" name="btn_chat"/>
+ <button label="Chiamata al gruppo" name="btn_call" tool_tip="Chiama questo gruppo"/>
+ <button label="Salva" label_selected="Salva" name="btn_apply"/>
+ <button label="Crea un gruppo" name="btn_create" tool_tip="Crea un nuovo gruppo"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_invite.xml b/indra/newview/skins/default/xui/it/panel_group_invite.xml
index 643d6b05fd..e3cb3c1092 100644
--- a/indra/newview/skins/default/xui/it/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_invite.xml
@@ -7,23 +7,21 @@
(Attendi...)
</panel.string>
<panel.string name="already_in_group">
- Alcuni avatars sono già nel gruppo e non erano stati invitati.
+ Alcuni dei residenti selezionati sono già nel gruppo, pertanto l&apos;invito non verrà loro spedito.
</panel.string>
<text name="help_text">
- Puoi selezionare più di un residente
-da invitare nel tuo gruppo. Clicca su
-&apos;Scelta residenti&apos; per iniziare.
+ Puoi selezionare più residenti da invitare nel tuo gruppo. Per iniziare, clicca su Apri il selettore di residenti.
</text>
<button label="Scelta residenti" name="add_button" tool_tip=""/>
- <name_list name="invitee_list" tool_tip="Tieni premuto il tasto Ctrl e clicca il nome dei residenti per una multi-selezione"/>
- <button label="Rimuovi i selezionati dall&apos;elenco" name="remove_button" tool_tip="Rimuovi i residenti selezionati dalla lista invito"/>
+ <name_list name="invitee_list" tool_tip="Tieni premuto Ctrl e fai clic sui nomi dei residenti per selezionare più nomi"/>
+ <button label="Rimuovi i selezionati dall&apos;elenco" name="remove_button" tool_tip="Rimuove i residenti selezionati dalla lista degli inviti"/>
<text name="role_text">
Scegli che ruolo assegnare loro:
</text>
- <combo_box name="role_name" tool_tip="Choose from the list of Roles you are allowed to assign members to"/>
+ <combo_box name="role_name" tool_tip="Scegli dall&apos;elenco dei ruoli ai quali ti è consentito assegnare i membri"/>
<button label="Manda gli inviti" name="ok_button"/>
<button label="Annulla" name="cancel_button"/>
<string name="GroupInvitation">
- Invito del Gruppo
+ Invito di gruppo
</string>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_land_money.xml b/indra/newview/skins/default/xui/it/panel_group_land_money.xml
index a532e7a575..1e3ef5e657 100644
--- a/indra/newview/skins/default/xui/it/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_land_money.xml
@@ -1,83 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Terra &amp; L$" name="land_money_tab">
- <string name="help_text">
- Appare un avviso fino a quando la Terra Totale in Uso è meno o = alla Contribuzione Totale.
- </string>
- <button label="?" name="help_button"/>
- <string name="cant_view_group_land_text">
- Non hai i permessi per vedere la terra posseduta dal gruppo
- </string>
- <string name="cant_view_group_accounting_text">
- Non hai i permessi per vedere le informazioni sulla contabilità del gruppo.
- </string>
- <string name="loading_txt">
+ <panel.string name="help_text">
+ Viene visualizzata un&apos;avvertenza fino a quando il terreno totale in uso è inferiore o uguale al contributo totale.
+ </panel.string>
+ <panel.string name="cant_view_group_land_text">
+ Non sei autorizzato a vedere quali terreni appartengono al gruppo.
+ </panel.string>
+ <panel.string name="cant_view_group_accounting_text">
+ Non sei autorizzato a visionare le informazioni finanziarie del gruppo.
+ </panel.string>
+ <panel.string name="loading_txt">
Attendi...
- </string>
- <text name="group_land_heading" width="250">
- Terra posseduta dal gruppo
- </text>
- <scroll_list name="group_parcel_list">
- <column label="Parcel" name="name"/>
- <column label="Regione" name="location"/>
- <column label="Tipo" name="type"/>
- <column label="Area" name="area"/>
- </scroll_list>
- <button label="Mappa" label_selected="Mappa" left="282" name="map_button" width="130"/>
- <text name="total_contributed_land_label">
- Contribuzione Totale:
- </text>
- <text name="total_contributed_land_value">
- [AREA] m²
- </text>
- <text name="total_land_in_use_label">
- Terra totale in uso:
- </text>
- <text name="total_land_in_use_value">
- [AREA] m²
- </text>
- <text name="land_available_label">
- Terreno disponibile:
- </text>
- <text name="land_available_value">
- [AREA] m²
- </text>
- <text name="your_contribution_label">
- La tua contribuzione:
- </text>
- <string name="land_contrib_error">
- Incapace di impostare la tua contribuzione di terreno
- </string>
- <text name="your_contribution_units">
- m²
- </text>
- <text name="your_contribution_max_value">
- ([IMPORTO] max)
- </text>
- <text name="group_over_limit_text">
- Sono necessari maggiori crediti di terreno per mantenere la terra in uso
- </text>
- <text name="group_money_heading">
- L$ del gruppo
- </text>
+ </panel.string>
+ <panel.string name="land_contrib_error">
+ Impossibile definire il tuo contributo di terreno
+ </panel.string>
+ <panel name="layout_panel_landmoney">
+ <scroll_list name="group_parcel_list">
+ <scroll_list.columns label="Lotto" name="name"/>
+ <scroll_list.columns label="Regione" name="location"/>
+ <scroll_list.columns label="Tipo" name="type"/>
+ <scroll_list.columns label="Superficie" name="area"/>
+ </scroll_list>
+ <text name="total_contributed_land_label">
+ Contributo totale:
+ </text>
+ <text name="total_contributed_land_value">
+ [AREA] m²
+ </text>
+ <button label="Mappa" label_selected="Mappa" name="map_button"/>
+ <text name="total_land_in_use_label">
+ Terreno totale in uso:
+ </text>
+ <text name="total_land_in_use_value">
+ [AREA] m²
+ </text>
+ <text name="land_available_label">
+ Terreno disponibile:
+ </text>
+ <text name="land_available_value">
+ [AREA] m²
+ </text>
+ <text name="your_contribution_label">
+ Il tuo contributo:
+ </text>
+ <text name="your_contribution_units">
+ m²
+ </text>
+ <text name="your_contribution_max_value">
+ ([AMOUNT] max)
+ </text>
+ <text name="group_over_limit_text">
+ Sono necessari più crediti del terreno per mantenere la terra in uso
+ </text>
+ <text name="group_money_heading">
+ L$ gruppo
+ </text>
+ </panel>
<tab_container name="group_money_tab_container">
<panel label="PIANIFICAZIONE" name="group_money_planning_tab">
<text_editor name="group_money_planning_text">
- Caricando...
+ Caricamento in corso...
</text_editor>
</panel>
<panel label="DETTAGLI" name="group_money_details_tab">
<text_editor name="group_money_details_text">
- Caricando...
+ Caricamento in corso...
</text_editor>
<button label="&lt; Precedente" label_selected="&lt; Precedente" name="earlier_details_button" tool_tip="Indietro" width="90"/>
- <button label="Successivo &gt;" label_selected="Successivo &gt;" left_delta="260" name="later_details_button" tool_tip="Prossimo" width="90"/>
+ <button label="Successivo &gt;" label_selected="Successivo &gt;" left_delta="260" name="later_details_button" tool_tip="Avanti" width="90"/>
</panel>
<panel label="VENDITE" name="group_money_sales_tab">
<text_editor name="group_money_sales_text">
- Caricando...
+ Caricamento in corso...
</text_editor>
<button label="&lt; Precedente" label_selected="&lt; Precedente" name="earlier_sales_button" tool_tip="Indietro" width="90"/>
- <button label="Successivo &gt;" label_selected="Successivo &gt;" left_delta="260" name="later_sales_button" tool_tip="Prossimo" width="90"/>
+ <button label="Successivo &gt;" label_selected="Successivo &gt;" left_delta="260" name="later_sales_button" tool_tip="Avanti" width="90"/>
</panel>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_list_item.xml b/indra/newview/skins/default/xui/it/panel_group_list_item.xml
index 3e5419d1bb..7cdc4c7ff6 100644
--- a/indra/newview/skins/default/xui/it/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_list_item.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="group_list_item">
<text name="group_name" value="Sconosciuto"/>
+ <button name="profile_btn" tool_tip="Vedi profilo"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_notices.xml b/indra/newview/skins/default/xui/it/panel_group_notices.xml
index dbeb9d56ff..9dac282de9 100644
--- a/indra/newview/skins/default/xui/it/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_notices.xml
@@ -5,10 +5,10 @@
Puoi disattivare la ricezione delle notice nella finestra principale.
</panel.string>
<panel.string name="no_notices_text">
- Non ci sono vecchie Notice
+ Non ci sono avvisi precedenti
</panel.string>
<text name="lbl2">
- Le Notice sono conservate per 14 giorni.
+ Gli avvisi sono conservati per 14 giorni.
Massimo 200 per gruppo al giorno
</text>
<scroll_list name="notice_list">
@@ -17,10 +17,10 @@ Massimo 200 per gruppo al giorno
<scroll_list.columns label="Data" name="date"/>
</scroll_list>
<text name="notice_list_none_found">
- Nessuna trovata
+ Nessuno trovato
</text>
- <button label="Crea una nuova notice" label_selected="Crea una nuova notice" name="create_new_notice" tool_tip="Crea una nuova notice"/>
- <button label="Aggiorna" label_selected="Aggiorna l&apos;elenco" name="refresh_notices" tool_tip="Aggiorna la lista delle notice"/>
+ <button label="Crea un nuovo avviso" label_selected="Crea una nuova notice" name="create_new_notice" tool_tip="Crea un nuovo avviso"/>
+ <button label="Aggiorna" label_selected="Aggiorna l&apos;elenco" name="refresh_notices" tool_tip="Aggiorna la lista degli avvisi"/>
<panel label="Crea una nuova notice" name="panel_create_new_notice">
<text name="lbl">
Crea una notice
@@ -40,16 +40,16 @@ Massimo 200 per gruppo al giorno
<text name="string">
Trascina e rilascia qui l&apos;oggetto da allegare:
</text>
- <button label="Rimuovi" label_selected="Rimuovi allegato" name="remove_attachment"/>
- <button label="Spedisci" label_selected="Spedisci" name="send_notice"/>
- <group_drop_target name="drop_target" tool_tip="Trascina un oggetto dall&apos;inventario nello spazio ALLEGA per spedirlo con la notice. Devi avere i permessi copy e transfer relativi all&apos;oggetto da allegare."/>
+ <button label="Rimuovi" label_selected="Rimuovi allegato" name="remove_attachment" tool_tip="Rimuovi allegato dal tuo avviso"/>
+ <button label="Invia" label_selected="Invia" name="send_notice"/>
+ <group_drop_target name="drop_target" tool_tip="Trascina un oggetto dall&apos;inventario ín questa casella per spedirlo con questo avviso. Devi avere i diritti per la copia e il trasferimento per poter allegare l&apos;oggetto."/>
</panel>
<panel label="Vedi le notice precedenti" name="panel_view_past_notice">
<text name="lbl">
Notice archiviate
</text>
<text name="lbl2">
- Per spedire una nuova notice, clicca il bottone +
+ Per spedire un nuovo avviso, clicca sul pulsante +
</text>
<text name="lbl3">
Oggetto:
@@ -57,6 +57,6 @@ Massimo 200 per gruppo al giorno
<text name="lbl4">
Messaggio:
</text>
- <button label="Apri allegato" label_selected="Apri l&apos;allegato" name="open_attachment"/>
+ <button label="Apri l&apos;allegato" label_selected="Apri l&apos;allegato" name="open_attachment"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_notify.xml b/indra/newview/skins/default/xui/it/panel_group_notify.xml
index de6b139793..91a41353a5 100644
--- a/indra/newview/skins/default/xui/it/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_notify.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="instant_message" name="panel_group_notify">
<panel label="header" name="header">
- <text name="title" value="Nome di chi spedisce / Nome del Gruppo"/>
+ <text name="title" value="Nome del mittente / Nome del gruppo"/>
</panel>
- <text name="attachment" value="Attachment"/>
- <button label="Ok" name="btn_ok"/>
+ <text name="attachment" value="Allegato"/>
+ <button label="OK" name="btn_ok"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml
index bc98fdacaf..ef6f85390a 100644
--- a/indra/newview/skins/default/xui/it/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Membri &amp; Ruoli" name="roles_tab">
<panel.string name="default_needs_apply_text">
- Ci sono modifiche non salvate nella scheda attuale
+ Ci sono modifiche non salvate
</panel.string>
<panel.string name="want_apply_text">
- Vuoi salvare queste modifiche?
+ Vuoi salvare le modifiche?
</panel.string>
<tab_container height="164" name="roles_tab_container">
<panel height="148" label="MEMBRI" name="members_sub_tab" tool_tip="Membri">
@@ -15,24 +15,25 @@ cliccando sui loro nomi.
</panel.string>
<filter_editor label="Filtra Membri" name="filter_input"/>
<name_list bottom_delta="-105" height="104" name="member_list">
- <name_list.columns label="Nome del Membro" name="name"/>
+ <name_list.columns label="Socio" name="name"/>
<name_list.columns label="Donazioni" name="donated"/>
- <name_list.columns label="Status" name="online"/>
+ <name_list.columns label="Stato" name="online"/>
</name_list>
<button label="Invita" name="member_invite" width="165"/>
<button label="Espelli" name="member_eject"/>
</panel>
<panel height="148" label="RUOLI" name="roles_sub_tab">
<panel.string name="help_text">
- I ruoli hanno un titolo con un elenco di abilità permesse che i membri possono eseguire.
- I membri possono avere uno o più ruoli. Un gruppo può avere fino a 10 ruoli, inclusi il ruolo base o &quot;Membro&quot; e
- il ruolo del Capogruppo.
+ I ruoli hanno un titolo con un elenco di abilità permesse
+che i membri possono eseguire. I membri possono avere
+uno o più ruoli. Un gruppo può avere fino a 10 ruoli,
+fra cui il ruolo base o &quot;Tutti&quot; e il ruolo del Proprietario, ovvero il capogruppo.
</panel.string>
<panel.string name="cant_delete_role">
- I Ruoli &apos;Everyone&apos; e &apos;Owners&apos; sono speciali e non possono essere cancellati.
+ I ruoli &apos;Tutti&apos; e &apos;Proprietari&apos; sono speciali e non possono essere eliminati.
</panel.string>
<panel.string name="power_folder_icon">
- Cartella Inventario chiusa
+ Inv_FolderClosed
</panel.string>
<filter_editor label="Filtra i ruoli" name="filter_input"/>
<scroll_list bottom_delta="-104" height="104" name="role_list">
@@ -43,7 +44,7 @@ cliccando sui loro nomi.
<button label="Crea nuovo ruolo" name="role_create"/>
<button label="Elimina ruolo" name="role_delete"/>
</panel>
- <panel height="148" label="ABILITA&apos;" name="actions_sub_tab" tool_tip="Puoi vedere la descrizione dell&apos;abilità e quali Ruoli o Membri possono eseguirla.">
+ <panel height="148" label="ABILITÀ" name="actions_sub_tab" tool_tip="Puoi vedere la descrizione dell&apos;abilità e quali ruoli o membri possono eseguirla.">
<panel.string name="help_text">
Le abilità permettono ai membri nei ruoli di fare cose specifiche
in questo gruppo. C&apos;è una vasta gamma di abilità.
@@ -54,22 +55,22 @@ in questo gruppo. C&apos;è una vasta gamma di abilità.
</tab_container>
<panel name="members_footer">
<text name="static">
- Membri assegnati
+ Ruoli assegnati
</text>
<text name="static2">
Abilità permesse
</text>
- <scroll_list name="member_allowed_actions" tool_tip="Per i dettagli di ogni abilità consentita vedi il pannello abilità."/>
+ <scroll_list name="member_allowed_actions" tool_tip="Per i dettagli di ogni abilità consentita vedi la scheda abilità."/>
</panel>
<panel name="roles_footer">
<text name="static">
- Nome del Ruolo
+ Nome del ruolo
</text>
<line_editor name="role_name">
Addetti
</line_editor>
<text name="static3">
- Titolo del Ruolo
+ Titolo del ruolo
</text>
<line_editor name="role_title">
(attendi)
@@ -83,11 +84,11 @@ in questo gruppo. C&apos;è una vasta gamma di abilità.
<text name="static4">
Ruoli assegnati
</text>
- <check_box label="Mostrare i membri" name="role_visible_in_list" tool_tip="Imposta nella tabella Generale per i membri con questo ruolo di poter essere visti dalle persone esterne a questo gruppo."/>
+ <check_box label="Visualizza membri" name="role_visible_in_list" tool_tip="Imposta nella scheda Generale se i membri con questo ruolo possono essere visti dai residenti esterni a questo gruppo."/>
<text name="static5" tool_tip="Una lista delle abilità che il ruolo ora selezionato può eseguire.">
Abilità permesse
</text>
- <scroll_list name="role_allowed_actions" tool_tip="Per i dettagli di ogni abilità consentita vedi il pannello abilità."/>
+ <scroll_list name="role_allowed_actions" tool_tip="Per i dettagli di ogni abilità consentita vedi la scheda abilità."/>
</panel>
<panel name="actions_footer">
<text name="static">
diff --git a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml b/indra/newview/skins/default/xui/it/panel_im_control_panel.xml
index f6c3fa9288..97ec0e11eb 100644
--- a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/it/panel_im_control_panel.xml
@@ -1,13 +1,29 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Sconosciuto"/>
- <button label="Profilo" name="view_profile_btn"/>
- <button label="Aggiungi Amico" name="add_friend_btn"/>
- <button label="Teleport" name="teleport_btn"/>
- <button label="Condividi" name="share_btn"/>
- <panel name="panel_call_buttons">
- <button label="Chiama" name="call_btn"/>
- <button label="Abbandona chiamata" name="end_call_btn"/>
- <button label="Controllo Voice" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="button_stack">
+ <layout_panel name="view_profile_btn_panel">
+ <button label="Profilo" name="view_profile_btn"/>
+ </layout_panel>
+ <layout_panel name="add_friend_btn_panel">
+ <button label="Aggiungi amico" name="add_friend_btn"/>
+ </layout_panel>
+ <layout_panel name="teleport_btn_panel">
+ <button label="Teleport" name="teleport_btn" tool_tip="Offri teleport a questa persona"/>
+ </layout_panel>
+ <layout_panel name="share_btn_panel">
+ <button label="Condividi" name="share_btn"/>
+ </layout_panel>
+ <layout_panel name="pay_btn_panel">
+ <button label="Paga" name="pay_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Chiama" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Abbandona chiamata" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Regolazione voce" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_landmark_info.xml b/indra/newview/skins/default/xui/it/panel_landmark_info.xml
index 5908a873cc..4af59605c1 100644
--- a/indra/newview/skins/default/xui/it/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/it/panel_landmark_info.xml
@@ -1,36 +1,37 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="landmark_info">
- <string name="title_create_landmark" value="Crea Landmark"/>
- <string name="title_edit_landmark" value="Modifica Landmark"/>
- <string name="title_landmark" value="Landmark"/>
- <string name="not_available" value="(N\A)"/>
+ <string name="title_create_landmark" value="Crea punto di riferimento"/>
+ <string name="title_edit_landmark" value="Modifica punto di riferimento"/>
+ <string name="title_landmark" value="Punto di riferimento"/>
+ <string name="not_available" value="(non pert.)"/>
<string name="unknown" value="(sconosciuto)"/>
<string name="public" value="(pubblico)"/>
<string name="server_update_text">
- Info sul luogo non disponibili senza l&apos;aggiornamento del server.
+ Informazioni sul luogo non disponibili senza l&apos;aggiornamento del server.
</string>
<string name="server_error_text">
- Info su questo luogo non disponibili ora, prova più tardi.
+ Informazioni su questo luogo non disponibili al momento, riprova più tardi.
</string>
<string name="server_forbidden_text">
- Info su questo luogo non disponibili a causa delle restrizioni di accesso. Controlla i tuoi permessi con il proprietario del terreno .
+ Informazioni su questo luogo non disponibili a causa delle limitazioni di accesso. Controlla i tuoi permessi con il proprietario del terreno.
</string>
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</string>
- <text name="title" value="Colloca Profilo"/>
+ <button name="back_btn" tool_tip="Indietro"/>
+ <text name="title" value="Profilo del posto"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
<text name="maturity_value" value="sconosciuto"/>
<panel name="landmark_info_panel">
<text name="owner_label" value="Proprietario:"/>
- <text name="creator_label" value="Creatore:"/>
+ <text name="creator_label" value="Ideatore:"/>
<text name="created_label" value="Creato:"/>
</panel>
<panel name="landmark_edit_panel">
<text name="title_label" value="Titolo:"/>
- <text name="notes_label" value="Mie note:"/>
- <text name="folder_label" value="Landmark del luogo:"/>
+ <text name="notes_label" value="Le mie note:"/>
+ <text name="folder_label" value="Ubicazione punto di riferimento:"/>
</panel>
</panel>
</scroll_container>
diff --git a/indra/newview/skins/default/xui/it/panel_landmarks.xml b/indra/newview/skins/default/xui/it/panel_landmarks.xml
index 0efeaac97d..74cd9e6fb1 100644
--- a/indra/newview/skins/default/xui/it/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/it/panel_landmarks.xml
@@ -2,13 +2,13 @@
<panel name="Landmarks">
<accordion name="landmarks_accordion">
<accordion_tab name="tab_favorites" title="Barra dei Preferiti"/>
- <accordion_tab name="tab_landmarks" title="Landmarks"/>
- <accordion_tab name="tab_inventory" title="Mio Inventario"/>
+ <accordion_tab name="tab_landmarks" title="I miei punti di riferimento"/>
+ <accordion_tab name="tab_inventory" title="Il mio inventario"/>
<accordion_tab name="tab_library" title="Libreria"/>
</accordion>
<panel name="bottom_panel">
<button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/>
- <button name="add_btn" tool_tip="Aggiungi nuovo landmark"/>
- <dnd_button name="trash_btn" tool_tip="Rimuovi landmark selezionato"/>
+ <button name="add_btn" tool_tip="Aggiungi un nuovo punto di riferimento"/>
+ <dnd_button name="trash_btn" tool_tip="Rimuovi il punto di riferimento selezionato"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml
index 7706a044fa..287e938d57 100644
--- a/indra/newview/skins/default/xui/it/panel_login.xml
+++ b/indra/newview/skins/default/xui/it/panel_login.xml
@@ -12,22 +12,33 @@
Nome:
</text>
<line_editor label="Nome" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/>
+ <text name="last_name_text">
+ Cognome:
+ </text>
<line_editor label="Cognome" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/>
- <check_box label="Ricordare" name="remember_check"/>
+ <text name="password_text">
+ Password:
+ </text>
+ <check_box label="Ricorda password" name="remember_check"/>
<text name="start_location_text">
- Iniziare presso:
+ Inizia da:
</text>
<combo_box name="start_location_combo">
+ <combo_box.item label="La mia ultima ubicazione" name="MyLastLocation"/>
<combo_box.item label="Casa mia" name="MyHome"/>
+ <combo_box.item label="&lt;Scrivi nome regione&gt;" name="Typeregionname"/>
</combo_box>
- <button label="Log In" name="connect_btn"/>
+ <button label="Accedi" name="connect_btn"/>
</layout_panel>
<layout_panel name="links">
<text name="create_new_account_text">
- Aderire
+ Iscriviti
+ </text>
+ <text name="forgot_password_text">
+ Hai dimenticato il nome o la password?
</text>
<text name="login_help">
- Aiuto quando log in?
+ Ti serve aiuto con la fase di accesso?
</text>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/it/panel_main_inventory.xml b/indra/newview/skins/default/xui/it/panel_main_inventory.xml
index edaab6e60c..878daf1e6b 100644
--- a/indra/newview/skins/default/xui/it/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/it/panel_main_inventory.xml
@@ -1,18 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Cose" name="main inventory panel">
- <panel.string name="Title">
- Cose
+ <panel.string name="ItemcountFetching">
+ Recupero di [ITEM_COUNT] oggetti... [FILTER]
</panel.string>
- <filter_editor label="Filtro" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="Tutti gli elementi" name="All Items"/>
- <inventory_panel label="Elementi recenti" name="Recent Items"/>
- </tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostra ulteriori opzioni"/>
- <button name="add_btn" tool_tip="Aggiungi nuovo elemento"/>
- <dnd_button name="trash_btn" tool_tip="Rimuovi l&apos;elemento selezionato"/>
- </panel>
+ <panel.string name="ItemcountCompleted">
+ [ITEM_COUNT] oggetti [FILTER]
+ </panel.string>
+ <text name="ItemcountText">
+ Oggetti:
+ </text>
<menu_bar name="Inventory Menu">
<menu label="File" name="File">
<menu_item_call label="Apri" name="Open"/>
@@ -22,43 +18,53 @@
<menu_item_call label="Animazione ([COST]L$)..." name="Upload Animation"/>
<menu_item_call label="In blocco ([COST]L$ per file)..." name="Bulk Upload"/>
</menu>
- <menu_item_call label="Nuova Finestra" name="New Window"/>
- <menu_item_call label="Mostra Filtri" name="Show Filters"/>
- <menu_item_call label="Cancella Filtri" name="Reset Current"/>
- <menu_item_call label="Chiudi tutte le Cartelle" name="Close All Folders"/>
- <menu_item_call label="Svuota Cestino" name="Empty Trash"/>
- <menu_item_call label="Svuota Oggetti Smarriti" name="Empty Lost And Found"/>
+ <menu_item_call label="Nuova finestra" name="New Window"/>
+ <menu_item_call label="Mostra filtri" name="Show Filters"/>
+ <menu_item_call label="Ripristina filtri" name="Reset Current"/>
+ <menu_item_call label="Chiudi tutte le cartelle" name="Close All Folders"/>
+ <menu_item_call label="Svuota cestino" name="Empty Trash"/>
+ <menu_item_call label="Svuota oggetti smarriti" name="Empty Lost And Found"/>
</menu>
<menu label="Crea" name="Create">
- <menu_item_call label="Nuova Cartella" name="New Folder"/>
- <menu_item_call label="Nuovo Script" name="New Script"/>
- <menu_item_call label="Nuova Notecard" name="New Note"/>
- <menu_item_call label="Nuova Gesture" name="New Gesture"/>
- <menu label="Nuovi Abiti" name="New Clothes">
- <menu_item_call label="Nuova Camicia" name="New Shirt"/>
- <menu_item_call label="Nuovi Pantaloni" name="New Pants"/>
- <menu_item_call label="Nuove Scarpe" name="New Shoes"/>
- <menu_item_call label="Nuove Calze" name="New Socks"/>
- <menu_item_call label="Nuova Giacca" name="New Jacket"/>
- <menu_item_call label="Nuova Gonna" name="New Skirt"/>
- <menu_item_call label="Nuovi Guanti" name="New Gloves"/>
- <menu_item_call label="Nuova Maglietta Intima" name="New Undershirt"/>
- <menu_item_call label="Nuovi Slip" name="New Underpants"/>
- <menu_item_call label="Nuovo Alfa (Trasparenza)" name="New Alpha"/>
- <menu_item_call label="Nuovo Tatuaggio" name="New Tattoo"/>
+ <menu_item_call label="Nuova cartella" name="New Folder"/>
+ <menu_item_call label="Nuovo script" name="New Script"/>
+ <menu_item_call label="Nuovo biglietto" name="New Note"/>
+ <menu_item_call label="Nuova gesture" name="New Gesture"/>
+ <menu label="Maglietta intima" name="New Clothes">
+ <menu_item_call label="Nuova camicia" name="New Shirt"/>
+ <menu_item_call label="Nuovi pantaloni" name="New Pants"/>
+ <menu_item_call label="Nuove scarpe" name="New Shoes"/>
+ <menu_item_call label="Nuove calze" name="New Socks"/>
+ <menu_item_call label="Nuova giacca" name="New Jacket"/>
+ <menu_item_call label="Nuova gonna" name="New Skirt"/>
+ <menu_item_call label="Nuovi guanti" name="New Gloves"/>
+ <menu_item_call label="Nuova maglietta intima" name="New Undershirt"/>
+ <menu_item_call label="Nuovi slip" name="New Underpants"/>
+ <menu_item_call label="Nuovo Alfa (trasparenza)" name="New Alpha"/>
+ <menu_item_call label="Nuovo tatuaggio" name="New Tattoo"/>
</menu>
- <menu label="Nuove Parti del Corpo" name="New Body Parts">
- <menu_item_call label="Nuova Shape" name="New Shape"/>
- <menu_item_call label="Nuova Pelle" name="New Skin"/>
- <menu_item_call label="Nuovi Capelli" name="New Hair"/>
- <menu_item_call label="Nuovi Occhi" name="New Eyes"/>
+ <menu label="Nuove parti del corpo" name="New Body Parts">
+ <menu_item_call label="Nuova figura corporea" name="New Shape"/>
+ <menu_item_call label="Nuova pelle" name="New Skin"/>
+ <menu_item_call label="Nuovi capelli" name="New Hair"/>
+ <menu_item_call label="Nuovi occhi" name="New Eyes"/>
</menu>
</menu>
<menu label="Ordina" name="Sort">
- <menu_item_check label="Per Nome" name="By Name"/>
- <menu_item_check label="Per Data" name="By Date"/>
- <menu_item_check label="Cartelle sempre per Nome" name="Folders Always By Name"/>
+ <menu_item_check label="In base al nome" name="By Name"/>
+ <menu_item_check label="In base alla data" name="By Date"/>
+ <menu_item_check label="Cartelle sempre in base al nome" name="Folders Always By Name"/>
<menu_item_check label="Cartelle di sistema all&apos;inizio" name="System Folders To Top"/>
</menu>
</menu_bar>
+ <filter_editor label="Filtro" name="inventory search editor"/>
+ <tab_container name="inventory filter tabs">
+ <inventory_panel label="Tutti gli elementi" name="All Items"/>
+ <inventory_panel label="Elementi recenti" name="Recent Items"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/>
+ <button name="add_btn" tool_tip="Aggiungi nuovo elemento"/>
+ <dnd_button name="trash_btn" tool_tip="Rimuovi l&apos;articolo selezionato"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_me.xml b/indra/newview/skins/default/xui/it/panel_me.xml
index 03678ecad5..66601aa165 100644
--- a/indra/newview/skins/default/xui/it/panel_me.xml
+++ b/indra/newview/skins/default/xui/it/panel_me.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Mio Profilo" name="panel_me">
+<panel label="Il mio profilo" name="panel_me">
<tab_container name="tabs">
- <panel label="PROFILO" name="panel_profile"/>
- <panel label="PREFERITI" name="panel_picks"/>
+ <panel label="IL MIO PROFILO" name="panel_profile"/>
+ <panel label="I MIEI PREFERITI" name="panel_picks"/>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_general.xml b/indra/newview/skins/default/xui/it/panel_media_settings_general.xml
index cb629e5cfb..5ed7b23679 100644
--- a/indra/newview/skins/default/xui/it/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_media_settings_general.xml
@@ -4,27 +4,27 @@
Home Page:
</text>
<text name="home_fails_whitelist_label">
- (Questa pagina non passa la lista bianca specifica)
+ (Questa pagina non supera la revisione o lista bianca specifica)
</text>
- <line_editor name="home_url" tool_tip="La home page per questa fonte media"/>
+ <line_editor name="home_url" tool_tip="La home page per questa fonte multimediale"/>
<text name="preview_label">
Anteprima
</text>
<text name="current_url_label">
Pagina attuale:
</text>
- <text name="current_url" tool_tip="La pagina attuale per questa fonte media" value=""/>
- <button label="Resetta" name="current_url_reset_btn"/>
- <check_box initial_value="false" label="Auto Loop" name="auto_loop"/>
- <check_box initial_value="false" label="Primo Click Interagisce" name="first_click_interact"/>
- <check_box initial_value="false" label="Auto Zoom" name="auto_zoom"/>
- <check_box initial_value="false" label="Auto Play Media" name="auto_play"/>
+ <text name="current_url" tool_tip="La pagina attuale per questa fonte multimediale" value=""/>
+ <button label="Reimposta" name="current_url_reset_btn"/>
+ <check_box initial_value="false" label="Ripetizione automatica" name="auto_loop"/>
+ <check_box initial_value="false" label="Interazione col primo clic" name="first_click_interact"/>
+ <check_box initial_value="false" label="Zoom automatico" name="auto_zoom"/>
+ <check_box initial_value="false" label="Riproduzione multimediale automatica" name="auto_play"/>
<text name="media_setting_note">
- Nota: I Residenti possono annullare questa impostazione
+ Nota: I residenti possono annullare questa impostazione
</text>
- <check_box initial_value="false" label="Auto Scale Media on Face of Object" name="auto_scale"/>
+ <check_box initial_value="false" label="Messa in scala automatica dell&apos;elemento multimediale sulla faccia dell&apos;oggetto" name="auto_scale"/>
<text name="size_label">
- Misura:
+ Dimensioni:
</text>
<text name="X_label">
X
diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml
index 551d86864d..53dac1299f 100644
--- a/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml
+++ b/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Personalizza" name="Media settings for controls">
<text name="controls_label">
- Controlli:
+ Regolazioni:
</text>
<combo_box name="controls">
<combo_item name="Standard">
@@ -11,10 +11,10 @@
Mini
</combo_item>
</combo_box>
- <check_box initial_value="false" label="Permetti Navigazione &amp; Interattività" name="perms_owner_interact"/>
+ <check_box initial_value="false" label="Permetti navigazione e interattività" name="perms_owner_interact"/>
<check_box initial_value="false" label="Mostra la barra di controllo" name="perms_owner_control"/>
- <check_box initial_value="false" label="Permetti Navigazione &amp; Interattività" name="perms_group_interact"/>
+ <check_box initial_value="false" label="Permetti navigazione e interattività" name="perms_group_interact"/>
<check_box initial_value="false" label="Mostra la barra di controllo" name="perms_group_control"/>
- <check_box initial_value="false" label="Permetti Navigazione &amp; Interattività" name="perms_anyone_interact"/>
+ <check_box initial_value="false" label="Permetti navigazione e interattività" name="perms_anyone_interact"/>
<check_box initial_value="false" label="Mostra la barra di controllo" name="perms_anyone_control"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_security.xml b/indra/newview/skins/default/xui/it/panel_media_settings_security.xml
index 0df0331198..785cd048a1 100644
--- a/indra/newview/skins/default/xui/it/panel_media_settings_security.xml
+++ b/indra/newview/skins/default/xui/it/panel_media_settings_security.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sicurezza" name="Media Settings Security">
- <check_box initial_value="false" label="Accesso permesso solo a URLs specificati (by prefix)" name="whitelist_enable"/>
+ <check_box initial_value="false" label="Permetti l&apos;accesso solo ai modelli di URL specificati" name="whitelist_enable"/>
<text name="home_url_fails_some_items_in_whitelist">
- Annota che le home page mancate sono segnate:
+ Le mancate aperture di home page sono segnalate:
</text>
<button label="Aggiungi" name="whitelist_add"/>
- <button label="Cancella" name="whitelist_del"/>
+ <button label="Elimina" name="whitelist_del"/>
<text name="home_url_fails_whitelist">
- Attenzione: la home page specificata nella Tabella General non ha passato questa lista bianca. E&apos; stata disattivata fino a quando non sarà aggiunta un entrata valid.
+ Avvertenza: la home page specificata nella scheda Generale non ha superato la lista bianca. Viene disabilitata fino a che non venga inserita una voce valida.
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_my_profile.xml b/indra/newview/skins/default/xui/it/panel_my_profile.xml
index 60faf4e7c5..08c050228f 100644
--- a/indra/newview/skins/default/xui/it/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_my_profile.xml
@@ -1,37 +1,35 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Profilo" name="panel_profile">
<string name="no_partner_text" value="Nessuno"/>
+ <string name="no_group_text" value="Nessuno"/>
<string name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <panel name="second_life_image_panel">
- <icon label="" name="2nd_life_edit_icon" tool_tip="Clicca il pulsante inferiore Modifica Profilo per cambiare immagine"/>
- </panel>
- <panel name="first_life_image_panel">
- <icon label="" name="real_world_edit_icon" tool_tip="Clicca il pulsante inferiore Modifica Profilo per cambiare immagine"/>
- <text name="title_rw_descr_text" value="Mondo Reale:"/>
- </panel>
- <text name="me_homepage_text">
- Homepage:
- </text>
- <text name="title_member_text" value="Membro dal:"/>
- <text name="title_acc_status_text" value="Stato dell&apos;account:"/>
- <text name="acc_status_text" value="Residente. Nessuna info di pagamento."/>
- <text name="title_partner_text" value="Partner:"/>
- <text name="title_groups_text" value="Gruppi:"/>
- </panel>
- </scroll_container>
- <panel name="profile_buttons_panel">
- <button label="Aggiungi amico" name="add_friend"/>
- <button label="IM" name="im"/>
- <button label="Chiama" name="call"/>
- <button label="Mappa" name="show_on_map_btn"/>
- <button label="Teleport" name="teleport"/>
- </panel>
- <panel name="profile_me_buttons_panel">
- <button label="Modifica Profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/>
- <button label="Modifica aspetto" name="edit_appearance_btn" tool_tip="Crea/modifica la tua apparenza: aspetto fisico, vestiti, etc."/>
- </panel>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <panel name="second_life_image_panel">
+ <icon label="" name="2nd_life_edit_icon" tool_tip="Clicca sul pulsante Modifica profilo per cambiare l&apos;immagine"/>
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <icon label="" name="real_world_edit_icon" tool_tip="Clicca sul pulsante Modifica profilo per cambiare l&apos;immagine"/>
+ <text name="title_rw_descr_text" value="Mondo reale:"/>
+ </panel>
+ <text name="title_member_text" value="Residente dal:"/>
+ <text name="title_acc_status_text" value="Stato account:"/>
+ <text name="title_partner_text" value="Partner:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(recupero)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Gruppi:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Modifica profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/>
+ <button label="Modifica aspetto fisico" name="edit_appearance_btn" tool_tip="Crea/modifica il tuo aspetto: parti del corpo, abiti ecc."/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_navigation_bar.xml b/indra/newview/skins/default/xui/it/panel_navigation_bar.xml
index 2e057c2983..8e72167759 100644
--- a/indra/newview/skins/default/xui/it/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/it/panel_navigation_bar.xml
@@ -1,15 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="navigation_bar">
<panel name="navigation_panel">
- <button name="back_btn" tool_tip="Ritorna al luogo precedente"/>
- <button name="forward_btn" tool_tip="Vai ad un luogo"/>
- <button name="home_btn" tool_tip="Teleport a casa mia"/>
- <location_input label="Luogo" name="location_combo"/>
+ <pull_button name="back_btn" tool_tip="Torna al luogo precedente"/>
+ <pull_button name="forward_btn" tool_tip="Procedi un luogo in avanti"/>
+ <button name="home_btn" tool_tip="Teleport a casa"/>
+ <location_input label="Posizione" name="location_combo"/>
<search_combo_box label="Cerca" name="search_combo_box" tool_tip="Cerca">
<combo_editor label="Cerca [SECOND_LIFE]" name="search_combo_editor"/>
</search_combo_box>
</panel>
- <favorites_bar name="favorite">
- <chevron_button name="&gt;&gt;" tool_tip="Mostra più dei miei Preferiti"/>
+ <favorites_bar name="favorite" tool_tip="Trascina qui i punti di riferimento per un accesso rapido ai tuoi posti preferiti in Second Life.">
+ <label name="favorites_bar_label" tool_tip="Trascina qui i punti di riferimento per un accesso rapido ai tuoi posti preferiti in Second Life.">
+ Barra dei Preferiti
+ </label>
+ <chevron_button name="&gt;&gt;" tool_tip="Mostra altri Preferiti"/>
</favorites_bar>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml
index 0361eb49ed..6317d3192e 100644
--- a/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml
@@ -6,6 +6,6 @@
<string name="max_width">
320
</string>
- <line_editor label="Clicca qui per la chat." name="chat_box" tool_tip="Premi Invio per dire, Ctrl+Invio per gridare"/>
- <button name="show_nearby_chat" tool_tip="Mostra/Nasconde la chat log nei dintorni"/>
+ <line_editor label="Clicca qui per la chat." name="chat_box" tool_tip="Premi Invio per parlare, Ctrl+Invio per gridare"/>
+ <button name="show_nearby_chat" tool_tip="Mostra/Nasconde il registro della chat nei dintorni"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_nearby_media.xml b/indra/newview/skins/default/xui/it/panel_nearby_media.xml
new file mode 100644
index 0000000000..5343ecae13
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_nearby_media.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="nearby_media">
+ <string name="empty_item_text">
+ &lt;vuoto&gt;
+ </string>
+ <string name="parcel_media_name">
+ Streaming media del lotto
+ </string>
+ <string name="parcel_audio_name">
+ Streaming audio del lotto
+ </string>
+ <string name="playing_suffix">
+ (riproduzione)
+ </string>
+ <panel name="minimized_controls">
+ <button label="Interrompi tutto" name="all_nearby_media_disable_btn" tool_tip="Spegni tutti i media nei dintorni"/>
+ <button label="Accendi tutto" name="all_nearby_media_enable_btn" tool_tip="Accendi tutti i media nei dintorni"/>
+ <button name="open_prefs_btn" tool_tip="Accedi alle preferenze del media"/>
+ <button label="Più &gt;&gt;" label_selected="Meno &lt;&lt;" name="more_less_btn" tool_tip="Opzioni avanzate"/>
+ </panel>
+ <panel name="nearby_media_panel">
+ <text name="nearby_media">
+ Multimedia vicini
+ </text>
+ <text name="show">
+ Mostra:
+ </text>
+ <combo_box name="show_combo">
+ <combo_box.item label="Tutto" name="All"/>
+ <combo_box.item label="In questo lotto" name="WithinParcel"/>
+ <combo_box.item label="Fuori da questo lotto" name="OutsideParcel"/>
+ <combo_box.item label="su altri avatar" name="OnOthers"/>
+ </combo_box>
+ <scroll_list name="media_list">
+ <scroll_list.columns label="Dintorni" name="media_proximity"/>
+ <scroll_list.columns label="Visibile" name="media_visibility"/>
+ <scroll_list.columns label="Classe" name="media_class"/>
+ <scroll_list.columns label="Nome" name="media_name"/>
+ <scroll_list.columns label="Debug" name="media_debug"/>
+ </scroll_list>
+ <panel name="media_controls_panel">
+ <layout_stack name="media_controls">
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Interrompi supporto selezionato"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Riproduci media selezionato"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Pausa media selezionato"/>
+ </layout_panel>
+ <layout_panel name="volume_slider_ctrl">
+ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume audio per il media selezionato"/>
+ </layout_panel>
+ <layout_panel name="mute">
+ <button name="mute_btn" tool_tip="Disattiva audio del media selezionato"/>
+ </layout_panel>
+ <layout_panel name="zoom">
+ <button name="zoom_btn" tool_tip="Zoom nel media selezionato"/>
+ </layout_panel>
+ <layout_panel name="unzoom">
+ <button name="unzoom_btn" tool_tip="Zoom indietro dal media selezionato"/>
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_notes.xml b/indra/newview/skins/default/xui/it/panel_notes.xml
index ff843c1684..9ce6b47a32 100644
--- a/indra/newview/skins/default/xui/it/panel_notes.xml
+++ b/indra/newview/skins/default/xui/it/panel_notes.xml
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Note &amp; Privacy" name="panel_notes">
+<panel label="Note e Privacy" name="panel_notes">
<layout_stack name="layout">
<panel name="notes_stack">
<scroll_container name="profile_scroll">
<panel name="profile_scroll_panel">
<text name="status_message" value="Le mie note private:"/>
- <text name="status_message2" value="Permetti a questa persona di:"/>
- <check_box label="Vedermi On-line" name="status_check"/>
- <check_box label="Vedermi sull mappa" name="map_check"/>
- <check_box label="Modificare, cancellare o prendere i miei oggetti" name="objects_check"/>
+ <text name="status_message2" value="Consenti a questa persona di:"/>
+ <check_box label="Vedere se sono online" name="status_check"/>
+ <check_box label="Vedermi sulla mappa" name="map_check"/>
+ <check_box label="Modificare, eliminare o prendere i miei oggetti" name="objects_check"/>
</panel>
</scroll_container>
</panel>
<panel name="notes_buttons_panel">
- <button label="Aggiungi" name="add_friend" tool_tip="Offrire amicizia ad un residente"/>
- <button label="IM" name="im" tool_tip="Apri una sessione di messaggio istantaneo"/>
+ <button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/>
+ <button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/>
<button label="Chiama" name="call" tool_tip="Chiama questo residente"/>
<button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/>
<button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
diff --git a/indra/newview/skins/default/xui/it/panel_online_status.xml b/indra/newview/skins/default/xui/it/panel_online_status.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_online_status.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/it/panel_online_status_toast.xml b/indra/newview/skins/default/xui/it/panel_online_status_toast.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_online_status_toast.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
index 9332a3ef36..58055d91c7 100644
--- a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
@@ -1,7 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="Outfits">
- <accordion name="outfits_accordion">
- <accordion_tab name="tab_cof" title="Vestiario attuale"/>
- <accordion_tab name="tab_outfits" title="Mio Vestiario"/>
- </accordion>
+<panel label="Cose" name="Outfits">
+ <tab_container name="appearance_tabs">
+ <inventory_panel label="I MIEI ABITI" name="outfitslist_tab"/>
+ <inventory_panel label="INDOSSA" name="cof_tab"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/>
+ <dnd_button name="trash_btn" tool_tip="Rimuovi l&apos;articolo selezionato"/>
+ <button label="Salva vestiario" name="make_outfit_btn" tool_tip="Salva questo aspetto fisico come un vestito"/>
+ <button label="Indossa" name="wear_btn" tool_tip="Indossa il vestiario selezionato"/>
+ <button label="M" name="look_edit_btn"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml
index c6be942312..9e1a45b129 100644
--- a/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_gear_default">
- <menu_item_call label="Sostituisci il Vestiario attuale" name="wear"/>
- <menu_item_call label="Aggiungi al Vestiario attuale" name="add"/>
- <menu_item_call label="Rimuovi dal Vestiario attuale" name="remove"/>
- <menu_item_call label="Rinomina" name="rename"/>
- <menu_item_call label="Rimuovi" name="remove_link"/>
- <menu_item_call label="Cancella" name="delete"/>
+ <menu_item_call label="Sostituisci vestiario attuale" name="wear"/>
+ <menu_item_call label="Aggiungi al vestiario attuale" name="add"/>
+ <menu_item_call label="Rimuovi dal vestiario attuale" name="remove"/>
+ <menu_item_call label="Modifica nome" name="rename"/>
+ <menu_item_call label="Rimuovi link" name="remove_link"/>
+ <menu_item_call label="Elimina vestito" name="delete"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/panel_people.xml b/indra/newview/skins/default/xui/it/panel_people.xml
index b20db0d565..acbc2cf326 100644
--- a/indra/newview/skins/default/xui/it/panel_people.xml
+++ b/indra/newview/skins/default/xui/it/panel_people.xml
@@ -1,33 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Side tray panel -->
-<panel label="Persona" name="people_panel">
+<panel label="Persone" name="people_panel">
<string name="no_people" value="Nessuna persona"/>
<string name="no_one_near" value="Nessuno vicino"/>
<string name="no_friends_online" value="Nessun amico online"/>
<string name="no_friends" value="Nessun amico"/>
- <string name="no_groups" value="Nessun gruppo"/>
- <string name="people_filter_label" value="Filtro Persone"/>
- <string name="groups_filter_label" value="Filtro Gruppi"/>
+ <string name="people_filter_label" value="Filtro persone"/>
+ <string name="groups_filter_label" value="Filtro gruppi"/>
+ <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Try finding the group in search?]"/>
+ <string name="no_groups_msg" value="[secondlife:///app/search/groups Try searching for some groups to join.]"/>
<filter_editor label="Filtro" name="filter_input"/>
<tab_container name="tabs">
<panel label="NELLE VICINANZE" name="nearby_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="nearby_view_sort_btn" tool_tip="Opzioni"/>
- <button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista di amici"/>
+ <button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista degli amici"/>
</panel>
</panel>
- <panel label="AMICI" name="friends_panel">
+ <panel label="I MIEI AMICI" name="friends_panel">
<accordion name="friends_accordion">
<accordion_tab name="tab_online" title="Online"/>
- <accordion_tab name="tab_all" title="Tutti"/>
+ <accordion_tab name="tab_all" title="Tutto"/>
</accordion>
<panel label="bottom_panel" name="bottom_panel">
<button name="friends_viewsort_btn" tool_tip="Opzioni"/>
- <button name="add_btn" tool_tip="Offri amicizia ad un residente"/>
- <button name="del_btn" tool_tip="Rimuovi la persona selezionata dalla tua lista di amici"/>
+ <button name="add_btn" tool_tip="Offri amicizia a un residente"/>
+ <button name="del_btn" tool_tip="Rimuovi la persona selezionata dalla lista degli amici"/>
</panel>
+ <text name="no_friends_msg">
+ Per aggiungere amici, prova [secondlife:///app/search/people global search] oppure fai clic col pulsante destro del mouse su un residente per aggiungerlo come amico.
+Se stai cercando qualcuno da frequentare, [secondlife:///app/worldmap try the Map].
+ </text>
</panel>
- <panel label="GRUPPI" name="groups_panel">
+ <panel label="I MIEI GRUPPI" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="groups_viewsort_btn" tool_tip="Opzioni"/>
<button name="plus_btn" tool_tip="Aderisci al gruppo/Crea nuovo gruppo"/>
@@ -37,17 +42,18 @@
<panel label="RECENTE" name="recent_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="recent_viewsort_btn" tool_tip="Opzioni"/>
- <button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista di amici"/>
+ <button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista degli amici"/>
</panel>
</panel>
</tab_container>
<panel name="button_bar">
- <button label="Profilo" name="view_profile_btn" tool_tip="Mostra foto, gruppi, e info di altri residenti"/>
- <button label="IM" name="im_btn" tool_tip="Apri sessione instant message"/>
+ <button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>
+ <button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>
<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>
<button label="Condividi" name="share_btn"/>
<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>
- <button label="Profilo del Gruppo" name="group_info_btn" tool_tip="Mostra info del gruppo"/>
+ <button label="Profilo del gruppo" name="group_info_btn" tool_tip="Mostra informazioni gruppo"/>
<button label="Chat di gruppo" name="chat_btn" tool_tip="Apri sessione chat"/>
+ <button label="Chiamata al gruppo" name="group_call_btn" tool_tip="Chiama questo gruppo"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_pick_info.xml b/indra/newview/skins/default/xui/it/panel_pick_info.xml
index 4771457825..7c059b443d 100644
--- a/indra/newview/skins/default/xui/it/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/it/panel_pick_info.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_pick_info">
- <text name="title" value="Scegli Info ????"/>
+ <text name="title" value="Scegli Info"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<text name="pick_name" value="[nome]"/>
- <text name="pick_location" value="[Caricando...]"/>
+ <text name="pick_location" value="[caricamento...]"/>
<text name="pick_desc" value="[descrizione]"/>
</panel>
</scroll_container>
diff --git a/indra/newview/skins/default/xui/it/panel_picks.xml b/indra/newview/skins/default/xui/it/panel_picks.xml
index bcc433708d..823e0fcd03 100644
--- a/indra/newview/skins/default/xui/it/panel_picks.xml
+++ b/indra/newview/skins/default/xui/it/panel_picks.xml
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Foto" name="panel_picks">
- <string name="no_picks" value="Nessuna Foto"/>
- <string name="no_classifieds" value="Nessun Annuncio"/>
+<panel label="Preferiti" name="panel_picks">
+ <string name="no_picks" value="Nessun luogo preferito"/>
+ <string name="no_classifieds" value="Nessun annuncio"/>
<text name="empty_picks_panel_text">
Nessuna foto/annuncio qui
</text>
<accordion name="accordion">
- <accordion_tab name="tab_picks" title="Foto"/>
- <accordion_tab name="tab_classifieds" title="Annunci"/>
+ <accordion_tab name="tab_picks" title="Preferiti"/>
+ <accordion_tab name="tab_classifieds" title="Annunci pubblicitari"/>
</accordion>
<panel label="bottom_panel" name="edit_panel">
- <button name="new_btn" tool_tip="Crea una nuova foto o annuncio in questo luogo"/>
+ <button name="new_btn" tool_tip="Crea un nuovo luogo preferito o annuncio in questo luogo"/>
</panel>
<panel name="buttons_cucks">
- <button label="Info" name="info_btn" tool_tip="Mostra info sulla foto"/>
- <button label="Teleport" name="teleport_btn" tool_tip="Teleport all&apos;area corrispondente"/>
- <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra l&apos;area corrispondente nella Mappa del Mondo"/>
+ <button label="Informazioni" name="info_btn" tool_tip="Mostra informazioni sul luogo preferito"/>
+ <button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona corrispondente"/>
+ <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra la zona corrispondente nella mappa del Mondo"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_place_profile.xml b/indra/newview/skins/default/xui/it/panel_place_profile.xml
index 70e1577199..9a38909d47 100644
--- a/indra/newview/skins/default/xui/it/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_place_profile.xml
@@ -1,99 +1,107 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="place_profile">
- <string name="on" value="On"/>
- <string name="off" value="Off"/>
+ <string name="on" value="Attivo"/>
+ <string name="off" value="Disattivato"/>
<string name="anyone" value="Chiunque"/>
<string name="available" value="disponibile"/>
<string name="allocated" value="assegnato"/>
- <string name="title_place" value="Profilo del luogo"/>
- <string name="title_teleport_history" value="Cronologia dei Teleport"/>
- <string name="not_available" value="(N\D)"/>
+ <string name="title_place" value="Profilo del posto"/>
+ <string name="title_teleport_history" value="Cronologia Teleport"/>
+ <string name="not_available" value="(non pert.)"/>
<string name="unknown" value="(sconosciuto)"/>
- <string name="public" value="(publico)"/>
+ <string name="public" value="(pubblico)"/>
<string name="none_text" value="(nessuno)"/>
- <string name="sale_pending_text" value="(Vendita in attesa di)"/>
- <string name="group_owned_text" value="(Gruppo posseduto)"/>
+ <string name="sale_pending_text" value="(In corso di vendita)"/>
+ <string name="group_owned_text" value="(Di proprietà di un gruppo)"/>
<string name="price_text" value="L$"/>
<string name="area_text" value="m²"/>
- <string name="all_residents_text" value="Tutti i Residenti"/>
+ <string name="all_residents_text" value="Tutti i residenti"/>
<string name="group_text" value="Gruppo"/>
<string name="can_resell">
- La terra acquistata in questa regione può essere rivenduta.
+ Il terreno acquistato in questa regione può essere rivenduto.
</string>
<string name="can_not_resell">
- La terra acquistata in questa regione non può essere rivenduta.
+ Il terreno acquistato in questa regione non può essere rivenduto.
</string>
<string name="can_change">
- La terra acquistata in questa regione può essere unita o suddivisa.
+ Il terreno acquistato in questa regione può essere unito o suddiviso.
</string>
<string name="can_not_change">
- La terra acquistata in questa regione non può essere unita o suddivisa.
+ Il terreno acquistato in questa regione non può essere unito o suddiviso.
</string>
<string name="server_update_text">
- Informazioni su questo luogo non disponibili senza l&apos;aggiornamento del server.
+ Informazioni sul luogo non disponibili senza l&apos;aggiornamento del server.
</string>
<string name="server_error_text">
- Informazioni su questo luogo non sono disponibili ora, per favore riprova più tardi.
+ Informazioni su questo luogo non disponibili al momento, riprova più tardi.
</string>
<string name="server_forbidden_text">
- Informazioni su questo luogo non sono disponibili a cause delle restrizioni sull&apos;accesso. Per favore verifica i tuoi permessi con il proprietario del parcel.
+ Informazioni su questo luogo non disponibili a causa delle limitazioni di accesso. Controlla i tuoi permessi con il proprietario del terreno.
</string>
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</string>
+ <button name="back_btn" tool_tip="Indietro"/>
<text name="title" value="Profilo del luogo"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
<text name="owner_label" value="Proprietario:"/>
<text name="maturity_value" value="sconosciuto"/>
<accordion name="advanced_info_accordion">
- <accordion_tab name="parcel_characteristics_tab" title="Parcel">
- <panel>
- <text name="rating_label" value="Valutazione:"/>
+ <accordion_tab name="parcel_characteristics_tab" title="Lotto">
+ <panel name="parcel_characteristics_panel">
+ <text name="rating_label" value="Categoria:"/>
<text name="rating_value" value="sconosciuto"/>
- <text name="voice_label" value="Voice:"/>
- <text name="voice_value" value="On"/>
+ <text name="voice_label" value="Voce:"/>
+ <text name="voice_value" value="Attivo"/>
<text name="fly_label" value="Vola:"/>
- <text name="fly_value" value="On"/>
+ <text name="fly_value" value="Attivo"/>
<text name="push_label" value="Spingi:"/>
- <text name="push_value" value="Off"/>
+ <text name="push_value" value="Disattivato"/>
<text name="build_label" value="Costruisci:"/>
- <text name="build_value" value="On"/>
- <text name="scripts_label" value="Scripts:"/>
- <text name="scripts_value" value="On"/>
- <text name="damage_label" value="Danno:"/>
- <text name="damage_value" value="Off"/>
- <button label="Info sul terreno" name="about_land_btn"/>
+ <text name="build_value" value="Attivo"/>
+ <text name="scripts_label" value="Script:"/>
+ <text name="scripts_value" value="Attivo"/>
+ <text name="damage_label" value="Danni:"/>
+ <text name="damage_value" value="Disattivato"/>
+ <button label="Informazioni sui terreni" name="about_land_btn"/>
</panel>
</accordion_tab>
<accordion_tab name="region_information_tab" title="Regione">
- <panel>
+ <panel name="region_information_panel">
<text name="region_name_label" value="Regione:"/>
- <text name="region_type_label" value="Scrivi:"/>
- <text name="region_rating_label" value="Valutazione:"/>
+ <text name="region_name" value="Mooseland"/>
+ <text name="region_type_label" value="Tipo:"/>
+ <text name="region_type" value="Moose"/>
+ <text name="region_rating_label" value="Categoria:"/>
+ <text name="region_rating" value="Adulti"/>
<text name="region_owner_label" value="Proprietario:"/>
+ <text name="region_owner" value="moose Van Moose"/>
<text name="region_group_label" value="Gruppo:"/>
- <button label="Regione/Proprietà immobiliare" name="region_info_btn"/>
+ <text name="region_group">
+ The Mighty Moose of mooseville soundvillemoose
+ </text>
+ <button label="Regione/proprietà immobiliare" name="region_info_btn"/>
</panel>
</accordion_tab>
<accordion_tab name="estate_information_tab" title="Proprietà immobiliare">
- <panel>
+ <panel name="estate_information_panel">
<text name="estate_name_label" value="Proprietà immobiliare:"/>
- <text name="estate_rating_label" value="Valutazione:"/>
- <text name="estate_owner_label" value="Proprietà:"/>
+ <text name="estate_rating_label" value="Categoria:"/>
+ <text name="estate_owner_label" value="Proprietario:"/>
<text name="covenant_label" value="Regolamento:"/>
</panel>
</accordion_tab>
<accordion_tab name="sales_tab" title="In vendita">
- <panel>
+ <panel name="sales_panel">
<text name="sales_price_label" value="Prezzo:"/>
- <text name="area_label" value="Area:"/>
+ <text name="area_label" value="Zona:"/>
<text name="traffic_label" value="Traffico:"/>
<text name="primitives_label" value="Primitive:"/>
- <text name="parcel_scripts_label" value="Scripts:"/>
- <text name="terraform_limits_label" value="Limiti per Terraform:"/>
+ <text name="parcel_scripts_label" value="Script:"/>
+ <text name="terraform_limits_label" value="Limiti terraform:"/>
<text name="subdivide_label" value="Suddividi/Unisci abilità:"/>
- <text name="resale_label" value="Rivendi abilità:"/>
+ <text name="resale_label" value="Abilità rivendita:"/>
<text name="sale_to_label" value="In vendita a:"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml
index 8e50a8b9d9..bdb852ba62 100644
--- a/indra/newview/skins/default/xui/it/panel_places.xml
+++ b/indra/newview/skins/default/xui/it/panel_places.xml
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Luoghi" name="places panel">
- <string name="landmarks_tab_title" value="MIEI LANDMARKS"/>
- <string name="teleport_history_tab_title" value="TELEPORT PRECEDENTI"/>
- <filter_editor label="Filtro Luoghi" name="Filter"/>
+ <string name="landmarks_tab_title" value="I MIEI PUNTI DI RIFERIMENTO"/>
+ <string name="teleport_history_tab_title" value="CRONOLOGIA TELEPORT"/>
+ <filter_editor label="Filtra i miei luoghi" name="Filter"/>
<panel name="button_panel">
- <button label="Teleport" name="teleport_btn"/>
+ <button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/>
<button label="Mappa" name="map_btn"/>
- <button label="Modifica" name="edit_btn"/>
- <button label="Chiudi" name="close_btn"/>
- <button label="Cancella" name="cancel_btn"/>
+ <button label="Modifica" name="edit_btn" tool_tip="Modifica le informazioni del punto di riferimento"/>
+ <button label="â–¼" name="overflow_btn" tool_tip="Mostra opzioni addizionali"/>
<button label="Salva" name="save_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+ <button label="Chiudi" name="close_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
index 13ffabbebf..c24d3f656a 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
@@ -1,48 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
-<panel name="advanced">
- <panel.string name="resolution_format">
- [RES_X] x [RES_Y]
- </panel.string>
+<panel label="Avanzata" name="advanced">
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
- <check_box label="Chat a Bolle" name="bubble_text_chat"/>
- <color_swatch name="background" tool_tip="Scegli il colore delle vignette della Chat"/>
- <slider label="Opacità" name="bubble_chat_opacity"/>
- <text name="AspectRatioLabel1" tool_tip="larghezza/altezza">
- Rapporto di visualizzazione
- </text>
- <combo_box name="aspect_ratio" tool_tip="larghezza/altezza">
- <combo_box.item label="4:3 (Monitor Standard)" name="item1"/>
- <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
- <combo_box.item label="8:5 (Widescreen)" name="item3"/>
- <combo_box.item label="16:9 (Widescreen)" name="item4"/>
- </combo_box>
- <check_box label="Rilevamento automatico" name="aspect_auto_detect"/>
- <text name="heading1">
- Camera:
- </text>
- <slider label="Angolazione della visuale" name="camera_fov"/>
+ <panel.string name="middle_mouse">
+ Pulsante centrale del mouse
+ </panel.string>
+ <slider label="Angolo di visuale" name="camera_fov"/>
<slider label="Distanza" name="camera_offset_scale"/>
<text name="heading2">
- Posizionamento Automatico per:
- </text>
- <check_box label="Costruire/Modificare" name="edit_camera_movement" tool_tip="Utilizza il posizionamento automatico della camera entrando e uscendo dalla modalità modifica"/>
- <check_box label="Aspetto Fisico" name="appearance_camera_movement" tool_tip="Utilizza il posizionamento automatico della camera in modalità modifica"/>
- <text name="heading3">
- Avatar:
+ Posizione automatica per:
</text>
+ <check_box label="Costruire/Modificare" name="edit_camera_movement" tool_tip="Utilizza il posizionamento automatico della fotocamera entrando o uscendo dalla modalità modifica"/>
+ <check_box label="Aspetto fisico" name="appearance_camera_movement" tool_tip="Utilizza il posizionamento automatico della camera in modalità modifica"/>
<check_box label="Mostra in modalità Mouselook" name="first_person_avatar_visible"/>
- <check_box label="Cammino sempre con le frecce di movimento" name="arrow_keys_move_avatar_check"/>
- <check_box label="Doppio Click-Tieni Premuto per correre" name="tap_tap_hold_to_run"/>
- <check_box label="Consente il movimento delle labbra dell&apos;Avatar quando parla" name="enable_lip_sync"/>
- <check_box label="Mostra errori degli script" name="show_script_errors"/>
+ <check_box label="Le frecce di direzione mi fanno sempre spostare" name="arrow_keys_move_avatar_check"/>
+ <check_box label="Doppio click e tieni premuto per correre" name="tap_tap_hold_to_run"/>
+ <check_box label="Consente il movimento delle labbra dell&apos;avatar quando parla" name="enable_lip_sync"/>
+ <check_box label="Chat a bolla" name="bubble_text_chat"/>
+ <slider label="Opacità" name="bubble_chat_opacity"/>
+ <color_swatch name="background" tool_tip="Scegli il colore delle vignette della chat"/>
+ <check_box label="Mostra errori dello script in:" name="show_script_errors"/>
<radio_group name="show_location">
- <radio_item label="In chat" name="0"/>
- <radio_item label="In una finestra" name="1"/>
+ <radio_item label="Chat nei dintorni" name="0"/>
+ <radio_item label="Finestra separata" name="1"/>
</radio_group>
- <check_box label="Modalità del microfono &quot;interruttore ON/OFF&quot; quando premo l&apos;interruttore PARLA:" name="push_to_talk_toggle_check" tool_tip="In modalità &quot;interruttore ON/OFF&quot; premi il tasto per attivare o disattivare il microfono. Quando non usi questa modalità, il microfono è attivo solo se tieni premuto il tasto."/>
- <line_editor label="Premi il pulsante per parlare" name="modifier_combo"/>
- <button label="Imposta" name="set_voice_hotkey_button"/>
- <button label="Pulsante centrale del Mouse" name="set_voice_middlemouse_button"/>
+ <check_box label="Attiva/disattiva la funzione parla quando premo:" name="push_to_talk_toggle_check" tool_tip="In modalità &quot;interruttore ON/OFF&quot; premi il tasto una volta per attivare o disattivare il microfono. Quando non usi questa modalità, il microfono è attivo solo se tieni premuto il tasto di comando."/>
+ <line_editor label="Pulsante di comando della funzione Premi per parlare" name="modifier_combo"/>
+ <button label="Imposta tasto" name="set_voice_hotkey_button"/>
+ <button label="Pulsante centrale del mouse" name="set_voice_middlemouse_button" tool_tip="Reimposta sul pulsante centrale del mouse"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
index 02da9de4a4..fd1fd57761 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Pop-up" name="popups" title="Pop-up">
<text name="tell_me_label">
- Dimmi:
+ Avvisami:
</text>
<check_box label="Quando spendo o ottengo L$" name="notify_money_change_checkbox"/>
- <check_box label="Quando i miei amici entrano o escono da SL" name="friends_online_notify_checkbox"/>
+ <check_box label="Quando i miei amici entrano o escono da Second Life" name="friends_online_notify_checkbox"/>
<text name="show_label">
- Mostra sempre questi allarmi:
+ Mostra sempre:
</text>
<text name="dont_show_label">
- Non mostrare mai questi allarmi:
+ Non mostrare mai:
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
index 9c064c2716..28df9d2e43 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Text Chat" name="chat">
+ <text name="font_size">
+ Dimensioni caratteri:
+ </text>
<radio_group name="chat_font_size">
- <radio_item label="Piccolo" name="radio"/>
- <radio_item label="Medio" name="radio2"/>
- <radio_item label="Grande" name="radio3"/>
+ <radio_item label="Piccola" name="radio" value="0"/>
+ <radio_item label="Media" name="radio2" value="1"/>
+ <radio_item label="Grande" name="radio3" value="2"/>
</radio_group>
+ <text name="font_colors">
+ Colori caratteri:
+ </text>
<color_swatch label="Tuo" name="user"/>
<text name="text_box1">
Io
@@ -38,9 +44,15 @@
URLs
</text>
<check_box initial_value="true" label="Simula la battitura tasti quando scrivi" name="play_typing_animation"/>
- <check_box label="Spediscimi nella email gli IM quando sono OFF-LINE" name="send_im_to_email"/>
- <radio_group name="chat_window" tool_tip="Mostra i tuoi Instant Messages in finestre separate, o in una finestra con diverse tabelle (Requires restart)">
- <radio_item label="Finestre multiple" name="radio"/>
- <radio_item label="Una finestra" name="radio2"/>
+ <check_box label="Quando sono OFF-LINE, spediscimi gli IM in una e-mail" name="send_im_to_email"/>
+ <text name="show_ims_in_label">
+ Mostra gli IM in:
+ </text>
+ <text name="requires_restart_label">
+ (richiede il riavvio)
+ </text>
+ <radio_group name="chat_window" tool_tip="Mostra i tuoi messaggi istantanei in diverse finestre, o in una finestra con più schede (richiede il riavvio)">
+ <radio_item label="Finestre separate" name="radio" value="0"/>
+ <radio_item label="Schede" name="radio2" value="1"/>
</radio_group>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
index 80b152752b..6bf857366b 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
@@ -4,7 +4,7 @@
Lingua:
</text>
<combo_box name="language_combobox">
- <combo_box.item label="System default" name="System Default Language"/>
+ <combo_box.item label="Default di sistema" name="System Default Language"/>
<combo_box.item label="English" name="English"/>
<combo_box.item label="Dansk (Danese) - Beta" name="Danish"/>
<combo_box.item label="Deutsch (Tedesco) - Beta" name="Deutsch(German)"/>
@@ -17,7 +17,7 @@
<combo_box.item label="日本語 (Giapponese) - Beta" name="(Japanese)"/>
</combo_box>
<text name="language_textbox2">
- (Richiede restart)
+ (Richiede il riavvio)
</text>
<text name="maturity_desired_prompt">
Voglio accedere al contenuto di tipo:
@@ -29,35 +29,38 @@
<combo_box.item label="PG" name="Desired_PG"/>
</combo_box>
<text name="start_location_textbox">
- Luogo d&apos;inizio:
+ Luogo di partenza:
</text>
<combo_box name="start_location_combo">
<combo_box.item label="Ultimo posto visitato" name="MyLastLocation" tool_tip="Vai nell&apos;ultimo posto visitato di default quando fai login."/>
<combo_box.item label="Casa mia" name="MyHome" tool_tip="Vai a casa di default quando fai login"/>
</combo_box>
- <check_box initial_value="true" label="Mostra su login" name="show_location_checkbox"/>
+ <check_box initial_value="true" label="Mostra con il login" name="show_location_checkbox"/>
<text name="name_tags_textbox">
- Nome sulle tags:
+ Nome:
</text>
<radio_group name="Name_Tag_Preference">
- <radio_item label="Off" name="radio"/>
- <radio_item label="On" name="radio2"/>
- <radio_item label="Mostra brevemente" name="radio3"/>
+ <radio_item label="Off" name="radio" value="0"/>
+ <radio_item label="On" name="radio2" value="1"/>
+ <radio_item label="Mostra brevemente" name="radio3" value="2"/>
</radio_group>
<check_box label="Mostra il mio nome" name="show_my_name_checkbox1"/>
- <check_box initial_value="true" label="Nome piccolo sulle tags" name="small_avatar_names_checkbox"/>
+ <check_box initial_value="true" label="Nome in piccolo" name="small_avatar_names_checkbox"/>
<check_box label="Mostra titoli del gruppo" name="show_all_title_checkbox1"/>
<text name="effects_color_textbox">
- Miei effetti:
+ I miei effetti:
</text>
- <color_swatch label="" name="effect_color_swatch" tool_tip="Clicca per aprire la tavolozza dei colori"/>
<text name="title_afk_text">
- Pausa di Away:
- </text>
- <spinner label="Assente dopo:" name="afk_timeout_spinner"/>
- <text name="seconds_textbox">
- secondi
+ Pausa assenza:
</text>
+ <color_swatch label="" name="effect_color_swatch" tool_tip="Clicca per aprire la tavolozza dei colori"/>
+ <combo_box label="Pausa assenza:" name="afk">
+ <combo_box.item label="2 minuti" name="item0"/>
+ <combo_box.item label="5 minuti" name="item1"/>
+ <combo_box.item label="10 minuti" name="item2"/>
+ <combo_box.item label="30 minuti" name="item3"/>
+ <combo_box.item label="mai" name="item4"/>
+ </combo_box>
<text name="text_box3">
Risposta in modalità occupato:
</text>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
index 647df27633..d02a794219 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Grafica" name="Display panel">
<text name="UI Size:">
- misura UI:
+ Dimensioni UI:
</text>
<text name="QualitySpeed">
Qualità e velocità:
@@ -87,8 +87,8 @@
Dettagli illuminazione:
</text>
<radio_group name="LightingDetailRadio">
- <radio_item label="Solo il sole e la luna" name="SunMoon"/>
- <radio_item label="Luci locali" name="LocalLights"/>
+ <radio_item label="Solo il sole e la luna" name="SunMoon" value="0"/>
+ <radio_item label="Luci locali" name="LocalLights" value="1"/>
</radio_group>
<text name="TerrainDetailText">
Dettagli terreno:
@@ -99,7 +99,7 @@
</radio_group>
</panel>
<button label="Applica" label_selected="Applica" name="Apply"/>
- <button label="Resetta" left="110" name="Defaults" width="190"/>
- <button label="Avanzato" name="Advanced"/>
+ <button label="Reimposta" left="110" name="Defaults" width="190"/>
+ <button label="Avanzate" name="Advanced"/>
<button label="Hardware" label_selected="Hardware" name="GraphicsHardwareButton"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
index c84edbb47e..1002195baf 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
@@ -1,27 +1,27 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Comunicazione" name="im">
<panel.string name="log_in_to_change">
- log in per cambiare
+ accedi per cambiare
</panel.string>
- <button label="Pulisci la cronologia" name="clear_cache"/>
+ <button label="Pulisci la cronologia" name="clear_cache" tool_tip="Elimina immagine login, ultimo luogo, cronologia teleport, web e texture cache"/>
<text name="cache_size_label_l">
- (Luoghi, immagini, web, cronologia del search)
+ (Luoghi, immagini, web, cronologia ricerche)
</text>
<check_box label="Solo amici e gruppi mi vedono online" name="online_visibility"/>
<check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/>
- <check_box label="Spegnere il microfono quando chiudi le chiamate" name="auto_disengage_mic_check"/>
- <check_box label="Accetta cookies" name="cookies_enabled"/>
- <check_box label="Permettere Media Autoplay" name="autoplay_enabled"/>
+ <check_box label="Spegnere il microfono alla chiusura delle chiamate" name="auto_disengage_mic_check"/>
+ <check_box label="Accetta cookie" name="cookies_enabled"/>
+ <check_box label="Consenti riproduzione multimediale automatica" name="autoplay_enabled"/>
<text name="Logs:">
- Logs:
+ Registri:
</text>
- <check_box label="Salvare le ultime chat logs nel mio computer" name="log_nearby_chat"/>
- <check_box label="Salvare gli IM logs nel mio computer" name="log_instant_messages"/>
- <check_box label="Aggiungere orario" name="show_timestamps_check_im"/>
+ <check_box label="Salva i registri delle conversazioni sul mio computer" name="log_nearby_chat"/>
+ <check_box label="Salva i registri degli IM nel mio computer" name="log_instant_messages"/>
+ <check_box label="Riporta data e ora" name="show_timestamps_check_im"/>
<line_editor left="288" name="log_path_string" right="-20"/>
<text name="log_path_desc">
- Luoghi delle logs
+ Ubicazione dei registri
</text>
- <button label="Browse" label_selected="Browse" name="log_path_button" width="130"/>
- <button label="Bloccare lista" name="block_list"/>
+ <button label="Sfoglia" label_selected="Sfoglia" name="log_path_button" width="130"/>
+ <button label="Lista dei bloccati" name="block_list"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
index 17257a7cb8..cedf93beed 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
@@ -1,46 +1,49 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Input &amp; Camera" name="Input panel">
- <button bottom_delta="-40" label="Altri Dispositivi" name="joystick_setup_button" width="165"/>
+<panel label="Impostazione" name="Input panel">
+ <button bottom_delta="-40" label="Altri dispositivi" name="joystick_setup_button" width="165"/>
<text name="Mouselook:">
- Mouselook:
+ Soggettiva:
</text>
<text name=" Mouse Sensitivity">
- Sensibilità del Mouse
+ Sensibilità mouse
</text>
<check_box label="Inverti" name="invert_mouse"/>
<text name="Network:">
- Network:
+ Rete:
</text>
<text name="Maximum bandwidth">
- Banda Massima
+ Capacità massima di banda
</text>
<text name="text_box2">
kbps
</text>
- <check_box label="Custom port" name="connection_port_enabled"/>
- <spinner label="Port number:" name="web_proxy_port"/>
+ <check_box label="Porta personalizzata" name="connection_port_enabled"/>
+ <spinner label="Numero porta:" name="connection_port"/>
<text name="cache_size_label_l">
- Cache size
+ Dimensioni cache
</text>
<text name="text_box5">
MB
</text>
- <button label="Browse" label_selected="Browse" name="set_cache"/>
- <button label="Resetta" label_selected="Imposta" name="reset_cache"/>
<text name="Cache location">
- Cache location
+ Ubicazione della cache:
</text>
+ <button label="Sfoglia" label_selected="Sfoglia" name="set_cache"/>
+ <button label="Reimposta" label_selected="Reimposta" name="reset_cache"/>
<text name="Web:">
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Usa il built-in browser" name="internal" tool_tip="Usa il built-in web browser per aiuto, web links, etc. Questo browser apre come una nuova finestra all&apos;interno [APP_NAME]."/>
- <radio_item label="Usa il mio browser (IE, Firefox)" name="external" tool_tip="Usa il default system web browser per aiuto, web links, etc. Non raccomandato se utilizzi lo schermo pieno(full screen)."/>
+ <radio_item label="Usa il mio browser (IE, Firefox, Safari)" name="external" tool_tip="Utilizza il browser Web predefinito di sistema per l&apos;aiuto, per i link Web e così via. Sconsigliato durante l&apos;esecuzione a tutto schermo." value="1"/>
+ <radio_item label="Utilizza il browser Web integrato" name="internal" tool_tip="Utilizza il browser Web integrato per l&apos;aiuto, per i link Web e così via. Questo browser si apre in una nuova finestra in [APP_NAME]." value=""/>
</radio_group>
- <check_box initial_value="false" label="Web proxy" name="web_proxy_enabled"/>
- <line_editor name="web_proxy_editor" tool_tip="Nome o indirizzo IP del proxy che vorresti usare"/>
- <button label="Browse" label_selected="Browse" name="set_proxy"/>
+ <check_box initial_value="vero" label="Abilita plugin" name="browser_plugins_enabled"/>
+ <check_box initial_value="vero" label="Accetta cookie" name="cookies_enabled"/>
+ <check_box initial_value="vero" label="Abilita Javascript" name="browser_javascript_enabled"/>
+ <check_box initial_value="false" label="Abilita proxy Web" name="web_proxy_enabled"/>
<text name="Proxy location">
- Proxy location
+ Ubicazione proxy:
</text>
+ <line_editor name="web_proxy_editor" tool_tip="Il nome o l&apos;indirizzo IP del proxy che preferisci usare"/>
+ <spinner label="Numero porta:" name="web_proxy_port"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
index c4d46291dd..6936f24a8a 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
@@ -1,20 +1,27 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Suoni" name="Preference Media panel">
- <slider label="Principale" name="System Volume"/>
- <check_box initial_value="true" label="Spegni suono se minimizzato" name="mute_when_minimized"/>
- <slider label="Ambiente" name="Wind Volume"/>
+ <slider label="Vol. principale" name="System Volume"/>
+ <check_box initial_value="true" label="Disatt. se a icona" name="mute_when_minimized"/>
<slider label="Pulsanti" name="UI Volume"/>
- <slider label="MultiMedia" name="Media Volume"/>
- <slider label="Effetto Suoni" name="SFX Volume"/>
- <slider label="Musica" name="Music Volume"/>
- <check_box label="Voce" name="enable_voice_check"/>
- <slider label="Voice" name="Voice Volume"/>
+ <slider label="Ambiente" name="Wind Volume"/>
+ <slider label="Effetti sonori" name="SFX Volume"/>
+ <slider label="Musica in streaming" name="Music Volume"/>
+ <check_box label="Abilitato" name="music_enabled"/>
+ <slider label="Multimediale" name="Media Volume"/>
+ <check_box label="Abilitato" name="enable_media"/>
+ <slider label="Chat vocale" name="Voice Volume"/>
+ <check_box label="Abilitato" name="enable_voice_check"/>
+ <check_box label="Consenti riproduzione multimediale automatica" name="media_auto_play_btn" tool_tip="Seleziona qui per consentire la riproduzione multimediale automatica" value="vero"/>
+ <check_box label="Riproduci media in uso da altri avatar" name="media_show_on_others_btn" tool_tip="Deseleziona qui per nascondere i media in uso dagli altri avatar nei dintorni" value="vero"/>
+ <text name="voice_chat_settings">
+ Impostazioni Chat vocale
+ </text>
<text name="Listen from">
Ascolta da:
</text>
<radio_group name="ear_location">
- <radio_item label="Posizione della Camera" name="0"/>
- <radio_item label="Posizione dell&apos;Avatar" name="1"/>
+ <radio_item label="Posizione della fotocamera" name="0"/>
+ <radio_item label="Posizione dell&apos;avatar" name="1"/>
</radio_group>
<button label="Dispositivi di Input/Output" name="device_settings_btn" width="165"/>
<panel label="Impostazioni del dispositivo" name="device_settings_panel">
@@ -25,7 +32,7 @@
Input
</text>
<text name="My volume label">
- Mio volume:
+ Il mio volume:
</text>
<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia il volume utilizzando questa barra"/>
<text name="wait_text">
diff --git a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
index dc7d59084e..ef7aaf2e8c 100644
--- a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
@@ -1,28 +1,79 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="MediaControls">
+ <string name="min_width">
+ 300
+ </string>
+ <string name="min_height">
+ 75
+ </string>
+ <string name="zoom_medium_padding">
+ 1.1
+ </string>
+ <string name="top_world_view_avoid_zone">
+ 50
+ </string>
+ <layout_stack name="progress_indicator_area">
+ <panel name="media_progress_indicator">
+ <progress_bar name="media_progress_bar" tool_tip="L&apos;elemento multimediale è in caricamento"/>
+ </panel>
+ </layout_stack>
<layout_stack name="media_controls">
+ <layout_panel name="back">
+ <button name="back_btn" tool_tip="Naviga indietro"/>
+ </layout_panel>
+ <layout_panel name="fwd">
+ <button name="fwd_btn" tool_tip="Naviga avanti"/>
+ </layout_panel>
+ <layout_panel name="home">
+ <button name="home_btn" tool_tip="Home page"/>
+ </layout_panel>
+ <layout_panel name="media_stop">
+ <button name="media_stop_btn" tool_tip="Interrompi supporto"/>
+ </layout_panel>
+ <layout_panel name="reload">
+ <button name="reload_btn" tool_tip="Ricarica"/>
+ </layout_panel>
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Interrompi caricamento"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Riproduci media"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Pausa supporto"/>
+ </layout_panel>
<layout_panel name="media_address">
- <line_editor name="media_address_url" tool_tip="Media URL"/>
+ <line_editor name="media_address_url" tool_tip="URL multimedia"/>
<layout_stack name="media_address_url_icons">
<layout_panel>
- <icon name="media_whitelist_flag" tool_tip="Lista Bianca attivata"/>
+ <icon name="media_whitelist_flag" tool_tip="Lista bianca attivata"/>
</layout_panel>
<layout_panel>
- <icon name="media_secure_lock_flag" tool_tip="Secured Browsing"/>
+ <icon name="media_secure_lock_flag" tool_tip="Navigazione sicura"/>
</layout_panel>
</layout_stack>
</layout_panel>
<layout_panel name="media_play_position">
- <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Avanzamento riproduzione Movie"/>
+ <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Avanzamento riproduzione filmato"/>
+ </layout_panel>
+ <layout_panel name="skip_back">
+ <button name="skip_back_btn" tool_tip="Passo indietro"/>
+ </layout_panel>
+ <layout_panel name="skip_forward">
+ <button name="skip_forward_btn" tool_tip="Passo avanti"/>
</layout_panel>
<layout_panel name="media_volume">
- <button name="media_mute_button" tool_tip="Silenzia questo Media ????"/>
- <slider name="volume_slider" tool_tip="Volume Media"/>
+ <button name="media_mute_button" tool_tip="Silenzia questo elemento multimediale"/>
+ <slider name="volume_slider" tool_tip="Volume multimedia"/>
+ </layout_panel>
+ <layout_panel name="zoom_frame">
+ <button name="zoom_frame_btn" tool_tip="Zoom nel media"/>
+ </layout_panel>
+ <layout_panel name="close">
+ <button name="close_btn" tool_tip="Zoom indietro"/>
+ </layout_panel>
+ <layout_panel name="new_window">
+ <button name="new_window_btn" tool_tip="Apri URL nel browser"/>
</layout_panel>
- </layout_stack>
- <layout_stack>
- <panel name="media_progress_indicator">
- <progress_bar name="media_progress_bar" tool_tip="Media stà caricando"/>
- </panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_profile.xml b/indra/newview/skins/default/xui/it/panel_profile.xml
index 837aa4ac65..9927ecbb88 100644
--- a/indra/newview/skins/default/xui/it/panel_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_profile.xml
@@ -12,37 +12,41 @@
</string>
<string name="my_account_link_url" value="http://secondlife.com/my/account/index.php?lang=it-IT"/>
<string name="no_partner_text" value="Nessuno"/>
+ <string name="no_group_text" value="Nessuno"/>
<string name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <panel name="second_life_image_panel">
- <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
- </panel>
- <panel name="first_life_image_panel">
- <text name="title_rw_descr_text" value="Mondo Reale:"/>
- </panel>
- <text name="me_homepage_text">
- Homepage:
- </text>
- <text name="title_member_text" value="Membro dal:"/>
- <text name="title_acc_status_text" value="Stato dell&apos;Account:"/>
- <text name="acc_status_text" value="Resident. No payment info on file."/>
- <text name="title_partner_text" value="Partner:"/>
- <text name="title_groups_text" value="Gruppi:"/>
- </panel>
- </scroll_container>
- <panel name="profile_buttons_panel">
- <button label="Aggiungi Amico" name="add_friend" tool_tip="Offri amicizia ad un residente"/>
- <button label="IM" name="im" tool_tip="Apri una sessione instant message"/>
- <button label="Chiama" name="call" tool_tip="Chiama questo residente"/>
- <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/>
- <button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
- <button label="â–¼" name="overflow_btn" tool_tip="Paga o condividi l&apos;inventario con il residente"/>
- </panel>
- <panel name="profile_me_buttons_panel">
- <button label="Modifica Profilo" name="edit_profile_btn"/>
- <button label="Modifica Aspetto" name="edit_appearance_btn"/>
- </panel>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="profile_scroll_panel">
+ <panel name="second_life_image_panel">
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <text name="title_rw_descr_text" value="Mondo reale:"/>
+ </panel>
+ <text name="title_member_text" value="Residente dal:"/>
+ <text name="title_acc_status_text" value="Stato account:"/>
+ <text name="title_partner_text" value="Partner:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(recupero)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Gruppi:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_buttons_panel">
+ <button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/>
+ <button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/>
+ <button label="Chiama" name="call" tool_tip="Chiama questo residente"/>
+ <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/>
+ <button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
+ <button label="â–¼" name="overflow_btn" tool_tip="Paga del denaro o condividi qualcosa dall&apos;inventario con il residente"/>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Modifica profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/>
+ <button label="Modifica aspetto fisico" name="edit_appearance_btn" tool_tip="Crea/modifica il tuo aspetto: parti del corpo, abiti ecc."/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_profile_view.xml b/indra/newview/skins/default/xui/it/panel_profile_view.xml
index bf89a3e6f6..20c62d4ceb 100644
--- a/indra/newview/skins/default/xui/it/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/it/panel_profile_view.xml
@@ -6,11 +6,11 @@
<string name="status_offline">
Offline
</string>
- <text_editor name="user_name" value="(Caricando...)"/>
+ <text_editor name="user_name" value="(Caricamento in corso...)"/>
<text name="status" value="Online"/>
<tab_container name="tabs">
<panel label="PROFILO" name="panel_profile"/>
- <panel label="PREFERITI" name="panel_picks"/>
- <panel label="NOTE &amp; PRIVACY" name="panel_notes"/>
+ <panel label="LUOGHI CONSIGLIATI" name="panel_picks"/>
+ <panel label="NOTE E PRIVACY" name="panel_notes"/>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_covenant.xml b/indra/newview/skins/default/xui/it/panel_region_covenant.xml
index f35b451ac1..0d3117ca7a 100644
--- a/indra/newview/skins/default/xui/it/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_covenant.xml
@@ -31,7 +31,7 @@
della proprietà.
</text>
<text bottom_delta="-36" name="covenant_instructions">
- Trascina ed inserisci una notecard per cambiare i Covenant di questa proprietà immobiliare.
+ Trascina e incolla un biglietto per cambiare il Regolamento di questa proprietà.
</text>
<text name="region_section_lbl">
Regione
diff --git a/indra/newview/skins/default/xui/it/panel_region_debug.xml b/indra/newview/skins/default/xui/it/panel_region_debug.xml
index 9e81d42410..45b3a016f4 100644
--- a/indra/newview/skins/default/xui/it/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_debug.xml
@@ -26,9 +26,9 @@
<text name="options_text_lbl">
Opzioni:
</text>
- <check_box label="Con scripts" name="return_scripts" tool_tip="Ritorna solo gli oggetti che hanno scripts"/>
- <check_box label="Sulla terra di qualcun&apos;altro" name="return_other_land" tool_tip="Restituisci solo gli oggetti che sono in terreni appartenenti a qualcun altro"/>
- <check_box label="In ogni regione di questa proprietà" name="return_estate_wide" tool_tip="Restituisci tutti gli oggetti nelle varie regioni che costituiscono l&apos;insieme dei possedimenti terrieri"/>
+ <check_box label="Con script" name="return_scripts" tool_tip="Restituisci solo oggetti che hanno script"/>
+ <check_box label="Sul terreno di un altro residente" name="return_other_land" tool_tip="Restituisci solo gli oggetti che sono in terreni appartenenti a qualcun altro"/>
+ <check_box label="In tutte le regioni di questa proprietà" name="return_estate_wide" tool_tip="Restituisci tutti gli oggetti nelle varie regioni che costituiscono l&apos;insieme dei possedimenti terrieri"/>
<button label="Restituisci" name="return_btn"/>
<button label="Visualizza l&apos;elenco dei maggiori collidenti..." name="top_colliders_btn" tool_tip="Elenco degli oggetti che stanno potenzialmente subendo le maggiori collisioni" width="280"/>
<button label="?" left="297" name="top_colliders_help"/>
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 b6dc60a9c2..8d3f096c4b 100644
--- a/indra/newview/skins/default/xui/it/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_estate.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Proprietà immobiliari" name="Estate">
<text name="estate_help_text">
- I cambiamenti alle impostazioni in questa finestra
-avranno effetto su tutte le regioni della proprietà.
+ Le modifiche apportate in questa scheda saranno valide per tutte le regioni in questa proprietà.
</text>
<text name="estate_text" width="140">
Proprietà immobiliari:
@@ -24,10 +23,10 @@ avranno effetto su tutte le regioni della proprietà.
<check_box label="Permetti accesso pubblico" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Accesso ristretto ai Residenti verificati con:
+ Limita l&apos;accesso agli account verificati con:
</text>
- <check_box label="Informazioni di pagamento on File" name="limit_payment" tool_tip="Espelli residenti non identificati"/>
- <check_box label="Verifica dell&apos;età" name="limit_age_verified" tool_tip="Espelli i residenti che non hanno verificato l&apos;età. Vedi [SUPPORT_SITE] per maggiori informazioni."/>
+ <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="Permetti la chat voice" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Permetti teleport diretto" name="allow_direct_teleport"/>
@@ -40,7 +39,7 @@ avranno effetto su tutte le regioni della proprietà.
</string>
<button label="?" name="abuse_email_address_help"/>
<button label="Applica" name="apply_btn"/>
- <button font="SansSerifSmall" label="Espelli persona dalle proprietà..." name="kick_user_from_estate_btn"/>
+ <button font="SansSerifSmall" label="Espelli residente dalla proprietà..." name="kick_user_from_estate_btn"/>
<button font="SansSerifSmall" label="Manda un messaggio di le proprietà..." name="message_estate_btn"/>
<text name="estate_manager_label">
Manager delle proprietà:
diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml
index 8c31172ab5..7d8b346c17 100644
--- a/indra/newview/skins/default/xui/it/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_general.xml
@@ -3,51 +3,41 @@
<text name="region_text_lbl">
Regione:
</text>
- <text name="region_text" left="70">
+ <text left="70" name="region_text">
sconosciuta
</text>
<text name="version_channel_text_lbl">
Versione:
</text>
- <text name="version_channel_text" left="70">
+ <text left="70" name="version_channel_text">
sconosciuta
</text>
<text name="region_type_lbl">
Tipo:
</text>
- <text name="region_type" left="70">
+ <text left="70" name="region_type">
sconosciuto
</text>
<check_box label="Proibisci la modifica del terreno" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
<check_box label="Impedisci il volo" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
<check_box label="Abilita i danni" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
<check_box label="Limita gli urti" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
<check_box label="Abilita la rivendita del terreno" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help" left="260"/>
<check_box label="Abilita unione/suddivisione del terreno" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help" left="260" />
<check_box label="Proibisci che il terreno appaia nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti che le persone vedano questa regione e le sue suddivisioni nei risultati delle ricerche"/>
- <button label="?" name="parcel_search_help" left="260"/>
- <spinner label="Limite massimo di avatar" name="agent_limit_spin" label_width="135" width="190"/>
- <button label="?" name="agent_limit_help"/>
- <spinner label="Bonus di oggetti" name="object_bonus_spin" label_width="135" width="190"/>
- <button label="?" name="object_bonus_help"/>
+ <spinner label="Limite massimo di avatar" label_width="135" name="agent_limit_spin" width="190"/>
+ <spinner label="Bonus di oggetti" label_width="135" name="object_bonus_spin" width="190"/>
<text label="Maturità" name="access_text" width="120">
Categoria di accesso:
</text>
- <combo_box label="Mature" name="access_combo" left="126" width="74">
- <combo_box.item label="Adult" name="Adult"/>
- <combo_box.item label="Mature" name="Mature"/>
- <combo_box.item label="PG" name="PG"/>
- </combo_box>
- <button label="?" name="access_help"/>
+ <icons_combo_box label="Mature" left="126" name="access_combo" width="74">
+ <icons_combo_box.item label="Adult" name="Adult" value="42"/>
+ <icons_combo_box.item label="Mature" name="Mature" value="21"/>
+ <icons_combo_box.item label="PG" name="PG" value="13"/>
+ </icons_combo_box>
<button label="Applica" name="apply_btn"/>
- <button label="Teletrasporta a casa un utente..." name="kick_btn"/>
- <button label="Teletrasporta a casa tutti gli utenti..." name="kick_all_btn"/>
+ <button label="Teleport a casa un residente..." name="kick_btn"/>
+ <button label="Teleport a casa tutti i residenti..." name="kick_all_btn"/>
<button label="Invia messaggio alla regione..." name="im_btn"/>
<button label="Gestisci snodo di teleport..." name="manage_telehub_btn" width="210"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml b/indra/newview/skins/default/xui/it/panel_region_general_layout.xml
new file mode 100644
index 0000000000..232cd0c387
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_region_general_layout.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Regione" name="General">
+ <text name="region_text_lbl">
+ Regione:
+ </text>
+ <text name="region_text">
+ sconosciuto
+ </text>
+ <text name="version_channel_text_lbl">
+ Versione:
+ </text>
+ <text name="version_channel_text">
+ sconosciuto
+ </text>
+ <text name="region_type_lbl">
+ Tipo:
+ </text>
+ <text name="region_type">
+ sconosciuto
+ </text>
+ <check_box label="Impedisci Terraform" name="block_terraform_check"/>
+ <check_box label="Impedisci volo" name="block_fly_check"/>
+ <check_box label="Permetti danni" name="allow_damage_check"/>
+ <check_box label="Limita spinte" name="restrict_pushobject"/>
+ <check_box label="Permetti la rivendita dei terreni" name="allow_land_resell_check"/>
+ <check_box label="Permetti l&apos;unione/divisione del terreno" name="allow_parcel_changes_check"/>
+ <check_box label="Impedisci la visualizzazione del terreno nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti alla gente di vedere questa regione e i suoi lotti nei risultati dellla ricerca"/>
+ <spinner label="N. massimo di avatar" name="agent_limit_spin"/>
+ <spinner label="Bonus oggetto" name="object_bonus_spin"/>
+ <text label="Categoria di accesso" name="access_text">
+ Categoria:
+ </text>
+ <combo_box label="Moderato" name="access_combo">
+ <combo_box.item label="Adulto" name="Adult"/>
+ <combo_box.item label="Moderato" name="Mature"/>
+ <combo_box.item label="Generale" name="PG"/>
+ </combo_box>
+ <button label="Applica" name="apply_btn"/>
+ <button label="Teleport a casa un residente..." name="kick_btn"/>
+ <button label="Teleport a casa tutti i residenti..." name="kick_all_btn"/>
+ <button label="Invia messaggio alla regione..." name="im_btn"/>
+ <button label="Gestisci telehub..." name="manage_telehub_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_texture.xml b/indra/newview/skins/default/xui/it/panel_region_texture.xml
index 23d6915a2f..1337ed18ca 100644
--- a/indra/newview/skins/default/xui/it/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_texture.xml
@@ -25,16 +25,16 @@
Range di elevazione della texture
</text>
<text name="height_text_lbl6">
- Sud Ovest
+ Nordovest
</text>
<text name="height_text_lbl7">
- Nord Ovest
+ Nordest
</text>
<text name="height_text_lbl8">
- Sud Est
+ Sudovest
</text>
<text name="height_text_lbl9">
- Nord Est
+ Sudest
</text>
<spinner label="Bassa" name="height_start_spin_0"/>
<spinner label="Bassa" name="height_start_spin_1"/>
@@ -45,10 +45,10 @@
<spinner label="Alta" name="height_range_spin_2"/>
<spinner label="Alta" name="height_range_spin_3"/>
<text name="height_text_lbl10">
- Questi valori riproducono l&apos;insieme della gamma delle textures superiori.
+ Questi valori indicano la gamma di miscele per le texture di cui sopra.
</text>
<text name="height_text_lbl11">
- Misurato in metri, il valore MINIMO è l&apos;altezza MASSIMA della Texture n°1, e il valore MASSIMO è l&apos;altezza MINIMA della Texture n°4.
+ Misurato in metri, il valore BASSO è la MASSIMA altezza della texture n. 1, e il valore ALTO è l&apos;altezza MINIMA della texture n. 4.
</text>
<text name="height_text_lbl12">
Texture #1, e il valore più ALTO all&apos;altezza MINIMA della Texture #4.
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 a98a88950c..f550aee98e 100644
--- a/indra/newview/skins/default/xui/it/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/it/panel_script_ed.xml
@@ -1,43 +1,43 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="script panel">
<panel.string name="loading">
- Caricando...
+ Caricamento in corso...
</panel.string>
<panel.string name="can_not_view">
- Non puoi vedere o modificare questo script, perchè è impostato come &quot;no copy&quot;. Necesiti tutti i permessi per vedere o modificare lo script dentro un oggetto..
+ Per impostazione, questo script non può essere visualizzato né modificato. Per visualizzare o modificare uno script all&apos;interno di un oggetto, devi avere i necessari diritti di modifica.
</panel.string>
<panel.string name="public_objects_can_not_run">
- Oggetti Pubblici non possono attivare scripts
+ Gli oggetti pubblici non possono eseguire gli script
</panel.string>
<panel.string name="script_running">
- Attivando
+ In esecuzione
</panel.string>
<panel.string name="Title">
Script: [NAME]
</panel.string>
<text_editor name="Script Editor">
- Caricando...
+ Caricamento in corso...
</text_editor>
<button label="Salva" label_selected="Salva" name="Save_btn"/>
- <combo_box label="Inserire..." name="Insert..."/>
+ <combo_box label="Inserisci..." name="Insert..."/>
<menu_bar name="script_menu">
<menu label="File" name="File">
<menu_item_call label="Salva" name="Save"/>
- <menu_item_call label="Annulla tutti i cambiamenti" name="Revert All Changes"/>
+ <menu_item_call label="Annulla tutte le modifiche" name="Revert All Changes"/>
</menu>
<menu label="Modifica" name="Edit">
- <menu_item_call label="Slaccia" name="Undo"/>
+ <menu_item_call label="Annulla" name="Undo"/>
<menu_item_call label="Rifai" name="Redo"/>
<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="Seleziona Tutto" name="Select All"/>
+ <menu_item_call label="Seleziona tutto" name="Select All"/>
<menu_item_call label="Deseleziona" name="Deselect"/>
<menu_item_call label="Cerca / Sostituisci..." name="Search / Replace..."/>
</menu>
- <menu label="Aiuto" name="Help">
+ <menu label="Guida" name="Help">
<menu_item_call label="Aiuto..." name="Help..."/>
- <menu_item_call label="Aiuto nella tastiera..." name="Keyword Help..."/>
+ <menu_item_call label="Aiuto con parole chiave..." name="Keyword Help..."/>
</menu>
</menu_bar>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml
new file mode 100644
index 0000000000..98096a391a
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="IL MIO AVATAR" name="script_limits_my_avatar_panel">
+ <text name="script_memory">
+ Uso degli script avatar
+ </text>
+ <text name="loading_text">
+ Caricamento in corso...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Dimensione (kb)" name="size"/>
+ <scroll_list.columns label="URL" name="urls"/>
+ <scroll_list.columns label="Nome dell&apos;oggetto" name="name"/>
+ <scroll_list.columns label="Posizione" name="location"/>
+ </scroll_list>
+ <button label="Aggiorna lista" name="refresh_list_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml
new file mode 100644
index 0000000000..df7b0eae1c
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="MEMORIA DELLA REGIONE" name="script_limits_region_memory_panel">
+ <text name="script_memory">
+ Memoria dello script del lotto
+ </text>
+ <text name="loading_text">
+ Caricamento in corso...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Dimensione (kb)" name="size"/>
+ <scroll_list.columns label="URL" name="urls"/>
+ <scroll_list.columns label="Nome dell&apos;oggetto" name="name"/>
+ <scroll_list.columns label="Proprietario dell&apos;oggetto" name="owner"/>
+ <scroll_list.columns label="Lotto" name="parcel"/>
+ <scroll_list.columns label="Posizione" name="location"/>
+ </scroll_list>
+ <button label="Aggiorna lista" name="refresh_list_btn"/>
+ <button label="In evidenza" name="highlight_btn"/>
+ <button label="Restituisci" name="return_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_side_tray.xml b/indra/newview/skins/default/xui/it/panel_side_tray.xml
index 06bc51f5db..846dcb69f0 100644
--- a/indra/newview/skins/default/xui/it/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/it/panel_side_tray.xml
@@ -2,25 +2,28 @@
<!-- Side tray cannot show background because it is always
partially on screen to hold tab buttons. -->
<side_tray name="sidebar">
- <sidetray_tab description="Casa." name="sidebar_home">
+ <sidetray_tab description="Apri/chiudi la barra laterale." name="sidebar_openclose" tab_title="Apri/chiudi la barra laterale"/>
+ <sidetray_tab description="Casa." name="sidebar_home" tab_title="Home">
<panel label="casa" name="panel_home"/>
</sidetray_tab>
- <sidetray_tab description="Trova i tuoi amici, contatti e persone nelle vicinanze." name="sidebar_people">
+ <sidetray_tab description="Modifica il tuo profilo pubblico e i preferiti." name="sidebar_me" tab_title="My Profile">
<panel_container name="panel_container">
- <panel label="Info di Gruppo" name="panel_group_info_sidetray"/>
- <panel label="Residenti bloccati &amp; Oggetti" name="panel_block_list_sidetray"/>
+ <panel label="Io" name="panel_me"/>
</panel_container>
</sidetray_tab>
- <sidetray_tab description="Trova luoghi dove andare e luoghi già visitati." label="Luoghi" name="sidebar_places">
- <panel label="Luoghi" name="panel_places"/>
+ <sidetray_tab description="Trova amici, contatti e persone nelle vicinanze." name="sidebar_people" tab_title="People">
+ <panel_container name="panel_container">
+ <panel label="Profilo del gruppo" name="panel_group_info_sidetray"/>
+ <panel label="Residenti e oggetti bloccati" name="panel_block_list_sidetray"/>
+ </panel_container>
</sidetray_tab>
- <sidetray_tab description="Modifica il tuo profilo pubblico e le foto." name="sidebar_me">
- <panel label="Io" name="panel_me"/>
+ <sidetray_tab description="Trova luoghi dove andare e luoghi già visitati." label="Luoghi" name="sidebar_places" tab_title="Places">
+ <panel label="Luoghi" name="panel_places"/>
</sidetray_tab>
- <sidetray_tab description="Cambia il tuo aspetto ed il tuo look attuale." name="sidebar_appearance">
- <panel label="Modifica Aspetto" name="sidepanel_appearance"/>
+ <sidetray_tab description="Sfoglia il tuo inventario." name="sidebar_inventory" tab_title="My Inventory">
+ <panel label="Modifica inventario" name="sidepanel_inventory"/>
</sidetray_tab>
- <sidetray_tab description="Curiosa nel tuo inventario." name="sidebar_inventory">
- <panel label="Modifica Inventario" name="sidepanel_inventory"/>
+ <sidetray_tab description="Cambia il tuo aspetto ed il tuo look attuale." name="sidebar_appearance" tab_title="My Appearance">
+ <panel label="Modifica aspetto fisico" name="sidepanel_appearance"/>
</sidetray_tab>
</side_tray>
diff --git a/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml
index 5e5f229ce4..753e89f2fd 100644
--- a/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="sidetray_tab_panel">
- <text name="sidetray_tab_title" value="Vaschetta laterale"/>
+ <text name="sidetray_tab_title" value="Pannello laterale"/>
<button name="show_help" tool_tip="Mostra Aiuto"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml
index 2fafc38ba1..198ebf4b2a 100644
--- a/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml
+++ b/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
<panel name="panel_stand_stop_flying">
- <button label="Stare in piedi" name="stand_btn" tool_tip="Clicca qui per alzarti."/>
+ <button label="Stai in piedi" name="stand_btn" tool_tip="Clicca qui per alzarti."/>
<button label="Ferma il volo" name="stop_fly_btn" tool_tip="Ferma il volo"/>
</panel>
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 9acbb34c79..584ac5e4b4 100644
--- a/indra/newview/skins/default/xui/it/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/it/panel_status_bar.xml
@@ -21,9 +21,11 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="Il mio saldo: Clicca per comprare più L$"/>
- <text name="TimeText" tool_tip="Ora attuale (Pacific)">
- 12:00 AM
+ <button label="" label_selected="" name="buycurrency" tool_tip="Il mio saldo"/>
+ <button label="Acquista" name="buyL" tool_tip="Clicca per comprare più L$"/>
+ <text name="TimeText" tool_tip="Orario attuale (Pacifico)">
+ 24:00, ora del Pacifico
</text>
- <button name="volume_btn" tool_tip="Controllo del volume globale"/>
+ <button name="media_toggle_btn" tool_tip="Attiva/ferma tutti i media (musica, video, pagine Web)"/>
+ <button name="volume_btn" tool_tip="Regolazione del volume globale"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history.xml b/indra/newview/skins/default/xui/it/panel_teleport_history.xml
index 3f02b1449a..85f8f87e68 100644
--- a/indra/newview/skins/default/xui/it/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/it/panel_teleport_history.xml
@@ -3,12 +3,16 @@
<accordion name="history_accordion">
<accordion_tab name="today" title="Oggi"/>
<accordion_tab name="yesterday" title="Ieri"/>
- <accordion_tab name="2_days_ago" title="2 giorni fà"/>
- <accordion_tab name="3_days_ago" title="3 giorni fà"/>
- <accordion_tab name="4_days_ago" title="4 giorni fà"/>
- <accordion_tab name="5_days_ago" title="5 giorni fà"/>
- <accordion_tab name="6_days_and_older" title="6 giorni fà o più vecchio"/>
- <accordion_tab name="1_month_and_older" title="1 mese o più vecchio"/>
- <accordion_tab name="6_months_and_older" title="6 mesi o più vecchio"/>
+ <accordion_tab name="2_days_ago" title="2 giorni fa"/>
+ 5
+ <accordion_tab name="3_days_ago" title="3 giorni fa"/>
+ <accordion_tab name="4_days_ago" title="4 giorni fa"/>
+ <accordion_tab name="5_days_ago" title="5 giorni fa"/>
+ <accordion_tab name="6_days_and_older" title="6 giorni o precedente"/>
+ <accordion_tab name="1_month_and_older" title="1 mese o precedente"/>
+ <accordion_tab name="6_months_and_older" title="6 mesi o precedente"/>
</accordion>
+ <panel name="bottom_panel">
+ <button name="gear_btn" tool_tip="Mostra opzioni addizionali"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml
new file mode 100644
index 0000000000..2ba4baacaf
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="teleport_history_item">
+ <button name="profile_btn" tool_tip="Mostra informazioni dell&apos;oggetto"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_world_map.xml b/indra/newview/skins/default/xui/it/panel_world_map.xml
index 1349b36e2c..8d18e0ee0b 100644
--- a/indra/newview/skins/default/xui/it/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/it/panel_world_map.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="world_map">
<panel.string name="Loading">
- Sto Caricando...
+ Caricamento in corso...
</panel.string>
<panel.string name="InvalidLocation">
Luogo non valido
diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml
index eab8e6b4e3..e3f95f7f86 100644
--- a/indra/newview/skins/default/xui/it/role_actions.xml
+++ b/indra/newview/skins/default/xui/it/role_actions.xml
@@ -1,72 +1,72 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<role_actions>
- <action_set description="Queste abilità permettono di aggiungere e rimuovere Membri dal gruppo, e permettono ai nuovi membri di aderire al gruppo senza invito." name="Membership">
- <action description="Invitare persone in questo Gruppo" longdescription="Invita Persone in questo Gruppo usando il bottone &apos;Invita&apos; nella sezione Ruoli &gt; tabella Membri." name="member invite"/>
- <action description="Espellere Membri da questo Gruppo" longdescription="Espelli Membri dal Gruppo usando il bottone &apos;Espelli&apos; nella sezione Ruoli &gt; tabella Membri. Un Proprietario può espellere chiunque eccetto un altro Proprietario. Se tu non sei un Proprietario, un Membro può essere espulso da un gruppo solo ed unicamente, se hanno il Ruolo Everyone, e nessun altro Ruolo. Per rimuovere Membri dai Ruoli, devi avere l&apos;Abilità &apos;Rimuovi Membri dai Ruoli&apos;." name="member eject"/>
- <action description="Seleziona &apos;Iscrizione libera&apos; e modifica da &apos;Tassa d&apos;Iscrizione&apos;" longdescription="Seleziona &apos;Iscrizione libera&apos; per permettere ai nuovi Membri di aderire senza invito, e modifica da &apos;Tassa d&apos;Iscrizione&apos; nella sezione Generale." name="member options"/>
+ <action_set description="Queste abilità permettono di aggiungere e rimuovere membri dal gruppo e consentono ai nuovi membri di aderire al gruppo senza invito." name="Membership">
+ <action description="Invita persone in questo gruppo" longdescription="Invita persone in questo gruppo usando il pulsante Invita nella sezione Ruoli &gt; scheda membri." name="member invite"/>
+ <action description="Espelli membri da questo gruppo" longdescription="Espelli membri dal gruppo usando il pulsante Espelli nella sezione Ruoli &gt; scheda membri. Un proprietario può espellere chiunque tranne un altro proprietario. Se non sei un proprietario, un membro può essere espulso da un gruppo soltanto qualora abbia soltanto il ruolo Tutti, e nessun altro ruolo. Per rimuovere membri dai ruoli, devi avere l&apos;Abilità corrispondente." name="member eject"/>
+ <action description="Seleziona Iscrizione libera e modifica la Quota d&apos;iscrizione" longdescription="Seleziona Iscrizione libera per permettere ai nuovi membri di aderire senza invito e modifica la quota d&apos;iscrizione nella scheda Generale." name="member options"/>
</action_set>
- <action_set description="Queste Abilità permettono di aggiungere, rimuovere, cambiare i Ruoli del Gruppo, aggiungere e rimuovere Membri dai Ruoli, e assegnare Abilità ai Ruoli." name="Roles">
- <action description="Creare nuovi Ruoli" longdescription="Crea nuovi Ruoli nella sezione Ruoli &gt; tabella Ruoli." name="role create"/>
- <action description="Cancellare Ruoli" longdescription="Cancella Ruoli nella sezione Ruoli &gt; tabella Ruoli." name="role delete"/>
- <action description="Cambia i nomi del Ruolo, titoli, descrizioni, se i membri in quel Ruolo sono resi pubblici" longdescription="Cambia i nomi del Ruolo, titoli, descrizioni, se i membri in quel Ruolo sono resi pubblici. Viene fatto nella parte bassa della sezione Ruoli &gt; tabella Ruoli dopo avere selezionato un Ruolo." name="role properties"/>
- <action description="Incaricare Membri ad Assegnare Ruoli" longdescription="Assegna un Ruolo a Membri nella lista dei Ruoli assegnati (Roles section &gt; Members tab). Un Membro con questa Abilità può aggiungere Membri ad un Ruolo già presente nell&apos;elenco." name="role assign member limited"/>
- <action description="Assegnare Membri a tutti i Ruoli" longdescription="Assegna Tutti i Ruoli a Membri nella lista dei Ruoli Assegnati (Roles section &gt; Members tab). *ATTENZIONE* Ogni Membro con questo Ruolo e Abilità può assegnarsi -- e assegnare ad altri Membri non Proprietari-- Ruoli con poteri maggiori di quelli normalmente concessi, potenzialmente elevandosi ai poteri concessi al Proprietario. Siate sicuri di quello che fate prima di assegnare questa Abilità." name="role assign member"/>
- <action description="Rimuovere Membri dai Ruoli" longdescription="Rimuovi dai Ruoli i Membri nella lista dei Ruoli Assegnati (Roles section &gt; Members tab). Il Proprietario non può essere rimosso." name="role remove member"/>
- <action description="Assegnare e Rimuovere Abilità nei Ruoli" longdescription="Assegna e Rimuovi Abilità per ogni Ruolo nella lista dei Ruoli Assegnati (Roles section &gt; Roles tab). *ATTENZIONE* Ogni Membro con questo Ruolo e Abilità può assegnarsi --ed assegnare ad altri Membri non Proprietà-- tutte le Abilità, che potenzialmente lo elevano ai poteri ai poteri concessi al Proprietario. Siate sicuri di quello che fate prima di assegnare questa Abilità ." name="role change actions"/>
+ <action_set description="Queste Abilità permettono di aggiungere, rimuovere, cambiare i ruoli del gruppo, aggiungere e rimuovere membri dai ruoli, nonché assegnare abilità ai ruoli." name="Roles">
+ <action description="Creare nuovi ruoli" longdescription="Crea nuovi ruoli nella sezione Ruoli &gt; scheda ruoli." name="role create"/>
+ <action description="Eliminare ruoli" longdescription="Elimina ruoli nella sezione Ruoli &gt; scheda ruoli." name="role delete"/>
+ <action description="Cambia i nomi di ruoli, i titoli, le descrizioni e definisci se i membri in quel ruolo sono resi pubblici" longdescription="Cambia i nomi di ruoli, i titoli, le descrizioni e definisci se i membri in quel ruolo sono resi pubblici Viene fatto nella parte inferiore della sezione Ruoli &gt; scheda Ruoli, dopo avere selezionato un ruolo." name="role properties"/>
+ <action description="Assegnare membri a ruoli del responsabile" longdescription="Assegna un ruolo a membri nella lista dei ruoli assegnati (sezione Ruoli &gt; scheda membri). Un utente con questa Abilità può aggiungere membri ad un ruolo nel quale il responsabile è già presente." name="role assign member limited"/>
+ <action description="Assegnare membri a qualsiasi ruolo" longdescription="Assegna i membri a qualsiasi ruolo nell&apos;elenco dei ruoli assegnati (sezione Ruoli &gt; scheda membri). *ATTENZIONE* Ogni membro con questo Ruolo e Abilità può assegnarsi -- e assegnare ad altri membri non proprietari -- ruoli con poteri maggiori di quelli normalmente concessi, potenzialmente con poteri analoghi a quelli di proprietario. Sii sicuro della scelta prima di assegnare questa Abilità." name="role assign member"/>
+ <action description="Rimuovere membri dai ruoli" longdescription="Rimuovi dai ruoli i membri nell&apos;elenco dei ruoli assegnati (sezione Ruoli &gt; scheda membri). Il proprietario non può essere rimosso." name="role remove member"/>
+ <action description="Assegnare e rimuovere abilità nei ruoli" longdescription="Assegna e Rimuovi Abilità per ogni ruolo nell&apos;elenco dei ruoli assegnati (sezione Ruoli &gt; scheda Ruoli). *ATTENZIONE* Ogni membro con questo ruolo e Abilità può assegnarsi -- ed assegnare ad altri membri non proprietari -- tutte le Abilità, che potenzialmente con poteri analoghi a quelli di proprietario. Sii sicuro della scelta prima di assegnare questa Abilità." name="role change actions"/>
</action_set>
- <action_set description="Queste Abilità permettono di modificare l&apos;identità di questo Gruppo, come il cambiamento della visibilità pubblica, lo statuto, e lo stemma." name="Group Identity">
- <action description="Cambiare lo Statuto, lo Stemma, e &apos;Mostra nel Cerca/Search&apos;" longdescription="Cambia Statuto, Immagine, e &apos;Mostra nel Cerca&apos;. Viene fatto nella sezione Generale." name="group change identity"/>
+ <action_set description="Queste abilità autorizzano a modificare l&apos;identità di questo gruppo, come ad esempio la modifica della visibilità pubblica, lo statuto e il logo." name="Group Identity">
+ <action description="Cambiare lo statuto, il logo, e &apos;Mostra nella ricerca&apos;" longdescription="Cambia statuto, logo e &apos;Mostra nella ricerca&apos;. Viene fatto nella sezione Generale." name="group change identity"/>
</action_set>
- <action_set description="Queste Abilità includono il potere di intestare, modificare, e vendere terreni di proprietà del Gruppo. Per aprire la finestra Info sul Terreno, click destro sulla terra e seleziona &apos;Info sul Terreno&apos;, o clicca l&apos;icona &apos;i&apos; sulla Barra di Navigazione." name="Parcel Management">
- <action description="Intestare terra e comprare terra per il gruppo" longdescription="Intesta terra e compra terra per il Gruppo. Viene fatto in Informazioni sul Terreno &gt; tabella Generale." name="land deed"/>
- <action description="Abbandonare la terra in favore di Governor Linden" longdescription="Abbandona la terra in favore di Governor Linden. *ATTENZIONE* Ogni Membro con questo Ruolo e Abilità può abbandonare la terra posseduta dal Gruppo in Informazioni sul Terreno &gt; tabella Generale, restituendola alla proprietà Linden senza una vendita! Devi essere sicuro di quello che fai prima di assegnare questa Abilità." name="land release"/>
- <action description="Impostare le info per la vendita della terra" longdescription="Imposta le info per la vendita della terra. *ATTENZIONE* Ogni Membro con questo Ruolo e Abilità può vendere la terra posseduta dal Gruppo in Info sul Terreno &gt; tabella Generale (al prezzo che vogliono)! Devi essere sicuro di quello che fai prima di assegnare questa Abilità." name="land set sale info"/>
- <action description="Suddividere e unire appezzamenti" longdescription="Suddividi e unisci parcel. Viene fatto con click destro sul terra, &apos;Modifica Terreno&apos;, trascinando poi il mouse sulla terra per creare una selezione. Per suddividere, seleziona quale parte vuoi dividere e clicca &apos;Suddividere&apos;. Per unire, seleziona due o più two parcel confinanti e clicca &apos;Unisci&apos;." name="land divide join"/>
+ <action_set description="Queste Abilità comprendono il potere di intestare, modificare e vendere terreni di proprietà del gruppo. Per aprire la finestra Informazioni sul terreno, fai clic con il pulsante destro del mouse sul terreno e seleziona Informazioni sul terreno, o clicca sull&apos;icona &apos;i&apos; nella Barra di Navigazione." name="Parcel Management">
+ <action description="Cessione di terreno e acquisto di terreno per il gruppo" longdescription="Intesta terreno e acquista terreno per il gruppo. Ciò viene fatto in Informazioni sul terreno &gt; scheda Generale." name="land deed"/>
+ <action description="Abbandonare il terreno in favore di Governor Linden" longdescription="Abbandona il terreno in favore di Governor Linden. *ATTENZIONE* Ogni membro con questo ruolo e abilità può abbandonare il terreno di proprietà del gruppo in Informazioni sul terreno &gt; scheda Generale, restituendolo alla proprietà Linden senza effettuare una vendita. Sii sicuro della scelta prima di assegnare questa Abilità." name="land release"/>
+ <action description="Informazioni su come impostare il terreno come in vendita" longdescription="Imposta le informazioni per la vendita del terreno. *ATTENZIONE* Ogni Membro con questo ruolo e abilità può vendere il terreno di proprietà del gruppo nella scheda Informazioni sul terreno &gt; scheda Generale. Pertanto sii sicuro della scelta prima di assegnare questa Abilità." name="land set sale info"/>
+ <action description="Suddividere e unire lotti" longdescription="Suddividi e unisci lotti. Viene fatto cliccando con il pulsante destro del mouse sul terreno, selezionando Modifica terreno e trascinando il mouse sul terreno per creare una selezione. Per suddividere, seleziona quale parte vuoi dividere e clicca su Suddividi. Per unire, seleziona due o più lotti confinanti e clicca su Unisci." name="land divide join"/>
</action_set>
- <action_set description="Queste Abilità permettono di cambiare il nome dell&apos;appezzamento, le impostazioni pre-definite, la visibilità nella mappatura, il punto di arrivo &amp; le coordinate del Teleport." name="Parcel Identity">
- <action description="Premi &apos;Mostra Luogo nel Cerca&apos; e seleziona una categoria" longdescription="Premi &apos;Mostra Luogo nel Cerca&apos; e seleziona una categoria di parcel in Info sul Terreno &gt; tabella Opzioni." name="land find places"/>
- <action description="Cambia il nome del parcel, descrizione, e impostazioni nel &apos;Mostra Luogo nel Cerca&apos;" longdescription="Cambia il nome del parcel, descrizione, e impostazioni nel &apos;Mostra Luogo nel Cerca&apos;. Viene fatto in Info sul Terreno &gt; tabella Opzioni." name="land change identity"/>
- <action description="Impostare il punto di arrivo e le coordinate del Teleport" longdescription="In un appezzamento posseduto da un Gruppo, i Membri con questo Ruolo e Abilità possono impostare un punto di arrivo per i Teleport entranti, e impostare anche le coordinate del Teleport per ulteriore precisione. Viene fatto in Informazioni sul Terreno &gt; tabella Opzioni." name="land set landing point"/>
+ <action_set description="Queste abilità permettono di cambiare il nome del lotto, le impostazioni di pubblicazione, la visibilità negli elenchi e il punto di arrivo, nonché opzioni di indirizzamento del Teleport." name="Parcel Identity">
+ <action description="Premi Mostra luogo nella ricerca e seleziona una categoria" longdescription="Premi Mostra luogo nella ricerca e seleziona una categoria di lotto in Informazioni sul terreno &gt; scheda Opzioni." name="land find places"/>
+ <action description="Cambia il nome del lotto, la descrizione e le impostazioni di Mostra luogo nella ricerca" longdescription="Cambia il nome del lotto, la descrizione e le impostazioni di Mostra luogo nella ricerca. Ciò viene fatto in Informazioni sul terreno &gt; scheda Opzioni." name="land change identity"/>
+ <action description="Impostare il punto di arrivo e l&apos;indirizzamento del Teleport" longdescription="In un lotto di proprietà di un gruppo, i membri con questo ruolo e abilità possono impostare un punto di arrivo per i teleport entranti e impostare anche l&apos;indirizzamento del teleport per ulteriore precisione. Viene fatto in Informazioni sul terreno &gt; Opzioni." name="land set landing point"/>
</action_set>
- <action_set description="Queste Abilità permettono alcune permessi nell&apos;appezzamento, quali &apos;Creare Oggetti&apos;, &apos;Editare il Terreno&apos;, trasmettere musica &amp; tabella Media." name="Parcel Settings">
- <action description="Cambiare musica &amp; tabella media" longdescription="Cambia le impostazioni per lo streaming della musica e dei video in Informazioni sul Terreno &gt; tabella Media." name="land change media"/>
- <action description="Cliccare &apos;Edita il Terreno&apos;" longdescription="Clicca &apos;Edita il Terreno&apos;. *ATTENZIONE* Informazioni sul Terreno &gt; tabella Opzioni &gt; Edita il Terreno permette a tutti di modificare la forma del terreno, collocare e spostare le piante Linden. Devi essere sicuro di quello che fai prima di assignera questa Abilità. Edita il terreno in Informazioni sul Terreno &gt; tabella Opzioni." name="land edit"/>
- <action description="Cliccare Informazioni sul Terreno &gt; Impostazione Opzioni" longdescription="Premi &apos;Salvo (nessun danno)&apos;, &apos;Vola&apos;, e permetti agli altri Residenti di: &apos;modifica Terreno&apos;, &apos;Crea&apos;, &apos;Crea Landmarks&apos;, e &apos;Scripts attivi&apos; nella terra posseduta da un Gruppo in Info sul Terreno &gt; tabella Opzioni." name="land options"/>
+ <action_set description="Queste abilità hanno poteri relativi alle opzioni dei lotti, come la creazione di oggetti, la modifica del terreno e le impostazioni per la musica e gli elementi multimediali." name="Parcel Settings">
+ <action description="Cambiare impostazioni musica e multimediali" longdescription="Cambia le impostazioni per lo streaming della musica e dei video in Informazioni sul terreno &gt; Media." name="land change media"/>
+ <action description="Attiva &apos;Modifica terreno&apos;" longdescription="Attiva &apos;Modifica terreno&apos;. *ATTENZIONE* Informazioni sul terreno &gt; Opzioni &gt; Modifica terreno consente a chiunque di modificare la forma del tuo terreno e di collocare e spostare le piante Linden. Pertanto sii sicuro della scelta prima di assegnare questa Abilità. La funzione di modifica del terreno è attivata in Informazioni sul terreno &gt; Opzioni." name="land edit"/>
+ <action description="Attivazione di parametri per Informazioni sul terreno &gt; Opzioni" longdescription="Premi Sicuro (nessun danno), Vola e consenti agli altri residenti di: modificare il terreno, costruire, creare punti di riferimento ed eseguire script nel terreno appartenente ad un gruppo in Informazioni sul terreno &gt; scheda Opzioni." name="land options"/>
</action_set>
- <action_set description="Queste Abilità permettono ai Membri di non avere restrizioni in un appezzamento posseduto da un Gruppo." name="Parcel Powers">
- <action description="Permettere sempre &apos;Edita il Terreno&apos;" longdescription="I Membri con questo Ruolo e Abilità possono editare il terreno posseduto da un Gruppo, anche se non è selezionato in Informazioni sul Terreno &gt; tabella Opzioni." name="land allow edit land"/>
- <action description="Permettere Vola Sempre&apos;" longdescription="I Membri con questo Ruolo e Abilità possono volare in un terreno posseduto da un Gruppo, anche se non è selezionato in Info sul Terreno &gt; tabella Opzioni." name="land allow fly"/>
- <action description="Permettere &apos;Crea Oggetti&apos; sempre" longdescription="I Membri con questo Ruolo e Abilità possono creare oggetti in un appezzamento posseduto da un Gruppo, anche se non è selezionato in Informazioni sul Terreno &gt; tabella Opzioni." name="land allow create"/>
- <action description="Permettere &apos;Crea Landmark&apos; sempre" longdescription="I Membri con questo Ruolo e Abilità possono creare Landmark in un appezzamento posseduto da un Gruppo , anche se non è evidenziato in Informazioni sul Terreno &gt; tabella Opzioni." name="land allow landmark"/>
- <action description="Permettere &apos;Teleportami a Casa&apos; in un appezzamento di un Gruppo" longdescription="I Membri in un Ruolo con questa Abilità possono usare il menu Mondo &gt; Landmarks &gt; Imposta come Casa su un parcel intestato ad un Gruppo." name="land allow set home"/>
+ <action_set description="Queste abilità permettono ai membri di non avere restrizioni in un lotto appartenente ad un gruppo." name="Parcel Powers">
+ <action description="Consenti sempre la modifica del terreno" longdescription="I membri con questo ruolo e abilità possono modificare il terreno appartenente ad un gruppo, anche se la funzionalità è disattivata in Informazioni sul terreno &gt; Opzioni." name="land allow edit land"/>
+ <action description="Consenti sempre il volo" longdescription=" I membri con questo ruolo e abilità possono volare in un terreno appartenente ad un gruppo, anche se la funzionalità è disattivata in Informazioni sul terreno &gt; Opzioni." name="land allow fly"/>
+ <action description="Consenti sempre la creazione di oggetti" longdescription="I membri con questo ruolo e abilità possono creare oggetti in un lotto appartenente ad un gruppo, anche se la funzionalità è disattivata in Informazioni sul terreno &gt; Opzioni." name="land allow create"/>
+ <action description="Consenti sempre la creazione di punti di riferimento" longdescription="I membri con questo ruolo e abilità possono creare punti di riferimento in un lotto appartenente ad un gruppo, anche se la funzionalità è disattivata in Informazioni sul terreno &gt; Opzioni." name="land allow landmark"/>
+ <action description="Consenti la funzione &apos;Imposta come Casa mia&apos; in un lotto di gruppo" longdescription="I membri in un ruolo con questa Abilità possono usare il menu Mondo &gt; Punti di riferimento &gt; Imposta come Casa su un lotto ceduto a questo gruppo." name="land allow set home"/>
</action_set>
- <action_set description="Queste Abilità permettono di concedere o limitare l&apos;accesso ad un appezzamento di un Gruppo, e includono Congela ed Espelli un Residente." name="Parcel Access">
- <action description="Gestire la lista degli Accessi Consentiti" longdescription="Gestisci la lista degli Accessi Consentiti in Informazioni sul Terreno &gt; tabella Accesso." name="land manage allowed"/>
- <action description="Gestire la lista degli Accessi Bloccati" longdescription="Gestisci la lista Espulsi dal parcel in Info sul Terreno &gt; tabella Accesso." name="land manage banned"/>
- <action description="Cambia le impostazioni del parcel in &apos;Vendi Pass a&apos;" longdescription="Cambia le impostazioni &apos;Vendi Pass a&apos; in Info sul Terreno &gt; tabella Accesso." name="land manage passes"/>
- <action description="Espellere e Congelare i Residenti in un appezzamento" longdescription="Membri in un Ruolo con questa Abilità possono occuparsi di un residente indesiderato in un parcel posseduto da un Gruppo, con click destro sul residente, selezionando &apos;Espelli&apos; o &apos;Immobilizza&apos;." name="land admin"/>
+ <action_set description="Queste Abilità consentono di concedere o limitare l&apos;accesso ad un lotto di un gruppo da parte di residenti, con le azioni Congela ed Espelli." name="Parcel Access">
+ <action description="Gestire la lista di accesso al lotto" longdescription="Gestisci la lista di accesso al lotto in Informazioni sul terreno &gt; Accesso." name="land manage allowed"/>
+ <action description="Gestire la lista dei residenti espulsi dal lotto" longdescription="Gestisci la lista Espulsi dal lotto in Informazioni sul terreno &gt; scheda Accesso." name="land manage banned"/>
+ <action description="Cambia le impostazioni del lotto in Vendi pass a" longdescription="Cambia le impostazioni Vendi pass a in Informazioni sul terreno &gt; scheda Accesso." name="land manage passes"/>
+ <action description="Espellere e Congelare i Residenti in un lotto" longdescription="Membri in un ruolo con questa Abilità possono occuparsi di un residente indesiderato in un lotto posseduto da un gruppo, facendo clic sul residente con il pulsante destro del mouse e selezionando Espelli o Congela." name="land admin"/>
</action_set>
- <action_set description="Queste Abilità permettono ai Membri di restituire oggetti, collocare e spostare piante Linden. Questo è utile ai Membri per ripulire da oggetti indesiderati e creare paesaggi, ma deve essere utilizzato con cura, perchè non si può annullare la restituzione degli Oggetti." name="Parcel Content">
- <action description="Restituire oggetti posseduti da un Gruppo" longdescription="Restituisci gli oggetti posseduti da un Gruppo in un appezzamento di un Gruppo in Informazioni sul Terreno &gt; tabella Oggetti." name="land return group owned"/>
- <action description="Restituire oggetti concessi ad un Gruppo" longdescription="Restituisci oggetti concessi ad un Gruppo in un appezzamento di un Gruppo in Informazioni sul Terreno &gt; tabella Oggetti." name="land return group set"/>
- <action description="Restituire oggetti estranei al Gruppo" longdescription="Restituire oggetti estranei al Gruppo in un appezzamento di un Gruppo in Info sul Terreno &gt; tabella Oggetti." name="land return non group"/>
- <action description="Creare un paesaggio utilizzando le piante Linden" longdescription="Abilità di creare paesaggi di posizionare e spostare alberi, piante, erba. Questi oggetti sono presenti nella Libreria del tuo Inventario &gt; Cartella Oggetti, o possono essere creati con il menu Crea." name="land gardening"/>
+ <action_set description="Queste abilità consentono ai membri di restituire oggetti, collocare e spostare piante Linden. Questo è utile ai membri per ripulire da oggetti indesiderati e creare paesaggi, ma deve essere utilizzato con cura, perchè la restituzione degli oggetti non può essere annullata." name="Parcel Content">
+ <action description="Restituire oggetti di proprietà di un gruppo" longdescription="Restituisci gli oggetti di proprietà di un gruppo in un appezzamento di un gruppo in Informazioni sul terreno &gt; Oggetti." name="land return group owned"/>
+ <action description="Restituire oggetti assegnati ad un gruppo" longdescription="Restituisci oggetti assegnati ad un gruppo in un lotto di un gruppo in Informazioni sul terreno &gt; Oggetti." name="land return group set"/>
+ <action description="Restituire oggetti estranei al gruppo" longdescription="Restituire oggetti estranei al gruppo in un appezzamento di un gruppo in Informazioni sul terreno &gt; Oggetti." name="land return non group"/>
+ <action description="Creare un paesaggio utilizzando le piante Linden" longdescription="Abilità di creare paesaggi e posizionare e spostare alberi, piante, erba Linden. Questi oggetti sono presenti nella Libreria del tuo Inventario &gt; cartella Oggetti, o possono essere creati con il menu Crea." name="land gardening"/>
</action_set>
- <action_set description="Queste Abilità includono il potere di intestare, modificare, vendere oggetti posseduti dal gruppo. Viene fatto in Build Tools &gt; tabella Generale. Click destro su un oggetto e Modifica per vedere le impostazioni." name="Object Management">
- <action description="Intestare oggetti ad un Gruppo" longdescription="Intesta oggetti ad un Gruppo in Build Tools &gt; tabella Generale." name="object deed"/>
- <action description="Modificare (sposta, copia, modifica) oggetti di un Gruppo" longdescription="Controlla (sposta, copia, modifica) gli oggetti posseduti da un Gruppo in Build Tools &gt; tabella Generale." name="object manipulate"/>
- <action description="Mettere in vendita oggetti di un Gruppo" longdescription="Metti in vendita oggetti posseduti da un Gruppo in Build Tools &gt; tabelle Generale." name="object set sale"/>
+ <action_set description="Queste Abilità includono il potere di cedere, modificare e vendere oggetti posseduti dal gruppo. Viene fatto negli strumenti Costruisci &gt; scheda Generale. Clic con il pulsante destro del mouse su un oggetto e Modifica per vedere le impostazioni." name="Object Management">
+ <action description="Intestare oggetti ad un gruppo" longdescription="Intesta oggetti ad un gruppo in Strumenti per costruzione &gt; scheda Generale." name="object deed"/>
+ <action description="Modificare (sposta, copia, modifica) oggetti di un gruppo" longdescription="Gestisci (sposta, copia, modifica) gli oggetti appartenenti ad un gruppo in Build Tools &gt; tabella Generale." name="object manipulate"/>
+ <action description="Mettere in vendita oggetti di un gruppo" longdescription="Metti in vendita oggetti posseduti da un Gruppo in Strumenti per costruzione &gt; scheda Generale." name="object set sale"/>
</action_set>
- <action_set description="Queste Abilità permettono di richiedere ai Membri di pagare le perdite del Gruppo e di ricevere i dividendi del Gruppo, e di limitare l&apos;accesso all&apos;account del Gruppo." name="Accounting">
- <action description="Pagare le perdite del Gruppo e ricevere i dividendi del Gruppo" longdescription="I Membri con questo Ruolo e Abilità pagheranno automaticamente le perdite del Gruppo e riceveranno i dividendi del Gruppo. Questo significa che riceveranno una porzione delle vendite di terre possedute dal gruppo (che sono risolte giornalmente), e contribuiranno anche su cose come le tasse di iscrizione dell&apos;appezzament. " name="accounting accountable"/>
+ <action_set description="Queste abilità consentono di richiedere ai membri di pagare le passività del gruppo e di ricevere i dividendi del gruppo, nonché di limitare l&apos;accesso alla cronologia finanziaria del gruppo." name="Accounting">
+ <action description="Pagare le passività del gruppo e ricevere i dividendi del gruppo" longdescription="I membri con questo ruolo e abilità pagheranno automaticamente le passività del gruppo e riceveranno i dividendi del gruppo. Questo significa che riceveranno una porzione delle vendite di terreni appartenenti al gruppo (che sono distribuite giornalmente) e contribuiranno fondi a spese come le quote di inserzione del lotto. " name="accounting accountable"/>
</action_set>
- <action_set description="Queste Abilità permettono ai Membri di spedire, ricevere, e vedere le Notice del Gruppo." name="Notices">
- <action description="Spedire Notice" longdescription="Membri in un Ruolo con questa Abilità possono spedire Notice nel Gruppo &gt; sezione Notice." name="notices send"/>
- <action description="Ricevere Notice e vedere Notice precedenti" longdescription="Membri in un ruolo con questa Abilità possono ricevere Notice e vedere Notice vecchie nel Gruppo &gt; sezione Notice." name="notices receive"/>
+ <action_set description="Queste abilità consentono ai membri di inviare, ricevere e vedere gli avvisi del gruppo." name="Notices">
+ <action description="Invia avvisi" longdescription="Membri in un ruolo con questa Abilità possono inviare avvisi tramite la sezione Gruppo &gt; Avvisi." name="notices send"/>
+ <action description="Ricevere avvisi e vedere avvisi precedenti" longdescription="Membri in un ruolo con questa Abilità possono ricevere avvisi e vedere avvisi precedenti nella sezione Gruppo &gt; Avvisi." name="notices receive"/>
</action_set>
- <action_set description="Queste Abilità permettono di concedere o limitare l&apos;accesso alle sessioni di chat e di voice chat nel gruppo." name="Chat">
- <action description="Aderire alla Chat di Gruppo" longdescription="I Membri con questo Ruolo e Abilità possono aderire alle sessioni di chat, sia scritte che in voice." name="join group chat"/>
- <action description="Aderire alla Voice Chat di Gruppo" longdescription="I Membri con questo Ruolo e Abilità possono aderire alle sessioni di Voice Chat nel gruppo. NOTA: Per poter partecipare alla Chat di Gruppo è necessario accedere alla sessione di voice chat." name="join voice chat"/>
- <action description="Moderare la Chat di Gruppo" longdescription="I Membri con questo Ruolo e Abilità possono controllare l&apos;accesso e la partecipazione alle sessioni di chat scritta e di voice chat nel Gruppo." name="moderate group chat"/>
+ <action_set description="Queste Abilità permettono di concedere o limitare l&apos;accesso alle sessioni di chat e di chat vocale nel gruppo." name="Chat">
+ <action description="Partecipare alla Chat di gruppo" longdescription="I membri con questo ruolo e abilità possono partecipare alle sessioni di chat, sia scritte che vocale." name="join group chat"/>
+ <action description="Partecipa alla Chat vocale di gruppo" longdescription=" I membri con questo ruolo e abilità possono partecipare alle sessioni di Chat vocale nel gruppo. NOTA: per poter partecipare alla Chat di gruppo è necessario accedere alla sessione di chat vocale." name="join voice chat"/>
+ <action description="Moderare la Chat di gruppo" longdescription="I membri con questo ruolo e abilità possono gestire l&apos;accesso e la partecipazione alle sessioni di chat scritta e di chat vocale nel gruppo." name="moderate group chat"/>
</action_set>
</role_actions>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_appearance.xml b/indra/newview/skins/default/xui/it/sidepanel_appearance.xml
index 8dd7bfec42..c2e99b5573 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_appearance.xml
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Vestiario" name="appearance panel">
<string name="No Outfit" value="Nessun vestiario"/>
- <filter_editor label="Filtri per il vestiario" name="Filter"/>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/>
- <button name="newlook_btn" tool_tip="Aggiungi nuovo vestiario"/>
- <dnd_button name="trash_btn" tool_tip="Rimuovi l&apos;articolo selezionato"/>
- <button label="Indossa" name="wear_btn"/>
+ <panel name="panel_currentlook">
+ <text name="currentlook_title">
+ (non salvato)
+ </text>
</panel>
+ <filter_editor label="Filtri per il vestiario" name="Filter"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml
index 23ca8b5ad8..e1ad1452ff 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="item properties" title="Caratteristiche dell&apos;articolo nell&apos;Inventario">
+<panel name="item properties" title="Profilo dell&apos;oggetto">
<panel.string name="unknown">
- (Sconosciuto)
+ (sconosciuto)
</panel.string>
<panel.string name="public">
(pubblico)
@@ -10,12 +10,13 @@
Tu puoi:
</panel.string>
<panel.string name="owner_can">
- Il Proprietario può:
+ Il proprietario può:
</panel.string>
<panel.string name="acquiredDate">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</panel.string>
- <text name="title" value="Caratteristiche dell&apos;articolo"/>
+ <text name="title" value="Profilo dell&apos;oggetto"/>
+ <text name="where" value="(Inventario)"/>
<panel label="">
<text name="LabelItemNameTitle">
Nome:
@@ -24,7 +25,7 @@
Descrizione:
</text>
<text name="LabelCreatorTitle">
- Creatore:
+ Ideatore:
</text>
<button label="Profilo..." name="BtnCreator"/>
<text name="LabelOwnerTitle">
@@ -35,36 +36,38 @@
Acquisito:
</text>
<text name="LabelAcquiredDate">
- Wed May 24 12:50:46 2006
+ mer 24 maggio 12:50:46 2006
</text>
- <text name="OwnerLabel">
- Tu:
- </text>
- <check_box label="Modifica" name="CheckOwnerModify"/>
- <check_box label="Copia" name="CheckOwnerCopy"/>
- <check_box label="Rivendi" name="CheckOwnerTransfer"/>
- <text name="AnyoneLabel">
- Chiunque:
- </text>
- <check_box label="Copia" name="CheckEveryoneCopy"/>
- <text name="GroupLabel">
- Gruppo:
- </text>
- <check_box label="Condividi" name="CheckShareWithGroup"/>
- <text name="NextOwnerLabel">
- Prossimo Proprietario:
- </text>
- <check_box label="Modifica" name="CheckNextOwnerModify"/>
- <check_box label="Copia" name="CheckNextOwnerCopy"/>
- <check_box label="Rivendi" name="CheckNextOwnerTransfer"/>
+ <panel name="perms_inv">
+ <text name="perm_modify">
+ Tu puoi:
+ </text>
+ <check_box label="Modifica" name="CheckOwnerModify"/>
+ <check_box label="Copia" name="CheckOwnerCopy"/>
+ <check_box label="Trasferisci" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ Chiunque:
+ </text>
+ <check_box label="Copia" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ Gruppo:
+ </text>
+ <check_box label="Condividi" name="CheckShareWithGroup" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/>
+ <text name="NextOwnerLabel">
+ Proprietario successivo:
+ </text>
+ <check_box label="Modifica" name="CheckNextOwnerModify"/>
+ <check_box label="Copia" name="CheckNextOwnerCopy"/>
+ <check_box label="Trasferisci" name="CheckNextOwnerTransfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
+ </panel>
<check_box label="In vendita" name="CheckPurchase"/>
<combo_box name="combobox sale copy">
<combo_box.item label="Copia" name="Copy"/>
<combo_box.item label="Originale" name="Original"/>
</combo_box>
- <spinner label="Prezzo:" name="Edit Cost"/>
- <text name="CurrencySymbol">
- L$
- </text>
+ <spinner label="Prezzo: L$" name="Edit Cost"/>
+ </panel>
+ <panel name="button_panel">
+ <button label="Annulla" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
index e5f27795be..67870d9b76 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="object properties" title="Caratteristiche dell&apos;oggetto">
+<panel name="object properties" title="Profilo dell&apos;oggetto">
<panel.string name="text deed continued">
- Intesta
+ Cessione
</panel.string>
<panel.string name="text deed">
- Intesta
+ Cessione
</panel.string>
<panel.string name="text modify info 1">
- Puoi modificare questo oggetto
+ Tu puoi modificare questo oggetto
</panel.string>
<panel.string name="text modify info 2">
- Puoi modificare questi oggetti
+ Tu puoi modificare questi oggetti
</panel.string>
<panel.string name="text modify info 3">
Non puoi modificare questo oggetto
@@ -19,101 +19,111 @@
Non puoi modificare questi oggetti
</panel.string>
<panel.string name="text modify warning">
- Questo oggetto ha parti unite
+ Questo oggetto ha parti collegate
</panel.string>
<panel.string name="Cost Default">
Prezzo: L$
</panel.string>
<panel.string name="Cost Total">
- Prezzo Totale: L$
+ Prezzo totale: L$
</panel.string>
<panel.string name="Cost Per Unit">
- Prezzo Per: L$
+ Prezzo per: L$
</panel.string>
<panel.string name="Cost Mixed">
- Prezzo assortito
+ Prezzo misto
</panel.string>
<panel.string name="Sale Mixed">
- Vendita assortita
+ Vendita mista
</panel.string>
- <panel label="">
+ <text name="title" value="Profilo dell&apos;oggetto"/>
+ <text name="where" value="(in Second Life)"/>
+ <panel label="" name="properties_panel">
<text name="Name:">
Nome:
</text>
<text name="Description:">
Descrizione:
</text>
- <text name="Creator:">
- Creatore:
+ <text name="CreatorNameLabel">
+ Ideatore:
+ </text>
+ <text name="Creator Name">
+ Erica Linden
</text>
<text name="Owner:">
Proprietario:
</text>
- <text name="Group:">
+ <text name="Owner Name">
+ Erica Linden
+ </text>
+ <text name="Group_label">
Gruppo:
</text>
- <button name="button set group" tool_tip="Scegli un gruppo per condividere i permessi di questo oggetto"/>
- <name_box initial_value="Caricando..." name="Group Name Proxy"/>
- <button label="Intesta" label_selected="Intesta" name="button deed" tool_tip="Intestando questo oggetto lo passa con i permessi del prossimo proprietario. Gli oggetti condivisi dal Gruppo possono essere intestati solo da un Officer del gruppo."/>
- <check_box label="Condividi" name="checkbox share with group" tool_tip="Permetti a tutti i Membri del gruppo impostato di condividere la tua modifica ai permessi di questo oggetto. Tu devi Intestare per consentire le restrizioni al ruolo."/>
+ <button name="button set group" tool_tip="Scegli un gruppo con cui condividere i diritti relativi all&apos;oggetto"/>
+ <name_box initial_value="Caricamento in corso..." name="Group Name Proxy"/>
+ <button label="Cessione" label_selected="Cessione" name="button deed" tool_tip="Con una cessione si trasferisce il bene con i diritti al proprietario successivo Gli oggetti in proprietà condivisa di gruppo possono essere ceduti soltanto da un funzionario del gruppo."/>
<text name="label click action">
- Clicca per:
+ Fai clic per:
</text>
<combo_box name="clickaction">
- <combo_box.item label="Tocca (default)" name="Touch/grab(default)"/>
- <combo_box.item label="Siedi sull&apos;oggetto" name="Sitonobject"/>
- <combo_box.item label="Compra l&apos;oggetto" name="Buyobject"/>
- <combo_box.item label="Paga l&apos;ogggetto" name="Payobject"/>
+ <combo_box.item label="Tocca (predefinito)" name="Touch/grab(default)"/>
+ <combo_box.item label="Siediti sull&apos;oggetto" name="Sitonobject"/>
+ <combo_box.item label="Acquista oggetto" name="Buyobject"/>
+ <combo_box.item label="Paga oggetto" name="Payobject"/>
<combo_box.item label="Apri" name="Open"/>
</combo_box>
- <check_box label="In Vendita:" name="checkbox for sale"/>
- <combo_box name="sale type">
- <combo_box.item label="Copia" name="Copy"/>
- <combo_box.item label="Contenuti" name="Contents"/>
- <combo_box.item label="Originale" name="Original"/>
- </combo_box>
- <spinner label="Prezzo: L$" name="Edit Cost"/>
- <check_box label="Mostra nella ricerca" name="search_check" tool_tip="Mostra questo oggetto nei risultati della ricerca"/>
- <panel name="perms_build">
+ <panel name="perms_inv">
<text name="perm_modify">
- Puoi modificare questo oggetto
+ Tu puoi modificare questo oggetto
</text>
<text name="Anyone can:">
Chiunque:
</text>
- <check_box label="Sposta" name="checkbox allow everyone move"/>
<check_box label="Copia" name="checkbox allow everyone copy"/>
- <text name="Next owner can:">
- Prossimo Proprietario:
+ <check_box label="Sposta" name="checkbox allow everyone move"/>
+ <text name="GroupLabel">
+ Gruppo:
+ </text>
+ <check_box label="Condividi" name="checkbox share with group" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/>
+ <text name="NextOwnerLabel">
+ Proprietario successivo:
</text>
<check_box label="Modifica" name="checkbox next owner can modify"/>
<check_box label="Copia" name="checkbox next owner can copy"/>
- <check_box label="Transfer" name="checkbox next owner can transfer" tool_tip="Prossimo proprietario può regalare o rivendere questo oggetto"/>
- <text name="B:">
- B:
- </text>
- <text name="O:">
- O:
- </text>
- <text name="G:">
- G:
- </text>
- <text name="E:">
- E:
- </text>
- <text name="N:">
- N:
- </text>
- <text name="F:">
- F:
- </text>
+ <check_box label="Trasferisci" name="checkbox next owner can transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
</panel>
+ <check_box label="In vendita" name="checkbox for sale"/>
+ <combo_box name="sale type">
+ <combo_box.item label="Copia" name="Copy"/>
+ <combo_box.item label="Contenuto" name="Contents"/>
+ <combo_box.item label="Originale" name="Original"/>
+ </combo_box>
+ <spinner label="Prezzo: L$" name="Edit Cost"/>
+ <check_box label="Mostra nella ricerca" name="search_check" tool_tip="Permetti alle persone di vedere questo oggetto nei risultati della ricerca"/>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Apri" name="open_btn"/>
<button label="Paga" name="pay_btn"/>
- <button label="Compra" name="buy_btn"/>
- <button label="Cancella" name="cancel_btn"/>
- <button label="Salva" name="save_btn"/>
+ <button label="Acquista" name="buy_btn"/>
+ <button label="Dettagli" name="details_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 910e6e0960..a1b570d716 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- This file contains strings that used to be hardcoded in the source.
It is only for those strings which do not belong in a floater.
- For example, the strings used in avatar chat bubbles, and strings
+ For example, the strings used in avatar chat bubbles, and strings
that are returned from one component and may appear in many places-->
<strings>
<string name="SECOND_LIFE">
@@ -10,6 +10,9 @@
<string name="APP_NAME">
Second Life
</string>
+ <string name="CAPITALIZED_APP_NAME">
+ SECOND LIFE
+ </string>
<string name="SUPPORT_SITE">
Portale di supporto di Second Life
</string>
@@ -17,13 +20,28 @@
Ricerca hardware...
</string>
<string name="StartupLoading">
- In Caricamento
+ Caricamento di [APP_NAME]...
+ </string>
+ <string name="StartupClearingCache">
+ Pulizia della cache...
+ </string>
+ <string name="StartupInitializingTextureCache">
+ Inizializzazione della cache texture...
+ </string>
+ <string name="StartupInitializingVFS">
+ Inizializzazione VFS...
+ </string>
+ <string name="ProgressRestoring">
+ Ripristino in corso...
+ </string>
+ <string name="ProgressChangingResolution">
+ Modifica della risoluzione...
</string>
<string name="LoginInProgress">
In connessione. [APP_NAME] può sembrare rallentata. Attendi.
</string>
<string name="LoginInProgressNoFrozen">
- Logging in...
+ Accesso in corso...
</string>
<string name="LoginAuthenticating">
In autenticazione
@@ -79,8 +97,11 @@
<string name="LoginFailedNoNetwork">
Errore di rete: Non è stato possibile stabilire un collegamento, controlla la tua connessione.
</string>
+ <string name="LoginFailed">
+ Accesso non riuscito.
+ </string>
<string name="Quit">
- Termina
+ Esci
</string>
<string name="create_account_url">
http://join.secondlife.com/index.php?lang=it-IT
@@ -88,6 +109,24 @@
<string name="AgentLostConnection">
Questa regione sta avendo problemi. Verifica la tua connessione a Internet.
</string>
+ <string name="SavingSettings">
+ Salvataggio delle impostazioni...
+ </string>
+ <string name="LoggingOut">
+ Uscita...
+ </string>
+ <string name="ShuttingDown">
+ Chiusura...
+ </string>
+ <string name="YouHaveBeenDisconnected">
+ Sei scollegato dalla regione in cui ti trovavi.
+ </string>
+ <string name="SentToInvalidRegion">
+ Sei stato indirizzato in una regione non valida.
+ </string>
+ <string name="TestingDisconnect">
+ Verifica scollegamento viewer
+ </string>
<string name="TooltipPerson">
Persona
</string>
@@ -140,7 +179,25 @@
Clicca per avere maggiori informazioni sul luogo
</string>
<string name="TooltipAgentUrl">
- Clicca per vedere il profilo del residente
+ Clicca per vedere il profilo di questo residente
+ </string>
+ <string name="TooltipAgentMute">
+ Clicca per disattivare l&apos;audio di questo residente
+ </string>
+ <string name="TooltipAgentUnmute">
+ Clicca per attivare l&apos;audio del residente
+ </string>
+ <string name="TooltipAgentIM">
+ Clicca per inviare un IM a questo residente
+ </string>
+ <string name="TooltipAgentPay">
+ Clicca per pagare il residente
+ </string>
+ <string name="TooltipAgentOfferTeleport">
+ Fai clic per inviare un&apos;offerta di teleport al residente
+ </string>
+ <string name="TooltipAgentRequestFriend">
+ Fai clic per inviare una richiesta di amicizia al residente
</string>
<string name="TooltipGroupUrl">
Clicca per vedere la descrizione del gruppo
@@ -152,10 +209,10 @@
Clicca per vedere questa inserzione
</string>
<string name="TooltipParcelUrl">
- Clicca per vedere la descrizione della parcel
+ Clicca per vedere la descrizione del lotto
</string>
<string name="TooltipTeleportUrl">
- Clicca per teleportarti a questa destinazione
+ Clicca per effettuare il teleport a questa destinazione
</string>
<string name="TooltipObjectIMUrl">
Clicca per vedere la descrizione dell&apos;oggetto
@@ -166,15 +223,34 @@
<string name="TooltipSLAPP">
Clicca per avviare il comando secondlife://
</string>
- <string name="CurrentURL" value=" URL attuale: [CurrentURL]"/>
+ <string name="CurrentURL" value="URL attuale: [CurrentURL]"/>
+ <string name="TooltipPrice" value="L$ [PRICE]-"/>
<string name="SLurlLabelTeleport">
Teleportati a
</string>
<string name="SLurlLabelShowOnMap">
Mostra la mappa per
</string>
+ <string name="SLappAgentMute">
+ Disattiva audio
+ </string>
+ <string name="SLappAgentUnmute">
+ Riattiva audio
+ </string>
+ <string name="SLappAgentIM">
+ IM
+ </string>
+ <string name="SLappAgentPay">
+ Paga
+ </string>
+ <string name="SLappAgentOfferTeleport">
+ Offri teleport a
+ </string>
+ <string name="SLappAgentRequestFriend">
+ Richiesta di amicizia
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
- Chiudi (&#8984;W)
+ Chiudi (⌘W)
</string>
<string name="BUTTON_CLOSE_WIN">
Chiudi (Ctrl+W)
@@ -191,14 +267,11 @@
<string name="BUTTON_DOCK">
Àncora
</string>
- <string name="BUTTON_UNDOCK">
- Disàncora
- </string>
<string name="BUTTON_HELP">
- Mostra gli aiuti
+ Mostra Aiuto
</string>
<string name="Searching">
- In ricerca...
+ Ricerca in corso...
</string>
<string name="NoneFound">
Nessun risultato.
@@ -218,9 +291,6 @@
<string name="AvatarNameWaiting">
(in attesa)
</string>
- <string name="AvatarNameHippos">
- (hippos)
- </string>
<string name="GroupNameNone">
(nessuno)
</string>
@@ -267,19 +337,19 @@
biglietto da visita
</string>
<string name="landmark">
- landmark
+ punto di riferimento
</string>
<string name="legacy script">
script (vecchia versione)
</string>
<string name="clothing">
- abito
+ vestiario
</string>
<string name="object">
oggetto
</string>
<string name="note card">
- notecard
+ biglietto
</string>
<string name="folder">
cartella
@@ -309,7 +379,7 @@
immagine targa
</string>
<string name="trash">
- cestino
+ Cestino
</string>
<string name="jpeg image">
immagine jpeg
@@ -329,6 +399,9 @@
<string name="symbolic link">
link
</string>
+ <string name="symbolic folder link">
+ link alla cartella
+ </string>
<string name="AvatarAway">
Assente
</string>
@@ -546,7 +619,7 @@
Si
</string>
<string name="texture_loading">
- In Caricamento...
+ Caricamento in corso...
</string>
<string name="worldmap_offline">
Offline
@@ -581,6 +654,9 @@
<string name="hang_up">
Disconnesso dalla Voice Chat in-world
</string>
+ <string name="reconnect_nearby">
+ Sarai riconnesso alla chat vocale nei dintorni
+ </string>
<string name="ScriptQuestionCautionChatGranted">
A &apos;[OBJECTNAME]&apos;, un oggetto di proprietà di &apos;[OWNERNAME]&apos;, situato in [REGIONNAME] [REGIONPOS], è stato concesso il permesso di: [PERMISSIONS].
</string>
@@ -684,25 +760,25 @@
Scegli la cartella
</string>
<string name="AvatarSetNotAway">
- Imposta non assente
+ Imposta come non assente
</string>
<string name="AvatarSetAway">
- Imposta assente
+ Imposta come assente
</string>
<string name="AvatarSetNotBusy">
- Imposta non occupato
+ Imposta come non occupato
</string>
<string name="AvatarSetBusy">
- Imposta occupato
+ Imposta come occupato
</string>
<string name="shape">
- Shape
+ Figura corporea
</string>
<string name="skin">
- Skin
+ Pelle
</string>
<string name="hair">
- Capelli
+ Capigliature
</string>
<string name="eyes">
Occhi
@@ -717,7 +793,7 @@
Scarpe
</string>
<string name="socks">
- Calze
+ Calzini
</string>
<string name="jacket">
Giacca
@@ -729,7 +805,7 @@
Maglietta intima
</string>
<string name="underpants">
- slip
+ Slip
</string>
<string name="skirt">
Gonna
@@ -743,17 +819,20 @@
<string name="invalid">
non valido
</string>
+ <string name="NewWearable">
+ Nuovo [WEARABLE_ITEM]
+ </string>
<string name="next">
- Seguente
+ Avanti
</string>
<string name="ok">
OK
</string>
<string name="GroupNotifyGroupNotice">
- Notice di gruppo
+ Avviso di gruppo
</string>
<string name="GroupNotifyGroupNotices">
- Notice di gruppo
+ Avvisi di gruppo
</string>
<string name="GroupNotifySentBy">
Inviato da
@@ -762,7 +841,7 @@
Allegato:
</string>
<string name="GroupNotifyViewPastNotices">
- Visualizza i notice passati o scegli qui di non riceverne.
+ Visualizza gli avvisi precedenti o scegli qui di non riceverne.
</string>
<string name="GroupNotifyOpenAttachment">
Apri l&apos;allegato
@@ -771,13 +850,10 @@
Salva l&apos;allegato
</string>
<string name="TeleportOffer">
- Offerta di Teletrasporto
- </string>
- <string name="StartUpNotification">
- [%d] una nuova notifica è arrivata mentre eri assente...
+ Offerta di Teleport
</string>
<string name="StartUpNotifications">
- [%d] nuove notifice sono arrivate mentre eri assente...
+ Mentre eri assente sono arrivate nuove notifiche...
</string>
<string name="OverflowInfoChannelString">
Hai ancora [%d] notifiche
@@ -813,46 +889,49 @@
Premi ESC per tornare in visulizzazione normale
</string>
<string name="InventoryNoMatchingItems">
- Nessun oggetto corrispondente trovato in inventario.
+ Nessun oggetto corrispondente trovato in inventario. Prova [secondlife:///app/search/groups &quot;Cerca&quot;].
+ </string>
+ <string name="FavoritesNoMatchingItems">
+ Trascina qui un punto di riferimento per aggiungerlo ai tuoi preferiti.
</string>
<string name="InventoryNoTexture">
- Non hai una copia
-di questa texture in inventario.
- </string>
- <string name="no_transfer" value=" (no transfer)"/>
- <string name="no_modify" value=" (no modify)"/>
- <string name="no_copy" value=" (no copy)"/>
- <string name="worn" value=" (indossato)"/>
- <string name="link" value=" (link)"/>
- <string name="broken_link" value=" (broken_link)"/>
+ Non hai una copia di questa texture nel tuo inventario
+ </string>
+ <string name="no_transfer" value="(nessun trasferimento)"/>
+ <string name="no_modify" value="(nessuna modifica)"/>
+ <string name="no_copy" value="(nessuna copia)"/>
+ <string name="worn" value="(indossato)"/>
+ <string name="link" value="(link)"/>
+ <string name="broken_link" value="(broken_link)&quot;"/>
<string name="LoadingContents">
- Contenuto in caricamento...
+ Caricamento del contenuto...
</string>
<string name="NoContents">
Nessun contenuto
</string>
- <string name="WornOnAttachmentPoint" value=" (indossato su [ATTACHMENT_POINT])"/>
- <string name="Chat" value=" Chat :"/>
- <string name="Sound" value=" Suono :"/>
- <string name="Wait" value=" --- Attendi :"/>
- <string name="AnimFlagStop" value=" Ferma l&apos;Animazione :"/>
- <string name="AnimFlagStart" value=" Inizia l&apos;Animazione :"/>
- <string name="Wave" value=" Wave"/>
- <string name="HelloAvatar" value=" Ciao, avatar!"/>
- <string name="ViewAllGestures" value=" Visualizza tutte le gesture &gt;&gt;"/>
- <string name="Animations" value=" Animazioni,"/>
- <string name="Calling Cards" value=" Biglietti da visita,"/>
- <string name="Clothing" value=" Vestiti,"/>
- <string name="Gestures" value=" Gesture,"/>
- <string name="Landmarks" value=" Landmark,"/>
- <string name="Notecards" value=" Notecard,"/>
- <string name="Objects" value=" Oggetti,"/>
- <string name="Scripts" value=" Script,"/>
- <string name="Sounds" value=" Suoni,"/>
- <string name="Textures" value=" Texture,"/>
- <string name="Snapshots" value=" Fotografie,"/>
- <string name="No Filters" value="No "/>
- <string name="Since Logoff" value=" - Dalla disconnessione"/>
+ <string name="WornOnAttachmentPoint" value="(indossato su [ATTACHMENT_POINT])"/>
+ <string name="ActiveGesture" value="[GESLABEL] (attivo)"/>
+ <string name="Chat" value="Chat :"/>
+ <string name="Sound" value="Suono :"/>
+ <string name="Wait" value="--- Attendi :"/>
+ <string name="AnimFlagStop" value="Ferma l&apos;animazione :"/>
+ <string name="AnimFlagStart" value="Inizia l&apos;animazione :"/>
+ <string name="Wave" value="Saluta con la mano"/>
+ <string name="HelloAvatar" value="Ciao, avatar!"/>
+ <string name="ViewAllGestures" value="Visualizza tutto &gt;&gt;"/>
+ <string name="Animations" value="Animazioni,"/>
+ <string name="Calling Cards" value="Biglietti da visita,"/>
+ <string name="Clothing" value="Vestiti,"/>
+ <string name="Gestures" value="Gesture,"/>
+ <string name="Landmarks" value="Punti di riferimento,"/>
+ <string name="Notecards" value="Biglietti,"/>
+ <string name="Objects" value="Oggetti,"/>
+ <string name="Scripts" value="Script,"/>
+ <string name="Sounds" value="Suoni,"/>
+ <string name="Textures" value="Texture,"/>
+ <string name="Snapshots" value="Fotografie,"/>
+ <string name="No Filters" value="No"/>
+ <string name="Since Logoff" value="- Dall&apos;uscita"/>
<string name="InvFolder My Inventory">
Il mio inventario
</string>
@@ -869,22 +948,22 @@ di questa texture in inventario.
Suoni
</string>
<string name="InvFolder Calling Cards">
- Biglieti da visita
+ Biglietti da visita
</string>
<string name="InvFolder Landmarks">
- Landmark
+ Punti di riferimento
</string>
<string name="InvFolder Scripts">
Script
</string>
<string name="InvFolder Clothing">
- Vestiti
+ Vestiario
</string>
<string name="InvFolder Objects">
Oggetti
</string>
<string name="InvFolder Notecards">
- Notecard
+ Biglietti
</string>
<string name="InvFolder New Folder">
Nuova cartella
@@ -920,22 +999,25 @@ di questa texture in inventario.
Preferiti
</string>
<string name="InvFolder Current Outfit">
- Outfit attuale
+ Abbigliamento attuale
</string>
<string name="InvFolder My Outfits">
- I miei Outfit
+ Il mio vestiario
+ </string>
+ <string name="InvFolder Accessories">
+ Accessori
</string>
<string name="InvFolder Friends">
Amici
</string>
<string name="InvFolder All">
- Tutti
+ Tutto
</string>
<string name="Buy">
- Compra
+ Acquista
</string>
<string name="BuyforL$">
- Compra per L$
+ Acquista per L$
</string>
<string name="Stone">
Pietra
@@ -962,7 +1044,7 @@ di questa texture in inventario.
Luce
</string>
<string name="KBShift">
- Shift
+ Maiusc
</string>
<string name="KBCtrl">
Ctrl
@@ -1112,13 +1194,13 @@ di questa texture in inventario.
[COUNT] giorni
</string>
<string name="GroupMembersA">
- [COUNT] membro
+ [COUNT] iscritto
</string>
<string name="GroupMembersB">
- [COUNT] membri
+ [COUNT] iscritti
</string>
<string name="GroupMembersC">
- [COUNT] membri
+ [COUNT] iscritti
</string>
<string name="AcctTypeResident">
Residente
@@ -1127,10 +1209,10 @@ di questa texture in inventario.
In prova
</string>
<string name="AcctTypeCharterMember">
- Membro onorario
+ Socio onorario
</string>
<string name="AcctTypeEmployee">
- Impiegato Linden Lab
+ Dipendente Linden Lab
</string>
<string name="PaymentInfoUsed">
Informazioni di pagamento usate
@@ -1139,7 +1221,7 @@ di questa texture in inventario.
Informazioni di pagamento registrate
</string>
<string name="NoPaymentInfoOnFile">
- Nessuna informazione di pagamento
+ Nessuna informazione di pagamento disponibile
</string>
<string name="AgeVerified">
Età verificata
@@ -1154,7 +1236,7 @@ di questa texture in inventario.
In alto a destra
</string>
<string name="Top">
- In alto
+ in alto
</string>
<string name="Top Left">
In alto a sinistra
@@ -1196,22 +1278,22 @@ di questa texture in inventario.
ricompila
</string>
<string name="ResetQueueTitle">
- Avanzamento reset
+ Azzera avanzamento
</string>
<string name="ResetQueueStart">
- reset
+ azzera
</string>
<string name="RunQueueTitle">
- Avanzamento attivazione
+ Attiva avanzamento
</string>
<string name="RunQueueStart">
- Attiva
+ attiva
</string>
<string name="NotRunQueueTitle">
- Avanzamento disattivazione
+ Disattiva avanzamento
</string>
<string name="NotRunQueueStart">
- Disattivazione
+ disattiva
</string>
<string name="CompileSuccessful">
Compilazione riuscita!
@@ -1231,18 +1313,18 @@ di questa texture in inventario.
<string name="GroupsNone">
nessuno
</string>
- <string name="Group" value=" (gruppo)"/>
+ <string name="Group" value="(gruppo)"/>
<string name="Unknown">
(Sconosciuto)
</string>
<string name="SummaryForTheWeek" value="Riassunto della settimana, partendo dal"/>
- <string name="NextStipendDay" value="Il prossimo giorno di stipendio è "/>
- <string name="GroupIndividualShare" value=" Gruppo Dividendi individuali"/>
+ <string name="NextStipendDay" value="Il prossimo giorno di stipendio è"/>
+ <string name="GroupIndividualShare" value="Gruppo Dividendi individuali"/>
<string name="Balance">
Saldo
</string>
<string name="Credits">
- Crediti
+ Ringraziamenti
</string>
<string name="Debits">
Debiti
@@ -1257,7 +1339,7 @@ di questa texture in inventario.
Proprietà principale
</string>
<string name="IMMainland">
- mainland
+ continente
</string>
<string name="IMTeen">
teen
@@ -1266,20 +1348,173 @@ di questa texture in inventario.
errore
</string>
<string name="RegionInfoAllEstatesOwnedBy">
- la proprietà posseduta da [OWNER]
+ tutte le proprietà immobiliari di [OWNER]
</string>
<string name="RegionInfoAllEstatesYouOwn">
- Le proprietà che possiedi
+ tutte le tue proprietà immobiliari
</string>
<string name="RegionInfoAllEstatesYouManage">
- Le proprietà di cui sei manager per conto di [OWNER]
+ tutte le proprietà immobiliari che gestisci per conto di [OWNER]
</string>
<string name="RegionInfoAllowedResidents">
- Residenti ammessi: ([ALLOWEDAGENTS], massimo [MAXACCESS])
+ Residenti consentiti: ([ALLOWEDAGENTS], massimo [MAXACCESS])
</string>
<string name="RegionInfoAllowedGroups">
Gruppi ammessi: ([ALLOWEDGROUPS], massimo [MAXACCESS])
</string>
+ <string name="ScriptLimitsParcelScriptMemory">
+ Memoria dello script del lotto
+ </string>
+ <string name="ScriptLimitsParcelsOwned">
+ Lotti in elenco: [PARCELS]
+ </string>
+ <string name="ScriptLimitsMemoryUsed">
+ Memoria utilizzata: [COUNT] kb di [MAX] kb; [AVAILABLE] kb disponibili
+ </string>
+ <string name="ScriptLimitsMemoryUsedSimple">
+ Memoria utilizzata: [COUNT] kb
+ </string>
+ <string name="ScriptLimitsParcelScriptURLs">
+ URL degli script lotti
+ </string>
+ <string name="ScriptLimitsURLsUsed">
+ URL utilizzati: [COUNT] di [MAX]; [AVAILABLE] disponibili
+ </string>
+ <string name="ScriptLimitsURLsUsedSimple">
+ URL utilizzati: [COUNT]
+ </string>
+ <string name="ScriptLimitsRequestError">
+ Errore nella richiesta di informazioni
+ </string>
+ <string name="ScriptLimitsRequestNoParcelSelected">
+ Nessun lotto selezionato
+ </string>
+ <string name="ScriptLimitsRequestWrongRegion">
+ Errore: le informazioni sullo script sono disponibili solo nella tua regione attuale
+ </string>
+ <string name="ScriptLimitsRequestWaiting">
+ Recupero informazioni in corso...
+ </string>
+ <string name="ScriptLimitsRequestDontOwnParcel">
+ Non hai il permesso di visionare questo lotto
+ </string>
+ <string name="SITTING_ON">
+ Seduto su
+ </string>
+ <string name="ATTACH_CHEST">
+ Petto
+ </string>
+ <string name="ATTACH_HEAD">
+ Testa
+ </string>
+ <string name="ATTACH_LSHOULDER">
+ Spalla sinistra
+ </string>
+ <string name="ATTACH_RSHOULDER">
+ Spalla destra
+ </string>
+ <string name="ATTACH_LHAND">
+ Mano sinistra
+ </string>
+ <string name="ATTACH_RHAND">
+ Mano destra
+ </string>
+ <string name="ATTACH_LFOOT">
+ Piede sinisto
+ </string>
+ <string name="ATTACH_RFOOT">
+ Piede destro
+ </string>
+ <string name="ATTACH_BACK">
+ Indietro
+ </string>
+ <string name="ATTACH_PELVIS">
+ Pelvi
+ </string>
+ <string name="ATTACH_MOUTH">
+ Bocca
+ </string>
+ <string name="ATTACH_CHIN">
+ Mento
+ </string>
+ <string name="ATTACH_LEAR">
+ Orecchio sinistro
+ </string>
+ <string name="ATTACH_REAR">
+ Orecchio destro
+ </string>
+ <string name="ATTACH_LEYE">
+ Occhio sinistro
+ </string>
+ <string name="ATTACH_REYE">
+ Occhio destro
+ </string>
+ <string name="ATTACH_NOSE">
+ Naso
+ </string>
+ <string name="ATTACH_RUARM">
+ Braccio destro
+ </string>
+ <string name="ATTACH_RLARM">
+ Avambraccio destro
+ </string>
+ <string name="ATTACH_LUARM">
+ Braccio sinistro
+ </string>
+ <string name="ATTACH_LLARM">
+ Avambraccio sinistro
+ </string>
+ <string name="ATTACH_RHIP">
+ Anca destra
+ </string>
+ <string name="ATTACH_RULEG">
+ Coscia destra
+ </string>
+ <string name="ATTACH_RLLEG">
+ Coscia destra
+ </string>
+ <string name="ATTACH_LHIP">
+ Anca sinista
+ </string>
+ <string name="ATTACH_LULEG">
+ Coscia sinistra
+ </string>
+ <string name="ATTACH_LLLEG">
+ Polpaccio sinistro
+ </string>
+ <string name="ATTACH_BELLY">
+ Addome
+ </string>
+ <string name="ATTACH_RPEC">
+ Petto destro
+ </string>
+ <string name="ATTACH_LPEC">
+ Petto sinistro
+ </string>
+ <string name="ATTACH_HUD_CENTER_2">
+ HUD in centro 2
+ </string>
+ <string name="ATTACH_HUD_TOP_RIGHT">
+ HUD alto a destra
+ </string>
+ <string name="ATTACH_HUD_TOP_CENTER">
+ HUD alto in centro
+ </string>
+ <string name="ATTACH_HUD_TOP_LEFT">
+ HUD alto a sinistra
+ </string>
+ <string name="ATTACH_HUD_CENTER_1">
+ HUD in centro 1
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_LEFT">
+ HUD basso a sinistra
+ </string>
+ <string name="ATTACH_HUD_BOTTOM">
+ HUD basso
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_RIGHT">
+ HUD basso a destra
+ </string>
<string name="CursorPos">
Riga [LINE], Colonna [COLUMN]
</string>
@@ -1287,13 +1522,19 @@ di questa texture in inventario.
[COUNT] trovato/i
</string>
<string name="PanelContentsNewScript">
- Nuovo Script
+ Nuovo script
+ </string>
+ <string name="PanelContentsTooltip">
+ Contenuto dell&apos;oggetto
+ </string>
+ <string name="BusyModeResponseDefault">
+ Il residente al quale hai inviato un messaggio è in modalità &apos;occupato&apos;, ovvero ha chiesto di non essere disturbato. Il tuo messaggio comparirà nel suo pannello IM, dove potrà essere letto in un secondo momento.
</string>
<string name="MuteByName">
- (per nome)
+ (in base al nome)
</string>
<string name="MuteAgent">
- (residente)
+ (Residente)
</string>
<string name="MuteObject">
(oggetto)
@@ -1302,18 +1543,18 @@ di questa texture in inventario.
(gruppo)
</string>
<string name="RegionNoCovenant">
- Non esiste nessun regolamento per questa proprietà.
+ Non esiste alcun regolamento per questa proprietà.
</string>
<string name="RegionNoCovenantOtherOwner">
- Non esiste nessun regolamento per questa proprietà. Il terreno di questa proprietà è messo in vendita dal proprietario, non dalla Linden Lab. Contatta il proprietario del terreno per i dettagli della vendita.
+ Non esiste alcun regolamento per questa proprietà. Il terreno di questa proprietà è messo in vendita dal proprietario, non dalla Linden Lab. Contatta il proprietario del terreno per i dettagli della vendita.
</string>
<string name="covenant_last_modified">
Ultima modifica:
</string>
- <string name="none_text" value=" (nessuno) "/>
- <string name="never_text" value=" (mai) "/>
+ <string name="none_text" value="(nessuno)"/>
+ <string name="never_text" value="(mai)"/>
<string name="GroupOwned">
- Posseduta da un gruppo
+ Di proprietà di un gruppo
</string>
<string name="Public">
Pubblica
@@ -1324,26 +1565,35 @@ di questa texture in inventario.
<string name="ClassifiedUpdateAfterPublish">
(si aggiornerà dopo la pubblicazione)
</string>
+ <string name="NoPicksClassifiedsText">
+ Non hai creato luoghi preferiti né inserzioni. Clicca il pulsante più qui sotto per creare un luogo preferito o un&apos;inserzione.
+ </string>
+ <string name="NoAvatarPicksClassifiedsText">
+ L&apos;utente non ha luoghi preferiti né inserzioni
+ </string>
+ <string name="PicksClassifiedsLoadingText">
+ Caricamento in corso...
+ </string>
<string name="MultiPreviewTitle">
Anteprima
</string>
<string name="MultiPropertiesTitle">
- Proprietà
+ Beni immobiliari
</string>
<string name="InvOfferAnObjectNamed">
- Un oggetto chiamato
+ Un oggetto denominato
</string>
<string name="InvOfferOwnedByGroup">
- Posseduto dal gruppo
+ di proprietà del gruppo
</string>
<string name="InvOfferOwnedByUnknownGroup">
- Posseduto da un gruppo sconosciuto
+ di proprietà di un gruppo sconosciuto
</string>
<string name="InvOfferOwnedBy">
- Posseduto da
+ di proprietà di
</string>
<string name="InvOfferOwnedByUnknownUser">
- Posseduto da un&apos;utente sconosciuto
+ di proprietà di un utente sconosciuto
</string>
<string name="InvOfferGaveYou">
Ti ha offerto
@@ -1379,7 +1629,7 @@ di questa texture in inventario.
Saldo
</string>
<string name="GroupMoneyCredits">
- Crediti
+ Ringraziamenti
</string>
<string name="GroupMoneyDebits">
Debiti
@@ -1391,32 +1641,38 @@ di questa texture in inventario.
Oggetti acquisiti
</string>
<string name="Cancel">
- Cancella
+ Annulla
</string>
<string name="UploadingCosts">
- Costi di caricamento [%s]
+ Il caricamento di [NAME] costa L$ [AMOUNT]
+ </string>
+ <string name="BuyingCosts">
+ L&apos;acquisto di [NAME] costa L$ [AMOUNT]
</string>
<string name="UnknownFileExtension">
Estensione del file sconosciuta [.%s]
Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
</string>
+ <string name="MuteObject2">
+ Blocca
+ </string>
<string name="AddLandmarkNavBarMenu">
- Aggiungi landmark...
+ Aggiungi punto di riferimento...
</string>
<string name="EditLandmarkNavBarMenu">
- Modifica landmark...
+ Modifica punto di riferimento...
</string>
<string name="accel-mac-control">
- &#8963;
+ ⌃
</string>
<string name="accel-mac-command">
- &#8984;
+ ⌘
</string>
<string name="accel-mac-option">
- &#8997;
+ ⌥
</string>
<string name="accel-mac-shift">
- &#8679;
+ ⇧
</string>
<string name="accel-win-control">
Ctrl+
@@ -1428,22 +1684,22 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Shift+
</string>
<string name="FileSaved">
- File Salvato
+ File salvato
</string>
<string name="Receiving">
In ricezione
</string>
<string name="AM">
- AM
+ antemeridiane
</string>
<string name="PM">
- PM
+ pomeridiane
</string>
<string name="PST">
- PST
+ Ora Pacifico
</string>
<string name="PDT">
- PDT
+ Ora legale Pacifico
</string>
<string name="Forward">
Avanti
@@ -1455,7 +1711,7 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Destra
</string>
<string name="Back">
- Dietro
+ Indietro
</string>
<string name="North">
Nord
@@ -1476,13 +1732,13 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Giù
</string>
<string name="Any Category">
- Tutte le categorie
+ Qualsiasi categoria
</string>
<string name="Shopping">
- Shopping
+ Acquisti
</string>
<string name="Land Rental">
- Affitto terreni
+ Affitto terreno
</string>
<string name="Property Rental">
Affitto proprietà
@@ -1494,13 +1750,13 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Nuovi prodotti
</string>
<string name="Employment">
- Impiego
+ Lavoro
</string>
<string name="Wanted">
- Richiesti
+ Cercasi
</string>
<string name="Service">
- Servizi
+ Servizio
</string>
<string name="Personal">
Personale
@@ -1539,7 +1795,7 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Residenziale
</string>
<string name="Stage">
- Stage
+ Fase
</string>
<string name="Other">
Altro
@@ -1551,10 +1807,10 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Tu
</string>
<string name="Multiple Media">
- Media Multipli
+ Più supporti
</string>
<string name="Play Media">
- Media Play/Pausa
+ Riproduci/Pausa supporto
</string>
<string name="MBCmdLineError">
Un errore è stato riscontrato analizzando la linea di comando.
@@ -1562,17 +1818,17 @@ Per informazioni: http://wiki.secondlife.com/wiki/Client_parameters
Errore:
</string>
<string name="MBCmdLineUsg">
- uso linea di comando del programma [APP_NAME] :
+ Uso linea di comando del programma [APP_NAME] :
</string>
<string name="MBUnableToAccessFile">
Il programma [APP_NAME] non è in grado di accedere ad un file necessario.
-Potrebbe darsi che tu abbia copie multiple attivate, o il tuo sistema reputa erroneamente che il file sia già aperto.
+Potrebbe darsi che tu abbia copie multiple attivate o che il tuo sistema reputi erroneamente che il file sia già aperto.
Se il problema persiste, riavvia il computer e riprova.
-Se il problema persiste ancora, dovresti completamente disinstallare l&apos;applicazione [APP_NAME] e reinstallarla.
+Se il problema continua ancora, dovresti completamente disinstallare l&apos;applicazione [APP_NAME] e reinstallarla.
</string>
<string name="MBFatalError">
- Errore fatale
+ Errore critico
</string>
<string name="MBRequiresAltiVec">
Il programma [APP_NAME] richiede un processore con AltiVec (G4 o superiore).
@@ -1591,7 +1847,7 @@ Vuoi mandare un crash report?
</string>
<string name="MBNoDirectX">
Il programmma [APP_NAME] non riesce a trovare una DirectX 9.0b o superiore.
-[APP_NAME] usa le DirectX per determinare hardware e/o i driver non aggiornati che possono causare problemi di stabilità, scarsa performance e interruzioni. Sebbene tu possa avviare il programma [APP_NAME] senza di esse, raccomandiamo caldamente di installare le DirectX 9.0b.
+[APP_NAME] usa DirectX per rilevare hardware e/o i driver non aggiornati che possono causare problemi di stabilità, scarsa performance e interruzioni. Benché tu possa avviare il programma [APP_NAME] senza di esse, consigliamo caldamente l&apos;esecuzione con DirectX 9.0b.
Vuoi continuare?
</string>
@@ -1599,8 +1855,8 @@ Vuoi continuare?
Attenzione
</string>
<string name="MBNoAutoUpdate">
- L&apos;aggiornamento automatico non è stato ancora implementato per Linux.
-Raccomandiamo di scaricare l&apos;utima versione da www.secondlife.com.
+ L&apos;aggiornamento automatico non è stato ancora realizzato per Linux.
+Consigliamo di scaricare l&apos;ultima versione direttamente da www.secondlife.com.
</string>
<string name="MBRegClassFailed">
RegisterClass non riuscito
@@ -1609,8 +1865,8 @@ Raccomandiamo di scaricare l&apos;utima versione da www.secondlife.com.
Errore
</string>
<string name="MBFullScreenErr">
- Impossibile visualizzare a schermo intero a risoluzione [WIDTH] x [HEIGHT].
-Visualizzazione corrente ridotta a finestra.
+ Impossibile visualizzare a schermo intero con risoluzione [WIDTH] x [HEIGHT].
+Visualizzazione corrente in modalità finestra.
</string>
<string name="MBDestroyWinFailed">
Errore di arresto durante il tentativo di chiusura della finestra (DestroyWindow() non riuscito)
@@ -1628,14 +1884,14 @@ Visualizzazione corrente ridotta a finestra.
Impossibile ottenere una descrizione del formato pixel
</string>
<string name="MBTrueColorWindow">
- [APP_NAME] richiede True Color (32-bit) per funzionare.
-Vai alle impostazioni dello schermo del tuo computer e imposta il colore in modalità 32-bit.
+ [APP_NAME] richiede True Color (32 bit) per funzionare.
+Vai alle impostazioni dello schermo del tuo computer e imposta il colore in modalità 32 bit.
</string>
<string name="MBAlpha">
- [APP_NAME] non funziona poichè è impossibile trovare un canale alpha ad 8 Bit. Questo problema normalmente deriva dai driver della scheda video.
+ [APP_NAME] non funziona poichè è impossibile trovare un canale alpha a 8 bit. Questo problema normalmente deriva dai driver della scheda video.
Assicurati di avere installato i driver della scheda video più recenti.
-Assicurati anche che il monitor sia impostato a True Color (32-bit) nel pannello di controllo &gt; Display &gt; Settings.
-Se il messaggio persiste, contatta contatta [SUPPORT_SITE].
+Assicurati anche che il monitor sia impostato a True Color (32 bit) nel Pannello di controllo &gt; Schermo &gt; Impostazioni.
+Se il messaggio persiste, contatta [SUPPORT_SITE].
</string>
<string name="MBPixelFmtSetErr">
Impossibile impostare il formato pixel
@@ -1647,7 +1903,7 @@ Se il messaggio persiste, contatta contatta [SUPPORT_SITE].
Impossibile attivare il GL rendering
</string>
<string name="MBVideoDrvErr">
- [APP_NAME] Non riesce ad avviarsi perchè i driver della tua scheda video non sono stati installati correttamente, non sono aggiornati, o sono per un hardware non supportato. Assicurati di avere i driver della scheda video più recenti e anche se li hai installati, prova a reinstallarli di nuovo.
+ [APP_NAME] Non riesce ad avviarsi perchè i driver della tua scheda video non sono stati installati correttamente, non sono aggiornati, o sono per un hardware non supportato. Assicurati di avere i driver della scheda video più recenti e anche se li hai installati, prova a installarli di nuovo.
Se il messaggio persiste, contatta [SUPPORT_SITE].
</string>
@@ -1672,44 +1928,20 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Attached Earlobes">
Lobi attaccati
</string>
- <string name="Back Bangs">
- #Back Bangs
- </string>
- <string name="Back Bangs Down">
- #Back Bangs Down
- </string>
- <string name="Back Bangs Up">
- #Back Bangs Up
- </string>
<string name="Back Fringe">
Frangetta all&apos;indietro
</string>
- <string name="Back Hair">
- #Back Hair
- </string>
- <string name="Back Hair Down">
- #Back Hair Down
- </string>
- <string name="Back Hair Up">
- #Back Hair Up
- </string>
<string name="Baggy">
- Con le borse
+ Larghi
</string>
<string name="Bangs">
Frange
</string>
- <string name="Bangs Down">
- #Bangs Down
- </string>
- <string name="Bangs Up">
- #Bangs Up
- </string>
<string name="Beady Eyes">
Occhi piccoli
</string>
<string name="Belly Size">
- punto vita
+ Punto vita
</string>
<string name="Big">
Grande
@@ -1717,23 +1949,20 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Big Butt">
Sedere grande
</string>
- <string name="Big Eyeball">
- #Big Eyeball
- </string>
<string name="Big Hair Back">
- Gonfiore dei capelli: dietro
+ Capigliatura grande: Indietro
</string>
<string name="Big Hair Front">
- Gonfiore dei capelli: davanti
+ Capigliatura grande: anteriore
</string>
<string name="Big Hair Top">
- Gonfiore dei capelli: sopra
+ Capigliatura grande: in alto
</string>
<string name="Big Head">
- Grandezza testa
+ Grande testa
</string>
<string name="Big Pectorals">
- Grandezza pettorali
+ Grandi pettorali
</string>
<string name="Big Spikes">
Capelli con punte
@@ -1766,13 +1995,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Lentiggini e nei
</string>
<string name="Body Thick">
- Corpo robusto
+ Corpo più robusto
</string>
<string name="Body Thickness">
Robustezza del corpo
</string>
<string name="Body Thin">
- Magrezza del corpo
+ Corpo più magro
</string>
<string name="Bow Legged">
Gambe arcuate
@@ -1781,7 +2010,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Altezza del seno
</string>
<string name="Breast Cleavage">
- Avvicinamento dei seni
+ Décolleté
</string>
<string name="Breast Size">
Grandezza del seno
@@ -1796,7 +2025,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Grandezza delle sopracciglia
</string>
<string name="Bug Eyes">
- Sporgenza degli occhi
+ Occhi sporgenti
</string>
<string name="Bugged Eyes">
Occhi sporgenti
@@ -1817,19 +2046,19 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Grandezza del sedere
</string>
<string name="bustle skirt">
- Arricciatura posteriore
+ Crinolina
</string>
<string name="no bustle">
- Meno arricciatura
+ Nessuna crinolina
</string>
<string name="more bustle">
- Più arricciatura
+ Più crinolina
</string>
<string name="Chaplin">
Baffetti
</string>
<string name="Cheek Bones">
- Mascella
+ Zigomi
</string>
<string name="Chest Size">
Ampiezza del torace
@@ -1838,7 +2067,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Angolo del mento
</string>
<string name="Chin Cleft">
- Fessura inf. del mento
+ Fossetta sul mento
</string>
<string name="Chin Curtains">
Barba sottomento
@@ -1847,16 +2076,16 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Profondità mento
</string>
<string name="Chin Heavy">
- Appuntita verso l&apos;alto
+ Mento forte
</string>
<string name="Chin In">
Mento in dentro
</string>
<string name="Chin Out">
- Mento in fuori
+ Mento sporgente
</string>
<string name="Chin-Neck">
- Grandezza mento-collo
+ Mento-collo
</string>
<string name="Clear">
Trasparente
@@ -1871,46 +2100,40 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Chiusa
</string>
<string name="Closed Back">
- Spacco chiuso dietro
+ Chiuso dietro
</string>
<string name="Closed Front">
- Spacco chiuso davanti
+ Chiuso davanti
</string>
<string name="Closed Left">
- Spacco chiuso sx
+ Chiuso sinistra
</string>
<string name="Closed Right">
- Spacco chiuso dx
+ Chiuso destra
</string>
<string name="Coin Purse">
Meno pronunciati
</string>
<string name="Collar Back">
- Scollatura posteriore
+ Colletto posteriore
</string>
<string name="Collar Front">
- Scollatura anteriore
+ Colletto anteriore
</string>
<string name="Corner Down">
Angolo all&apos;ingiù
</string>
- <string name="Corner Normal">
- Angolo Normale
- </string>
<string name="Corner Up">
Angolo all&apos;insù
</string>
<string name="Creased">
- Alzato
+ Piega
</string>
<string name="Crooked Nose">
Naso storto
</string>
- <string name="Cropped Hair">
- Capelli raccolti
- </string>
<string name="Cuff Flare">
- Fondo pantalone
+ Svasato con risvolto
</string>
<string name="Dark">
Scuro
@@ -1922,49 +2145,43 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Più scuro
</string>
<string name="Deep">
- Più pronunciato
+ Profondo
</string>
<string name="Default Heels">
Tacchi standard
</string>
- <string name="Default Toe">
- Punta del piede standard
- </string>
<string name="Dense">
- Meno rade
- </string>
- <string name="Dense hair">
- #Dense Hair
+ Folti
</string>
<string name="Double Chin">
Doppio mento
</string>
<string name="Downturned">
- Naso all&apos;ingiù
+ All&apos;ingiù
</string>
<string name="Duffle Bag">
Più pronunciati
</string>
<string name="Ear Angle">
- Orecchie a sventola
+ Angolo orecchie
</string>
<string name="Ear Size">
Grandezza orecchie
</string>
<string name="Ear Tips">
- Tipo di orecchio
+ Estremità orecchie
</string>
<string name="Egg Head">
Ovalizzazione testa
</string>
<string name="Eye Bags">
- Borse sotto agli occhi
+ Occhiaie
</string>
<string name="Eye Color">
Colore degli occhi
</string>
<string name="Eye Depth">
- Occhi incavati
+ Profondità degli occhi
</string>
<string name="Eye Lightness">
Luminosità degli occhi
@@ -1973,7 +2190,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Apertura degli occhi
</string>
<string name="Eye Pop">
- Differenza apertura occhi
+ Prominenza degli occhi
</string>
<string name="Eye Size">
Grandezza occhi
@@ -1981,9 +2198,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Eye Spacing">
Distanza occhi
</string>
- <string name="Eyeball Size">
- #Eyeball Size
- </string>
<string name="Eyebrow Arc">
Arco delle sopracciglia
</string>
@@ -2008,69 +2222,21 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Eyeliner Color">
Colore dell&apos;eyeliner
</string>
- <string name="Eyes Back">
- #Eyes Back
- </string>
<string name="Eyes Bugged">
Occhi sporgenti
</string>
- <string name="Eyes Forward">
- #Eyes Forward
- </string>
- <string name="Eyes Long Head">
- #Eyes Long Head
- </string>
- <string name="Eyes Shear Left Up">
- Distorsione occhi in alto a sx
- </string>
- <string name="Eyes Shear Right Up">
- Distorsione occhi in alto a dx
- </string>
- <string name="Eyes Short Head">
- #Eyes Short Head
- </string>
- <string name="Eyes Spread">
- #Eyes Spread
- </string>
- <string name="Eyes Sunken">
- #Eyes Sunken
- </string>
- <string name="Eyes Together">
- #Eyes Together
- </string>
<string name="Face Shear">
- Distorsione del viso
+ Taglio del viso
</string>
<string name="Facial Definition">
- Lineamenti del viso
+ Definizione del viso
</string>
<string name="Far Set Eyes">
Occhi distanti
</string>
- <string name="Fat">
- #Fat
- </string>
- <string name="Fat Head">
- #Fat Head
- </string>
<string name="Fat Lips">
Labbra carnose
</string>
- <string name="Fat Lower">
- #Fat Lower
- </string>
- <string name="Fat Lower Lip">
- Labbro inferiore sporgente
- </string>
- <string name="Fat Torso">
- #Fat Torso
- </string>
- <string name="Fat Upper">
- #Fat Upper
- </string>
- <string name="Fat Upper Lip">
- Labbro superiore sporgente
- </string>
<string name="Female">
Femmina
</string>
@@ -2081,7 +2247,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Dita
</string>
<string name="Flared Cuffs">
- Fondo largo
+ Risvolti svasati
</string>
<string name="Flat">
Piatto
@@ -2090,88 +2256,73 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Sedere piatto
</string>
<string name="Flat Head">
- Viso piatto
+ Testa piatta
</string>
<string name="Flat Toe">
Punta piatta
</string>
<string name="Foot Size">
- Grandezza piede
+ Misura piede
</string>
<string name="Forehead Angle">
Angolo della fronte
</string>
<string name="Forehead Heavy">
- Appuntita verso il basso
+ Fronte sporgente
</string>
<string name="Freckles">
Lentiggini
</string>
- <string name="Front Bangs Down">
- #Front Bangs Down
- </string>
- <string name="Front Bangs Up">
- #Front Bangs Up
- </string>
<string name="Front Fringe">
Frangetta
</string>
- <string name="Front Hair">
- #Front Hair
- </string>
- <string name="Front Hair Down">
- #Front Hair Down
- </string>
- <string name="Front Hair Up">
- #Front Hair Up
- </string>
<string name="Full Back">
- Scostati
+ Dietro gonfi
</string>
<string name="Full Eyeliner">
- Con eyeliner
+ Eyeliner marcato
</string>
<string name="Full Front">
- Anteriore pieno
+ Anteriore gonfio
</string>
<string name="Full Hair Sides">
- Riempimento lati
+ Lati capelli gonfi
</string>
<string name="Full Sides">
- Pieni
+ Lati gonfi
</string>
<string name="Glossy">
Lucido
</string>
<string name="Glove Fingers">
- Dita dei guanti
+ Dita con guanti
</string>
<string name="Glove Length">
Lunghezza guanti
</string>
<string name="Hair">
- Capelli
+ Capigliature
</string>
<string name="Hair Back">
- Capelli: dietro
+ Capelli: Indietro
</string>
<string name="Hair Front">
- Capelli: davanti
+ Capelli: anteriore
</string>
<string name="Hair Sides">
Capelli: lati
</string>
<string name="Hair Sweep">
- Traslazione
+ Direzione capigliatura
</string>
<string name="Hair Thickess">
- Spessore
+ Foltezza
</string>
<string name="Hair Thickness">
- Spessore barba
+ Foltezza
</string>
<string name="Hair Tilt">
- Rotazione capelli
+ Inclinazione
</string>
<string name="Hair Tilted Left">
Verso sinistra
@@ -2180,16 +2331,16 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Verso destra
</string>
<string name="Hair Volume">
- Capelli: volume
+ Capelli: Volume
</string>
<string name="Hand Size">
Grandezza mani
</string>
<string name="Handlebars">
- Baffi lunghi
+ Baffi a manubrio
</string>
<string name="Head Length">
- Sporgenza del viso
+ Lunghezza testa
</string>
<string name="Head Shape">
Forma della testa
@@ -2198,7 +2349,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Grandezza della testa
</string>
<string name="Head Stretch">
- Compressione lat testa
+ Allungamento testa
</string>
<string name="Heel Height">
Altezza tacchi
@@ -2222,7 +2373,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Alta
</string>
<string name="High and Tight">
- Cavallo alto
+ Alto e stretto
</string>
<string name="Higher">
Più alto
@@ -2267,7 +2418,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Forma del mento
</string>
<string name="Join">
- Avvicinati
+ Iscriviti
</string>
<string name="Jowls">
Guance
@@ -2297,7 +2448,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Meno
</string>
<string name="Less Body Fat">
- Meno grasso
+ Meno grasso corporeo
</string>
<string name="Less Curtains">
Meno
@@ -2339,16 +2490,16 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Meno
</string>
<string name="Lighter">
- Più chiaro
+ Più leggero
</string>
<string name="Lip Cleft">
- Distanza divis. labbro sup.
+ Distanza fossetta labbro
</string>
<string name="Lip Cleft Depth">
- Prof. spacco labbro sup.
+ Prof. fossetta labbro
</string>
<string name="Lip Fullness">
- Riempimento delle labbra
+ Volume labbra
</string>
<string name="Lip Pinkness">
Tonalità rosa labbra
@@ -2375,7 +2526,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Lungo
</string>
<string name="Long Head">
- Viso sporgente
+ Testa lunga
</string>
<string name="Long Hips">
Bacino alto
@@ -2387,7 +2538,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Collo lungo
</string>
<string name="Long Pigtails">
- Ciuffi laterali lunghi
+ Codini lunghi
</string>
<string name="Long Ponytail">
Codino lungo
@@ -2398,17 +2549,14 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Long arms">
Braccia lunghe
</string>
- <string name="Longcuffs">
- Longcuffs
- </string>
<string name="Loose Pants">
- Non attillati
+ Pantaloni ampi
</string>
<string name="Loose Shirt">
- Non attillata
+ Camicia ampia
</string>
<string name="Loose Sleeves">
- Maniche lente
+ Maniche non attillate
</string>
<string name="Love Handles">
Maniglie dell&apos;amore
@@ -2426,7 +2574,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Bassa
</string>
<string name="Low and Loose">
- Cavallo basso
+ Basso e ampio
</string>
<string name="Lower">
Più basso
@@ -2435,7 +2583,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Parte bassa del setto
</string>
<string name="Lower Cheeks">
- Guance
+ Guance inferiori
</string>
<string name="Male">
Maschio
@@ -2444,13 +2592,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Riga nel mezzo
</string>
<string name="More">
- Di più
+ Altro
</string>
<string name="More Blush">
Più fard
</string>
<string name="More Body Fat">
- Più grasso
+ Più grasso corporeo
</string>
<string name="More Curtains">
Più
@@ -2519,7 +2667,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Posizione della bocca
</string>
<string name="Mowhawk">
- Vuoti
+ Moicana
</string>
<string name="Muscular">
Muscolatura
@@ -2563,9 +2711,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="No Eyeshadow">
Senza ombretto
</string>
- <string name="No Heels">
- No Heels
- </string>
<string name="No Lipgloss">
Senza lipgloss
</string>
@@ -2597,10 +2742,10 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Superiore normale
</string>
<string name="Nose Left">
- Storto a sinistra
+ Naso a sinistra
</string>
<string name="Nose Right">
- Storto a destra
+ Naso a destra
</string>
<string name="Nose Size">
Grandezza naso
@@ -2623,20 +2768,17 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Nostril Width">
Larghezza narici
</string>
- <string name="Old">
- Vecchio
- </string>
<string name="Opaque">
Opaco
</string>
<string name="Open">
- Aperto
+ Apri
</string>
<string name="Open Back">
Retro aperto
</string>
<string name="Open Front">
- Aperto Frontale
+ Davanti aperto
</string>
<string name="Open Left">
Lato sin. aperto
@@ -2672,7 +2814,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Genitali
</string>
<string name="Painted Nails">
- Unghie colorate
+ Unghie smaltate
</string>
<string name="Pale">
Pallido
@@ -2687,7 +2829,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Lunghezza pantaloni
</string>
<string name="Pants Waist">
- Altezza slip
+ Taglia pantalone
</string>
<string name="Pants Wrinkles">
Pantaloni con le grinze
@@ -2705,7 +2847,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Pigmento
</string>
<string name="Pigtails">
- Ciuffi
+ Codini
</string>
<string name="Pink">
Rosa
@@ -2725,9 +2867,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Pointy Heels">
Tacchi a spillo
</string>
- <string name="Pointy Toe">
- Punta appuntita
- </string>
<string name="Ponytail">
Codino
</string>
@@ -2752,15 +2891,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Red Hair">
Presenza di rosso nei capelli
</string>
- <string name="Red Skin">
- Red Skin
- </string>
<string name="Regular">
Normale
</string>
- <string name="Regular Muscles">
- Muscolatura normale
- </string>
<string name="Right Part">
Riga a destra
</string>
@@ -2770,9 +2903,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Round">
Rotondo
</string>
- <string name="Round Forehead">
- Round Forehead
- </string>
<string name="Ruddiness">
Rossore
</string>
@@ -2785,53 +2915,35 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Saddle Bags">
Rotondità fianchi
</string>
- <string name="Saddlebags">
- Rotondità fianchi
- </string>
- <string name="Scrawny">
- Scrawny
- </string>
<string name="Scrawny Leg">
Gambe magre
</string>
<string name="Separate">
Separati
</string>
- <string name="Shading">
- Shading
- </string>
- <string name="Shadow hair">
- Shadow hair
- </string>
<string name="Shallow">
Meno pronunciato
</string>
<string name="Shear Back">
- Accostamento posteriore
+ Taglio posteriore
</string>
<string name="Shear Face">
- Distorsione viso
+ Taglio del viso
</string>
<string name="Shear Front">
- Riempimento davanti
- </string>
- <string name="Shear Left">
- A sinistra
+ Taglio anteriore
</string>
<string name="Shear Left Up">
Distorto a sinistra
</string>
- <string name="Shear Right">
- A destra
- </string>
<string name="Shear Right Up">
Distorto a destra
</string>
<string name="Sheared Back">
- Accostati
+ Taglio verso dietro
</string>
<string name="Sheared Front">
- Anteriormente vuoto
+ Taglio verso davanti
</string>
<string name="Shift Left">
A sinistra
@@ -2867,10 +2979,10 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Collo corto
</string>
<string name="Short Pigtails">
- Ciuffi laterali corti
+ Codini corti
</string>
<string name="Short Ponytail">
- Codino Corto
+ Codino corto
</string>
<string name="Short Sideburns">
Basette corte
@@ -2884,15 +2996,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Shoulders">
Spalle
</string>
- <string name="Side Bangs">
- Side Bangs
- </string>
- <string name="Side Bangs Down">
- Side Bangs Down
- </string>
- <string name="Side Bangs Up">
- Side Bangs Up
- </string>
<string name="Side Fringe">
Ciuffi laterali
</string>
@@ -2900,16 +3003,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Basette
</string>
<string name="Sides Hair">
- Capigliatura later.
+ Capigliatura di lato
</string>
<string name="Sides Hair Down">
- Giù
+ Capigliatura di lato sciolta
</string>
<string name="Sides Hair Up">
- Su
- </string>
- <string name="Skinny">
- Skinny
+ Capigliatura di lato raccolta
</string>
<string name="Skinny Neck">
Collo fino
@@ -2930,19 +3030,19 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Morbidezza maniche
</string>
<string name="Slit Back">
- Spacco: posteriore
+ Spacco: Indietro
</string>
<string name="Slit Front">
Spacco: anteriore
</string>
<string name="Slit Left">
- Spacco: sinistro
+ Spacco: Sinistra
</string>
<string name="Slit Right">
- Spacco: destro
+ Spacco: Destra
</string>
<string name="Small">
- Piccolo
+ Piccola
</string>
<string name="Small Hands">
Mani piccole
@@ -2959,9 +3059,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Socks Length">
Lunghezza calze
</string>
- <string name="Some">
- Some
- </string>
<string name="Soulpatch">
Pizzetto labbro inferiore
</string>
@@ -2980,9 +3077,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Squash Head">
Testa schiacciata
</string>
- <string name="Squash/Stretch Head">
- Testa Schiacciata/Allungata
- </string>
<string name="Stretch Head">
Testa allungata
</string>
@@ -3001,18 +3095,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Sweep Forward">
Avanti
</string>
- <string name="Swept Back">
- Swept Back
- </string>
- <string name="Swept Back Hair">
- Swept Back Hair
- </string>
- <string name="Swept Forward">
- Swept Forward
- </string>
- <string name="Swept Forward Hair">
- Swept Forward Hair
- </string>
<string name="Tall">
Alto
</string>
@@ -3031,44 +3113,35 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="Thick Toe">
Punta spessa
</string>
- <string name="Thickness">
- Thickness
- </string>
<string name="Thin">
- Ossute
+ Sottili
</string>
<string name="Thin Eyebrows">
- Sopracciglia fini
+ Sopracciglia sottili
</string>
<string name="Thin Lips">
- Labbra fini
+ Labbra sottili
</string>
<string name="Thin Nose">
- Naso fino
+ Naso sottile
</string>
<string name="Tight Chin">
- Mento magro
+ Mento stretto
</string>
<string name="Tight Cuffs">
Fondo stretto
</string>
<string name="Tight Pants">
- Attillati
+ Pantaloni attillati
</string>
<string name="Tight Shirt">
- Attilata
+ Camicia attillata
</string>
<string name="Tight Skirt">
- Attillata
+ Gonna attillata
</string>
<string name="Tight Sleeves">
- Attillate
- </string>
- <string name="Tilt Left">
- Tilt Left
- </string>
- <string name="Tilt Right">
- Tilt Right
+ Maniche strette
</string>
<string name="Toe Shape">
Forma della punta
@@ -3089,7 +3162,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Distaccato
</string>
<string name="Uncreased">
- Abbassato
+ Senza piega
</string>
<string name="Underbite">
Denti inf. in fuori
@@ -3104,13 +3177,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Parte alta degli zigomi
</string>
<string name="Upper Chin Cleft">
- Fessura sup. del mento
+ Fossetta sup. del mento
</string>
<string name="Upper Eyelid Fold">
Piega palpebra sup.
</string>
<string name="Upturned">
- Naso all&apos;insù
+ All&apos;insù
</string>
<string name="Very Red">
Molto rossi
@@ -3125,13 +3198,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Capelli bianchi
</string>
<string name="Wide">
- Spalancati
+ Largo
</string>
<string name="Wide Back">
- Laterali post. larghi
+ Dietro largo
</string>
<string name="Wide Front">
- Laterali ant. larghi
+ Davanti largo
</string>
<string name="Wide Lips">
Labbra larghe
@@ -3143,31 +3216,31 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Grinze
</string>
<string name="LocationCtrlAddLandmarkTooltip">
- Aggiungi ai miei landmark
+ Aggiungi ai miei punti di riferimento
</string>
<string name="LocationCtrlEditLandmarkTooltip">
- Modifica i miei landmark
+ Modifica i miei punti di riferimento
</string>
<string name="LocationCtrlInfoBtnTooltip">
- maggiori informazioni sulla posizione attuale
+ Maggiori informazioni sulla posizione attuale
</string>
<string name="LocationCtrlComboBtnTooltip">
- Lo storico delle mie posizioni
+ La cronologia delle mie posizioni
</string>
<string name="UpdaterWindowTitle">
Aggiornamento [APP_NAME]
</string>
<string name="UpdaterNowUpdating">
- [APP_NAME] In aggiornamento...
+ Aggiornamento di [APP_NAME]...
</string>
<string name="UpdaterNowInstalling">
- [APP_NAME] In installazione...
+ Installazione di [APP_NAME]...
</string>
<string name="UpdaterUpdatingDescriptive">
- Il Viewer del programma [APP_NAME] si sta aggiornando all&apos;ultima versione. Potrebbe volerci del tempo, attendi.
+ Il Viewer del programma [APP_NAME] si sta aggiornando all&apos;ultima versione. Potrebbe volerci del tempo, attendi.
</string>
<string name="UpdaterProgressBarTextWithEllipses">
- Aggiornamento in download...
+ Download dell&apos;aggiornamento...
</string>
<string name="UpdaterProgressBarText">
Download dell&apos;aggiornamento
@@ -3176,13 +3249,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
Download dell&apos;aggiornamento non riuscito
</string>
<string name="UpdaterFailUpdateDescriptive">
- Il programma [APP_NAME] ha riscontrato un&apos;errore nel tentativo di aggiornamento. Consigliamo di scaricare l&apos;ultima versione direttamente da www.secondlife.com.
+ Il programma [APP_NAME] ha riscontrato un&apos;errore durante il tentativo di aggiornamento. Consigliamo di scaricare l&apos;ultima versione direttamente da www.secondlife.com.
</string>
<string name="UpdaterFailInstallTitle">
- Tentativo di installazione aggiornamento non riuscito
+ Installazione dell&apos;aggiornamento non riuscita
</string>
<string name="UpdaterFailStartTitle">
- Errore nell&apos;apertura del viewer
+ Errore nell&apos;avvio del viewer
</string>
<string name="IM_logging_string">
-- Registrazione messaggi instantanei abilitata --
@@ -3194,7 +3267,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
(anonimo)
</string>
<string name="IM_moderated_chat_label">
- (Moderato: Voice spento di default)
+ (Moderato: Voci disattivate di default)
</string>
<string name="IM_unavailable_text_label">
La chat di testo non è disponibile per questa chiamata.
@@ -3203,7 +3276,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
La chat di testo è stata disabilitata da un moderatore di gruppo.
</string>
<string name="IM_default_text_label">
- Clicca qua per inviare un messaggio instantaneo.
+ Clicca qui per inviare un messaggio instantaneo.
</string>
<string name="IM_to_label">
A
@@ -3211,6 +3284,21 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="IM_moderator_label">
(Moderatore)
</string>
+ <string name="started_call">
+ Chiamata vocale iniziata
+ </string>
+ <string name="joined_call">
+ Si è collegato alla chiamata in voce
+ </string>
+ <string name="ringing-im">
+ Collegamento alla chiamata vocale...
+ </string>
+ <string name="connected-im">
+ Collegato, clicca Chiudi chiamata per agganciare
+ </string>
+ <string name="hang_up-im">
+ Chiusa la chiamata
+ </string>
<string name="only_user_message">
Sei l&apos;unico utente di questa sessione.
</string>
@@ -3220,6 +3308,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="invite_message">
Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat.
</string>
+ <string name="muted_message">
+ Hai bloccato questo residente. Quando gli invii un messaggio, verrà automaticamente sbloccato.
+ </string>
+ <string name="generic">
+ Errore nella richiesta, riprova più tardi.
+ </string>
<string name="generic_request_error">
Errore durante la richiesta, riprova più tardi.
</string>
@@ -3238,19 +3332,153 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="not_a_mod_error">
Non sei un moderatore.
</string>
+ <string name="muted">
+ Il moderatore del gruppo ha disattivato la tua chat di testo.
+ </string>
<string name="muted_error">
Un moderatore di gruppo ti ha disabilitato dalla chat di testo.
</string>
<string name="add_session_event">
Impossibile aggiungere utenti alla chat con [RECIPIENT].
</string>
+ <string name="message">
+ Impossibile spedire il tuo messaggio nella sessione chat con [RECIPIENT].
+ </string>
<string name="message_session_event">
Impossibile inviare il messaggio nella chat con [RECIPIENT].
</string>
+ <string name="mute">
+ Errore durante la moderazione.
+ </string>
+ <string name="removed">
+ Sei stato rimosso dal gruppo.
+ </string>
<string name="removed_from_group">
Sei stato espulso dal gruppo.
</string>
<string name="close_on_no_ability">
Non hai più le abilitazioni per rimanere nella sessione chat.
</string>
+ <string name="unread_chat_single">
+ [SOURCES] ha detto qualcosa di nuovo
+ </string>
+ <string name="unread_chat_multiple">
+ [SOURCES] ha detto qualcosa di nuovo
+ </string>
+ <string name="paid_you_ldollars">
+ [NAME] ti ha inviato un pagamento di L$[AMOUNT].
+ </string>
+ <string name="you_paid_ldollars">
+ Hai inviato un pagamento di L$[AMOUNT] a [NAME] [REASON].
+ </string>
+ <string name="you_paid_ldollars_no_reason">
+ Hai inviato un pagamento di L$[AMOUNT] a [NAME].
+ </string>
+ <string name="you_paid_ldollars_no_name">
+ Hai pagato L$ [AMOUNT] [REASON].
+ </string>
+ <string name="for a parcel of land">
+ per un lotto di terreno
+ </string>
+ <string name="for a land access pass">
+ per un permesso di accesso al terreno
+ </string>
+ <string name="for deeding land">
+ per la cessione di terreno
+ </string>
+ <string name="to create a group">
+ per creare un gruppo
+ </string>
+ <string name="to join a group">
+ per aderire a un gruppo
+ </string>
+ <string name="to upload">
+ per caricare
+ </string>
+ <string name="giving">
+ Contributo di L$ [AMOUNT]
+ </string>
+ <string name="uploading_costs">
+ Il costo per il caricamento è di L$ [AMOUNT]
+ </string>
+ <string name="this_costs">
+ Il costo è L$ [AMOUNT]
+ </string>
+ <string name="buying_selected_land">
+ L&apos;acquisto del terreno prescelto costa L$ [AMOUNT]
+ </string>
+ <string name="this_object_costs">
+ Il costo dell&apos;oggetto è L$ [AMOUNT]
+ </string>
+ <string name="group_role_everyone">
+ Tutti
+ </string>
+ <string name="group_role_officers">
+ Funzionari
+ </string>
+ <string name="group_role_owners">
+ Proprietari
+ </string>
+ <string name="uploading_abuse_report">
+ Caricamento in corso...
+
+Segnala abuso
+ </string>
+ <string name="New Shape">
+ Nuova figura corporea
+ </string>
+ <string name="New Skin">
+ Nuova pelle
+ </string>
+ <string name="New Hair">
+ Nuovi capelli
+ </string>
+ <string name="New Eyes">
+ Nuovi occhi
+ </string>
+ <string name="New Shirt">
+ Nuova camicia
+ </string>
+ <string name="New Pants">
+ Nuovi pantaloni
+ </string>
+ <string name="New Shoes">
+ Nuove scarpe
+ </string>
+ <string name="New Socks">
+ Nuove calze
+ </string>
+ <string name="New Jacket">
+ Nuova giacca
+ </string>
+ <string name="New Gloves">
+ Nuovi guanti
+ </string>
+ <string name="New Undershirt">
+ Nuova maglietta intima
+ </string>
+ <string name="New Underpants">
+ Nuovi slip
+ </string>
+ <string name="New Skirt">
+ Nuova gonna
+ </string>
+ <string name="New Alpha">
+ Nuovo Alpha (trasparenza)
+ </string>
+ <string name="New Tattoo">
+ Nuovo tatuaggio
+ </string>
+ <string name="Invalid Wearable">
+ Capo da indossare non valido
+ </string>
+ <string name="New Script">
+ Nuovo script
+ </string>
+ <string name="New Folder">
+ Nuova cartella
+ </string>
+ <string name="Contents">
+ Contenuto
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/it/teleport_strings.xml b/indra/newview/skins/default/xui/it/teleport_strings.xml
index eff7516050..c11d41f6b9 100644
--- a/indra/newview/skins/default/xui/it/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/it/teleport_strings.xml
@@ -2,12 +2,12 @@
<teleport_messages>
<message_set name="errors">
<message name="invalid_tport">
- C&apos;è stato un problema nell&apos;elaborare la tua richiesta di teleport. Potresti aver bisogno di ricollegarti prima di poter usare il teleport. Se continui ad avere problemi, controlla per favore le FAQ del Supporto Tecnico a:
-www.secondlife.com/support.
+ C&apos;è stato un problema nell&apos;elaborare la tua richiesta di teleport. Potresti dover effettuare nuovamente l&apos;accesso prima di poter usare il teleport.
+Se si continua a visualizzare questo messaggio, consulta la pagina [SUPPORT_SITE].
</message>
<message name="invalid_region_handoff">
- C&apos;è stato un problema nell&apos;elaborare il cambio di regione. Potresti aver bisogno di ricollegarti prima di poterlo effetuare. Se continui ad avere problemi, controlla per favore le FAQ del Supporto Tecnico a:
-www.secondlife.com/support.
+ Si è verificato un problema nel tentativo di attraversare regioni. È possibile che per potere attraversare le regioni, tu debba effettuare nuovamente l&apos;accesso.
+Se si continua a visualizzare questo messaggio, consulta la pagina [SUPPORT_SITE].
</message>
<message name="blocked_tport">
Spiacenti, il teletrasporto è bloccato al momento. Prova di nuovo tra pochi istanti. Se ancora non potrai teletrasportarti, per favore scollegati e ricollegati per risolvere il problema.
@@ -59,6 +59,9 @@ www.secondlife.com/support.
<message name="completing">
Teletrasporto completato
</message>
+ <message name="completed_from">
+ Teleport completato da [T_SLURL]
+ </message>
<message name="resolving">
Elaborazione della destinazione in corso...
</message>
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
index 9105c2613d..0eaad11cc7 100644
--- a/indra/newview/skins/default/xui/ja/floater_about.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about.xml
@@ -43,7 +43,7 @@ Vivox ãƒãƒ¼ã‚¸ãƒ§ãƒ³ï¼š [VIVOX_VERSION]
</panel>
<panel label="クレジット" name="credits_panel">
<text_editor name="credits_editor">
- Second Lifeã¯ã€ Philipã€Tessaã€Andrewã€Coryã€Jamesã€Benã€Charã€Charlieã€Colinã€Danã€Danielã€Dougã€Ericã€Hamletã€Haneyã€Eveã€Hunterã€Ianã€Jeffã€Jenniferã€Jimã€Johnã€Leeã€Markã€Peterã€Phoenixã€Richardã€Robinã€Xenonã€Steveã€Tanyaã€Eddieã€Aviã€Frankã€Bruceã€Aaronã€Aliceã€Bobã€Debraã€Eileenã€Helenã€Janetã€Louieã€Leviathaniaã€Stefanã€Rayã€Kevinã€Tomã€Mikebã€MikeTã€Burgessã€Elenaã€Tracyã€Billã€Toddã€Ryanã€Zachã€Sarahã€Novaã€Timã€Stephanieã€Michaelã€Evanã€Nicolasã€Catherineã€Rachelleã€Daveã€Hollyã€Bubã€Kellyã€Magellanã€Ramziã€Donã€Sabinã€Jillã€Rheyaã€Jeskaã€Torleyã€Konaã€Callumã€Charityã€Ventrellaã€Jackã€Vektorã€Irisã€Chrisã€Nicoleã€Mickã€Reubenã€Blueã€Babbageã€Yedwabã€Deanaã€Laurenã€Brentã€Pathfinderã€Chadrickã€Altruimaã€Jesseã€Teenyã€Monroeã€Icculusã€Davidã€Tessã€Lizzieã€Patsyã€Isaacã€Lawrenceã€Cynã€Boã€Giaã€Annetteã€Mariusã€Tboneã€Jonathanã€Karenã€Ginsuã€Satokoã€Yukoã€Makikoã€Thomasã€Harryã€Sethã€Alexeiã€Brianã€Guyã€Runitaiã€Ethanã€Dataã€Corneliusã€Kennyã€Swissã€Zeroã€Natriaã€Wendyã€Stephenã€Teepleã€Thumperã€Lucyã€Deeã€Miaã€Lianaã€Warrenã€Brankaã€Auraã€beezã€Miloã€Hermiaã€Redã€Thraxã€Joeã€Sallyã€Magentaã€Moguraã€Paulã€Joseã€Rejeanã€Henrikã€Lexieã€Amberã€Loganã€Xanã€Noraã€Morpheusã€Donovanã€Leylaã€MichaelFrancisã€Beastã€Cubeã€Buckyã€Joshuaã€Stryfeã€Harmonyã€Teresaã€Claudiaã€Walkerã€Glennã€Fritzã€Fordakã€Juneã€Cleopetraã€Jeanã€Ivyã€Betsyã€Rooseveltã€Spikeã€Kenã€Whichã€Tofuã€Chiyoã€Robã€Zeeã€dustinã€Georgeã€Delã€Matthewã€Catã€Jacquiã€Lightfootã€Adrianã€Violaã€Alfredã€Noelã€Irfanã€Sunilã€Yoolã€Rikaã€Janeã€Xtremeã€Frontierã€a2ã€Neoã€Siobhanã€Yozã€Justinã€Elleã€Qarlã€Benjaminã€Isabelã€Gulliverã€Everettã€Christopherã€Izzyã€Stephanyã€Garryã€Sejongã€Seanã€Tobinã€Iridiumã€Metaã€Anthonyã€Jeremyã€JPã€Jakeã€Mauriceã€Madhaviã€Leopardã€Kyleã€Joonã€Kariã€Bertã€Belindaã€Jonã€Kristiã€Bridieã€Pramodã€KJã€Socratesã€Mariaã€Ivanã€Aricã€Yamasakiã€Adreanneã€Jayã€MitchKã€Cerenã€Cocoã€Durlã€Jennyã€Periapseã€Karticã€Storrsã€Lotteã€Sandyã€Rohnã€Colossusã€Zenã€BigPapiã€Bradã€Pastramiã€Kurzã€Maniã€Neuroã€Jaimeã€MJã€Rowanã€Sgtã€Elvisã€Geckoã€Samuelã€Sardonyxã€Leoã€Bryanã€Nikoã€Softã€Poppyã€Rachelã€Akiã€Angeloã€Banzaiã€Alexaã€Sueã€CeeLoã€Benderã€CGã€Gillianã€Pelleã€Nickã€Echoã€Zaraã€Christineã€Shamiranã€Emmaã€Blakeã€Keikoã€Plexusã€Joppaã€Sidewinderã€Ericaã€Ashleiã€Twilightã€Kristenã€Brettã€Qã€Enusã€Simonã€Bevisã€Kraftã€Kipã€Chandlerã€Ronã€LauraPã€Ramã€KyleJMã€Scouseã€Prosperoã€Melissaã€Martyã€Natã€Hamiltonã€Kendã€Lordanã€Jimmyã€Kosmoã€Seraphã€Greenã€Ekimã€Wiggoã€JTã€Romeã€Dorisã€Mizã€Benocã€Whumpã€Trinityã€Patchã€Kateã€TJã€Baoã€Joohwanã€Christyã€Sofiaã€Matiasã€Cogsworthã€Johanã€Orehã€Cheahã€Angelaã€Brandyã€Mangoã€Lanã€Aleksã€Gloriaã€Heidyã€Mitchellã€Spaceã€Coltonã€Bambersã€Einsteinã€Maggieã€Malbersã€Roseã€Winnieã€Stellaã€Miltonã€Rothmanã€Niallã€Marinã€Allisonã€Katieã€Dawnã€Kattã€Dustyã€Kalpanaã€Judyã€Andreaã€Ambroffã€Infinityã€Gailã€Ricoã€Raymondã€Yiã€Williamã€Christaã€Mã€Teaganã€Scoutã€Mollyã€Danteã€Corrã€Dynamikeã€Usiã€Kayleeã€Vidtutsã€Lilã€Danicaã€Saschaã€Kelvã€Jacobã€Nyaã€Rodneyã€Brandonã€Elsieã€Blondinã€Grantã€Katrinã€Nyxã€Gabrielã€Locklainnã€Claireã€Devinã€Minervaã€Montyã€Austinã€Bradfordã€Siã€Keiraã€Hã€Caitlinã€Ditaã€Makaiã€Jennã€Annã€Meredithã€Clareã€Joyã€Praveenã€Codyã€Edmundã€Rutheã€Sirenaã€Gayathriã€Spiderã€FJã€Davidoffã€Tianã€Jennieã€Louiseã€Oskarã€Landonã€Noelleã€Jarvã€Ingridã€Alã€Sommerã€Docã€Ariaã€Huinã€Grayã€Liliã€Virã€DJã€Yangã€Tã€Simoneã€Maestroã€Scottã€Charleneã€Quixoteã€Amandaã€Susanã€Zedã€Anneã€Enkiduã€Esbeeã€Joroanã€Katelinã€Roxieã€Tayã€Scarletã€Kevinã€Johnnyã€Wolfgangã€Andrenã€Bobã€Howardã€Merovã€Randã€Rayã€Michonã€Newellã€Galenã€Dessieã€Lesã€Michonã€Jenelleã€Geoã€Sizã€Shapiroã€Peteã€Calyleã€Seleneã€Allenã€Phoebeã€Goldinã€Kimmoraã€Dakotaã€Slatonã€Lindquistã€Zoeyã€Hariã€Othelloã€Rohitã€Sheldonã€Petraã€Vialeã€Gordonã€Kayeã€Pinkã€Fernyã€Emersonã€Davyã€Briã€Chanã€Juanã€Robertã€Terrenceã€Nathanã€Carlã¨ã€ãã®ä»–多数ã®äººé”ã«ã‚ˆã£ã¦ä½œæˆã•れã¾ã—ãŸã€‚
+ Second Life ã¯ã€ Philipã€Tessaã€Andrewã€Coryã€Jamesã€Benã€Charã€Charlieã€Colinã€Danã€Danielã€Dougã€Ericã€Hamletã€Haneyã€Eveã€Hunterã€Ianã€Jeffã€Jenniferã€Jimã€Johnã€Leeã€Markã€Peterã€Phoenixã€Richardã€Robinã€Xenonã€Steveã€Tanyaã€Eddieã€Aviã€Frankã€Bruceã€Aaronã€Aliceã€Bobã€Debraã€Eileenã€Helenã€Janetã€Louieã€Leviathaniaã€Stefanã€Rayã€Kevinã€Tomã€Mikebã€MikeTã€Burgessã€Elenaã€Tracyã€Billã€Toddã€Ryanã€Zachã€Sarahã€Novaã€Timã€Stephanieã€Michaelã€Evanã€Nicolasã€Catherineã€Rachelleã€Daveã€Hollyã€Bubã€Kellyã€Magellanã€Ramziã€Donã€Sabinã€Jillã€Rheyaã€Jeskaã€Torleyã€Konaã€Callumã€Charityã€Ventrellaã€Jackã€Vektorã€Irisã€Chrisã€Nicoleã€Mickã€Reubenã€Blueã€Babbageã€Yedwabã€Deanaã€Laurenã€Brentã€Pathfinderã€Chadrickã€Altruimaã€Jesseã€Teenyã€Monroeã€Icculusã€Davidã€Tessã€Lizzieã€Patsyã€Isaacã€Lawrenceã€Cynã€Boã€Giaã€Annetteã€Mariusã€Tboneã€Jonathanã€Karenã€Ginsuã€Satokoã€Yukoã€Makikoã€Thomasã€Harryã€Sethã€Alexeiã€Brianã€Guyã€Runitaiã€Ethanã€Dataã€Corneliusã€Kennyã€Swissã€Zeroã€Natriaã€Wendyã€Stephenã€Teepleã€Thumperã€Lucyã€Deeã€Miaã€Lianaã€Warrenã€Brankaã€Auraã€beezã€Miloã€Hermiaã€Redã€Thraxã€Joeã€Sallyã€Magentaã€Moguraã€Paulã€Joseã€Rejeanã€Henrikã€Lexieã€Amberã€Loganã€Xanã€Noraã€Morpheusã€Donovanã€Leylaã€MichaelFrancisã€Beastã€Cubeã€Buckyã€Joshuaã€Stryfeã€Harmonyã€Teresaã€Claudiaã€Walkerã€Glennã€Fritzã€Fordakã€Juneã€Cleopetraã€Jeanã€Ivyã€Betsyã€Rooseveltã€Spikeã€Kenã€Whichã€Tofuã€Chiyoã€Robã€Zeeã€dustinã€Georgeã€Delã€Matthewã€Catã€Jacquiã€Lightfootã€Adrianã€Violaã€Alfredã€Noelã€Irfanã€Sunilã€Yoolã€Rikaã€Janeã€Xtremeã€Frontierã€a2ã€Neoã€Siobhanã€Yozã€Justinã€Elleã€Qarlã€Benjaminã€Isabelã€Gulliverã€Everettã€Christopherã€Izzyã€Stephanyã€Garryã€Sejongã€Seanã€Tobinã€Iridiumã€Metaã€Anthonyã€Jeremyã€JPã€Jakeã€Mauriceã€Madhaviã€Leopardã€Kyleã€Joonã€Kariã€Bertã€Belindaã€Jonã€Kristiã€Bridieã€Pramodã€KJã€Socratesã€Mariaã€Ivanã€Aricã€Yamasakiã€Adreanneã€Jayã€MitchKã€Cerenã€Cocoã€Durlã€Jennyã€Periapseã€Karticã€Storrsã€Lotteã€Sandyã€Rohnã€Colossusã€Zenã€BigPapiã€Bradã€Pastramiã€Kurzã€Maniã€Neuroã€Jaimeã€MJã€Rowanã€Sgtã€Elvisã€Geckoã€Samuelã€Sardonyxã€Leoã€Bryanã€Nikoã€Softã€Poppyã€Rachelã€Akiã€Angeloã€Banzaiã€Alexaã€Sueã€CeeLoã€Benderã€CGã€Gillianã€Pelleã€Nickã€Echoã€Zaraã€Christineã€Shamiranã€Emmaã€Blakeã€Keikoã€Plexusã€Joppaã€Sidewinderã€Ericaã€Ashleiã€Twilightã€Kristenã€Brettã€Qã€Enusã€Simonã€Bevisã€Kraftã€Kipã€Chandlerã€Ronã€LauraPã€Ramã€KyleJMã€Scouseã€Prosperoã€Melissaã€Martyã€Natã€Hamiltonã€Kendã€Lordanã€Jimmyã€Kosmoã€Seraphã€Greenã€Ekimã€Wiggoã€JTã€Romeã€Dorisã€Mizã€Benocã€Whumpã€Trinityã€Patchã€Kateã€TJã€Baoã€Joohwanã€Christyã€Sofiaã€Matiasã€Cogsworthã€Johanã€Orehã€Cheahã€Angelaã€Brandyã€Mangoã€Lanã€Aleksã€Gloriaã€Heidyã€Mitchellã€Spaceã€Coltonã€Bambersã€Einsteinã€Maggieã€Malbersã€Roseã€Winnieã€Stellaã€Miltonã€Rothmanã€Niallã€Marinã€Allisonã€Katieã€Dawnã€Kattã€Dustyã€Kalpanaã€Judyã€Andreaã€Ambroffã€Infinityã€Gailã€Ricoã€Raymondã€Yiã€Williamã€Christaã€Mã€Teaganã€Scoutã€Mollyã€Danteã€Corrã€Dynamikeã€Usiã€Kayleeã€Vidtutsã€Lilã€Danicaã€Saschaã€Kelvã€Jacobã€Nyaã€Rodneyã€Brandonã€Elsieã€Blondinã€Grantã€Katrinã€Nyxã€Gabrielã€Locklainnã€Claireã€Devinã€Minervaã€Montyã€Austinã€Bradfordã€Siã€Keiraã€Hã€Caitlinã€Ditaã€Makaiã€Jennã€Annã€Meredithã€Clareã€Joyã€Praveenã€Codyã€Edmundã€Rutheã€Sirenaã€Gayathriã€Spiderã€FJã€Davidoffã€Tianã€Jennieã€Louiseã€Oskarã€Landonã€Noelleã€Jarvã€Ingridã€Alã€Sommerã€Docã€Ariaã€Huinã€Grayã€Liliã€Virã€DJã€Yangã€Tã€Simoneã€Maestroã€Scottã€Charleneã€Quixoteã€Amandaã€Susanã€Zedã€Anneã€Enkiduã€Esbeeã€Joroanã€Katelinã€Roxieã€Tayã€Scarletã€Kevinã€Johnnyã€Wolfgangã€Andrenã€Bobã€Howardã€Merovã€Randã€Rayã€Michonã€Newellã€Galenã€Dessieã€Lesã€Michonã€Jenelleã€Geoã€Sizã€Shapiroã€Peteã€Calyleã€Seleneã€Allenã€Phoebeã€Goldinã€Kimmoraã€Dakotaã€Slatonã€Lindquistã€Zoeyã€Hariã€Othelloã€Rohitã€Sheldonã€Petraã€Vialeã€Gordonã€Kayeã€Pinkã€Fernyã€Emersonã€Davyã€Briã€Chanã€Juanã€Robertã€Terrenceã€Nathanã€Carlã¨ã€ãã®ä»–多数ã®äººé”ã«ã‚ˆã£ã¦ä½œæˆã•れã¾ã—ãŸã€‚
ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ã“れã¾ã§ã§æœ€é«˜ã®ã‚‚ã®ã«ãªã‚‹ã‚ˆã†ã”å”力をã„ãŸã ã„ãŸä»¥ä¸‹ã®ä½äººã®çš†æ§˜ã«æ·±ã感è¬ã„ãŸã—ã¾ã™ã€‚ able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
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 d57a81c770..c9c01bc2a4 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterland" title="土地情報">
+ <floater.string name="maturity_icon_general">
+ &quot;Parcel_PG_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_moderate">
+ &quot;Parcel_M_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_adult">
+ &quot;Parcel_R_Dark&quot;
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] 分
</floater.string>
@@ -15,7 +24,7 @@
<tab_container name="landtab">
<panel label="一般" name="land_general_panel">
<panel.string name="new users only">
- æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿
+ æ–°è¦ä½äººå°‚用
</panel.string>
<panel.string name="anyone">
誰ã§ã‚‚
@@ -73,7 +82,7 @@
Adult
</text>
<text name="Owner:">
- オーナー:
+ 所有者:
</text>
<text name="OwnerText">
Leyla Linden
@@ -85,9 +94,9 @@
Leyla Linden
</text>
<button label="設定" label_selected="設定..." name="Set..."/>
- <check_box label="グループã¸ã®è­²æ¸¡ã‚’許å¯" name="check deed" tool_tip="グループã®ã‚ªãƒ•ィサーã¯ã“ã®åœŸåœ°ã‚’グループã«è­²æ¸¡ã§ãã¾ã™ã€‚ãã†ã™ã‚‹ã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®åœŸåœ°å‰²ã‚Šå½“ã¦ã«ã‚ˆã£ã¦ã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚"/>
- <button label="譲渡" label_selected="譲渡..." name="Deed..." tool_tip="é¸æŠžã•れãŸã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚ªãƒ•ィサーã§ã‚ã‚‹ã¨ãã®ã¿ã€åœŸåœ°ã‚’譲渡ã§ãã¾ã™ã€‚"/>
- <check_box label="オーナーãŒè­²æ¸¡ã¨å…±ã«å¯„付" name="check contrib" tool_tip="土地ãŒã‚°ãƒ«ãƒ¼ãƒ—ã«è­²æ¸¡ã•れるã¨ãã€å‰ã®æ‰€æœ‰è€…ã¯è­²æ¸¡ãŒæˆç«‹ã™ã‚‹ã‚ˆã†ã€å分ãªåœŸåœ°ã‚’寄付ã—ã¾ã™ã€‚"/>
+ <check_box label="グループã¸ã®è­²æ¸¡ã‚’許å¯" name="check deed" tool_tip="グループã®ã‚ªãƒ•ィサーã¯ã“ã®åœŸåœ°ã‚’グループã«è­²æ¸¡ã§ãã¾ã™ã€‚グループã®åœŸåœ°å‰²ã‚Šå½“ã¦ã«ã‚ˆã£ã¦ã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚"/>
+ <button label="譲渡" label_selected="譲渡..." name="Deed..." tool_tip="é¸æŠžã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚ªãƒ•ィサーã®ã¿ã€åœŸåœ°ã‚’譲渡ã§ãã¾ã™ã€‚"/>
+ <check_box label="所有者ãŒè­²æ¸¡ã¨å…±ã«å¯„付" name="check contrib" tool_tip="土地ãŒã‚°ãƒ«ãƒ¼ãƒ—ã«è­²æ¸¡ã•れるã¨ãã€å‰ã®æ‰€æœ‰è€…ã¯è­²æ¸¡ãŒæˆç«‹ã™ã‚‹ã‚ˆã†ã€å分ãªåœŸåœ°ã‚’寄付ã—ã¾ã™ã€‚"/>
<text name="For Sale:">
è²©å£²ã®æœ‰ç„¡ï¼š
</text>
@@ -136,16 +145,16 @@
</panel>
<panel label="約款" name="land_covenant_panel">
<panel.string name="can_resell">
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã¾ã™ã€‚
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã¾ã™ã€‚
</panel.string>
<panel.string name="can_not_resell">
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ããªã„ã“ã¨ãŒã‚りã¾ã™ã€‚
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ããªã„ã“ã¨ãŒã‚りã¾ã™ã€‚
</panel.string>
<panel.string name="can_change">
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã¾ãŸã¯å†åˆ†å‰²ã§ãã¾ã™ã€‚
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã¾ãŸã¯å†åˆ†å‰²ã§ãã¾ã™ã€‚
</panel.string>
<panel.string name="can_not_change">
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ã§ããªã„ã“ã¨ãŒ
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆãƒ»å†åˆ†å‰²ã§ããªã„ã“ã¨ãŒã‚りã¾ã™ã€‚
ã‚りã¾ã™ã€‚
</panel.string>
<text font="SansSerifLarge" name="estate_section_lbl">
@@ -194,8 +203,7 @@
å†åˆ†å‰²ï¼š
</text>
<text name="changeable_clause">
- ã“ã®åœ°åŸŸï¼ˆãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã«ã‚る土地ã¯çµ±åˆã¾ãŸã¯åˆ†å‰²ãŒã§ã
-ã¾ã›ã‚“。
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã«ã‚る土地ã¯çµ±åˆã¾ãŸã¯åˆ†å‰²ãŒã§ããªã„ã“ã¨ãŒã‚りã¾ã™ã€‚
</text>
</panel>
<panel label="オブジェクト" name="land_objects_panel">
@@ -233,7 +241,7 @@
[COUNT]
</text>
<button label="表示" label_selected="表示" name="ShowOwner" right="-145"/>
- <button label="è¿”å´" label_selected="è¿”å´..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/>
+ <button label="è¿”å´" label_selected="è¿”å´..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトを所有者ã«è¿”å´ã—ã¾ã™"/>
<text name="Set to group:">
グループã«è¨­å®šï¼š
</text>
@@ -241,7 +249,7 @@
[COUNT]
</text>
<button label="表示" label_selected="表示" name="ShowGroup" right="-145"/>
- <button label="è¿”å´" label_selected="è¿”å´..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/>
+ <button label="è¿”å´" label_selected="è¿”å´..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトを所有者ã«è¿”å´ã—ã¾ã™"/>
<text name="Owned by others:">
ä»–äººã®æ‰€æœ‰ç‰©ï¼š
</text>
@@ -249,7 +257,7 @@
[COUNT]
</text>
<button label="表示" label_selected="表示" name="ShowOther" right="-145"/>
- <button label="è¿”å´" label_selected="è¿”å´..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーã«è¿”å´ã—ã¾ã™"/>
+ <button label="è¿”å´" label_selected="è¿”å´..." name="ReturnOther..." right="-15" tool_tip="オブジェクトを所有者ã«è¿”å´ã—ã¾ã™"/>
<text name="Selected / sat upon:">
é¸æŠžæ¸ˆã¿ãƒ»æ±ºå®šæ¸ˆã¿ï¼š
</text>
@@ -269,7 +277,7 @@
<name_list.columns label="タイプ" name="type"/>
<name_list.columns name="online_status"/>
<name_list.columns label="åå‰" name="name"/>
- <name_list.columns label="カウント" name="count"/>
+ <name_list.columns label="æ•°" name="count"/>
<name_list.columns label="最新" name="mostrecent"/>
</name_list>
</panel>
@@ -285,16 +293,16 @@
ã‚ãªãŸã¯ã“ã®åŒºç”»ã®è¨­å®šç·¨é›†ãŒã§ããªã„ãŸã‚ã€ã“ã®ã‚ªãƒ—ションã¯ç„¡åйã§ã™ã€‚
</panel.string>
<panel.string name="mature_check_mature">
- 控ãˆã‚コンテンツ
+ 「Moderateã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„
</panel.string>
<panel.string name="mature_check_adult">
- Adultコンテンツ
+ 「Adultã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„
</panel.string>
<panel.string name="mature_check_mature_tooltip">
- ã‚ãªãŸã®åŒºç”»æƒ…å ±åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯æŽ§ãˆã‚ã¨ã•れã¦ã„ã¾ã™ã€‚
+ ã‚ãªãŸã®åŒºç”»æƒ…å ±åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ŒModerateã€ã¨ã•れã¦ã„ã¾ã™ã€‚
</panel.string>
<panel.string name="mature_check_adult_tooltip">
- ã‚ãªãŸã®åŒºç”»æƒ…å ±åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯Adultã¨ã•れã¦ã„ã¾ã™ã€‚
+ ã‚ãªãŸã®åŒºç”»æƒ…å ±åŠã³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ŒAdultã€ã¨ã•れã¦ã„ã¾ã™ã€‚
</panel.string>
<panel.string name="landing_point_none">
(ãªã—)
@@ -303,28 +311,28 @@
プッシングを制é™
</panel.string>
<panel.string name="push_restrict_region_text">
- ãƒ—ãƒƒã‚·ãƒ³ã‚°ã‚’åˆ¶é™ (地域優先)
+ ãƒ—ãƒƒã‚·ãƒ³ã‚°ã‚’åˆ¶é™ ï¼ˆåœ°åŸŸè¨­å®šå„ªå…ˆï¼‰
</panel.string>
<text name="allow_label">
ä»–ã®ä½äººã¸ã®è¨±å¯ï¼š
</text>
<check_box label="地形を編集" name="edit land check" tool_tip="ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã€ä»–人ãŒã‚ãªãŸã®åœŸåœ°ã®åœ°å½¢ç·¨é›†ã‚’行ã†ã“ã¨ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã®ãƒã‚§ãƒƒã‚¯ã‚’外ã—ã¦ãŠãã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚外ã—ãŸçŠ¶æ…‹ã§ã‚ãªãŸã®åœŸåœ°ã®åœ°å½¢ç·¨é›†ãŒå¯èƒ½ã§ã™ã€‚"/>
<check_box label="飛行" name="check fly" tool_tip="ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã“ã®åœŸåœ°ã§ã®é£›è¡ŒãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨åœŸåœ°ã«å…¥ã‚‹éš›ã¨é€šã‚ŠéŽãŽã‚‹ã¨ãã®ã¿é£›è¡Œå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚"/>
- <text left="138" name="allow_label2" width="144">
+ <text name="allow_label2">
制作:
</text>
- <check_box label="全員" left="280" name="edit objects check"/>
- <check_box label="グループ" left="380" name="edit group objects check"/>
- <text left="138" name="allow_label3" width="144">
+ <check_box label="全員" name="edit objects check"/>
+ <check_box label="グループ" name="edit group objects check"/>
+ <text name="allow_label3">
オブジェクトã®é€²å…¥ï¼š
</text>
- <check_box label="全員" left="280" name="all object entry check"/>
- <check_box label="グループ" left="380" name="group object entry check"/>
- <text left="138" name="allow_label4" width="144">
+ <check_box label="全員" name="all object entry check"/>
+ <check_box label="グループ" name="group object entry check"/>
+ <text name="allow_label4">
スクリプトã®å®Ÿè¡Œï¼š
</text>
- <check_box label="全員" left="280" name="check other scripts"/>
- <check_box label="グループ" left="380" name="check group scripts"/>
+ <check_box label="全員" name="check other scripts"/>
+ <check_box label="グループ" name="check group scripts"/>
<text name="land_options_label">
土地オプション:
</text>
@@ -334,7 +342,7 @@
<combo_box name="land category with adult">
<combo_box.item label="全カテゴリ" name="item0"/>
<combo_box.item label="Linden 所在地" name="item1"/>
- <combo_box.item label="アダルト" name="item2"/>
+ <combo_box.item label="Adult" name="item2"/>
<combo_box.item label="アートã¨ã‚«ãƒ«ãƒãƒ£ãƒ¼" name="item3"/>
<combo_box.item label="ビジãƒã‚¹" name="item4"/>
<combo_box.item label="教育的" name="item5"/>
@@ -360,7 +368,7 @@
<combo_box.item label="ショッピング" name="item11"/>
<combo_box.item label="ãã®ä»–" name="item12"/>
</combo_box>
- <check_box label="控ãˆã‚コンテンツ" name="MatureCheck" tool_tip=""/>
+ <check_box label="「Moderateã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„" name="MatureCheck" tool_tip=""/>
<text name="Snapshot:">
スナップショット:
</text>
@@ -383,15 +391,11 @@
<text name="with media:">
種類:
</text>
- <combo_box name="media type" tool_tip="URL ãŒå‹•ç”»ã€Webページã€ãã®ä»–ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã®å ´åˆã«æŒ‡å®šã—ã¾ã™"/>
+ <combo_box name="media type" tool_tip="URL ãŒå‹•ç”»ã€Web ページã€ãã®ä»–ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‹ã‚’指定ã—ã¾ã™"/>
<text name="at URL:">
ホームページ:
</text>
- <button label="設定" label_selected="設定..." name="set_media_url"/>
- <text name="CurrentURL:">
- ç¾åœ¨ã®ãƒšãƒ¼ã‚¸ï¼š
- </text>
- <button label="リセット..." label_selected="リセット..." name="reset_media_url" tool_tip="URLを更新"/>
+ <button label="設定" name="set_media_url"/>
<check_box label="URL ã‚’éžè¡¨ç¤º" name="hide_media_url" tool_tip="ã“ã®ã‚ªãƒ—ションをオンã«ã™ã‚‹ã¨ã€è¨±å¯ãªã—ã§ã“ã®åŒºç”»æƒ…å ±ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„るユーザーã«ã¯ãƒ¡ãƒ‡ã‚£ã‚¢ URL ãŒè¡¨ç¤ºã•れã¾ã›ã‚“。 ã“れ㯠HTML タイプã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“ã®ã§ã”注æ„ãã ã•ã„。"/>
<text name="Description:">
説明:
@@ -404,12 +408,12 @@
<text name="replace_texture_help" width="290">
ã“ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’使用ã™ã‚‹ã‚ªãƒ–ジェクトã®ã€Œå†ç”Ÿã€ã‚’クリックã™ã‚‹ã¨ã€å‹•画や Web ページを表示ã—ã¾ã™ã€‚ テクスãƒãƒ£ã‚’変更ã™ã‚‹ã«ã¯ã‚µãƒ ãƒã‚¤ãƒ«ã‚’é¸æŠžã—ã¦ãã ã•ã„。
</text>
- <check_box label="スケールを自動設定" name="media_auto_scale" tool_tip="ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ã“ã®åŒºç”»ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ã‚¹ã‚±ãƒ¼ãƒ«ãŒè‡ªå‹•çš„ã«è¨­å®šã•れã¾ã™ã€‚ 動作速度ã¨ç”»è³ªãŒå°‘ã—低下ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ãŒã€ä»–ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚„整列ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。"/>
- <text name="media_size" tool_tip="レンダリングã™ã‚‹Webメディアã®ã‚µã‚¤ã‚ºã§ã™ã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚">
+ <check_box label="スケールを自動設定" name="media_auto_scale" tool_tip="ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ã“ã®åŒºç”»ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ã‚¹ã‚±ãƒ¼ãƒ«ãŒè‡ªå‹•çš„ã«è¨­å®šã•れã¾ã™ã€‚ 動作速度ã¨ç”»è³ªãŒå°‘ã—低下ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ãŒã€ä»–ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚„整列ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。"/>
+ <text name="media_size" tool_tip="レンダリングã™ã‚‹ Web メディアã®ã‚µã‚¤ã‚ºã§ã™ã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚">
サイズ:
</text>
- <spinner name="media_size_width" tool_tip="レンダリングã™ã‚‹Webメディアã®ã‚µã‚¤ã‚ºã§ã™ã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"/>
- <spinner name="media_size_height" tool_tip="レンダリングã™ã‚‹Webメディアã®ã‚µã‚¤ã‚ºã§ã™ã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"/>
+ <spinner name="media_size_width" tool_tip="レンダリングã™ã‚‹ Web メディアã®ã‚µã‚¤ã‚ºã§ã™ã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"/>
+ <spinner name="media_size_height" tool_tip="レンダリングã™ã‚‹ Web メディアã®ã‚µã‚¤ã‚ºã§ã™ã€‚デフォルト㮠0 ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"/>
<text name="pixels">
ピクセル
</text>
@@ -422,7 +426,7 @@
<text name="MusicURL:">
音楽 URL:
</text>
- <check_box label="URL ã‚’éžè¡¨ç¤ºã«ã™ã‚‹" name="hide_music_url" tool_tip="ã“ã®ã‚ªãƒ—ションã«ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã€æ¨©é™ã®ãªã„人ãŒåŒºç”»æƒ…報を見ãŸã¨ãã«éŸ³æ¥½ã®URLãŒéš ã‚Œã¾ã™ã€‚"/>
+ <check_box label="URL ã‚’éžè¡¨ç¤ºã«ã™ã‚‹" name="hide_music_url" tool_tip="ã“ã®ã‚ªãƒ—ションã«ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ã€æ¨©é™ã®ãªã„人ãŒåŒºç”»æƒ…報を見ãŸã¨ãã«éŸ³æ¥½ã® URL ãŒéš ã‚Œã¾ã™ã€‚"/>
<text name="Sound:">
サウンド:
</text>
@@ -438,6 +442,9 @@
<panel.string name="access_estate_defined">
(エステートã«é™å®šï¼‰
</panel.string>
+ <panel.string name="allow_public_access">
+ ãƒ‘ãƒ–ãƒªãƒƒã‚¯ã‚¢ã‚¯ã‚»ã‚¹ã‚’è¨±å¯ ï¼ˆ[MATURITY])
+ </panel.string>
<panel.string name="estate_override">
1 ã¤ä»¥ä¸Šã®ã‚ªãƒ—ションãŒã€ä¸å‹•産レベルã§è¨­å®šã•れã¦ã„ã¾ã™ã€‚
</panel.string>
@@ -451,7 +458,7 @@
<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="グループã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ï¼š[GROUP]" name="GroupCheck" tool_tip="「一般ã€ã‚¿ãƒ–ã§ã€ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã—ã¦ãã ã•ã„。"/>
- <check_box label="入場許å¯ã‚’販売:" name="PassCheck" tool_tip="ã“ã®åŒºç”»ã¸ã®ä¸€æ™‚çš„ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™"/>
+ <check_box label="入場許å¯ã‚’販売:" name="PassCheck" tool_tip="ã“ã®åŒºç”»ã¸ã®ä¸€æ™‚çš„ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"/>
<combo_box name="pass_combo">
<combo_box.item label="誰ã§ã‚‚" name="Anyone"/>
<combo_box.item label="グループ" name="Group"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml
index 69d4faf5b8..ed17736eb3 100644
--- a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater min_width="340" name="floater_buy_contents" title="中身ã®è³¼å…¥" width="340">
<text name="contains_text" width="320">
- [NAME]ã®ä¸­èº«ï¼š
+ [NAME] ã®ä¸­èº«ï¼š
</text>
<scroll_list name="item_list" width="310"/>
<text name="buy_text" width="320">
- 中身を[NAME]ã‹ã‚‰L$[AMOUNT]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
+ 中身を [NAME] ã‹ã‚‰ L$[AMOUNT] ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
</text>
<button label="å–り消ã—" label_selected="å–り消ã—" name="cancel_btn" width="73"/>
<button label="購入" label_selected="購入" left_delta="-77" name="buy_btn" width="73"/>
- <check_box label="今ã™ãæœã‚’ç€ã‚‹" left_delta="-125" name="wear_check"/>
+ <check_box label="今ã™ãç€ã‚‹" left_delta="-125" name="wear_check"/>
<text name="no_copy_text">
- (コピーä¸å¯)
+ (コピーä¸å¯ï¼‰
</text>
<text name="no_modify_text">
- (修正ä¸å¯)
+ (修正ä¸å¯ï¼‰
</text>
<text name="no_transfer_text">
- (å†è²©ãƒ»ãƒ—レゼントä¸å¯)
+ (å†è²©ãƒ»ãƒ—レゼントä¸å¯ï¼‰
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml
index 32de533dc4..22af6e0ea2 100644
--- a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml
@@ -37,7 +37,7 @@
見ç©ã‚‚り中...
</text>
<text name="buy_action">
- [NAME] L$ [PRICE]
+ [ACTION]
</text>
<text name="total_label">
è³¼å…¥å¾Œã®æ®‹é«˜
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_land.xml b/indra/newview/skins/default/xui/ja/floater_buy_land.xml
index a50f36b6f3..a274e25326 100644
--- a/indra/newview/skins/default/xui/ja/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_buy_land.xml
@@ -41,8 +41,8 @@
é¸æŠžã•れãŸåœ°åŸŸã«ã€å…¬å…±ã®åœŸåœ°ã¯ã‚りã¾ã›ã‚“
</floater.string>
<floater.string name="not_owned_by_you">
- ä»–ã®ä½¿ç”¨è€…ã«æ‰€æœ‰ã•れãŸåœŸåœ°ãŒé¸æŠžã•れã¦ã„ã¾ã™ã€‚
-ã“れよりå°ã•ãªç¯„å›²ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ ä»–ã®ä½äººãŒæ‰€æœ‰ã™ã‚‹åœŸåœ°ã‚’é¸æŠžã—ã¦ã„ã¾ã™ã€‚
+ã‚‚ã£ã¨ç‹­ã„ç¯„å›²ã‚’é¸æŠžã—ã¦ã¿ã¦ãã ã•ã„。
</floater.string>
<floater.string name="processing">
購入処ç†ä¸­...
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_object.xml b/indra/newview/skins/default/xui/ja/floater_buy_object.xml
index 7a5b7dc140..f323263699 100644
--- a/indra/newview/skins/default/xui/ja/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/ja/floater_buy_object.xml
@@ -4,7 +4,7 @@
中身:
</text>
<text name="buy_text">
- [NAME]ã‹ã‚‰L$[AMOUNT]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
+ [NAME] ã‹ã‚‰ L$[AMOUNT] ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
</text>
<button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/>
<button label="購入" label_selected="購入" name="buy_btn"/>
@@ -15,12 +15,12 @@
次ã®ã‚‚ã®ã‚’購入
</string>
<text name="no_copy_text">
- (コピーä¸å¯)
+ (コピーä¸å¯ï¼‰
</text>
<text name="no_modify_text">
- (修正ä¸å¯)
+ (修正ä¸å¯ï¼‰
</text>
<text name="no_transfer_text">
- (å†è²©ãƒ»ãƒ—レゼントä¸å¯)
+ (å†è²©ãƒ»ãƒ—レゼントä¸å¯ï¼‰
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml
index 3730bcd385..610d4183b3 100644
--- a/indra/newview/skins/default/xui/ja/floater_camera.xml
+++ b/indra/newview/skins/default/xui/ja/floater_camera.xml
@@ -9,6 +9,18 @@
<floater.string name="move_tooltip">
カメラを上下左å³ã«ç§»å‹•
</floater.string>
+ <floater.string name="orbit_mode_title">
+ 旋回
+ </floater.string>
+ <floater.string name="pan_mode_title">
+ 水平・垂直移動
+ </floater.string>
+ <floater.string name="avatar_view_mode_title">
+ 固定
+ </floater.string>
+ <floater.string name="free_mode_title">
+ オブジェクトを見る
+ </floater.string>
<panel name="controls">
<joystick_track name="cam_track_stick" tool_tip="カメラを上下左å³ã«å‹•ã‹ã—ã¾ã™"/>
<panel name="zoom" tool_tip="å‘ã„ã¦ã„る方法ã«ã‚«ãƒ¡ãƒ©ã‚’ズーム">
@@ -25,7 +37,7 @@
<panel name="buttons">
<button label="" name="orbit_btn" tool_tip="カメラを回ã™"/>
<button label="" name="pan_btn" tool_tip="カメラを水平・垂直移動"/>
- <button label="" name="avatarview_btn" tool_tip="ã‚¢ãƒã‚¿ãƒ¼è¦–点"/>
+ <button label="" name="avatarview_btn" tool_tip="固定"/>
<button label="" name="freecamera_btn" tool_tip="オブジェクトを見る"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_customize.xml b/indra/newview/skins/default/xui/ja/floater_customize.xml
index 4d8b91ff99..cc0032e1ab 100644
--- a/indra/newview/skins/default/xui/ja/floater_customize.xml
+++ b/indra/newview/skins/default/xui/ja/floater_customize.xml
@@ -35,7 +35,7 @@
[PATH] ã«æ‰€åœ¨
</text>
<text name="not worn instructions">
- æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«1ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„シェイプをã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„シェイプをã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
</text>
<text name="no modify instructions">
ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ­£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。
@@ -68,7 +68,7 @@
[PATH] ã«æ‰€åœ¨
</text>
<text name="not worn instructions">
- æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«1ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„スキンをã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„スキンをã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
</text>
<text name="no modify instructions">
ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ­£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。
@@ -105,7 +105,7 @@
[PATH] ã«æ‰€åœ¨
</text>
<text name="not worn instructions">
- æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«1ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„髪をã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„髪をã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
</text>
<text name="no modify instructions">
ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ­£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。
@@ -113,7 +113,7 @@
<text name="Item Action Label">
髪型:
</text>
- <texture_picker label="テクスãƒãƒ£ãƒ¼" name="Texture" tool_tip="写真をクリックã—ã¦é¸æŠž"/>
+ <texture_picker label="テクスãƒãƒ£" name="Texture" tool_tip="写真をクリックã—ã¦é¸æŠž"/>
<button label="æ–°ã—ã„髪を作æˆ" label_selected="æ–°ã—ã„髪を作æˆ" name="Create New"/>
<button label="ä¿å­˜" label_selected="ä¿å­˜" name="Save"/>
<button label="別åã§ä¿å­˜..." label_selected="別åã§ä¿å­˜..." name="Save As"/>
@@ -177,7 +177,7 @@
[PATH] ã«æ‰€åœ¨
</text>
<text name="not worn instructions">
- æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«1ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„シャツをç€ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„シャツをç€ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
</text>
<text name="no modify instructions">
ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ­£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。
@@ -302,7 +302,7 @@
[PATH] ã«æ‰€åœ¨
</text>
<text name="not worn instructions">
- æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«1ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„ジャケットをç€ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„ジャケットをç€ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
</text>
<button label="æ–°ã—ã„上ç€ã‚’作æˆ" label_selected="æ–°ã—ã„上ç€ã‚’作æˆ" name="Create New"/>
<text name="no modify instructions">
@@ -435,7 +435,7 @@
[PATH] ã«æ‰€åœ¨
</text>
<text name="not worn instructions">
- æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«1ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„スカートを履ãã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„スカートを履ãã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
</text>
<button label="スカートを作æˆ" label_selected="スカートを作æˆ" name="Create New"/>
<text name="no modify instructions">
@@ -522,7 +522,7 @@
<button label="å…ƒã«æˆ»ã™" label_selected="å…ƒã«æˆ»ã™" name="Revert"/>
</panel>
</tab_container>
- <button label="スクリプト情報" label_selected="スクリプト情報" name="script_info" tool_tip="ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«ä»˜ã„ã¦ã„るスクリプトを表示ã™ã‚‹"/>
+ <button label="スクリプト情報" label_selected="スクリプト情報" name="script_info" tool_tip="ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«ä»˜ã„ã¦ã„るスクリプトを表示ã—ã¾ã™"/>
<button label="アウトフィット作æˆ" label_selected="アウトフィット作æˆ" name="make_outfit_btn"/>
<button label="キャンセル" label_selected="キャンセル" name="Cancel"/>
<button label="OK" label_selected="OK" name="Ok"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml
index 3bd5ed2837..7bda25e00f 100644
--- a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="デイ・サイクル編集">
+<floater name="Day Cycle Floater" title="デイサイクル編集">
<tab_container name="Day Cycle Tabs">
- <panel label="デイ・サイクル" name="Day Cycle">
+ <panel label="デイサイクル" name="Day Cycle">
<button label="?" name="WLDayCycleHelp" />
<text name="WL12am">
深夜 12時
@@ -63,7 +63,7 @@
キーフレームã®è¨­å®šï¼š
</text>
<text name="WLCurKeyTimeText">
- キー・タイム:
+ キータイム:
</text>
<spinner label="時間" name="WLCurKeyHour" />
<spinner label="分" name="WLCurKeyMin" />
@@ -85,13 +85,13 @@
プレビュー:
</text>
<button label="å†ç”Ÿ" label_selected="å†ç”Ÿ" name="WLAnimSky" left_delta="70"/>
- <button label="åœæ­¢!" label_selected="åœæ­¢" name="WLStopAnimSky" />
+ <button label="åœæ­¢" label_selected="åœæ­¢" name="WLStopAnimSky" />
<button label="ä¸å‹•ç”£ã®æ™‚刻を使用"
label_selected="ä¸å‹•ç”£ã®æ™‚刻ã«å¤‰æ›´" name="WLUseLindenTime" width="140"/>
- <button label="デイ・テストをä¿å­˜"
- label_selected="デイ・テストをä¿å­˜" name="WLSaveDayCycle" />
- <button label="デイ・テストをロード"
- label_selected="デイ・テストをロード" name="WLLoadDayCycle" />
+ <button label="デイテストをä¿å­˜"
+ label_selected="デイテストをä¿å­˜" name="WLSaveDayCycle" />
+ <button label="デイテストをロード"
+ label_selected="デイテストをロード" name="WLLoadDayCycle" />
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_event.xml b/indra/newview/skins/default/xui/ja/floater_event.xml
index 306b262b70..671f9077d9 100644
--- a/indra/newview/skins/default/xui/ja/floater_event.xml
+++ b/indra/newview/skins/default/xui/ja/floater_event.xml
@@ -9,6 +9,18 @@
<floater.string name="dont_notify">
知らã›ãªã„
</floater.string>
+ <floater.string name="moderate">
+ Moderate
+ </floater.string>
+ <floater.string name="adult">
+ Adult
+ </floater.string>
+ <floater.string name="general">
+ General
+ </floater.string>
+ <floater.string name="unknown">
+ 䏿˜Ž
+ </floater.string>
<layout_stack name="layout">
<layout_panel name="profile_stack">
<text name="event_name">
@@ -21,12 +33,21 @@
主催者:
</text>
<text initial_value="(å–得中)" name="event_runby"/>
+ <text name="event_date_label">
+ 日付:
+ </text>
<text name="event_date">
10/10/2010
</text>
+ <text name="event_duration_label">
+ 期間:
+ </text>
<text name="event_duration">
1 時間
</text>
+ <text name="event_covercharge_label">
+ ã‚«ãƒãƒ¼ãƒãƒ£ãƒ¼ã‚¸ï¼š
+ </text>
<text name="event_cover">
ç„¡æ–™
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_gesture.xml b/indra/newview/skins/default/xui/ja/floater_gesture.xml
index a79854bcef..1ed5ad31db 100644
--- a/indra/newview/skins/default/xui/ja/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/ja/floater_gesture.xml
@@ -9,7 +9,7 @@
<floater.string name="copy_name">
[COPY_NAME] ã®ã‚³ãƒ”ー
</floater.string>
- <scroll_list bottom_delta="-385" height="360" name="gesture_list">
+ <scroll_list name="gesture_list">
<scroll_list.columns label="åå‰" name="name"/>
<scroll_list.columns label="ãƒãƒ£ãƒƒãƒˆ" name="trigger"/>
<scroll_list.columns label="" name="key"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
index 075cde8dec..6ccd6b9293 100644
--- a/indra/newview/skins/default/xui/ja/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
@@ -2,7 +2,7 @@
<floater name="godtools floater" title="ゴッド・ツール">
<tab_container name="GodTools Tabs">
<panel label="グリッド" name="grid">
- <button label="ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã™" label_selected="ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã™" name="Kick all users" width="160"/>
+ <button label="ä½äººå…¨å“¡ã‚’追ã„出ã™" label_selected="ä½äººå…¨å“¡ã‚’追ã„出ã™" name="Kick all users" width="160"/>
<button label="ã“ã®åœ°åŸŸã®åœ°å›³ã®è¡¨ç¤ºã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’消去" label_selected="ã“ã®åœ°åŸŸã®åœ°å›³ã®è¡¨ç¤ºã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’消去" name="Flush This Region&apos;s Map Visibility Caches"/>
</panel>
<panel label="地域" name="region">
diff --git a/indra/newview/skins/default/xui/ja/floater_im.xml b/indra/newview/skins/default/xui/ja/floater_im.xml
index 9c323f25e6..2e8993ec21 100644
--- a/indra/newview/skins/default/xui/ja/floater_im.xml
+++ b/indra/newview/skins/default/xui/ja/floater_im.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="インスタント・メッセージ">
<string name="only_user_message">
- ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ã„るユーザーã¯ã‚ãªãŸã ã‘ã§ã™ã€‚
+ ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ã¯ã€ã‚ãªãŸã—ã‹ã„ã¾ã›ã‚“。
</string>
<string name="offline_message">
[FIRST] [LAST]ã¯ã‚ªãƒ•ラインã§ã™ã€‚
@@ -32,7 +32,7 @@
</string>
<!-- ALL of the event strings should have [RECIPIENT] in them -->
<string name="add_session_event">
- [RECIPIENT] ã¨ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“
+ [RECIPIENT] ã¨ã®ãƒãƒ£ãƒƒãƒˆã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ä½äººã‚’追加ã§ãã¾ã›ã‚“。
</string>
<string name="message_session_event">
[RECIPIENT] ã¨ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“
diff --git a/indra/newview/skins/default/xui/ja/floater_im_container.xml b/indra/newview/skins/default/xui/ja/floater_im_container.xml
index 1d028258ec..06b65e27f0 100644
--- a/indra/newview/skins/default/xui/ja/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/ja/floater_im_container.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="æ›ç®—"/>
+<multi_floater name="floater_im_box" title="会話"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml
index 8ba297c7a0..20aec48541 100644
--- a/indra/newview/skins/default/xui/ja/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml
@@ -18,6 +18,15 @@
<string name="fly_back_tooltip">
後ã‚ã«é£›ã¶ï¼ˆä¸‹çŸ¢å°ã‹ S を押ã™ï¼‰
</string>
+ <string name="walk_title">
+ æ­©ã
+ </string>
+ <string name="run_title">
+ èµ°ã‚‹
+ </string>
+ <string name="fly_title">
+ 飛ã¶
+ </string>
<panel name="panel_actions">
<button label="" label_selected="" name="turn left btn" tool_tip="左をå‘ã(左矢å°ã‹ A を押ã™ï¼‰"/>
<button label="" label_selected="" name="turn right btn" tool_tip="å³ã‚’å‘ã(å³çŸ¢å°ã‹ D を押ã™ï¼‰"/>
@@ -30,6 +39,5 @@
<button label="" name="mode_walk_btn" tool_tip="歩行モード"/>
<button label="" name="mode_run_btn" tool_tip="走行モード"/>
<button label="" name="mode_fly_btn" tool_tip="飛行モード"/>
- <button label="é£›è¡Œåœæ­¢" name="stop_fly_btn" tool_tip="é£›è¡Œåœæ­¢"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_pay.xml b/indra/newview/skins/default/xui/ja/floater_pay.xml
index 4564354899..39bc37bc6c 100644
--- a/indra/newview/skins/default/xui/ja/floater_pay.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pay.xml
@@ -7,7 +7,7 @@
ä½äººã«æ”¯æ‰•ã†
</string>
<text name="payee_label">
- 支払ã„:
+ 支払ã†ï¼š
</text>
<icon name="icon_person" tool_tip="ä½äºº"/>
<text name="payee_name">
@@ -20,6 +20,6 @@
<text name="amount text">
金é¡ã‚’指定:
</text>
- <button label="支払ã„" label_selected="支払ã„" name="pay btn"/>
+ <button label="支払ã†" label_selected="支払ã†" name="pay btn"/>
<button label="å–り消ã—" label_selected="å–り消ã—" name="cancel btn"/>
</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 606dda12bd..4fc59e16d3 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 play btn" tool_tip="他人ã«ã‚‚見ãˆã‚‹ã‚ˆã†ã«å†ç”Ÿã—ã¾ã™"/>
<button label="ローカルå†ç”Ÿ" label_selected="åœæ­¢" name="Anim audition btn" tool_tip="自分ã ã‘ãŒè¦‹ãˆã‚‹ã‚ˆã†ã«å†ç”Ÿã—ã¾ã™"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml
index 8a0aea717c..64c577b879 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml
@@ -33,10 +33,10 @@
<text name="trigger_label">
トリガー:
</text>
- <text name="replace_text" tool_tip="トリガー・ワードをã“れらã®å˜èªžã«ç½®ãæ›ãˆã¾ã™ã€‚ ãŸã¨ãˆã°ã€ãƒˆãƒªã‚¬ãƒ¼ã€Œhelloã€ã‚’「Howdyã€ã«ç½®æ›ã™ã‚‹ã¨ã€ã€ŒI wanted to say helloã€ã¨ã„ã†ãƒãƒ£ãƒƒãƒˆæ–‡ãŒã€ŒI wanted to say howdyã€ã«å¤‰ã‚りã€ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã«ã‚‚ç½®æ›ãŒå映ã•れã¾ã™ã€‚">
+ <text name="replace_text" tool_tip="トリガーワードをã“れらã®å˜èªžã«ç½®ãæ›ãˆã¾ã™ã€‚ ãŸã¨ãˆã°ã€ãƒˆãƒªã‚¬ãƒ¼ã€Œhelloã€ã‚’「Howdyã€ã«ç½®æ›ã™ã‚‹ã¨ã€ã€ŒI wanted to say helloã€ã¨ã„ã†ãƒãƒ£ãƒƒãƒˆæ–‡ãŒã€ŒI wanted to say howdyã€ã«å¤‰ã‚りã€ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã«ã‚‚ç½®æ›ãŒå映ã•れã¾ã™ã€‚">
ç½®æ›ï¼š
</text>
- <line_editor name="replace_editor" tool_tip="トリガー・ワードをã“れらã®å˜èªžã«ç½®ãæ›ãˆã¾ã™ã€‚ ãŸã¨ãˆã°ã€ãƒˆãƒªã‚¬ãƒ¼ã€Œhelloã€ã‚’「Howdyã€ã«ç½®æ›ã™ã‚‹ã¨ã€ã€ŒI wanted to say helloã€ã¨ã„ã†ãƒãƒ£ãƒƒãƒˆæ–‡ãŒã€ŒI wanted to say howdyã€ã«å¤‰ã‚りã€ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã«ã‚‚ç½®æ›ãŒå映ã•れã¾ã™ã€‚"/>
+ <line_editor name="replace_editor" tool_tip="トリガーワードをã“れらã®å˜èªžã«ç½®ãæ›ãˆã¾ã™ã€‚ ãŸã¨ãˆã°ã€ãƒˆãƒªã‚¬ãƒ¼ã€Œhelloã€ã‚’「Howdyã€ã«ç½®æ›ã™ã‚‹ã¨ã€ã€ŒI wanted to say helloã€ã¨ã„ã†ãƒãƒ£ãƒƒãƒˆæ–‡ãŒã€ŒI wanted to say howdyã€ã«å¤‰ã‚りã€ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã«ã‚‚ç½®æ›ãŒå映ã•れã¾ã™ã€‚"/>
<text name="key_label">
ショートカット:
</text>
@@ -62,7 +62,7 @@
<text name="help_label">
待機ステップを入れãªã„é™ã‚Šã¯ã€ã™ã¹ã¦ã®ã‚¹ãƒ†ãƒƒãƒ—ãŒåŒæ™‚ã«èµ·ã“りã¾ã™ã€‚
</text>
- <check_box label="アクティブ" left="120" name="active_check" tool_tip="アクティブ・ジェスãƒãƒ£ãƒ¼ã¯ã€ãƒˆãƒªã‚¬ãƒ¼ãƒ»ãƒ•レーズを使ã†ã‹ã€ã¾ãŸã¯ãƒ›ãƒƒãƒˆãƒ»ã‚­ãƒ¼ã‚’押ã™ã“ã¨ã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã§ãã¾ã™ã€‚ 1ã¤ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆãƒ»ã‚­ãƒ¼ã«2ã¤ä»¥ä¸Šã®ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå ´åˆã€ãã®ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã¯ä¸¡æ–¹ã¨ã‚‚アクティブã§ã¯ãªããªã‚Šã¾ã™ã€‚"/>
+ <check_box label="アクティブ" name="active_check" tool_tip="アクティブãªã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã¯ã€ãƒˆãƒªã‚¬ãƒ¼ãƒ•レーズを使ã†ã‹ã€ãƒ›ãƒƒãƒˆã‚­ãƒ¼ã‚’押ã™ã¨åˆ‡ã‚Šæ›¿ã‚りã¾ã™ã€‚ 1ã¤ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚­ãƒ¼ã«2ã¤ä»¥ä¸Šã®ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå ´åˆã€ãã®ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã¯ä¸¡æ–¹ã¨ã‚‚アクティブã§ã¯ãªããªã‚Šã¾ã™ã€‚"/>
<button label="プレビュー" name="preview_btn"/>
<button label="ä¿å­˜" name="save_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
index c8375389ce..5c0f05cec6 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
説明:
</text>
- <button label="インワールドã§å†ç”Ÿã™ã‚‹" label_selected="インワールドã§å†ç”Ÿã™ã‚‹" name="Sound play btn" tool_tip="他人ã«ã‚‚èžã“ãˆã‚‹ã‚ˆã†ã«å†ç”Ÿã—ã¾ã™"/>
+ <button label="インワールドã§å†ç”Ÿ" label_selected="インワールドã§å†ç”Ÿ" name="Sound play btn" tool_tip="他人ã«ã‚‚èžã“ãˆã‚‹ã‚ˆã†ã«å†ç”Ÿã—ã¾ã™"/>
<button label="ローカルå†ç”Ÿ" label_selected="ローカルå†ç”Ÿ" name="Sound audition btn" tool_tip="自分ã ã‘ãŒèžã“ãˆã‚‹ã‚ˆã†ã«å†ç”Ÿã—ã¾ã™"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_publish_classified.xml b/indra/newview/skins/default/xui/ja/floater_publish_classified.xml
new file mode 100644
index 0000000000..ca6204424e
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_publish_classified.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="publish_classified" title="クラシファイド広告掲載">
+ <text name="explanation_text">
+ ã‚ãªãŸã®ã‚¯ãƒ©ã‚·ãƒ•ァイド広告ã¯ã€æŽ²è¼‰ã•ã‚ŒãŸæ—¥ã‹ã‚‰1週間有効ã§ã™ã€‚
+
+クラシファイド広告ã¯è¿”金ã§ãã¾ã›ã‚“ã®ã§ã”了承ãã ã•ã„。
+ </text>
+ <spinner label="広告費:" name="price_for_listing" tool_tip="掲載価格" value="50"/>
+ <text name="l$_text" value="L$"/>
+ <text name="more_info_text">
+ 詳ã—ã„æƒ…報(クラシファイドヘルプã¸ã®ãƒªãƒ³ã‚¯ï¼‰
+ </text>
+ <button label="掲載" name="publish_btn"/>
+ <button label="キャンセル" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
index c66f307f23..dc34441535 100644
--- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
@@ -49,7 +49,7 @@
<combo_box.item label="商å–引>製å“ã¾ãŸã¯ã‚µãƒ¼ãƒ“ã‚¹ã®æä¾›ãŒè¡Œã‚れãªã„" name="Commerce__Failure_to_deliver_product_or_service"/>
<combo_box.item label="é–‹ç¤ºï¼žãƒªã‚¢ãƒ«ãƒ¯ãƒ¼ãƒ«ãƒ‰ã®æƒ…å ±" name="Disclosure__Real_world_information"/>
<combo_box.item label="開示>離れãŸã¨ã“ã‚ã‹ã‚‰ãƒãƒ£ãƒƒãƒˆã‚’モニターã—ã¦ã„ã‚‹" name="Disclosure__Remotely_monitoring chat"/>
- <combo_box.item label="開示>Second Lifeã®æƒ…å ±/ãƒãƒ£ãƒƒãƒˆ/IM" name="Disclosure__Second_Life_information_chat_IMs"/>
+ <combo_box.item label="開示>Second Life ã®æƒ…å ±/ãƒãƒ£ãƒƒãƒˆ/IM" name="Disclosure__Second_Life_information_chat_IMs"/>
<combo_box.item label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žåœ°åŸŸãƒªã‚½ãƒ¼ã‚¹ã®ä½¿ç”¨ãŒä¸å…¬å¹³" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
<combo_box.item label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトã®ä¹±ç”¨" name="Disturbing_the_peace__Excessive_scripted_objects"/>
<combo_box.item label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ¨ã¦ç½®ã" name="Disturbing_the_peace__Object_littering"/>
@@ -57,7 +57,7 @@
<combo_box.item label="å¹³ç©ã‚’ä¹±ã™è¡Œç‚ºï¼žä¸è¦ãªåºƒå‘Šã‚¹ãƒ‘ム" name="Disturbing_the_peace__Unwanted_advert_spam"/>
<combo_box.item label="è©æ¬ºï¼ž L$" name="Fraud__L$"/>
<combo_box.item label="è©æ¬ºï¼žåœŸåœ°" name="Fraud__Land"/>
- <combo_box.item label="è©æ¬ºï¼žãƒžãƒ«ãƒå•†æ³•ã¾ãŸã¯ãƒã‚§ãƒ¼ãƒ³ãƒ»ãƒ¡ãƒ¼ãƒ«" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+ <combo_box.item label="è©æ¬ºï¼žãƒžãƒ«ãƒå•†æ³•ã¾ãŸã¯ãƒã‚§ãƒ¼ãƒ³ãƒ¡ãƒ¼ãƒ«" name="Fraud__Pyramid_scheme_or_chain_letter"/>
<combo_box.item label="è©æ¬ºï¼ž US$" name="Fraud__US$"/>
<combo_box.item label="嫌ãŒã‚‰ã›ï¼žåºƒå‘Šå§”託/視覚的ãªã‚¹ãƒ‘ム" name="Harassment__Advert_farms___visual_spam"/>
<combo_box.item label="嫌ãŒã‚‰ã›ï¼žå€‹äººã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸­å‚·" name="Harassment__Defaming_individuals_or_groups"/>
@@ -68,11 +68,11 @@
<combo_box.item label="ã‚ã„ã›ã¤ï¼žè‘—ã—ãä¸å¿«ã§ã‚ã‚‹ã¨è¦‹ãªã•れるコンテンツã¾ãŸã¯è¡Œç‚º" name="Indecency__Broadly_offensive_content_or_conduct"/>
<combo_box.item label="ã‚ã„ã›ã¤ï¼žä¸é©åˆ‡ãªã‚¢ãƒã‚¿ãƒ¼å" name="Indecency__Inappropriate_avatar_name"/>
<combo_box.item label="ã‚ã„ã›ã¤ï¼žPG地域ã§ã®ä¸é©åˆ‡ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¾ãŸã¯è¡Œç‚º" name="Indecency__Mature_content_in_PG_region"/>
- <combo_box.item label="ã‚ã„ã›ã¤ &gt; 控ãˆã‚指定ã®åœ°åŸŸã§ã®ä¸é©åˆ‡ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¾ãŸã¯è¡Œç‚º" name="Indecency__Inappropriate_content_in_Mature_region"/>
+ <combo_box.item label="ã‚ã„ã›ã¤ &gt; 「Moderateã€æŒ‡å®šã®åœ°åŸŸã§ã®ä¸é©åˆ‡ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¾ãŸã¯è¡Œç‚º" name="Indecency__Inappropriate_content_in_Mature_region"/>
<combo_box.item label="知的財産ã®ä¾µå®³ï¼žã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ’¤åŽ»" name="Intellectual_property_infringement_Content_Removal"/>
<combo_box.item label="知的財産ã®ä¾µå®³ï¼žã‚³ãƒ”ーBotåŠã³æ¨©é™ã®æ‚ªç”¨" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="ä¸å¯›å®¹" name="Intolerance"/>
- <combo_box.item label="土地>サンドボックス・リソースã®ä¹±ç”¨" name="Land__Abuse_of_sandbox_resources"/>
+ <combo_box.item label="土地>サンドボックスã®ãƒªã‚½ãƒ¼ã‚¹ã®ä¹±ç”¨" name="Land__Abuse_of_sandbox_resources"/>
<combo_box.item label="åœŸåœ°ï¼žä¸æ³•侵入>オブジェクト/テクスãƒãƒ£ãƒ¼" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="åœŸåœ°ï¼žä¸æ³•侵入>パーティクル" name="Land__Encroachment__Particles"/>
<combo_box.item label="åœŸåœ°ï¼žä¸æ³•侵入>樹木/æ¤ç‰©" name="Land__Encroachment__Trees_plants"/>
@@ -92,7 +92,7 @@
<text name="dscr_title">
詳細:
</text>
- <text name="bug_aviso" width="210">
+ <text name="bug_aviso">
ã§ãã‚‹ã ã‘具体的ã«è©³ã—ã記入ã—ã¦ãã ã•ã„。
</text>
<text name="incomplete_title">
diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
index 53384aca90..153b4068ad 100644
--- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
@@ -3,9 +3,9 @@
<text name="type_label">
スナップショットã®é€ã‚Šå…ˆ
</text>
- <radio_group label="スナップショット・タイプ" name="snapshot_type_radio">
+ <radio_group label="スナップショットã®ç¨®é¡ž" name="snapshot_type_radio">
<radio_item label="メール" name="postcard"/>
- <radio_item label="ç§ã®æŒã¡ç‰©ï¼ˆL$[AMOUNT])" name="texture"/>
+ <radio_item label="「æŒã¡ç‰©ã€ã«ä¿å­˜ï¼ˆL$ [AMOUNT])" name="texture"/>
<radio_item label="コンピューターã«ä¿å­˜" name="local"/>
</radio_group>
<text name="file_size_label">
@@ -16,7 +16,7 @@
<button label="ä¿å­˜ï¼ˆL$[AMOUNT])" name="upload_btn"/>
<flyout_button label="ä¿å­˜" name="save_btn" tool_tip="ç”»åƒã‚’ファイルã«ä¿å­˜">
<flyout_button.item label="ä¿å­˜" name="save_item"/>
- <flyout_button.item label="åå‰ã‚’付ã‘ã¦ä¿å­˜" name="saveas_item"/>
+ <flyout_button.item label="別åã§ä¿å­˜..." name="saveas_item"/>
</flyout_button>
<button label="キャンセル" name="discard_btn"/>
<button label="全表示" name="more_btn" tool_tip="詳ã—ã„設定"/>
@@ -29,26 +29,26 @@
</text>
<combo_box label="è§£åƒåº¦" name="postcard_size_combo">
<combo_box.item label="ç¾åœ¨ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="640 x 480" name="640x480"/>
+ <combo_box.item label="800 x 600" name="800x600"/>
+ <combo_box.item label="1024 x 768" name="1024x768"/>
<combo_box.item label="カスタム" name="Custom"/>
</combo_box>
<combo_box label="è§£åƒåº¦" name="texture_size_combo">
<combo_box.item label="ç¾åœ¨ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" name="CurrentWindow"/>
- <combo_box.item label="å°ï¼ˆ128x128)" name="Small(128x128)"/>
- <combo_box.item label="中(256x256)" name="Medium(256x256)"/>
- <combo_box.item label="大(512x512)" name="Large(512x512)"/>
+ <combo_box.item label="å°ï¼ˆ128 x 128)" name="Small(128x128)"/>
+ <combo_box.item label="中(256 x 256)" name="Medium(256x256)"/>
+ <combo_box.item label="大(512 x5 12)" name="Large(512x512)"/>
<combo_box.item label="カスタム" name="Custom"/>
</combo_box>
<combo_box label="è§£åƒåº¦" name="local_size_combo">
<combo_box.item label="ç¾åœ¨ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" name="CurrentWindow"/>
- <combo_box.item label="320x240" name="320x240"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="1280x1024" name="1280x1024"/>
- <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="320 x 240" name="320x240"/>
+ <combo_box.item label="640 x 480" name="640x480"/>
+ <combo_box.item label="800 x 600" name="800x600"/>
+ <combo_box.item label="1024 x 768" name="1024x768"/>
+ <combo_box.item label="1280 x 1024" name="1280x1024"/>
+ <combo_box.item label="1600 x 1200" name="1600x1200"/>
<combo_box.item label="カスタム" name="Custom"/>
</combo_box>
<combo_box label="å½¢å¼" name="local_format_combo">
@@ -74,6 +74,6 @@
<check_box label="ç”»é¢å…¨ä½“ã‚’é™æ­¢" name="freeze_frame_check"/>
<check_box label="自動更新" name="auto_snapshot_check"/>
<string name="unknown">
- 未知
+ 䏿˜Ž
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_sys_well.xml b/indra/newview/skins/default/xui/ja/floater_sys_well.xml
index 3ac2a11a97..45e97bdf5d 100644
--- a/indra/newview/skins/default/xui/ja/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/ja/floater_sys_well.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notification_chiclet" title="通知">
+<floater name="sys_well_window" title="通知">
<string name="title_im_well_window">
- æ›ç®—
+ 会話
</string>
<string name="title_notification_well_window">
通知
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index 24bb5b614c..a8261a7493 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -4,7 +4,7 @@
色ã®ä»˜ã„ãŸãƒãƒ³ãƒ‰ã‚’ドラッグã—ã¦ã‚ªãƒ–ジェクトを回転
</floater.string>
<floater.string name="status_scale">
- é¸æŠžã—ãŸå´ã‚’クリックã—ã€ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦å¼•ã伸ã°ã™
+ é¸æŠžã—ãŸå´ã‚’クリックã—ã€ãƒ‰ãƒ©ãƒƒã‚°ã§å¼•ã伸ã°ã™
</floater.string>
<floater.string name="status_move">
移動:ドラッグã€ã‚³ãƒ”ー:Shift + ドラッグ
@@ -69,8 +69,8 @@
</text>
<check_box label="両å´ã‚’引伸ã°ã™" left="116" name="checkbox uniform"/>
<check_box initial_value="true" label="テクスãƒãƒ£ã‚’引伸ã°ã™" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="グリッドãƒã‚¤ãƒ³ãƒˆã«ã‚¹ãƒŠãƒƒãƒ—" left_delta="27" name="checkbox snap to grid"/>
- <combo_box left_delta="60" name="combobox grid mode" tool_tip="オブジェクトã®é…ç½®ã«ä½¿ã†ã‚°ãƒªãƒƒãƒ‰ãƒ«ãƒ¼ãƒ©ã‚’é¸æŠž" width="76">
+ <check_box initial_value="true" label="グリッドã«ã‚¹ãƒŠãƒƒãƒ—" left_delta="27" name="checkbox snap to grid"/>
+ <combo_box left_delta="60" name="combobox grid mode" tool_tip="オブジェクトã®é…ç½®ã«ä½¿ã†ã‚°ãƒªãƒƒãƒ‰ãƒ«ãƒ¼ãƒ©ã‚’é¸æŠžã—ã¾ã™" width="76">
<combo_box.item label="インワールドグリッド" name="World"/>
<combo_box.item label="ローカルグリッド" name="Local"/>
<combo_box.item label="リファレンスグリッド" name="Reference"/>
@@ -113,7 +113,7 @@
<text name="Strength:">
強度
</text>
- <button label="é©ç”¨" label_selected="é©ç”¨" name="button apply to selection" tool_tip="é¸æŠžã—ãŸåœŸåœ°ã‚’修正"/>
+ <button label="é©ç”¨" label_selected="é©ç”¨" name="button apply to selection" tool_tip="é¸æŠžã—ãŸåœŸåœ°ã‚’修正ã—ã¾ã™"/>
<text name="obj_count">
オブジェクト: [COUNT]
</text>
@@ -179,20 +179,20 @@
<text name="Group:">
グループ:
</text>
- <button label="設定..." label_selected="設定..." name="button set group" tool_tip="ã“ã®ã‚ªãƒ–ジェクト権é™ã‚’共有ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠž"/>
+ <button label="設定..." label_selected="設定..." name="button set group" tool_tip="ã“ã®ã‚ªãƒ–ジェクト権é™ã‚’共有ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã—ã¾ã™"/>
<name_box initial_value="ローディング..." name="Group Name Proxy"/>
- <button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’譲渡ã™ã‚‹ã¨ã€Œæ¬¡ã®æ‰€æœ‰è€…ã€ã®æ¨©é™ãŒé©ç”¨ã•れã¾ã™ã€‚ グループ共有オブジェクトã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚ªãƒ•ィサーãŒè­²æ¸¡ã§ãã¾ã™ã€‚"/>
- <check_box label="共有" name="checkbox share with group" tool_tip="設定ã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼å…¨å“¡ã«ã“ã®ã‚ªãƒ–ジェクトã®ä¿®æ­£æ¨©é™ã‚’与ãˆã¾ã™ã€‚ 譲渡ã—ãªã„é™ã‚Šã€å½¹å‰²åˆ¶é™ã‚’有効ã«ã¯ã§ãã¾ã›ã‚“。"/>
+ <button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’譲渡ã™ã‚‹ã¨ã€Œæ¬¡ã®æ‰€æœ‰è€…ã€ã®æ¨©é™ãŒé©ç”¨ã•れã¾ã™ã€‚ グループ共有オブジェクトã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚ªãƒ•ィサーãŒè­²æ¸¡ã§ãã¾ã™"/>
+ <check_box label="共有" name="checkbox share with group" tool_tip="設定ã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼å…¨å“¡ã«ã“ã®ã‚ªãƒ–ジェクトã®ä¿®æ­£æ¨©é™ã‚’与ãˆã¾ã™ã€‚ 譲渡ã—ãªã„é™ã‚Šã€å½¹å‰²åˆ¶é™ã‚’有効ã«ã¯ã§ãã¾ã›ã‚“"/>
<text name="label click action">
クリックã§ï¼š
</text>
<combo_box name="clickaction">
<combo_box.item label="触る(デフォルト)" name="Touch/grab(default)"/>
<combo_box.item label="オブジェクトã«åº§ã‚‹" name="Sitonobject"/>
- <combo_box.item label="オブジェクトを購入" name="Buyobject"/>
- <combo_box.item label="オブジェクトã¸ã®æ”¯æ‰•ã„" name="Payobject"/>
+ <combo_box.item label="オブジェクトを購入ã™ã‚‹" name="Buyobject"/>
+ <combo_box.item label="ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ”¯æ‰•ã†" name="Payobject"/>
<combo_box.item label="é–‹ã" name="Open"/>
- <combo_box.item label="ズーム" name="Zoom"/>
+ <combo_box.item label="ズームã™ã‚‹" name="Zoom"/>
</combo_box>
<check_box label="販売対象:" name="checkbox for sale"/>
<combo_box name="sale type">
@@ -216,7 +216,7 @@
</text>
<check_box label="修正" name="checkbox next owner can modify"/>
<check_box label="コピー" name="checkbox next owner can copy"/>
- <check_box label="å†è²©ãƒ»ãƒ—レゼント" name="checkbox next owner can transfer" tool_tip="æ¬¡ã®æ‰€æœ‰è€…ã¯ã“ã®ã‚ªãƒ–ジェクトを他人ã«ã‚ã’ãŸã‚Šå†è²©ã§ãã¾ã™"/>
+ <check_box label="å†è²©ãƒ»ãƒ—レゼント" name="checkbox next owner can transfer" tool_tip="æ¬¡ã«æ‰€æœ‰ã™ã‚‹äººã¯ã€ã“ã®ã‚ªãƒ–ジェクトを他人ã«ã‚ã’ãŸã‚Šå†è²©ã§ãã¾ã™"/>
<text name="B:">
B:
</text>
@@ -238,7 +238,7 @@
</panel>
</panel>
<panel label="形状" name="Object">
- <check_box label="ロック済ã¿" name="checkbox locked" tool_tip="オブジェクトã®ç§»å‹•ã¨å‰Šé™¤ã‚’ç¦æ­¢ã—ã¾ã™ã€‚ ã“ã®æ©Ÿèƒ½ã‚’使ã†ã¨ã€åˆ¶ä½œä¸­ã®æ„図ã›ã¬ç·¨é›†ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚"/>
+ <check_box label="ロック" name="checkbox locked" tool_tip="オブジェクトã®ç§»å‹•ã¨å‰Šé™¤ã‚’ç¦æ­¢ã—ã¾ã™ã€‚ ã“ã®æ©Ÿèƒ½ã‚’使ã†ã¨ã€åˆ¶ä½œä¸­ã®æ„図ã›ã¬ç·¨é›†ã‚’防ãã“ã¨ãŒã§ãã¾ã™"/>
<check_box label="物ç†" name="Physical Checkbox Ctrl" tool_tip="オブジェクトã«å¯¾ã™ã‚‹é‡åŠ›ã®ä½œç”¨ã¨å½±éŸ¿ã‚’有効ã«ã—ã¾ã™"/>
<check_box label="臨時" name="Temporary Checkbox Ctrl" tool_tip="制作後 1 分ã§ã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•れã¾ã™"/>
<check_box label="ファントム" name="Phantom Checkbox Ctrl" tool_tip="オブジェクトåŒå£«ã®è¡çªã¾ãŸã¯ã‚ªãƒ–ジェクトã¨ã‚¢ãƒã‚¿ãƒ¼ã®è¡çªã‚’回é¿ã—ã¾ã™"/>
@@ -339,7 +339,7 @@
<text name="text revolutions">
回転体
</text>
- <texture_picker label="スカルプトテクスãƒãƒ£" name="sculpt texture control" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¦ãã ã•ã„。"/>
+ <texture_picker label="スカルプトテクスãƒãƒ£" name="sculpt texture control" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¦ãã ã•ã„"/>
<check_box label="ミラー" name="sculpt mirror control" tool_tip="スカルプトプリムを X 軸上ã§å転ã•ã›ã¾ã™"/>
<check_box label="è£è¿”ã—" name="sculpt invert control" tool_tip="スカルプトプリムをå転ã•ã›ã¦è£è¿”ã—ã¾ã™"/>
<text name="label sculpt type">
@@ -386,7 +386,7 @@
<panel.string name="string repeats per face">
é¢ã”ã¨ã«ç¹°ã‚Šè¿”ã™
</panel.string>
- <texture_picker label="テクスãƒãƒ£ãƒ¼" name="texture control" tool_tip="写真をクリックã—ã¦é¸æŠž"/>
+ <texture_picker label="テクスãƒãƒ£" name="texture control" tool_tip="写真をクリックã—ã¦é¸æŠžã—ã¾ã™"/>
<color_swatch label="色" name="colorswatch" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
<text name="color trans">
é€éŽåº¦ %
diff --git a/indra/newview/skins/default/xui/ja/floater_tos.xml b/indra/newview/skins/default/xui/ja/floater_tos.xml
index 85ac102885..337766987c 100644
--- a/indra/newview/skins/default/xui/ja/floater_tos.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tos.xml
@@ -9,9 +9,9 @@
<text name="tos_title">
利用è¦ç´„
</text>
- <check_box label="利用è¦ç´„ã«åŒæ„ã—ã¾ã™" name="agree_chk"/>
+ <check_box label="利用è¦ç´„ã¨ãƒ—ライãƒã‚·ãƒ¼ãƒãƒªã‚·ãƒ¼ã«åŒæ„ã—ã¾ã™" name="agree_chk"/>
<text name="tos_heading">
- 次ã®åˆ©ç”¨è¦ç´„をよããŠèª­ã¿ãã ã•ã„。 [SECOND_LIFE] ã¸ã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’ç¶šã‘ã‚‹ã«ã¯ã€è¦ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ 次ã®åˆ©ç”¨è¦ç´„ã¨ãƒ—ライãƒã‚·ãƒ¼ãƒãƒªã‚·ãƒ¼ã‚’よããŠèª­ã¿ãã ã•ã„。 [SECOND_LIFE] ã¸ã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’ç¶šã‘ã‚‹ã«ã¯ã€è¦ç´„ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
</text>
<text_editor name="tos_text">
TOS_TEXT
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
index 5a0694e5c5..5af8f20690 100644
--- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
@@ -16,6 +16,9 @@
è¿‘ãã«ãƒœã‚¤ã‚¹ã‚’有効ã«ã—ã¦ã„る人ã¯ã„ã¾ã›ã‚“。
</string>
<layout_stack name="my_call_stack">
+ <layout_panel name="my_panel">
+ <text name="user_text" value="マイ ã‚¢ãƒã‚¿ãƒ¼ï¼š"/>
+ </layout_panel>
<layout_panel name="leave_call_btn_panel">
<button label="コール終了" name="leave_call_btn"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_water.xml b/indra/newview/skins/default/xui/ja/floater_water.xml
index 52cd91a08a..fb64332e79 100644
--- a/indra/newview/skins/default/xui/ja/floater_water.xml
+++ b/indra/newview/skins/default/xui/ja/floater_water.xml
@@ -28,10 +28,10 @@
<slider label="2" name="WaterNormalScaleY"/>
<slider label="3" name="WaterNormalScaleZ"/>
<text name="HDText">
- フレãƒãƒ«ãƒ»ã‚¹ã‚±ãƒ¼ãƒ«
+ フレãƒãƒ«ã®ã‚¹ã‚±ãƒ¼ãƒ«
</text>
<text name="FresnelOffsetText">
- フレãƒãƒ«ãƒ»ã‚ªãƒ•セット
+ フレãƒãƒ«ã®ã‚ªãƒ•セット
</text>
<text name="DensMultText">
æ°´é¢ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
@@ -63,7 +63,7 @@
Y
</text>
<text name="BHText3">
- ノーマル・マップ
+ ノーマルマップ
</text>
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/ja/floater_world_map.xml b/indra/newview/skins/default/xui/ja/floater_world_map.xml
index c44c6b3fd3..0e489be9a8 100644
--- a/indra/newview/skins/default/xui/ja/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/ja/floater_world_map.xml
@@ -5,7 +5,7 @@
表記・記å·
</text>
</panel>
- <panel>
+ <panel name="layout_panel_2">
<button label="ç¾åœ¨åœ°ã‚’表示" label_selected="ç¾åœ¨åœ°ã‚’表示" name="Show My Location" tool_tip="ã‚¢ãƒã‚¿ãƒ¼ã®ä½ç½®ã‚’地図ã®ä¸­å¿ƒã«è¡¨ç¤ºã—ã¾ã™"/>
<text name="me_label">
自分
@@ -23,7 +23,7 @@
土地販売
</text>
<text name="by_owner_label">
- 所有者ã®è²©å£²
+ 所有者ã«ã¦
</text>
<text name="auction_label">
土地オークション
@@ -37,46 +37,46 @@
</text>
<check_box label="PG" name="event_chk"/>
<text name="pg_label">
- 一般
+ General
</text>
<check_box initial_value="true" label="Mature" name="event_mature_chk"/>
<text name="mature_label">
- 控ãˆã‚
+ Moderate
</text>
<check_box label="Adult" name="event_adult_chk"/>
<text name="adult_label">
- アダルト
+ Adult
</text>
</panel>
- <panel>
+ <panel name="layout_panel_3">
<text name="find_on_map_label">
- åœ°å›³ä¸Šã§æŽ¢ã™
+ 地図上ã§è¦‹ã¤ã‘ã‚‹
</text>
</panel>
- <panel>
- <combo_box label="オンラインã®ãƒ•レンド" name="friend combo" tool_tip="フレンドを地図上ã«è¡¨ç¤ºã—ã¾ã™">
+ <panel name="layout_panel_4">
+ <combo_box label="オンラインã®ãƒ•レンド" name="friend combo" tool_tip="フレンドを地図ã«è¡¨ç¤º">
<combo_box.item label="オンラインã®ãƒ•レンド" name="item1"/>
</combo_box>
<combo_box label="マイ ランドマーク" name="landmark combo" tool_tip="地図上ã«è¡¨ç¤ºã™ã‚‹ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯">
<combo_box.item label="マイ ランドマーク" name="item1"/>
</combo_box>
- <search_editor label="リージョンå" name="location" tool_tip="地域åを入力ã—ã¦ãã ã•ã„。"/>
- <button label="検索" name="DoSearch" tool_tip="地域検索"/>
+ <search_editor label="リージョンå" name="location" tool_tip="リージョンåを入力ã—ã¾ã™"/>
+ <button label="検索" name="DoSearch" tool_tip="リージョン検索"/>
<button name="Clear" tool_tip="追跡ラインをクリアã—ã¦åœ°å›³ã‚’リセットã—ã¾ã™"/>
<scroll_list name="search_results">
<scroll_list.columns label="" name="icon"/>
<scroll_list.columns label="" name="sim_name"/>
</scroll_list>
<button label="テレãƒãƒ¼ãƒˆ" label_selected="テレãƒãƒ¼ãƒˆ" name="Teleport" tool_tip="é¸æŠžã—ãŸå ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™"/>
- <button label="SLurl をコピー" name="copy_slurl" tool_tip="ç¾åœ¨åœ°ã‚’ SLurl ã§ã‚³ãƒ”ーã—㦠Web ã§ä½¿ç”¨ã—ã¾ã™ã€‚"/>
- <button label="é¸æŠžã‚’ã‚’è¡¨ç¤ºã™ã‚‹" label_selected="目的地を表示" name="Show Destination" tool_tip="é¸æŠžã—ãŸå ´æ‰€ã‚’地図ã®ä¸­å¿ƒã«è¡¨ç¤ºã—ã¾ã™"/>
+ <button label="SLurl をコピー" name="copy_slurl" tool_tip="ç¾åœ¨åœ°ã® SLurl をコピーã—㦠Web ã§ä½¿ç”¨ã—ã¾ã™ã€‚"/>
+ <button label="é¸æŠžã‚’è¡¨ç¤ºã™ã‚‹" label_selected="目的地を表示" name="Show Destination" tool_tip="é¸æŠžã—ãŸå ´æ‰€ã‚’地図ã®ä¸­å¿ƒã«è¡¨ç¤ºã—ã¾ã™"/>
</panel>
- <panel>
+ <panel name="layout_panel_5">
<text name="zoom_label">
ズーム
</text>
</panel>
- <panel>
+ <panel name="layout_panel_6">
<slider label="ズーム" name="zoom slider"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/language_settings.xml b/indra/newview/skins/default/xui/ja/language_settings.xml
index 71418d446a..72382417d9 100644
--- a/indra/newview/skins/default/xui/ja/language_settings.xml
+++ b/indra/newview/skins/default/xui/ja/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">japanese</string>
+ <string name="DarwinLocale">ja_JP.UTF-8</string>
+ <string name="LinuxLocale">ja_JP.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml
index a2dbc34270..1607b2647e 100644
--- a/indra/newview/skins/default/xui/ja/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml
@@ -6,8 +6,8 @@
<menu_item_call label="プロパティ" name="Task Properties"/>
<menu_item_call label="åå‰ã®å¤‰æ›´" name="Task Rename"/>
<menu_item_call label="削除" name="Task Remove"/>
- <menu_item_call label="ゴミ箱を空ã«ã™ã‚‹" name="Empty Trash"/>
- <menu_item_call label="éºå¤±ç‰©ãƒ•ォルダを空ã«ã™ã‚‹" name="Empty Lost And Found"/>
+ <menu_item_call label="ã”ã¿ç®±ã‚’空ã«ã™ã‚‹" name="Empty Trash"/>
+ <menu_item_call label="紛失物フォルダを空ã«ã™ã‚‹" name="Empty Lost And Found"/>
<menu_item_call label="æ–°ã—ã„フォルダ" name="New Folder"/>
<menu_item_call label="æ–°ã—ã„スクリプト" name="New Script"/>
<menu_item_call label="æ–°ã—ã„ノートカード" name="New Note"/>
@@ -49,34 +49,34 @@
<menu_item_call label="ç€ç”¨ä¸­ã®ã‚¢ã‚¦ãƒˆãƒ•ィットを入れ替ãˆã‚‹" name="Replace Outfit"/>
<menu_item_call label="ç€ç”¨ä¸­ã®ã‚¢ã‚¦ãƒˆãƒ•ィットã«è¿½åŠ ã™ã‚‹" name="Add To Outfit"/>
<menu_item_call label="ç€ç”¨ä¸­ã®ã‚¢ã‚¦ãƒˆãƒ•ィットã‹ã‚‰å–り除ã" name="Remove From Outfit"/>
- <menu_item_call label="アイテムを除外" name="Purge Item"/>
- <menu_item_call label="アイテムを復元" name="Restore Item"/>
+ <menu_item_call label="アイテムを除外ã™ã‚‹" name="Purge Item"/>
+ <menu_item_call label="アイテムを復元ã™ã‚‹" name="Restore Item"/>
<menu_item_call label="オリジナルを探ã™" name="Find Original"/>
<menu_item_call label="é–‹ã" name="Open"/>
<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="Rename"/>
+ <menu_item_call label="UUID をコピーã™ã‚‹" name="Copy Asset UUID"/>
<menu_item_call label="コピー" name="Copy"/>
<menu_item_call label="貼り付ã‘" name="Paste"/>
- <menu_item_call label="リンクã®è²¼ã‚Šä»˜ã‘" name="Paste As Link"/>
+ <menu_item_call label="リンクを貼り付ã‘ã‚‹" name="Paste As Link"/>
<menu_item_call label="リンクを外ã™" name="Remove Link"/>
<menu_item_call label="削除" name="Delete"/>
<menu_item_call label="システムフォルダを削除ã™ã‚‹" name="Delete System Folder"/>
- <menu_item_call label="コンファレンスãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹" name="Conference Chat Folder"/>
- <menu_item_call label="å†ç”Ÿ" name="Sound Play"/>
+ <menu_item_call label="コンファレンスãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹ã™ã‚‹" name="Conference Chat Folder"/>
+ <menu_item_call label="å†ç”Ÿã™ã‚‹" name="Sound Play"/>
<menu_item_call label="ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ã®æƒ…å ±" name="About Landmark"/>
<menu_item_call label="インワールドã§å†ç”Ÿã™ã‚‹" name="Animation Play"/>
- <menu_item_call label="ローカルå†ç”Ÿ" name="Animation Audition"/>
- <menu_item_call label="インスタントメッセージをé€ä¿¡" name="Send Instant Message"/>
+ <menu_item_call label="ローカルã§å†ç”Ÿã™ã‚‹" name="Animation Audition"/>
+ <menu_item_call label="インスタントメッセージをé€ä¿¡ã™ã‚‹" name="Send Instant Message"/>
<menu_item_call label="テレãƒãƒ¼ãƒˆã‚’é€ã‚‹..." name="Offer Teleport..."/>
- <menu_item_call label="会議ãƒãƒ£ãƒƒãƒˆé–‹å§‹" name="Conference Chat"/>
+ <menu_item_call label="コンファレンスãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹ã™ã‚‹" name="Conference Chat"/>
<menu_item_call label="アクティブ" name="Activate"/>
<menu_item_call label="éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–" name="Deactivate"/>
- <menu_item_call label="別åã§ä¿å­˜" name="Save As"/>
+ <menu_item_call label="別åã§ä¿å­˜ã™ã‚‹" name="Save As"/>
<menu_item_call label="自分ã‹ã‚‰å–り外ã™" name="Detach From Yourself"/>
<menu_item_call label="装ç€" name="Object Wear"/>
<menu label="装ç€å…ˆ" name="Attach To"/>
- <menu label="HUD装ç€å…ˆ" name="Attach To HUD"/>
+ <menu label="HUD 装ç€å…ˆ" name="Attach To HUD"/>
<menu_item_call label="編集" name="Wearable Edit"/>
<menu_item_call label="装ç€" name="Wearable Wear"/>
<menu_item_call label="å–り外ã™" name="Take Off"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
index ec49c3a98d..0a89c5e63a 100644
--- a/indra/newview/skins/default/xui/ja/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
+<menu name="Popup">
<menu_item_call label="ズーム(近)" name="Zoom Close"/>
<menu_item_call label="ズーム(中)" name="Zoom Medium"/>
<menu_item_call label="ズーム(é ï¼‰" name="Zoom Far"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml
index 888d382e7e..e59a500534 100644
--- a/indra/newview/skins/default/xui/ja/menu_object.xml
+++ b/indra/newview/skins/default/xui/ja/menu_object.xml
@@ -5,6 +5,7 @@
<menu_item_call label="制作" name="Build"/>
<menu_item_call label="é–‹ã" name="Open"/>
<menu_item_call label="ã“ã“ã«åº§ã‚‹" name="Object Sit"/>
+ <menu_item_call label="ç«‹ã¡ä¸ŠãŒã‚‹" name="Object Stand Up"/>
<menu_item_call label="オブジェクトã®ãƒ—ロフィール" name="Object Inspect"/>
<menu_item_call label="ズームイン" name="Zoom In"/>
<context_menu label="è£…ç€ â–¶" name="Put On">
@@ -12,12 +13,13 @@
<context_menu label="å–り付ã‘ã‚‹ â–¶" name="Object Attach"/>
<context_menu label="HUD ã‚’å–り付ã‘ã‚‹ â–¶" name="Object Attach HUD"/>
</context_menu>
- <context_menu label="å–り外㙠▶" name="Remove">
+ <context_menu label="å–り除ã â–¶" name="Remove">
<menu_item_call label="嫌ãŒã‚‰ã›ã®å ±å‘Š" name="Report Abuse..."/>
<menu_item_call label="ブロック" name="Object Mute"/>
<menu_item_call label="è¿”å´" name="Return..."/>
<menu_item_call label="削除" name="Delete"/>
</context_menu>
+ <menu_item_call label="è²·ã†" name="Pie Object Bye"/>
<menu_item_call label="å–ã‚‹" name="Pie Object Take"/>
<menu_item_call label="コピーをå–ã‚‹" name="Take Copy"/>
<menu_item_call label="支払ã†" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml
index 4788803789..8d84b0e521 100644
--- a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml
@@ -5,6 +5,7 @@
<menu_item_call label="フレンドを削除" name="Remove Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="コール" name="Call"/>
+ <menu_item_call label="地図" name="Map"/>
<menu_item_call label="共有" name="Share"/>
<menu_item_call label="支払ã†" name="Pay"/>
<menu_item_check label="ブロック・ブロック解除" name="Block/Unblock"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml
index d7107dc153..9d3a5dda1c 100644
--- a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="profile_overflow_menu">
+ <menu_item_call label="地図" name="show_on_map"/>
<menu_item_call label="支払ã†" name="pay"/>
<menu_item_call label="共有" name="share"/>
<menu_item_call label="ブロック" name="block"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 85fb23d5b7..bcad812457 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -6,12 +6,12 @@
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=ja"/>
</menu_item_call>
<menu_item_call label="L$ ã®è³¼å…¥" name="Buy and Sell L$"/>
- <menu_item_call label="マイ プロフィール" name="Profile"/>
- <menu_item_call label="マイ 容姿" name="Appearance"/>
- <menu_item_check label="マイ æŒã¡ç‰©" name="Inventory"/>
- <menu_item_call label="æŒã¡ç‰©ã‚’サイドトレイã«è¡¨ç¤º" name="ShowSidetrayInventory"/>
- <menu_item_call label="マイ ジェスãƒãƒ£ãƒ¼" name="Gestures"/>
- <menu label="マイ ログイン状態" name="Status">
+ <menu_item_call label="プロフィール" name="Profile"/>
+ <menu_item_call label="容姿" name="Appearance"/>
+ <menu_item_check label="æŒã¡ç‰©" name="Inventory"/>
+ <menu_item_check label="æŒã¡ç‰©" name="ShowSidetrayInventory"/>
+ <menu_item_check label="ジェスãƒãƒ£ãƒ¼" name="Gestures"/>
+ <menu label="ログイン状態" name="Status">
<menu_item_call label="一時退席中" name="Set Away"/>
<menu_item_call label="å–り込ã¿ä¸­" name="Set Busy"/>
</menu>
@@ -24,7 +24,6 @@
<menu_item_call label="所属グループ" name="My Groups"/>
<menu_item_check label="è¿‘ãã®ãƒãƒ£ãƒƒãƒˆ" name="Nearby Chat"/>
<menu_item_call label="è¿‘ãã«ã„る人" name="Active Speakers"/>
- <menu_item_check label="è¿‘ãã®ãƒ¡ãƒ‡ã‚£ã‚¢" name="Nearby Media"/>
</menu>
<menu label="世界" name="World">
<menu_item_check label="ミニマップ" name="Mini-Map"/>
@@ -39,7 +38,13 @@
<menu_item_call label="自分ã®åœŸåœ°" name="My Land"/>
<menu label="表示" name="LandShow">
<menu_item_check label="移動コントロール" name="Movement Controls"/>
- <menu_item_check label="コントロールを表示" name="Camera Controls"/>
+ <menu_item_check label="カメラコントロール" name="Camera Controls"/>
+ <menu_item_check label="ç«‹å…¥ç¦æ­¢ãƒ©ã‚¤ãƒ³" name="Ban Lines"/>
+ <menu_item_check label="ビーコン(標識)" name="beacons"/>
+ <menu_item_check label="プロパティ境界線" name="Property Lines"/>
+ <menu_item_check label="土地所有者" name="Land Owners"/>
+ <menu_item_check label="座標" name="Coordinates"/>
+ <menu_item_check label="区画プロパティ" name="Parcel Properties"/>
</menu>
<menu_item_call label="ホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ" name="Teleport Home"/>
<menu_item_call label="ç¾åœ¨åœ°ã‚’ホームã«è¨­å®š" name="Set Home to Here"/>
@@ -58,7 +63,7 @@
<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="Create"/>
<menu_item_call label="土地ツール" name="Land"/>
</menu>
<menu label="編集" name="Edit">
@@ -78,6 +83,7 @@
<menu_item_call label="é¸æŠžã—ãŸã‚‚ã®ã«ç„¦ç‚¹ã‚’åˆã‚ã›ã‚‹" name="Focus on Selection"/>
<menu_item_call label="é¸æŠžã—ãŸã‚‚ã®ã‚’ズームã™ã‚‹" name="Zoom to Selection"/>
<menu label="オブジェクト" name="Object">
+ <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"/>
@@ -91,24 +97,24 @@
<menu_item_call label="ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’å®Ÿè¡Œåœæ­¢ã«ã™ã‚‹" name="Set Scripts to Not Running"/>
</menu>
<menu label="オプション" name="Options">
- <menu_item_call label="デフォルトã®ã‚¢ãƒƒãƒ—ロード権é™ã‚’設定" name="perm prefs"/>
- <menu_item_check label="権é™ã®è©³ç´°ã‚’表示" name="DebugPermissions"/>
- <menu_item_check label="ç§ã®ã‚ªãƒ–ジェクトã ã‘ã‚’é¸æŠž" name="Select Only My Objects"/>
- <menu_item_check label="動的オブジェクトã®ã¿é¸æŠž" name="Select Only Movable Objects"/>
- <menu_item_check label="環境ã§é¸æŠž" name="Select By Surrounding"/>
- <menu_item_check label="éžè¡¨ç¤ºã®é¸æŠžã‚’表示" name="Show Hidden Selection"/>
- <menu_item_check label="é¸æŠžã—ãŸå…‰ã®åŠå¾„範囲を表示" name="Show Light Radius for Selection"/>
- <menu_item_check label="é¸æŠžã—ãŸãƒ“ームを表示" name="Show Selection Beam"/>
- <menu_item_check label="グリッドãƒã‚¤ãƒ³ãƒˆã«ã‚¹ãƒŠãƒƒãƒ—" name="Snap to Grid"/>
- <menu_item_call label="オブジェクトã®XY軸をグリッドã«ã‚¹ãƒŠãƒƒãƒ—" name="Snap Object XY to Grid"/>
- <menu_item_call label="é¸æŠžã‚’ã‚°ãƒªãƒƒãƒ‰ã«ä½¿ç”¨" name="Use Selection for Grid"/>
+ <menu_item_call label="デフォルトã®ã‚¢ãƒƒãƒ—ロード権é™ã‚’設定ã™ã‚‹" name="perm prefs"/>
+ <menu_item_check label="権é™ã®è©³ç´°ã‚’表示ã™ã‚‹" name="DebugPermissions"/>
+ <menu_item_check label="ç§ã®ã‚ªãƒ–ジェクトã ã‘ã‚’é¸æŠžã™ã‚‹" name="Select Only My Objects"/>
+ <menu_item_check label="動的オブジェクトã ã‘ã‚’é¸æŠžã™ã‚‹" name="Select Only Movable Objects"/>
+ <menu_item_check label="ç¯„å›²å†…ã‚’é¸æŠžã™ã‚‹" name="Select By Surrounding"/>
+ <menu_item_check label="隠れãŸä½ç½®ã®é¸æŠžã‚‚表示ã™ã‚‹" name="Show Hidden Selection"/>
+ <menu_item_check label="é¸æŠžã—ãŸå…‰ã®åŠå¾„範囲を表示ã™ã‚‹" name="Show Light Radius for Selection"/>
+ <menu_item_check label="é¸æŠžãƒ“ãƒ¼ãƒ ã‚’è¡¨ç¤ºã™ã‚‹" name="Show Selection Beam"/>
+ <menu_item_check label="グリッドãƒã‚¤ãƒ³ãƒˆã«ã‚¹ãƒŠãƒƒãƒ—ã™ã‚‹" name="Snap to Grid"/>
+ <menu_item_call label="オブジェクト㮠XY 軸をグリッドã«ã‚¹ãƒŠãƒƒãƒ—ã™ã‚‹" name="Snap Object XY to Grid"/>
+ <menu_item_call label="é¸æŠžã‚’ã‚°ãƒªãƒƒãƒ‰ã«ä½¿ç”¨ã™ã‚‹" name="Use Selection for Grid"/>
<menu_item_call label="グリッドオプション" name="Grid Options"/>
</menu>
- <menu label="リンクã—ãŸéƒ¨åˆ†ã‚’é¸æŠž" name="Select Linked Parts">
- <menu_item_call label="次ã®éƒ¨ä½ã‚’é¸æŠž" name="Select Next Part"/>
- <menu_item_call label="å‰å›žã®éƒ¨ä½ã‚’é¸æŠž" name="Select Previous Part"/>
- <menu_item_call label="次ã®éƒ¨ä½ã‚’å«ã‚ã‚‹" name="Include Next Part"/>
- <menu_item_call label="å‰å›žã®éƒ¨ä½ã‚’å«ã‚ã‚‹" name="Include Previous Part"/>
+ <menu label="リンクã—ãŸéƒ¨åˆ†ã‚’é¸æŠžã™ã‚‹" name="Select Linked Parts">
+ <menu_item_call label="次ã®éƒ¨åˆ†ã‚’é¸æŠžã™ã‚‹" name="Select Next Part"/>
+ <menu_item_call label="å‰å›žã®éƒ¨åˆ†ã‚’é¸æŠžã™ã‚‹" name="Select Previous Part"/>
+ <menu_item_call label="次ã®éƒ¨åˆ†ã‚’å«ã‚ã‚‹" name="Include Next Part"/>
+ <menu_item_call label="å‰å›žã®éƒ¨åˆ†ã‚’å«ã‚ã‚‹" name="Include Previous Part"/>
</menu>
</menu>
<menu label="ヘルプ" name="Help">
@@ -118,28 +124,28 @@
<menu_item_call label="[APP_NAME] ã«ã¤ã„ã¦" name="About Second Life"/>
</menu>
<menu label="アドãƒãƒ³ã‚¹" name="Advanced">
- <menu_item_call label="ç§ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åœæ­¢ã™ã‚‹" name="Stop Animating My Avatar"/>
- <menu_item_call label="テクスãƒãƒ£ã®ãƒªãƒ™ãƒ¼ã‚¯" name="Rebake Texture"/>
+ <menu_item_call label="自分ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åœæ­¢ã™ã‚‹" name="Stop Animating My Avatar"/>
+ <menu_item_call label="テクスãƒãƒ£ã®ãƒªãƒ™ãƒ¼ã‚¯ã‚’ã™ã‚‹" name="Rebake Texture"/>
<menu_item_call label="UI ã®ã‚µã‚¤ã‚ºã‚’デフォルトã«è¨­å®šã™ã‚‹" name="Set UI Size to Default"/>
- <menu_item_call label="ウィンドウã®ã‚µã‚¤ã‚ºã®è¨­å®šï¼š" name="Set Window Size..."/>
+ <menu_item_call label="ウィンドウã®ã‚µã‚¤ã‚ºã‚’設定ã™ã‚‹" name="Set Window Size..."/>
<menu_item_check label="é ãã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ãªã„" name="Limit Select Distance"/>
<menu_item_check label="カメラã®è·é›¢ç§»å‹•を制é™ã—ãªã„" name="Disable Camera Distance"/>
<menu_item_check label="高解åƒåº¦ã‚¹ãƒŠãƒƒãƒ—ショット" name="HighResSnapshot"/>
- <menu_item_check label="シャッター音ã¨ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãªã—ã§ã‚¹ãƒŠãƒƒãƒ—ショットをディスクã«ä¿å­˜" name="QuietSnapshotsToDisk"/>
+ <menu_item_check label="シャッター音ã¨ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãªã—ã§ã‚¹ãƒŠãƒƒãƒ—ショットをディスクã«ä¿å­˜ã™ã‚‹" name="QuietSnapshotsToDisk"/>
<menu_item_check label="圧縮ã—ã¦ã‚¹ãƒŠãƒƒãƒ—ショットをディスクã«ä¿å­˜ã™ã‚‹" name="CompressSnapshotsToDisk"/>
<menu label="パフォーマンスツール" name="Performance Tools">
<menu_item_call label="ラグ計測器" name="Lag Meter"/>
<menu_item_check label="統計ãƒãƒ¼" name="Statistics Bar"/>
- <menu_item_check label="ã‚¢ãƒã‚¿ãƒ¼ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚³ã‚¹ãƒˆã‚’表示" name="Avatar Rendering Cost"/>
+ <menu_item_check label="ã‚¢ãƒã‚¿ãƒ¼ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚³ã‚¹ãƒˆã‚’表示ã™ã‚‹" name="Avatar Rendering Cost"/>
</menu>
<menu label="ãƒã‚¤ãƒ©ã‚¤ãƒˆã¨ç›®ã«è¦‹ãˆã‚‹ã‚‚ã®" name="Highlighting and Visibility">
<menu_item_check label="ãƒãƒ¼ã‚¸ãƒ¼ãƒ“ーコン" name="Cheesy Beacon"/>
<menu_item_check label="パーティクルをéžè¡¨ç¤ºã«ã™ã‚‹" name="Hide Particles"/>
<menu_item_check label="é¸æŠžã—ãŸã‚‚ã®ã‚’éžè¡¨ç¤ºã«ã™ã‚‹" name="Hide Selected"/>
- <menu_item_check label="逿˜Žéƒ¨åˆ†ã‚’ãƒã‚¤ãƒ©ã‚¤ãƒˆ" name="Highlight Transparent"/>
- <menu_item_check label="HUD を表示" name="Show HUD Attachments"/>
- <menu_item_check label="一人称視点ã®ã¨ãã«å字線を表示" name="ShowCrosshairs"/>
- <menu_item_check label="土地ã®ãƒ„ールãƒãƒƒãƒ—を表示" name="Land Tips"/>
+ <menu_item_check label="逿˜Žéƒ¨åˆ†ã‚’ãƒã‚¤ãƒ©ã‚¤ãƒˆã™ã‚‹" name="Highlight Transparent"/>
+ <menu_item_check label="HUD を表示ã™ã‚‹" name="Show HUD Attachments"/>
+ <menu_item_check label="一人称視点ã®ã¨ãã«å字線を表示ã™ã‚‹" name="ShowCrosshairs"/>
+ <menu_item_check label="土地ã®ãƒ„ールãƒãƒƒãƒ—を表示ã™ã‚‹" name="Land Tips"/>
</menu>
<menu label="レンダリング(種類)" name="Rendering Types">
<menu_item_check label="シンプル" name="Simple"/>
@@ -173,17 +179,17 @@
<menu_item_call label="ç”»åƒ ï¼ˆL$ [COST] )..." name="Upload Image"/>
<menu_item_check label="検索" name="Search"/>
<menu_item_call label="キーをリリース" name="Release Keys"/>
- <menu_item_call label="UI ã®ã‚µã‚¤ã‚ºã‚’デフォルトã«è¨­å®š" name="Set UI Size to Default"/>
+ <menu_item_call label="UI ã®ã‚µã‚¤ã‚ºã‚’デフォルトã«è¨­å®šã™ã‚‹" name="Set UI Size to Default"/>
<menu_item_check label="常ã«èµ°ã‚‹" name="Always Run"/>
- <menu_item_check label="飛行" name="Fly"/>
+ <menu_item_check label="飛行ã™ã‚‹" name="Fly"/>
<menu_item_call label="ウィンドウを閉ã˜ã‚‹" name="Close Window"/>
<menu_item_call label="å…¨ã¦ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã‚‹" name="Close All Windows"/>
- <menu_item_call label="スナップショットをディスクã«ä¿å­˜" name="Snapshot to Disk"/>
+ <menu_item_call label="スナップショットをディスクã«ä¿å­˜ã™ã‚‹" name="Snapshot to Disk"/>
<menu_item_call label="一人称視点" name="Mouselook"/>
- <menu_item_check label="ジョイスティック・フライカム" name="Joystick Flycam"/>
- <menu_item_call label="表示をリセット" name="Reset View"/>
+ <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 label="åˆ¶ä½œãƒ„ãƒ¼ãƒ«ã‚’é¸æŠžã™ã‚‹" name="Select Tool">
<menu_item_call label="焦点ツール" name="Focus"/>
<menu_item_call label="移動ツール" name="Move"/>
<menu_item_call label="編集ツール" name="Edit"/>
@@ -191,12 +197,12 @@
<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 Default"/>
<menu_item_call label="ズームアウト" name="Zoom Out"/>
<menu_item_call label="全画é¢è¡¨ç¤º" name="Toggle Fullscreen"/>
</menu>
<menu_item_call label="デãƒãƒƒã‚°è¨­å®šã‚’表示ã™ã‚‹" name="Debug Settings"/>
- <menu_item_check label="開発メニューを表示" name="Debug Mode"/>
+ <menu_item_check label="開発メニューを表示ã™ã‚‹" name="Debug Mode"/>
</menu>
<menu label="開発" name="Develop">
<menu label="コンソール" name="Consoles">
@@ -204,7 +210,7 @@
<menu_item_check label="デãƒãƒƒã‚°ã‚³ãƒ³ã‚½ãƒ¼ãƒ«" name="Debug Console"/>
<menu_item_call label="通知コンソール" name="Notifications"/>
<menu_item_check label="テクスãƒãƒ£ã‚µã‚¤ã‚ºã®ã‚³ãƒ³ã‚½ãƒ¼ãƒ«" name="Texture Size"/>
- <menu_item_check label="テクスãƒãƒ£ã‚«ãƒ†ã‚´ãƒªãƒ»ã‚³ãƒ³ã‚½ãƒ¼ãƒ«" name="Texture Category"/>
+ <menu_item_check label="テクスãƒãƒ£ã‚«ãƒ†ã‚´ãƒªã®ã‚³ãƒ³ã‚½ãƒ¼ãƒ«" name="Texture Category"/>
<menu_item_check label="ファーストタイマー" name="Fast Timers"/>
<menu_item_check label="メモリ" name="Memory"/>
<menu_item_call label="リージョン情報をデãƒãƒƒã‚°ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã¸" name="Region Info to Debug Console"/>
@@ -216,26 +222,26 @@
<menu_item_check label="ãƒãƒƒã‚¸" name="Badge"/>
</menu>
<menu label="情報を表示" name="Display Info">
- <menu_item_check label="時間を表示" name="Show Time"/>
- <menu_item_check label="æç”»æƒ…報を表示" name="Show Render Info"/>
- <menu_item_check label="マトリックスを表示" name="Show Matrices"/>
- <menu_item_check label="カーソルを乗ã›ãŸå ´æ‰€ã®è‰²ã‚’表示" name="Show Color Under Cursor"/>
- <menu_item_check label="オブジェクトã®ã‚¢ãƒƒãƒ—デートを表示" name="Show Updates"/>
+ <menu_item_check label="時間を表示ã™ã‚‹" name="Show Time"/>
+ <menu_item_check label="æç”»æƒ…報を表示ã™ã‚‹" name="Show Render Info"/>
+ <menu_item_check label="マトリックスを表示ã™ã‚‹" name="Show Matrices"/>
+ <menu_item_check label="カーソルを乗ã›ãŸå ´æ‰€ã®è‰²ã‚’表示ã™ã‚‹" name="Show Color Under Cursor"/>
+ <menu_item_check label="オブジェクトã®ã‚¢ãƒƒãƒ—デートを表示ã™ã‚‹" name="Show Updates"/>
</menu>
- <menu label="エラーを実行" name="Force Errors">
+ <menu label="エラー実行" name="Force Errors">
<menu_item_call label="ブレークãƒã‚¤ãƒ³ãƒˆ" name="Force Breakpoint"/>
- <menu_item_call label="LLError ã¨ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã‚’実行" name="Force LLError And Crash"/>
- <menu_item_call label="ãƒãƒƒãƒ‰ãƒ¡ãƒ¢ãƒªã‚¢ã‚¯ã‚»ã‚¹ã‚’実行" name="Force Bad Memory Access"/>
+ <menu_item_call label="LLError ã¨ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã‚’実行ã™ã‚‹" name="Force LLError And Crash"/>
+ <menu_item_call label="ãƒãƒƒãƒ‰ãƒ¡ãƒ¢ãƒªã‚¢ã‚¯ã‚»ã‚¹ã‚’実行ã™ã‚‹" name="Force Bad Memory Access"/>
<menu_item_call label="ç„¡é™ãƒ«ãƒ¼ãƒ—" name="Force Infinite Loop"/>
- <menu_item_call label="ドライãƒã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã‚’実行" name="Force Driver Carsh"/>
- <menu_item_call label="ソフトウェア例外エラーã®å®Ÿè¡Œ" name="Force Software Exception"/>
- <menu_item_call label="ãƒ“ãƒ¥ãƒ¼ãƒ¯ã®æŽ¥ç¶šé®æ–­ã‚’実行" name="Force Disconnect Viewer"/>
- <menu_item_call label="メモリリークã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ãƒˆ" name="Memory Leaking Simulation"/>
+ <menu_item_call label="ドライãƒã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã‚’実行ã™ã‚‹" name="Force Driver Carsh"/>
+ <menu_item_call label="ソフトウェア例外エラーã®å®Ÿè¡Œã™ã‚‹" name="Force Software Exception"/>
+ <menu_item_call label="ãƒ“ãƒ¥ãƒ¼ãƒ¯ã®æŽ¥ç¶šé®æ–­ã‚’実行ã™ã‚‹" name="Force Disconnect Viewer"/>
+ <menu_item_call label="メモリリークをシミュレートã™ã‚‹" name="Memory Leaking Simulation"/>
</menu>
<menu label="レンダーテスト" name="Render Tests">
<menu_item_check label="カメラオフセット" name="Camera Offset"/>
<menu_item_check label="フレームレートをランダム化" name="Randomize Framerate"/>
- <menu_item_check label="Periodic Slow Frame" name="Periodic Slow Frame"/>
+ <menu_item_check label="定期的ã«é…ã„フレームを挿入ã™ã‚‹" name="Periodic Slow Frame"/>
<menu_item_check label="フレームテスト" name="Frame Test"/>
</menu>
<menu label="メタデータã®ãƒ¬ãƒ³ãƒ€ãƒ¼" name="Render Metadata">
@@ -247,10 +253,10 @@
<menu_item_check label="アニメーション部分をテクスãƒãƒ£ã§è¡¨ç¤º" name="Texture Anim"/>
<menu_item_check label="テクスãƒãƒ£å„ªå…ˆåº¦" name="Texture Priority"/>
<menu_item_check label="テクスãƒãƒ£ã®ç¯„囲" name="Texture Area"/>
- <menu_item_check label="Face Area" name="Face Area"/>
+ <menu_item_check label="å´é¢" name="Face Area"/>
<menu_item_check label="å…‰" name="Lights"/>
<menu_item_check label="骨組ã¿ã®è¡çªåˆ¤å®š" name="Collision Skeleton"/>
- <menu_item_check label="Raycast" name="Raycast"/>
+ <menu_item_check label="レイキャスト" name="Raycast"/>
</menu>
<menu label="レンダリング" name="Rendering">
<menu_item_check label="軸" name="Axes"/>
@@ -258,10 +264,10 @@
<menu_item_call label="é¸æŠžã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£æƒ…報基底" name="Selected Texture Info Basis"/>
<menu_item_check label="ワイヤーフレーム" name="Wireframe"/>
<menu_item_check label="オブジェクト間オクルージョン" name="Object-Object Occlusion"/>
- <menu_item_check label="フレームãƒãƒƒãƒ•ァ・オブジェクト" name="Framebuffer Objects"/>
+ <menu_item_check label="フレームãƒãƒƒãƒ•ァオブジェクト" name="Framebuffer Objects"/>
<menu_item_check label="é…延レンダリング" name="Deferred Rendering"/>
<menu_item_check label="グローãƒãƒ«ã‚¤ãƒ«ãƒŸãƒãƒ¼ã‚·ãƒ§ãƒ³" name="Global Illumination"/>
- <menu_item_check label="GLデãƒãƒƒã‚°" name="Debug GL"/>
+ <menu_item_check label="GL デãƒãƒƒã‚°" name="Debug GL"/>
<menu_item_check label="経路をデãƒãƒƒã‚°" name="Debug Pipeline"/>
<menu_item_check label="ファーストアルファ" name="Fast Alpha"/>
<menu_item_check label="アニメーションテクスãƒãƒ£" name="Animation Textures"/>
@@ -271,10 +277,10 @@
<menu_item_check label="テクスãƒãƒ£ã‚¢ãƒˆãƒ©ã‚¹" name="Texture Atlas"/>
<menu_item_check label="装ç€ã•れãŸå…‰æºã‚’æç”»ã™ã‚‹" name="Render Attached Lights"/>
<menu_item_check label="å–り付ã‘られãŸãƒ‘ーティクルをæç”»ã™ã‚‹" name="Render Attached Particles"/>
- <menu_item_check label="マウスオーãƒãƒ¼ã§å¼·èª¿è¡¨ç¤º" name="Hover Glow Objects"/>
+ <menu_item_check label="マウスオーãƒãƒ¼ã§å¼·èª¿è¡¨ç¤ºã™ã‚‹" name="Hover Glow Objects"/>
</menu>
<menu label="ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" name="Network">
- <menu_item_check label="ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’ä¸€æ™‚åœæ­¢" name="AgentPause"/>
+ <menu_item_check label="ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’ä¸€æ™‚åœæ­¢ã™ã‚‹" name="AgentPause"/>
<menu_item_call label="メッセージログを有効ã«ã™ã‚‹" name="Enable Message Log"/>
<menu_item_call label="メッセージログを使用ä¸å¯ã«ã™ã‚‹" name="Disable Message Log"/>
<menu_item_check label="é€ŸåŠ›ãŒæŒ¿å…¥ã•れãŸã‚ªãƒ–ジェクト" name="Velocity Interpolate Objects"/>
@@ -292,9 +298,9 @@
</menu>
<menu label="世界" name="World">
<menu_item_check label="シムã®å¤ªé™½ã®è¨­å®šã‚’無視ã™ã‚‹" name="Sim Sun Override"/>
- <menu_item_check label="ビーコンã®å¼·èª¿è¡¨ç¤º" name="Cheesy Beacon"/>
+ <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="Web ブラウザã®ãƒ†ã‚¹ãƒˆ" name="Web Browser Test"/>
@@ -305,7 +311,7 @@
<menu_item_call label="é¸æŠžã—ãŸã‚ªãƒ–ジェクト情報をプリント" name="Print Selected Object Info"/>
<menu_item_call label="エージェント情報をプリント" name="Print Agent Info"/>
<menu_item_call label="メモリ使用状æ³" name="Memory Stats"/>
- <menu_item_check label="ダブルクリックã—ãŸå ´æ‰€ã«è‡ªå‹•æ“作ã§ç§»å‹•" name="Double-ClickAuto-Pilot"/>
+ <menu_item_check label="ダブルクリックã—ãŸå ´æ‰€ã«è‡ªå‹•æ“作ã§ç§»å‹•ã™ã‚‹" name="Double-ClickAuto-Pilot"/>
<menu_item_check label="SelectMgr ã®ãƒ‡ãƒãƒƒã‚°" name="Debug SelectMgr"/>
<menu_item_check label="ダブルクリック" name="Debug Clicks"/>
<menu_item_check label="デãƒãƒƒã‚°è¡¨ç¤º" name="Debug Views"/>
@@ -315,15 +321,15 @@
<menu_item_check label="WindowProc ã®ãƒ‡ãƒãƒƒã‚°" name="Debug WindowProc"/>
</menu>
<menu label="XUI" name="XUI">
- <menu_item_call label="色ã®è¨­å®šã‚’æ›´æ–°" name="Reload Color Settings"/>
- <menu_item_call label="フォントテストを表示" name="Show Font Test"/>
+ <menu_item_call label="色ã®è¨­å®šã‚’æ›´æ–°ã™ã‚‹" name="Reload Color Settings"/>
+ <menu_item_call label="フォントテストを表示ã™ã‚‹" name="Show Font Test"/>
<menu_item_call label="XML ã‹ã‚‰èª­ã¿è¾¼ã‚€" name="Load from XML"/>
- <menu_item_call label="XML ã§ä¿å­˜" name="Save to XML"/>
- <menu_item_check label="XUI ãƒãƒ¼ãƒ ã‚’表示" name="Show XUI Names"/>
- <menu_item_call label="テスト用 IM ã‚’é€ä¿¡" name="Send Test IMs"/>
+ <menu_item_call label="XML ã§ä¿å­˜ã™ã‚‹" name="Save to XML"/>
+ <menu_item_check label="XUI ãƒãƒ¼ãƒ ã‚’表示ã™ã‚‹" name="Show XUI Names"/>
+ <menu_item_call label="テスト用 IM ã‚’é€ä¿¡ã™ã‚‹" name="Send Test IMs"/>
</menu>
<menu label="ã‚¢ãƒã‚¿ãƒ¼" name="Character">
- <menu label="ベークドテクスãƒãƒ£ã‚’å–å¾—" name="Grab Baked Texture">
+ <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"/>
@@ -331,23 +337,23 @@
<menu_item_call label="スカート" name="Skirt"/>
</menu>
<menu label="キャラクターテスト" name="Character Tests">
- <menu_item_call label="容姿を XML ã«ä¿å­˜" name="Appearance To XML"/>
+ <menu_item_call label="容姿を XML ã«ä¿å­˜ã™ã‚‹" name="Appearance To XML"/>
<menu_item_call label="キャラクタジオメトリã®åˆ‡ã‚Šæ›¿ãˆ" name="Toggle Character Geometry"/>
<menu_item_call label="男性アãƒã‚¿ãƒ¼ã®ãƒ†ã‚¹ãƒˆ" name="Test Male"/>
<menu_item_call label="女性アãƒã‚¿ãƒ¼ã®ãƒ†ã‚¹ãƒˆ" name="Test Female"/>
<menu_item_call label="PG ã®ãƒˆã‚°ãƒ«" name="Toggle PG"/>
<menu_item_check label="é¸æŠžã‚¢ãƒã‚¿ãƒ¼è¨±å¯" name="Allow Select Avatar"/>
</menu>
- <menu_item_call label="Params をデフォルトã«å®Ÿè¡Œ" name="Force Params to Default"/>
+ <menu_item_call label="パラメータを強制的ã«ãƒ‡ãƒ•ォルトã«ã™ã‚‹" name="Force Params to Default"/>
<menu_item_check label="アニメーション情報" name="Animation Info"/>
- <menu_item_check label="アニメーションをスローモーション" name="Slow Motion Animations"/>
+ <menu_item_check label="スローモーションã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³" name="Slow Motion Animations"/>
<menu_item_check label="見ã¦ã„ã‚‹ã‚‚ã®ã‚’表示ã™ã‚‹" name="Show Look At"/>
<menu_item_check label="クリックã—ãŸå ´æ‰€ã‚’表示ã™ã‚‹" name="Show Point At"/>
<menu_item_check label="çµåˆéƒ¨ã®ã‚¢ãƒƒãƒ—デートã®ãƒ‡ãƒãƒƒã‚°" name="Debug Joint Updates"/>
<menu_item_check label="LOD を無効ã«ã™ã‚‹" name="Disable LOD"/>
<menu_item_check label="キャラクター Vis ã®ãƒ‡ãƒãƒƒã‚°" name="Debug Character Vis"/>
- <menu_item_check label="骨組ã¿ã®è¡çªåˆ¤å®šã‚’表示" name="Show Collision Skeleton"/>
- <menu_item_check label="エージェントã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’表示" name="Display Agent Target"/>
+ <menu_item_check label="骨組ã¿ã®è¡çªåˆ¤å®šã‚’表示ã™ã‚‹" name="Show Collision Skeleton"/>
+ <menu_item_check label="エージェントã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’表示ã™ã‚‹" name="Display Agent Target"/>
--&gt;
<menu_item_call label="アタッãƒãƒ¡ãƒ³ãƒˆã‚’ダンプ" name="Dump Attachments"/>
<menu_item_call label="ã‚¢ãƒã‚¿ãƒ¼ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’デãƒãƒƒã‚°" name="Debug Avatar Textures"/>
@@ -355,9 +361,9 @@
</menu>
<menu_item_check label="HTTP Texture" name="HTTP Textures"/>
<menu_item_call label="圧縮画åƒ" name="Compress Images"/>
- <menu_item_check label="Output Debug Minidump" name="Output Debug Minidump"/>
- <menu_item_check label="次回ã®èµ·å‹•時ã«ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示" name="Console Window"/>
- <menu_item_check label="管ç†è€…メニューを表示" name="View Admin Options"/>
+ <menu_item_check label="デãƒãƒƒã‚°ç”¨ã®ãƒŸãƒ‹ãƒ€ãƒ³ãƒ—を出力ã™ã‚‹" name="Output Debug Minidump"/>
+ <menu_item_check label="次回ã®èµ·å‹•時ã«ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示ã™ã‚‹" name="Console Window"/>
+ <menu_item_check label="管ç†è€…メニューを表示ã™ã‚‹" name="View Admin Options"/>
<menu_item_call label="管ç†è€…ステータスã®å‘¼ã³å‡ºã—" name="Request Admin Options"/>
<menu_item_call label="管ç†è€…ステータス解除" name="Leave Admin Options"/>
</menu>
@@ -365,19 +371,19 @@
<menu label="Object">
<menu_item_call label="コピーをå–ã‚‹" name="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="アセット ID ã‚’å–å¾—" name="Get Assets IDs"/>
+ <menu_item_call label="アセット ID ã‚’å–å¾—ã™ã‚‹" name="Get Assets IDs"/>
</menu>
<menu label="区画" name="Parcel">
<menu_item_call label="ç§ã‚’所有者ã«ã™ã‚‹" name="Owner To Me"/>
- <menu_item_call label="リンデンコンテンツã«è¨­å®š" name="Set to Linden Content"/>
- <menu_item_call label="パブリックã®åœŸåœ°ã‚’å–å¾—" name="Claim Public Land"/>
+ <menu_item_call label="リンデンコンテンツã«è¨­å®šã™ã‚‹" name="Set to Linden Content"/>
+ <menu_item_call label="パブリックã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹" name="Claim Public Land"/>
</menu>
<menu label="リージョン/地域" name="Region">
<menu_item_call label="一時アセットデータをダンプ" name="Dump Temp Asset Data"/>
- <menu_item_call label="リージョンã®çŠ¶æ…‹ã‚’ä¿å­˜" name="Save Region State"/>
+ <menu_item_call label="リージョンã®çŠ¶æ…‹ã‚’ä¿å­˜ã™ã‚‹" name="Save Region State"/>
</menu>
<menu_item_call label="グリッドツール" name="God Tools"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index f4c46f82ac..ddb2ae49f7 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -111,7 +111,7 @@
</notification>
<notification name="FriendsAndGroupsOnly">
フレンド以外ã‹ã‚‰ã®ã‚³ãƒ¼ãƒ«ã‚„インスタントメッセージを無視ã™ã‚‹è¨­å®šã«ã—ãŸã“ã¨ã‚’ã€ç›¸æ‰‹ã«çŸ¥ã‚‰ã‚Œã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。
- <usetemplate name="okbutton" yestext="ã¯ã„"/>
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GrantModifyRights">
他人ã«ä¿®æ­£æ¨©é™ã‚’与ãˆã‚‹ã¨ã€æ¨©é™ã‚’与ãˆã‚‰ã‚ŒãŸäººã¯ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹ã‚¤ãƒ³ãƒ¯ãƒ¼ãƒ«ãƒ‰ã®ã‚ªãƒ–ジェクトを変更ã€å‰Šé™¤ã€æŒã¡å¸°ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã“ã®æ¨©é™ã‚’与ãˆã‚‹éš›ã«ã¯ååˆ†ã«æ³¨æ„ã—ã¦ãã ã•ã„。
@@ -339,10 +339,10 @@ L$ ãŒä¸è¶³ã—ã¦ã„ã‚‹ã®ã§ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚加ã™ã‚‹ã“ã¨ãŒã§ãã
ã¾ã èª­ã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ãŸã‚ã€ãã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’装ç€ã§ãã¾ã›ã‚“。後ã§ã‚„り直ã—ã¦ãã ã•ã„。
</notification>
<notification name="MustHaveAccountToLogIn">
- ãŠã£ã¨! 記入æ¼ã‚ŒãŒã‚りã¾ã™ã‚ˆã€‚
+ ãŠã£ã¨ï¼è¨˜å…¥æ¼ã‚ŒãŒã‚りã¾ã™ã‚ˆã€‚
ã‚¢ãƒã‚¿ãƒ¼ã®ãƒ•ァーストãƒãƒ¼ãƒ ã¨ãƒ©ã‚¹ãƒˆãƒãƒ¼ãƒ ã®ä¸¡æ–¹ã‚’入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
-[SECOND_LIFE]ã«å…¥ã‚‹ã«ã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒå¿…è¦ã§ã™ã€‚ アカウントを作æˆã—ã¾ã™ã‹ï¼Ÿ
+[SECOND_LIFE] ã«å…¥ã‚‹ã«ã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒå¿…è¦ã§ã™ã€‚ アカウントを作æˆã—ã¾ã™ã‹ï¼Ÿ
<url name="url">
https://join.secondlife.com/index.php?lang=ja-JP
</url>
@@ -470,7 +470,6 @@ L$ ãŒä¸è¶³ã—ã¦ã„ã‚‹ã®ã§ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚加ã™ã‚‹ã“ã¨ãŒã§ãã
<notification name="UnsupportedHardware">
ãŠä½¿ã„ã®ã‚³ãƒ³ãƒ”ューター㯠[APP_NAME] ã®å¿…è¦æœ€ä½Žé™ã®å‹•作環境を満ãŸã—ã¦ã„ã¾ã›ã‚“。 パフォーマンスã®ä½Žä¸‹ã‚’感ã˜ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 æã‚Œå…¥ã‚Šã¾ã™ãŒ [SUPPORT_SITE] ã§ã¯ã‚µãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã®ã‚·ã‚¹ãƒ†ãƒ ã«é–¢ã™ã‚‹æŠ€è¡“的サãƒãƒ¼ãƒˆã¯è¡Œã£ã¦ãŠã‚Šã¾ã›ã‚“。
-最低動作環境
[_URL] ã«ç§»å‹•ã—ã¦ç¢ºèªã‚’ã—ã¾ã™ã‹ï¼Ÿ
<url name="url" option="0">
http://secondlife.com/support/sysreqs.php?lang=ja
@@ -586,7 +585,7 @@ L$ ãŒä¸è¶³ã—ã¦ã„ã‚‹ã®ã§ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚加ã™ã‚‹ã“ã¨ãŒã§ãã
ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‹¡å¼µå­ãŒæ­£ã—ã„ã‹ã©ã†ã‹ã‚’確èªã—ã¦ãã ã•ã„。
</notification>
<notification name="InvalidFileExtension">
- [EXTENSION]ã¯ç„¡åйã§ã™ã€‚
+ [EXTENSION] ã¯ç„¡åйã§ã™ã€‚
æ­£ã—ã„æ‹¡å¼µå­ï¼š[VALIDS]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
@@ -1344,8 +1343,8 @@ F1 キーを押ã—ã¦ãã ã•ã„。
<usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
- ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’グリッドã®å¤–ã«ã‚­ãƒƒã‚¯ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate name="okcancelbuttons" notext="キャンセル" yestext="å…¨ã¦ã®ãƒ¦ãƒ¼ã‚¶ã‚’追ã„出ã™"/>
+ 本当ã«ä½äººå…¨å“¡ã‚’グリッドã‹ã‚‰è¿½ã„出ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="キャンセル" yestext="ä½äººå…¨å“¡ã‚’追ã„出ã™"/>
</notification>
<notification name="MuteLinden">
リンデンをブロックã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
@@ -1386,7 +1385,7 @@ F1 キーを押ã—ã¦ãã ã•ã„。
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="KickUser">
- ã©ã®ã‚ˆã†ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ã¤ã‘ã¦ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã—ã¾ã™ã‹ï¼Ÿ
+ ã©ã®ã‚ˆã†ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æ·»ãˆã¦ã“ã®ä½äººã‚’追ã„出ã—ã¾ã™ã‹ï¼Ÿ
<form name="form">
<input name="message">
ã‚ãªãŸã¯ç®¡ç†è€…ã«ã‚ˆã‚Šãƒ­ã‚°ã‚ªãƒ•ã•れã¾ã—ãŸã€‚
@@ -1406,7 +1405,7 @@ F1 キーを押ã—ã¦ãã ã•ã„。
</form>
</notification>
<notification name="FreezeUser">
- ã©ã®ã‚ˆã†ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ã¤ã‘ã¦ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’フリーズã—ã¾ã™ã‹ï¼Ÿ
+ ã©ã®ã‚ˆã†ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æ·»ãˆã¦ã“ã®ä½äººã‚’フリーズã—ã¾ã™ã‹ï¼Ÿ
<form name="form">
<input name="message">
ã‚ãªãŸã¯ãƒ•リーズã•れã¦ã„ã¾ã™ã€‚ å‹•ãã“ã¨ã‚‚ãƒãƒ£ãƒƒãƒˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã›ã‚“。 管ç†è€…㌠IM ã§ã‚ãªãŸã«é€£çµ¡ã—ã¾ã™ã€‚
@@ -1416,7 +1415,7 @@ F1 キーを押ã—ã¦ãã ã•ã„。
</form>
</notification>
<notification name="UnFreezeUser">
- ã©ã®ã‚ˆã†ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ã¤ã‘ã¦ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ•リーズを解除ã—ã¾ã™ã‹ï¼Ÿ
+ ã©ã®ã‚ˆã†ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æ·»ãˆã¦ã“ã®ä½äººã®ãƒ•リーズを解除ã—ã¾ã™ã‹ï¼Ÿ
<form name="form">
<input name="message">
ã‚‚ã†ãƒ•リーズã•れã¦ã„ã¾ã›ã‚“。
@@ -1436,7 +1435,7 @@ F1 キーを押ã—ã¦ãã ã•ã„。
</form>
</notification>
<notification name="OfferTeleportFromGod">
- ユーザーをゴッドサモンã§å‘¼ã³å¯„ã›ã¾ã™ã‹ï¼Ÿ
+ ç¾åœ¨åœ°ã«ä½äººã‚’ゴッドサモンã—ã¾ã™ã‹ï¼Ÿ
<form name="form">
<input name="message">
[REGION] ã«æ¥ã¾ã›ã‚“ã‹ï¼Ÿ
@@ -1447,15 +1446,15 @@ F1 キーを押ã—ã¦ãã ã•ã„。
</notification>
<notification name="TeleportFromLandmark">
ã“ã®ã¾ã¾ &lt;nolink&gt;[LOCATION]&lt;/nolink&gt; ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate ignoretext="ランドマークã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ãŸã„ã‹ã®ç¢ºèª" name="okcancelignore" notext="キャンセル" yestext="テレãƒãƒ¼ãƒˆ"/>
+ <usetemplate ignoretext="ランドマークã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ãŸã„ã‹ã©ã†ã‹ã®ç¢ºèª" name="okcancelignore" notext="キャンセル" yestext="テレãƒãƒ¼ãƒˆ"/>
</notification>
<notification name="TeleportToPick">
[PICK] ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate ignoretext="ピックã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ãŸã„ã‹ã®ç¢ºèª" name="okcancelignore" notext="キャンセル" yestext="テレãƒãƒ¼ãƒˆ"/>
+ <usetemplate ignoretext="ピックã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ãŸã„ã‹ã©ã†ã‹ã®ç¢ºèª" name="okcancelignore" notext="キャンセル" yestext="テレãƒãƒ¼ãƒˆ"/>
</notification>
<notification name="TeleportToClassified">
[CLASSIFIED] ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate ignoretext="クラシファイド広告ã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ãŸã„ã‹ã®ç¢ºèª" name="okcancelignore" notext="キャンセル" yestext="テレãƒãƒ¼ãƒˆ"/>
+ <usetemplate ignoretext="クラシファイド広告ã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ãŸã„ã‹ã©ã†ã‹ã®ç¢ºèª" name="okcancelignore" notext="キャンセル" yestext="テレãƒãƒ¼ãƒˆ"/>
</notification>
<notification label="ã‚ãªãŸã®ä¸å‹•産内ã®å…¨å“¡ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡" name="MessageEstate">
今ã‚ãªãŸã®ä¸å‹•産ã«ã„る人全員ã«é€ã‚‹ã€çŸ­ã„メッセージを入力ã—ã¦ãã ã•ã„。
@@ -1466,11 +1465,11 @@ F1 キーを押ã—ã¦ãã ã•ã„。
</form>
</notification>
<notification label="Lindenã®ä¸å‹•産を変更" name="ChangeLindenEstate">
- ã‚ãªãŸã¯ãƒªãƒ³ãƒ‡ãƒ³æ‰€æœ‰ã®ä¸å‹•産(メインランドã€ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã€ã‚ªãƒªã‚¨ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãªã©ï¼‰ã‚’変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
+ ãƒªãƒ³ãƒ‡ãƒ³ãŒæ‰€æœ‰ã™ã‚‹ã‚¨ã‚¹ãƒ†ãƒ¼ãƒˆï¼ˆãƒ¡ã‚¤ãƒ³ãƒ©ãƒ³ãƒ‰ã€ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã€ã‚ªãƒªã‚¨ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãªã©ï¼‰ã‚’変更ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
-ã“れã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®çµŒé¨“を根本ã‹ã‚‰æºã‚‹ãŒã—ã‹ã­ãªã„「éžå¸¸ã«å±é™ºãªè¡Œç‚ºã€ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ¡ã‚¤ãƒ³ãƒ©ãƒ³ãƒ‰ã§å¤šæ•°ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ãŒå¤‰æ›´ã•れã€ã‚¹ãƒšãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã«æ‚ªå½±éŸ¿ãŒç”Ÿã˜ã¾ã™ã€‚
+ä½äººã®ä½“é¨“ã«æ ¹æœ¬çš„ã«å½±éŸ¿ã‚’与ãˆã‚‹ãŸã‚ã€éžå¸¸ã«å±é™ºãªè¡Œç‚ºã§ã™ã€‚ メインランドã§ã¯ã€ä½•åƒã¨ã„ã†ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¤‰æ›´ã«ã‚ˆã‚‹å½±éŸ¿ã‚’å—ã‘ã€ãã®ãŸã‚スペースサーãƒãƒ¼ã«è² æ‹…ã‚’ã‹ã‘ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚
-æ“作を続行ã—ã¾ã™ã‹ï¼Ÿ
+ãれã§ã‚‚ç¶šã‘ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
</notification>
<notification label="Lindenã®ä¸å‹•産ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’変更" name="ChangeLindenAccess">
@@ -1631,11 +1630,11 @@ L$ [AMOUNT] ã§ã€ã“ã®ã‚¯ãƒ©ã‚·ãƒ•ァイド広告を今ã™ã公開ã—ã¾ã™ã
<usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
</notification>
<notification name="SetClassifiedMature">
- ã“ã®åºƒå‘Šã«ã€ŒæŽ§ãˆã‚ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯å«ã¾ã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ
+ ã“ã®åºƒå‘Šã«ã€ŒModerateã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯å«ã¾ã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ
<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
<notification name="SetGroupMature">
- ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã€ŒæŽ§ãˆã‚ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ
+ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã€ŒModerateã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã‹ï¼Ÿ
<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
<notification label="å†èµ·å‹•を確èª" name="ConfirmRestart">
@@ -1655,7 +1654,7 @@ L$ [AMOUNT] ã§ã€ã“ã®ã‚¯ãƒ©ã‚·ãƒ•ァイド広告を今ã™ã公開ã—ã¾ã™ã
ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ãŒã‚¢ãƒƒãƒ—デートã•れã¾ã—ãŸã€‚
地図ã«å¤‰æ›´ãŒå映ã•れるã¾ã§æ•°åˆ†ã‹ã‹ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚
-アダルト専用リージョンã«å…¥ã‚‹ã«ã¯ã€ä½äººã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒå¹´é½¢ç¢ºèªã‹æ”¯æ‰•方法ã®ã„ãšã‚Œã‹ã§ã€Œç¢ºèªæ¸ˆã¿ã€ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
+Adult 専用リージョンã«å…¥ã‚‹ã«ã¯ã€ä½äººã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒå¹´é½¢ç¢ºèªã‹æ”¯æ‰•方法ã®ã„ãšã‚Œã‹ã§ã€Œç¢ºèªæ¸ˆã¿ã€ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
</notification>
<notification label="ボイスãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸ä¸€è‡´" name="VoiceVersionMismatch">
[APP_NAME] ã®ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ãŠã‘るボイスãƒãƒ£ãƒƒãƒˆã®äº’æ›æ€§ãŒã‚りã¾ã›ã‚“。 ボイスãƒãƒ£ãƒƒãƒˆã‚’正常ã«è¡Œã†ãŸã‚ã«ã¯ã€[APP_NAME] ã®ã‚¢ãƒƒãƒ—デートãŒå¿…è¦ã§ã™ã€‚
@@ -1931,7 +1930,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="ForceCloseChatterBoxSession">
- [NAME]ã¨ã®ãƒãƒ£ãƒƒãƒˆã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’é–‰ã˜ã¾ã™ã€‚
+ [NAME] ã¨ã®ãƒãƒ£ãƒƒãƒˆã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’é–‰ã˜ã¾ã™ã€‚
[REASON]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
@@ -1944,8 +1943,8 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AutoWearNewClothing">
- 作æˆã—よã†ã¨ã—ã¦ã„る衣類を自動的ã«è£…ç€ã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate ignoretext="「マイ 容姿ã€ã‚’編集中ã«ã€ä½œæˆã™ã‚‹è¡£é¡žã‚’装ç€ã™ã‚‹ã¨ã" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ 作æˆã™ã‚‹è¡£é¡žã‚’自動的ã«è£…ç€ã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate ignoretext="「容姿ã€ã‚’編集中ã«ã€ä½œæˆã™ã‚‹è¡£é¡žã‚’装ç€ã™ã‚‹ã¨ã" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
<notification name="NotAgeVerified">
年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã“ã®åŒºç”»ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [SECOND_LIFE] サイトã§å¹´é½¢ã®ç¢ºèªã‚’行ã„ã¾ã™ã‹ï¼Ÿ
@@ -2118,7 +2117,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã«æ˜Žè¨˜ã•れã¦ã„るコンテンツ制é™ã«ã‚ˆã‚Šã€ã‚ãªãŸã®æ¤œç´¢èªžã®ä¸€éƒ¨ãŒé™¤å¤–ã•れã¾ã—ãŸã€‚
</notification>
<notification name="NoContentToSearch">
- å°‘ãªãã¨ã‚‚ã©ã‚Œã‹ä¸€ã¤ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ç¨®é¡žã‚’é¸æŠžã—ã¦æ¤œç´¢ã‚’行ã£ã¦ãã ã•ã„ã€‚ï¼ˆä¸€èˆ¬ã€æŽ§ãˆã‚ã€ã‚¢ãƒ€ãƒ«ãƒˆï¼‰
+ å°‘ãªãã¨ã‚‚ã©ã‚Œã‹ä¸€ã¤ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ç¨®é¡žã‚’é¸æŠžã—ã¦æ¤œç´¢ã‚’行ã£ã¦ãã ã•ã„。(Generalã€Moderateã€Adult)
</notification>
<notification name="GroupVote">
[NAME] ã¯æŠ•ç¥¨ã®ç”³è«‹ã‚’ã—ã¦ã„ã¾ã™ï¼š
@@ -2229,27 +2228,27 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
ãã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ã„ãªã„ã¨å…¬å…±ã®åœŸåœ°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
</notification>
<notification name="RegionTPAccessBlocked">
- ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šãã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 年齢確èªã‚’行ã†ã‹ã€æœ€æ–°ãƒ“ューワをインストールã—ã¦ãã ã•ã„。
+ ã‚ãªãŸã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã«ã‚ˆã‚Šãã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã¸ã¯å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 年齢確èªã‚’行ã†ã‹ã€æœ€æ–°ãƒ“ューワをインストールã—ã¦ãã ã•ã„。
ç¾åœ¨ã®ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°åŒºåˆ†ã§ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªã‚¨ãƒªã‚¢ã«é–¢ã™ã‚‹è©³ç´°ã¯ãƒŠãƒ¬ãƒƒã‚¸ãƒ™ãƒ¼ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
</notification>
<notification name="URBannedFromRegion">
- ã‚ãªãŸã¯ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã¸ã®ç«‹å…¥ãŒç¦æ­¢ã•れã¦ã„ã¾ã™ã€‚
+ ã‚ãªãŸã¯ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã¸ã®ç«‹å…¥ãŒç¦æ­¢ã•れã¦ã„ã¾ã™ã€‚
</notification>
<notification name="NoTeenGridAccess">
ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã¯ãƒ†ã‚£ãƒ¼ãƒ³ã‚°ãƒªãƒƒãƒ‰ã«æŽ¥ç¶šã§ãã¾ã›ã‚“。
</notification>
<notification name="ImproperPaymentStatus">
- ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã«å…¥ã‚‹ãŸã‚ã«é©ã—ãŸæ”¯æ‰•ã„ステータスãŒã‚りã¾ã›ã‚“。
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«å…¥ã‚‹ãŸã‚ã«é©ã—ãŸæ”¯æ‰•ã„ステータスãŒã‚りã¾ã›ã‚“。
</notification>
<notification name="MustGetAgeRgion">
- ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã«å…¥ã‚‹ã«ã¯å¹´é½¢ç¢ºèªæ¸ˆã¿ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«å…¥ã‚‹ãŸã‚ã«ã¯ã€å¹´é½¢ç¢ºèªã‚’済ã¾ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
</notification>
<notification name="MustGetAgeParcel">
- ã“ã®åŒºç”»ã«å…¥ã‚‹ã«ã¯å¹´é½¢ç¢ºèªæ¸ˆã¿ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ ã“ã®åŒºç”»ã«å…¥ã‚‹ãŸã‚ã«ã¯ã€å¹´é½¢ç¢ºèªã‚’済ã¾ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
</notification>
<notification name="NoDestRegion">
- 目的地ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ 目的地ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
</notification>
<notification name="NotAllowedInDest">
目的地ã«å…¥ã‚‹è¨±å¯ãŒã‚りã¾ã›ã‚“。
@@ -2267,14 +2266,14 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
テレãƒãƒ¼ãƒˆãŒã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã—ãŸã€‚
</notification>
<notification name="FullRegionTryAgain">
- å…¥ã‚ã†ã¨ã—ã¦ã„るリージョン(地域)ã¯ç¾åœ¨æº€å“¡ã§ã™ã€‚
+ å…¥ã‚ã†ã¨ã—ã¦ã„るリージョンã¯ç¾åœ¨æº€å“¡ã§ã™ã€‚
ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。
</notification>
<notification name="GeneralFailure">
よãã‚る失敗
</notification>
<notification name="RoutedWrongRegion">
- ç•°ãªã‚‹ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã«è¿‚回ã•れã¾ã—ãŸã€‚ ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ ç•°ãªã‚‹ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«è¿‚回ã•れã¾ã—ãŸã€‚ ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
</notification>
<notification name="NoValidAgentID">
エージェント ID ãŒç„¡åйã§ã™ã€‚
@@ -2295,7 +2294,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
内部エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
</notification>
<notification name="NoGoodTPDestination">
- ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ï¼ˆåœ°åŸŸï¼‰ã§ã¯é©åˆ‡ãªãƒ†ãƒ¬ãƒãƒ¼ãƒˆç›®çš„地ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€é©åˆ‡ãªãƒ†ãƒ¬ãƒãƒ¼ãƒˆç›®çš„地ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
</notification>
<notification name="InternalErrorRegionResolver">
内部エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
@@ -2382,7 +2381,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
[TO_NAME] ã«ãƒ•レンド登録を申ã—出ã¾ã—ãŸã€‚
</notification>
<notification name="OfferFriendshipNoMessage">
- [NAME]ã¯ã€
+ [NAME] ã¯ã€
フレンド登録を申ã—込んã§ã„ã¾ã™ã€‚
(デフォルトã§ãŠäº’ã„ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³çŠ¶æ…‹ã‚’è¦‹ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚)
@@ -2397,6 +2396,12 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
<notification name="FriendshipDeclined">
[NAME]ã¯ã€ãƒ•レンド登録を断りã¾ã—ãŸã€‚
</notification>
+ <notification name="FriendshipAcceptedByMe">
+ フレンドã®ç™»éŒ²ä¾é ¼ãŒæ‰¿èªã•れã¾ã—ãŸã€‚
+ </notification>
+ <notification name="FriendshipDeclinedByMe">
+ フレンドã®ç™»éŒ²ä¾é ¼ãŒæ‹’å¦ã•れã¾ã—ãŸã€‚
+ </notification>
<notification name="OfferCallingCard">
[FIRST] [LAST] ãŒã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’渡ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚
ã‚ãªãŸã®ã€ŒæŒã¡ç‰©ã€ã«ãƒ–ックマークãŒè¿½åŠ ã•れã€ã“ã®ä½äººã«ç´ æ—©ã IM ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
@@ -2418,9 +2423,9 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
[MESSAGE]
-読ã¿è¾¼ã¿å…ƒã®ã‚ªãƒ–ジェクト:[OBJECTNAME]ã€æ‰€æœ‰è€…:[NAME]?
+読ã¿è¾¼ã¿å…ƒã®ã‚ªãƒ–ジェクト:[OBJECTNAME]ã€æ‰€æœ‰è€…:[NAME]
<form name="form">
- <button name="Gotopage" text="移動"/>
+ <button name="Gotopage" text="ページã«ç§»å‹•"/>
<button name="Cancel" text="å–り消ã—"/>
</form>
</notification>
@@ -2472,7 +2477,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
</form>
</notification>
<notification name="ScriptToast">
- [FIRST] [LAST] ã®ã€Œ [TITLE] ã€ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ãƒ—ットをリクエストã—ã¦ã„ã¾ã™ã€‚
+ [FIRST] [LAST] ã®ã€Œ [TITLE] ã€ã¯ã€ä½äººã‚¤ãƒ³ãƒ—ットをリクエストã—ã¦ã„ã¾ã™ã€‚
<form name="form">
<button name="Open" text="ダイアログを開ã"/>
<button name="Ignore" text="無視"/>
@@ -2585,7 +2590,7 @@ M キーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚
[VOICE_CHANNEL_NAME] ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã«æŽ¥ç¶šä¸­ã«ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
</notification>
<notification name="ServerVersionChanged">
- ç•°ãªã‚‹ã‚µãƒ¼ãƒãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«æ¥ã¾ã—ãŸã€‚パフォーマンスã«å½±éŸ¿ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ [[URL] リリースノートを確èª]
+ サーãƒãƒ¼ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒç•°ãªã‚‹ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«æ¥ã¾ã—ãŸã€‚パフォーマンスã«å½±éŸ¿ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ [[URL] リリースノートを確èª]
</notification>
<notification name="UnsupportedCommandSLURL">
クリックã—㟠SLurl ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。
@@ -2605,7 +2610,7 @@ M キーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚
</notification>
<notification name="ConfirmCloseAll">
ã™ã¹ã¦ã® IM ã‚’é–‰ã˜ã¾ã™ã‹ï¼Ÿ
- <usetemplate name="okcancelignore" notext="キャンセル" yestext="OK"/>
+ <usetemplate ignoretext="ã™ã¹ã¦ã® IM ã‚’é–‰ã˜ã‚‹å‰ã®ç¢ºèª" name="okcancelignore" notext="キャンセル" yestext="OK"/>
</notification>
<notification name="AttachmentSaved">
アタッãƒãƒ¡ãƒ³ãƒˆãŒä¿å­˜ã•れã¾ã—ãŸã€‚
diff --git a/indra/newview/skins/default/xui/ja/panel_classified_info.xml b/indra/newview/skins/default/xui/ja/panel_classified_info.xml
index 14e04d5691..0aa0e8a8a9 100644
--- a/indra/newview/skins/default/xui/ja/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/ja/panel_classified_info.xml
@@ -1,24 +1,54 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_classified_info">
<panel.string name="type_mature">
- 控ãˆã‚
+ Moderate
</panel.string>
<panel.string name="type_pg">
- 一般コンテンツ
+ 「Generalã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„
</panel.string>
<panel.string name="l$_price">
L$ [PRICE]
</panel.string>
+ <panel.string name="click_through_text_fmt">
+ [TELEPORT] テレãƒãƒ¼ãƒˆã€ [MAP] 地図〠[PROFILE] プロフィール
+ </panel.string>
+ <panel.string name="date_fmt">
+ [year,datetime,slt]/[mthnum,datetime,slt]/[day,datetime,slt]
+ </panel.string>
+ <panel.string name="auto_renew_on">
+ 有効
+ </panel.string>
+ <panel.string name="auto_renew_off">
+ 無効
+ </panel.string>
<text name="title" value="クラシファイド広告情報"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<text_editor name="classified_name" value="[name]"/>
+ <text name="classified_location_label" value="場所:"/>
<text_editor name="classified_location" value="[loading...]"/>
+ <text name="content_type_label" value="内容ã®ç¨®é¡žï¼š"/>
<text_editor name="content_type" value="[content type]"/>
+ <text name="category_label" value="カテゴリ:"/>
<text_editor name="category" value="[category]"/>
- <check_box label="毎週自動更新" name="auto_renew"/>
- <text_editor name="price_for_listing" tool_tip="掲載価格"/>
- <text_editor name="classified_desc" value="[description]"/>
+ <text name="creation_date_label" value="制作日:"/>
+ <text_editor name="creation_date" tool_tip="制作日" value="[date]"/>
+ <text name="price_for_listing_label" value="掲載価格:"/>
+ <text_editor name="price_for_listing" tool_tip="掲載価格" value="[price]"/>
+ <layout_stack name="descr_stack">
+ <layout_panel name="clickthrough_layout_panel">
+ <text name="click_through_label" value="クリック数:"/>
+ <text_editor name="click_through_text" tool_tip="Click through data" value="[clicks]"/>
+ </layout_panel>
+ <layout_panel name="price_layout_panel">
+ <text name="auto_renew_label" value="自動更新:"/>
+ <text name="auto_renew" value="有効"/>
+ </layout_panel>
+ <layout_panel name="descr_layout_panel">
+ <text name="classified_desc_label" value="説明:"/>
+ <text_editor name="classified_desc" value="[description]"/>
+ </layout_panel>
+ </layout_stack>
</panel>
</scroll_container>
<panel name="buttons">
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_classified.xml b/indra/newview/skins/default/xui/ja/panel_edit_classified.xml
index 4cb5884f28..5e90076a74 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_classified.xml
@@ -3,12 +3,20 @@
<panel.string name="location_notice">
(掲載後更新)
</panel.string>
+ <string name="publish_label">
+ 掲載
+ </string>
+ <string name="save_label">
+ ä¿å­˜
+ </string>
<text name="title">
クラシファイド広告ã®ç·¨é›†
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <icon label="" name="edit_icon" tool_tip="クリックã—ã¦ç”»åƒã‚’é¸æŠž"/>
+ <panel name="snapshot_panel">
+ <icon label="" name="edit_icon" tool_tip="クリックã—ã¦ç”»åƒã‚’é¸æŠž"/>
+ </panel>
<text name="Name:">
タイトル:
</text>
@@ -22,20 +30,19 @@
ローディング...
</text>
<button label="ç¾åœ¨åœ°ã«è¨­å®š" name="set_to_curr_location_btn"/>
- <combo_box name="content_type">
- <combo_item name="mature_ci">
- 控ãˆã‚コンテンツ
- </combo_item>
- <combo_item name="pg_ci">
- 一般コンテンツ
- </combo_item>
- </combo_box>
+ <text name="category_label" value="カテゴリ:"/>
+ <text name="content_type_label" value="内容ã®ç¨®é¡žï¼š"/>
+ <icons_combo_box label="「Generalã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„" name="content_type">
+ <icons_combo_box.item label="「Moderateã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„" name="mature_ci" value="Mature"/>
+ <icons_combo_box.item label="「Generalã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„" name="pg_ci" value="PG"/>
+ </icons_combo_box>
+ <text name="price_for_listing_label" value="掲載価格:"/>
<spinner label="L$" name="price_for_listing" tool_tip="掲載価格" value="50"/>
<check_box label="毎週自動更新" name="auto_renew"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="ä¿å­˜" name="save_changes_btn"/>
+ <button label="[LABEL]" name="save_changes_btn"/>
<button label="キャンセル" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
index 88c05fbae7..e58fa979d7 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="ピック編集" name="panel_edit_pick">
+ <panel.string name="location_notice">
+ (掲載後更新)
+ </panel.string>
<text name="title">
ピック編集
</text>
@@ -22,7 +25,7 @@
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="[WHAT] ã‚’ä¿å­˜" name="save_changes_btn"/>
+ <button label="ピックをä¿å­˜" name="save_changes_btn"/>
<button label="キャンセル" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_general.xml b/indra/newview/skins/default/xui/ja/panel_group_general.xml
index a8df9aef80..1b89b1b3cc 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_general.xml
@@ -46,9 +46,9 @@
<check_box label="誰ã§ã‚‚入会ã§ãã¾ã™" name="open_enrollement" tool_tip="招待ã•れãªãã¦ã‚‚æ–°è¦ãƒ¡ãƒ³ãƒãƒ¼ãŒåŠ å…¥ã§ãã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚"/>
<check_box label="入会費ãŒã‹ã‹ã‚Šã¾ã™" name="check_enrollment_fee" tool_tip="入会費ãŒå¿…è¦ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚"/>
<spinner label="L$" name="spin_enrollment_fee" tool_tip="「入会費ã€ã«ãƒã‚§ãƒƒã‚¯ãŒå…¥ã£ã¦ã„ã‚‹å ´åˆã€æ–°è¦ãƒ¡ãƒ³ãƒãƒ¼ã¯æŒ‡å®šã•れãŸå…¥ä¼šè²»ã‚’支払ã‚ãªã‘れã°ã‚°ãƒ«ãƒ¼ãƒ—ã«å…¥ã‚Œã¾ã›ã‚“。"/>
- <combo_box name="group_mature_check" tool_tip="ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã€ŒæŽ§ãˆã‚ã€ã«ãƒ¬ãƒ¼ãƒˆè¨­å®šã•ã‚ŒãŸæƒ…å ±ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™">
- <combo_box.item label="一般コンテンツ" name="pg"/>
- <combo_box.item label="控ãˆã‚コンテンツ" name="mature"/>
+ <combo_box name="group_mature_check" tool_tip="ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã€ŒModerateã€ã«ãƒ¬ãƒ¼ãƒˆè¨­å®šã•ã‚ŒãŸæƒ…å ±ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™">
+ <combo_box.item label="「Generalã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„" name="pg"/>
+ <combo_box.item label="「Moderateã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„" name="mature"/>
</combo_box>
<check_box initial_value="true" label="検索ã«è¡¨ç¤º" name="show_in_group_list" tool_tip="ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’æ¤œç´¢çµæžœã«è¡¨ç¤ºã•ã›ã¾ã™"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
index c0449f1221..ef6d8cce47 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
@@ -45,7 +45,7 @@
ã‚ãªãŸã®è²¢çŒ®ï¼š
</text>
<text name="your_contribution_units">
- 平方メートル
+ m²
</text>
<text name="your_contribution_max_value">
(最大 [AMOUNT])
diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
index db6fe268c7..8a629be910 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
@@ -17,7 +17,7 @@ Ctrl キーを押ã—ãªãŒã‚‰ãƒ¡ãƒ³ãƒãƒ¼åをクリックã™ã‚‹ã¨
<name_list name="member_list">
<name_list.columns label="メンãƒãƒ¼" name="name"/>
<name_list.columns label="寄付" name="donated"/>
- <name_list.columns label="ステータス" name="online"/>
+ <name_list.columns label="ログイン" name="online"/>
</name_list>
<button label="招待" name="member_invite"/>
<button label="追放" name="member_eject"/>
@@ -44,7 +44,7 @@ Ctrl キーを押ã—ãªãŒã‚‰ãƒ¡ãƒ³ãƒãƒ¼åをクリックã™ã‚‹ã¨
<filter_editor label="役割をé¸åˆ¥" name="filter_input"/>
<scroll_list name="role_list">
<scroll_list.columns label="役割" name="name"/>
- <scroll_list.columns label="肩書ã" name="title"/>
+ <scroll_list.columns label="タイトル" name="title"/>
<scroll_list.columns label="#" name="members"/>
</scroll_list>
<button label="æ–°ã—ã„役割" name="role_create"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
index be15e92aa1..f2429ac12a 100644
--- a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
@@ -14,7 +14,7 @@
<layout_panel name="share_btn_panel">
<button label="共有" name="share_btn"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
+ <layout_panel name="pay_btn_panel">
<button label="支払ã†" name="pay_btn"/>
</layout_panel>
<layout_panel name="call_btn_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 36c7b75f97..9981d13bbb 100644
--- a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
@@ -1,18 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="ã‚‚ã®" name="main inventory panel">
- <panel.string name="Title">
- ã‚‚ã®
+ <panel.string name="ItemcountFetching">
+ [ITEM_COUNT] 個ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’å–得中ã§ã™... [FILTER]
</panel.string>
- <filter_editor label="æŒã¡ç‰©ã‚’フィルター" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="æŒã¡ç‰©" name="All Items"/>
- <inventory_panel label="最新" name="Recent Items"/>
- </tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="ãã®ä»–ã®ã‚ªãƒ—ションを表示ã—ã¾ã™"/>
- <button name="add_btn" tool_tip="æ–°ã—ã„アイテムを追加ã—ã¾ã™"/>
- <dnd_button name="trash_btn" tool_tip="é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™"/>
- </panel>
+ <panel.string name="ItemcountCompleted">
+ [ITEM_COUNT] 個ã®ã‚¢ã‚¤ãƒ†ãƒ ã€€[FILTER]
+ </panel.string>
+ <text name="ItemcountText">
+ アイテム:
+ </text>
<menu_bar name="Inventory Menu">
<menu label="ファイル" name="File">
<menu_item_call label="é–‹ã" name="Open"/>
@@ -61,4 +57,14 @@
<menu_item_check label="システムフォルダを上ã«ä¸¦ã¹ã‚‹" name="System Folders To Top"/>
</menu>
</menu_bar>
+ <filter_editor label="æŒã¡ç‰©ã‚’フィルター" name="inventory search editor"/>
+ <tab_container name="inventory filter tabs">
+ <inventory_panel label="æŒã¡ç‰©" name="All Items"/>
+ <inventory_panel label="最新" name="Recent Items"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="ãã®ä»–ã®ã‚ªãƒ—ションを表示ã—ã¾ã™"/>
+ <button name="add_btn" tool_tip="æ–°ã—ã„アイテムを追加ã—ã¾ã™"/>
+ <dnd_button name="trash_btn" tool_tip="é¸æŠžã—ãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
index 3dbabc62be..5998206f27 100644
--- a/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
@@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="chat_bar">
- <string name="min_width">
- 192
- </string>
- <string name="max_width">
- 320
- </string>
<line_editor label="ã“ã“をクリックã—ã¦ãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹ã—ã¾ã™ã€‚" name="chat_box" tool_tip="Enter キーを押ã—ã¦ç™ºè¨€ã—ã€Ctrl + Enter キーã§å«ã³ã¾ã™ã€‚"/>
<button name="show_nearby_chat" tool_tip="è¿‘ãã®ãƒãƒ£ãƒƒãƒˆãƒ­ã‚°ã‚’表示・éžè¡¨ç¤º"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml
index ca93d46e4d..fb273de420 100644
--- a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="nearby_media">
- <string name="media_item_count_format">
- (メディアアイテム %ld )
- </string>
<string name="empty_item_text">
&lt;空&gt;
</string>
@@ -22,10 +19,17 @@
<button label="詳細 &gt;&gt;" label_selected="簡易 &lt;&lt;" name="more_less_btn" tool_tip="アドãƒãƒ³ã‚¹ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«"/>
</panel>
<panel name="nearby_media_panel">
+ <text name="nearby_media">
+ è¿‘ãã®ãƒ¡ãƒ‡ã‚£ã‚¢
+ </text>
+ <text name="show">
+ 表示:
+ </text>
<combo_box name="show_combo">
<combo_box.item label="ã™ã¹ã¦" name="All"/>
<combo_box.item label="ã“ã®åŒºç”»å†…" name="WithinParcel"/>
<combo_box.item label="ã“ã®åŒºç”»å¤–" name="OutsideParcel"/>
+ <combo_box.item label="ä»–ã®ã‚¢ãƒã‚¿ãƒ¼" name="OnOthers"/>
</combo_box>
<scroll_list name="media_list">
<scroll_list.columns label="近接" name="media_proximity"/>
@@ -34,7 +38,7 @@
<scroll_list.columns label="åå‰" name="media_name"/>
<scroll_list.columns label="デãƒãƒƒã‚°" name="media_debug"/>
</scroll_list>
- <panel>
+ <panel name="media_controls_panel">
<layout_stack name="media_controls">
<layout_panel name="stop">
<button name="stop_btn" tool_tip="é¸æŠžã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚’åœæ­¢"/>
@@ -52,7 +56,7 @@
<button name="mute_btn" tool_tip="é¸æŠžã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã®éŸ³ã‚’ミュート"/>
</layout_panel>
<layout_panel name="zoom">
- <button name="zoom_btn" tool_tip="é¸æŠžã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã«è¿‘ã¥ã"/>
+ <button name="zoom_btn" tool_tip="é¸æŠžã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã«ã‚ºãƒ¼ãƒ "/>
</layout_panel>
<layout_panel name="unzoom">
<button name="unzoom_btn" tool_tip="é¸æŠžã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‹ã‚‰é ã–ã‹ã‚‹"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_online_status_toast.xml b/indra/newview/skins/default/xui/ja/panel_online_status_toast.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_online_status_toast.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
index bad4cdbc05..488a8c7a9b 100644
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -7,6 +7,8 @@
<string name="no_friends" value="フレンドã¯ã„ã¾ã›ã‚“"/>
<string name="people_filter_label" value="人をフィルター"/>
<string name="groups_filter_label" value="グループをフィルター"/>
+ <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups 検索ã§ã‚°ãƒ«ãƒ¼ãƒ—を探ã—ã¦ã¿ã¾ã™ã‹ï¼Ÿ]"/>
+ <string name="no_groups_msg" value="[secondlife:///app/search/groups 入会ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—を探ã—ã¾ã™ã€‚]"/>
<filter_editor label="フィルター" name="filter_input"/>
<tab_container name="tabs">
<panel label="è¿‘ã" name="nearby_panel">
@@ -20,15 +22,15 @@
<accordion_tab name="tab_online" title="オンライン"/>
<accordion_tab name="tab_all" title="全員"/>
</accordion>
- <text name="no_friends_msg">
- ãŠå‹é”を追加ã™ã‚‹ã«ã¯ã€[secondlife:///app/search/people グローãƒãƒ«æ¤œç´¢] ã‚’ã™ã‚‹ã‹ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’クリックã—ã¦è¡Œã£ã¦ãã ã•ã„。
-誰ã‹ä¸€ç·’ã«è¡Œå‹•ã‚’ã™ã‚‹äººã‚’ãŠæŽ¢ã—ã®æ™‚ã¯ã€[secondlife:///app/worldmap 地図をãŠè©¦ã—ã ã•ã„]。
- </text>
<panel label="bottom_panel" name="bottom_panel">
<button name="friends_viewsort_btn" tool_tip="オプション"/>
<button name="add_btn" tool_tip="フレンド登録を申ã—出ã¾ã™"/>
<button name="del_btn" tool_tip="é¸æŠžã—ãŸäººã‚’フレンドリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™"/>
</panel>
+ <text name="no_friends_msg">
+ フレンドを登録ã™ã‚‹ã«ã¯ã€[secondlife:///app/search/people グローãƒãƒ«æ¤œç´¢] ã‚’ã™ã‚‹ã‹ã€ä½äººã‚’å³ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„。
+誰ã‹ä¸€ç·’ã«è¡Œå‹•ã‚’ã™ã‚‹äººã‚’ãŠæŽ¢ã—ã®æ™‚ã¯ã€[secondlife:///app/worldmap 地図をãŠè©¦ã—ã ã•ã„]。
+ </text>
</panel>
<panel label="マイ グループ" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
diff --git a/indra/newview/skins/default/xui/ja/panel_place_profile.xml b/indra/newview/skins/default/xui/ja/panel_place_profile.xml
index a6af5f3d3c..9de04f0d6a 100644
--- a/indra/newview/skins/default/xui/ja/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_place_profile.xml
@@ -68,8 +68,8 @@
<text name="maturity_value" value="䏿˜Ž"/>
<accordion name="advanced_info_accordion">
<accordion_tab name="parcel_characteristics_tab" title="区画">
- <panel>
- <text name="rating_label" value="レーティング区分:"/>
+ <panel name="parcel_characteristics_panel">
+ <text name="rating_label" value="レーティング:"/>
<text name="rating_value" value="䏿˜Ž"/>
<text name="voice_label" value="ボイス:"/>
<text name="voice_value" value="オン"/>
@@ -87,13 +87,13 @@
</panel>
</accordion_tab>
<accordion_tab name="region_information_tab" title="リージョン(地域) ">
- <panel>
- <text name="region_name_label" value="地域:"/>
+ <panel name="region_information_panel">
+ <text name="region_name_label" value="リージョン:"/>
<text name="region_name" value="Mooseland"/>
<text name="region_type_label" value="種類:"/>
<text name="region_type" value="Moose"/>
- <text name="region_rating_label" value="レーティング区分:"/>
- <text name="region_rating" value="アダルト"/>
+ <text name="region_rating_label" value="レーティング:"/>
+ <text name="region_rating" value="Adult"/>
<text name="region_owner_label" value="所有者:"/>
<text name="region_owner" value="moose Van Moose"/>
<text name="region_group_label" value="グループ:"/>
@@ -104,15 +104,15 @@
</panel>
</accordion_tab>
<accordion_tab name="estate_information_tab" title="エステート(ä¸å‹•産)">
- <panel>
- <text name="estate_name_label" value="ä¸å‹•産:"/>
- <text name="estate_rating_label" value="レーティング区分:"/>
+ <panel name="estate_information_panel">
+ <text name="estate_name_label" value="エステート:"/>
+ <text name="estate_rating_label" value="レーティング:"/>
<text name="estate_owner_label" value="所有者:"/>
<text name="covenant_label" value="約款:"/>
</panel>
</accordion_tab>
<accordion_tab name="sales_tab" title="販売中">
- <panel>
+ <panel name="sales_panel">
<text name="sales_price_label" value="価格:"/>
<text name="area_label" value="é¢ç©ï¼š"/>
<text name="traffic_label" value="トラフィック:"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml
index e2dba19c1d..acfa0bf4e8 100644
--- a/indra/newview/skins/default/xui/ja/panel_places.xml
+++ b/indra/newview/skins/default/xui/ja/panel_places.xml
@@ -2,14 +2,14 @@
<panel label="場所" name="places panel">
<string name="landmarks_tab_title" value="マイ ランドマーク"/>
<string name="teleport_history_tab_title" value="テレãƒãƒ¼ãƒˆã®å±¥æ­´"/>
- <filter_editor label="ç§ã®å ´æ‰€ã‚’フィルターã™ã‚‹" name="Filter"/>
+ <filter_editor label="場所をフィルター" name="Filter"/>
<panel name="button_panel">
<button label="テレãƒãƒ¼ãƒˆ" name="teleport_btn" tool_tip="該当ã™ã‚‹ã‚¨ãƒªã‚¢ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™"/>
<button label="地図" name="map_btn"/>
<button label="編集" name="edit_btn" tool_tip="ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ã®æƒ…報を編集ã—ã¾ã™"/>
- <button name="overflow_btn" tool_tip="ãã®ä»–ã®ã‚ªãƒ—ションを表示"/>
- <button label="é–‰ã˜ã‚‹" name="close_btn"/>
- <button label="キャンセル" name="cancel_btn"/>
+ <button label="â–¼" name="overflow_btn" tool_tip="ãã®ä»–ã®ã‚ªãƒ—ションを表示"/>
<button label="ä¿å­˜" name="save_btn"/>
+ <button label="キャンセル" name="cancel_btn"/>
+ <button label="é–‰ã˜ã‚‹" name="close_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
index e0c25c35a1..a8520a51cc 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
@@ -3,6 +3,9 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <panel.string name="middle_mouse">
+ マウスã®ä¸­å¤®
+ </panel.string>
<slider label="視界角" name="camera_fov"/>
<slider label="è·é›¢" name="camera_offset_scale"/>
<text name="heading2">
@@ -22,7 +25,7 @@
<radio_item label="è¿‘ãã®ãƒãƒ£ãƒƒãƒˆ" name="0"/>
<radio_item label="別々ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" name="1"/>
</radio_group>
- <check_box label="押ã™ã¨ãƒœã‚¤ã‚¹ã®ã‚ªãƒ³ãƒ»ã‚ªãƒ•を切り替ãˆã¾ã™ï¼š" name="push_to_talk_toggle_check" tool_tip="ãƒˆã‚°ãƒ«ãƒ¢ãƒ¼ãƒ‰ã®æ™‚ã«ãƒˆãƒªã‚¬ãƒ¼ã‚­ãƒ¼ã‚’1度押ã—ã¦æ”¾ã™ã¨ã€ãƒžã‚¤ã‚¯ã®ã‚ªãƒ³ãƒ»ã‚ªãƒ•設定を切り替ãˆã¾ã™ã€‚ トグルモードã§ã¯ãªã„ã¨ãã¯ã€ãƒˆãƒªã‚¬ãƒ¼ã‚­ãƒ¼ã‚’押ã—ãŸçŠ¶æ…‹ã®æ™‚ã®ã¿ã‚ãªãŸã®å£°ãŒç›¸æ‰‹ã«èžã“ãˆã¾ã™ã€‚"/>
+ <check_box label="ボイスã®ã‚ªãƒ³ãƒ»ã‚ªãƒ•切り替ãˆã«ä½¿ç”¨ã™ã‚‹ãƒˆãƒªã‚¬ãƒ¼ã‚­ãƒ¼ï¼š" name="push_to_talk_toggle_check" tool_tip="ãƒˆã‚°ãƒ«ãƒ¢ãƒ¼ãƒ‰ã®æ™‚ã«ãƒˆãƒªã‚¬ãƒ¼ã‚­ãƒ¼ã‚’ 1 度押ã—ã¦æ”¾ã™ã¨ã€ãƒžã‚¤ã‚¯ã®ã‚ªãƒ³ãƒ»ã‚ªãƒ•設定を切り替ãˆã¾ã™ã€‚ トグルモードã§ã¯ãªã„ã¨ãã¯ã€ãƒˆãƒªã‚¬ãƒ¼ã‚­ãƒ¼ã‚’押ã—ãŸçŠ¶æ…‹ã®æ™‚ã®ã¿ã‚ãªãŸã®å£°ãŒç›¸æ‰‹ã«èžã“ãˆã¾ã™ã€‚"/>
<line_editor label="プッシュ・トゥ・スピークã®ãƒˆãƒªã‚¬ãƒ¼" name="modifier_combo"/>
<button label="キー設定" name="set_voice_hotkey_button"/>
<button label="マウスã®ä¸­å¤®ãƒœã‚¿ãƒ³" name="set_voice_middlemouse_button" tool_tip="マウスã®ä¸­å¤®ãƒœã‚¿ãƒ³ã«ãƒªã‚»ãƒƒãƒˆã—ã¾ã™"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index d6fe54fbd1..e5780697b1 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="ãƒãƒ£ãƒƒãƒˆ" name="chat">
+ <text name="font_size">
+ 文字ã®å¤§ãã•:
+ </text>
<radio_group name="chat_font_size">
<radio_item label="å°" name="radio" value="0"/>
<radio_item label="中" name="radio2" value="1"/>
<radio_item label="大" name="radio3" value="2"/>
</radio_group>
+ <text name="font_colors">
+ 文字ã®è‰²ï¼š
+ </text>
<color_swatch label="自分" name="user"/>
<text name="text_box1">
自分
@@ -40,6 +46,12 @@
<check_box initial_value="true" label="ãƒãƒ£ãƒƒãƒˆä¸­ã«ã‚¿ã‚¤ãƒ”ング動作ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†ç”Ÿ" name="play_typing_animation"/>
<check_box label="オフライン時ã«å—ã‘å–ã£ãŸ IM をメールã§å—ä¿¡" name="send_im_to_email"/>
<check_box label="ãƒãƒ£ãƒƒãƒˆå±¥æ­´ã«æ–‡å­—ã ã‘表示ã™ã‚‹" name="plain_text_chat_history"/>
+ <text name="show_ims_in_label">
+ IM ã®è¡¨ç¤ºæ–¹æ³•:
+ </text>
+ <text name="requires_restart_label">
+ (å†èµ·å‹•後ã«å映)
+ </text>
<radio_group name="chat_window" tool_tip="インスタントメッセージを別フローターã€ã¾ãŸã¯1ã¤ã®ãƒ•ローターã«è¤‡æ•°ã‚¿ãƒ–ã§è¡¨ç¤ºã—ã¾ã™ï¼ˆè¦å†èµ·å‹•)">
<radio_item label="別々ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" name="radio" value="0"/>
<radio_item label="タブ" name="radio2" value="1"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
index f216c3acbc..4ccb70b321 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
@@ -24,9 +24,9 @@
</text>
<text name="maturity_desired_textbox"/>
<combo_box name="maturity_desired_combobox">
- <combo_box.item label="ä¸€èˆ¬ã€æŽ§ãˆã‚ã€ã‚¢ãƒ€ãƒ«ãƒˆ" name="Desired_Adult"/>
- <combo_box.item label="ä¸€èˆ¬ã¨æŽ§ãˆã‚" name="Desired_Mature"/>
- <combo_box.item label="一般" name="Desired_PG"/>
+ <combo_box.item label="Generalã€Moderateã€Adult" name="Desired_Adult"/>
+ <combo_box.item label="General 㨠Moderate" name="Desired_Mature"/>
+ <combo_box.item label="General" name="Desired_PG"/>
</combo_box>
<text name="start_location_textbox">
ログインä½ç½®ï¼š
@@ -44,7 +44,7 @@
<radio_item label="オン" name="radio2" value="1"/>
<radio_item label="一時的ã«è¡¨ç¤º" name="radio3" value="2"/>
</radio_group>
- <check_box label="ç§ã®åå‰ã‚’表示" name="show_my_name_checkbox1"/>
+ <check_box label="自分ã®åå‰ã‚’表示" name="show_my_name_checkbox1"/>
<check_box initial_value="true" label="å°ã•ã„ã‚¢ãƒã‚¿ãƒ¼å" name="small_avatar_names_checkbox"/>
<check_box label="グループタイトルを表示" name="show_all_title_checkbox1"/>
<text name="effects_color_textbox">
@@ -53,12 +53,12 @@
<text name="title_afk_text">
一時退席ã¾ã§ã®æ™‚間:
</text>
- <color_swatch label="" name="effect_color_swatch" tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã"/>
+ <color_swatch label="" name="effect_color_swatch" tool_tip="クリックã§ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
<combo_box label="一時退席ã¾ã§ã®æ™‚間:" name="afk">
- <combo_box.item label="2分" name="item0"/>
- <combo_box.item label="5分" name="item1"/>
- <combo_box.item label="10分" name="item2"/>
- <combo_box.item label="30分" name="item3"/>
+ <combo_box.item label="2 分" name="item0"/>
+ <combo_box.item label="5 分" name="item1"/>
+ <combo_box.item label="10 分" name="item2"/>
+ <combo_box.item label="30 分" name="item3"/>
<combo_box.item label="一時退席設定ãªã—" name="item4"/>
</combo_box>
<text name="text_box3">
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
index ad8c8437be..653d9fd3b3 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
@@ -34,9 +34,12 @@
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="内蔵ブラウザを使用" name="internal" tool_tip="内蔵ブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„ Web リンクãªã©ã‚’見ã¾ã™ã€‚[APP_NAME] å†…ã«æ–°ã—ã„ウィンドウã§ã“ã®ãƒ–ラウザãŒé–‹ãã¾ã™ã€‚" value="0"/>
<radio_item label="指定ã®ãƒ–ラウザ(IE ã‚„ Firefox)を使用" name="external" tool_tip="デフォルトã®ã‚·ã‚¹ãƒ†ãƒ  Web ブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„ Web リンク先ãªã©ã‚’見ã¾ã™ã€‚全画é¢ã§èµ·å‹•中ã«ã¯ãŠã™ã™ã‚ã—ã¾ã›ã‚“。" value="1"/>
+ <radio_item label="内蔵ブラウザを使用" name="internal" tool_tip="内蔵ブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„ Web リンクãªã©ã‚’見ã¾ã™ã€‚[APP_NAME] å†…ã«æ–°ã—ã„ウィンドウã§ã“ã®ãƒ–ラウザãŒé–‹ãã¾ã™ã€‚" value=""/>
</radio_group>
+ <check_box initial_value="true" label="プラグインを有効ã«ã™ã‚‹" name="browser_plugins_enabled"/>
+ <check_box initial_value="true" label="Cookie ã‚’å—ã‘入れる" name="cookies_enabled"/>
+ <check_box initial_value="true" label="Javascript を有効ã«ã™ã‚‹" name="browser_javascript_enabled"/>
<check_box initial_value="false" label="Web プロキシを有効ã«ã™ã‚‹" name="web_proxy_enabled"/>
<text name="Proxy location">
プロキシ:
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
index af64a217f6..fe830d864f 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
@@ -13,9 +13,12 @@
<check_box label="有効" name="enable_voice_check"/>
<check_box label="メディアを自動å†ç”Ÿã™ã‚‹" name="media_auto_play_btn" tool_tip="ã“ã“ã«ãƒã‚§ãƒƒã‚¯ã‚’入れã¦ãƒ¡ãƒ‡ã‚£ã‚¢ã®è‡ªå‹•å†ç”Ÿã‚’許å¯ã—ã¾ã™" value="true"/>
<check_box label="ä»–ã®ã‚¢ãƒã‚¿ãƒ¼ã«å–り付ã‘られãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚’å†ç”Ÿã—ã¾ã™" name="media_show_on_others_btn" tool_tip="ã“ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ã€è¿‘ãã«ã„ã‚‹ä»–ã®ã‚¢ãƒã‚¿ãƒ¼ã«å–り付ã‘られãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚’éžè¡¨ç¤ºã«ã—ã¾ã™ã€‚" value="true"/>
- <text name="Listen from">
+ <text name="voice_chat_settings">
ボイスãƒãƒ£ãƒƒãƒˆã®è¨­å®š
</text>
+ <text name="Listen from">
+ æ–¹å‘:
+ </text>
<radio_group name="ear_location">
<radio_item label="カメラã®ä½ç½®ã‹ã‚‰èžã" name="0"/>
<radio_item label="ã‚¢ãƒã‚¿ãƒ¼ã®ä½ç½®ã‹ã‚‰èžã" name="1"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
index 0e1e2851e3..1fe6ad25ed 100644
--- a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
@@ -67,7 +67,7 @@
<button name="close_btn" tool_tip="Zoom Back"/>
</layout_panel>
<layout_panel name="new_window">
- <button name="new_window_btn" tool_tip="URLをブラウザã§é–‹ã"/>
+ <button name="new_window_btn" tool_tip="URL をブラウザã§é–‹ã"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_covenant.xml b/indra/newview/skins/default/xui/ja/panel_region_covenant.xml
index 9a517d79e9..5214f79141 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_covenant.xml
@@ -30,7 +30,7 @@
約款ã®å¤‰æ›´ã¯ä¸å‹•産全区画ã«é©ç”¨ã¨ãªã‚Šã¾ã™ã€‚
</text>
<text name="covenant_instructions" width="390">
- ã“ã®ä¸å‹•産約款ã®å¤‰æ›´ã‚’ã™ã‚‹éš›ã¯ã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã‚’ドラッグ&ドロップã—ã¦ãã ã•ã„。
+ ã“ã®ä¸å‹•産約款を変更ã™ã‚‹éš›ã¯ã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã‚’ドラッグ&ドロップã—ã¦ãã ã•ã„。
</text>
<text bottom_delta="-34" font="SansSerifLarge" name="region_section_lbl" width="200">
地域
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 71551c7680..5b2ef36045 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_estate.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="ä¸å‹•産" name="Estate">
- <text name="estate_help_text" width="400">
+ <text name="estate_help_text">
ã“ã®ã‚¿ãƒ–内ã®è¨­å®šå¤‰æ›´ã¯ã€ä¸å‹•産内ã®ã™ã¹ã¦ã®åœ°åŸŸã«å½±éŸ¿ã—ã¾ã™ã€‚
</text>
<text name="estate_text">
@@ -16,10 +16,10 @@
ï¼ˆä¸æ˜Žï¼‰
</text>
<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_age_verified" tool_tip="年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„ä½äººã®ç«‹å…¥ã‚’ç¦æ­¢ã—ã¾ã™ã€‚ 詳ã—ã„æƒ…報㯠[SUPPORT_SITE] ã‚’ã”覧下ã•ã„。"/>
<check_box label="ボイスãƒãƒ£ãƒƒãƒˆã‚’許å¯" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<text name="abuse_email_text">
@@ -70,5 +70,5 @@
<button label="追加..." name="add_banned_avatar_btn"/>
<button label="削除..." name="remove_banned_avatar_btn"/>
<button label="メッセージをä¸å‹•産ã«é€ä¿¡..." name="message_estate_btn"/>
- <button label="土地ã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追ã„出ã™..." name="kick_user_from_estate_btn"/>
+ <button label="ä¸å‹•産ã‹ã‚‰ä½äººã‚’追ã„出ã™..." name="kick_user_from_estate_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml
index 168141ee77..b72fac1a7c 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_general.xml
@@ -15,39 +15,29 @@
<text name="region_type_lbl">
種類:
</text>
- <text name="region_type" left_delta="70">
+ <text left_delta="70" name="region_type">
䏿˜Ž
</text>
<check_box label="土地整備をブロック" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
<check_box label="飛行をブロック" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
<check_box label="ダメージを許å¯" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
<check_box label="プッシュを制é™" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
<check_box label="土地ã®å†è²©ã‚’許å¯" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help"/>
<check_box label="土地ã®çµ±åˆãƒ»åˆ†å‰²ã‚’許å¯" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help"/>
<check_box label="åœŸåœ°ã®æ¤œç´¢è¡¨ç¤ºã‚’ブロック" name="block_parcel_search_check" tool_tip="æ¤œç´¢çµæžœã§ã€ã“ã®åœ°åŸŸã¨åŒºç”»ã‚’表示ã™ã‚‹ã‹ã©ã†ã‹ã®è¨­å®šã§ã™"/>
- <button label="?" name="parcel_search_help"/>
<spinner label="ã‚¢ãƒã‚¿ãƒ¼æ•°ä¸Šé™" name="agent_limit_spin"/>
- <button label="?" name="agent_limit_help"/>
<spinner label="物体ボーナス" name="object_bonus_spin"/>
- <button label="?" name="object_bonus_help"/>
<text label="æˆäººæŒ‡å®š" name="access_text">
区分:
</text>
- <combo_box label="控ãˆã‚" name="access_combo">
- <combo_box.item label="アダルト" name="Adult"/>
- <combo_box.item label="控ãˆã‚" name="Mature"/>
- <combo_box.item label="一般" name="PG"/>
- </combo_box>
- <button label="?" name="access_help"/>
+ <icons_combo_box label="Moderate" name="access_combo">
+ <icons_combo_box.item label="Adult" name="Adult" value="42"/>
+ <icons_combo_box.item label="Moderate" name="Mature" value="21"/>
+ <icons_combo_box.item label="General" name="PG" value="13"/>
+ </icons_combo_box>
<button label="é©ç”¨" name="apply_btn"/>
- <button label="ユーザー1åをホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ" name="kick_btn"/>
- <button label="ユーザー全員をホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ" name="kick_all_btn"/>
+ <button label="ä½äºº 1 åをホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ..." name="kick_btn"/>
+ <button label="ä½äººå…¨å“¡ã‚’ホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ..." name="kick_all_btn"/>
<button label="メッセージを地域ã«é€ä¿¡..." name="im_btn"/>
<button label="テレãƒãƒ–ã®ç®¡ç†..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml b/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml
index df7e5d9129..188a60eb60 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml
@@ -3,19 +3,19 @@
<text name="region_text_lbl">
地域:
</text>
- <text name="region_text" left_delta="70">
+ <text left_delta="70" name="region_text">
䏿˜Ž
</text>
<text name="version_channel_text_lbl">
ãƒãƒ¼ã‚¸ãƒ§ãƒ³ï¼š
</text>
- <text name="version_channel_text" left_delta="70">
+ <text left_delta="70" name="version_channel_text">
䏿˜Ž
</text>
<text name="region_type_lbl">
種類:
</text>
- <text name="region_type" left_delta="70">
+ <text left_delta="70" name="region_type">
䏿˜Ž
</text>
<check_box label="地形編集をブロック" name="block_terraform_check"/>
@@ -25,19 +25,19 @@
<check_box label="土地ã®å†è²©ã‚’許å¯" name="allow_land_resell_check"/>
<check_box label="土地ã®çµ±åˆãƒ»åˆ†å‰²ã‚’許å¯" name="allow_parcel_changes_check"/>
<check_box label="åœŸåœ°ã®æ¤œç´¢è¡¨ç¤ºã‚’ブロック" name="block_parcel_search_check" tool_tip="æ¤œç´¢çµæžœã§ã€ã“ã®åœ°åŸŸã¨åŒºç”»ã‚’表示ã™ã‚‹ã‹ã©ã†ã‹ã®è¨­å®šã§ã™"/>
- <spinner label="ã‚¢ãƒã‚¿ãƒ¼æ•°ä¸Šé™" name="agent_limit_spin" label_width="110" width="190"/>
- <spinner label="物体ボーナス" name="object_bonus_spin" label_width="110" width="190"/>
+ <spinner label="ã‚¢ãƒã‚¿ãƒ¼æ•°ä¸Šé™" label_width="110" name="agent_limit_spin" width="190"/>
+ <spinner label="物体ボーナス" label_width="110" name="object_bonus_spin" width="190"/>
<text label="レーティング区分" name="access_text">
レーティング区分:
</text>
- <combo_box label="控ãˆã‚" name="access_combo">
- <combo_box.item label="アダルト" name="Adult"/>
- <combo_box.item label="控ãˆã‚" name="Mature"/>
- <combo_box.item label="一般" name="PG"/>
+ <combo_box label="Moderate" name="access_combo">
+ <combo_box.item label="Adult" name="Adult"/>
+ <combo_box.item label="Moderate" name="Mature"/>
+ <combo_box.item label="General" name="PG"/>
</combo_box>
<button label="é©ç”¨" name="apply_btn"/>
- <button label="ユーザー1åをホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ..." name="kick_btn"/>
- <button label="ユーザー全員をホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ..." name="kick_all_btn"/>
+ <button label="ä½äºº 1 åをホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ..." name="kick_btn"/>
+ <button label="ä½äººå…¨å“¡ã‚’ホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ..." name="kick_all_btn"/>
<button label="メッセージを地域ã«é€ä¿¡..." name="im_btn"/>
<button label="テレãƒãƒ–ã®ç®¡ç†..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_texture.xml b/indra/newview/skins/default/xui/ja/panel_region_texture.xml
index 526e6cdeb9..14fc0b4c22 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_texture.xml
@@ -25,16 +25,16 @@
テクスãƒãƒ£æ¨™é«˜ç¯„囲
</text>
<text name="height_text_lbl6">
- å—西
+ 北西
</text>
<text name="height_text_lbl7">
- 北西
+ 北æ±
</text>
<text name="height_text_lbl8">
- å—æ±
+ å—西
</text>
<text name="height_text_lbl9">
- 北æ±
+ å—æ±
</text>
<spinner label="低" name="height_start_spin_0"/>
<spinner label="低" name="height_start_spin_1"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_side_tray.xml b/indra/newview/skins/default/xui/ja/panel_side_tray.xml
index 5364b8726f..3fd14ece06 100644
--- a/indra/newview/skins/default/xui/ja/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/ja/panel_side_tray.xml
@@ -20,10 +20,10 @@
<sidetray_tab description="行ããŸã„場所ã€è¡Œã£ãŸã“ã¨ã®ã‚る場所を探ã—ã¦ãã ã•ã„。" label="場所" name="sidebar_places" tab_title="場所">
<panel label="場所" name="panel_places"/>
</sidetray_tab>
- <sidetray_tab description="ã‚ãªãŸã®æŒã¡ç‰©ã‚’眺ã‚ã¦ãã ã•ã„。" name="sidebar_inventory" tab_title="マイ æŒã¡ç‰©">
+ <sidetray_tab description="ã‚ãªãŸã®æŒã¡ç‰©ã‚’眺ã‚ã¦ãã ã•ã„。" name="sidebar_inventory" tab_title="æŒã¡ç‰©">
<panel label="æŒã¡ç‰©ã‚’編集" name="sidepanel_inventory"/>
</sidetray_tab>
- <sidetray_tab description="ã‚ãªãŸã®å®¹å§¿ã‚„ç¾åœ¨ã®è¦‹ãŸç›®ã‚’変更ã—ã¦ãã ã•ã„。" name="sidebar_appearance" tab_title="マイ 容姿">
+ <sidetray_tab description="ã‚ãªãŸã®å®¹å§¿ã‚„ç¾åœ¨ã®è¦‹ãŸç›®ã‚’変更ã—ã¦ãã ã•ã„。" name="sidebar_appearance" tab_title="容姿">
<panel label="容姿ã®ç·¨é›†" name="sidepanel_appearance"/>
</sidetray_tab>
</side_tray>
diff --git a/indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml
index aef1f90298..ea17cd6526 100644
--- a/indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml
@@ -22,13 +22,13 @@
</text>
</panel>
<panel name="sidebar_appearance">
- <text name="tab_name" value="マイ 容姿"/>
+ <text name="tab_name" value="容姿"/>
<text name="tab_description">
ã‚ãªãŸã®å®¹å§¿ã‚„ç¾åœ¨ã®è¦‹ãŸç›®ã‚’変更ã—ã¾ã™ã€‚
</text>
</panel>
<panel name="sidebar_inventory">
- <text name="tab_name" value="マイ æŒã¡ç‰©"/>
+ <text name="tab_name" value="æŒã¡ç‰©"/>
<text name="tab_description">
ã‚ãªãŸã®æŒã¡ç‰©ã‚’眺ã‚ã¾ã™ã€‚
</text>
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 a9e13cfd9f..923455abba 100644
--- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
@@ -22,10 +22,10 @@
L$ [AMT]
</panel.string>
<button label="" label_selected="" name="buycurrency" tool_tip="所æŒé‡‘"/>
- <button label="L$ ã®è³¼å…¥" name="buyL" tool_tip="クリックã—㦠L$ を購入ã—ã¾ã™"/>
+ <button label="購入" name="buyL" tool_tip="クリックã—㦠L$ を購入ã—ã¾ã™"/>
<text name="TimeText" tool_tip="ç¾åœ¨æ™‚刻(太平洋)">
24:00 AM PST
</text>
- <button name="media_toggle_btn" tool_tip="クリックã—ã¦ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’切り替ãˆã¾ã™"/>
+ <button name="media_toggle_btn" tool_tip="ã™ã¹ã¦ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’é–‹å§‹ãƒ»åœæ­¢ï¼ˆéŸ³æ¥½ã€ãƒ“デオã€Web ページ)"/>
<button name="volume_btn" tool_tip="グローãƒãƒ«éŸ³é‡è¨­å®š"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_teleport_history.xml b/indra/newview/skins/default/xui/ja/panel_teleport_history.xml
index 2264ae965b..c1bf81f7e7 100644
--- a/indra/newview/skins/default/xui/ja/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/ja/panel_teleport_history.xml
@@ -12,6 +12,6 @@
<accordion_tab name="6_months_and_older" title="åŠå¹´ä»¥ä¸Šå‰"/>
</accordion>
<panel label="bottom_panel" name="bottom_panel">
- <button name="gear_btn" tool_tip="ãã®ä»–ã®ã‚ªãƒ—ションを表示"/>
+ <button name="gear_btn" tool_tip="オプションを表示ã—ã¾ã™"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml
index 4fba4b1567..94be8ba73d 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml
@@ -10,7 +10,7 @@
MyOutfit With a really Long Name like MOOSE
</text>
</panel>
- <filter_editor label="アウトフィットã®ãƒ•ィルター" name="Filter"/>
+ <filter_editor label="アウトフィットをフィルター" name="Filter"/>
<button label="装ç€" name="wear_btn"/>
<button label="æ–°ã—ã„アウトフィット" name="newlook_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
index ab00953f1a..ff9b5dc6aa 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
@@ -38,7 +38,7 @@
</panel.string>
<text name="title" value="オブジェクトã®ãƒ—ロフィール"/>
<text name="where" value="(インワールド)"/>
- <panel label="">
+ <panel label="" name="properties_panel">
<text name="Name:">
åå‰ï¼š
</text>
@@ -60,7 +60,7 @@
<text name="Group_label">
グループ:
</text>
- <button name="button set group" tool_tip="ã“ã®ã‚ªãƒ–ジェクト権é™ã‚’共有ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠž"/>
+ <button name="button set group" tool_tip="ã“ã®ã‚ªãƒ–ジェクト権é™ã‚’共有ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã—ã¾ã™"/>
<name_box initial_value="ローディング..." name="Group Name Proxy"/>
<button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’譲渡ã™ã‚‹ã¨ã€Œæ¬¡ã®æ‰€æœ‰è€…ã€ã®æ¨©é™ãŒé©ç”¨ã•れã¾ã™ã€‚ グループ共有オブジェクトã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚ªãƒ•ィサーãŒè­²æ¸¡ã§ãã¾ã™ã€‚"/>
<text name="label click action">
@@ -91,7 +91,7 @@
</text>
<check_box label="修正" name="checkbox next owner can modify"/>
<check_box label="コピー" name="checkbox next owner can copy"/>
- <check_box label="å†è²©ãƒ»ãƒ—レゼント" name="checkbox next owner can transfer" tool_tip="æ¬¡ã®æ‰€æœ‰è€…ã¯ã“ã®ã‚ªãƒ–ジェクトを他人ã«ã‚ã’ãŸã‚Šå†è²©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"/>
+ <check_box label="å†è²©ãƒ»ãƒ—レゼント" name="checkbox next owner can transfer" tool_tip="æ¬¡ã®æ‰€æœ‰è€…ã¯ã“ã®ã‚ªãƒ–ジェクトを他人ã«ã‚ã’ãŸã‚Šå†è²©ã§ãã¾ã™"/>
</panel>
<check_box label="販売中" name="checkbox for sale"/>
<combo_box name="sale type">
@@ -124,5 +124,6 @@
<button label="é–‹ã" name="open_btn"/>
<button label="支払ã†" name="pay_btn"/>
<button label="è²·ã†" name="buy_btn"/>
+ <button label="詳細" name="details_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 9b272b2fe8..b9df82adcd 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -23,7 +23,22 @@
ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®æ¤œå‡ºä¸­ã§ã™...
</string>
<string name="StartupLoading">
- ローディング
+ [APP_NAME] をインストール中ã§ã™...
+ </string>
+ <string name="StartupClearingCache">
+ キャッシュをクリア中ã§ã™...
+ </string>
+ <string name="StartupInitializingTextureCache">
+ テクスãƒãƒ£ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’åˆæœŸåŒ–中ã§ã™...
+ </string>
+ <string name="StartupInitializingVFS">
+ VFS ã‚’åˆæœŸåŒ–中ã§ã™...
+ </string>
+ <string name="ProgressRestoring">
+ 復元中ã§ã™...
+ </string>
+ <string name="ProgressChangingResolution">
+ è§£åƒåº¦ã‚’変更中ã§ã™...
</string>
<string name="Fullbright">
明るã•全開(レガシー)
@@ -88,6 +103,9 @@
<string name="LoginFailedNoNetwork">
ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ©ãƒ¼ï¼š 接続を確立ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ãŠä½¿ã„ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã‚’ã”確èªãã ã•ã„。
</string>
+ <string name="LoginFailed">
+ ログインã«å¤±æ•—ã—ã¾ã—ãŸã€‚
+ </string>
<string name="Quit">
終了
</string>
@@ -97,6 +115,24 @@
<string name="AgentLostConnection">
ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ä¸éƒ½åˆãŒç™ºç”Ÿã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ã”使用ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã‚’ã”確èªãã ã•ã„。
</string>
+ <string name="SavingSettings">
+ 設定をä¿å­˜ä¸­ã§ã™...
+ </string>
+ <string name="LoggingOut">
+ ログアウト中ã§ã™...
+ </string>
+ <string name="ShuttingDown">
+ シャットダウン中ã§ã™...
+ </string>
+ <string name="YouHaveBeenDisconnected">
+ ã‚ãªãŸãŒã„ãŸãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã¸ã®æŽ¥ç¶šãŒåˆ‡ã‚Œã¾ã—ãŸã€‚
+ </string>
+ <string name="SentToInvalidRegion">
+ 無効ãªãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã•れã¾ã—ãŸã€‚
+ </string>
+ <string name="TestingDisconnect">
+ ãƒ“ãƒ¥ãƒ¼ãƒ¯ã®æŽ¥ç¶šã‚’åˆ‡ã‚‹ãƒ†ã‚¹ãƒˆä¸­
+ </string>
<string name="TooltipPerson">
人
</string>
@@ -151,6 +187,24 @@
<string name="TooltipAgentUrl">
クリックã—ã¦ã“ã®ä½äººã®ãƒ—ロフィールを見ã¾ã™
</string>
+ <string name="TooltipAgentMute">
+ クリックã—ã¦ã“ã®ä½äººã«å¯¾ã—ã¦ç„¡è¦–設定をã—ã¾ã™
+ </string>
+ <string name="TooltipAgentUnmute">
+ クリックã—ã¦ã“ã®ä½äººã«å¯¾ã™ã‚‹ç„¡è¦–設定を解除ã—ã¾ã™
+ </string>
+ <string name="TooltipAgentIM">
+ クリックã—ã¦ã“ã®ä½äººã« IM ã‚’é€ã‚Šã¾ã™
+ </string>
+ <string name="TooltipAgentPay">
+ クリックã—ã¦ã“ã®ä½äººã«æ”¯æ‰•ã„ã¾ã™
+ </string>
+ <string name="TooltipAgentOfferTeleport">
+ クリックã—ã¦ã“ã®ä½äººã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ã‚Šã¾ã™
+ </string>
+ <string name="TooltipAgentRequestFriend">
+ クリックã—ã¦ã“ã®ä½äººã«ãƒ•レンド登録リクエストをé€ã‚Šã¾ã™
+ </string>
<string name="TooltipGroupUrl">
クリックã—ã¦ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®èª¬æ˜Žæ–‡ã‚’見ã¾ã™
</string>
@@ -176,12 +230,31 @@
クリックã—㦠secondlife:// コマンドを出ã—ã¾ã™
</string>
<string name="CurrentURL" value=" ç¾åœ¨ã® URL: [CurrentURL]"/>
+ <string name="TooltipPrice" value="L$[PRICE]-"/>
<string name="SLurlLabelTeleport">
テレãƒãƒ¼ãƒˆ
</string>
<string name="SLurlLabelShowOnMap">
地図ã«è¡¨ç¤º
</string>
+ <string name="SLappAgentMute">
+ 無視
+ </string>
+ <string name="SLappAgentUnmute">
+ ミュート解除
+ </string>
+ <string name="SLappAgentIM">
+ IM
+ </string>
+ <string name="SLappAgentPay">
+ 支払ã†
+ </string>
+ <string name="SLappAgentOfferTeleport">
+ 次ã®å ´æ‰€ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™ï¼š
+ </string>
+ <string name="SLappAgentRequestFriend">
+ フレンド登録リクエスト
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
é–‰ã˜ã‚‹ (⌘W)
</string>
@@ -335,6 +408,9 @@
<string name="symbolic link">
リンク
</string>
+ <string name="symbolic folder link">
+ フォルダã®ãƒªãƒ³ã‚¯
+ </string>
<string name="AvatarEditingAppearance">
(容姿ã®ç·¨é›†ä¸­ï¼‰
</string>
@@ -636,13 +712,13 @@
接続ã•れã¦ã„ã¾ã›ã‚“
</string>
<string name="SIM_ACCESS_PG">
- 一般
+ General
</string>
<string name="SIM_ACCESS_MATURE">
- 控ãˆã‚
+ Moderate
</string>
<string name="SIM_ACCESS_ADULT">
- アダルト
+ Adult
</string>
<string name="SIM_ACCESS_DOWN">
オフライン
@@ -758,6 +834,9 @@
<string name="invalid">
無効
</string>
+ <string name="NewWearable">
+ æ–°ã—ã„ [WEARABLE_ITEM]
+ </string>
<string name="next">
次ã¸
</string>
@@ -825,7 +904,7 @@
ESC キーを押ã—ã¦ãƒ¯ãƒ¼ãƒ«ãƒ‰ãƒ“ãƒ¥ãƒ¼ã«æˆ»ã‚Šã¾ã™
</string>
<string name="InventoryNoMatchingItems">
- 一致ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ãŒæŒã¡ç‰©ã«ã‚りã¾ã›ã‚“ã§ã—ãŸã€‚ [secondlife:///app/search/groups 「検索ã€] ã‚’ãŠè©¦ã—ãã ã•ã„。
+ 一致ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ãŒã‚りã¾ã›ã‚“ã§ã—ãŸã€‚[secondlife:///app/search/groups 「検索ã€]ã‚’ãŠè©¦ã—ãã ã•ã„。
</string>
<string name="FavoritesNoMatchingItems">
ã“ã“ã«ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ã‚’ドラッグã—ã¦ã€ãŠæ°—ã«å…¥ã‚Šã«è¿½åŠ ã—ã¾ã™ã€‚
@@ -846,6 +925,7 @@
コンテンツãªã—
</string>
<string name="WornOnAttachmentPoint" value=" ([ATTACHMENT_POINT] ã«è£…ç€ä¸­ï¼‰"/>
+ <string name="ActiveGesture" value="[GESLABEL] (アクティブ)"/>
<string name="PermYes">
ã¯ã„
</string>
@@ -945,6 +1025,9 @@
<string name="InvFolder My Outfits">
マイ アウトフィット
</string>
+ <string name="InvFolder Accessories">
+ アクセサリ
+ </string>
<string name="InvFolder Friends">
フレンド
</string>
@@ -955,7 +1038,7 @@
è²·ã†
</string>
<string name="BuyforL$">
- Buy for L$
+ L$ ã§è³¼å…¥
</string>
<string name="Stone">
石
@@ -1298,7 +1381,7 @@
許å¯ã•れãŸä½äººï¼š ([ALLOWEDAGENTS] äººã€æœ€å¤§ [MAXACCESS] 人)
</string>
<string name="RegionInfoAllowedGroups">
- 許å¯ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—: ([ALLOWEDGROUPS]ã€æœ€å¤§ [MAXACCESS] グループ)
+ 許å¯ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—: ([ALLOWEDGROUPS]ã€æœ€å¤§ [MAXACCESS] )
</string>
<string name="ScriptLimitsParcelScriptMemory">
区画スクリプトメモリ
@@ -1468,6 +1551,12 @@
<string name="PanelContentsNewScript">
æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト
</string>
+ <string name="PanelContentsTooltip">
+ オブジェクトã®ä¸­èº«
+ </string>
+ <string name="BusyModeResponseDefault">
+ メッセージをé€ã£ãŸä½äººã¯ã€èª°ã«ã‚‚邪魔をã•れãŸããªã„ãŸã‚ç¾åœ¨ã€Œå–り込ã¿ä¸­ã€ãƒ¢ãƒ¼ãƒ‰ã§ã™ã€‚ ã‚ãªãŸã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€ã‚ã¨ã§ç¢ºèªã§ãるよã†ã« IM パãƒãƒ«ã«è¡¨ç¤ºã•れã¾ã™ã€‚
+ </string>
<string name="MuteByName">
(å称別)
</string>
@@ -1506,6 +1595,9 @@
<string name="NoPicksClassifiedsText">
ピックやクラシファイド広告を作æˆã—ã¦ã„ã¾ã›ã‚“。 作æˆã™ã‚‹ã«ã¯ã€ä¸‹ã«ã‚る「プラスã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚
</string>
+ <string name="NoAvatarPicksClassifiedsText">
+ ピックã€ã¾ãŸã¯ã‚¯ãƒ©ã‚·ãƒ•ァイド広告ãŒã‚りã¾ã›ã‚“
+ </string>
<string name="PicksClassifiedsLoadingText">
ローディング...
</string>
@@ -1579,7 +1671,10 @@
キャンセル
</string>
<string name="UploadingCosts">
- %s ã®ã‚¢ãƒƒãƒ—ロード代金:
+ [NAME] ã®ã‚¢ãƒƒãƒ—ロード料金㯠L$[AMOUNT] ã§ã™
+ </string>
+ <string name="BuyingCosts">
+ ã“れを L$[AMOUNT] ã§è³¼å…¥ã—ã¾ã™
</string>
<string name="UnknownFileExtension">
䏿˜Žã®æ‹¡å¼µå­ï¼š %s
@@ -1709,7 +1804,7 @@
Linden 所在地
</string>
<string name="Adult">
- アダルト
+ Adult
</string>
<string name="Arts&amp;Culture">
アートã¨ã‚«ãƒ«ãƒãƒ£ãƒ¼
@@ -1900,7 +1995,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
後ã‚é«ªã®æ¯›å…ˆ
</string>
<string name="Baggy">
- ãŸã‚‹ã‚“ã§ã„ã‚‹
+ ãŸã‚‹ã‚“ã ä¸‹ã¾ã¶ãŸ
</string>
<string name="Bangs">
å‰é«ª
@@ -1990,7 +2085,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
広
</string>
<string name="Brow Size">
- 眉毛ã®å¤§ãã•
+ 眉毛上ã®éš†èµ·
</string>
<string name="Bug Eyes">
Bug Eyes
@@ -2023,7 +2118,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
膨らã¿å¤§
</string>
<string name="Chaplin">
- Chaplin
+ ãƒãƒ£ãƒƒãƒ—リン
</string>
<string name="Cheek Bones">
ã»ãŠéª¨
@@ -2044,7 +2139,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
ã‚ã”ã®é•·ã•
</string>
<string name="Chin Heavy">
- ã‚ã”ã«é‡ç‚¹
+ ã‚ã”を強調
</string>
<string name="Chin In">
ã²ã„ãŸã‚ã”
@@ -2236,7 +2331,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
ã²ãŸã„ã®è§’度
</string>
<string name="Forehead Heavy">
- ã²ãŸã„ã«é‡ç‚¹
+ ã²ãŸã„を強調
</string>
<string name="Freckles">
ã—ã¿ãƒ»ãã°ã‹ã™
@@ -2386,7 +2481,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
ã‚ã”ã®å½¢
</string>
<string name="Join">
- 寄ã›ãŸ
+ 寄ã›ãŸèƒ¸
</string>
<string name="Jowls">
ãˆã‚‰
@@ -2491,7 +2586,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
å£ç´…ã®è‰²
</string>
<string name="Long">
- é•·
+ ロング
</string>
<string name="Long Head">
å‰å¾Œå¹…ãŒåºƒã„é ­
@@ -2887,7 +2982,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
骨張ã£ãŸè„š
</string>
<string name="Separate">
- 離れãŸ
+ 離れãŸèƒ¸
</string>
<string name="Shallow">
ãªã ã‚‰ã‹
@@ -2935,7 +3030,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
é´ã®é•·ã•
</string>
<string name="Short">
- 短
+ ショート
</string>
<string name="Short Arms">
短
@@ -3049,7 +3144,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
縦長
</string>
<string name="Sunken">
- ã“ã‘ãŸ
+ ã“ã‘ãŸã»ãŠ
</string>
<string name="Sunken Chest">
å°
@@ -3064,7 +3159,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
å‰ã¸
</string>
<string name="Tall">
- 高
+ トール
</string>
<string name="Taper Back">
後ã‚ã«å…ˆç´°
@@ -3160,7 +3255,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
ウエストã®é«˜ã•
</string>
<string name="Well-Fed">
- ã¤ã¾ã£ãŸ
+ ã¤ã¾ã£ãŸã»ãŠ
</string>
<string name="White Hair">
白髪
@@ -3181,7 +3276,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
ワイルド
</string>
<string name="Wrinkles">
- ã—ã‚ã‚り
+ ã—ã‚
</string>
<string name="LocationCtrlAddLandmarkTooltip">
マイ ランドマークã«è¿½åŠ 
@@ -3366,4 +3461,120 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
<string name="unread_chat_multiple">
[SOURCES] ã¯ä½•ã‹æ–°ã—ã„ã“ã¨ã‚’言ã„ã¾ã—ãŸã€‚
</string>
+ <string name="paid_you_ldollars">
+ [NAME] 㯠L$[AMOUNT] 支払ã„ã¾ã—ãŸ
+ </string>
+ <string name="you_paid_ldollars">
+ [NAME] ã« L$ [AMOUNT] を支払ã„ã¾ã—ãŸï¼š[REASON]
+ </string>
+ <string name="you_paid_ldollars_no_reason">
+ [NAME] ã« L$ [AMOUNT] を支払ã„ã¾ã—ãŸã€‚
+ </string>
+ <string name="you_paid_ldollars_no_name">
+ L$ [AMOUNT] を支払ã„ã¾ã—ãŸï¼š[REASON]
+ </string>
+ <string name="for a parcel of land">
+ 土地区画ã®ãŸã‚
+ </string>
+ <string name="for a land access pass">
+ 土地ã®å…¥å ´è¨±å¯ã‚’å¾—ã‚‹ãŸã‚
+ </string>
+ <string name="for deeding land">
+ 土地を譲渡ã™ã‚‹ãŸã‚
+ </string>
+ <string name="to create a group">
+ グループを作æˆã™ã‚‹ãŸã‚
+ </string>
+ <string name="to join a group">
+ グループã«å‚加ã™ã‚‹ãŸã‚
+ </string>
+ <string name="to upload">
+ アップロードã™ã‚‹ãŸã‚
+ </string>
+ <string name="giving">
+ L$[AMOUNT] を渡ã—ã¾ã™
+ </string>
+ <string name="uploading_costs">
+ アップロード料金㯠L$[AMOUNT] ã§ã™
+ </string>
+ <string name="this_costs">
+ 料金㯠L$[AMOUNT] ã§ã™
+ </string>
+ <string name="buying_selected_land">
+ é¸æŠžã—ãŸåœŸåœ°ã‚’ L$ [AMOUNT] ã§è³¼å…¥ã—ã¾ã™
+ </string>
+ <string name="this_object_costs">
+ ã“ã®ã‚ªãƒ–ジェクト㯠L$[AMOUNT] ã§ã™
+ </string>
+ <string name="group_role_everyone">
+ 全員
+ </string>
+ <string name="group_role_officers">
+ オフィサー
+ </string>
+ <string name="group_role_owners">
+ オーナー
+ </string>
+ <string name="uploading_abuse_report">
+ アップロード中...
+
+嫌ãŒã‚‰ã›ã®å ±å‘Š
+ </string>
+ <string name="New Shape">
+ æ–°ã—ã„シェイプ
+ </string>
+ <string name="New Skin">
+ æ–°ã—ã„スキン
+ </string>
+ <string name="New Hair">
+ æ–°ã—ã„髪
+ </string>
+ <string name="New Eyes">
+ æ–°ã—ã„ç›®
+ </string>
+ <string name="New Shirt">
+ æ–°ã—ã„シャツ
+ </string>
+ <string name="New Pants">
+ æ–°ã—ã„パンツ
+ </string>
+ <string name="New Shoes">
+ æ–°ã—ã„é´
+ </string>
+ <string name="New Socks">
+ æ–°ã—ã„é´ä¸‹
+ </string>
+ <string name="New Jacket">
+ æ–°ã—ã„ジャケット
+ </string>
+ <string name="New Gloves">
+ æ–°ã—ã„æ‰‹è¢‹
+ </string>
+ <string name="New Undershirt">
+ æ–°ã—ã„下ç€ï¼ˆä¸Šï¼‰
+ </string>
+ <string name="New Underpants">
+ æ–°ã—ã„下ç€ï¼ˆä¸‹ï¼‰
+ </string>
+ <string name="New Skirt">
+ æ–°ã—ã„スカート
+ </string>
+ <string name="New Alpha">
+ æ–°ã—ã„アルファ
+ </string>
+ <string name="New Tattoo">
+ æ–°ã—ã„タトゥ
+ </string>
+ <string name="Invalid Wearable">
+ 無効ãªç€ç”¨ç‰©
+ </string>
+ <string name="New Script">
+ æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト
+ </string>
+ <string name="New Folder">
+ æ–°è¦ãƒ•ォルダ
+ </string>
+ <string name="Contents">
+ コンテンツ
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/ja/teleport_strings.xml b/indra/newview/skins/default/xui/ja/teleport_strings.xml
index 72c183d03b..2f67d43707 100644
--- a/indra/newview/skins/default/xui/ja/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/ja/teleport_strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<teleport_messages name="">
+<teleport_messages>
<message_set name="errors">
<message name="invalid_tport">
テレãƒãƒ¼ãƒˆå‡¦ç†ä¸­ã«å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ ログインã—ç›´ã™å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
@@ -10,14 +10,14 @@
ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä½•度も出る場åˆã¯ã€[SUPPORT_SITE] ã‚’ã”確èªãã ã•ã„。
</message>
<message name="blocked_tport">
- 申ã—訳ã”ã–ã„ã¾ã›ã‚“。テレãƒãƒ¼ãƒˆã¯ç¾åœ¨ã€ãƒ–ロックã•れã¦ã„ã¾ã™ã€‚ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“ãŒã€ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã¯ç¾åœ¨ã€ãƒ–ロックã•れã¦ã„ã¾ã™ã€‚ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。
やり直ã—ã¦ã‚‚テレãƒãƒ¼ãƒˆã§ããªã„å ´åˆã¯ã€ã„ã£ãŸã‚“ログアウトã—ã€å†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦å•題を解決ã—ã¦ãã ã•ã„。
</message>
<message name="nolandmark_tport">
- 残念ãªãŒã‚‰ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ç›®çš„地を探ã›ã¾ã›ã‚“ã§ã—ãŸã€‚
+ 残念ãªãŒã‚‰ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ã®ç›®çš„地を探ã›ã¾ã›ã‚“ã§ã—ãŸã€‚
</message>
<message name="timeout_tport">
- 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆæŽ¥ç¶šã‚’完了ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“ãŒã€ã‚·ã‚¹ãƒ†ãƒ ã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã®æŽ¥ç¶šã‚’完了ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
ã‚‚ã†å°‘ã—後ã§ã‚„り直ã—ã¦ãã ã•ã„。
</message>
<message name="noaccess_tport">
@@ -27,18 +27,18 @@
添付物ã¯ã€ã¾ã åˆ°ç€ã—ã¦ã„ã¾ã›ã‚“。ã‚ã¨æ•°ç§’é–“ãŠå¾…ã¡ã„ãŸã ãã‹ã€ã„ã£ãŸã‚“ログアウトã—ã€å†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã‹ã‚‰ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’やり直ã—ã¦ã ã•ã„。
</message>
<message name="too_many_uploads_tport">
- ã“ã®åœ°åŸŸã®è³‡ç”£ã‚­ãƒ¥ãƒ¼ãŒç¾åœ¨è¾¼ã¿åˆã£ã¦ã„ã‚‹ãŸã‚ã€ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’時間通りã«å‡¦ç†ã™ã‚‹ã“ã¨ãŒé›£ã—ã„状æ³ã§ã™ã€‚
+ ã“ã®åœ°åŸŸã®è³‡ç”£ã‚­ãƒ¥ãƒ¼ãŒç¾åœ¨è¾¼ã¿åˆã£ã¦ã„ã‚‹ãŸã‚ã€è¦æ±‚ã•れãŸãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’処ç†ã™ã‚‹ã“ã¨ãŒé›£ã—ã„状æ³ã§ã™ã€‚
数分後ã«ã‚„り直ã™ã‹ã€ã¾ãŸã¯æ··é›‘ã—ã¦ã„ãªã„ä»–ã®åœ°åŸŸã‚’ãŠè©¦ã—ãã ã•ã„。
</message>
<message name="expired_tport">
- 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’時間ã©ãŠã‚Šã«å®Œäº†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“ãŒã€ã‚·ã‚¹ãƒ†ãƒ ã¯è¦æ±‚ã•れãŸãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’完了ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。
</message>
<message name="expired_region_handoff">
- 申ã—訳ã”ã–ã„ã¾ã›ã‚“。システムã¯åœ°åŸŸé–“ã®ç§»å‹•を時間ã©ãŠã‚Šã«å®Œäº†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“ãŒã€ã‚·ã‚¹ãƒ†ãƒ ã¯åœ°åŸŸé–“ã®ç§»å‹•を時間ã©ãŠã‚Šã«å®Œäº†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。
</message>
<message name="no_host">
- テレãƒãƒ¼ãƒˆç›®çš„地を見ã¤ã‘られã¾ã›ã‚“。目的地ãŒä¸€æ™‚çš„ã«åˆ©ç”¨ã§ããªã„状態ã‹ã€ã¾ãŸã¯ã™ã§ã«æ¶ˆæ»…ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。
+ テレãƒãƒ¼ãƒˆã®ç›®çš„地を見ã¤ã‘られã¾ã›ã‚“。目的地ãŒä¸€æ™‚çš„ã«åˆ©ç”¨ã§ããªã„状態ã‹ã€ã¾ãŸã¯ã™ã§ã«æ¶ˆæ»…ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚数分後ã«ã‚„り直ã—ã¦ãã ã•ã„。
</message>
<message name="no_inventory_host">
æŒã¡ç‰©ã‚·ã‚¹ãƒ†ãƒ ã¯ç¾åœ¨åˆ©ç”¨ã§ãã¾ã›ã‚“。
@@ -49,19 +49,22 @@
目的地ã«é€ä¿¡ã—ã¦ã„ã¾ã™ã€‚
</message>
<message name="redirecting">
- 別ã®ç›®çš„地ã«å†æ¡ˆå†…ã—ã¦ã„ã¾ã™ã€‚
+ 別ã®ç›®çš„地ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¦ã„ã¾ã™ã€‚
</message>
<message name="relaying">
目的地ã«ä¸­ç¶™ã—ã¦ã„ã¾ã™ã€‚
</message>
<message name="sending_home">
- ホームä½ç½®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã¦ã„ã¾ã™ã€‚
+ ホームä½ç½®ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã¦ã„ã¾ã™ã€‚
</message>
<message name="sending_landmark">
- ランドマークä½ç½®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã¦ã„ã¾ã™ã€‚
+ ランドマークä½ç½®ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã¦ã„ã¾ã™ã€‚
</message>
<message name="completing">
- テレãƒãƒ¼ãƒˆã‚’完了ã—ã¦ã„ã¾ã™ã€‚
+ テレãƒãƒ¼ãƒˆã‚’完了ã—ã¾ã™ã€‚
+ </message>
+ <message name="completed_from">
+ [T_SLURL] ã‹ã‚‰ã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆãŒå®Œäº†ã—ã¾ã—ãŸ
</message>
<message name="resolving">
目的地を解決ã—ã¦ã„ã¾ã™ã€‚
diff --git a/indra/newview/skins/default/xui/nl/floater_about_land.xml b/indra/newview/skins/default/xui/nl/floater_about_land.xml
index 3a77de70d2..7b8f1b42ab 100644
--- a/indra/newview/skins/default/xui/nl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/nl/floater_about_land.xml
@@ -26,14 +26,14 @@
<text name="OwnerText" left="102" width="242">
Leyla Linden
</text>
- <button label="Profiel..." label_selected="Profiel..." name="Profile..."/>
+ <button label="Profiel" name="Profile..."/>
<text name="Group:">
Groep:
</text>
<text left="102" name="GroupText" width="242"/>
- <button label="Instellen..." label_selected="Instellen..." name="Set..."/>
+ <button label="Instellen" name="Set..."/>
<check_box label="Overdracht aan groep toestaan" name="check deed" tool_tip="Een groepofficier kan dit land aan de groep overdragen, zodat het ondersteund wordt door de landallocatie van de groep."/>
- <button label="Overdragen..." label_selected="Overdragen..." name="Deed..." tool_tip="U mag alleen land overdragen indien u een officier bent in de geselecteerde groep."/>
+ <button label="Overdragen" name="Deed..." tool_tip="U mag alleen land overdragen indien u een officier bent in de geselecteerde groep."/>
<check_box label="Eigenaar maakt bijdrage met overdracht" name="check contrib" tool_tip="Wanneer het land is overgedragen aan de groep, draagt de voormalig eigenaar voldoende landtoewijzing bij om het te ondersteunen."/>
<text name="For Sale:">
Te koop:
@@ -44,7 +44,7 @@
<text name="For Sale: Price L$[PRICE].">
Prijs: L$[PRICE] (L$[PRICE_PER_SQM]/m²).
</text>
- <button label="Verkoop land..." label_selected="Verkoop land..." name="Sell Land..."/>
+ <button label="Verkoop land" name="Sell Land..."/>
<text name="For sale to">
Te koop voor: [BUYER]
</text>
@@ -74,11 +74,11 @@
0
</text>
<button left="130" width="125" label="Koop land..." label_selected="Koop land..." name="Buy Land..."/>
- <button label="Koop voor groep..." label_selected="Koop voor groep..." name="Buy For Group..."/>
+ <button label="Koop voor groep" name="Buy For Group..."/>
<button left="130" width="125" label="Koop toegangspas..." label_selected="Koop toegangspas..." name="Buy Pass..." tool_tip="Een toegangspas geeft u tijdelijk toegang tot dit land."/>
- <button label="Land Afstaan..." label_selected="Land Afstaan..." name="Abandon Land..."/>
- <button label="Land terugvorderen..." label_selected="Land terugvorderen..." name="Reclaim Land..."/>
- <button label="Lindenverkoop..." label_selected="Lindenverkoop..." name="Linden Sale..." tool_tip="Land moet in bezit zijn, de inhoud moet ingesteld zijn en niet al ter veiling zijn aangeboden."/>
+ <button label="Land Afstaan" name="Abandon Land..."/>
+ <button label="Land terugvorderen" name="Reclaim Land..."/>
+ <button label="Lindenverkoop" name="Linden Sale..." tool_tip="Land moet in bezit zijn, de inhoud moet ingesteld zijn en niet al ter veiling zijn aangeboden."/>
<panel.string name="new users only">
Alleen nieuwe gebruikers
</panel.string>
@@ -224,7 +224,7 @@ of opgedeeld.
[COUNT]
</text>
<button label="Toon" label_selected="Toon" name="ShowOwner" right="-135" width="60"/>
- <button label="Retourneren..." label_selected="Retourneren..." name="ReturnOwner..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/>
+ <button label="Retourneren" name="ReturnOwner..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/>
<text name="Set to group:" left="14" width="180">
Groep toewijzen:
</text>
@@ -232,7 +232,7 @@ of opgedeeld.
[COUNT]
</text>
<button label="Toon" label_selected="Toon" name="ShowGroup" right="-135" width="60"/>
- <button label="Retourneren..." label_selected="Retourneren..." name="ReturnGroup..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/>
+ <button label="Retourneren" name="ReturnGroup..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/>
<text name="Owned by others:" left="14" width="128">
Eigendom van anderen:
</text>
@@ -240,7 +240,7 @@ of opgedeeld.
[COUNT]
</text>
<button label="Toon" label_selected="Toon" name="ShowOther" right="-135" width="60"/>
- <button label="Retourneren..." label_selected="Retourneren..." name="ReturnOther..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/>
+ <button label="Retourneren" name="ReturnOther..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/>
<text name="Selected / sat upon:" left="14" width="193">
Geselecteerd/Er op gezeten
</text>
@@ -256,7 +256,7 @@ of opgedeeld.
Objecteigenaren:
</text>
<button label="Ververs lijst" label_selected="Ververs lijst" name="Refresh List" bottom="-213"/>
- <button label="Retourneer objecten..." label_selected="Retourneer objecten..." name="Return objects..." width="164" bottom="-213"/>
+ <button label="Retourneer objecten" name="Return objects..." width="164" bottom="-213"/>
<name_list name="owner list" height="104">
<column label="Type" name="type"/>
<column label="Naam" name="name"/>
@@ -407,7 +407,7 @@ of opgedeeld.
<text name="at URL:">
Media URL:
</text>
- <button label="Instellen..." label_selected="Instellen..." name="set_media_url" width="66"/>
+ <button label="Instellen" name="set_media_url"/>
<text name="Description:">
Omschrijving:
</text>
diff --git a/indra/newview/skins/default/xui/nl/language_settings.xml b/indra/newview/skins/default/xui/nl/language_settings.xml
index 71418d446a..dc4663705f 100644
--- a/indra/newview/skins/default/xui/nl/language_settings.xml
+++ b/indra/newview/skins/default/xui/nl/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">dutch</string>
+ <string name="DarwinLocale">nl_NL.UTF-8</string>
+ <string name="LinuxLocale">nl_NL.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/nl/menu_mini_map.xml b/indra/newview/skins/default/xui/nl/menu_mini_map.xml
index 0a6dfa3465..f7c09660ea 100644
--- a/indra/newview/skins/default/xui/nl/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/nl/menu_mini_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
+<menu name="Popup">
<menu_item_call label="Zoom dichtbij" name="Zoom Close"/>
<menu_item_call label="Zoom gemiddeld" name="Zoom Medium"/>
<menu_item_call label="Zoom veraf" name="Zoom Far"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_about.xml b/indra/newview/skins/default/xui/pl/floater_about.xml
index 29a5aca90d..b49247c4bf 100644
--- a/indra/newview/skins/default/xui/pl/floater_about.xml
+++ b/indra/newview/skins/default/xui/pl/floater_about.xml
@@ -8,7 +8,7 @@
Buduj z [COMPILER] wersjÄ… [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Znajdujesz siÄ™ na pozycji [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] w [REGION] zlokalizowanym w [HOSTNAME] ([HOSTIP])
+ Położenie [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] w [REGION] zlokalizowanym w &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
[SERVER_VERSION]
[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]]
</floater.string>
@@ -16,18 +16,18 @@
Procesor: [CPU]
Pamięć: [MEMORY_MB] MB
Wersja OS: [OS_VERSION]
-Graphics Card Vendor: [GRAPHICS_CARD_VENDOR]
-Karta Graficzna: [GRAPHICS_CARD]
+Sprzedawca karty graficznej: [GRAPHICS_CARD_VENDOR]
+Karta graficzna: [GRAPHICS_CARD]
</floater.string>
<floater.string name="AboutDriver">
- Windows Sterownik Karty Graficznej: [GRAPHICS_DRIVER_VERSION]
+ Windows Sterownik karty graficznej: [GRAPHICS_DRIVER_VERSION]
</floater.string>
<floater.string name="AboutLibs">
Wersja OpenGL: [OPENGL_VERSION]
Wersja libcurl: [LIBCURL_VERSION]
-Wersja Dekodera J2C: [J2C_VERSION]
-Wersja Sterownika Audio: [AUDIO_DRIVER_VERSION]
+Wersja dekodera J2C: [J2C_VERSION]
+Wersja sterownika audio: [AUDIO_DRIVER_VERSION]
Wersja Qt Webkit: [QT_WEBKIT_VERSION]
Wersja Vivox: [VIVOX_VERSION]
</floater.string>
@@ -35,21 +35,19 @@ Wersja Vivox: [VIVOX_VERSION]
(żadne)
</floater.string>
<floater.string name="AboutTraffic">
- Stracone Pakiety: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+ Stracone pakiety: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
</floater.string>
<tab_container name="about_tab">
<panel label="Info" name="support_panel">
- <button label="Kopiuj do Schowka" name="copy_btn"/>
+ <button label="Kopiuj do schowka" name="copy_btn"/>
</panel>
<panel label="Podziękowania" name="credits_panel">
<text_editor name="credits_editor">
- Second Life zostało stworzone dla Was przez: Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl i wielu innych.
+ Second Life zostało stworzone dla Was przez: Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others.
- Podziękowania dla następujących rezydentów za pomoc w pracy nad obecną wersją Second Life: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-
- I get by with a little help from my friends. --Richard Starkey
+Podziękowania dla następujących rezydentów za pomoc w pracy nad obecną wersją Second Life: (in progress)
+It is a rare mind indeed that can render the hitherto non-existent blindingly obvious. The cry &apos;I could have thought of that&apos; is a very popular and misleading one, for the fact is that they didn&apos;t, and a very significant and revealing fact it is too.
+ -- Douglas Adams
</text_editor>
</panel>
<panel label="Licencje" name="licenses_panel">
diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml
index d456ea26b4..e4908deb07 100644
--- a/indra/newview/skins/default/xui/pl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml
@@ -1,7 +1,68 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterland" title="O POSIADÅOÅšCI">
+ <floater.string name="maturity_icon_general">
+ &quot;Parcel_PG_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_moderate">
+ &quot;Parcel_M_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_adult">
+ &quot;Parcel_R_Dark&quot;
+ </floater.string>
+ <floater.string name="Minutes">
+ [MINUTES] minuty
+ </floater.string>
+ <floater.string name="Minute">
+ minuta
+ </floater.string>
+ <floater.string name="Seconds">
+ [SECONDS] sekundy
+ </floater.string>
+ <floater.string name="Remaining">
+ pozostały
+ </floater.string>
<tab_container name="landtab">
- <panel label="Ogólne" name="land_general_panel">
+ <panel label="OGÓLNE" name="land_general_panel">
+ <panel.string name="new users only">
+ Tylko nowi Rezydenci
+ </panel.string>
+ <panel.string name="anyone">
+ Każdy
+ </panel.string>
+ <panel.string name="area_text">
+ Obszar:
+ </panel.string>
+ <panel.string name="area_size_text">
+ [AREA] m²
+ </panel.string>
+ <panel.string name="auction_id_text">
+ Numer aukcji: [ID]
+ </panel.string>
+ <panel.string name="need_tier_to_modify">
+ Musisz zaakceptować zakup by móc modyfikować Posiadłość.
+ </panel.string>
+ <panel.string name="group_owned_text">
+ (Własność Grupy)
+ </panel.string>
+ <panel.string name="profile_text">
+ Profil...
+ </panel.string>
+ <panel.string name="info_text">
+ Info...
+ </panel.string>
+ <panel.string name="public_text">
+ (publiczne)
+ </panel.string>
+ <panel.string name="none_text">
+ (brak)
+ </panel.string>
+ <panel.string name="sale_pending_text">
+ (Sprzedaż w toku realizacji)
+ </panel.string>
+ <panel.string name="no_selection_text">
+ Posiadłość nie wybrana.
+Idź do Świat &gt; O Posiadłości albo wybierz inną posiadłość żeby pokazać jej dane.
+ </panel.string>
<text name="Name:">
Nazwa:
</text>
@@ -26,14 +87,16 @@
<text name="OwnerText">
Leyla Linden
</text>
- <button label="Profile..." label_selected="Profile..." name="Profile..."/>
<text name="Group:">
Grupa:
</text>
- <button label="Ustaw..." label_selected="Ustaw..." name="Set..."/>
- <check_box label="Udostępnij przypisywanie na grupę" name="check deed" tool_tip="Oficer grupy ma prawo przepisać prawo własności posiadłości na grupę. Posiadłość wspierana jest przez przydziały pochodzące od członków grupy."/>
- <button label="Przypisz..." label_selected="Przypisz..." name="Deed..." tool_tip="Prawo przypisania posiadłości na grupę może dokonać jedynie oficer grupy."/>
- <check_box label="Właścicel dokonuje wpłat związanych z posiadłością" name="check contrib" tool_tip="Kiedy posiadłość zostaje przypisana na grupę, poprzedni właściciel realizuje wpłaty z nią związane w celu jej utrzymania."/>
+ <text name="GroupText">
+ Leyla Linden
+ </text>
+ <button label="Ustaw" name="Set..."/>
+ <check_box label="Udostępnij przypisywanie na Grupę" name="check deed" tool_tip="Oficer Grupy ma prawo przepisać prawo własności Posiadłości na Grupę. Posiadłość wspierana jest przez przydziały pochodzące od członków Grupy."/>
+ <button label="Przypisz" name="Deed..." tool_tip="Prawo przypisania Posiadłości na Grupę może dokonać jedynie oficer Grupy."/>
+ <check_box label="Właścicel dokonuje wpłat związanych z Posiadłością" name="check contrib" tool_tip="Kiedy Posiadłość zostaje przypisana na Grupę, poprzedni Właściciel realizuje wpłaty z nią związane w celu jej utrzymania."/>
<text name="For Sale:">
Na Sprzedaż:
</text>
@@ -41,9 +104,9 @@
Nie
</text>
<text name="For Sale: Price L$[PRICE].">
- Cena: L$[PRICE] (L$[PRICE_PER_SQM]/m²).
+ Cena: [PRICE]L$ ([PRICE_PER_SQM]L$/m²).
</text>
- <button label="Sprzedaj Posiadłość..." label_selected="Sprzedaj Posiadłość..." name="Sell Land..."/>
+ <button label="Sprzedaj posiadłość" name="Sell Land..."/>
<text name="For sale to">
Na sprzedaż dla: [BUYER]
</text>
@@ -53,7 +116,7 @@
<text name="Selling with no objects in parcel.">
Obiekty nie są zawarte w sprzedaży.
</text>
- <button label="Anuluj Sprzedaż" label_selected="Anuluj Sprzedaż" name="Cancel Land Sale"/>
+ <button label="Anuluj sprzedaż" label_selected="Anuluj sprzedaż" name="Cancel Land Sale"/>
<text name="Claimed:">
Data:
</text>
@@ -73,138 +136,93 @@
0
</text>
<button label="Kup Posiadłość..." label_selected="Kup Posiadłość..." left="130" name="Buy Land..." width="125"/>
- <button label="Kup dla Grupy..." label_selected="Kup dla Grupy..." name="Buy For Group..."/>
+ <button label="Skrypt" name="Scripts..."/>
+ <button label="Kup dla Grupy" name="Buy For Group..."/>
<button label="Kup Przepustkę..." label_selected="Kup Przeputkę..." left="130" name="Buy Pass..." tool_tip="Przepustka udostępnia tymczasowy wstęp na posiadłość." width="125"/>
- <button label="Porzuć z Posiadłości..." label_selected="Porzuć z Posiadłości..." name="Abandon Land..."/>
- <button label="Odzyskaj Posiadłość..." label_selected="Odzyskaj Posiadłość..." name="Reclaim Land..."/>
- <button label="Sprzedaż przez Lindenów..." label_selected="Sprzedaż przez Lindenów..." name="Linden Sale..." tool_tip="Posiadłość musi mieć właściciela, zawartość oraz nie może być wystawiona na aukcę."/>
- <panel.string name="new users only">
- Tylko nowi użytkownicy
- </panel.string>
- <panel.string name="anyone">
- Każdy
- </panel.string>
- <panel.string name="area_text">
- Obszar:
- </panel.string>
- <panel.string name="area_size_text">
- [AREA] m²
- </panel.string>
- <panel.string name="auction_id_text">
- Numer aukcji: [ID]
- </panel.string>
- <panel.string name="need_tier_to_modify">
- Musisz zaakceptować zakup by móc modyfikować posiadłość.
- </panel.string>
- <panel.string name="group_owned_text">
- (Własność Grupy)
- </panel.string>
- <panel.string name="profile_text">
- Profil...
- </panel.string>
- <panel.string name="info_text">
- Info...
- </panel.string>
- <panel.string name="public_text">
- (publiczne)
+ <button label="Porzuć Posiadłość" name="Abandon Land..."/>
+ <button label="Odzyskaj Posiadłość" name="Reclaim Land..."/>
+ <button label="Sprzedaż przez Lindenów" name="Linden Sale..." tool_tip="Posiadłość musi mieć Właściciela, zawartość oraz nie może być wystawiona na Aukcję."/>
+ </panel>
+ <panel label="UMOWA" name="land_covenant_panel">
+ <panel.string name="can_resell">
+ Posiadłość zakupiona w tym Regionie może być odsprzedana.
</panel.string>
- <panel.string name="none_text">
- (brak)
+ <panel.string name="can_not_resell">
+ Posiadłość zakupiona w tym Regionie nie może być odsprzedana.
</panel.string>
- <panel.string name="sale_pending_text">
- (Sprzedaż w Toku Realizacji)
+ <panel.string name="can_change">
+ Posiadłość zakupiona w tym Regionie może być łączona/dzielona.
</panel.string>
- <panel.string name="no_selection_text">
- Posiadłość nie wybrana.
-Idź do Świat &gt; O Posiadłości albo wybierz inną posiadłość żeby pokazać jej dane.
+ <panel.string name="can_not_change">
+ Posiadłość zakupiona w tym Regionie nie może być
+łączona/dzielona.
</panel.string>
- </panel>
- <panel label="Umowa" name="land_covenant_panel">
<text name="estate_section_lbl">
MajÄ…tek:
</text>
- <text name="estate_name_lbl">
- Nazwa:
- </text>
- <text name="estate_name_text" left="115">
+ <text left="115" name="estate_name_text">
Główne
</text>
<text name="estate_owner_lbl">
Właściciel:
</text>
- <text name="estate_owner_text" left="115">
+ <text left="115" name="estate_owner_text">
(brak)
</text>
- <text_editor name="covenant_editor" left="115">
+ <text_editor left="115" name="covenant_editor">
Ta posiadłość nie wymaga żadej umowy.
</text_editor>
- <text name="covenant_timestamp_text" left="115">
+ <text left="115" name="covenant_timestamp_text">
Ostatnia Modyfikacja Wed Dec 31 16:00:00 1969
</text>
<text name="region_section_lbl">
Region:
</text>
- <text name="region_name_lbl">
- Nazwa:
- </text>
- <text name="region_name_text" left="115">
+ <text left="115" name="region_name_text">
leyla
</text>
<text name="region_landtype_lbl">
Typ:
</text>
- <text name="region_landtype_text" left="115">
+ <text left="115" name="region_landtype_text">
Region Główny / Ziemia
</text>
<text name="region_maturity_lbl">
Rodzaj:
</text>
- <text name="region_maturity_text" left="115">
+ <text left="115" name="region_maturity_text">
&apos;Adult&apos;
</text>
<text name="resellable_lbl">
Odsprzedaj:
</text>
- <text name="resellable_clause" width="338" left="115">
- Posiadłość zakupiona w tym regionie nie może być odsprzedana.
+ <text left="115" name="resellable_clause" width="338">
+ Posiadłość zakupiona w tym Regionie nie może być odsprzedana.
</text>
<text name="changeable_lbl">
Podziel:
</text>
- <text name="changeable_clause" width="338" left="115">
- Posiadłość zakupiona w tym regionie nie może być
+ <text left="115" name="changeable_clause" width="338">
+ Posiadłość zakupiona w tym Regionie nie może być
łączona/dzielona.
</text>
- <panel.string name="can_resell">
- Posiadłość zakupiona w tym regionie może być odsprzedana.
- </panel.string>
- <panel.string name="can_not_resell">
- Posiadłość zakupiona w tym regionie nie może być odsprzedana.
- </panel.string>
- <panel.string name="can_change">
- Posiadłość zakupiona w tym regionie może być łączona/dzielona.
+ </panel>
+ <panel label="OBIEKTY" name="land_objects_panel">
+ <panel.string name="objects_available_text">
+ [COUNT] z [MAX] ([AVAILABLE] jest dostępne)
</panel.string>
- <panel.string name="can_not_change">
- Posiadłość zakupiona w tym regionie nie może być
-łączona/dzielona.
+ <panel.string name="objects_deleted_text">
+ [COUNT] z [MAX] ([DELETED] zostanie usunięte)
</panel.string>
- </panel>
- <panel label="Obiekty" name="land_objects_panel">
<text name="parcel_object_bonus">
- Ilość Ekstra Obiektów: [BONUS]
+ Ilość ekstra obiektów: [BONUS]
</text>
<text name="Simulator primitive usage:">
- Ilość używanych primóww:
+ Ilość używanych primów:
</text>
<text name="objects_available" width="230">
[COUNT] z [MAX] ([AVAILABLE] jest dostępne)
</text>
- <panel.string name="objects_available_text">
- [COUNT] z [MAX] ([AVAILABLE] jest dostępne)
- </panel.string>
- <panel.string name="objects_deleted_text">
- [COUNT] z [MAX] ([DELETED] zostanie usunięte)
- </panel.string>
<text name="Primitives parcel supports:">
Maksymalna ilość primów:
</text>
@@ -212,19 +230,19 @@ Idź do Świat &gt; O Posiadłości albo wybierz inną posiadłość żeby pokaz
[COUNT]
</text>
<text name="Primitives on parcel:">
- Primy na posiadłości:
+ Primy na Posiadłości:
</text>
<text name="total_objects_text">
[COUNT]
</text>
<text name="Owned by parcel owner:">
- Właściciela posiadłości:
+ Właściciela Posiadłości:
</text>
<text name="owner_objects_text">
[COUNT]
</text>
<button label="Pokaż" label_selected="Pokaż" name="ShowOwner"/>
- <button label="Zwróć..." label_selected="Zwróć..." name="ReturnOwner..." tool_tip="Zwróć obiekty do ich właścicieli."/>
+ <button label="Zwróć" name="ReturnOwner..." tool_tip="Zwróć obiekty do ich Właścicieli."/>
<text name="Set to group:">
Grupy:
</text>
@@ -232,7 +250,7 @@ Idź do Świat &gt; O Posiadłości albo wybierz inną posiadłość żeby pokaz
[COUNT]
</text>
<button label="Pokaż" label_selected="Pokaż" name="ShowGroup"/>
- <button label="Zwróć..." label_selected="Zwróć..." name="ReturnGroup..." tool_tip="Zwróć obiekty do ich właścicieli.."/>
+ <button label="Zwróć" name="ReturnGroup..." tool_tip="Zwróć obiekty do ich Właścicieli.."/>
<text name="Owned by others:">
Innych Rezydentów:
</text>
@@ -240,7 +258,7 @@ Idź do Świat &gt; O Posiadłości albo wybierz inną posiadłość żeby pokaz
[COUNT]
</text>
<button label="Pokaż" label_selected="Pokaż" name="ShowOther"/>
- <button label="Zwróć..." label_selected="Zwróć..." name="ReturnOther..." tool_tip="Zwróć obiekty do ich właścicieli."/>
+ <button label="Zwróć" name="ReturnOther..." tool_tip="Zwróć obiekty do ich Właścicieli."/>
<text name="Selected / sat upon:">
Wybranych:
</text>
@@ -251,25 +269,55 @@ Idź do Świat &gt; O Posiadłości albo wybierz inną posiadłość żeby pokaz
Zwracaj obiekty innych Rezydentów (minut, 0 = wyłącz):
</text>
<text name="Object Owners:" width="108">
- Właściciel Obiektów:
+ Właściciel obiektów:
</text>
- <button label="Odśwież Listę" label_selected="Odśwież Listę" left="112" name="Refresh List"/>
+ <button label="Odśwież listę" label_selected="Odśwież listę" left="112" name="Refresh List" tool_tip="Refresh Object List"/>
<button label="Zwróć obiekty..." label_selected="Zwróć obiekty..." left="224" name="Return objects..."/>
<name_list name="owner list">
- <column label="Typ" name="type"/>
- <column name="online_status"/>
- <column label="Nazwa" name="name"/>
- <column label="Liczba" name="count"/>
- <column label="Najbardziej aktualne" name="mostrecent"/>
+ <name_list.columns label="Typ" name="type"/>
+ <name_list.columns name="online_status"/>
+ <name_list.columns label="Nazwa" name="name"/>
+ <name_list.columns label="Liczba" name="count"/>
+ <name_list.columns label="Najbardziej aktualne" name="mostrecent"/>
</name_list>
</panel>
- <panel label="Opcje" name="land_options_panel">
+ <panel label="OPCJE" name="land_options_panel">
+ <panel.string name="search_enabled_tooltip">
+ Udostępnij wyświetlanie tej Posiadłości w wyszukiwarce
+ </panel.string>
+ <panel.string name="search_disabled_small_tooltip">
+ Wybrana opcja jest wyłączona, ponieważ wielkość Posiadłości wynosi 128 m² bądź mniej.
+Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki.
+ </panel.string>
+ <panel.string name="search_disabled_permissions_tooltip">
+ Wybrana opcja jest wyłączona ponieważ nie posiadasz prawa do modyfikacji Posiadłości.
+ </panel.string>
+ <panel.string name="mature_check_mature">
+ Treść &apos;Mature&apos;
+ </panel.string>
+ <panel.string name="mature_check_adult">
+ Treść &apos;Adult&apos;
+ </panel.string>
+ <panel.string name="mature_check_mature_tooltip">
+ Twoja Posiadłość bądź treść jaką zawiera klasyfikowana jest jako &apos;Mature&apos;.
+ </panel.string>
+ <panel.string name="mature_check_adult_tooltip">
+ Informacje o Twojej Posiadłości i treści jaką zawiera klasyfikowane są jako &apos;Adult&apos;.
+ </panel.string>
+ <panel.string name="landing_point_none">
+ (brak)
+ </panel.string>
+ <panel.string name="push_restrict_text">
+ Popychanie niedozwolone
+ </panel.string>
+ <panel.string name="push_restrict_region_text">
+ Popychanie niedozwolone (Ustawienie Regionu)
+ </panel.string>
<text name="allow_label">
Udostępnij innym Rezydentom:
</text>
- <check_box label="Edytowanie Terenu" name="edit land check" tool_tip="Wybrana - każdy może kształtować Twój teren. Najlepiej jest zostawić tą opcję nie wybraną, Ty zawsze możesz kształtowć Twój teren."/>
- <check_box label="Zapisywania Miejsca" name="check landmark"/>
- <check_box label="Latanie" name="check fly" tool_tip="Wybrana - Rezydenci mogą latać na Twojej posiadłości. Nie wybrana - mogą tylko wlatywać do lub latać ponad Twoją posiadłością."/>
+ <check_box label="Edytowanie Terenu" name="edit land check" tool_tip="Wybrana - każdy może kształtować Twój teren. Najlepiej jest zostawić tą opcję nie wybraną, Ty zawsze możesz kształtować Twój teren."/>
+ <check_box label="Latanie" name="check fly" tool_tip="Wybrana - Rezydenci mogą latać na Twojej Posiadłości. Nie jest wybrana - mogą tylko wlatywać do lub latać ponad Twoją Posiadłością."/>
<text name="allow_label2">
Budowanie:
</text>
@@ -288,87 +336,39 @@ Idź do Świat &gt; O Posiadłości albo wybierz inną posiadłość żeby pokaz
<text name="land_options_label">
Opcje Posiadłości:
</text>
- <check_box label="Bezpieczna (brak zniszczeń)" name="check safe" tool_tip="Wybrana - posiadłość jest bezpieczna - zniszczenia w walce są zablokowane. Nie wybrana - zniszczenia w walce są włączone."/>
- <check_box label="Popychanie niedozwolone" name="PushRestrictCheck" tool_tip="Nie pozwalaj skryptom na popychanie. Wybranie tej opcji może być przydatne do ograniczenia zakłóceń spokoju w Twojej posiadłości."/>
- <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy posiadłości w wyszukiwarce"/>
- <panel.string name="search_enabled_tooltip">
- Udostępnij wyświetlanie tej posiadłości w wyszukiwarce
- </panel.string>
- <panel.string name="search_disabled_small_tooltip">
- Wybrana opcja jest wyłączona ze względu iż wielkość posiadłości wynosi 128 m² bądź mniej.
-Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki.
- </panel.string>
- <panel.string name="search_disabled_permissions_tooltip">
- Wybrana opcja jest wyłączona ponieważ nie posiadasz prawa do modyfikacji posiadłości.
- </panel.string>
+ <check_box label="Bezpieczna (brak zniszczeń)" name="check safe" tool_tip="Wybrana - Posiadłość jest bezpieczna - zniszczenia w walce są zablokowane. Nie jest wybrana - zniszczenia w walce są włączone."/>
+ <check_box label="Popychanie niedozwolone" name="PushRestrictCheck" tool_tip="Nie pozwalaj skryptom na popychanie. Wybranie tej opcji może być przydatne do ograniczenia zakłóceń spokoju w Twojej Posiadłości."/>
+ <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy Posiadłości w wyszukiwarce"/>
<combo_box name="land category with adult">
- <combo_box.item name="item0" label="Każda Kategoria"
- />
- <combo_box.item name="item1" label="Linden Lokacja"
- />
- <combo_box.item name="item2" label="&apos;Adult&apos;"
- />
- <combo_box.item name="item3" label="Sztuka i Kultura"
- />
- <combo_box.item name="item4" label="Biznes"
- />
- <combo_box.item name="item5" label="Edukacyjna"
- />
- <combo_box.item name="item6" label="Gra"
- />
- <combo_box.item name="item7" label="Poznawanie ludzi"
- />
- <combo_box.item name="item8" label="Przyjazne dla nowych"
- />
- <combo_box.item name="item9" label="Park i Natura"
- />
- <combo_box.item name="item10" label="Mieszkalna"
- />
- <combo_box.item name="item11" label="Zakupy"
- />
- <combo_box.item name="item12" label="Inna"
- />
+ <combo_box.item label="Każda kategoria" name="item0"/>
+ <combo_box.item label="Linden Lokalizacja" name="item1"/>
+ <combo_box.item label="&apos;Adult&apos;" name="item2"/>
+ <combo_box.item label="Sztuka i kultura" name="item3"/>
+ <combo_box.item label="Biznes" name="item4"/>
+ <combo_box.item label="Edukacyjna" name="item5"/>
+ <combo_box.item label="Gra" name="item6"/>
+ <combo_box.item label="Poznawanie ludzi" name="item7"/>
+ <combo_box.item label="Przyjazne dla nowych" name="item8"/>
+ <combo_box.item label="Park i natura" name="item9"/>
+ <combo_box.item label="Mieszkalna" name="item10"/>
+ <combo_box.item label="Zakupy" name="item11"/>
+ <combo_box.item label="Inna" name="item12"/>
</combo_box>
<combo_box name="land category">
- <combo_box.item name="item0" label="Każda Kategoria"
- />
- <combo_box.item name="item1" label="Linden Lokacja"
- />
- <combo_box.item name="item3" label="Sztuka i Kultura"
- />
- <combo_box.item name="item4" label="Biznes"
- />
- <combo_box.item name="item5" label="Edukacyjna"
- />
- <combo_box.item name="item6" label="Gra"
- />
- <combo_box.item name="item7" label="Poznawanie ludzi"
- />
- <combo_box.item name="item8" label="Przyjazna dla nowych"
- />
- <combo_box.item name="item9" label="Parki i Natura"
- />
- <combo_box.item name="item10" label="Mieszkalna"
- />
- <combo_box.item name="item11" label="Zakupy"
- />
- <combo_box.item name="item12" label="Inna"
- />
+ <combo_box.item label="Każda kategoria" name="item0"/>
+ <combo_box.item label="Linden Lokalizacja" name="item1"/>
+ <combo_box.item label="Sztuka i kultura" name="item3"/>
+ <combo_box.item label="Biznes" name="item4"/>
+ <combo_box.item label="Edukacyjna" name="item5"/>
+ <combo_box.item label="Gra" name="item6"/>
+ <combo_box.item label="Poznawanie ludzi" name="item7"/>
+ <combo_box.item label="Przyjazna dla nowych" name="item8"/>
+ <combo_box.item label="Parki i natura" name="item9"/>
+ <combo_box.item label="Mieszkalna" name="item10"/>
+ <combo_box.item label="Zakupy" name="item11"/>
+ <combo_box.item label="Inna" name="item12"/>
</combo_box>
- <button label="?" label_selected="?" name="?"/>
<check_box label="Treść &apos;Mature&apos;" name="MatureCheck" tool_tip=""/>
- <panel.string name="mature_check_mature">
- Treść &apos;Mature&apos;
- </panel.string>
- <panel.string name="mature_check_adult">
- Treść &apos;Adult&apos;
- </panel.string>
- <panel.string name="mature_check_mature_tooltip">
- Twoja posiadłość bądź treść jaką zawiera klasyfikowana jest jako &apos;Mature&apos;.
- </panel.string>
- <panel.string name="mature_check_adult_tooltip">
- Informacje o Twojej posiadłości i treści jaką zawiera klasyfikowane są jako &apos;Adult&apos;.
- </panel.string>
<text name="Snapshot:">
Zdjęcie:
</text>
@@ -376,38 +376,27 @@ Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki.
<text name="landing_point">
Punkt LÄ…dowania: [LANDING]
</text>
- <panel.string name="landing_point_none">
- (brak)
- </panel.string>
<button label="Ustaw" label_selected="Ustaw" name="Set" tool_tip="Ustal miejsce lądowania dla przybywających gości. Używa położenia Twojego awatara na tej posiadłości."/>
<button label="Nowy" label_selected="Nowy" name="Clear" tool_tip="Clear the landing point."/>
<text name="Teleport Routing: ">
- Trasa Teleportacji:
- </text>
- <combo_box name="landing type" tool_tip="Trasa Teleportacj-ustaw w jaki sposób będzie sę odbywać proces telportacji w posiadłości.">
- <combo_box.item name="Blocked" label="Zablokowana"
- />
- <combo_box.item name="LandingPoint" label="Punkt LÄ…dowania"
- />
- <combo_box.item name="Anywhere" label="Gdziekolwiek"
- />
+ Trasa teleportacji:
+ </text>
+ <combo_box name="landing type" tool_tip="Trasa teleportacj-ustaw w jaki sposób będzie sę odbywać proces telportacji w Posiadłości.">
+ <combo_box.item label="Zablokowana" name="Blocked"/>
+ <combo_box.item label="Punkt LÄ…dowania" name="LandingPoint"/>
+ <combo_box.item label="Gdziekolwiek" name="Anywhere"/>
</combo_box>
- <panel.string name="push_restrict_text">
- Popychanie niedozwolone
- </panel.string>
- <panel.string name="push_restrict_region_text">
- Popychanie niedozwolone (Ustawienie Regionu)
- </panel.string>
</panel>
- <panel label="Media" name="land_media_panel">
+ <panel label="MEDIA" name="land_media_panel">
<text name="with media:">
- Typ Mediów:
+ Typ mediów:
</text>
<combo_box name="media type" tool_tip=""/>
<text name="at URL:">
- URL Mediów:
+ URL mediów:
</text>
- <button label="Ustaw..." label_selected="Ustaw..." name="set_media_url"/>
+ <button label="Ustaw" name="set_media_url"/>
+ <check_box label="Ukryj URL mediów" name="hide_media_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów wszystkim nieautoryzowanym Użytkownikom. Nie dotyczy to jednak typów HTML."/>
<text name="Description:">
Opis:
</text>
@@ -418,18 +407,9 @@ TeksturÄ™:
</text>
<texture_picker label="" name="media texture" tool_tip="Kliknij by wybrać zdjęcie"/>
<text name="replace_texture_help">
- (Obiekty używające tej tekstury będą wyświetlały
-film lub stronę internetową po naciśnięciu
-przycisku odtwarzania.)
- </text>
- <text name="Options:">
- Opcje
-Mediów:
+ Obiekty używające tej tekstury będą wyświetlały film lub stronę internetową po naciśnięciu przycisku odtwarzania. Wybierz miniaturę, jeśli chcesz zmienić teksturę.
</text>
<check_box label="Automatyczna Skala" name="media_auto_scale" tool_tip="Wybranie tej opcji dobierze odpowiedni rozmiar zawartości mediów dla tej posiadłości automatycznie. Może to mieć znaczący wpływ na jakość odtwarzanego materialu - może zwolnić i zmniejszyć jakość materiału."/>
- <check_box label="Powtórka Odtwarzania" name="media_loop" tool_tip="Odtwarzaj media z powtórką. Po wyświetleniu materialu, rozpocznie się odtwarzanie od początku."/>
- <check_box label="Ukryj URL Mediów" name="hide_media_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów wszystkim nieautoryzowanym użytkownikom. Nie dotyczy to jednak typów HTML."/>
- <check_box label="Ukryj URL Muzyki" name="hide_music_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów muzycznych w posiadłości wszystkim nieautoryzowanym użytkownikom"/>
<text name="media_size" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych.">
Rozmiar:
</text>
@@ -438,56 +418,48 @@ Mediów:
<text name="pixels">
pixeli
</text>
- <text name="MusicURL:">
- URL Muzyki:
- </text>
- <text name="Sound:">
- Dźwięk:
- </text>
- <check_box label="Restrykcja obiektów oraz gestur dozwolonych w tej posiadłości" name="check sound local"/>
- <button label="?" label_selected="?" name="?" left="432"/>
- <text name="Voice settings:">
- Głos:
+ <text name="Options:">
+ Opcje
+Mediów:
</text>
- <check_box label="Rozmowy Dozwolone" name="parcel_enable_voice_channel"/>
- <check_box label="Rozmowy Dozwolone (ustawione przez majÄ…tek)" name="parcel_enable_voice_channel_is_estate_disabled"/>
- <check_box label="Ogranicz komunikację głosową w tej posiadłości." name="parcel_enable_voice_channel_parcel"/>
+ <check_box label="Powtórka Odtwarzania" name="media_loop" tool_tip="Odtwarzaj media z powtórką. Po wyświetleniu materialu, rozpocznie się odtwarzanie od początku."/>
</panel>
- <panel label="Dostęp" name="land_access_panel">
+ <panel label="DŹWIĘK" name="land_audio_panel">
+ <check_box label="Ukryj URL muzyki" name="hide_music_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów muzycznych w posiadłości wszystkim nieautoryzowanym Użytkownikom"/>
+ <check_box label="Rozmowy dozwolone" name="parcel_enable_voice_channel"/>
+ <check_box label="Rozmowy dozwolone (ustawione przez MajÄ…tek)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="Ogranicz komunikację głosową w tej posiadłości." name="parcel_enable_voice_channel_local"/>
+ </panel>
+ <panel label="DOSTĘP" name="land_access_panel">
+ <panel.string name="access_estate_defined">
+ (Zdefiniowane przez MajÄ…tek)
+ </panel.string>
+ <panel.string name="allow_public_access">
+ Udostępnij dostęp publiczny ([MATURITY])
+ </panel.string>
+ <panel.string name="estate_override">
+ Jedna lub więcej z tych opcji ustawiona jest z poziomu Posiadłości
+ </panel.string>
<text name="Limit access to this parcel to:">
- Dostęp do tej posiadłości:
+ Dostęp do tej Posiadłości:
</text>
- <check_box label="Publiczny" name="public_access"/>
+ <check_box label="Publiczny [MATURITY]" name="public_access"/>
<text name="Only Allow">
Zablokuj dostęp dla:
</text>
- <check_box label="Rezydentów niezarejestrowanych w systemie płatniczym z Linden Lab" name="limit_payment" tool_tip="Ban unidentified residents."/>
- <check_box label="Rezydentów z brakiem weryfikacji wieku " name="limit_age_verified" tool_tip="Zbanuj Rezydetów bez weryfikacji wieku. Odwiedź support.secondlife.com po więcej informacji."/>
- <panel.string name="estate_override">
- Jedna lub więcej z tych opcji ustawiona jest z poziomu posiadłości
- </panel.string>
- <check_box label="Udostępnij wejście grupie: [GROUP]" name="GroupCheck" tool_tip="Ustaw grupę w głównej zakładce"/>
- <check_box label="Sprzedaj wejściówki:" name="PassCheck" tool_tip="Otwórz tymczasowy dostęp do tej posiadłości"/>
+ <check_box label="Rezydentów zarejestrowanych w systemie płatniczym Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Zbanuj Rezydentów niezarejestrowanych w systemie płatniczym z Linden Lab."/>
+ <check_box label="Weryfikacja Wieku: [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Zbanuj Rezydetów bez Weryfikacji Wieku. Odwiedź support.secondlife.com po więcej informacji."/>
+ <check_box label="Udostępnij wejście Grupie: [GROUP]" name="GroupCheck" tool_tip="Ustaw Grupę w głównej zakładce"/>
+ <check_box label="Sprzedaj przepustki:" name="PassCheck" tool_tip="Otwórz tymczasowy dostęp do tej Posiadłości"/>
<combo_box name="pass_combo">
- <combo_box.item name="Anyone" label="Każdemu"
- />
- <combo_box.item name="Group" label="Grupie"
- />
+ <combo_box.item label="Każdemu" name="Anyone"/>
+ <combo_box.item label="Grupie" name="Group"/>
</combo_box>
<spinner label="Cena w L$:" name="PriceSpin"/>
<spinner label="Ilość godzin dostępu:" name="HoursSpin"/>
- <text label="Zawsze udostępniaj" name="AllowedText">
- Dozwoleni Rezydenci
- </text>
- <name_list name="AccessList" tool_tip="([LISTED] na liście, [MAX] max)"/>
- <button label="Dodaj..." label_selected="Dodaj..." name="add_allowed"/>
- <button label="Usuń" label_selected="Usuń" name="remove_allowed"/>
- <text label="Ban" name="BanCheck">
- NieporzÄ…dani Rezydenci (bany)
- </text>
- <name_list name="BannedList" tool_tip="([LISTED] na liście, [MAX] max)"/>
- <button label="Dodaj..." label_selected="Dodaj..." name="add_banned"/>
- <button label="Usuń" label_selected="Usuń" name="remove_banned"/>
+ <panel name="Allowed_layout_panel">
+ <name_list name="AccessList" tool_tip="([LISTED] na liście, [MAX] maksimum)"/>
+ </panel>
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_activeim.xml b/indra/newview/skins/default/xui/pl/floater_activeim.xml
new file mode 100644
index 0000000000..2a34409f8b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_activeim.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_activeim" title="AKTYWNY IM"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_animation_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_preview.xml
index 0524b8ade3..ca06665c65 100644
--- a/indra/newview/skins/default/xui/pl/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_animation_preview.xml
@@ -1,172 +1,187 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Animation Preview" title="">
+ <floater.string name="failed_to_initialize">
+ Inicjalizacja ruchu nie powiodła się.
+ </floater.string>
+ <floater.string name="anim_too_long">
+ Długość pliku animacji wynosi [LENGTH] sekund.
+
+Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund.
+ </floater.string>
+ <floater.string name="failed_file_read">
+ Brak możliwości odczytania plików animacji do wyświetlenia.
+
+[STATUS]
+ </floater.string>
+ <floater.string name="E_ST_OK">
+ Ok
+ </floater.string>
+ <floater.string name="E_ST_EOF">
+ Niewłaściwe zakończenie nazwy pliku.
+ </floater.string>
+ <floater.string name="E_ST_NO_CONSTRAINT">
+ Brak możliwości wyświetlenia definicji ograniczenia.
+ </floater.string>
+ <floater.string name="E_ST_NO_FILE">
+ Plik BVH nie może zostać otworzony.
+ </floater.string>
+ <floater.string name="E_ST_NO_HIER">
+ Niewłaściwy nagłówek HIERARCHI.
+ </floater.string>
+ <floater.string name="E_ST_NO_JOINT">
+ ROOT oraz JOINT nieodnalezione.
+ </floater.string>
+ <floater.string name="E_ST_NO_NAME">
+ Brak nazwy JOINT.
+ </floater.string>
+ <floater.string name="E_ST_NO_OFFSET">
+ OFFSET nieodnalezione.
+ </floater.string>
+ <floater.string name="E_ST_NO_CHANNELS">
+ CHANNELS nieodnalezione.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROTATION">
+ Brak otrzymania kolejności obrotu.
+ </floater.string>
+ <floater.string name="E_ST_NO_AXIS">
+ Brak osi obrotu.
+ </floater.string>
+ <floater.string name="E_ST_NO_MOTION">
+ MOTION nieodnalezione.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAMES">
+ Brak otrzymania liczby klatek obrazu.
+ </floater.string>
+ <floater.string name="E_ST_NO_FRAME_TIME">
+ Brak otrzymania czasu dla ilości klatek obrazu.
+ </floater.string>
+ <floater.string name="E_ST_NO_POS">
+ Brak otrzymania wartości pozycji.
+ </floater.string>
+ <floater.string name="E_ST_NO_ROT">
+ Nie można odczytać wartości obrotu.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_FILE">
+ Nie można otworzyć pliku tłumaczenia.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HEADER">
+ Nie można przeczytać tłumaczenia nagłówka.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_NAME">
+ Nie można przetłumaczyć nazw.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_IGNORE">
+ Nie można przeczytać tłumaczenia dla wartości ignorowania.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_RELATIVE">
+ Nie można przeczytać tłumaczenia wartości relatywnej.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_OUTNAME">
+ Nie można przeczytać nazw wartości tłumaczenia.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MATRIX">
+ Nie można przeczytać tłumaczenia pola.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGECHILD">
+ Brak otrzymania nazwy dla mergechild.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_MERGEPARENT">
+ Brak otrzymania nazwy dla mergeparent.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_PRIORITY">
+ Brak wartości prerogatywy.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_LOOP">
+ Brak otrzymania wartości powtórzeń.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEIN">
+ Brak otrzymawnia wartości easeIn.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EASEOUT">
+ Brak otrzymania wartości dla easeOut.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_HAND">
+ Brak otrzymania wartości morfizacji.
+ </floater.string>
+ <floater.string name="E_ST_NO_XLT_EMOTE">
+ Niemożliwość przeczytania nazwy emocji.
+ </floater.string>
+ <floater.string name="E_ST_BAD_ROOT">
+ Nieprawidłowa nazwa, użyj &quot;hip&quot;.
+ </floater.string>
<text name="name_label">
Nazwa:
</text>
<text name="description_label">
Opis:
</text>
- <spinner label="Pierwszeństwo" name="priority"
- tool_tip="Kontroluj,animacje,które mogą zostać zdominowane przez tą animację" />
- <check_box label="Powtarzaj" name="loop_check" tool_tip="Powtarzaj tÄ… animacjÄ™" />
- <spinner label="Od(%)" name="loop_in_point"
- tool_tip="Wybierz punkt, od którego chcesz zacząć powtarzać animację" />
- <spinner label="Do(%)" name="loop_out_point"
- tool_tip="Wybierz punkt, od którego chcesz zakończyć powtarznie animacji" />
+ <spinner label="Pierwszeństwo" name="priority" tool_tip="Kontroluj animacje,które mogą zostać zdominowane przez tą animację"/>
+ <check_box label="Powtarzaj" name="loop_check" tool_tip="Powtarzaj tÄ… animacjÄ™"/>
+ <spinner label="Od(%)" name="loop_in_point" tool_tip="Wybierz punkt, od którego chcesz zacząć powtarzać animację"/>
+ <spinner label="Do(%)" name="loop_out_point" tool_tip="Wybierz punkt, od którego chcesz zakończyć powtarzanie animacji"/>
<text name="hand_label">
Pozycja Ręki
</text>
- <combo_box label="" name="hand_pose_combo"
- tool_tip="Kontroluje co robi ręka podczas animacji">
- <combo_item name="Spread">
- RozciÄ…gaj
- </combo_item>
- <combo_item name="Relaxed">
- Odpocznij
- </combo_item>
- <combo_item name="PointBoth">
- Wskazuj
- </combo_item>
- <combo_item name="Fist">
- Pięść
- </combo_item>
- <combo_item name="RelaxedLeft">
- Lewa-Odpocznij
- </combo_item>
- <combo_item name="PointLeft">
- Wskazuj LewÄ…
- </combo_item>
- <combo_item name="FistLeft">
- Zaciśnij Lewą
- </combo_item>
- <combo_item name="RelaxedRight">
- Prawa-Odpocznj
- </combo_item>
- <combo_item name="PointRight">
- Wskazuj PrawÄ…
- </combo_item>
- <combo_item name="FistRight">
- Zaciśnij Prawą
- </combo_item>
- <combo_item name="SaluteRight">
- Salutuj PrawÄ…
- </combo_item>
- <combo_item name="Typing">
- Pisz
- </combo_item>
- <combo_item name="PeaceRight">
- Prawa-Pokój
- </combo_item>
+ <combo_box label="" name="hand_pose_combo" tool_tip="Kontroluje co robi ręka podczas animacji">
+ <combo_box.item label="RozciÄ…gaj" name="Spread"/>
+ <combo_box.item label="Odpocznij" name="Relaxed"/>
+ <combo_box.item label="Wskazuj" name="PointBoth"/>
+ <combo_box.item label="Pięść" name="Fist"/>
+ <combo_box.item label="Lewa-Odpocznij" name="RelaxedLeft"/>
+ <combo_box.item label="Wskazuj LewÄ…" name="PointLeft"/>
+ <combo_box.item label="Zaciśnij Lewą" name="FistLeft"/>
+ <combo_box.item label="Prawa-Odpocznij" name="RelaxedRight"/>
+ <combo_box.item label="Wskazuj PrawÄ…" name="PointRight"/>
+ <combo_box.item label="Zaciśnij Prawą" name="FistRight"/>
+ <combo_box.item label="Salutuj PrawÄ…" name="SaluteRight"/>
+ <combo_box.item label="Pisz" name="Typing"/>
+ <combo_box.item label="Prawa-Pokój" name="PeaceRight"/>
</combo_box>
<text name="emote_label">
Ekspresja
</text>
- <combo_box label="" name="emote_combo"
- tool_tip="Kontroluj mimikÄ™ twarzy w czasie animacji">
- <combo_item name="[None]">
- [Żadne]
- </combo_item>
- <combo_item name="Aaaaah">
- Aaaaah
- </combo_item>
- <combo_item name="Afraid">
- Obawa
- </combo_item>
- <combo_item name="Angry">
- Złość
- </combo_item>
- <combo_item name="BigSmile">
- Duży Uśmiech
- </combo_item>
- <combo_item name="Bored">
- Znudzenie
- </combo_item>
- <combo_item name="Cry">
- Płacz
- </combo_item>
- <combo_item name="Disdain">
- Wzgarda
- </combo_item>
- <combo_item name="Embarrassed">
- Zakłopotanie
- </combo_item>
- <combo_item name="Frown">
- Marszczenie Brwi
- </combo_item>
- <combo_item name="Kiss">
- Pocałunek
- </combo_item>
- <combo_item name="Laugh">
- Åšmiech
- </combo_item>
- <combo_item name="Plllppt">
- Plllppt
- </combo_item>
- <combo_item name="Repulsed">
- Odrzucenie
- </combo_item>
- <combo_item name="Sad">
- Smutek
- </combo_item>
- <combo_item name="Shrug">
- Wzruszanie Ramionami
- </combo_item>
- <combo_item name="Smile">
- Uśmiech
- </combo_item>
- <combo_item name="Surprise">
- Niespodzianka
- </combo_item>
- <combo_item name="Wink">
- Mrugnięcie
- </combo_item>
- <combo_item name="Worry">
- Zmartwienie
- </combo_item>
+ <combo_box label="" name="emote_combo" tool_tip="Kontroluj mimikÄ™ twarzy w czasie animacji">
+ <combo_box.item label="(Żadne)" name="[None]"/>
+ <combo_box.item label="Aaaaah" name="Aaaaah"/>
+ <combo_box.item label="Obawa" name="Afraid"/>
+ <combo_box.item label="Złość" name="Angry"/>
+ <combo_box.item label="Duży Uśmiech" name="BigSmile"/>
+ <combo_box.item label="Znudzenie" name="Bored"/>
+ <combo_box.item label="Płacz" name="Cry"/>
+ <combo_box.item label="Wzgarda" name="Disdain"/>
+ <combo_box.item label="Zakłopotanie" name="Embarrassed"/>
+ <combo_box.item label="Marszczenie Brwi" name="Frown"/>
+ <combo_box.item label="Pocałunek" name="Kiss"/>
+ <combo_box.item label="Åšmiech" name="Laugh"/>
+ <combo_box.item label="Plllppt" name="Plllppt"/>
+ <combo_box.item label="Odrzucenie" name="Repulsed"/>
+ <combo_box.item label="Smutek" name="Sad"/>
+ <combo_box.item label="Wzruszenie Ramionami" name="Shrug"/>
+ <combo_box.item label="Uśmiech" name="Smile"/>
+ <combo_box.item label="Niespodzianka" name="Surprise"/>
+ <combo_box.item label="Mrugnięcie" name="Wink"/>
+ <combo_box.item label="Zmartwienie" name="Worry"/>
</combo_box>
<text name="preview_label">
PrzeglÄ…daj kiedy:
</text>
- <combo_box label="" name="preview_base_anim"
- tool_tip="Przetestuj zachowanie animacji kiedy awatar wykonuje normalne czynności">
- <combo_item name="Standing">
- Stoisz
- </combo_item>
- <combo_item name="Walking">
- Chodzisz
- </combo_item>
- <combo_item name="Sitting">
- Siedzisz
- </combo_item>
- <combo_item name="Flying">
- Latasz
- </combo_item>
+ <combo_box label="" name="preview_base_anim" tool_tip="Przetestuj zachowanie animacji kiedy awatar wykonuje normalne czynności">
+ <combo_box.item label="Stoisz" name="Standing"/>
+ <combo_box.item label="Chodzisz" name="Walking"/>
+ <combo_box.item label="Siedzisz" name="Sitting"/>
+ <combo_box.item label="Latasz" name="Flying"/>
</combo_box>
- <spinner label="Złagodzić w (sekund)" name="ease_in_time"
- tool_tip="Ilość Czasu (w sekundach), w których animacje mieszają się" />
- <spinner label="Złagodzić na zewnątrz (sekund)" name="ease_out_time"
- tool_tip="Ilość Czasu (w sekundach), w których animacje oddzielają się" />
- <button label="" name="play_btn" tool_tip="Play/pause your animation." />
- <button label="" name="stop_btn" tool_tip="Stop animation playback" />
- <slider label="" name="playback_slider" />
+ <spinner label="Złagodzić w (sekund)" name="ease_in_time" tool_tip="Ilość Czasu (w sekundach), w których animacje mieszają się"/>
+ <spinner label="Złagodzić na zewnątrz (sekund)" name="ease_out_time" tool_tip="Ilość Czasu (w sekundach), w których animacje oddzielają się"/>
+ <button label="" name="play_btn" tool_tip="Odtwarzaj animacjÄ™"/>
+ <button name="pause_btn" tool_tip="Zatrzymaj animacjÄ™"/>
+ <button label="" name="stop_btn" tool_tip="Stop animation playback"/>
+ <slider label="" name="playback_slider"/>
<text name="bad_animation_text">
Brak możliwości wczytania pliku animacji.
Doradzamy eksport plików BVH z Poser 4.
</text>
- <button label="Anuluj" name="cancel_btn" />
- <button label="Załaduj (L$[AMOUNT])" name="ok_btn" />
- <string name="failed_to_initialize">
- Inicjalizacja ruchu nie powiodła się.
- </string>
- <string name="anim_too_long">
- Długość pliku animacji wynosi [LENGTH] sekund.
-
-Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund.
- </string>
- <string name="failed_file_read">
- Niemożliwość odczytania pliku animacji do wyświetlenia.
-
-[STATUS]
- </string>
+ <button label="Załaduj ([AMOUNT]L$)" name="ok_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_auction.xml b/indra/newview/skins/default/xui/pl/floater_auction.xml
index 37e35ed1e9..9399fa1115 100644
--- a/indra/newview/skins/default/xui/pl/floater_auction.xml
+++ b/indra/newview/skins/default/xui/pl/floater_auction.xml
@@ -1,9 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="ROZPOCZNIJ SPRZEDAÅ» POSIADÅOÅšCI">
- <check_box label="Zawierając żółte ogrodzenie" name="fence_check" />
- <button label="Zdjęce" label_selected="Zdjęce" name="snapshot_btn" />
- <button label="OK" label_selected="OK" name="ok_btn" />
- <string name="already for sale">
- Nie możesz umieścić posiadłości na aukcji, jeżeli już została wystawiona na sprzedaż.
- </string>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_auction" title="ROZPOCZNIJ SPRZEDAÅ» POSIADÅOÅšCI LINDENÓW">
+ <floater.string name="already for sale">
+ Nie możesz umieścić Posiadłości na Aukcji, jeżeli już została wystawiona na sprzedaż.
+ </floater.string>
+ <check_box initial_value="true" label="Zawierając żółte ogrodzenie" name="fence_check"/>
+ <button label="Zdjęce" label_selected="Zdjęce" name="snapshot_btn"/>
+ <button label="Sprzedaj każdemu" label_selected="Sprzedaj Każdemu" name="sell_to_anyone_btn"/>
+ <button label="Wyczyść ustawienia" label_selected="Wyczyść ustawienia" name="reset_parcel_btn"/>
+ <button label="Rozpocznij AukcjÄ™" label_selected="Rozpocznij AukcjÄ™" name="start_auction_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
index 8c09f7294c..0897f59570 100644
--- a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
@@ -1,40 +1,46 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="avatarpicker" title="WYBIERZ REZYDENTA">
+ <floater.string name="not_found">
+ &apos;[TEXT]&apos; nie zostało odnalezione
+ </floater.string>
+ <floater.string name="no_one_near">
+ Nie ma nikogo w pobliżu
+ </floater.string>
+ <floater.string name="no_results">
+ Brak wyników
+ </floater.string>
+ <floater.string name="searching">
+ Wyszukiwanie...
+ </floater.string>
+ <string label="Wybierz" label_selected="Wybierz" name="Select">
+ Wybierz
+ </string>
+ <string name="Close">
+ Zamknij
+ </string>
<tab_container name="ResidentChooserTabs">
<panel label="Znajdź" name="SearchPanel">
<text name="InstructSearchResidentName">
- Wpisz imiÄ™ Rezydenta:
+ Wpisz fragment imienia:
</text>
- <button label="Znajdź" label_selected="Znajdź" name="Find"/>
+ <button label="Szukaj" label_selected="Szukaj" name="Find"/>
</panel>
- <panel label="Wizytówka" name="CallingCardsPanel">
- <text name="InstructSelectCallingCard">
- Wybierz wizytówkę:
+ <panel label="Znajomi" name="FriendsPanel">
+ <text name="InstructSelectFriend">
+ Wybierz osobÄ™:
</text>
</panel>
<panel label="Obok mnie:" name="NearMePanel">
<text name="InstructSelectResident">
- Wybierz Rezydenta obok:
+ Wybierz osobę w pobliżu:
</text>
- <button label="Odśwież" label_selected="Odśwież" name="Refresh"/>
<slider label="Zasięg" name="near_me_range"/>
<text name="meters">
Metry
</text>
+ <button label="Odśwież" label_selected="Odśwież" name="Refresh"/>
</panel>
</tab_container>
- <button label="Wybierz" label_selected="Wybierz" name="Select"/>
- <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
- <string name="not_found">
- &apos;[TEXT]&apos; nie zostało odnalezione
- </string>
- <string name="no_one_near">
- Nikt w pobliżu
- </string>
- <string name="no_results">
- Brak wyników
- </string>
- <string name="searching">
- Wyszukiwanie...
- </string>
+ <button label="OK" label_selected="OK" name="ok_btn"/>
+ <button label="Cofnij" label_selected="Cofnij" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
index dce2330807..11651ad7e8 100644
--- a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
@@ -1,30 +1,43 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="avatar_texture_debug" title="TEKSTURY AWATARA">
- <text name="baked_label">
- Tekstury Renderowane
- </text>
+ <floater.string name="InvalidAvatar">
+ NIEWÅAÅšCIWY AWATAR
+ </floater.string>
<text name="composite_label">
- Tekstury Kompozytowe
+ Tekstury kompozytowe
</text>
- <texture_picker label="Głowa" name="baked_head" />
- <texture_picker label="Makijaż" name="head_bodypaint" />
- <texture_picker label="Włosy" name="hair" />
- <button label="Zrzuć" label_selected="Zrzuć" name="Dump" />
- <texture_picker label="Oczy" name="baked_eyes" />
- <texture_picker label="Oko" name="eye_texture" />
- <texture_picker label="Góra Część Ciała" name="baked_upper_body" />
- <texture_picker label="Tatuaż Górnej Części Ciała" name="upper_bodypaint" />
- <texture_picker label="Podkoszulek" name="undershirt" />
- <texture_picker label="Rękawiczki" name="gloves" />
- <texture_picker label="Koszula" name="shirt" />
- <texture_picker label="Górna Część Kurtki" name="upper_jacket" />
- <texture_picker label="Dolna Część Ciała" name="baked_lower_body" />
- <texture_picker label="Tatuaż Dolnej Części Ciała" name="lower_bodypaint" />
- <texture_picker label="Bielizna" name="underpants" />
- <texture_picker label="Skarpety" name="socks" />
- <texture_picker label="Buty" name="shoes" />
- <texture_picker label="Spodnie" name="pants" />
- <texture_picker label="Kurtka" name="jacket" />
- <texture_picker label="Spódnica" name="baked_skirt" />
- <texture_picker label="Spódnica" name="skirt_texture" />
+ <button label="Zrzuć" label_selected="Zrzuć" name="Dump"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <texture_picker label="Włosy" name="hair-baked"/>
+ <texture_picker label="Włosy" name="hair_grain"/>
+ <texture_picker label="Alpha włosów" name="hair_alpha"/>
+ <texture_picker label="Głowa" name="head-baked"/>
+ <texture_picker label="Makijaż" name="head_bodypaint"/>
+ <texture_picker label="Alpha głowy" name="head_alpha"/>
+ <texture_picker label="Tatuaż głowy" name="head_tattoo"/>
+ <texture_picker label="Oczy" name="eyes-baked"/>
+ <texture_picker label="Oko" name="eyes_iris"/>
+ <texture_picker label="Alpha oczu" name="eyes_alpha"/>
+ <texture_picker label="Górna część ciała" name="upper-baked"/>
+ <texture_picker label="Górny wzór na ciele" name="upper_bodypaint"/>
+ <texture_picker label="Podkoszulek" name="upper_undershirt"/>
+ <texture_picker label="Rękawiczki" name="upper_gloves"/>
+ <texture_picker label="Koszula" name="upper_shirt"/>
+ <texture_picker label="Kurtka górna" name="upper_jacket"/>
+ <texture_picker label="Alpha górna" name="upper_alpha"/>
+ <texture_picker label="Tatuaż górny" name="upper_tattoo"/>
+ <texture_picker label="Dolna część ciała" name="lower-baked"/>
+ <texture_picker label="Dolny wzór na ciele" name="lower_bodypaint"/>
+ <texture_picker label="Bielizna" name="lower_underpants"/>
+ <texture_picker label="Skarpetki" name="lower_socks"/>
+ <texture_picker label="Buty" name="lower_shoes"/>
+ <texture_picker label="Spodnie" name="lower_pants"/>
+ <texture_picker label="Kurtka" name="lower_jacket"/>
+ <texture_picker label="Alpha dolna" name="lower_alpha"/>
+ <texture_picker label="Tatuaż dolny" name="lower_tattoo"/>
+ <texture_picker label="Spódnica" name="skirt-baked"/>
+ <texture_picker label="Spódnica" name="skirt"/>
+ </panel>
+ </scroll_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_beacons.xml b/indra/newview/skins/default/xui/pl/floater_beacons.xml
index 6e7013f2d7..547db2b351 100644
--- a/indra/newview/skins/default/xui/pl/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/pl/floater_beacons.xml
@@ -1,15 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="beacons" title="EMITERY">
<panel name="beacons_panel">
- <check_box label="Obiekty Dotykalne" name="touch_only"/>
- <check_box label="Obiekty Skryptowane" name="scripted"/>
- <check_box label="Obiekty Fizyczne" name="physical"/>
- <check_box label="Źródła Dźwięku" name="sounds"/>
- <check_box label="Źródła Cząsteczek" name="particles"/>
- <check_box label="Podkreśl Emitery" name="highlights"/>
- <check_box label="Pokaż Emitery" name="beacons"/>
- <text name="beacon_width_label">
- Zasięg Emiterów:
+ <text name="label_show">
+ Pokaż emitery:
</text>
+ <check_box label="Emitery" name="beacons"/>
+ <check_box label="Podkreśl emitery" name="highlights"/>
+ <text name="beacon_width_label" tool_tip="Zasięg emiterów">
+ Szer.
+ </text>
+ <text name="label_objects">
+ Dla tych obiektów:
+ </text>
+ <check_box label="Obiekty fizyczne" name="physical"/>
+ <check_box label="Obiekty skryptowane" name="scripted"/>
+ <check_box label="Obiekty dotykalne" name="touch_only"/>
+ <check_box label="Źródła dźwięku" name="sounds"/>
+ <check_box label="Źródła cząsteczek" name="particles"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_build_options.xml b/indra/newview/skins/default/xui/pl/floater_build_options.xml
index f538be218c..5d296aa725 100644
--- a/indra/newview/skins/default/xui/pl/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_build_options.xml
@@ -1,8 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPCJE SIATKI">
- <spinner label="Jednostka Siatki (metry)" name="GridResolution" />
- <spinner label="Rozmiary Siatki (metry)" name="GridDrawSize" />
- <check_box label="Udostępnij Podjednostkowe Dopasowywanie" name="GridSubUnit" />
- <check_box label="Pokaż Sekcje Skośne" name="GridCrossSection" />
- <slider label="Nieprzezroczystość Siatki" name="GridOpacity" />
+ <spinner label="Jednostki siatki (metery)" name="GridResolution"/>
+ <spinner label="Rozmiary siatki (metry)" name="GridDrawSize"/>
+ <check_box label="Pokaż podjednostki" name="GridSubUnit"/>
+ <check_box label="Pokaż przekroje" name="GridCrossSection"/>
+ <text name="grid_opacity_label" tool_tip="Nieprzeźroczystość siatki:">
+ Nieprzeźroczystość:
+ </text>
+ <slider label="Nieprzezroczystość siatki" name="GridOpacity"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
index f06615642e..f4721b05d8 100644
--- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
@@ -1,44 +1,54 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterbulkperms" title="HURTOWA ZMIANA PRAW ZAWARTOÅšCI">
- <text name="applyto">
- Rodzaj Zawartości
- </text>
+ <floater.string name="nothing_to_modify_text">
+ Selekcja zawiera zawartość niemodfyfikowalną
+ </floater.string>
+ <floater.string name="status_text">
+ Ustawienie praw na [NAME]
+ </floater.string>
+ <floater.string name="start_text">
+ Rozpoczęcie prośby o zmianę praw...
+ </floater.string>
+ <floater.string name="done_text">
+ Zakończenie prośby o zmianę praw.
+ </floater.string>
<check_box label="Animacje" name="check_animation"/>
- <check_box label="Części Ciała" name="check_bodypart"/>
+ <icon name="icon_animation" tool_tip="Animacja"/>
+ <check_box label="Części ciała" name="check_bodypart"/>
+ <icon name="icon_bodypart" tool_tip="Części Ciała"/>
<check_box label="Ubranie" name="check_clothing"/>
+ <icon name="icon_clothing" tool_tip="Ubranie"/>
<check_box label="Gestury" name="check_gesture"/>
- <check_box label="Zapamiętane Miejsca" name="check_landmark"/>
+ <icon name="icon_gesture" tool_tip="Gestury"/>
<check_box label="Noty" name="check_notecard"/>
+ <icon name="icon_notecard" tool_tip="Noty"/>
<check_box label="Obiekty" name="check_object"/>
+ <icon name="icon_object" tool_tip="Obiekty"/>
<check_box label="Skrypty" name="check_script"/>
+ <icon name="icon_script" tool_tip="Skrypty"/>
<check_box label="Dźwięki" name="check_sound"/>
+ <icon name="icon_sound" tool_tip="Dźwięki"/>
<check_box label="Tekstury" name="check_texture"/>
- <button width="115" font="SansSerifSmall" label="Wybierz Wszystkie" label_selected="Wszystkie" name="check_all"/>
- <button width="115" font="SansSerifSmall" label="Odznacz Wszystkie" label_selected="Żadne" name="check_none"/>
+ <icon name="icon_texture" tool_tip="Tekstury"/>
+ <button font="SansSerifSmall" label="√ Wszystkie" label_selected="Wszystkie" name="check_all" width="115"/>
+ <button font="SansSerifSmall" label="Żadne" label_selected="Żadne" name="check_none" width="115"/>
<text name="newperms">
- Nowe Prawa
+ Nowe prawa zawartości
+ </text>
+ <text name="GroupLabel">
+ Grupa:
</text>
- <check_box label="Udostępnij Grupie" name="share_with_group"/>
- <check_box label="Pozwól kopiować każdemu" name="everyone_copy"/>
+ <check_box label="Udostępnij" name="share_with_group"/>
+ <text name="AnyoneLabel">
+ Każdy:
+ </text>
+ <check_box label="Kopiuj" name="everyone_copy"/>
<text name="NextOwnerLabel">
Następny Właściciel:
</text>
<check_box label="Modyfikuje" name="next_owner_modify"/>
<check_box label="Kopiuje" name="next_owner_copy"/>
- <check_box label="Oddaje/Sprzedaje" name="next_owner_transfer"/>
- <button label="Pomoc" name="help"/>
- <button label="Zastosuj" name="apply"/>
- <button label="Zamknij" name="close"/>
- <string name="nothing_to_modify_text">
- Selekcja zawiera zawartość niemodfyfikowalną
- </string>
- <string name="status_text">
- Ustawienie praw na [NAME]
- </string>
- <string name="start_text">
- Rozpoczęcie prośby o zmianę praw...
- </string>
- <string name="done_text">
- Zakończenie prośby o zmianę praw.
- </string>
+ <check_box initial_value="true" label="Oddaj/Sprzedaj" name="next_owner_transfer" tool_tip="Następny właściciel może oddać lub sprzedać ten obiekt."/>
+ <button label="OK" name="apply"/>
+ <button label="Anuluj" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_bumps.xml b/indra/newview/skins/default/xui/pl/floater_bumps.xml
index 10f9d73284..1f1b29a83e 100644
--- a/indra/newview/skins/default/xui/pl/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bumps.xml
@@ -1,21 +1,24 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_bumps" title="ZDERZENIA, POPCHNIĘCIA, UDERZENIA">
- <string name="none_detected">
+ <floater.string name="none_detected">
Brak
- </string>
- <string name="bump">
+ </floater.string>
+ <floater.string name="bump">
[TIME] [FIRST] [LAST] awatar zderzył się z Tobą
- </string>
- <string name="llpushobject">
+ </floater.string>
+ <floater.string name="llpushobject">
[TIME] [FIRST] [LAST] awatar popchnÄ…Å‚ CiÄ™ swoim skryptem
- </string>
- <string name="selected_object_collide">
+ </floater.string>
+ <floater.string name="selected_object_collide">
[TIME] [FIRST] [LAST] awatar uderzył Cię swoim obiektem
- </string>
- <string name="scripted_object_collide">
+ </floater.string>
+ <floater.string name="scripted_object_collide">
[TIME] [FIRST] [LAST] awatar uderzył Cię swoim skryptowanym obiektem
- </string>
- <string name="physical_object_collide">
+ </floater.string>
+ <floater.string name="physical_object_collide">
[TIME] [FIRST] [LAST] awatar uderzył Cię swoim fizycznym obiektem
- </string>
+ </floater.string>
+ <floater.string name="timeStr">
+ [[hour,datetime,slt]:[min,datetime,slt]]
+ </floater.string>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
index ebe1c9dfd8..94f2b50450 100644
--- a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_buy_contents" title="KUP ZAWARTOŚĆ">
<text name="contains_text">
[NAME] zawiera:
</text>
<text name="buy_text">
- Kupić za L$[AMOUNT] od [NAME]?
+ Kupić za [AMOUNT]L$ od [NAME]?
</text>
- <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" />
- <button label="Kup" label_selected="Kup" name="buy_btn" />
- <check_box label="Załóż ubrania teraz" name="wear_check" />
+ <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/>
+ <button label="Kup" label_selected="Kup" name="buy_btn"/>
+ <check_box label="Załóż ubrania teraz" name="wear_check"/>
<string name="no_copy_text">
(bez prawa kopiowania)
</string>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
index 5e59482883..f2a6579dc3 100644
--- a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
@@ -1,50 +1,43 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="buy currency" title="KUP $L">
- <text name="info_buying">
- Kup L$:
- </text>
- <text name="info_cannot_buy">
- Brak możliwości zakupu L$ teraz:
- </text>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="buy currency" title="KUP L$">
+ <floater.string name="buy_currency">
+ Kup [LINDENS] L$ za [LOCALAMOUNT]
+ </floater.string>
<text name="info_need_more">
- Potrzebujesz wiecęj L$:
+ Potrzebujesz więcej L$
</text>
- <text name="error_message">
- Pojawienie się błędu.
- </text>
- <button label="Idź do strony internetowej" name="error_web" width="168"/>
<text name="contacting">
Kontaktowanie z LindeX...
</text>
- <text name="buy_action_unknown">
- Kup L$ w systemie walutowej wymiany LindeX
+ <text name="info_buying">
+ Kup L$
</text>
- <text name="buy_action">
- [NAME] [PRICE]L$
+ <text name="balance_label">
+ Obecnie posiadasz
+ </text>
+ <text name="balance_amount">
+ [AMT]L$
</text>
<text name="currency_action">
Kup
</text>
- <line_editor name="currency_amt" left_delta="32">
+ <text name="currency_label">
+ L$
+ </text>
+ <line_editor label="L$" left_delta="32" name="currency_amt">
1234
</line_editor>
+ <text name="buying_label">
+ Cena
+ </text>
<text name="currency_est">
za [LOCALAMOUNT]
</text>
<text name="getting_data">
- Otrzymywanie danych...
+ Kalkulowanie...
</text>
- <text name="balance_label">
- Obecnie posiadasz
- </text>
- <text name="balance_amount">
- [AMT]L$
- </text>
- <text name="buying_label">
- Kupujesz
- </text>
- <text name="buying_amount">
- [AMT]L$
+ <text name="buy_action">
+ [ACTION]
</text>
<text name="total_label">
Twój nowy stan konta
@@ -52,18 +45,22 @@
<text name="total_amount">
[AMT]L$
</text>
- <text name="purchase_warning_repurchase" height="48" bottom_delta="-64" right="-10">
- DokonujÄ…c potwierdzenia na podanÄ… transakcjÄ™,
-wyrażasz zgodę jedynie na zakup waluty.
-Sprobuj wykonać operację ponownie.
+ <text name="currency_links">
+ [http://www.secondlife.com/my/account/payment_method_management.php metoda płatności] | [http://www.secondlife.com/my/account/currency.php waluta] | [http://www.secondlife.com/my/account/exchange_rates.php kurs wymiany]
+ </text>
+ <text name="exchange_rate_note">
+ Wpisz ponownie kwotę aby zobaczyć ostatni kurs wymiany.
</text>
- <text name="purchase_warning_notenough" bottom_delta="16">
- Nie zakupujesz wystarczającej ilości waluty.
-Proszę zwiększyć ilość.
+ <text bottom_delta="-64" height="48" name="purchase_warning_repurchase" right="-10">
+ Potwierdzasz zakup L$, nie obiektu.
+ </text>
+ <text bottom_delta="16" name="purchase_warning_notenough">
+ Nie zakupiono wystarczającej ilości L$. Proszę zwiększyć kwotę.
+ </text>
+ <button label="Kup teraz" name="buy_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+ <text name="info_cannot_buy">
+ Nie można kupić
</text>
- <button label="Anuluj" name="cancel_btn" />
- <button label="Kup" name="buy_btn" />
- <string name="buy_currency">
- Kup [LINDENS]L$ za [LOCALAMOUNT]
- </string>
+ <button label="Przejdź na stronę WWW" name="error_web" width="168"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_land.xml b/indra/newview/skins/default/xui/pl/floater_buy_land.xml
index 648888828b..3d01129d9b 100644
--- a/indra/newview/skins/default/xui/pl/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_land.xml
@@ -1,5 +1,133 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="BUY LAND">
+<floater name="buy land" title="KUP POSIADÅOŚĆ">
+ <floater.string name="can_resell">
+ Może być odsprzedana.
+ </floater.string>
+ <floater.string name="can_not_resell">
+ Nie może być odsprzedana.
+ </floater.string>
+ <floater.string name="can_change">
+ Mogą być łączone i dzielone.
+ </floater.string>
+ <floater.string name="can_not_change">
+ Nie mogą być łączone ani dzielone.
+ </floater.string>
+ <floater.string name="cant_buy_for_group">
+ Nie masz pozwolenia na zakup Posiadłości dla Twojej aktywnej Grupy.
+ </floater.string>
+ <floater.string name="no_land_selected">
+ Obszar nie jest wybrany.
+ </floater.string>
+ <floater.string name="multiple_parcels_selected">
+ Wybrałeś wiele różnych Posiadłości.
+Spróbuj wybrać mniejszy obszar.
+ </floater.string>
+ <floater.string name="no_permission">
+ Nie masz pozwolenia na zakup Posiadłości dla Twojej aktywnej Grupy.
+ </floater.string>
+ <floater.string name="parcel_not_for_sale">
+ Wybrana Posiadłość nie jest na sprzedaż.
+ </floater.string>
+ <floater.string name="group_already_owns">
+ Ta Posiadłość już należy do Grupy.
+ </floater.string>
+ <floater.string name="you_already_own">
+ Ta Posiadłość już należy do Ciebie.
+ </floater.string>
+ <floater.string name="set_to_sell_to_other">
+ Wybrana Posiadłość będzie sprzedana komuś innemu.
+ </floater.string>
+ <floater.string name="no_public_land">
+ Wybrany obszar nie ma publicznych Posiadłości.
+ </floater.string>
+ <floater.string name="not_owned_by_you">
+ Wybrałeś Posiadłość, której Właścicielem jest inny Rezydent.
+Spróbuj wybrać ponownie mniejszą powierzchnię Posiadłości.
+ </floater.string>
+ <floater.string name="processing">
+ Przetwarzanie Twojego zakupu...
+
+(Może zająć kilka minut)
+ </floater.string>
+ <floater.string name="fetching_error">
+ Błąd podczas wczytywania informacji zakupu Posiadłości.
+ </floater.string>
+ <floater.string name="buying_will">
+ Zakup tej Posiadłości spowoduje:
+ </floater.string>
+ <floater.string name="buying_for_group">
+ Zakup ziemi dla Grupy:
+ </floater.string>
+ <floater.string name="cannot_buy_now">
+ Nie możesz teraz kupić:
+ </floater.string>
+ <floater.string name="not_for_sale">
+ Nie jest na sprzedaż:
+ </floater.string>
+ <floater.string name="none_needed">
+ Poprawność danych.
+ </floater.string>
+ <floater.string name="must_upgrade">
+ Musisz mieć konto Premium żebyś mógł mieć Posiadłości.
+ </floater.string>
+ <floater.string name="cant_own_land">
+ Twoje konto pozwala Ci mieć Posiadłości.
+ </floater.string>
+ <floater.string name="land_holdings">
+ Jesteś właścicielem [BUYER] m² ziemi.
+ </floater.string>
+ <floater.string name="pay_to_for_land">
+ Zapłać [SELLER] [AMOUNT]L$ za Posiadłość
+ </floater.string>
+ <floater.string name="buy_for_US">
+ Kup L$ [AMOUNT] za [LOCAL_AMOUNT],
+ </floater.string>
+ <floater.string name="parcel_meters">
+ Podana posiadłość to [AMOUNT] m² ziemi.
+ </floater.string>
+ <floater.string name="premium_land">
+ Podana posiadłość jest w cenie premium adekwatnie jak za [AMOUNT] m².
+ </floater.string>
+ <floater.string name="discounted_land">
+ Wybrana posiadłość jest w cenie zniżkowej adekwatnie jak za [AMOUNT] m².
+ </floater.string>
+ <floater.string name="meters_supports_object">
+ [AMOUNT] m²
+wspiera [AMOUNT2] obiektów
+ </floater.string>
+ <floater.string name="sold_with_objects">
+ sprzedane z obiektami
+ </floater.string>
+ <floater.string name="sold_without_objects">
+ obiekty nie są zawarte w sprzedaży
+ </floater.string>
+ <floater.string name="info_price_string">
+ L$ [PRICE]
+(L$ [PRICE_PER_SQM]/m²)
+[SOLD_WITH_OBJECTS]
+ </floater.string>
+ <floater.string name="insufficient_land_credits">
+ Grupa [GROUP] musi mieć wystarczający kredyt na
+używanie Posiadłości żeby sfinalizować ten zakup.
+ </floater.string>
+ <floater.string name="have_enough_lindens">
+ Masz [AMOUNT]L$ co wystarcza na zakup tej Posiadłości.
+ </floater.string>
+ <floater.string name="not_enough_lindens">
+ Masz tylko [AMOUNT]L$ i potrzebujesz [AMOUNT2]L$ dodatkowo.
+ </floater.string>
+ <floater.string name="balance_left">
+ Po zakupie zostanie Ci [AMOUNT]L$.
+ </floater.string>
+ <floater.string name="balance_needed">
+ Musisz dokupić [AMOUNT]L$ żeby kupić tą Posiadłość.
+ </floater.string>
+ <floater.string name="no_parcel_selected">
+ (Posiadłość nie została wybrana)
+ </floater.string>
+ <floater.string name="icon_PG" value="Parcel_PG_Dark"/>
+ <floater.string name="icon_M" value="Parcel_M_Dark"/>
+ <floater.string name="icon_R" value="Parcel_R_Dark"/>
<text name="region_name_label">
Region:
</text>
@@ -74,9 +202,9 @@ sprzedaż z obiektami
Tylko członkowie z kontem Premium mogą mieć Posiadłosci.
</text>
<combo_box name="account_level">
- <combo_box.item name="US$9.95/month,billedmonthly" label="9.95US$/miesiąc, płatne miesięcznie" />
- <combo_box.item name="US$7.50/month,billedquarterly" label="7.50US$/miesiąc, płatne kwartalnie" />
- <combo_box.item name="US$6.00/month,billedannually" label="6.00US$/miesiąc, płatne rocznie" />
+ <combo_box.item label="US$9.95/miesięcznie, naliczane miesięcznie" name="US$9.95/month,billedmonthly"/>
+ <combo_box.item label="US$7.50/miesięcznie, naliczane kwartalnie" name="US$7.50/month,billedquarterly"/>
+ <combo_box.item label="US$6.00/miesięcznie, naliczane rocznie" name="US$6.00/month,billedannually"/>
</combo_box>
<text name="land_use_action">
Zwiększ opłatę za używanie Posiadłości do 40US$/miesiąc.
@@ -98,140 +226,12 @@ Posiadłość ta zawiera 512 m² ziemi.
1000
</line_editor>
<text name="currency_est">
- za około [AMOUNT2]US$
+ za [LOCAL_AMOUNT]
</text>
<text name="currency_balance">
Masz 2,100L$.
</text>
- <check_box label="Zabierz [AMOUNT] metrów donacji z Grupy." name="remove_contribution"/>
+ <check_box label="Usuń [AMOUNT] m² z kontrybucji w grupie." name="remove_contribution"/>
<button label="Zakup" name="buy_btn"/>
<button label="Anuluj" name="cancel_btn"/>
- <string name="can_resell">
- Może być odsprzedana.
- </string>
- <string name="can_not_resell">
- Nie może być odsprzedana.
- </string>
- <string name="can_change">
- Mogą być łączone i dzielone.
- </string>
- <string name="can_not_change">
- Nie mogą być łączone ani dzielone.
- </string>
- <string name="cant_buy_for_group">
- Nie masz pozwolenia na zakup Posiadłości dla Twojej aktywnej Grupy.
- </string>
- <string name="no_land_selected">
- Obszar nie jest wybrany.
- </string>
- <string name="multiple_parcels_selected">
- Wybrałeś wiele różnych Posiadłości.
-Spróbuj wybrać mniejszy obszar.
- </string>
- <string name="no_permission">
- Nie masz pozwolenia na zakup Posiadłości dla Twojej aktywnej Grupy.
- </string>
- <string name="parcel_not_for_sale">
- Wybrana Posiadłość nie jest na sprzedaż.
- </string>
- <string name="group_already_owns">
- Ta Posiadłość już należy do Grupy.
- </string>
- <string name="you_already_own">
- Ta Posiadłość już należy do Ciebie.
- </string>
- <string name="set_to_sell_to_other">
- Wybrana Posiadłość będzie sprzedana komu innemu.
- </string>
- <string name="no_public_land">
- Wybrany obszar nie ma publicznych Posiadłości.
- </string>
- <string name="not_owned_by_you">
- Wybrana Posiadłość należy do kogoś innego.
-Spróbuj wybrać inny obszar.
- </string>
- <string name="processing">
- Przetwarzanie Twojego zakupu...
-
-(Może zająć kilka minut)
- </string>
- <string name="fetching_error">
- Błąd podczas wczytywania informacji zakupu Posiadłości.
- </string>
- <string name="buying_will">
- Zakup tej Posiadłości spowoduje:
- </string>
- <string name="buying_for_group">
- Zakup ziemi dla grupy:
- </string>
- <string name="cannot_buy_now">
- Nie możesz teraz kupić:
- </string>
- <string name="not_for_sale">
- Nie jest na sprzedaż:
- </string>
- <string name="none_needed">
- Poprawność danych.
- </string>
- <string name="must_upgrade">
- Musisz mieć konto Premium żebyś mógł mieć Posiadłości.
- </string>
- <string name="cant_own_land">
- Twoje konto pozwala Ci mieć Posiadłości.
- </string>
- <string name="land_holdings">
- Jesteś właścicielem [BUYER] m² ziemi.
- </string>
- <string name="pay_to_for_land">
- Zapłać [SELLER] [AMOUNT]L$ za Posiadłość
- </string>
- <string name="buy_for_US">
- Kup L$ [AMOUNT] za US$ [AMOUNT2],
- </string>
- <string name="parcel_meters">
- Podana posiadłość to [AMOUNT] m² ziemi.
- </string>
- <string name="premium_land">
- Podana posiadłość jest w cenie premium adekwatnie jak za [AMOUNT] m².
- </string>
- <string name="discounted_land">
- Wybrana posiadłość jest w cenie zniżkowej adekwatnie jak za [AMOUNT] m².
- </string>
- <string name="meters_supports_object">
- [AMOUNT] m²
-wspiera [AMOUNT2] obiektów
- </string>
- <string name="sold_with_objects">
- sprzedane z obiektami
- </string>
- <string name="sold_without_objects">
- obiekty nie są zawarte w sprzedaży
- </string>
- <string name="info_price_string">
- L$ [PRICE]
-(L$ [PRICE_PER_SQM]/m²)
-[SOLD_WITH_OBJECTS]
- </string>
- <string name="insufficient_land_credits">
- Grupa [GROUP] musi mieć wystarczający kredyt na
-używanie Posiadłości żeby sfinalizować ten zakup.
- </string>
- <string name="have_enough_lindens">
- Masz [AMOUNT]L$ co wystarcza na zakup tej Posiadłości.
- </string>
- <string name="not_enough_lindens">
- Masz tylko [AMOUNT]L$ i potrzebujesz [AMOUNT2]L$ dodatkowo.
- </string>
- <string name="balance_left">
- Po zakupie zostanie Ci [AMOUNT]L$.
- </string>
- <string name="balance_needed">
- Musisz dokupić [AMOUNT]L$ żeby kupić tą Posiadłość.
- </string>
- <string name="no_parcel_selected">
- (Posiadłość nie wybrana)
- </string>
- <string name="buy_currency">
- Kup [LINDENS]L$ za około [USD]US$
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_object.xml b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
index bad7982228..7958ed76a1 100644
--- a/indra/newview/skins/default/xui/pl/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="KUP KOPIĘ OBIEKTU">
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="KUP KOPIĘ">
<text name="contents_text">
- i jej zawartość:
+ i jej zawartość
</text>
<text name="buy_text">
Kupić za [AMOUNT]L$ od [NAME]?
</text>
- <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" />
- <button label="Kup" label_selected="Kup" name="buy_btn" />
+ <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/>
+ <button label="Kup" label_selected="Kup" name="buy_btn"/>
<string name="title_buy_text">
Kup
</string>
diff --git a/indra/newview/skins/default/xui/pl/floater_camera.xml b/indra/newview/skins/default/xui/pl/floater_camera.xml
index 5957018144..aec75f026f 100644
--- a/indra/newview/skins/default/xui/pl/floater_camera.xml
+++ b/indra/newview/skins/default/xui/pl/floater_camera.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="camera_floater" title="">
<floater.string name="rotate_tooltip">
Obracaj kamerę wokół obiektu
@@ -9,8 +9,35 @@
<floater.string name="move_tooltip">
Poruszaj kamerą w dół/górę oraz w prawo/lewo
</floater.string>
+ <floater.string name="orbit_mode_title">
+ Obracaj
+ </floater.string>
+ <floater.string name="pan_mode_title">
+ W prawo lub w lewo
+ </floater.string>
+ <floater.string name="avatar_view_mode_title">
+ Ustawienia
+ </floater.string>
+ <floater.string name="free_mode_title">
+ Zobacz obiekt
+ </floater.string>
<panel name="controls">
- <joystick_track name="cam_track_stick" tool_tip="Poruszaj kamerą w dół/górę oraz w prawo/lewo"/>
- <joystick_zoom name="zoom" tool_tip="Najedź kamerą w kierunku obiektu"/>
+ <joystick_track name="cam_track_stick" tool_tip="Poruszaj kamerą w górę, w dół, w lewo i w prawo"/>
+ <panel name="zoom" tool_tip="Najedź kamerą w kierunku obiektu">
+ <slider_bar name="zoom_slider" tool_tip="Przybliż kamerę do ogniskowej"/>
+ </panel>
+ <joystick_rotate name="cam_rotate_stick" tool_tip="Obracaj kamerę wokoł osi"/>
+ <panel name="camera_presets">
+ <button name="rear_view" tool_tip="Widok z tyłu"/>
+ <button name="group_view" tool_tip="PodglÄ…d Grupy"/>
+ <button name="front_view" tool_tip="Widok z przodu"/>
+ <button name="mouselook_view" tool_tip="Widok panoramiczny"/>
+ </panel>
+ </panel>
+ <panel name="buttons">
+ <button label="" name="orbit_btn" tool_tip="Obracaj kamerÄ™"/>
+ <button label="" name="pan_btn" tool_tip="Kamera horyzontalna"/>
+ <button label="" name="avatarview_btn" tool_tip="Ustawienia"/>
+ <button label="" name="freecamera_btn" tool_tip="PodglÄ…d obiektu"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_choose_group.xml b/indra/newview/skins/default/xui/pl/floater_choose_group.xml
index 72b6617094..877cedc0bc 100644
--- a/indra/newview/skins/default/xui/pl/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/pl/floater_choose_group.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="groups" title="GRUPY">
<text name="groupdesc">
- Wybierz grupÄ™:
+ Wybierz GrupÄ™:
</text>
- <button label="OK" label_selected="OK" name="OK" />
- <button label="Anuluj" label_selected="Anuluj" name="Cancel" />
+ <button label="OK" label_selected="OK" name="OK"/>
+ <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_color_picker.xml b/indra/newview/skins/default/xui/pl/floater_color_picker.xml
index 904a2cc270..a607ca982f 100644
--- a/indra/newview/skins/default/xui/pl/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/pl/floater_color_picker.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="WYBÓR KOLORU">
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="WYBIERZ KOLOR">
<text name="r_val_text">
Czerwony:
</text>
@@ -18,14 +18,14 @@
<text name="l_val_text">
Luminacja:
</text>
- <check_box label="Zastosuj od razu" name="apply_immediate" />
- <button label="" label_selected="" name="color_pipette" />
- <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" />
- <button label="Wybierz" label_selected="Wybierz" name="select_btn" />
+ <check_box label="Zastosuj teraz" name="apply_immediate"/>
+ <button label="" label_selected="" name="color_pipette"/>
+ <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/>
+ <button label="OK" label_selected="OK" name="select_btn"/>
<text name="Current color:">
- Obecny Kolor:
+ Obecny kolor:
</text>
<text name="(Drag below to save.)">
- (PrzeciÄ…gnij tutaj)
+ (Przeciągnij tutaj aby zapisać)
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml
index 0c01d15faf..dd1d5cf684 100644
--- a/indra/newview/skins/default/xui/pl/floater_customize.xml
+++ b/indra/newview/skins/default/xui/pl/floater_customize.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater customize" title="WYGLĄD">
<tab_container name="customize tab container">
- <placeholder label="Części Ciała" name="body_parts_placeholder"/>
+ <text label="Części Ciała" name="body_parts_placeholder">
+ Części ciała
+ </text>
<panel label="Kształt" name="Shape">
<button label="Wróć" label_selected="Wróć" name="Revert"/>
<button label="Ciało" label_selected="Ciało" name="Body"/>
@@ -14,8 +16,8 @@
<button label="Tułów" label_selected="Tułów" name="Torso"/>
<button label="Nogi" label_selected="Nogi" name="Legs"/>
<radio_group name="sex radio">
- <radio_item name="radio" label="Kobieta"/>
- <radio_item name="radio2" label="Mężczyzna"/>
+ <radio_item label="Kobieta" name="radio" value="0"/>
+ <radio_item label="Mężczyzna" name="radio2" value="1"/>
</radio_group>
<text name="title">
[DESC]
@@ -33,9 +35,7 @@
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nowy kształt poprzez przeciągnięcie go ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własny kształt
-z plików roboczych.
+ Załóż nowy kształt poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny kształt z plików roboczych.
</text>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tego kształtu.
@@ -43,15 +43,15 @@ z plików roboczych.
<text name="Item Action Label">
Kształt:
</text>
- <button label="Nowy Kształt" label_selected="Nowy Kształt" name="Create New"/>
+ <button label="Nowy kształt" label_selected="Nowy kształt" name="Create New"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
</panel>
<panel label="Skórka" name="Skin">
- <button label="Kolor Skórki" label_selected="Kolor Skórki" name="Skin Color"/>
- <button label="Detale Twarzy" label_selected="Detale Twarzy" name="Face Detail"/>
+ <button label="Kolor skórki" label_selected="Kolor skórki" name="Skin Color"/>
+ <button label="Detale twarzy" label_selected="Detale twarzy" name="Face Detail"/>
<button label="Makijaż" label_selected="Makijaż" name="Makeup"/>
- <button label="Detale Ciała" label_selected="Detale Ciała" name="Body Detail"/>
+ <button label="Detale ciała" label_selected="Detale ciała" name="Body Detail"/>
<text name="title">
[DESC]
</text>
@@ -68,9 +68,7 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nową skórkę poprzez przeciągnięcie jej ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własną skórkę
-z plików roboczych.
+ Załóż nową skórkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną skórkę z plików roboczych.
</text>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tej skórki.
@@ -78,12 +76,12 @@ z plików roboczych.
<text name="Item Action Label">
Skórka:
</text>
- <texture_picker label="Tatuaże Głowy" name="Head Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
- <texture_picker label="Tatuaże Górne" name="Upper Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
- <texture_picker label="Tatuaże Dolne" name="Lower Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
- <button label="Nowa Skórka" label_selected="Nowa Skórka" name="Create New"/>
+ <texture_picker label="Tatuaże głowy" name="Head Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
+ <texture_picker label="Tatuaże górne" name="Upper Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
+ <texture_picker label="Tatuaże dolne" name="Lower Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
+ <button label="Nowa skórka" label_selected="Nowa skórka" name="Create New"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
<panel label="Włosy" name="Hair">
@@ -107,9 +105,7 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nowe włosy poprzez przeciągnięcie ich ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własne włosy
-z plików roboczych.
+ Załóż nowe włosy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne włosy z plików roboczych.
</text>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tych włosów.
@@ -118,9 +114,9 @@ z plików roboczych.
Włosy:
</text>
<texture_picker label="Tekstura" name="Texture" tool_tip="Kliknij by wybrać teksturę"/>
- <button label="Nowe Włosy" label_selected="Nowe Włosy" name="Create New"/>
+ <button label="Nowe włosy" label_selected="Nowe włosy" name="Create New"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
<panel label="Oczy" name="Eyes">
@@ -140,9 +136,7 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nowe oczy poprzez przeciągnięcie ich ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własne oczy
-z plików roboczych.
+ Załóż nowe oczy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne oczy z plików roboczych.
</text>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tych oczów.
@@ -151,19 +145,21 @@ z plików roboczych.
Oczy:
</text>
<texture_picker label="Tęczówka" name="Iris" tool_tip="Kliknij by wybrać teksturę"/>
- <button label="Nowe Oczy" label_selected="Nowe Oczy" name="Create New"/>
+ <button label="Nowe oczy" label_selected="Nowe oczy" name="Create New"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
- <panel label="Ubrania" name="clothes_placeholder"/>
+ <text label="Ubrania" name="clothes_placeholder">
+ Ubrania
+ </text>
<panel label="Koszula" name="Shirt">
<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
- <button label="Nowa Koszula" label_selected="Nowa Koszula" name="Create New"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
+ <button label="Nowa Koszula" label_selected="Nowa Koszula" name="Create New"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
<text name="title">
[DESC]
@@ -181,9 +177,7 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nową koszulę poprzez przeciągnięcie jej ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własną koszulę
-z plików roboczych.
+ Załóż nową koszulę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną koszulę z plików roboczych.
</text>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tej koszuli.
@@ -194,11 +188,11 @@ z plików roboczych.
</panel>
<panel label="Spodnie" name="Pants">
<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij tutaj by wybrać teksturę"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
- <button label="Nowe Spodnie" label_selected="Nowe Spodnie" name="Create New"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
+ <button label="Nowe spodnie" label_selected="Nowe spodnie" name="Create New"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
<text name="title">
[DESC]
@@ -216,9 +210,7 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nowe spodnie poprzez przeciągnięcie ich ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własne spodnie
-z plików roboczych.
+ Załóż nowe spodnie poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne spodnie z plików roboczych.
</text>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tych spodni.
@@ -244,10 +236,9 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nowe buty poprzez przeciągnięcie ich ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własne buty
-z plików roboczych.
+ Załóż nowe buty poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne buty z plików roboczych.
</text>
+ <button label="Nowe Buty" label_selected="Nowe Buty" name="Create New"/>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tych butów.
</text>
@@ -255,11 +246,10 @@ z plików roboczych.
Buty:
</text>
<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
- <button label="Nowe Buty" label_selected="Nowe Buty" name="Create New"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
<panel label="Skarpety" name="Socks">
@@ -279,10 +269,9 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nowe skarpety poprzez przeciągnięcie ich ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własne skarpety
-z plików roboczych.
+ Załóż nowe skarpety poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne skarpety z plików roboczych.
</text>
+ <button label="Nowe Skarpety" label_selected="Nowe Skarpety" name="Create New"/>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tych skarpet.
</text>
@@ -290,11 +279,10 @@ z plików roboczych.
Skarpetki:
</text>
<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
- <button label="Nowe Skarpety" label_selected="Nowe Skarpety" name="Create New"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
<panel label="Kurtka" name="Jacket">
@@ -314,23 +302,21 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nową kurtkę poprzez przeciągnięcie jej ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własną kurtkę
-z plików roboczych.
+ Załóż nową kurtkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną kurtkę z plików roboczych.
</text>
+ <button label="Nowa Kurtka" label_selected="Nowa Kurtka" name="Create New"/>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tej kurtki.
</text>
<text name="Item Action Label">
Kurtka:
</text>
- <texture_picker label="Górny Materiał" name="Upper Fabric" tool_tip="Kliknij by wybrać teksturę" width="76"/>
- <texture_picker label="Dolny Materiał" name="Lower Fabric" tool_tip="Kliknij by wybrać kolor" width="76"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor" width="76"/>
- <button label="Nowa Kurtka" label_selected="Nowa Kurtka" name="Create New"/>
+ <texture_picker label="Górny materiał" name="Upper Fabric" tool_tip="Kliknij by wybrać teksturę" width="76"/>
+ <texture_picker label="Dolny materiał" name="Lower Fabric" tool_tip="Kliknij by wybrać kolor" width="76"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor" width="76"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
<panel label="Rękawiczki" name="Gloves">
@@ -350,10 +336,9 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nowe rękawiczki poprzez przeciągnięcie ich ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własne rękawiczki
-z plików roboczych.
+ Załóż nowe rękawiczki poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne rękawiczki z plików roboczych.
</text>
+ <button label="Nowe Rękawiczki" label_selected="Nowe Rękawiczki" name="Create New"/>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tych rękawiczek
</text>
@@ -361,11 +346,10 @@ z plików roboczych.
Rękawiczki:
</text>
<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
- <button label="Nowe Rękawiczki" label_selected="Nowe Rękawiczki" name="Create New"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
<panel label="Podkoszulek" name="Undershirt">
@@ -385,10 +369,9 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nowy podkoszulek poprzez przeciągnięcie ich ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własny podkoszulek
-z plików roboczych.
+ Załóż nowy podkoszulek poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny podkoszulek z plików roboczych.
</text>
+ <button label="Nowy Podkoszulek" label_selected="Nowy Podkoszulek" name="Create New"/>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tego podkoszulka.
</text>
@@ -396,11 +379,10 @@ z plików roboczych.
Podkoszulka:
</text>
<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
- <button label="Nowy Podkoszulek" label_selected="Nowy Podkoszulek" name="Create New"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
<panel label="Bielizna" name="Underpants">
@@ -420,10 +402,9 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nową bieliznę poprzez przeciągnięcie jej ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własną bieliznę
-z plików roboczych.
+ Załóż nową bieliznę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną bieliznę z plików roboczych.
</text>
+ <button label="Nowa Bielizna" label_selected="Nowa Bielizna" name="Create New"/>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tej bielizny.
</text>
@@ -431,11 +412,10 @@ z plików roboczych.
Bielizna:
</text>
<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
- <button label="Nowa Bielizna" label_selected="Nowa Bielizna" name="Create New"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
<panel label="Spódnica" name="Skirt">
@@ -455,10 +435,9 @@ z plików roboczych.
Zapisane w [PATH]
</text>
<text name="not worn instructions">
- Załóż nową spódnicę poprzez przeciągnięcie jej ze swojej szafy
-na awatara. Alternatywnie, możesz także stworzyć własną spódnicę
-z plików roboczych.
+ Załóż nową spódnicę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną spódnicę z plików roboczych.
</text>
+ <button label="Nowa Spódnica" label_selected="Nowa Spódnica" name="Create New"/>
<text name="no modify instructions">
Nie posiadasz prawa do modyfikowania tej spódnicy.
</text>
@@ -466,15 +445,85 @@ z plików roboczych.
Spódnica:
</text>
<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
- <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
- <button label="Nowa Spódnica" label_selected="Nowa Spódnica" name="Create New"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
+ <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
+ <button label="Zapisz" label_selected="Zapisz" name="Save"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
+ <button label="Wróć" label_selected="Wróć" name="Revert"/>
+ </panel>
+ <panel label="Tatuaż" name="Tattoo">
+ <text name="title">
+ [DESC]
+ </text>
+ <text name="title_no_modify">
+ [DESC]: nie można modyfikować
+ </text>
+ <text name="title_loading">
+ [DESC]: ładowanie...
+ </text>
+ <text name="title_not_worn">
+ [DESC]: nienałożone
+ </text>
+ <text name="path">
+ Zapisane w [PATH]
+ </text>
+ <text name="not worn instructions">
+ Załóż nowy tatuaż poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny tatuaż z plików roboczych.
+ </text>
+ <button label="Utwórz Nowy Tatuaż" label_selected="Stwórz Nowy Tatuaż" name="Create New"/>
+ <text name="no modify instructions">
+ Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała.
+ </text>
+ <text name="Item Action Label">
+ Tatuaż:
+ </text>
+ <texture_picker label="Tatuaż głowy" name="Head Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Górny tatuaż" name="Upper Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Tatuaż dolnej części ciała" name="Lower Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
+ <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
+ <button label="Zapisz" label_selected="Zapisz" name="Save"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
+ <button label="Wróć" label_selected="Wróć" name="Revert"/>
+ </panel>
+ <panel label="Alpha" name="Alpha">
+ <text name="title">
+ [DESC]
+ </text>
+ <text name="title_no_modify">
+ [DESC]: nie można modyfikować
+ </text>
+ <text name="title_loading">
+ [DESC]: ładowanie...
+ </text>
+ <text name="title_not_worn">
+ [DESC]: nienałożone
+ </text>
+ <text name="path">
+ Zapisane w [PATH]
+ </text>
+ <text name="not worn instructions">
+ Załóż nową maskę alpha poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną z plików roboczych.
+ </text>
+ <button label="Stwórz nową Alpha" label_selected="Utwórz Nową Alpha" name="Create New"/>
+ <text name="no modify instructions">
+ Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała.
+ </text>
+ <text name="Item Action Label">
+ Alpha:
+ </text>
+ <texture_picker label="Dolna Alpha" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Alpha górnej części ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Alpha głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Alpha oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Alpha włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
<button label="Zapisz" label_selected="Zapisz" name="Save"/>
- <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/>
+ <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
<button label="Wróć" label_selected="Wróć" name="Revert"/>
</panel>
</tab_container>
+ <button label="Info o skrypcie" label_selected="Info o skrypcie" name="script_info" tool_tip="Pokaż skrypty przyłączone do Twojego awatara"/>
+ <button label="Stwórz ubranie" label_selected="Stwórz Ubranie" name="make_outfit_btn"/>
<button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
<button label="OK" label_selected="OK" name="Ok"/>
- <button label="Stwórz Ubranie..." label_selected="Stwórz Ubranie..." name="Make Outfit" width="115"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
index 6671bb853e..0cb2114f99 100644
--- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
@@ -62,7 +62,7 @@
<button label="Dodaj" label_selected="Dodaj" name="WLAddKey" />
<button label="Usuń" label_selected="Usuń" name="WLDeleteKey" />
<text name="WLCurKeyFrameText">
- Preferencje Czasu:
+ Preferencje czasu:
</text>
<text name="WLCurKeyTimeText">
Czas:
@@ -78,7 +78,7 @@
</text>
<combo_box label="5 min" name="WLSnapOptions" />
<text name="DayCycleText2">
- Długość Cyklu:
+ Długość cyklu:
</text>
<spinner label="Godz" name="WLLengthOfDayHour" />
<spinner label="Min" name="WLLengthOfDayMin" />
@@ -88,11 +88,11 @@
</text>
<button label="Start" label_selected="Start" name="WLAnimSky" />
<button label="Stop" label_selected="Stop" name="WLStopAnimSky" />
- <button label="Używaj Czasu Regionu" label_selected="Używaj Czasu Regionu"
+ <button label="Używaj czasu regionu" label_selected="Używaj czasu regionu"
name="WLUseLindenTime" />
- <button label="Zapisz Test Dnia" label_selected="Zapisz Test Dnia"
+ <button label="Zapisz test dnia" label_selected="Zapisz test dnia"
name="WLSaveDayCycle" />
- <button label="Załaduj Test Dnia" label_selected="Załaduj Test Dnia"
+ <button label="Załaduj test dnia" label_selected="Załaduj test dnia"
name="WLLoadDayCycle" />
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/pl/floater_device_settings.xml b/indra/newview/skins/default/xui/pl/floater_device_settings.xml
index e79478731d..c485fb2e29 100644
--- a/indra/newview/skins/default/xui/pl/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_device_settings.xml
@@ -1,3 +1,2 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_device_settings"
- title="USTAWIENIA URZÄ„DZEŃ KOMUNIKACJI GÅOSOWEJ" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_device_settings" title="USTAWIENIA URZÄ„DZEŃ KOMUNIKACJI GÅOSOWEJ"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_env_settings.xml b/indra/newview/skins/default/xui/pl/floater_env_settings.xml
index e197d94b27..3ab854fbbb 100644
--- a/indra/newview/skins/default/xui/pl/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_env_settings.xml
@@ -1,26 +1,28 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Environment Editor Floater" title="EDYTOR ÅšRODOWISKA">
+ <floater.string name="timeStr">
+ [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
+ </floater.string>
<text name="EnvTimeText">
Czas
</text>
<text name="EnvTimeText2">
12:00 PM
</text>
- <slider label="" name="EnvTimeSlider" />
+ <slider label="" name="EnvTimeSlider"/>
<text name="EnvCloudText">
Chmury:
</text>
- <slider label="" name="EnvCloudSlider" />
+ <slider label="" name="EnvCloudSlider"/>
<text name="EnvWaterColorText">
- Kolor Wody
+ Kolor wody
</text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Kliknij by wybrać kolor" />
+ <color_swatch label="" name="EnvWaterColor" tool_tip="Kliknij aby wybrać kolor"/>
<text name="EnvWaterFogText">
Zamglenie:
</text>
- <slider label="" name="EnvWaterFogSlider" />
- <button label="Używaj Czasu Regionu" name="EnvUseEstateTimeButton" />
- <button label="Zaawansowane Niebo" name="EnvAdvancedSkyButton" />
- <button label="Zaawansowana Woda" name="EnvAdvancedWaterButton" />
- <button label="?" name="EnvSettingsHelpButton" />
+ <slider label="" name="EnvWaterFogSlider"/>
+ <button label="Używaj czasu regionu" name="EnvUseEstateTimeButton"/>
+ <button label="Zaawansowane niebo" name="EnvAdvancedSkyButton"/>
+ <button label="Zaawansowana woda" name="EnvAdvancedWaterButton"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_event.xml b/indra/newview/skins/default/xui/pl/floater_event.xml
new file mode 100644
index 0000000000..7588493464
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_event.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="IMPREZA" name="Event" title="IMPREZA">
+ <floater.string name="none">
+ żadne
+ </floater.string>
+ <floater.string name="notify">
+ Zawiadom
+ </floater.string>
+ <floater.string name="dont_notify">
+ Nie zawiadamiaj
+ </floater.string>
+ <floater.string name="moderate">
+ Mature
+ </floater.string>
+ <floater.string name="adult">
+ Adult
+ </floater.string>
+ <floater.string name="general">
+ PG
+ </floater.string>
+ <floater.string name="unknown">
+ Nieznana
+ </floater.string>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <text name="event_name">
+ Brak nazwy dla wydarzenia.
+ </text>
+ <text name="event_category">
+ (bez kategorii)
+ </text>
+ <text name="event_runby_label">
+ Prowadzona przez:
+ </text>
+ <text initial_value="(przetwarzanie)" name="event_runby"/>
+ <text name="event_date_label">
+ Data:
+ </text>
+ <text name="event_date">
+ 10/10/2010
+ </text>
+ <text name="event_duration_label">
+ Długość:
+ </text>
+ <text name="event_duration">
+ 1 godzina
+ </text>
+ <text name="event_covercharge_label">
+ Opłata:
+ </text>
+ <text name="event_cover">
+ Bez opłaty
+ </text>
+ <text name="event_location_label">
+ Lokalizacja:
+ </text>
+ <text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
+ <text name="rating_label" value="Rodzaj:"/>
+ <text name="rating_value" value="nieznane"/>
+ <expandable_text name="event_desc">
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </expandable_text>
+ </layout_panel>
+ <layout_panel name="button_panel">
+ <button name="create_event_btn" tool_tip="Stwórz Imprezę"/>
+ <button name="god_delete_event_btn" tool_tip="Skasuj ImprezÄ™"/>
+ <button label="Zawiadom mnie" name="notify_btn"/>
+ <button label="Teleportuj" name="teleport_btn"/>
+ <button label="Mapa" name="map_btn"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_gesture.xml b/indra/newview/skins/default/xui/pl/floater_gesture.xml
index 4685eb6afe..750a9e4a66 100644
--- a/indra/newview/skins/default/xui/pl/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/pl/floater_gesture.xml
@@ -1,16 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="AKTYWNE GESTY">
- <text name="help_label">
- Kliknij podwójnie by aktywować głos i animację gestu.
- </text>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Miejsca" name="gestures" title="GESTY">
+ <floater.string name="loading">
+ Åadowanie...
+ </floater.string>
+ <floater.string name="playing">
+ (Odtwarzanie)
+ </floater.string>
+ <floater.string name="copy_name">
+ Kopia [COPY_NAME]
+ </floater.string>
<scroll_list name="gesture_list">
- <column label="Aktywuj" name="trigger" />
- <column label="Klucz" name="shortcut" />
- <column label="" name="key" />
- <column label="Nazwa" name="name" />
+ <scroll_list.columns label="Nazwa" name="name"/>
+ <scroll_list.columns label="Czat" name="trigger"/>
+ <scroll_list.columns label="" name="key"/>
+ <scroll_list.columns label="Klucz" name="shortcut"/>
</scroll_list>
- <button label="Nowy" name="new_gesture_btn" />
- <button label="Edytuj" name="edit_btn" />
- <button label="Odtwarzaj" name="play_btn" />
- <button label="Zatrzymaj" name="stop_btn" />
+ <panel label="bottom_panel" name="bottom_panel">
+ <menu_button name="gear_btn" tool_tip="Więcej opcji"/>
+ <button name="new_gesture_btn" tool_tip="Stwórz nową gesturę"/>
+ <button name="activate_btn" tool_tip="Aktywuj/Dezaktywuj wybrany gest"/>
+ <button name="del_btn" tool_tip="Usuń gest"/>
+ </panel>
+ <button label="Edytuj" name="edit_btn"/>
+ <button label="Odtwarzaj" name="play_btn"/>
+ <button label="Zatrzymaj" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_god_tools.xml b/indra/newview/skins/default/xui/pl/floater_god_tools.xml
index a3ccffac03..4d49c32fc1 100644
--- a/indra/newview/skins/default/xui/pl/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_god_tools.xml
@@ -2,26 +2,25 @@
<floater name="godtools floater" title="BOSKIE NARZĘDZIA">
<tab_container name="GodTools Tabs">
<panel label="Grid" name="grid">
- <button width="205" label="Usuń wszystkich użytkowników" label_selected="Usuń wszystkich użytkowników" name="Kick all users"/>
- <button width="285" label="Wyrównaj Widoczność Buforu Mapy Regionu" label_selected="Wyrównaj Widoczność Buforu Mapy Regionu" name="Flush This Region&apos;s Map Visibility Caches"/>
+ <button label="Wyrzuć wszystkich Rezydentów" label_selected="Wyrzuć wszystkich Rezydentów" name="Kick all users" width="205"/>
+ <button label="Wyrównaj widoczność buforu mapy Regionu" label_selected="Wyrównaj widoczność buforu mapy Regionu" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
</panel>
<panel label="Region" name="region">
<text name="Sim Name:" width="100">
Nazwa Symulatora:
</text>
- <line_editor left="115" name="region name" width="178" />
- <line_editor name="region name"/>
- <check_box label="Wstęp" name="check prelude" />
+ <line_editor left="115" name="region name" width="178"/>
+ <check_box label="Wstęp" name="check prelude" tool_tip="Set this to make the region a prelude"/>
<check_box label="Korekta Słońca" name="check fixed sun" tool_tip="Skorektuj ustawienia pozycji słońca."/>
- <check_box height="32" label="Zresetuj PozycjÄ™ &#10;Miejsca Startowego" name="check reset home" />
- <check_box bottom_delta="-32" label="Widoczny" name="check visible" tool_tip="Wybierz tę opcję by ustawić region widocznym dla wszystkich."/>
+ <check_box height="32" label="Zresetuj pozycję Miejsca Startowego" name="check reset home" tool_tip="Zresetuj miejsce startu Rezydentów po teleportacji"/>
+ <check_box bottom_delta="-32" label="Widoczny" name="check visible" tool_tip="Wybierz tą opcję by ustawić region widocznym dla wszystkich."/>
<check_box label="Zniszczenia" name="check damage" tool_tip="Wybierz tę opcję by uruchomić opcję zniszczeń w regionie."/>
- <check_box label="Zablokuj Monitorowanie Trafficu" name="block dwell" tool_tip="Wybierz tę opcję by zablokować monitorowanie trafficu w regionie."/>
- <check_box label="Zablokuj Terraformowanie" name="block terraform" tool_tip="Wybierz tę opcję by zablokować terraforming w regionie"/>
- <check_box label="Piaskownica" name="is sandbox" />
- <button width="138" label="Ustal Teren" label_selected="Ustal Teren" name="Bake Terrain" tool_tip="Zapamiętaj obecny teren jako początkowy dla cofnięcia modyfikacji terenu."/>
- <button width="138" label="Cofnięcie Modyfikacji" label_selected="Cofnięcie Modyfikacji" name="Revert Terrain" tool_tip="Przywróć Ustawienia Domyślne Regionu."/>
- <button width="138" label="Zamień Teren" label_selected="Zamień Teren" name="Swap Terrain" />
+ <check_box label="Zablokuj Monitorowanie Trafficu" name="block dwell" tool_tip="Wybierz tą opcję by zablokować monitorowanie trafficu w regionie."/>
+ <check_box label="Zablokuj Terraformowanie" name="block terraform" tool_tip="Wybierz tą opcję by zablokować terraforming w regionie"/>
+ <check_box label="Piaskownica" name="is sandbox" tool_tip="Toggle whether this is a sandbox region"/>
+ <button label="Ustal teren" label_selected="Ustal teren" name="Bake Terrain" tool_tip="Zapamiętaj obecny teren jako początkowy dla cofnięcia modyfikacji terenu." width="138"/>
+ <button label="Cofnięcie modyfikacji" label_selected="Cofnięcie modyfikacji" name="Revert Terrain" tool_tip="Przywróć ustawienia domyślne Regionu." width="138"/>
+ <button label="Zamień teren" label_selected="Zamień teren" name="Swap Terrain" tool_tip="Swap current terrain with default" width="138"/>
<text name="estate id">
ID Regionu:
</text>
@@ -33,46 +32,46 @@
<text name="Grid Pos: ">
Pozycje Gridu:
</text>
- <line_editor name="gridposx" tool_tip="Pozycja x gridu dla regionu" left_delta="110" width="35" />
- <line_editor name="gridposy" tool_tip="Pozycja y gridu dla regionu" left_delta="45" width="35" />
+ <line_editor left_delta="110" name="gridposx" tool_tip="Pozycja x gridu dla regionu" width="35"/>
+ <line_editor left_delta="45" name="gridposy" tool_tip="Pozycja y gridu dla regionu" width="35"/>
<text name="Redirect to Grid: ">
Przełącz do gridu:
</text>
- <line_editor left_delta="110" name="redirectx" width="35" />
- <line_editor left_delta="45" name="redirecty" width="35" />
- <spinner name="billable factor"/>
+ <line_editor left_delta="110" name="redirectx" width="35"/>
+ <line_editor left_delta="45" name="redirecty" width="35"/>
<text name="billable factor text">
- Czynnik Płatności:
+ Czynnik płatności:
</text>
- <spinner name="land cost"/>
+ <spinner name="billable factor"/>
<text name="land cost text">
L$/m²:
</text>
- <button label="Odśwież" label_selected="Odśwież" name="Refresh" />
- <button label="Zastosuj" label_selected="Zastosuj" name="Apply" />
- <button width="150" left="156" label="Wybierz Region" label_selected="Wybierz Region" name="Select Region" tool_tip="Wybierz cały region za pomocą narzędzi edycji terenu"/>
- <button width="150" left="156" label="Automatyczne Zapisanie" label_selected="Automatyczne Zapisanie" name="Autosave now" />
+ <spinner name="land cost"/>
+ <button label="Odśwież" label_selected="Odśwież" name="Refresh" tool_tip="Click here to refresh the above information"/>
+ <button label="Zastosuj" label_selected="Zastosuj" name="Apply" tool_tip="Click here to apply any changes from above"/>
+ <button label="Wybierz Region" label_selected="Wybierz Region" left="156" name="Select Region" tool_tip="Wybierz cały Region za pomocą narzędzi edycji terenu" width="150"/>
+ <button label="Automatyczne zapisanie" label_selected="Automatyczne zapisanie" left="156" name="Autosave now" tool_tip="Save gzipped state to autosave directory" width="150"/>
</panel>
<panel label="Obiekty" name="objects">
<text name="Sim Name:" width="105">
Nazwa Symulatora:
</text>
- <text name="region name" left_delta="110">
+ <text left_delta="110" name="region name">
Welsh
</text>
- <check_box label="Wyłącz Skrypty" name="disable scripts" />
- <check_box label="Deaktywuj Kolizje" name="disable collisions" />
- <check_box label="WylÄ…cz FizykÄ™" name="disable physics" />
- <button label="Zastosuj" label_selected="Zastosuj" name="Apply" />
- <button label="Ustaw Cel" label_selected="Set Target" name="Set Target" />
+ <check_box label="Wyłącz skrypty" name="disable scripts" tool_tip="Set this to disable all scripts in this region"/>
+ <check_box label="Deaktywuj kolizje" name="disable collisions" tool_tip="Set this to disable non-agent collisions in this region"/>
+ <check_box label="WylÄ…cz fizykÄ™" name="disable physics" tool_tip="Set this to disable all physics in this region"/>
+ <button label="Zastosuj" label_selected="Zastosuj" name="Apply" tool_tip="Click here to apply any changes from above"/>
+ <button label="Ustaw Cel" label_selected="Set Target" name="Set Target" tool_tip="Set the target avatar for object deletion"/>
<text name="target_avatar_name">
(brak)
</text>
- <button label="Usuń cel z oskryptowanych obiektów na innych posiadłościach" label_selected="Usuń cel &apos;s skryptowane obiekty na innych posiadłościach" name="Delete Target&apos;s Scripted Objects On Others Land" />
- <button label="Usuń cel z oskryptowanych obiektów na jakichkolwiek posiadłościach" label_selected="Usuń cel &apos;s skryptowane obiekty na jakichkolwiek posiadłościach" name="Delete Target&apos;s Scripted Objects On *Any* Land" />
- <button label="Usuń wszystkie cele i obiekty" label_selected="Usuń wszystkie cele i obiekty" name="Delete *ALL* Of Target&apos;s Objects" />
- <button label="Główne Kolizje" label_selected="Główne Kolizje" name="Get Top Colliders" />
- <button label="Główne Skrypty" label_selected="Główne Skrypty" name="Get Top Scripts" />
+ <button label="Usuń cel z oskryptowanych obiektów na innych posiadłościach" label_selected="Usuń cel &apos;s skryptowane obiekty na innych posiadłościach" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Delete all scripted objects owned by the target on land not owned by the target. (no copy) objects will be returned."/>
+ <button label="Usuń cel z oskryptowanych obiektów na jakichkolwiek posiadłościach" label_selected="Usuń cel &apos;s skryptowane obiekty na jakichkolwiek posiadłościach" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Delete all scripted objects owned by the target in this region. (no copy) objects will be returned."/>
+ <button label="Usuń wszystkie cele i obiekty" label_selected="Usuń wszystkie cele i obiekty" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Delete all objects owned by the target in this region. (no copy) objects will be returned."/>
+ <button label="Główne kolizje" label_selected="Główne kolizje" name="Get Top Colliders" tool_tip="Gets list of objects experiencing the most narrowphase callbacks"/>
+ <button label="Główne skrypty" label_selected="Główne skrypty" name="Get Top Scripts" tool_tip="Gets list of objects spending the most time running scripts"/>
<button label="Treść skryptów" label_selected="Treść skryptów" name="Scripts digest" tool_tip="Wyświetla listę wszystkich skryptów i liczbę ich zastosowań."/>
</panel>
<panel label="Zażądaj" name="request">
@@ -80,17 +79,17 @@
Cel:
</text>
<combo_box name="destination">
- <combo_box.item name="item1" label="Selekcja" />
- <combo_box.item name="item2" label="Agent Regionu" />
+ <combo_box.item label="Selekcja" name="item1"/>
+ <combo_box.item label="Agent Regionu" name="item2"/>
</combo_box>
<text name="Request:">
Żądanie:
</text>
<combo_box name="request">
- <combo_box.item name="item1" label="kolidery &lt;kroki&gt;" />
- <combo_box.item name="item2" label="skrypty &lt;policz&gt;,&lt;opcjonalnie powtórzenie&gt;" />
- <combo_box.item name="item3" label="obiekty &lt;powtórzenia&gt;" />
- <combo_box.item name="item4" label="rez &lt;asset_id&gt;" />
+ <combo_box.item label="kolidery &lt;kroki&gt;" name="item1"/>
+ <combo_box.item label="skrypty &lt;policz&gt;,&lt;opcjonalnie powtórzenie&gt;" name="item2"/>
+ <combo_box.item label="obiekty &lt;powtórzenia&gt;" name="item3"/>
+ <combo_box.item label="rez &lt;asset_id&gt;" name="item4"/>
</combo_box>
<text name="Parameter:">
Parameter:
diff --git a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
index 39695a67b6..bd5dd7e7d2 100644
--- a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Hardware Settings Floater" title="USTAWIENIA SPRZĘTOWE">
<text name="Filtering:">
Filtrowanie:
</text>
- <check_box label="Filtrowanie Anizotropowe" name="ani" />
+ <check_box label="Filtr anizotropowy" name="ani"/>
<text name="Antialiasing:">
- Antialiasing:
+ Antyaliasing:
</text>
<combo_box label="Antialiasing" name="fsaa" width="84">
- <combo_box.item name="FSAADisabled" label="Wyłączone" />
- <combo_box.item name="2x" label="2x" />
- <combo_box.item name="4x" label="4x" />
- <combo_box.item name="8x" label="8x" />
- <combo_box.item name="16x" label="16x" />
+ <combo_box.item label="Wyłączone" name="FSAADisabled"/>
+ <combo_box.item label="2x" name="2x"/>
+ <combo_box.item label="4x" name="4x"/>
+ <combo_box.item label="8x" name="8x"/>
+ <combo_box.item label="16x" name="16x"/>
</combo_box>
- <spinner label="Gamma:" name="gamma" />
+ <spinner label="Gamma:" name="gamma"/>
<text name="(brightness, lower is brighter)">
- (jaskrawość, mniej jest jaśniej, 0=domyślny)
+ (0=domyślna jaskrawość, niższa wartość=jaśniej)
</text>
<text name="Enable VBO:">
Włącz VBO:
</text>
- <check_box label="Włącz Bufor Vertexów OpenGL" name="vbo" tool_tip="" />
- <slider label="Pamięć Tekstur (MB):" name="GrapicsCardTextureMemory" tool_tip="" />
- <spinner label="Stosunek Dystansu Mgły:" name="fog" />
- <button label="OK" label_selected="OK" name="OK" />
+ <check_box initial_value="true" label="Włącz rozszerzenie OpenGL" name="vbo" tool_tip=""/>
+ <slider label="Pamięć na tekstury (MB):" name="GraphicsCardTextureMemory" tool_tip="Ilość alokacji pamięci dla tekstur. Domyślne dla karty pamięci video. Obniżenie poziomu tych funkcji może polepszyć wydajność systemową jednak spowoduje zmniejszenie jakości i wyrazistości tekstur."/>
+ <spinner label="Stosunek dystansu mgły:" name="fog"/>
+ <button label="OK" label_selected="OK" name="OK"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_help_browser.xml b/indra/newview/skins/default/xui/pl/floater_help_browser.xml
new file mode 100644
index 0000000000..dfd5f907e5
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_help_browser.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_help_browser" title="PRZEGLĄDARKA POMOCY">
+ <floater.string name="loading_text">
+ Åadowanie...
+ </floater.string>
+ <layout_stack name="stack1">
+ <layout_panel name="external_controls"/>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_hud.xml b/indra/newview/skins/default/xui/pl/floater_hud.xml
index ff2d702132..a5d85aca4e 100644
--- a/indra/newview/skins/default/xui/pl/floater_hud.xml
+++ b/indra/newview/skins/default/xui/pl/floater_hud.xml
@@ -1,2 +1,2 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="SAMOUCZEK" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_hud" title="SAMOUCZEK"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_im.xml b/indra/newview/skins/default/xui/pl/floater_im.xml
index 67c9d13496..e40935ccb7 100644
--- a/indra/newview/skins/default/xui/pl/floater_im.xml
+++ b/indra/newview/skins/default/xui/pl/floater_im.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="Wiadomość (IM)">
<string name="only_user_message">
- JesteÅ› jedynÄ… osobÄ… w tej konferencji.
+ JesteÅ› jedynym uczestnikiem tej konferencji.
</string>
<string name="offline_message">
[FIRST] [LAST] - ta osoba jest obecnie niedostępna.
@@ -10,7 +10,7 @@
Kliknij na [BUTTON NAME] przycisk by zaakceptować/dołączyć do tej rozmowy.
</string>
<string name="muted_message">
- Ten Rezydent jest przez Ciebie wyciszony. Wysyłanie wiadomości automatycznie wyłączy tryb wyciszenia.
+ Zablokowałeś tego Rezydenta. Wysłanie wiadomości automatycznie odblokuje go.
</string>
<string name="generic_request_error">
Błąd. Spróbuj ponownie za kilka minut.
@@ -31,7 +31,7 @@
Moderator wyciszył Cię.
</string>
<string name="add_session_event">
- Nie można dodać nikogo do czatu z [RECIPIENT].
+ Niemożliwość dodania Rezydentów do tej konferencji z [RECIPIENT].
</string>
<string name="message_session_event">
Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT].
diff --git a/indra/newview/skins/default/xui/pl/floater_im_container.xml b/indra/newview/skins/default/xui/pl/floater_im_container.xml
new file mode 100644
index 0000000000..ddf0790fa8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_im_container.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<multi_floater name="floater_im_box" title="ROZMOWY"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_im_session.xml b/indra/newview/skins/default/xui/pl/floater_im_session.xml
new file mode 100644
index 0000000000..db513f787c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_im_session.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="panel_im">
+ <layout_stack name="im_panels">
+ <layout_panel label="Panel kontroli wiadomości prywatnej (IM)" name="panel_im_control_panel"/>
+ <layout_panel>
+ <line_editor label="Do" name="chat_editor"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_image_preview.xml b/indra/newview/skins/default/xui/pl/floater_image_preview.xml
index 27f898a66b..a27e8ffed3 100644
--- a/indra/newview/skins/default/xui/pl/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_image_preview.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Image Preview" title="">
<text name="name_label">
Nazwa:
@@ -10,23 +10,23 @@
Wyświetl obraz jako:
</text>
<combo_box label="Rodzaj Ubrania" name="clothing_type_combo">
- <combo_box.item name="Image" label="Obraz" />
- <combo_box.item name="Hair" label="Włosy" />
- <combo_box.item name="FemaleHead" label="Damska Głowa" />
- <combo_box.item name="FemaleUpperBody" label="Damska Górna Część Ciała" />
- <combo_box.item name="FemaleLowerBody" label="Damska Górna Część Ciała" />
- <combo_box.item name="MaleHead" label="Męska Głowa" />
- <combo_box.item name="MaleUpperBody" label="Męska Górna Część Ciała" />
- <combo_box.item name="MaleLowerBody" label="Męska Dolna Część Ciała" />
- <combo_box.item name="Skirt" label="Spódnica" />
- <combo_box.item name="SculptedPrim" label="Sculpt" />
+ <combo_box.item label="Obraz" name="Image"/>
+ <combo_box.item label="Włosy" name="Hair"/>
+ <combo_box.item label="Damska głowa" name="FemaleHead"/>
+ <combo_box.item label="Damska górna część ciała" name="FemaleUpperBody"/>
+ <combo_box.item label="Damska górna część ciała" name="FemaleLowerBody"/>
+ <combo_box.item label="Męska głowa" name="MaleHead"/>
+ <combo_box.item label="Męska górna część ciała" name="MaleUpperBody"/>
+ <combo_box.item label="Męska dolna część ciała" name="MaleLowerBody"/>
+ <combo_box.item label="Spódnica" name="Skirt"/>
+ <combo_box.item label="Prim sculptowy" name="SculptedPrim"/>
</combo_box>
<text name="bad_image_text">
Nie można wczytać obrazu.
Spróbuj zapisać obraz jako 24 bitową Targa (.tga).
</text>
- <check_box label="Użyj kompresji bez strat" name="lossless_check" />
- <button label="Anuluj" name="cancel_btn" />
- <button label="Załaduj ([AMOUNT]L$)" name="ok_btn" />
+ <check_box label="Użyj kompresji bez strat" name="lossless_check"/>
+ <button label="Anuluj" name="cancel_btn"/>
+ <button label="Załaduj ([AMOUNT]L$)" name="ok_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_incoming_call.xml b/indra/newview/skins/default/xui/pl/floater_incoming_call.xml
new file mode 100644
index 0000000000..e5ec3804ae
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_incoming_call.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="incoming call" title="DZWONI NIEZNANA OSOBA">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
+ <floater.string name="localchat">
+ Rozmowy głosowe w pobliżu
+ </floater.string>
+ <floater.string name="anonymous">
+ anonimowy
+ </floater.string>
+ <floater.string name="VoiceInviteP2P">
+ dzwoni.
+ </floater.string>
+ <floater.string name="VoiceInviteAdHoc">
+ rozpoczął rozmowę głosową w czacie konferencji.
+ </floater.string>
+ <floater.string name="VoiceInviteGroup">
+ zaczyna rozmowÄ™ z grupÄ… [GROUP].
+ </floater.string>
+ <text name="question">
+ Czy chcesz opuścić [CURRENT_CHAT] i dołączyć do tej rozmowy głosowej?
+ </text>
+ <button label="Zaakceptuj" label_selected="Zaakceptuj" name="Accept"/>
+ <button label="Odmów" label_selected="Odmów" name="Reject"/>
+ <button label="Rozpocznij IM" name="Start IM"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_inspect.xml b/indra/newview/skins/default/xui/pl/floater_inspect.xml
index c98e0541d8..2c66f2851d 100644
--- a/indra/newview/skins/default/xui/pl/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inspect.xml
@@ -1,13 +1,14 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="inspect" title="INSPEKCJA OBIEKTÓW">
+ <floater.string name="timeStamp">
+ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+ </floater.string>
<scroll_list name="object_list" tool_tip="">
- <column label="Nazwa" name="object_name" />
- <column label="Właściciel" name="owner_name" />
- <column label="Twórca" name="creator_name" />
- <column label="Data Kreacji" name="creation_date" />
+ <scroll_list.columns label="Nazwa" name="object_name"/>
+ <scroll_list.columns label="Właściciel" name="owner_name"/>
+ <scroll_list.columns label="Twórca" name="creator_name"/>
+ <scroll_list.columns label="Data kreacji" name="creation_date"/>
</scroll_list>
- <button label="Profil Właściciela..." label_selected="" name="button owner"
- tool_tip="" />
- <button label="Profil Twórcy..." label_selected="" name="button creator"
- tool_tip="" />
+ <button label="Profil Właściciela..." label_selected="" name="button owner" tool_tip=""/>
+ <button label="Profil Twórcy..." label_selected="" name="button creator" tool_tip=""/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory.xml b/indra/newview/skins/default/xui/pl/floater_inventory.xml
index 157be76c4d..0dc4d5b96d 100644
--- a/indra/newview/skins/default/xui/pl/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory.xml
@@ -1,47 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Inventory" title="MOJA SZAFA">
- <search_editor label="Wyszukiwarka" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="Wszystkie Obiekty" name="All Items"/>
- <inventory_panel label="Nowe Obiekty" name="Recent Items"/>
- </tab_container>
- <menu_bar name="Inventory Menu">
- <menu label="Plik" name="File">
- <menu_item_call label="Otwórz" name="Open"/>
- <menu_item_call label="Nowe Okno" name="New Window"/>
- <menu_item_call label="Pokaż Filtr" name="Show Filters"/>
- <menu_item_call label="Zresetuj Filtr" name="Reset Current"/>
- <menu_item_call label="Zamknij Wszystkie Foldery" name="Close All Folders"/>
- <menu_item_call label="Opróżnij Kosz" name="Empty Trash"/>
- </menu>
- <menu label="Stwórz" name="Create">
- <menu_item_call label="Nowy Folder" name="New Folder"/>
- <menu_item_call label="Nowy Skrypt" name="New Script"/>
- <menu_item_call label="NowÄ… NotÄ™" name="New Note"/>
- <menu_item_call label="Nowy Gest" name="New Gesture"/>
- <menu name="New Clothes">
- <menu_item_call label="Nowa Koszula" name="New Shirt"/>
- <menu_item_call label="Nowe Spodnie" name="New Pants"/>
- <menu_item_call label="Nowe Buty" name="New Shoes"/>
- <menu_item_call label="Nowe Skarpety" name="New Socks"/>
- <menu_item_call label="Nowa Kurtka" name="New Jacket"/>
- <menu_item_call label="Nowa Spódnica" name="New Skirt"/>
- <menu_item_call label="Nowe Rękawiczki" name="New Gloves"/>
- <menu_item_call label="Nowy Podkoszulek" name="New Undershirt"/>
- <menu_item_call label="Nowa Bielizna" name="New Underpants"/>
- </menu>
- <menu name="New Body Parts">
- <menu_item_call label="Nowy Kształt" name="New Shape"/>
- <menu_item_call label="Nową Skórkę" name="New Skin"/>
- <menu_item_call label="Nowe Włosy" name="New Hair"/>
- <menu_item_call label="Nowe Oczy" name="New Eyes"/>
- </menu>
- </menu>
- <menu label="PorzÄ…dkuj" name="Sort">
- <menu_item_check label="Według Nazwy" name="By Name"/>
- <menu_item_check label="Według Daty" name="By Date"/>
- <menu_item_check label="Foldery Zawsze Według Nazwy" name="Folders Always By Name"/>
- <menu_item_check label="Ułożenie Folderów od Góry" name="System Folders To Top"/>
- </menu>
- </menu_bar>
+ <floater.string name="Title">
+ MOJA SZAFA
+ </floater.string>
+ <floater.string name="TitleFetching">
+ MOJA SZAFA (Dostarczanie [ITEM_COUNT] obiektów...) [FILTER]
+ </floater.string>
+ <floater.string name="TitleCompleted">
+ MOJA SZAFA ([ITEM_COUNT] Obiektów) [FILTER]
+ </floater.string>
+ <floater.string name="Fetched">
+ Dostarczono
+ </floater.string>
+ <panel label="Panel Moja Szafa" name="Inventory Panel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
index 665172dd49..1e63987585 100644
--- a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
@@ -1,5 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="item properties" title="WÅAÅšCIWOÅšCI OBIEKTÓW W SZAFIE">
+ <floater.string name="unknown">
+ (nieznany)
+ </floater.string>
+ <floater.string name="public">
+ (publiczny)
+ </floater.string>
+ <floater.string name="you_can">
+ Opcje:
+ </floater.string>
+ <floater.string name="owner_can">
+ Właściciel może:
+ </floater.string>
+ <floater.string name="acquiredDate">
+ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+ </floater.string>
<text name="LabelItemNameTitle">
Nazwa:
</text>
@@ -12,14 +27,14 @@
<text name="LabelCreatorName">
Nicole Linden
</text>
- <button label="Profil..." label_selected="" name="BtnCreator" />
+ <button label="Profil..." label_selected="" name="BtnCreator"/>
<text name="LabelOwnerTitle">
Właściciel:
</text>
<text name="LabelOwnerName">
Thrax Linden
</text>
- <button label="Profil..." label_selected="" name="BtnOwner" />
+ <button label="Profil..." label_selected="" name="BtnOwner"/>
<text name="LabelAcquiredTitle">
Nabyte:
</text>
@@ -27,55 +42,32 @@
Wed May 24 12:50:46 2006
</text>
<text name="OwnerLabel">
- Opcje:
- </text>
- <check_box label="Modyfikuj" name="CheckOwnerModify" />
- <check_box label="Kopiuj" name="CheckOwnerCopy" />
- <check_box label="Sprzedaj/Oddaj" name="CheckOwnerTransfer" />
- <text name="BaseMaskDebug">
- P:
- </text>
- <text name="OwnerMaskDebug">
- W:
+ Ty:
</text>
- <text name="GroupMaskDebug">
- G:
+ <check_box label="Edytuj" name="CheckOwnerModify"/>
+ <check_box label="Kopiuj" name="CheckOwnerCopy"/>
+ <check_box label="Odsprzedaż" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ Każdy:
</text>
- <text name="EveryoneMaskDebug">
- W:
+ <check_box label="Kopiuj" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ Grupa:
</text>
- <text name="NextMaskDebug">
- N:
- </text>
- <check_box label="Udostępnij grupie" name="CheckShareWithGroup" />
- <check_box label="Udostępnij kopiowanie każdemu" name="CheckEveryoneCopy" />
+ <check_box label="Udostępnij" name="CheckShareWithGroup"/>
<text name="NextOwnerLabel">
- Następna Osoba:
- </text>
- <check_box label="Modyfikuje" name="CheckNextOwnerModify" />
- <check_box label="Kopiuje" name="CheckNextOwnerCopy" />
- <check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" />
- <text name="SaleLabel">
- Zaznacz Artykuł:
+ Następny właściciel:
+ </text>
+ <check_box label="Edytuj" name="CheckNextOwnerModify"/>
+ <check_box label="Kopiuje" name="CheckNextOwnerCopy"/>
+ <check_box label="Odsprzedaż" name="CheckNextOwnerTransfer"/>
+ <check_box label="Sprzedaż" name="CheckPurchase"/>
+ <combo_box name="combobox sale copy">
+ <combo_box.item label="Kopiuj" name="Copy"/>
+ <combo_box.item label="Oryginalny" name="Original"/>
+ </combo_box>
+ <spinner label="Cena:" name="Edit Cost"/>
+ <text name="CurrencySymbol">
+ L$
</text>
- <check_box label="Sprzedaż" name="CheckPurchase" />
- <radio_group name="RadioSaleType">
- <radio_item name="radio" label="Oryginał" />
- <radio_item name="radio2" label="Kopia" />
- </radio_group>
- <text name="TextPrice">
- Cena: L$
- </text>
- <string name="unknown">
- (nieznany)
- </string>
- <string name="public">
- (publiczny)
- </string>
- <string name="you_can">
- Opcje:
- </string>
- <string name="owner_can">
- Właściciel może:
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
index 9204262304..bd7b221c5d 100644
--- a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
@@ -4,7 +4,7 @@
<check_box label="Wizytówki" name="check_calling_card" />
<check_box label="Ubrania" name="check_clothing" />
<check_box label="Gesty" name="check_gesture" />
- <check_box label="Zakładki Miejsc" name="check_landmark" />
+ <check_box label="Landmarki" name="check_landmark" />
<check_box label="Noty" name="check_notecard" />
<check_box label="Obiekty" name="check_object" />
<check_box label="Skrypty" name="check_script" />
diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml
index 22ac458b85..78742c39d1 100644
--- a/indra/newview/skins/default/xui/pl/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml
@@ -1,110 +1,110 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" width="590" title="KONFIGURACJA JOYSTICKA">
- <check_box name="enable_joystick" label="Aktywuj Joystick:"/>
+<floater name="Joystick" title="KONFIGURACJA JOYSTICKA" width="590">
+ <check_box label="Aktywuj Joystick:" name="enable_joystick"/>
<text left="130" name="joystick_type" width="360"/>
- <spinner label="Kalibracja Osi X" left="20" width="170" label_width="130" name="JoystickAxis1"/>
- <spinner label="Kalibracja Osi Y" left="210" width="170" label_width="130" name="JoystickAxis2" />
- <spinner label="Kalibracja Osi Z" left="400" width="170" label_width="130" name="JoystickAxis0" />
- <spinner label="Kalibracja Wznoszenia" left="20" width="170" label_width="130" name="JoystickAxis4" />
- <spinner label="Kalibracja Wychylania" left="210" width="170" label_width="130" name="JoystickAxis5" />
- <spinner label="Kalibracja Obrotu" left="400" width="170" label_width="130" name="JoystickAxis3"/>
- <spinner label="Kalibracja Powiększania" width="170" label_width="130" name="JoystickAxis6" />
- <check_box label="Bezpośrednie" left="205" name="ZoomDirect" />
- <check_box label="Kursor 3D" left="340" name="Cursor3D" />
- <check_box label="Automatyczne" left="450" name="AutoLeveling" />
- <text left="22" name="Control Modes:">
+ <spinner label="Kalibracja Osi X" label_width="130" left="20" name="JoystickAxis1" width="170"/>
+ <spinner label="Kalibracja Osi Y" label_width="130" left="210" name="JoystickAxis2" width="170"/>
+ <spinner label="Kalibracja Osi Z" label_width="130" left="400" name="JoystickAxis0" width="170"/>
+ <spinner label="Kalibracja wznoszenia" label_width="130" left="20" name="JoystickAxis4" width="170"/>
+ <spinner label="Kalibracja wychylania" label_width="130" left="210" name="JoystickAxis5" width="170"/>
+ <spinner label="Kalibracja obrotu" label_width="130" left="400" name="JoystickAxis3" width="170"/>
+ <spinner label="Kalibracja powiększania" label_width="130" name="JoystickAxis6" width="170"/>
+ <check_box label="Bezpośrednie" left="205" name="ZoomDirect"/>
+ <check_box label="Kursor 3D" left="340" name="Cursor3D"/>
+ <check_box label="Automatyczne" left="450" name="AutoLeveling"/>
+ <text left="22" name="Control Modes:">
Kontroluj:
</text>
- <check_box left="130" width="90" name="JoystickAvatarEnabled" label="Awatara"/>
- <check_box left="205" width="90" name="JoystickBuildEnabled" label="Budowanie"/>
- <check_box left="282" width="90" name="JoystickFlycamEnabled" label="KamerÄ™ podczas latania"/>
- <text width="104" name="XScale">
+ <check_box label="Awatara" left="130" name="JoystickAvatarEnabled" width="90"/>
+ <check_box label="Budowanie" left="205" name="JoystickBuildEnabled" width="90"/>
+ <check_box label="KamerÄ™ podczas latania" left="282" name="JoystickFlycamEnabled" width="90"/>
+ <text name="XScale" width="104">
Skala X
</text>
- <spinner left="133" name="AvatarAxisScale1" />
- <spinner left="208" name="BuildAxisScale1" />
- <spinner left="283" name="FlycamAxisScale1" />
- <text width="104" name="YScale">
+ <spinner left="133" name="AvatarAxisScale1"/>
+ <spinner left="208" name="BuildAxisScale1"/>
+ <spinner left="283" name="FlycamAxisScale1"/>
+ <text name="YScale" width="104">
Skala Y
</text>
- <spinner left="133" name="AvatarAxisScale2" />
- <spinner left="208" name="BuildAxisScale2" />
- <spinner left="283" name="FlycamAxisScale2" />
- <text width="104" name="ZScale">
+ <spinner left="133" name="AvatarAxisScale2"/>
+ <spinner left="208" name="BuildAxisScale2"/>
+ <spinner left="283" name="FlycamAxisScale2"/>
+ <text name="ZScale" width="104">
Skala Z
</text>
- <spinner left="133" name="AvatarAxisScale0" />
- <spinner left="208" name="BuildAxisScale0" />
- <spinner left="283" name="FlycamAxisScale0" />
- <text width="104" name="PitchScale">
- Skala Wznoszenia
- </text>
- <spinner left="133" name="AvatarAxisScale4" />
- <spinner left="208" name="BuildAxisScale4" />
- <spinner left="283" name="FlycamAxisScale4" />
- <text width="104" name="YawScale">
- Skala Odchylania
- </text>
- <spinner left="133" name="AvatarAxisScale5" />
- <spinner left="208" name="BuildAxisScale5" />
- <spinner left="283" name="FlycamAxisScale5" />
- <text width="104" name="RollScale">
- Skala Obrotu
- </text>
- <spinner left="208" name="BuildAxisScale3" />
- <spinner left="283" name="FlycamAxisScale3" />
- <text width="104" name="XDeadZone">
- Tolerancja Osi X
- </text>
- <spinner left="133" name="AvatarAxisDeadZone1" />
- <spinner left="208" name="BuildAxisDeadZone1" />
- <spinner left="283" name="FlycamAxisDeadZone1" />
- <text width="104" name="YDeadZone">
- Tolerancja Osi Y
- </text>
- <spinner left="133" name="AvatarAxisDeadZone2" />
- <spinner left="208" name="BuildAxisDeadZone2" />
- <spinner left="283" name="FlycamAxisDeadZone2" />
- <text width="104" name="ZDeadZone">
- Tolerancja Osi Z
- </text>
- <spinner left="133" name="AvatarAxisDeadZone0" />
- <spinner left="208" name="BuildAxisDeadZone0" />
- <spinner left="283" name="FlycamAxisDeadZone0" />
- <text width="104" name="PitchDeadZone">
- Tolerancja Wznoszenia
- </text>
- <spinner left="133" name="AvatarAxisDeadZone4" />
- <spinner left="208" name="BuildAxisDeadZone4" />
- <spinner left="283" name="FlycamAxisDeadZone4" />
- <text width="104" name="YawDeadZone">
- Tolerancja Odchylania
- </text>
- <spinner left="133" name="AvatarAxisDeadZone5" />
- <spinner left="208" name="BuildAxisDeadZone5" />
- <spinner left="283" name="FlycamAxisDeadZone5" />
- <text width="104" name="RollDeadZone">
- Tolerancja Obrotu
- </text>
- <spinner left="208" name="BuildAxisDeadZone3" />
- <spinner left="283" name="FlycamAxisDeadZone3" />
- <text width="104" name="Feathering">
+ <spinner left="133" name="AvatarAxisScale0"/>
+ <spinner left="208" name="BuildAxisScale0"/>
+ <spinner left="283" name="FlycamAxisScale0"/>
+ <text name="PitchScale" width="104">
+ Skala wznoszenia
+ </text>
+ <spinner left="133" name="AvatarAxisScale4"/>
+ <spinner left="208" name="BuildAxisScale4"/>
+ <spinner left="283" name="FlycamAxisScale4"/>
+ <text name="YawScale" width="104">
+ Skala odchylania
+ </text>
+ <spinner left="133" name="AvatarAxisScale5"/>
+ <spinner left="208" name="BuildAxisScale5"/>
+ <spinner left="283" name="FlycamAxisScale5"/>
+ <text name="RollScale" width="104">
+ Skala obrotu
+ </text>
+ <spinner left="208" name="BuildAxisScale3"/>
+ <spinner left="283" name="FlycamAxisScale3"/>
+ <text name="XDeadZone" width="104">
+ Tolerancja osi X
+ </text>
+ <spinner left="133" name="AvatarAxisDeadZone1"/>
+ <spinner left="208" name="BuildAxisDeadZone1"/>
+ <spinner left="283" name="FlycamAxisDeadZone1"/>
+ <text name="YDeadZone" width="104">
+ Tolerancja osi Y
+ </text>
+ <spinner left="133" name="AvatarAxisDeadZone2"/>
+ <spinner left="208" name="BuildAxisDeadZone2"/>
+ <spinner left="283" name="FlycamAxisDeadZone2"/>
+ <text name="ZDeadZone" width="104">
+ Tolerancja osi Z
+ </text>
+ <spinner left="133" name="AvatarAxisDeadZone0"/>
+ <spinner left="208" name="BuildAxisDeadZone0"/>
+ <spinner left="283" name="FlycamAxisDeadZone0"/>
+ <text name="PitchDeadZone" width="104">
+ Tolerancja wznoszenia
+ </text>
+ <spinner left="133" name="AvatarAxisDeadZone4"/>
+ <spinner left="208" name="BuildAxisDeadZone4"/>
+ <spinner left="283" name="FlycamAxisDeadZone4"/>
+ <text name="YawDeadZone" width="104">
+ Tolerancja odchylania
+ </text>
+ <spinner left="133" name="AvatarAxisDeadZone5"/>
+ <spinner left="208" name="BuildAxisDeadZone5"/>
+ <spinner left="283" name="FlycamAxisDeadZone5"/>
+ <text name="RollDeadZone" width="104">
+ Tolerancja obrotu
+ </text>
+ <spinner left="208" name="BuildAxisDeadZone3"/>
+ <spinner left="283" name="FlycamAxisDeadZone3"/>
+ <text name="Feathering" width="104">
Przenikanie
</text>
- <slider left="125" label="" name="AvatarFeathering" />
- <slider left="200" label="" name="BuildFeathering" />
- <slider left="275" label="" name="FlycamFeathering" />
- <text width="104" name="ZoomScale2">
- Skala Powiększania
+ <slider label="" left="125" name="AvatarFeathering"/>
+ <slider label="" left="200" name="BuildFeathering"/>
+ <slider label="" left="275" name="FlycamFeathering"/>
+ <text name="ZoomScale2" width="104">
+ Skala powiększania
</text>
- <spinner left="283" label="" name="FlycamAxisScale6" />
- <text width="104" name="ZoomDeadZone">
- Tolerancja Powiększania
+ <spinner label="" left="283" name="FlycamAxisScale6"/>
+ <text name="ZoomDeadZone" width="104">
+ Tolerancja powiększania
</text>
- <spinner left="283" label="" name="FlycamAxisDeadZone6" />
- <button left="366" label="Ustawienia Domyślne" name="SpaceNavigatorDefaults" />
- <button left="366" label="OK" label_selected="OK" name="ok_btn" />
- <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" />
+ <spinner label="" left="283" name="FlycamAxisDeadZone6"/>
+ <button label="Ustawienia domyślne" left="366" name="SpaceNavigatorDefaults"/>
+ <button label="OK" label_selected="OK" left="366" name="ok_btn"/>
+ <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/>
<stat_view label="Monitor Joysticka" name="axis_view">
<stat_bar label="OÅ› 0" name="axis0"/>
<stat_bar label="OÅ› 1" name="axis1"/>
@@ -113,7 +113,7 @@
<stat_bar label="OÅ› 4" name="axis4"/>
<stat_bar label="OÅ› 5" name="axis5"/>
</stat_view>
- <string name="NoDevice">
+ <string name="NoDevice">
brak podłącznego urządzenia
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
index 69d563bdba..8038550bcb 100644
--- a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
@@ -1,154 +1,151 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_lagmeter" title="POMIAR LAGÓW">
- <button label="" label_selected="" name="client_lagmeter"
- tool_tip="Status lagów klienta" />
- <text name="client">
- Klient:
- </text>
- <text name="client_text">
- W normie
- </text>
- <button label="" label_selected="" name="network_lagmeter"
- tool_tip="Network lag status" />
- <text name="network">
- Sieć:
- </text>
- <text name="network_text">
- W normie
- </text>
- <button label="" label_selected="" name="server_lagmeter" tool_tip="Server lag status" />
- <text name="server">
- Serwer:
- </text>
- <text name="server_text">
- W normie
- </text>
- <button label="?" name="server_help" />
- <button label="&gt;&gt;" name="minimize" />
- <string name="max_title_msg">
- Pomiar Lagów
- </string>
- <string name="max_width_px">
+ <floater.string name="max_title_msg">
+ Pomiar lagów
+ </floater.string>
+ <floater.string name="max_width_px">
360
- </string>
- <string name="min_title_msg">
+ </floater.string>
+ <floater.string name="min_title_msg">
Lag
- </string>
- <string name="min_width_px">
+ </floater.string>
+ <floater.string name="min_width_px">
90
- </string>
- <string name="client_text_msg">
+ </floater.string>
+ <floater.string name="client_text_msg">
Klient
- </string>
- <string name="client_frame_rate_critical_fps">
+ </floater.string>
+ <floater.string name="client_frame_rate_critical_fps">
10
- </string>
- <string name="client_frame_rate_warning_fps">
+ </floater.string>
+ <floater.string name="client_frame_rate_warning_fps">
15
- </string>
- <string name="client_frame_time_window_bg_msg">
+ </floater.string>
+ <floater.string name="client_frame_time_window_bg_msg">
W normie, okno w tle
- </string>
- <string name="client_frame_time_critical_msg">
+ </floater.string>
+ <floater.string name="client_frame_time_critical_msg">
Ilość klatek na sekundę klienta poniżej [CLIENT_FRAME_RATE_CRITICAL]
- </string>
- <string name="client_frame_time_warning_msg">
+ </floater.string>
+ <floater.string name="client_frame_time_warning_msg">
Ilość klatek na sekundę pomiędzy [CLIENT_FRAME_RATE_CRITICAL] i [CLIENT_FRAME_RATE_WARNING]
- </string>
- <string name="client_frame_time_normal_msg">
+ </floater.string>
+ <floater.string name="client_frame_time_normal_msg">
W normie
- </string>
- <string name="client_draw_distance_cause_msg">
- Przyczyna: Dystans rysowania jest za wysoki
- </string>
- <string name="client_texture_loading_cause_msg">
- Przyczyna: Åadowanie obrazu
- </string>
- <string name="client_texture_memory_cause_msg">
- Przyczyna: Za dużo obrazów w pamięci
- </string>
- <string name="client_complex_objects_cause_msg">
- Przyczyna: Za dużo złożonych obiektów
- </string>
- <string name="network_text_msg">
+ </floater.string>
+ <floater.string name="client_draw_distance_cause_msg">
+ Przyczyna: dystans rysowania jest za wysoki
+ </floater.string>
+ <floater.string name="client_texture_loading_cause_msg">
+ Przyczyna: ładowanie obrazu
+ </floater.string>
+ <floater.string name="client_texture_memory_cause_msg">
+ Przyczyna: za dużo obrazów w pamięci
+ </floater.string>
+ <floater.string name="client_complex_objects_cause_msg">
+ Przyczyna: za dużo złożonych obiektów
+ </floater.string>
+ <floater.string name="network_text_msg">
Sieć
- </string>
- <string name="network_packet_loss_critical_pct">
+ </floater.string>
+ <floater.string name="network_packet_loss_critical_pct">
10
- </string>
- <string name="network_packet_loss_warning_pct">
+ </floater.string>
+ <floater.string name="network_packet_loss_warning_pct">
5
- </string>
- <string name="network_packet_loss_critical_msg">
+ </floater.string>
+ <floater.string name="network_packet_loss_critical_msg">
Utrata pakietów przekracza [NETWORK_PACKET_LOSS_CRITICAL]%
- </string>
- <string name="network_packet_loss_warning_msg">
+ </floater.string>
+ <floater.string name="network_packet_loss_warning_msg">
Utrata pakietów przekracza [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]%
- </string>
- <string name="network_performance_normal_msg">
+ </floater.string>
+ <floater.string name="network_performance_normal_msg">
W normie
- </string>
- <string name="network_ping_critical_ms">
+ </floater.string>
+ <floater.string name="network_ping_critical_ms">
600
- </string>
- <string name="network_ping_warning_ms">
+ </floater.string>
+ <floater.string name="network_ping_warning_ms">
300
- </string>
- <string name="network_ping_critical_msg">
+ </floater.string>
+ <floater.string name="network_ping_critical_msg">
Fatalny ping - [NETWORK_PING_CRITICAL] ms
- </string>
- <string name="network_ping_warning_msg">
+ </floater.string>
+ <floater.string name="network_ping_warning_msg">
Wolny ping - [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
- </string>
- <string name="network_packet_loss_cause_msg">
+ </floater.string>
+ <floater.string name="network_packet_loss_cause_msg">
Złe połączenie lub przepustowość.
- </string>
- <string name="network_ping_cause_msg">
+ </floater.string>
+ <floater.string name="network_ping_cause_msg">
Złe połączenie lub aplikacja współdzieląca pliki.
- </string>
- <string name="server_text_msg">
+ </floater.string>
+ <floater.string name="server_text_msg">
Serwer
- </string>
- <string name="server_frame_rate_critical_fps">
+ </floater.string>
+ <floater.string name="server_frame_rate_critical_fps">
20
- </string>
- <string name="server_frame_rate_warning_fps">
+ </floater.string>
+ <floater.string name="server_frame_rate_warning_fps">
30
- </string>
- <string name="server_single_process_max_time_ms">
+ </floater.string>
+ <floater.string name="server_single_process_max_time_ms">
20
- </string>
- <string name="server_frame_time_critical_msg">
+ </floater.string>
+ <floater.string name="server_frame_time_critical_msg">
Ilość klatek na sekundę poniżej [SERVER_FRAME_RATE_CRITICAL]
- </string>
- <string name="server_frame_time_warning_msg">
+ </floater.string>
+ <floater.string name="server_frame_time_warning_msg">
Ilość klatek na sekundę pomiędzy [SERVER_FRAME_RATE_CRITICAL] i [SERVER_FRAME_RATE_WARNING]
- </string>
- <string name="server_frame_time_normal_msg">
+ </floater.string>
+ <floater.string name="server_frame_time_normal_msg">
W normie
- </string>
- <string name="server_physics_cause_msg">
- Przyczyna: Za dużo obiektów fizycznych
- </string>
- <string name="server_scripts_cause_msg">
- Przyczyna: Za dużo obieków skryptowanych
- </string>
- <string name="server_net_cause_msg">
- Przyczyna: Za duży ruch w sieci
- </string>
- <string name="server_agent_cause_msg">
- Przyczyna: Za dużo poruszających się awatarów w regionie
- </string>
- <string name="server_images_cause_msg">
- Przyczyna: Za dużo kalkulacji obrazu
- </string>
- <string name="server_generic_cause_msg">
- Przyczyna: Symulator ładuje się zbyt powoli
- </string>
- <string name="smaller_label">
+ </floater.string>
+ <floater.string name="server_physics_cause_msg">
+ Przyczyna: za dużo obiektów fizycznych
+ </floater.string>
+ <floater.string name="server_scripts_cause_msg">
+ Przyczyna: za dużo obieków skryptowanych
+ </floater.string>
+ <floater.string name="server_net_cause_msg">
+ Przyczyna: za duży ruch w sieci
+ </floater.string>
+ <floater.string name="server_agent_cause_msg">
+ Przyczyna: za dużo poruszających się awatarów w regionie
+ </floater.string>
+ <floater.string name="server_images_cause_msg">
+ Przyczyna: za dużo kalkulacji obrazu
+ </floater.string>
+ <floater.string name="server_generic_cause_msg">
+ Przyczyna: symulator ładuje się zbyt powoli
+ </floater.string>
+ <floater.string name="smaller_label">
&gt;&gt;
- </string>
- <string name="bigger_label">
+ </floater.string>
+ <floater.string name="bigger_label">
&lt;&lt;
- </string>
+ </floater.string>
+ <button label="" label_selected="" name="client_lagmeter" tool_tip="Status lagów klienta"/>
+ <text name="client">
+ Klient
+ </text>
+ <text name="client_text">
+ W normie
+ </text>
+ <button label="" label_selected="" name="network_lagmeter" tool_tip="Network lag status"/>
+ <text name="network">
+ Sieć
+ </text>
+ <text name="network_text">
+ W normie
+ </text>
+ <button label="" label_selected="" name="server_lagmeter" tool_tip="Server lag status"/>
+ <text name="server">
+ Serwer
+ </text>
+ <text name="server_text">
+ W normie
+ </text>
+ <button label="&gt;&gt;" name="minimize" tool_tip="Złącz rozmiar pliku xml"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
index 13e6a8b16d..72a078949a 100644
--- a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="land holdings floater" title="MOJA POSIADÅOŚĆ">
<scroll_list name="parcel list">
- <column label="Nazwa posiadłości" name="name"/>
+ <column label="Posiadłość" name="name"/>
<column label="Region" name="location"/>
<column label="Typ" name="type"/>
<column label="Obszar" name="area"/>
<column label="" name="hidden"/>
</scroll_list>
<button label="Teleportuj" label_selected="Teleport" name="Teleport" tool_tip="Teleportuj się do centrum tej Posiadłości."/>
- <button label="Pokaż na Mapie" label_selected="Pokaż na mapie" name="Show on Map" tool_tip="Pokaż to miejsce na mapie świata."/>
+ <button label="Mapa" label_selected="Mapa" name="Show on Map" tool_tip="Pokaż to miejsce na mapie świata."/>
<text name="contrib_label">
Kontrybucje do Twoich Grup:
</text>
@@ -20,21 +20,21 @@
Dozwolone udziały przy obecnym planie płatności:
</text>
<text name="allowed_text">
- [AREA] metrów
+ [AREA] m²
</text>
<text name="current_label">
Udziały w Posiadłościach:
</text>
<text name="current_text">
- [AREA] metrów
+ [AREA] m²
</text>
<text name="available_label">
Dostępne na zakup Posiadłości:
</text>
<text name="available_text">
- [AREA] metrów
+ [AREA] m²
</text>
<string name="area_string">
- [AREA] metrów
+ [AREA] m²
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
index 8120ff8c77..e03c5faaeb 100644
--- a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
@@ -1,12 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script ed float" title="SKRYPT: NOWY SKRYPT">
- <button label="Zresetuj" label_selected="Zresetuj" name="Reset" />
- <check_box label="Włącz" name="running" />
- <check_box label="Mono" name="mono" />
- <string name="not_allowed">
- Nie masz praw by widzieć zawartość tego skryptu.
- </string>
- <string name="script_running">
+ <floater.string name="not_allowed">
+ Nie posiadasz praw do zobaczenia lub edycji kodu tego skryptu ponieważ udostępnione Ci prawa to &quot;brak kopiowania&quot;. Musisz posiadać pełne prawa by móc zobaczyć lub edytować kod skryptu w zawartości obiektu.
+ </floater.string>
+ <floater.string name="script_running">
Włącz
- </string>
+ </floater.string>
+ <floater.string name="Title">
+ SKRYPT: [NAME]
+ </floater.string>
+ <button label="Zresetuj" label_selected="Zresetuj" name="Reset"/>
+ <check_box initial_value="true" label="Włącz" name="running"/>
+ <check_box initial_value="true" label="Mono" name="mono"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
index 5601aa4464..7b1b395f87 100644
--- a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script ed float" title="LSL WIKI">
- <check_box label="Idź za kursorem" name="lock_check" />
- <combo_box label="Zablokuj" name="history_combo" />
- <button label="Wróć" name="back_btn" />
- <button label="Do Przodu" name="fwd_btn" />
+ <check_box label="Idź za kursorem" name="lock_check"/>
+ <combo_box label="Zablokuj" name="history_combo"/>
+ <button label="Wróć" name="back_btn"/>
+ <button label="Do przodu" name="fwd_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_map.xml b/indra/newview/skins/default/xui/pl/floater_map.xml
index 6eabde7c52..1e5f3e6d46 100644
--- a/indra/newview/skins/default/xui/pl/floater_map.xml
+++ b/indra/newview/skins/default/xui/pl/floater_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
+<floater name="Map" title="Mini-Mapa">
<floater.string name="mini_map_north">
N
</floater.string>
diff --git a/indra/newview/skins/default/xui/pl/floater_media_browser.xml b/indra/newview/skins/default/xui/pl/floater_media_browser.xml
index 74210c75e5..9787736ad8 100644
--- a/indra/newview/skins/default/xui/pl/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/pl/floater_media_browser.xml
@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_about" title="PRZEGLĄDARKA MEDIÓW">
<layout_stack name="stack1">
<layout_panel name="nav_controls">
- <button label="Wróć" name="back" />
- <button label="Do Przodu" name="forward" />
- <button label="Załaduj" name="reload" />
- <button label="Idź" name="go" />
+ <button label="Wróć" name="back"/>
+ <button label="Do przodu" name="forward"/>
+ <button label="Załaduj" name="reload"/>
+ <button label="Idź" name="go"/>
</layout_panel>
<layout_panel name="parcel_owner_controls">
- <button label="Wyślij Obecny URL do Posiadłości" name="assign" />
+ <button label="Wyślij bieżącą stronę do Parceli" name="assign"/>
</layout_panel>
<layout_panel name="external_controls">
- <button label="Użyj Mojej Przeglądarki" name="open_browser" />
- <check_box label="Zawsze otwieraj w mojej przeglÄ…darce internetowej" name="open_always" />
- <button label="Zamknij" name="close" />
+ <button label="Użyj mojej przeglądarki" name="open_browser"/>
+ <check_box label="Zawsze otwieraj w mojej przeglÄ…darce internetowej" name="open_always"/>
+ <button label="Zamknij" name="close"/>
</layout_panel>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_media_settings.xml b/indra/newview/skins/default/xui/pl/floater_media_settings.xml
new file mode 100644
index 0000000000..5a36331c9a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_media_settings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="media_settings" title="MEDIA">
+ <button label="OK" label_selected="OK" name="OK"/>
+ <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
+ <button label="Zastosuj" label_selected="Zastosuj" name="Apply"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
index 88a878af72..9ce99692d0 100644
--- a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="SYMULACJA PRZECIEKÓW ALOKACJI PAMIĘCI">
- <spinner label="Prędkość Przecieków (byty na klatkę):" name="leak_speed" />
- <spinner label="Max Przecieki (MB):" name="max_leak" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="STYMULACJA WYCIEKU PAMIĘCI">
+ <spinner label="Prędkość przecieków (byty na klatkę):" name="leak_speed"/>
+ <spinner label="Max przecieki (MB):" name="max_leak"/>
<text name="total_leaked_label">
Przeciekło: [SIZE] KB
</text>
@@ -11,8 +11,8 @@
<text name="note_label_2">
[NOTE2]
</text>
- <button label="Start" name="start_btn" />
- <button label="Stop" name="stop_btn" />
- <button label="Uwolnij" name="release_btn" />
- <button label="Zamknij" name="close_btn" />
+ <button label="Start" name="start_btn"/>
+ <button label="Stop" name="stop_btn"/>
+ <button label="Uwolnij" name="release_btn"/>
+ <button label="Zamknij" name="close_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_moveview.xml b/indra/newview/skins/default/xui/pl/floater_moveview.xml
index e28cfd589d..9c97a8a0e7 100644
--- a/indra/newview/skins/default/xui/pl/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_moveview.xml
@@ -1,15 +1,43 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="move_floater">
-<panel name="panel_actions">
- <button label="" label_selected="" name="turn left btn" tool_tip="Obróć w lewo" />
- <button label="" label_selected="" name="turn right btn" tool_tip="Obroć w Prawo" />
- <button label="" label_selected="" name="move up btn"
- tool_tip="Skocz lub zacznij latać w górę" />
- <button label="" label_selected="" name="move down btn"
- tool_tip="Pochyl się lub zacznij latać w dół" />
- <joystick_slide name="slide left btn" tool_tip="Przesuń w lewo" />
- <joystick_slide name="slide right btn" tool_tip="Przesuń w prawo" />
- <joystick_turn name="forward btn" tool_tip="Przesuń do przodu" />
- <joystick_turn name="backward btn" tool_tip="Przesuń do tyłu" />
-</panel>
+ <string name="walk_forward_tooltip">
+ Idź (naciśnij Strzałkę w Górę lub W)
+ </string>
+ <string name="walk_back_tooltip">
+ Idź do tyłu (naciśnij Strzałkę w Dół lub S)
+ </string>
+ <string name="run_forward_tooltip">
+ Biegnij do przodu (naciśnij Strzałkę w Górę lub W)
+ </string>
+ <string name="run_back_tooltip">
+ Biegnij do przodu (naciśnij Strzałkę w Dół lub S)
+ </string>
+ <string name="fly_forward_tooltip">
+ Leć do przodu (naciśnij Strzałkę w Górę lub W)
+ </string>
+ <string name="fly_back_tooltip">
+ Leć do tyłu (naciśnij Strzałkę na Dół lub S)
+ </string>
+ <string name="walk_title">
+ Idź
+ </string>
+ <string name="run_title">
+ Biegnij
+ </string>
+ <string name="fly_title">
+ Lataj
+ </string>
+ <panel name="panel_actions">
+ <button label="" label_selected="" name="turn left btn" tool_tip="Obróć w lewo (naciśnij Lewą Strzałkę lub A)"/>
+ <button label="" label_selected="" name="turn right btn" tool_tip="Obróć w prawo (naciśnij Prawą Strzałkę lub D)"/>
+ <button label="" label_selected="" name="move up btn" tool_tip="Leć do góry, naciśnij E"/>
+ <button label="" label_selected="" name="move down btn" tool_tip="Leć w dół, naciśnij C"/>
+ <joystick_turn name="forward btn" tool_tip="Idź (naciśnij Strzałkę w Górę lub W)"/>
+ <joystick_turn name="backward btn" tool_tip="Cofaj się (naciśnij Strzałkę w Dół lub S)"/>
+ </panel>
+ <panel name="panel_modes">
+ <button label="" name="mode_walk_btn" tool_tip="Tryb chodzenia"/>
+ <button label="" name="mode_run_btn" tool_tip="Tryb biegu"/>
+ <button label="" name="mode_fly_btn" tool_tip="Tryb latania"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_mute_object.xml b/indra/newview/skins/default/xui/pl/floater_mute_object.xml
index 8055617371..4af5872ef5 100644
--- a/indra/newview/skins/default/xui/pl/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_mute_object.xml
@@ -9,6 +9,6 @@
<text name="note">
* Zablokuj jedynie tekst obiektu, bez dźwięku
</text>
- <button label="Ok" name="OK"/>
+ <button label="OK" name="OK"/>
<button label="Anuluj" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_my_friends.xml b/indra/newview/skins/default/xui/pl/floater_my_friends.xml
index 0bcf6ba4d5..847c93f891 100644
--- a/indra/newview/skins/default/xui/pl/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/pl/floater_my_friends.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_my_friends" title="KONTAKTY">
<tab_container name="friends_and_groups">
- <panel label="Znajomi" name="friends_panel" />
- <panel label="Grupy" name="groups_panel" />
+ <panel label="Znajomi" name="friends_panel"/>
+ <panel label="Grupy" name="groups_panel"/>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml b/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml
new file mode 100644
index 0000000000..e00b3188ea
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="nearby_chat" title="CZAT LOKALNY"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_openobject.xml b/indra/newview/skins/default/xui/pl/floater_openobject.xml
index fbbed0f11d..8e94ae821c 100644
--- a/indra/newview/skins/default/xui/pl/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/pl/floater_openobject.xml
@@ -1,10 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="objectcontents" title="ZAWARTOŚĆ OBIEKTU">
<text name="object_name">
[DESC]:
</text>
- <button label="Kopiuj do Szafy" label_selected="Kopiuj do Szafy"
- name="copy_to_inventory_button" />
- <button label="Kopiuj i Zalóż" label_selected="Kopiuj i Załóż"
- name="copy_and_wear_button" />
+ <button label="Kopiuj do Szafy" label_selected="Kopiuj do Szafy" name="copy_to_inventory_button"/>
+ <button label="Kopiuj i zalóż" label_selected="Kopiuj i załóż" name="copy_and_wear_button"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml
new file mode 100644
index 0000000000..a8d2e10c5f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="modal container" title="Stwórz ubranie">
+ <button label="Zapisz" label_selected="Zapisz" name="Save"/>
+ <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
+ <text name="Save item as:">
+ Zapisz to co mam w tej chwili założone
+jako nowy komplet ubrania:
+ </text>
+ <line_editor name="name ed">
+ [DESC] (nowy)
+ </line_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml b/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml
new file mode 100644
index 0000000000..8a70cb3247
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="outgoing call" title="ROZMOWA GÅOSOWA">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
+ <floater.string name="localchat">
+ Rozmowy głosowe w pobliżu
+ </floater.string>
+ <floater.string name="anonymous">
+ anonimowy
+ </floater.string>
+ <floater.string name="VoiceInviteP2P">
+ dzwoni.
+ </floater.string>
+ <floater.string name="VoiceInviteAdHoc">
+ uczestniczy w konferencyjnej rozmowie głosowej
+ </floater.string>
+ <text name="connecting">
+ ÅÄ…czy z [CALLEE_NAME]
+ </text>
+ <text name="calling">
+ Dzwoni [CALEE_NAME]
+ </text>
+ <text name="noanswer">
+ Brak odpowiedzi. Proszę spróbować ponownie później.
+ </text>
+ <text name="nearby">
+ Zostaleś rozłączony z [VOICE_CHANNEL_NAME]. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_other">
+ [VOICE_CHANNEL_NAME] zakończył/a rozmowę głosową. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_agent">
+ Zakończyłeś rozmowę. [RECONNECT_NEARBY]
+ </text>
+ <text name="leaving">
+ Opuszcza [CURRENT_CHAT]
+ </text>
+ <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_pay.xml b/indra/newview/skins/default/xui/pl/floater_pay.xml
index dfb1b6616c..dccb7ed2bb 100644
--- a/indra/newview/skins/default/xui/pl/floater_pay.xml
+++ b/indra/newview/skins/default/xui/pl/floater_pay.xml
@@ -1,22 +1,26 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money" title="">
- <button label="L$1" label_selected="L$1" name="fastpay 1" />
- <button label="L$5" label_selected="L$5" name="fastpay 5" />
- <button label="L$10" label_selected="L$10" name="fastpay 10" />
- <button label="L$20" label_selected="L$20" name="fastpay 20" />
- <button label="Zapłać" label_selected="Zapłać" name="pay btn" />
- <button label="Anuluj" label_selected="Anuluj" name="cancel btn" />
+ <string name="payee_group">
+ Zapłać Grupie
+ </string>
+ <string name="payee_resident">
+ Zapłać Rezydentowi
+ </string>
<text name="payee_label">
- Zapłata dla:
+ Zapłać:
</text>
+ <icon name="icon_person" tool_tip="Osoba"/>
<text name="payee_name">
[FIRST] [LAST]
</text>
- <text name="fastpay text" halign="left" left="12">
- Szybka Zapłata:
- </text>
+ <button label="L$1" label_selected="L$1" name="fastpay 1"/>
+ <button label="L$5" label_selected="L$5" name="fastpay 5"/>
+ <button label="L$10" label_selected="L$10" name="fastpay 10"/>
+ <button label="L$20" label_selected="L$20" name="fastpay 20"/>
<text name="amount text">
- Suma:
+ lub wybierz kwotÄ™:
</text>
- <line_editor left="52" name="amount" />
+ <line_editor left="52" name="amount"/>
+ <button label="Zapłać" label_selected="Zapłać" name="pay btn"/>
+ <button label="Anuluj" label_selected="Anuluj" name="cancel btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_pay_object.xml b/indra/newview/skins/default/xui/pl/floater_pay_object.xml
index 376f517aaa..d0c69a6c21 100644
--- a/indra/newview/skins/default/xui/pl/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_pay_object.xml
@@ -1,31 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money" title="">
- <text name="payee_group" width="100" halign="left">
- Zapłać Grupie:
- </text>
- <text name="payee_resident" width="120" halign="left" >
- Zapłać Rezydentowi:
- </text>
- <text name="payee_name" left="125">
+ <string halign="left" name="payee_group" width="100">
+ Zapłać Grupie
+ </string>
+ <string halign="left" name="payee_resident" width="120">
+ Zapłać Rezydentowi
+ </string>
+ <icon name="icon_person" tool_tip="Osoba"/>
+ <text left="125" name="payee_name">
[FIRST] [LAST]
</text>
- <text name="object_name_label" left="5" width="95" halign="left">
+ <text halign="left" left="5" name="object_name_label" width="95">
Poprzez Obiekt:
</text>
- <text name="object_name_text" left="105" >
- ...
- </text>
- <text name="fastpay text" width="95" halign="left">
- Szybka Zapłata:
+ <icon name="icon_object" tool_tip="Obiekt"/>
+ <text left="105" name="object_name_text">
+ Poprzez obiekt
</text>
- <text name="amount text" left="5" halign="left">
- Suma:
+ <button label="L$1" label_selected="L$1" left="105" name="fastpay 1"/>
+ <button label="L$5" label_selected="L$5" left="190" name="fastpay 5"/>
+ <button label="L$10" label_selected="L$10" left="105" name="fastpay 10"/>
+ <button label="L$20" label_selected="L$20" left="190" name="fastpay 20"/>
+ <text halign="left" left="5" name="amount text">
+ lub wybierz kwotÄ™:
</text>
- <button label="L$1" label_selected="L$1" name="fastpay 1" left="105"/>
- <button label="L$5" label_selected="L$5" name="fastpay 5" left="190"/>
- <button label="L$10" label_selected="L$10" name="fastpay 10" left="105"/>
- <button label="L$20" label_selected="L$20" name="fastpay 20" left="190"/>
- <button label="Zapłać" label_selected="Zapłać" name="pay btn" />
- <button label="Anuluj" label_selected="Anuluj" name="cancel btn" />
- <line_editor left="50" name="amount" width="50" />
+ <line_editor left="50" name="amount" width="50"/>
+ <button label="Zapłać" label_selected="Zapłać" name="pay btn"/>
+ <button label="Anuluj" label_selected="Anuluj" name="cancel btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
index 834552e2b0..2128cfa3c8 100644
--- a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="PRAWA DOMYÅšLNE">
+<floater name="perm prefs" title="USTAWIENIA DOMYÅšLNE ÅADOWANIA">
<panel label="Prawa" name="permissions">
<button label="?" label_selected="?" name="help"/>
<check_box label="Udostępnij grupie" name="share_with_group"/>
<check_box label="Pozwól kopiować każdemu" name="everyone_copy"/>
<text name="NextOwnerLabel">
- Następny właściciel:
+ Następny Właściciel:
</text>
<check_box label="Modyfikuje" name="next_owner_modify"/>
<check_box label="Kopiuje" name="next_owner_copy"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml
index 6bd91f97b1..a3515915bf 100644
--- a/indra/newview/skins/default/xui/pl/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/pl/floater_post_process.xml
@@ -16,40 +16,40 @@
</text>
<slider label="" name="wmiColorFilterContrast" />
<text name="wmiColorFilterBaseText">
- Kontrast Koloru Podstawowego
+ Kontrast koloru podstawowego
</text>
<slider label="R" name="wmiColorFilterBaseR" />
<slider label="G" name="wmiColorFilterBaseG" />
<slider label="B" name="wmiColorFilterBaseB" />
<slider label="I" name="wmiColorFilterBaseI" />
</panel>
- <panel label="Wizja Nocna" name="wmiNightVisionPanel">
+ <panel label="Wizja nocna" name="wmiNightVisionPanel">
<check_box label="Udostępnij" name="wmiNightVisionToggle" />
<text name="wmiNightVisionBrightMultText">
- Wielokrotne Wzmocnienie Światła
+ Wielokrotne wzmocnienie światła
</text>
<slider label="" name="wmiNightVisionBrightMult" />
<text name="wmiNightVisionNoiseSizeText">
- Rozmiar Szumu
+ Rozmiar szumu
</text>
<slider label="" name="wmiNightVisionNoiseSize" />
<text name="wmiNightVisionNoiseStrengthText">
- Moc Szumu
+ Moc szumu
</text>
<slider label="" name="wmiNightVisionNoiseStrength" />
</panel>
<panel label="Bloom" name="wmiBloomPanel">
<check_box label="Udostępnij" name="wmiBloomToggle" />
<text name="wmiBloomExtractText">
- Ekstracja Luminacji
+ Ekstracja luminacji
</text>
<slider label="" name="wmiBloomExtract" />
<text name="wmiBloomSizeText">
- Rozmiar Rozmazania Obrazu
+ Rozmiar rozmazania obrazu
</text>
<slider label="" name="wmiBloomSize" />
<text name="wmiBloomStrengthText">
- Moc Rozmazania Obrazu
+ Moc rozmazania obrazu
</text>
<slider label="" name="wmiBloomStrength" />
</panel>
diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml
index 8f4018924d..095974aa61 100644
--- a/indra/newview/skins/default/xui/pl/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/pl/floater_postcard.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="WYŚLIJ POCZTÓWKĘ">
+<floater name="Postcard" title="WYŚLIJ POCZTÓWKĘ (EMAIL)">
<text name="to_label">
Email Odbiorcy:
</text>
@@ -20,12 +20,12 @@
Wpisz treść swojej wiadomości tutaj
</text_editor>
<text name="fine_print">
- Jeżeli odbiorca tej pocztówki dołączy do [SECOND_LIFE], otrzymasz bonusa.
+ Jeżeli Odbiorca tej pocztówki dołączy do [SECOND_LIFE], otrzymasz bonus.
</text>
<button label="Anuluj" name="cancel_btn"/>
<button label="Wyślij" name="send_btn"/>
<string name="default_subject">
- Pocztówki z [SECOND_LIFE]
+ Pocztówka z [SECOND_LIFE].
</string>
<string name="default_message">
Sprawdź i przekonaj się sam!
diff --git a/indra/newview/skins/default/xui/pl/floater_preferences.xml b/indra/newview/skins/default/xui/pl/floater_preferences.xml
index 2be663283f..3f62d764c6 100644
--- a/indra/newview/skins/default/xui/pl/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preferences.xml
@@ -1,8 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Preferences" title="USTAWIENIA">
- <button label="OK" label_selected="OK" name="OK" />
- <button label="Anuluj" label_selected="Anuluj" name="Cancel" />
- <button label="Zastosuj" label_selected="Zastosuj" name="Apply" />
- <button label="O Second Life" label_selected="O Second Life" name="About..." />
- <button label="Pomoc" label_selected="Pomoc" name="Help" />
+ <button label="OK" label_selected="OK" name="OK"/>
+ <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
+ <tab_container name="pref core">
+ <panel label="Ogólne" name="general"/>
+ <panel label="Grafika" name="display"/>
+ <panel label="Prywatność" name="im"/>
+ <panel label="Dźwięk &amp; Media" name="audio"/>
+ <panel label="Czat" name="chat"/>
+ <panel label="Powiadomienia" name="msgs"/>
+ <panel label="Ustawienie" name="input"/>
+ <panel label="Zaawansowane" name="advanced1"/>
+ </tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_animation.xml b/indra/newview/skins/default/xui/pl/floater_preview_animation.xml
index 7139c470a4..6ce6914771 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_animation.xml
@@ -1,10 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview_anim">
+ <floater.string name="Title">
+ Animacja: [NAME]
+ </floater.string>
<text name="desc txt">
Opis:
</text>
- <button label="Używaj w Świecie" label_selected="Stop" name="Anim play btn"
- tool_tip="Animacja będzie widoczna dla wszystkich." width="131" left="20"/>
- <button label="Używaj lokalnie" label_selected="Stop" name="Anim audition btn"
- tool_tip="Animacja będzie widoczna tylko dla Ciebie." width="125" left="162"/>
+ <button label="Uruchom in-world" label_selected="Stop" left="20" name="Anim play btn" tool_tip="Uruchom animacjÄ™ by widzieli jÄ… pozostali Rezydenci" width="131"/>
+ <button label="Używaj lokalnie" label_selected="Stop" left="162" name="Anim audition btn" tool_tip="Uruchom animację widoczną tylko przez Ciebie" width="125"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
index eae9ba2690..d3d6588397 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="REKLAMA" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="INFO O REKLAMIE">
+ <floater.string name="Title">
+ Reklama: [NAME]
+ </floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_event.xml b/indra/newview/skins/default/xui/pl/floater_preview_event.xml
index 9fc0ff4da6..5d9e47bc00 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_event.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="INFORMACJE O IMPREZIE" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="INFO O IMPREZIE">
+ <floater.string name="Title">
+ Impreza: [NAME]
+ </floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml
index 1c7a3f6631..05758ac04d 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml
@@ -1,14 +1,32 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="gesture_preview">
- <string name="stop_txt">
+ <floater.string name="step_anim">
+ Animacja
+ </floater.string>
+ <floater.string name="step_sound">
+ Dźwięk:
+ </floater.string>
+ <floater.string name="step_chat">
+ Czat:
+ </floater.string>
+ <floater.string name="step_wait">
+ Wstrzymaj:
+ </floater.string>
+ <floater.string name="stop_txt">
Stop
- </string>
- <string name="preview_txt">
+ </floater.string>
+ <floater.string name="preview_txt">
Pokaż
- </string>
- <string name="none_text">
+ </floater.string>
+ <floater.string name="none_text">
-- Brak --
- </string>
+ </floater.string>
+ <floater.string name="Title">
+ Gest: [NAME]
+ </floater.string>
+ <text name="name_text">
+ Nazwa:
+ </text>
<text name="desc_label">
Opis:
</text>
@@ -27,29 +45,23 @@
<text name="library_label">
Zbiór:
</text>
+ <scroll_list name="library_list"/>
+ <button label="Dodaj &gt;&gt;" name="add_btn"/>
<text name="steps_label">
Etapy:
</text>
- <scroll_list name="library_list">
- Animacja
-Dźwięk
-Czat
-Wstrzymaj
- </scroll_list>
- <button label="Dodaj &gt;&gt;" name="add_btn"/>
- <button label="W Górę" name="up_btn"/>
- <button label="W Dół" name="down_btn"/>
+ <button label="W górę" name="up_btn"/>
+ <button label="W dół" name="down_btn"/>
<button label="Usuń" name="delete_btn"/>
- <text name="help_label">
- Wszystkie etapy nastÄ…piÄ… razem,
-chyba, że dodasz pauzy.
- </text>
<radio_group name="animation_trigger_type">
- <radio_item name="start" label="Start" />
- <radio_item name="stop" label="Stop" />
+ <radio_item label="Start" name="start"/>
+ <radio_item label="Stop" name="stop"/>
</radio_group>
<check_box label="do końca animacji" name="wait_anim_check"/>
<check_box label="czas w sekundach" name="wait_time_check"/>
+ <text name="help_label">
+ Wszystkie etapy nastąpią razem, chyba, że dodasz pauzy.
+ </text>
<check_box label="Aktywny" name="active_check" tool_tip="Aktywne gesty można włączać używając przypisanej frazy w czacie albo używając przypisanego klawisza skrótowego. W przypaku konfliktu przypisań gesty zazwyczaj nie będą działać."/>
<button label="Pokaż" name="preview_btn"/>
<button label="Zapisz" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
new file mode 100644
index 0000000000..d31cada96d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="GEST"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
new file mode 100644
index 0000000000..d33b799476
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="GESTY">
+ <text name="trigger_label">
+ Czat:
+ </text>
+ <text name="key_label">
+ Klawiatura:
+ </text>
+ <combo_box label="Żaden" name="modifier_combo"/>
+ <combo_box label="Żaden" name="key_combo"/>
+ <text name="replace_text" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana &apos;witam&apos; na &apos;cześć&apos; zmieni czat &apos;Chciałem powiedzieć witam&apos; na &apos;Chciałem powiedzieć cześć&apos; i pokaże animację!">
+ Zamień na:
+ </text>
+ <line_editor name="replace_editor" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana &apos;witam&apos; na &apos;cześć&apos; zmieni czat &apos;Chciałem powiedzieć witam&apos; na &apos;Chciałem powiedzieć cześć&apos; i pokaże animację"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
new file mode 100644
index 0000000000..6592d9dad0
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="GESTY"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
index b9f80490ab..1ad07c236b 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
@@ -1,16 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview notecard" title="NOTA:">
- <button label="Zapisz" label_selected="Zapisz" name="Save" />
+ <floater.string name="no_object">
+ Nie można znaleźć obiektu zawierającego tą notkę.
+ </floater.string>
+ <floater.string name="not_allowed">
+ Nie masz pozwolenia na zobaczenie tej notki.
+ </floater.string>
+ <floater.string name="Title">
+ Notka: [NAME]
+ </floater.string>
+ <floater.string label="Zapisz" label_selected="Zapisz" name="Save">
+ Zapisz
+ </floater.string>
<text name="desc txt">
Opis:
</text>
<text_editor name="Notecard Editor">
Åadowanie...
</text_editor>
- <string name="no_object">
- Nie można znaleść obiektu zawierającego tą notkę.
- </string>
- <string name="not_allowed">
- Nie masz pozwolenia na zobaczenie tej notki.
- </string>
+ <button label="Zapisz" label_selected="Zapisz" name="Save"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
index 656b9bec38..d02b3ca75e 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
@@ -1,12 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview_sound">
+ <floater.string name="Title">
+ Dźwięk: [NAME]
+ </floater.string>
<text name="desc txt">
Opis:
</text>
- <button label="Odtwarzaj Lokalnie" label_selected="Odtwarzaj Lokalnie"
- name="Sound audition btn"
- tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie." />
- <button label="Odtwarzaj w Åšwiecie" label_selected="Odtwarzaj w Åšwiecie"
- name="Sound play btn"
- tool_tip="Dźwięk będzie słyszalny przez wszystkich." width="130" left_delta="-136"/>
+ <button label="Odtwarzaj" label_selected="Odtwarzaj" left_delta="-136" name="Sound play btn" tool_tip="Dźwięk będzie słyszalny przez wszystkich." width="130"/>
+ <button label="Odtwarzaj Lokalnie" label_selected="Odtwarzaj lokalnie" name="Sound audition btn" tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie."/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_texture.xml b/indra/newview/skins/default/xui/pl/floater_preview_texture.xml
index 8bcd800411..e58acee139 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_texture.xml
@@ -1,9 +1,47 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview_texture">
+ <floater.string name="Title">
+ Tekstura: [NAME]
+ </floater.string>
+ <floater.string name="Copy">
+ Kopiuj do Szafy
+ </floater.string>
<text name="desc txt">
Opis:
</text>
<text name="dimensions">
- Wymiary: [WIDTH] x [HEIGHT]
+ [WIDTH]px x [HEIGHT]px
</text>
+ <text name="aspect_ratio">
+ Zobacz proporcje
+ </text>
+ <combo_box name="combo_aspect_ratio" tool_tip="Wyświetl w domyślnych proporcjach">
+ <combo_item name="Unconstrained">
+ Swobodny
+ </combo_item>
+ <combo_item name="1:1" tool_tip="Insygnia Grupy lub realny Profil">
+ 1:1
+ </combo_item>
+ <combo_item name="4:3" tool_tip="[SECOND_LIFE] profil">
+ 4:3
+ </combo_item>
+ <combo_item name="10:7" tool_tip="Reklamy i atrakcje, landmarki">
+ 10:7
+ </combo_item>
+ <combo_item name="3:2" tool_tip="O Posiadłości">
+ 3:2
+ </combo_item>
+ <combo_item name="16:10">
+ 16:10
+ </combo_item>
+ <combo_item name="16:9" tool_tip="LubiÄ™">
+ 16:9
+ </combo_item>
+ <combo_item name="2:1">
+ 2:1
+ </combo_item>
+ </combo_box>
+ <button label="OK" name="Keep"/>
+ <button label="Wyrzuć" name="Discard"/>
+ <button label="Zapisz jako" name="save_tex_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_publish_classified.xml b/indra/newview/skins/default/xui/pl/floater_publish_classified.xml
new file mode 100644
index 0000000000..12cda04e10
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_publish_classified.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="publish_classified" title="Publikowanie Reklam">
+ <text name="explanation_text">
+ Twoja reklama zostanie wyświetlana przez okres jednego tygodnia od daty jej publikacji.
+
+Pamiętaj, opłaty za reklamy nie podlegają prawu zwrotu.
+ </text>
+ <spinner label="Cena za ReklamÄ™:" name="price_for_listing" tool_tip="Cena za umieszczenie reklamy w wyszukiwarce." value="50"/>
+ <text name="l$_text" value="L$"/>
+ <text name="more_info_text">
+ Więcej info (link do pomocy)
+ </text>
+ <button label="Publikuj" name="publish_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_region_info.xml b/indra/newview/skins/default/xui/pl/floater_region_info.xml
index ca3c1391db..a1f7785f48 100644
--- a/indra/newview/skins/default/xui/pl/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/pl/floater_region_info.xml
@@ -1,2 +1,2 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="regioninfo" title="REGION/MAJĄTEK" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="regioninfo" title="REGION/MAJĄTEK"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
index 18ce1b230f..a6f8ba6c11 100644
--- a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_report_abuse" title="RAPORT O NADUŻYCIU">
<floater.string name="Screenshot">
- Zdjęcie Ekranu
+ Zdjęcie ekranu
</floater.string>
<check_box label="Załącz zdjęcie do raportu" name="screen_check"/>
<text name="reporter_title">
@@ -40,42 +40,42 @@
</text>
<combo_box name="category_combo" tool_tip="Wybór kategorii - wybierz kategorię, której dotyczy raport">
<combo_box.item label="Wybierz KategoriÄ™:" name="Select_category"/>
- <combo_box.item label="Wiek &gt; Udawanie Nieletniej Osoby" name="Age__Age_play"/>
+ <combo_box.item label="Wiek &gt; Udawanie nieletniej osoby" name="Age__Age_play"/>
<combo_box.item label="Wiek &gt; Dorosły Rezydent w Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
<combo_box.item label="Wiek &gt; Nieletni Rezydent poza Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
- <combo_box.item label="Napaść &gt; Strefa Militarna / Niebezpieczny Obszar" name="Assault__Combat_sandbox___unsafe_area"/>
- <combo_box.item label="Napaść &gt; Bezpieczny Obszar" name="Assault__Safe_area"/>
- <combo_box.item label="Napaść &gt; Obszar do Testowania Broni" name="Assault__Weapons_testing_sandbox"/>
- <combo_box.item label="Handel &gt; Niedostarczenie Produktu lub Usługi" name="Commerce__Failure_to_deliver_product_or_service"/>
- <combo_box.item label="Naruszenie Prywatności &gt; Dane Osobiste" name="Disclosure__Real_world_information"/>
- <combo_box.item label="Ujawnienie &gt; Monitorowanie Czatu" name="Disclosure__Remotely_monitoring chat"/>
- <combo_box.item label="Ujawnienie &gt; Dane z Second Life / Czatu / IM" name="Disclosure__Second_Life_information_chat_IMs"/>
- <combo_box.item label="Zakłócanie Spokoju &gt; Nieuczciwe Używanie Zasobów Regionu" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
- <combo_box.item label="Zakłócanie Spokoju &gt; Przesadnie Skryptowane Obiekty" name="Disturbing_the_peace__Excessive_scripted_objects"/>
- <combo_box.item label="Zakłócanie Spokoju &gt; Śmiecenie Obiektami" name="Disturbing_the_peace__Object_littering"/>
- <combo_box.item label="Zakłócanie Spokoju &gt; Ciągły Spam" name="Disturbing_the_peace__Repetitive_spam"/>
- <combo_box.item label="Zakłócanie Spokoju &gt; Nieporządany Spam Reklamowy" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+ <combo_box.item label="Napaść &gt; strefa militarna / niebezpieczny obszar" name="Assault__Combat_sandbox___unsafe_area"/>
+ <combo_box.item label="Napaść &gt; nezpieczny obszar" name="Assault__Safe_area"/>
+ <combo_box.item label="Napaść &gt; obszar do testowania broni" name="Assault__Weapons_testing_sandbox"/>
+ <combo_box.item label="Handel &gt; niedostarczenie produktu lub usługi" name="Commerce__Failure_to_deliver_product_or_service"/>
+ <combo_box.item label="Naruszenie prywatności &gt; dane osobiste" name="Disclosure__Real_world_information"/>
+ <combo_box.item label="Ujawnienie &gt; monitorowanie czatu" name="Disclosure__Remotely_monitoring chat"/>
+ <combo_box.item label="Ujawnienie &gt; dane z Second Life / Czatu / IM" name="Disclosure__Second_Life_information_chat_IMs"/>
+ <combo_box.item label="Zakłócanie spokoju &gt; nieuczciwe używanie zasobów Regionu" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+ <combo_box.item label="Zakłócanie spokoju &gt; przesadnie skryptowane obiekty" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+ <combo_box.item label="Zakłócanie spokoju &gt; śmiecenie obiektami" name="Disturbing_the_peace__Object_littering"/>
+ <combo_box.item label="Zakłócanie spokoju &gt; ciągły spam" name="Disturbing_the_peace__Repetitive_spam"/>
+ <combo_box.item label="Zakłócanie spokoju &gt; nieporządany spam reklamowy" name="Disturbing_the_peace__Unwanted_advert_spam"/>
<combo_box.item label="Oszustwo &gt; L$" name="Fraud__L$"/>
<combo_box.item label="Oszustwo &gt; Posiadłości" name="Fraud__Land"/>
- <combo_box.item label="Oszustwo &gt; Piramidy albo Listy ÅaÅ„cuchowe" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+ <combo_box.item label="Oszustwo &gt; piramidy albo listy łańcuchowe" name="Fraud__Pyramid_scheme_or_chain_letter"/>
<combo_box.item label="Oszustwo &gt; US$" name="Fraud__US$"/>
- <combo_box.item label="Prześladowanie &gt; Farmy Reklamowe / Wizualny Spam" name="Harassment__Advert_farms___visual_spam"/>
- <combo_box.item label="Prześladowanie &gt; Zniesławianie Jedostek lub Grup" name="Harassment__Defaming_individuals_or_groups"/>
- <combo_box.item label="Prześladowanie &gt; Ograniczanie Ruchu" name="Harassment__Impeding_movement"/>
- <combo_box.item label="Prześladowanie &gt; Molestowanie Seksualne" name="Harassment__Sexual_harassment"/>
- <combo_box.item label="PrzeÅ›ladowanie &gt; Namawianie/ZachÄ™canie Innych do Åamania Warunków Umowy (ToS)" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+ <combo_box.item label="Prześladowanie &gt; farmy reklamowe / wizualny spam" name="Harassment__Advert_farms___visual_spam"/>
+ <combo_box.item label="Prześladowanie &gt; zniesławianie jedostek lub grup" name="Harassment__Defaming_individuals_or_groups"/>
+ <combo_box.item label="Prześladowanie &gt; Ograniczanie ruchu" name="Harassment__Impeding_movement"/>
+ <combo_box.item label="Prześladowanie &gt; Molestowanie seksualne" name="Harassment__Sexual_harassment"/>
+ <combo_box.item label="Prześladowanie &gt; Namawianie/Zachęcanie innych do łamania warunków umowy (ToS)" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
<combo_box.item label="Prześladowanie &gt; Znieważanie Słowne" name="Harassment__Verbal_abuse"/>
- <combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa Treść lub Postępowanie" name="Indecency__Broadly_offensive_content_or_conduct"/>
- <combo_box.item label="Nieprzyzwoitość &gt; Niestosowne Imię Awatara" name="Indecency__Inappropriate_avatar_name"/>
- <combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść i postępowanie w regionie &apos;PG&apos;" name="Indecency__Mature_content_in_PG_region"/>
- <combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść i postępowanie w regionie &apos;Mature&apos;" name="Indecency__Inappropriate_content_in_Mature_region"/>
- <combo_box.item label="Naruszenie Własności Intelektualnej &gt; Usunięcie Treści" name="Intellectual_property_infringement_Content_Removal"/>
- <combo_box.item label="Naruszenie Własności Intelektualnej &gt; CopyBot albo Nadużycie Przywilejów" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+ <combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść lub postępowanie" name="Indecency__Broadly_offensive_content_or_conduct"/>
+ <combo_box.item label="Nieprzyzwoitość &gt; Niestosowne imię awatara" name="Indecency__Inappropriate_avatar_name"/>
+ <combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść i postępowanie w Regionie &apos;PG&apos;" name="Indecency__Mature_content_in_PG_region"/>
+ <combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść i postępowanie w Regionie &apos;Mature&apos;" name="Indecency__Inappropriate_content_in_Mature_region"/>
+ <combo_box.item label="Naruszenie własności intelektualnej &gt; usunięcie treści" name="Intellectual_property_infringement_Content_Removal"/>
+ <combo_box.item label="Naruszenie własności intelektualnej &gt; CopyBot albo nadużycie przywilejów" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
<combo_box.item label="Nietolerancja" name="Intolerance"/>
- <combo_box.item label="Posiadłości &gt; Nadużywanie Piaskownicy" name="Land__Abuse_of_sandbox_resources"/>
- <combo_box.item label="Posiadłości &gt; Naruszenie &gt; Obiekty/Tekstury" name="Land__Encroachment__Objects_textures"/>
- <combo_box.item label="Posiadłości &gt; Naruszenie &gt; Cząsteczki" name="Land__Encroachment__Particles"/>
- <combo_box.item label="Posiadłości &gt; Naruszenie &gt; Drzewa/Rośliny" name="Land__Encroachment__Trees_plants"/>
+ <combo_box.item label="Posiadłości &gt; nadużywanie piaskownicy" name="Land__Abuse_of_sandbox_resources"/>
+ <combo_box.item label="Posiadłości &gt; naruszenie &gt; obiekty/tekstury" name="Land__Encroachment__Objects_textures"/>
+ <combo_box.item label="Posiadłości &gt; naruszenie &gt; cząsteczki" name="Land__Encroachment__Particles"/>
+ <combo_box.item label="Posiadłości &gt; naruszenie &gt; drzewa/rośliny" name="Land__Encroachment__Trees_plants"/>
<combo_box.item label="Zakłady/Hazard" name="Wagering_gambling"/>
<combo_box.item label="Inne" name="Other"/>
</combo_box>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml
new file mode 100644
index 0000000000..e70a30fa24
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script" short_title="[ALL SCRIPTS]" title="[ALL SCRIPTS]"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_limits.xml b/indra/newview/skins/default/xui/pl/floater_script_limits.xml
new file mode 100644
index 0000000000..dd13d641a0
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_script_limits.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="scriptlimits" title="SKRYPT"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_preview.xml b/indra/newview/skins/default/xui/pl/floater_script_preview.xml
index e3e72e15a3..eb6a1df77b 100644
--- a/indra/newview/skins/default/xui/pl/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_preview.xml
@@ -1,5 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview lsl text" title="SKRYPT: SKRYPT OBROTU">
+ <floater.string name="Title">
+ Skrypt: [NAME]
+ </floater.string>
<text name="desc txt">
Opis:
</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_queue.xml b/indra/newview/skins/default/xui/pl/floater_script_queue.xml
index 7655f5fcac..bdfdba569e 100644
--- a/indra/newview/skins/default/xui/pl/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_queue.xml
@@ -1,4 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="queue" title="ZRESETUJ PRACĘ W TOKU">
- <button label="Zamknij" label_selected="Zamknij" name="close" />
+ <floater.string name="Starting">
+ Rozpoczęcie [START] [COUNT] elementów.
+ </floater.string>
+ <floater.string name="Done">
+ Wykonane.
+ </floater.string>
+ <floater.string name="Resetting">
+ Trwa resetowanie
+ </floater.string>
+ <floater.string name="Running">
+ Skrypt działa
+ </floater.string>
+ <floater.string name="NotRunning">
+ Skrypt nie działa
+ </floater.string>
+ <button label="Zamknij" label_selected="Zamknij" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml
index 255ab4264c..cb010daee4 100644
--- a/indra/newview/skins/default/xui/pl/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_search.xml
@@ -1,10 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script search" title="SZUKAJ SKRYPTU">
- <check_box label="CapsLoock Nieaktywny" name="case_text" />
- <button label="Szukaj" label_selected="Szukaj" name="search_btn" />
- <button label="Zamień" label_selected="Zamień" name="replace_btn" />
- <button label="Zamień Wszystko" label_selected="Zamień Wszystko"
- name="replace_all_btn" />
+ <check_box label="CapsLoock nieaktywny" name="case_text"/>
+ <button label="Szukaj" label_selected="Szukaj" name="search_btn"/>
+ <button label="Zamień" label_selected="Zamień" name="replace_btn"/>
+ <button label="Zamień Wszystko" label_selected="Zamień wszystko" name="replace_all_btn"/>
<text name="txt">
Szukaj
</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_search.xml b/indra/newview/skins/default/xui/pl/floater_search.xml
new file mode 100644
index 0000000000..a0198670e4
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_search.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_search" title="SZUKAJ">
+ <floater.string name="loading_text">
+ Åadowanie...
+ </floater.string>
+ <floater.string name="done_text">
+ Wykonano
+ </floater.string>
+ <layout_stack name="stack1">
+ <layout_panel name="browser_layout">
+ <text name="refresh_search">
+ Ustaw wyszukiwanie na odzwierciedlanie poziomu boskiego
+ </text>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_select_key.xml b/indra/newview/skins/default/xui/pl/floater_select_key.xml
index 194a6da1bd..190ad61352 100644
--- a/indra/newview/skins/default/xui/pl/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/pl/floater_select_key.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="modal container" title="">
- <button label="Anuluj" label_selected="Anuluj" name="Cancel" />
+ <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
<text name="Save item as:">
- By wybrać wciśnij klawisz
+ Naciśnij klawisz aby ustawić przełącznik Mówić.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
index a306ec2c34..eb1ed74797 100644
--- a/indra/newview/skins/default/xui/pl/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
@@ -1,62 +1,65 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="SELL LAND">
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <text name="info_parcel_label">
- Posiadłość:
- </text>
- <text name="info_parcel">
- NAZWA POSIADÅOÅšCI
- </text>
- <text name="info_size_label">
- Obszar:
- </text>
- <text name="info_size">
- [AREA] m.
- </text>
- <text name="info_action">
- Aby sprzedać tą Posiadłość:
- </text>
- <text name="price_label">
- Ustal cenÄ™:
- </text>
- <text name="price_text">
- Wybierz właściwą cenę za tą Posiadłość.
- </text>
- <text name="price_ld">
- L$
- </text>
- <text name="price_per_m">
- ([PER_METER]L$ za metr)
- </text>
- <text name="sell_to_label">
- Kupiec:
- </text>
- <text name="sell_to_text">
- Wybierz sprzedaż dla kogokolwiek albo dla wybranego kupca.
- </text>
- <combo_box name="sell_to">
- <combo_box.item name="--selectone--" label="wybierz --" />
- <combo_box.item name="Anyone" label="Ktokolwiek" />
- <combo_box.item name="Specificuser:" label="Wybrany kupiec:" />
- </combo_box>
- <button label="Wybierz..." name="sell_to_select_agent" />
- <text name="sell_objects_label">
- Obiekty sprzedawane razem z Posiadłością?
- </text>
- <text name="sell_objects_text">
- Przekazywalne obiekty właściciela Posiadłości zmienią właściciela.
- </text>
- <radio_group name="sell_objects">
- <radio_item name="no" label="Nie, zatrzymaj obiekty" />
- <radio_item name="yes" label="Tak, sprzedaj obiekty razem z Posiadłością" />
- </radio_group>
- <button label="Pokaż Obiekty" name="show_objects" />
- <text name="nag_message_label">
- PAMIĘTAJ: Sprzedaż jest nieodwracalna.
- </text>
- <button label="Wystaw Ziemię na Sprzedaż" name="sell_btn" />
- <button label="Anuluj" name="cancel_btn" />
- </panel>
- </scroll_container>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="sell land" title="SPRZEDAJ POSIADÅOŚĆ">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <text name="info_parcel_label">
+ Posiadłość:
+ </text>
+ <text name="info_parcel">
+ NAZWA POSIADÅOÅšCI
+ </text>
+ <text name="info_size_label">
+ Rozmiar:
+ </text>
+ <text name="info_size">
+ [AREA] m²
+ </text>
+ <text name="info_action">
+ Aby sprzedać tą Posiadłość:
+ </text>
+ <text name="price_label">
+ 1. Ustal cenÄ™:
+ </text>
+ <text name="price_text">
+ Wybierz właściwą cenę za tą Posiadłość.
+ </text>
+ <text name="price_ld">
+ L$
+ </text>
+ <line_editor name="price">
+ 0
+ </line_editor>
+ <text name="price_per_m">
+ (L$[PER_METER] za m²)
+ </text>
+ <text name="sell_to_label">
+ 2. Sprzedaj Posiadłość:
+ </text>
+ <text name="sell_to_text">
+ Wybierz sprzedaż dla kogokolwiek albo dla wybranego kupca.
+ </text>
+ <combo_box name="sell_to">
+ <combo_box.item label="- Wybierz -" name="--selectone--"/>
+ <combo_box.item label="Ktokolwiek" name="Anyone"/>
+ <combo_box.item label="Wybrany Kupiec:" name="Specificuser:"/>
+ </combo_box>
+ <button label="Wybierz" name="sell_to_select_agent"/>
+ <text name="sell_objects_label">
+ 3. Obiekty sprzedawane razem z Posiadłością?
+ </text>
+ <text name="sell_objects_text">
+ Przekazywalne obiekty właściciela Posiadłości zmienią właściciela.
+ </text>
+ <radio_group name="sell_objects">
+ <radio_item label="Nie, zatrzymaj obiekty" name="no"/>
+ <radio_item label="Tak, sprzedaj obiekty razem z Posiadłością" name="yes"/>
+ </radio_group>
+ <button label="Pokaż Obiekty" name="show_objects"/>
+ <text name="nag_message_label">
+ PAMIĘTAJ: Sprzedaż jest nieodwracalna.
+ </text>
+ <button label="Wystaw ziemię na sprzedaż" name="sell_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+ </panel>
+ </scroll_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
index f87e2edecc..7c29d52e7b 100644
--- a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="USTAWIENIA USUWANIA BÅĘDÓW">
- <combo_box name="boolean_combo">
- <combo_box.item name="TRUE" label="PRAWDA" />
- <combo_box.item name="FALSE" label="NIEPRAWDA" />
- </combo_box>
- <color_swatch label="Kolor" name="color_swatch"/>
+<floater name="settings_debug" title="USTAWIENIA DEBUGOWANIA">
+ <radio_group name="boolean_combo">
+ <radio_item label="PRAWDA" name="TRUE" value="prawda"/>
+ <radio_item label="NIEPRAWDA" name="FALSE" value=""/>
+ </radio_group>
+ <color_swatch label="Kolor" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
<spinner label="x" name="val_spinner_2"/>
<spinner label="x" name="val_spinner_3"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_snapshot.xml b/indra/newview/skins/default/xui/pl/floater_snapshot.xml
index c807087170..df4e5b43bc 100644
--- a/indra/newview/skins/default/xui/pl/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pl/floater_snapshot.xml
@@ -4,23 +4,23 @@
Lokacja zapisu
</text>
<radio_group label="Rodzaje zdjęć" name="snapshot_type_radio">
- <radio_item name="postcard" label="Wyślij (email) pocztówkę" />
- <radio_item name="texture" label="Załaduj do szafy ([AMOUNT]L$)" />
- <radio_item name="local" label="Zapisz na dysk" />
+ <radio_item label="Email" name="postcard"/>
+ <radio_item label="Załaduj do Szafy (L$[AMOUNT])" name="texture"/>
+ <radio_item label="Zapisz na dysk" name="local"/>
</radio_group>
<text name="file_size_label">
- Rozmiar pliku: [SIZE] KB
+ [SIZE] KB
</text>
- <button label="Odśwież Zdjęcie" name="new_snapshot_btn"/>
+ <button label="Odśwież zdjęcie" name="new_snapshot_btn"/>
<button label="Wyślij" name="send_btn"/>
<button label="Załaduj (L$[AMOUNT])" name="upload_btn"/>
<flyout_button label="Zapisz" name="save_btn" tool_tip="Zapisz zdjęcie na dysk">
- <flyout_button.item name="save_item" label="Zapisz"/>
- <flyout_button.item name="saveas_item" label="Zapisz Jako..."/>
+ <flyout_button.item label="Zapisz" name="save_item"/>
+ <flyout_button.item label="Zapisz jako..." name="saveas_item"/>
</flyout_button>
<button label="Anuluj" name="discard_btn"/>
- <button label="Więcej &gt;&gt;" name="more_btn" tool_tip="Ustawienia Zaawansowane"/>
- <button label="&lt;&lt; Mniej" name="less_btn" tool_tip="Ustawienia Zaawansowane"/>
+ <button label="Więcej" name="more_btn" tool_tip="Zaawansowane"/>
+ <button label="Mniej" name="less_btn" tool_tip="Zaawansowane"/>
<text name="type_label2">
Wymiar
</text>
@@ -28,45 +28,45 @@
Format
</text>
<combo_box label="Rozdzielczość" name="postcard_size_combo">
- <combo_box.item name="CurrentWindow" label="Obecne Okno" />
- <combo_box.item name="640x480" label="640x480" />
- <combo_box.item name="800x600" label="800x600" />
- <combo_box.item name="1024x768" label="1024x768" />
- <combo_box.item name="Custom" label="Wybierz" />
+ <combo_box.item label="Obecne Okno" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Wybierz" name="Custom"/>
</combo_box>
<combo_box label="Rozdzielczość" name="texture_size_combo">
- <combo_box.item name="CurrentWindow" label="Obecne Okno" />
- <combo_box.item name="Small(128x128)" label="Mały (128x128)" />
- <combo_box.item name="Medium(256x256)" label="Åšredni (256x256)" />
- <combo_box.item name="Large(512x512)" label="Duży (512x512)" />
- <combo_box.item name="Custom" label="Wybierz" />
+ <combo_box.item label="Obecne Okno" name="CurrentWindow"/>
+ <combo_box.item label="Mały (128x128)" name="Small(128x128)"/>
+ <combo_box.item label="Åšredni (256x256)" name="Medium(256x256)"/>
+ <combo_box.item label="Duży (512x512)" name="Large(512x512)"/>
+ <combo_box.item label="Wybierz" name="Custom"/>
</combo_box>
<combo_box label="Rozdzielczość" name="local_size_combo">
- <combo_box.item name="CurrentWindow" label="Obecne Okno" />
- <combo_box.item name="320x240" label="320x240" />
- <combo_box.item name="640x480" label="640x480" />
- <combo_box.item name="800x600" label="800x600" />
- <combo_box.item name="1024x768" label="1024x768" />
- <combo_box.item name="1280x1024" label="1280x1024" />
- <combo_box.item name="1600x1200" label="1600x1200" />
- <combo_box.item name="Custom" label="Wybierz" />
+ <combo_box.item label="Obecne Okno" name="CurrentWindow"/>
+ <combo_box.item label="320x240" name="320x240"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="1280x1024" name="1280x1024"/>
+ <combo_box.item label="1600x1200" name="1600x1200"/>
+ <combo_box.item label="Wybierz" name="Custom"/>
</combo_box>
<combo_box label="Format" name="local_format_combo">
- <combo_box.item name="PNG" label="PNG" />
- <combo_box.item name="JPEG" label="JPEG" />
- <combo_box.item name="BMP" label="BMP" />
+ <combo_box.item label="PNG" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP" name="BMP"/>
</combo_box>
<spinner label="Szer." name="snapshot_width"/>
<spinner label="Wys." name="snapshot_height"/>
- <check_box label="Ograniczone Proporcje" name="keep_aspect_check"/>
- <slider label="Jakość Zdjęcia" name="image_quality_slider"/>
+ <check_box label="Ograniczone proporcje" name="keep_aspect_check"/>
+ <slider label="Jakość zdjęcia" name="image_quality_slider"/>
<text name="layer_type_label">
Zapisz:
</text>
<combo_box label="Warstwy Obrazu" name="layer_types">
- <combo_box.item name="Colors" label="Kolory" />
- <combo_box.item name="Depth" label="Głębokość" />
- <combo_box.item name="ObjectMattes" label="Obiekty Åšlepe" />
+ <combo_box.item label="Kolory" name="Colors"/>
+ <combo_box.item label="Głębokość" name="Depth"/>
+ <combo_box.item label="Obiekty ślepe" name="ObjectMattes"/>
</combo_box>
<check_box label="Pokaż interfejs na zdjęciu" name="ui_check"/>
<check_box label="Pokaż obiekty HUD na zdjęciu" name="hud_check"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
index 0826508fd6..ac041dff6a 100644
--- a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Sound Preview" title="DŹWIĘK.WAV">
<text name="name_label">
Opis:
@@ -6,6 +6,6 @@
<text name="description_label">
Opis:
</text>
- <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" />
- <button label="Załaduj (L$[AMOUNT])" label_selected="Załaduj (L$[AMOUNT])" name="ok_btn" />
+ <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/>
+ <button label="Załaduj ([AMOUNT]L$)" label_selected="Załaduj ([AMOUNT]L$)" name="ok_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_stats.xml b/indra/newview/skins/default/xui/pl/floater_stats.xml
index acd3df0585..ee5fba4d63 100644
--- a/indra/newview/skins/default/xui/pl/floater_stats.xml
+++ b/indra/newview/skins/default/xui/pl/floater_stats.xml
@@ -3,17 +3,17 @@
<scroll_container name="statistics_scroll">
<container_view name="statistics_view">
<stat_view label="Podstawowe" name="basic">
- <stat_bar label="Ilość Obrazów/Sec (FPS)" name="fps"/>
+ <stat_bar label="Ilość obrazów/sek (FPS)" name="fps"/>
<stat_bar label="Przepustowość" name="bandwidth"/>
- <stat_bar label="Stracone Pakiety" name="packet_loss"/>
- <stat_bar label="Ping Sim" name="ping"/>
+ <stat_bar label="Stracone pakiety" name="packet_loss"/>
+ <stat_bar label="Ping sim" name="ping"/>
</stat_view>
<stat_view label="Zaawansowane" name="advanced">
<stat_view label="Renderuj" name="render">
<stat_bar label="KTris Drawn" name="ktrisframe"/>
<stat_bar label="KTris Drawn" name="ktrissec"/>
- <stat_bar label="Wszystkie Obiekty" name="objs"/>
- <stat_bar label="Nowe Obiekty" name="newobjs"/>
+ <stat_bar label="Wszystkie obiekty" name="objs"/>
+ <stat_bar label="Nowe obiekty" name="newobjs"/>
</stat_view>
<stat_view label="Tekstura" name="texture">
<stat_bar label="Suma" name="numimagesstat"/>
@@ -24,8 +24,8 @@
<stat_bar label="Bound Mem" name="glboundmemstat"/>
</stat_view>
<stat_view label="Sieć" name="network">
- <stat_bar label="Pakiety Wewnętrzne" name="packetsinstat"/>
- <stat_bar label="Pakiety Zewnętrzne" name="packetsoutstat"/>
+ <stat_bar label="Pakiety wewnętrzne" name="packetsinstat"/>
+ <stat_bar label="Pakiety zewnętrzne" name="packetsoutstat"/>
<stat_bar label="Obiekty" name="objectkbitstat"/>
<stat_bar label="Tesktura" name="texturekbitstat"/>
<stat_bar label="Asset" name="assetkbitstat"/>
@@ -40,30 +40,30 @@
<stat_bar label="Ilość Obrazów/Sec na Symulatorze (Sim FPS)" name="simfps"/>
<stat_bar label="Fizyka Obrazów/Sec" name="simphysicsfps"/>
<stat_view label="Szczegóły Fizyki" name="physicsdetail">
- <stat_bar label="Pinned Objects" name="physicspinnedtasks"/>
+ <stat_bar label="Pinned objects" name="physicspinnedtasks"/>
<stat_bar label="Niskie LOD Obiektów" name="physicslodtasks"/>
- <stat_bar label="Alokacja Pamięci" name="physicsmemoryallocated"/>
- <stat_bar label="Aktualizacja Agentów/Sec" name="simagentups"/>
- <stat_bar label="Główni Agenci" name="simmainagents"/>
- <stat_bar label="Child Agents" name="simchildagents"/>
+ <stat_bar label="Alokacja pamięci" name="physicsmemoryallocated"/>
+ <stat_bar label="Aktualizacja agentów/Sek" name="simagentups"/>
+ <stat_bar label="Główni agenci" name="simmainagents"/>
+ <stat_bar label="Child agents" name="simchildagents"/>
<stat_bar label="Obiekty" name="simobjects"/>
- <stat_bar label="Aktywne Obiekty" name="simactiveobjects"/>
- <stat_bar label="Aktywne Skrypty" name="simactivescripts"/>
- <stat_bar label="Wydarzenie Skryptowe" name="simscripteps"/>
- <stat_bar label="Pakiety Wewnętrzne" name="siminpps"/>
- <stat_bar label="Pakiety Zewnętrzne" name="simoutpps"/>
- <stat_bar label="Oczekiwane na Pobranie" name="simpendingdownloads"/>
- <stat_bar label="Oczekiwane na Załadowanie" name="simpendinguploads"/>
- <stat_bar label="Wszystkie Niepotwierdzone Bity" name="simtotalunackedbytes"/>
+ <stat_bar label="Aktywne obiekty" name="simactiveobjects"/>
+ <stat_bar label="Aktywne skrypty" name="simactivescripts"/>
+ <stat_bar label="Wydarzenie skryptowe" name="simscripteps"/>
+ <stat_bar label="Pakiety wewnętrzne" name="siminpps"/>
+ <stat_bar label="Pakiety zewnętrzne" name="simoutpps"/>
+ <stat_bar label="Oczekiwane na pobranie" name="simpendingdownloads"/>
+ <stat_bar label="Oczekiwane na załadowanie" name="simpendinguploads"/>
+ <stat_bar label="Wszystkie niepotwierdzone bity" name="simtotalunackedbytes"/>
</stat_view>
<stat_view label="Czas (ms)" name="simperf">
- <stat_bar label="Całkowity Czas Obrazu" name="simframemsec"/>
- <stat_bar label="Czas Sieciowy" name="simnetmsec"/>
- <stat_bar label="Czas Fizyki" name="simsimphysicsmsec"/>
- <stat_bar label="Czas Symulatora" name="simsimothermsec"/>
- <stat_bar label="Czas Agenta" name="simagentmsec"/>
- <stat_bar label="Czas Obrazu" name="simimagesmsec"/>
- <stat_bar label="Czas Skryptu" name="simscriptmsec"/>
+ <stat_bar label="Całkowity czas obrazu" name="simframemsec"/>
+ <stat_bar label="Czas sieciowy" name="simnetmsec"/>
+ <stat_bar label="Czas fizyki" name="simsimphysicsmsec"/>
+ <stat_bar label="Czas symulatora" name="simsimothermsec"/>
+ <stat_bar label="Czas agenta" name="simagentmsec"/>
+ <stat_bar label="Czas obrazu" name="simimagesmsec"/>
+ <stat_bar label="Czas skryptu" name="simscriptmsec"/>
</stat_view>
</stat_view>
</container_view>
diff --git a/indra/newview/skins/default/xui/pl/floater_sys_well.xml b/indra/newview/skins/default/xui/pl/floater_sys_well.xml
new file mode 100644
index 0000000000..e6c73af4f3
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_sys_well.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="sys_well_window" title="ZAWIADOMIENIA">
+ <string name="title_im_well_window">
+ ROZMOWY
+ </string>
+ <string name="title_notification_well_window">
+ ZAWIADOMIENIA
+ </string>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_telehub.xml b/indra/newview/skins/default/xui/pl/floater_telehub.xml
index 9f564452a9..32cc08810d 100644
--- a/indra/newview/skins/default/xui/pl/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/pl/floater_telehub.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="OBSÅUGA TELEPORTERA" min_height="300" height="300" >
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater height="300" min_height="300" name="telehub" title="TELPORTER">
<text name="status_text_connected" width="250">
Teleporter połączony z obiektem [OBJECT]
</text>
@@ -12,20 +12,17 @@
<text name="help_text_not_connected">
Wybierz obiekt i kliknij Połącz z teleporterem
</text>
- <button label="Połącz z teleporterem" name="connect_btn" width="132" />
- <button label="Rozłącz" name="disconnect_btn" left="152" width="88"/>
+ <button label="Połącz z teleporterem" name="connect_btn" width="132"/>
+ <button label="Rozłącz" left="152" name="disconnect_btn" width="88"/>
<text name="spawn_points_text" width="250">
- Punkty Składowe (pozycje - nie obiekty!):
+ Punkty składowe (pozycje - nie obiekty!):
</text>
- <button label="Dodaj Punkt" name="add_spawn_point_btn" />
- <button label="Usuń Punkt" name="remove_spawn_point_btn" />
+ <button label="Dodaj punkt" name="add_spawn_point_btn"/>
+ <button label="Usuń punkt" name="remove_spawn_point_btn"/>
<text name="spawn_point_help">
- Wybierz obiekt i wybierz Dodaj by sprecyzować
-pozycję. Wówczas możesz przesunąć lub
-usunąć obiekt. Pozycje są relatywne do części
-centralnej teleportera.
-
-Wybierz obiekt z listy by zobaczyć jego pozycję
-w świecie.
+ Wybierz obiekt i wybierz &quot;Dodaj&quot; by sprecyzować pozycję.
+Możesz przesunąć lub usunąć obiekt.
+Pozycje są relatywne do części centralnej teleportera.
+Wybierz obiekt z listy by zobaczyć jego pozycję w świecie.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
index 48366e2b64..52c0cb8a93 100644
--- a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
@@ -1,23 +1,23 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="WYBÓR TEKSTURY">
+<floater name="texture picker" title="ULUBIONE: TEKSTURA">
<string name="choose_picture">
Kliknij by wybrać obraz
</string>
<text name="Multiple">
- Wiele
+ Wiele tekstur
</text>
<text name="unknown">
- Wymiary: [DIMENSIONS]
+ Rozmiar: [DIMENSIONS]
</text>
<button label="Domyślna" label_selected="Domyślna" name="Default"/>
<button label="Żadna" label_selected="Żadna" name="None"/>
<button label="Pusta" label_selected="Pusta" name="Blank"/>
- <check_box label="Pokaż Foldery" name="show_folders_check"/>
- <search_editor label="Wpisz nazwę tutaj by wyszukać" name="inventory search editor"/>
- <check_box label="Zastosuj od razu" name="apply_immediate_check"/>
+ <check_box label="Pokaż foldery" name="show_folders_check"/>
+ <search_editor label="Filtruj tektury" name="inventory search editor"/>
+ <check_box label="Zastosuj teraz" name="apply_immediate_check"/>
<button label="" label_selected="" name="Pipette"/>
<button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
- <button label="Wybierz" label_selected="Wybierz" name="Select"/>
+ <button label="OK" label_selected="OK" name="Select"/>
<string name="pick title">
Wybór:
</string>
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
index e898c283c5..5bc3811ef6 100644
--- a/indra/newview/skins/default/xui/pl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tools.xml
@@ -1,45 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="BUDUJ">
+<floater name="toolbox floater" short_title="BUDUJ" title="">
+ <floater.string name="status_rotate">
+ Przeciągaj kolorowe pierścienie żeby obracać obiekt
+ </floater.string>
+ <floater.string name="status_scale">
+ Kliknij i przeciągaj żeby rozciągnąć wybraną stronę
+ </floater.string>
+ <floater.string name="status_move">
+ Wybierz opcjÄ™:
+ </floater.string>
+ <floater.string name="status_modifyland">
+ Kliknij i przytrzymaj żeby modyfikować teren
+ </floater.string>
+ <floater.string name="status_camera">
+ Kliknij i przeciągnij żeby zmienić widok
+ </floater.string>
+ <floater.string name="status_grab">
+ Przeciągnij by przesunąć, wybierz Ctrl by podnieść, wybierz Ctrl-Shift by obrócić
+ </floater.string>
+ <floater.string name="status_place">
+ Kliknij in-world by zacząć budować
+ </floater.string>
+ <floater.string name="status_selectland">
+ Edytowanie Terenu:
+ </floater.string>
+ <floater.string name="grid_screen_text">
+ Widok
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Lokalna
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Åšwiat
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Względa
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Załączniki
+ </floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Zbliżenie"/>
<button label="" label_selected="" name="button move" tool_tip="Przesunięcie"/>
<button label="" label_selected="" name="button edit" tool_tip="Edycja"/>
<button label="" label_selected="" name="button create" tool_tip="Stwórz"/>
<button label="" label_selected="" name="button land" tool_tip="Teren"/>
+ <text name="text status">
+ Przeciągnij żeby przenieść, shift-przeciągnij żeby skopiować
+ </text>
<radio_group name="focus_radio_group">
<radio_item label="Zbliżenie" name="radio zoom"/>
<radio_item label="Obracanie (Ctrl)" name="radio orbit"/>
- <radio_item label="Przesunięcie (Ctrl-Shift)" name="radio pan"/>
+ <radio_item label="Przesunięcie (Ctrl+Shift)" name="radio pan"/>
</radio_group>
<radio_group name="move_radio_group">
<radio_item label="Przesuń" name="radio move"/>
<radio_item label="PodnieÅ› (Ctrl)" name="radio lift"/>
- <radio_item label="Obróć (Ctrl-Shift)" name="radio spin"/>
+ <radio_item label="Obracanie (Ctrl+Shift)" name="radio spin"/>
</radio_group>
<radio_group name="edit_radio_group">
- <radio_item label="Pozycja" name="radio position"/>
+ <radio_item label="Przesuń" name="radio position"/>
<radio_item label="Obróć (Ctrl)" name="radio rotate"/>
- <radio_item label="RozciÄ…gnij (Ctrl-Shift)" name="radio stretch"/>
- <radio_item label="Wybierz TeksturÄ™" name="radio select face"/>
+ <radio_item label="RozciÄ…gnij (Ctrl+Shift)" name="radio stretch"/>
+ <radio_item label="Wybierz teksturÄ™" name="radio select face"/>
</radio_group>
- <check_box label="Edytuj Połączone Części" name="checkbox edit linked parts"/>
- <text name="text ruler mode">
- Linijka:
+ <check_box label="Edytuj połączone części" name="checkbox edit linked parts"/>
+ <text name="RenderingCost" tool_tip="Pokazuje koszt renderowania tego obiektu">
+ þ: [COUNT]
</text>
- <combo_box name="combobox grid mode">
- <combo_box.item name="World" label="Åšwiat"
- />
- <combo_box.item name="Local" label="Lokalna"
- />
- <combo_box.item name="Reference" label="Względna"
- />
- </combo_box>
<check_box label="RozciÄ…gnij 2 Strony" name="checkbox uniform"/>
- <check_box label="RozciÄ…gnij TeksturÄ™" name="checkbox stretch textures"/>
- <check_box label="Użyj Siatki" name="checkbox snap to grid"/>
- <button label="Opcje..." label_selected="Opcje..." name="Options..."/>
- <text name="text status">
- Przeciągnij żeby przenieść, shift-przeciągnij żeby skopiować
- </text>
+ <check_box initial_value="true" label="RozciÄ…gnij TeksturÄ™" name="checkbox stretch textures"/>
+ <check_box initial_value="true" label="Użyj siatki" name="checkbox snap to grid"/>
+ <combo_box name="combobox grid mode" tool_tip="Wybierz rodzaj linijki siatki dla pozycjonowania obiektu">
+ <combo_box.item label="Åšwiat" name="World"/>
+ <combo_box.item label="Lokalna" name="Local"/>
+ <combo_box.item label="Względna" name="Reference"/>
+ </combo_box>
+ <button label="Opcje..." label_selected="Opcje..." name="Options..." tool_tip="Więcej opcji siatki"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Sześcian"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Graniastosłup"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="Ostrosłup"/>
@@ -57,7 +93,7 @@
<button label="" label_selected="" name="ToolGrass" tool_tip="Trawa"/>
<check_box label="Trzymaj zaznaczone" name="checkbox sticky"/>
<check_box label="Kopiuj zaznaczone" name="checkbox copy selection"/>
- <check_box label="Åšrodek" name="checkbox copy centers"/>
+ <check_box initial_value="true" label="Åšrodek" name="checkbox copy centers"/>
<check_box label="Obróć" name="checkbox copy rotates"/>
<radio_group name="land_radio_group">
<radio_item label="Zaznaczanie" name="radio select land"/>
@@ -68,7 +104,6 @@
<radio_item label="Fałdowanie" name="radio noise"/>
<radio_item label="Cofnij modyfikacjÄ™" name="radio revert"/>
</radio_group>
- <button label="Zastosuj" label_selected="Zastosuj" name="button apply to selection" tool_tip="Modyfikuj zaznaczony teren"/>
<text name="Bulldozer:">
Burzenie:
</text>
@@ -78,15 +113,52 @@
<text name="Strength:">
Siła
</text>
- <volume_slider name="slider force"/>
+ <slider_bar initial_value="0.00" name="slider force"/>
+ <button label="Zastosuj" label_selected="Zastosuj" name="button apply to selection" tool_tip="Modyfikuj zaznaczony teren"/>
<text name="obj_count">
- Wybrane obiekty: [COUNT]
+ Obiekty: [COUNT]
</text>
<text name="prim_count">
- primy: [COUNT]
+ Primy: [COUNT]
</text>
<tab_container name="Object Info Tabs">
<panel label="Ogólne" name="General">
+ <panel.string name="text deed continued">
+ Przypisz
+ </panel.string>
+ <panel.string name="text deed">
+ Przypisz
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Możesz modyfikować ten obiekt
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Możesz modyfikować te obiekty
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Nie możesz modyfikować tego obiektu
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Nie możesz modyfikować tych obiektów
+ </panel.string>
+ <panel.string name="text modify warning">
+ Musisz zaznaczyć cały obiekt by ustawić prawa.
+ </panel.string>
+ <panel.string name="Cost Default">
+ Cena: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Cena całkowita: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Cena za: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Cena mieszana
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Sprzedaż mieszana
+ </panel.string>
<text name="Name:">
Nazwa:
</text>
@@ -101,133 +173,74 @@
<text name="Creator Name">
Thrax Linden
</text>
- <button label="Profil..." label_selected="Profil..." name="button creator profile"/>
<text name="Owner:">
Właściciel:
</text>
<text name="Owner Name">
Thrax Linden
</text>
- <button label="Profil..." label_selected="Profil..." name="button owner profile"/>
<text name="Group:">
Grupa:
</text>
- <text name="Group Name Proxy">
- The Lindens
- </text>
- <button label="Ustaw..." label_selected="Ustaw..." name="button set group"/>
- <text name="Permissions:">
- Prawa:
- </text>
-
- <check_box label="Udostępnij grupie" name="checkbox share with group" tool_tip="Pozwól członkom grupy przesuwać, modyfikować, kopiować i usuwać."/>
- <string name="text deed continued">
- Przypisz...
- </string>
- <string name="text deed">
- Przypisz
- </string>
- <button label="Przypisz..." label_selected="Przypisz..." name="button deed" tool_tip=""/>
- <check_box label="Pozwól przesuwać każdemu" name="checkbox allow everyone move"/>
- <check_box label="Pozwól kopiować każdemu" name="checkbox allow everyone copy"/>
- <check_box label="Pokaż w wyszukiwarce" name="search_check" tool_tip="Udostępnij wyświetlanie się tego przedmiotu w wynikach wyszukiwania"/>
- <check_box label="Na Sprzedaż" name="checkbox for sale"/>
- <text name="Cost">
- Cena: L$
+ <button label="Ustaw..." label_selected="Ustaw..." name="button set group" tool_tip="Wybierz grupę, która uzyska dostęp do praw obiektu"/>
+ <name_box initial_value="Åadowanie..." name="Group Name Proxy"/>
+ <button label="Przypisz" label_selected="Przypisz" name="button deed" tool_tip="Przypisanie oddaje prawa następnemu właścicielowi. Obiekty posiadane przez grupę mogą zostać przypisane przez oficera grupy."/>
+ <check_box label="Udostępnij" name="checkbox share with group" tool_tip="Pozwól członkom grupy na dzielenie praw do modyfikacji tego obiektu. Musisz przypisać obiekt aby uaktywnić ograniczenia dla ról."/>
+ <text name="label click action">
+ Kliknij:
</text>
- <line_editor name="Edit Cost"/>
+ <combo_box name="clickaction">
+ <combo_box.item label="Dotknij (domyślne)" name="Touch/grab(default)"/>
+ <combo_box.item label="Usiądź na obiekcie" name="Sitonobject"/>
+ <combo_box.item label="Kup obiekt" name="Buyobject"/>
+ <combo_box.item label="Zapłać obiektowi" name="Payobject"/>
+ <combo_box.item label="Otwórz" name="Open"/>
+ <combo_box.item label="Przybliż" name="Zoom"/>
+ </combo_box>
+ <check_box label="Na sprzedaż:" name="checkbox for sale"/>
<combo_box name="sale type">
<combo_box.item label="Kopia" name="Copy"/>
<combo_box.item label="Zawartość" name="Contents"/>
<combo_box.item label="Orginał" name="Original"/>
</combo_box>
-
- <text name="label click action">
- Lewe Kliknięcie:
- </text>
- <combo_box name="clickaction">
- <combo_box.item name="Touch/grab(default)" label="Dotknij (domyślne)"
- />
- <combo_box.item name="Sitonobject" label="Usiądź na Obiekcie"
- />
- <combo_box.item name="Buyobject" label="Kup Obiekt"
- />
- <combo_box.item name="Payobject" label="Zapłać Obiektowi"
- />
- <combo_box.item name="Open" label="Otwórz"
- />
- <combo_box.item name="Play" label="Odtwarzaj Media"
- />
- <combo_box.item name="Opemmedia" label="Otwrórz Media"
- />
- </combo_box>
- <panel name="perms_build">
- <text name="perm_modify">
- Nie masz prawda do modyfikacji tego obiektu
- </text>
- <text name="B:">
- B:
- </text>
- <text name="O:">
- O:
- </text>
- <text name="G:">
- G:
- </text>
- <text name="E:">
- E:
- </text>
- <text name="N:">
- N:
- </text>
- <text name="F:">
- F:
- </text>
- <text name="Next owner can:">
- Następny właściciel:
- </text>
- <check_box label="Zmienia" name="checkbox next owner can modify"/>
- <check_box label="Kopiuje" name="checkbox next owner can copy"/>
- <check_box name="checkbox next owner can transfer"/>
- </panel>
- <string name="text modify info 1">
- Możesz modyfikować ten obiekt
- </string>
- <string name="text modify info 2">
- Możesz modyfikować te obiekty
- </string>
- <string name="text modify info 3">
- Nie możesz modyfikować tego obiektu
- </string>
- <string name="text modify info 4">
- Nie możesz modyfikować tych obieków
- </string>
- <string name="text modify warning">
- Musisz zaznaczyć cały obiekt by ustawić prawa
- </string>
- <string name="Cost Default">
- Cena: L$
- </string>
- <string name="Cost Total">
- Cena Całości: L$
- </string>
- <string name="Cost Per Unit">
- Cena Za: L$
- </string>
- <string name="Cost Mixed">
- Cena Mieszana
- </string>
- <string name="Sale Mixed">
- Sprzedaż Mieszana
- </string>
+ <spinner label="Cena: L$" name="Edit Cost"/>
+ <check_box label="Pokaż w wyszukiwarce" name="search_check" tool_tip="Udostępnij wyświetlanie się tego przedmiotu w wynikach wyszukiwania"/>
+ <panel name="perms_build">
+ <text name="perm_modify">
+ Możesz modyfikować ten obiekt
+ </text>
+ <text name="Anyone can:">
+ Każdy:
+ </text>
+ <check_box label="Przesuń" name="checkbox allow everyone move"/>
+ <check_box label="Kopiuj" name="checkbox allow everyone copy"/>
+ <text name="Next owner can:">
+ Następny Właściciel:
+ </text>
+ <check_box label="Zmienia" name="checkbox next owner can modify"/>
+ <check_box label="Kopiuje" name="checkbox next owner can copy"/>
+ <check_box label="Oddaje/Sprzedaje" name="checkbox next owner can transfer" tool_tip="Następny Właściciel może oddawać lub sprzedawać ten obiekt"/>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
+ </panel>
</panel>
<panel label="Obiekt" name="Object">
- <text name="select_single">
- Wybierz tylko jeden element by edytować jego parametry
- </text>
- <text name="edit_object">
- Edytuj parametry obiektu:
- </text>
<check_box label="Zablokowany" name="checkbox locked" tool_tip="Chroni obiekty przed ich przesunięciem lub usunięciem. Pomocne także w czasie budowania by uniknąc niepotrzebnych edycji."/>
<check_box label="Fizyczny" name="Physical Checkbox Ctrl" tool_tip="Umożliwia obcność sił grawitacyjnych i oddziaływania pomiędzy obiektami."/>
<check_box label="Tymczasowy" name="Temporary Checkbox Ctrl" tool_tip="Umożliwia usunięcie obiektu po 1 minucie od jego stworzenia."/>
@@ -250,48 +263,27 @@
<spinner label="X" name="Rot X"/>
<spinner label="Y" name="Rot Y"/>
<spinner label="Z" name="Rot Z"/>
- <text name="label material">
- Materiał
- </text>
- <combo_box name="material">
- <combo_box.item name="Stone" label="Kamień"
- />
- <combo_box.item name="Metal" label="Metal"
- />
- <combo_box.item name="Glass" label="Szkło"
- />
- <combo_box.item name="Wood" label="Drewno"
- />
- <combo_box.item name="Flesh" label="Ciało"
- />
- <combo_box.item name="Plastic" label="Plastik"
- />
- <combo_box.item name="Rubber" label="Guma"
- />
- </combo_box>
- <text name="label basetype">
- Rodzaj Bloku Budowalnego
- </text>
<combo_box name="comboBaseType">
- <combo_box.item name="Box" label="Klocek"
- />
- <combo_box.item name="Cylinder" label="Walec"
- />
- <combo_box.item name="Prism" label="Graniastosłup"
- />
- <combo_box.item name="Sphere" label="Kula"
- />
- <combo_box.item name="Torus" label="Torus"
- />
- <combo_box.item name="Tube" label="Rura"
- />
- <combo_box.item name="Ring" label="Pierścień"
- />
- <combo_box.item name="Sculpted" label="Skulpty"
- />
+ <combo_box.item label="Klocek" name="Box"/>
+ <combo_box.item label="Walec" name="Cylinder"/>
+ <combo_box.item label="Graniastosłup" name="Prism"/>
+ <combo_box.item label="Kula" name="Sphere"/>
+ <combo_box.item label="Torus" name="Torus"/>
+ <combo_box.item label="Rura" name="Tube"/>
+ <combo_box.item label="Pierścień" name="Ring"/>
+ <combo_box.item label="Skulpty" name="Sculpted"/>
+ </combo_box>
+ <combo_box name="material">
+ <combo_box.item label="Kamień" name="Stone"/>
+ <combo_box.item label="Metal" name="Metal"/>
+ <combo_box.item label="Szkło" name="Glass"/>
+ <combo_box.item label="Drewno" name="Wood"/>
+ <combo_box.item label="Ciało" name="Flesh"/>
+ <combo_box.item label="Plastik" name="Plastic"/>
+ <combo_box.item label="Guma" name="Rubber"/>
</combo_box>
<text name="text cut">
- Wykrój początek i koniec
+ Wykrój (początek/koniec)
</text>
<spinner label="P" name="cut begin"/>
<spinner label="K" name="cut end"/>
@@ -307,17 +299,13 @@
Kształt Wydrążenia
</text>
<combo_box name="hole">
- <combo_box.item name="Default" label="Domyślny"
- />
- <combo_box.item name="Circle" label="Koło"
- />
- <combo_box.item name="Square" label="Kwadrat"
- />
- <combo_box.item name="Triangle" label="Trójkąt"
- />
+ <combo_box.item label="Domyślny" name="Default"/>
+ <combo_box.item label="Koło" name="Circle"/>
+ <combo_box.item label="Kwadrat" name="Square"/>
+ <combo_box.item label="Trójkąt" name="Triangle"/>
</combo_box>
<text name="text twist">
- Skręcenie
+ Skręcenie (początek/koniec)
</text>
<spinner label="P" name="Twist Begin"/>
<spinner label="K" name="Twist End"/>
@@ -325,23 +313,23 @@
Zwężenie
</text>
<text name="scale_hole">
- Rozmiar Wgłębienia
+ Rozmiar wgłębienia
</text>
<spinner label="X" name="Taper Scale X"/>
<spinner label="Y" name="Taper Scale Y"/>
<text name="text topshear">
- Przesunięcie Górne
+ Przesunięcie górne
</text>
<spinner label="X" name="Shear X"/>
<spinner label="Y" name="Shear Y"/>
<text name="advanced_cut">
- Wykrojenie Przekroju
+ Wykrojenie przekroju (poczÄ…tek/koniec)
</text>
<text name="advanced_dimple">
- Przesunięcie Promienia
+ Przesunięcie promienia (początek/koniec)
</text>
<text name="advanced_slice">
- Przetnij poczÄ…tek i koniec
+ Przetnij(poczÄ…tek/koniec)
</text>
<spinner label="P" name="Path Limit Begin"/>
<spinner label="K" name="Path Limit End"/>
@@ -358,23 +346,18 @@
</text>
<spinner name="Radius Offset"/>
<spinner name="Revolutions"/>
- <texture_picker label="Tekstura Skulptowa" name="sculpt texture control" tool_tip="Click to choose a picture"/>
- <check_box label="Odbicie" name="sculpt mirror control" tool_tip="Odwraca skulpt wzdłóż osi X."/>
- <check_box label="Åšrodek na zewnÄ…trz" name="sculpt invert control" tool_tip="Odwarca normalne skulptu."/>
+ <texture_picker label="Tekstura skulptowa" name="sculpt texture control" tool_tip="Click to choose a picture"/>
+ <check_box label="Odbicie" name="sculpt mirror control" tool_tip="Odwraca skulpt wzdłuż osi X."/>
+ <check_box label="Åšrodek na zewnÄ…trz" name="sculpt invert control" tool_tip="Odwraca normalne skulptu."/>
<text name="label sculpt type">
- Typ Ścięgna
+ Typ ścięgna
</text>
<combo_box name="sculpt type control">
- <combo_box.item name="None" label="(żadne)"
- />
- <combo_box.item name="Sphere" label="Kula"
- />
- <combo_box.item name="Torus" label="Torus"
- />
- <combo_box.item name="Plane" label="Płaczyzna"
- />
- <combo_box.item name="Cylinder" label="Walec"
- />
+ <combo_box.item label="(żadne)" name="None"/>
+ <combo_box.item label="Kula" name="Sphere"/>
+ <combo_box.item label="Torus" name="Torus"/>
+ <combo_box.item label="Płaszczyzna" name="Plane"/>
+ <combo_box.item label="Walec" name="Cylinder"/>
</combo_box>
</panel>
<panel label="Atrybuty" name="Features">
@@ -384,7 +367,7 @@
<text name="edit_object">
Edytuj cechy obiektu:
</text>
- <check_box label="Elastyczność" name="Flexible1D Checkbox Ctrl" tool_tip=""/>
+ <check_box label="Elastyczność" name="Flexible1D Checkbox Ctrl" tool_tip="Elastyczność wzdłuż osi Z (tylko po stronie klienta)"/>
<spinner label="Gładkość" name="FlexNumSections"/>
<spinner label="Ciężar" name="FlexGravity"/>
<spinner label="Drżenie" name="FlexFriction"/>
@@ -394,124 +377,99 @@
<spinner label="Siła Y" name="FlexForceY"/>
<spinner label="Siła Z" name="FlexForceZ"/>
<check_box label="Światło" name="Light Checkbox Ctrl" tool_tip="Umożliwia emitajcę światła"/>
- <text name="label color">
- Kolor
- </text>
- <color_swatch label="" name="colorswatch" tool_tip="Kliknij by wybrać kolor"/>
+ <color_swatch label="" name="colorswatch" tool_tip="Kliknij aby wybrać kolor"/>
+ <texture_picker label="" name="light texture control" tool_tip="Kliknij aby wybrać obraz (efekt występuje tylko z aktywowanym opóźnionym renderowaniem)"/>
<spinner label="Siła" name="Light Intensity"/>
+ <spinner label="FOV" name="Light FOV"/>
<spinner label="Promień" name="Light Radius"/>
+ <spinner label="Przybliżenie" name="Light Focus"/>
<spinner label="Spadek" name="Light Falloff"/>
+ <spinner label="Otoczenie/Nastrój" name="Light Ambiance"/>
</panel>
<panel label="Tekstura" name="Texture">
+ <panel.string name="string repeats per meter">
+ Powtórzenia / m
+ </panel.string>
+ <panel.string name="string repeats per face">
+ Powtórzenia
+ </panel.string>
<texture_picker label="Tekstura" name="texture control" tool_tip="Kliknij by wybrać obraz"/>
- <color_swatch label="Kolor" name="colorswatch" tool_tip="Kliknij by wybrać kolor"/>
- <text name="color trans" left="170" width="99">
+ <color_swatch label="Kolor" name="colorswatch" tool_tip="Kliknij aby wybrać kolor"/>
+ <text left="170" name="color trans" width="99">
Przezroczystość%
</text>
<spinner left="170" name="ColorTrans"/>
- <text name="glow label" left="170">
+ <text left="170" name="glow label">
Blask
</text>
<spinner left="170" name="glow"/>
- <check_box label="Jaskrawość" name="checkbox fullbright" left="170"/>
+ <check_box label="Jaskrawość" left="170" name="checkbox fullbright"/>
<text name="tex gen">
Mapowanie
</text>
<combo_box name="combobox texgen">
- <combo_box.item name="Default" label="Domyślne"
- />
- <combo_box.item name="Planar" label="Planarne"
- />
+ <combo_box.item label="Domyślne" name="Default"/>
+ <combo_box.item label="Planarne" name="Planar"/>
</combo_box>
<text name="label shininess">
Połysk
</text>
<combo_box name="combobox shininess">
- <combo_box.item name="None" label="Żadny"
- />
- <combo_box.item name="Low" label="Niski"
- />
- <combo_box.item name="Medium" label="Åšredni"
- />
- <combo_box.item name="High" label="Wysoki"
- />
+ <combo_box.item label="Żadny" name="None"/>
+ <combo_box.item label="Niski" name="Low"/>
+ <combo_box.item label="Åšredni" name="Medium"/>
+ <combo_box.item label="Wysoki" name="High"/>
</combo_box>
<text name="label bumpiness">
Powierzchnia
</text>
<combo_box name="combobox bumpiness">
- <combo_box.item name="None" label="Żadna"
- />
- <combo_box.item name="Brightness" label="Najjaśniejsza"
- />
- <combo_box.item name="Darkness" label="Najciemniejsza"
- />
- <combo_box.item name="woodgrain" label="Drewniano-ziarnista"
- />
- <combo_box.item name="bark" label="Kory Drzewa"
- />
- <combo_box.item name="bricks" label="Cegieł"
- />
- <combo_box.item name="checker" label="Planszy Szachowej"
- />
- <combo_box.item name="concrete" label="Betonu"
- />
- <combo_box.item name="crustytile" label="Płytki/Kafelki"
- />
- <combo_box.item name="cutstone" label="Kamienia"
- />
- <combo_box.item name="discs" label="Dysku CD"
- />
- <combo_box.item name="gravel" label="Żwiru"
- />
- <combo_box.item name="petridish" label="Skamieliny"
- />
- <combo_box.item name="siding" label="Brzegu"
- />
- <combo_box.item name="stonetile" label="Płytki Kamiennej"
- />
- <combo_box.item name="stucco" label="Stucco"
- />
- <combo_box.item name="suction" label="Suction"
- />
- <combo_box.item name="weave" label="Fali"
- />
+ <combo_box.item label="Żadna" name="None"/>
+ <combo_box.item label="Najjaśniejsza" name="Brightness"/>
+ <combo_box.item label="Najciemniejsza" name="Darkness"/>
+ <combo_box.item label="Drewniano-ziarnista" name="woodgrain"/>
+ <combo_box.item label="Kory Drzewa" name="bark"/>
+ <combo_box.item label="Cegieł" name="bricks"/>
+ <combo_box.item label="Planszy Szachowej" name="checker"/>
+ <combo_box.item label="Betonu" name="concrete"/>
+ <combo_box.item label="Płytki/Kafelki" name="crustytile"/>
+ <combo_box.item label="Kamienia" name="cutstone"/>
+ <combo_box.item label="Dysku CD" name="discs"/>
+ <combo_box.item label="Żwiru" name="gravel"/>
+ <combo_box.item label="Skamieliny" name="petridish"/>
+ <combo_box.item label="Brzegu" name="siding"/>
+ <combo_box.item label="Płytki Kamiennej" name="stonetile"/>
+ <combo_box.item label="Stucco" name="stucco"/>
+ <combo_box.item label="Suction" name="suction"/>
+ <combo_box.item label="Fali" name="weave"/>
</combo_box>
<text name="tex scale">
- Ilość powtórzeń
+ Powtórzenia
</text>
<spinner label="Poziomo (U)" name="TexScaleU"/>
<check_box label="Odwróć" name="checkbox flip s"/>
<spinner label="Pionowo (V)" name="TexScaleV"/>
<check_box label="Odwróć" name="checkbox flip t"/>
- <text name="tex rotate">
- Obrót (stopnie)
- </text>
- <spinner name="TexRot"/>
- <string name="string repeats per meter">
- Powtórzenia / m
- </string>
- <string name="string repeats per face">
- Powtórzenia
- </string>
- <text name="rpt">
- Powtórzenia / m
- </text>
- <spinner name="rptctrl"/>
+ <spinner label="Powtórzenia˚" name="TexRot"/>
+ <spinner label="Powtórzenia / metr" name="rptctrl"/>
<button label="Zastosuj" label_selected="Zastosuj" name="button apply"/>
<text name="tex offset">
- Dopasowanie
+ Wyrównanie tekstury
</text>
<spinner label="Poziome (U)" name="TexOffsetU"/>
<spinner label="Pionowe (V)" name="TexOffsetV"/>
- <text name="textbox autofix">
- Dopasuj Teksturę Mediów
-(najpierw załaduj)
- </text>
- <button label="Dopasuj" label_selected="Dopasuj" name="button align" left="160"/>
+ <panel name="Add_Media">
+ <text name="media_tex">
+ Media
+ </text>
+ <button name="add_media" tool_tip="Dodaj media"/>
+ <button name="delete_media" tool_tip="Usuń tą teksturę mediów"/>
+ <button name="edit_media" tool_tip="Edytuj media"/>
+ <button label="Dodaj" label_selected="Dopasuj teksturę mediów" name="button align" tool_tip="Dodaj teksturę mediów (musi się najpierw załadować)"/>
+ </panel>
</panel>
<panel label="Treść" name="Contents">
- <button label="Nowy Skrypt" label_selected="Nowy Skrypt" name="button new script"/>
+ <button label="Nowy skrypt" label_selected="Nowy skrypt" name="button new script"/>
<button label="Prawa" name="button permissions"/>
</panel>
</tab_container>
@@ -520,62 +478,29 @@
Informacje o Posiadłości
</text>
<text name="label_area_price">
- Cena: L$[PRICE] za [AREA] m
+ Cena: L$[PRICE] za [AREA] m²
</text>
<text name="label_area">
- Obszar: [AREA] m
+ Obszar: [AREA] m²
</text>
- <button label="O Posiadłości..." label_selected="O Posiadłości..." name="button about land"/>
- <check_box label="Pokaż Właścicieli" name="checkbox show owners" tool_tip="Pokoloruj posiadłości zgodnie z przynależnością do właściciela: &#10;&#10;Zielony = Twoja Posiadłość &#10;Morski = Posiadłość Twojej Grupy &#10;Czerwony = Posiadłości Innych &#10;Żółty = Na Sprzedaż &#10;Fioletowy = Na Aukcję &#10;Szary = Publiczna"/>
- <button label="?" label_selected="?" name="button show owners help" left_delta="120"/>
+ <button label="O Posiadłości" label_selected="O Posiadłości" name="button about land"/>
+ <check_box label="Pokaż Właścicieli" name="checkbox show owners" tool_tip="Pokoloruj Posiadłości zgodnie z przynależnością do Właściciela:
+
+Zielony = Twoja Posiadłość
+Morski = Posiadłość Twojej Grupy
+Czerwony = Posiadłości innych
+Żółty = Na sprzedaż
+Fioletowy = Na aukcjÄ™
+Szary = Publiczna"/>
<text name="label_parcel_modify">
Modyfikuj Posiadłość
</text>
<button label="Podziel" label_selected="Podziel" name="button subdivide land"/>
<button label="Złącz" label_selected="Złącz" name="button join land"/>
<text name="label_parcel_trans">
- Transakcje na posiadłości
+ Transakcje na Posiadłości
</text>
- <button label="Kup" label_selected="Kup" name="button buy land"/>
- <button label="Anuluj" label_selected="Anuluj" name="button abandon land"/>
+ <button label="Kup Posiadłość" label_selected="Kup Posiadłość" name="button buy land"/>
+ <button label="Porzuć Posiadłość" label_selected="Porzuć Posiadłość" name="button abandon land"/>
</panel>
- <floater.string name="status_rotate">
- Przeciągaj kolorowe pierścienie żeby obracać obiekt
- </floater.string>
- <floater.string name="status_scale">
- Kliknij i przeciągaj żeby rozciągnąć wybraną stronę
- </floater.string>
- <floater.string name="status_move">
- Wybierz opcjÄ™:
- </floater.string>
- <floater.string name="status_modifyland">
- Kliknij i przytrzymaj żeby modyfikować teren
- </floater.string>
- <floater.string name="status_camera">
- Kliknij i przeciągnij żeby zmienić widok
- </floater.string>
- <floater.string name="status_grab">
- Przeciągnij by przesunąć, wybierz Ctrl by podnieść, wybierz Ctrl-Shift by obrócić
- </floater.string>
- <floater.string name="status_place">
- Kliknij in-world by zacząć budować
- </floater.string>
- <floater.string name="status_selectland">
- Edytowanie Terenu:
- </floater.string>
- <floater.string name="grid_screen_text">
- Widok
- </floater.string>
- <floater.string name="grid_local_text">
- Lokalna
- </floater.string>
- <floater.string name="grid_world_text">
- Åšwiat
- </floater.string>
- <floater.string name="grid_reference_text">
- Względa
- </floater.string>
- <floater.string name="grid_attachment_text">
- Załączniki
- </floater.string>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_top_objects.xml b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
index e7299b0abb..6afbce7e10 100644
--- a/indra/newview/skins/default/xui/pl/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
@@ -1,55 +1,56 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="ÅADOWANIE...">
+<floater name="top_objects" title="Główne Obiekty">
+ <floater.string name="top_scripts_title">
+ Główne skrypty
+ </floater.string>
+ <floater.string name="top_scripts_text">
+ [COUNT] skryptów działa w czasie [TIME] ms
+ </floater.string>
+ <floater.string name="scripts_score_label">
+ Czas
+ </floater.string>
+ <floater.string name="scripts_mono_time_label">
+ Mono Time
+ </floater.string>
+ <floater.string name="top_colliders_title">
+ Główne kolizje
+ </floater.string>
+ <floater.string name="top_colliders_text">
+ [COUNT] obiektów odczuwa działanie wielu potencjalnych kolizji
+ </floater.string>
+ <floater.string name="colliders_score_label">
+ Wynik
+ </floater.string>
+ <floater.string name="none_descriptor">
+ Nieodnalezione
+ </floater.string>
<text name="title_text">
Åadowanie...
</text>
<scroll_list name="objects_list">
- <column label="Wynik" name="score"/>
- <column label="Nazwa" name="name"/>
- <column label="Właściciel" name="owner"/>
- <column label="Miejsce" name="location"/>
- <column label="Czas" name="time"/>
- <column label="Mono Time" name="mono_time"/>
+ <scroll_list.columns label="Wynik" name="score"/>
+ <scroll_list.columns label="Nazwa" name="name"/>
+ <scroll_list.columns label="Właściciel" name="owner"/>
+ <scroll_list.columns label="Miejsce" name="location"/>
+ <scroll_list.columns label="Czas" name="time"/>
+ <scroll_list.columns label="Mono Time" name="mono_time"/>
+ <scroll_list.columns label="URL" name="URLs"/>
</scroll_list>
<text name="id_text">
- ID Obiektu:
+ ID obiektu:
</text>
- <button label="Pokaż Emitery" name="show_beacon_btn"/>
+ <button label="Pokaż emitery" name="show_beacon_btn"/>
<text name="obj_name_text">
- Nazwa Obiektu:
+ Nazwa obiektu:
</text>
<button label="Filtr" name="filter_object_btn"/>
<text name="owner_name_text">
- Owner Name:
+ Właściciel:
</text>
<button label="Filter" name="filter_owner_btn"/>
- <button label="Zwróć Wybrane" name="return_selected_btn"/>
- <button label="Zwróć Wszystko" name="return_all_btn"/>
- <button label="Deaktywuj Wybrane" name="disable_selected_btn"/>
- <button label="Deaktywuj Wszystko" name="disable_all_btn"/>
<button label="Odśwież" name="refresh_btn"/>
- <string name="top_scripts_title">
- Główne Skrypty
- </string>
- <string name="top_scripts_text">
- [COUNT] skryptów działa w czasie [TIME] ms
- </string>
- <string name="scripts_score_label">
- Czas
- </string>
- <string name="scripts_mono_time_label">
- Mono Time
- </string>
- <string name="top_colliders_title">
- Główne Kolizje
- </string>
- <string name="top_colliders_text">
- [COUNT] obiektów odczuwa działanie wielu potencjalnych kolizji
- </string>
- <string name="colliders_score_label">
- Wynik
- </string>
- <string name="none_descriptor">
- Nie odnalezione
- </string>
+ <button label="Zwróć wybrane" name="return_selected_btn"/>
+ <button label="Zwróć wszystko" name="return_all_btn"/>
+ <button label="Deaktywuj wybrane" name="disable_selected_btn"/>
+ <button label="Deaktywuj wszystko" name="disable_all_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_tos.xml b/indra/newview/skins/default/xui/pl/floater_tos.xml
index b9a146df22..6f71488347 100644
--- a/indra/newview/skins/default/xui/pl/floater_tos.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tos.xml
@@ -1,11 +1,10 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="modal container" title="">
- <button label="Kontynuuj" label_selected="Kontynuuj" name="Continue" />
- <button label="Anuluj" label_selected="Anuluj" name="Cancel" />
- <check_box label="Zgadzam siÄ™ na Warunki Serwisu (Terms of Service)" name="agree_chk" />
+ <button label="Kontynuuj" label_selected="Kontynuuj" name="Continue"/>
+ <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
+ <check_box label="Zgadzam się na Warunki Serwisu (Terms of Service) i Politykę Prywatności (Privacy Policy)" name="agree_chk"/>
<text name="tos_heading">
- Proszę dokładnie przeczytać następujące Warunki Serwisu (Terms of Service). Musisz
-zaakceptować umowę żeby kontynuować logowanie do [SECOND_LIFE].
+ Proszę dokładnie przeczytać następujące Warunki Serwisu (Terms of Service) i Politykę Prywatności (Privacy Policy). Musisz zaakceptować umowę żeby kontynuować logowanie do [SECOND_LIFE].
</text>
<text_editor name="tos_text">
TOS_TEXT
diff --git a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
new file mode 100644
index 0000000000..6bee3e911c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_controls" title="Przełączniki Głosu">
+ <string name="title_nearby">
+ ROZMOWY GÅOSOWE W POBLIÅ»U
+ </string>
+ <string name="title_group">
+ Rozmowa głosowa z grupą [GROUP]
+ </string>
+ <string name="title_adhoc">
+ Konferencja
+ </string>
+ <string name="title_peer_2_peer">
+ Rozmowa głosowa z [NAME]
+ </string>
+ <string name="no_one_near">
+ Nikt w pobliżu nie ma aktywnych rozmów głosowych
+ </string>
+ <layout_stack name="my_call_stack">
+ <layout_panel name="my_panel">
+ <text name="user_text" value="Mój awatar:"/>
+ </layout_panel>
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Zakończ" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml
index 7333633c1d..9720dae516 100644
--- a/indra/newview/skins/default/xui/pl/floater_water.xml
+++ b/indra/newview/skins/default/xui/pl/floater_water.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Water Floater" title="ZAAWANSOWANY EDYTOR WODY">
<text name="KeyFramePresetsText">
- Ustawienia Wody:
+ Ustawienia wody:
</text>
- <button label="Nowe" label_selected="Nowe" name="WaterNewPreset" />
- <button label="Zapisz" label_selected="Zapisz" name="WaterSavePreset" />
- <button label="Usuń" label_selected="Usuń" name="WaterDeletePreset" />
+ <button label="Nowe" label_selected="Nowe" name="WaterNewPreset"/>
+ <button label="Zapisz" label_selected="Zapisz" name="WaterSavePreset"/>
+ <button label="Usuń" label_selected="Usuń" name="WaterDeletePreset"/>
<tab_container name="Water Tabs">
- <panel label="Ustawienia" name="Settings">
+ <panel label="USTAWIENIA" name="Settings">
<text name="BHText">
- Kolor Podwodnej Mgły
+ Kolor podwodnej mgły
</text>
- <button label="?" name="WaterFogColorHelp" />
- <color_swatch label="" name="WaterFogColor" tool_tip="Kliknij by wybrać kolor" />
+ <button label="?" name="WaterFogColorHelp"/>
+ <color_swatch label="" name="WaterFogColor" tool_tip="Kliknij aby wybrać kolor"/>
<text name="WaterFogDensText">
- Wykładnik Gęstości Mgły
+ Wykładnik gęstości mgły
</text>
- <button label="?" name="WaterFogDensityHelp" />
- <slider label="" name="WaterFogDensity" />
+ <button label="?" name="WaterFogDensityHelp"/>
+ <slider label="" name="WaterFogDensity"/>
<text name="WaterUnderWaterFogModText">
- Modyfikator Mgły
+ Modyfikator mgły
</text>
- <button label="?" name="WaterUnderWaterFogModHelp" />
- <slider label="" name="WaterUnderWaterFogMod" />
+ <button label="?" name="WaterUnderWaterFogModHelp"/>
+ <slider label="" name="WaterUnderWaterFogMod"/>
<text name="BDensText">
- Skala Zmarszczeń
+ Skala zmarszczeń
</text>
- <button label="?" name="WaterNormalScaleHelp" />
+ <button label="?" name="WaterNormalScaleHelp"/>
<text name="BHText2">
1
</text>
@@ -36,65 +36,65 @@
<text name="BHText4">
3
</text>
- <slider label="" name="WaterNormalScaleX" />
- <slider label="" name="WaterNormalScaleY" />
- <slider label="" name="WaterNormalScaleZ" />
+ <slider label="" name="WaterNormalScaleX"/>
+ <slider label="" name="WaterNormalScaleY"/>
+ <slider label="" name="WaterNormalScaleZ"/>
<text name="HDText">
Skala Fresnela
</text>
- <button label="?" name="WaterFresnelScaleHelp" />
- <slider label="" name="WaterFresnelScale" />
+ <button label="?" name="WaterFresnelScaleHelp"/>
+ <slider label="" name="WaterFresnelScale"/>
<text name="FresnelOffsetText">
Przesunięcie Fresnela
</text>
- <button label="?" name="WaterFresnelOffsetHelp" />
- <slider label="" name="WaterFresnelOffset" />
+ <button label="?" name="WaterFresnelOffsetHelp"/>
+ <slider label="" name="WaterFresnelOffset"/>
<text name="DensMultText">
- Górna Refrakcja
+ Górna refrakcja
</text>
- <button label="?" name="WaterScaleAboveHelp" />
- <slider label="" name="WaterScaleAbove" />
+ <button label="?" name="WaterScaleAboveHelp"/>
+ <slider label="" name="WaterScaleAbove"/>
<text name="WaterScaleBelowText">
- Dolna Refrakcja
+ Dolna refrakcja
</text>
- <button label="?" name="WaterScaleBelowHelp" />
- <slider label="" name="WaterScaleBelow" />
+ <button label="?" name="WaterScaleBelowHelp"/>
+ <slider label="" name="WaterScaleBelow"/>
<text name="MaxAltText">
- Mnożnik Rozmycia
+ Mnożnik rozmycia
</text>
- <button label="?" name="WaterBlurMultiplierHelp" />
- <slider label="" name="WaterBlurMult" />
+ <button label="?" name="WaterBlurMultiplierHelp"/>
+ <slider label="" name="WaterBlurMult"/>
</panel>
- <panel label="Rysowanie" name="Waves">
+ <panel label="OBRAZ" name="Waves">
<text name="BHText">
- Kierunek Dużych Fal
+ Kierunek dużych fal
</text>
- <button label="?" name="WaterWave1Help" />
+ <button label="?" name="WaterWave1Help"/>
<text name="WaterWave1DirXText">
X
</text>
<text name="WaterWave1DirYText">
Y
</text>
- <slider label="" name="WaterWave1DirX" />
- <slider label="" name="WaterWave1DirY" />
+ <slider label="" name="WaterWave1DirX"/>
+ <slider label="" name="WaterWave1DirY"/>
<text name="BHText2">
- Kierunek Małych Fal
+ Kierunek małych fal
</text>
- <button label="?" name="WaterWave2Help" />
+ <button label="?" name="WaterWave2Help"/>
<text name="WaterWave2DirXText">
X
</text>
<text name="WaterWave2DirYText">
Y
</text>
- <slider label="" name="WaterWave2DirX" />
- <slider label="" name="WaterWave2DirY" />
+ <slider label="" name="WaterWave2DirX"/>
+ <slider label="" name="WaterWave2DirY"/>
<text name="BHText3">
- Mapa Normalnych
+ Mapa normalnych
</text>
- <button label="?" name="WaterNormalMapHelp" />
- <texture_picker label="" name="WaterNormalMap" />
+ <button label="?" name="WaterNormalMapHelp"/>
+ <texture_picker label="" name="WaterNormalMap"/>
</panel>
</tab_container>
<string name="WLDefaultWaterNames">
diff --git a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml
index 2d4582392c..925295102e 100644
--- a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="modal container" title="">
- <button label="Zapisz" label_selected="Zapisz" name="Save" />
- <button label="Anuluj" label_selected="Anuluj" name="Cancel" />
+ <button label="Zapisz" label_selected="Zapisz" name="Save"/>
+ <button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
<text name="Save item as:">
- Zachowaj jako:
+ Zapisz obiekt w mojej Szafie jako:
</text>
<line_editor name="name ed">
Nowe [DESC]
diff --git a/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml
new file mode 100644
index 0000000000..4081b8a37e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="whitelist_entry" title="BIAÅA LISTA">
+ <text name="media_label">
+ Wprowadź URL lub wzorzec URL dla dodania do listy dozwolonych domen
+ </text>
+ <line_editor name="whitelist_entry" tool_tip="Wprowadź URL lub wzorzec URL do Białej Listy"/>
+ <button label="OK" name="ok_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
index 86ef9300da..49e523fae8 100644
--- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
@@ -1,19 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="WindLight floater" title="ZAAWANSOWANY EDYTOR NIEBA">
<text name="KeyFramePresetsText">
- Ustawienia Nieba:
+ Ustawienia nieba:
</text>
- <button label="Nowe" label_selected="Nowe" name="WLNewPreset" />
- <button label="Zapisz" label_selected="Zapisz" name="WLSavePreset" />
- <button label="Usuń" label_selected="Usuń" name="WLDeletePreset" />
- <button label="Edytor Cyklu Dnia" label_selected="Edytor Cyklu Dnia"
- name="WLDayCycleMenuButton" />
+ <button label="Nowe" label_selected="Nowe" name="WLNewPreset"/>
+ <button label="Zapisz" label_selected="Zapisz" name="WLSavePreset"/>
+ <button label="Usuń" label_selected="Usuń" name="WLDeletePreset"/>
+ <button label="Edytor cyklu dnia" label_selected="Edytor cyklu dnia" name="WLDayCycleMenuButton"/>
<tab_container name="WindLight Tabs">
- <panel label="Atmosfera" name="Atmosphere">
+ <panel label="ATMOSFERA" name="Atmosphere">
<text name="BHText">
- Horyzont Błękitu
+ Horyzont błękitu
</text>
- <button label="?" name="WLBlueHorizonHelp" />
+ <button label="?" name="WLBlueHorizonHelp"/>
<text name="BHText2">
R
</text>
@@ -26,19 +25,19 @@
<text name="BHText5">
I
</text>
- <slider label="" name="WLBlueHorizonR" />
- <slider label="" name="WLBlueHorizonG" />
- <slider label="" name="WLBlueHorizonB" />
- <slider label="" name="WLBlueHorizonI" />
+ <slider label="" name="WLBlueHorizonR"/>
+ <slider label="" name="WLBlueHorizonG"/>
+ <slider label="" name="WLBlueHorizonB"/>
+ <slider label="" name="WLBlueHorizonI"/>
<text name="BDensText">
- Horyzont Zamglenia
+ Horyzont zamglenia
</text>
- <button label="?" name="WLHazeHorizonHelp" />
- <slider label="" name="WLHazeHorizon" />
+ <button label="?" name="WLHazeHorizonHelp"/>
+ <slider label="" name="WLHazeHorizon"/>
<text name="BDensText2">
- Gęstość Błękitu
+ Gęstość błękitu
</text>
- <button label="?" name="WLBlueDensityHelp" />
+ <button label="?" name="WLBlueDensityHelp"/>
<text name="BHText6">
R
</text>
@@ -51,36 +50,36 @@
<text name="BHText9">
I
</text>
- <slider label="" name="WLBlueDensityR" />
- <slider label="" name="WLBlueDensityG" />
- <slider label="" name="WLBlueDensityB" />
- <slider label="" name="WLBlueDensityI" />
+ <slider label="" name="WLBlueDensityR"/>
+ <slider label="" name="WLBlueDensityG"/>
+ <slider label="" name="WLBlueDensityB"/>
+ <slider label="" name="WLBlueDensityI"/>
<text name="HDText">
- Gęstość Zamglenia
+ Gęstość zamglenia
</text>
- <button label="?" name="WLHazeDensityHelp" />
- <slider label="" name="WLHazeDensity" />
+ <button label="?" name="WLHazeDensityHelp"/>
+ <slider label="" name="WLHazeDensity"/>
<text name="DensMultText">
- Mnożnik Gęsości
+ Mnożnik gęsości
</text>
- <button label="?" name="WLDensityMultHelp" />
- <slider label="" name="WLDensityMult" />
+ <button label="?" name="WLDensityMultHelp"/>
+ <slider label="" name="WLDensityMult"/>
<text name="WLDistanceMultText">
- Mnożnik Dystansu
+ Mnożnik dystansu
</text>
- <button label="?" name="WLDistanceMultHelp" />
- <slider label="" name="WLDistanceMult" />
+ <button label="?" name="WLDistanceMultHelp"/>
+ <slider label="" name="WLDistanceMult"/>
<text name="MaxAltText">
- Max Wysokość
+ Max wysokość
</text>
- <button label="?" name="WLMaxAltitudeHelp" />
- <slider label="" name="WLMaxAltitude" />
+ <button label="?" name="WLMaxAltitudeHelp"/>
+ <slider label="" name="WLMaxAltitude"/>
</panel>
- <panel label="Światło" name="Lighting">
+ <panel label="ÅšWIATÅO" name="Lighting">
<text name="SLCText">
- Kolor Słońca/Księżyca
+ Kolor słońca/księżyca
</text>
- <button label="?" name="WLSunlightColorHelp" />
+ <button label="?" name="WLSunlightColorHelp"/>
<text name="BHText">
R
</text>
@@ -93,19 +92,19 @@
<text name="BHText4">
I
</text>
- <slider label="" name="WLSunlightR" />
- <slider label="" name="WLSunlightG" />
- <slider label="" name="WLSunlightB" />
- <slider label="" name="WLSunlightI" />
+ <slider label="" name="WLSunlightR"/>
+ <slider label="" name="WLSunlightG"/>
+ <slider label="" name="WLSunlightB"/>
+ <slider label="" name="WLSunlightI"/>
<text name="TODText">
- Pozycja Słońca/Księżyca
+ Pozycja słońca/księżyca
</text>
- <button label="?" name="WLTimeOfDayHelp" />
- <slider label="" name="WLSunAngle" />
+ <button label="?" name="WLTimeOfDayHelp"/>
+ <slider label="" name="WLSunAngle"/>
<text name="WLAmbientText">
Otoczenie
</text>
- <button label="?" name="WLAmbientHelp" />
+ <button label="?" name="WLAmbientHelp"/>
<text name="BHText5">
R
</text>
@@ -118,37 +117,37 @@
<text name="BHText8">
I
</text>
- <slider label="" name="WLAmbientR" />
- <slider label="" name="WLAmbientG" />
- <slider label="" name="WLAmbientB" />
- <slider label="" name="WLAmbientI" />
+ <slider label="" name="WLAmbientR"/>
+ <slider label="" name="WLAmbientG"/>
+ <slider label="" name="WLAmbientB"/>
+ <slider label="" name="WLAmbientI"/>
<text name="WLEastAngleText">
- Pozycja Wschodu
+ Pozycja wschodu
</text>
- <button label="?" name="WLEastAngleHelp" />
- <slider label="" name="WLEastAngle" />
+ <button label="?" name="WLEastAngleHelp"/>
+ <slider label="" name="WLEastAngle"/>
<text name="SunGlowText">
- Blask Słońca
+ Blask słońca
</text>
- <button label="?" name="WLSunGlowHelp" />
- <slider label="Ostrość" name="WLGlowB" />
- <slider label="Rozmiar" name="WLGlowR" />
+ <button label="?" name="WLSunGlowHelp"/>
+ <slider label="Ostrość" name="WLGlowB"/>
+ <slider label="Rozmiar" name="WLGlowR"/>
<text name="SceneGammaText">
- Jasność Obrazu
+ Jasność obrazu
</text>
- <button label="?" name="WLSceneGammaHelp" />
- <slider label="" name="WLGamma" />
+ <button label="?" name="WLSceneGammaHelp"/>
+ <slider label="" name="WLGamma"/>
<text name="WLStarText">
- Blask Gwiazd
+ Blask gwiazd
</text>
- <button label="?" name="WLStarBrightnessHelp" />
- <slider label="" name="WLStarAlpha" />
+ <button label="?" name="WLStarBrightnessHelp"/>
+ <slider label="" name="WLStarAlpha"/>
</panel>
- <panel label="Chmury" name="Clouds">
+ <panel label="CHMURY" name="Clouds">
<text name="WLCloudColorText">
- Kolor Chmur
+ Kolor chmur
</text>
- <button label="?" name="WLCloudColorHelp" />
+ <button label="?" name="WLCloudColorHelp"/>
<text name="BHText">
R
</text>
@@ -161,14 +160,14 @@
<text name="BHText4">
I
</text>
- <slider label="" name="WLCloudColorR" />
- <slider label="" name="WLCloudColorG" />
- <slider label="" name="WLCloudColorB" />
- <slider label="" name="WLCloudColorI" />
+ <slider label="" name="WLCloudColorR"/>
+ <slider label="" name="WLCloudColorG"/>
+ <slider label="" name="WLCloudColorB"/>
+ <slider label="" name="WLCloudColorI"/>
<text name="WLCloudColorText2">
Chmury (XY/Gęstość)
</text>
- <button label="?" name="WLCloudDensityHelp" />
+ <button label="?" name="WLCloudDensityHelp"/>
<text name="BHText5">
X
</text>
@@ -178,23 +177,23 @@
<text name="BHText7">
G
</text>
- <slider label="" name="WLCloudX" />
- <slider label="" name="WLCloudY" />
- <slider label="" name="WLCloudDensity" />
+ <slider label="" name="WLCloudX"/>
+ <slider label="" name="WLCloudY"/>
+ <slider label="" name="WLCloudDensity"/>
<text name="WLCloudCoverageText">
- Pokrycie Chmur
+ Pokrycie chmur
</text>
- <button label="?" name="WLCloudCoverageHelp" />
- <slider label="" name="WLCloudCoverage" />
+ <button label="?" name="WLCloudCoverageHelp"/>
+ <slider label="" name="WLCloudCoverage"/>
<text name="WLCloudScaleText">
- Skala Chmur
+ Skala chmur
</text>
- <button label="?" name="WLCloudScaleHelp" />
- <slider label="" name="WLCloudScale" />
+ <button label="?" name="WLCloudScaleHelp"/>
+ <slider label="" name="WLCloudScale"/>
<text name="WLCloudDetailText">
- Szczegóły (XY/Gęstość)
+ Szczegóły (XY/gęstość)
</text>
- <button label="?" name="WLCloudDetailHelp" />
+ <button label="?" name="WLCloudDetailHelp"/>
<text name="BHText8">
X
</text>
@@ -204,23 +203,23 @@
<text name="BHText10">
G
</text>
- <slider label="" name="WLCloudDetailX" />
- <slider label="" name="WLCloudDetailY" />
- <slider label="" name="WLCloudDetailDensity" />
+ <slider label="" name="WLCloudDetailX"/>
+ <slider label="" name="WLCloudDetailY"/>
+ <slider label="" name="WLCloudDetailDensity"/>
<text name="WLCloudScrollXText">
- Przewijanie Chmur X
+ Przewijanie chmur X
</text>
- <button label="?" name="WLCloudScrollXHelp" />
- <check_box label="Zablokuj" name="WLCloudLockX" />
- <slider label="" name="WLCloudScrollX" />
+ <button label="?" name="WLCloudScrollXHelp"/>
+ <check_box label="Zablokuj" name="WLCloudLockX"/>
+ <slider label="" name="WLCloudScrollX"/>
<text name="WLCloudScrollYText">
- Przewijanie Chmur Y
+ Przewijanie chmur Y
</text>
- <button label="?" name="WLCloudScrollYHelp" />
- <check_box label="Zablokuj" name="WLCloudLockY" />
- <slider label="" name="WLCloudScrollY" />
- <check_box label="Klasyczne Chmury" name="DrawClassicClouds" />
- <button label="?" name="WLClassicCloudsHelp" />
+ <button label="?" name="WLCloudScrollYHelp"/>
+ <check_box label="Zablokuj" name="WLCloudLockY"/>
+ <slider label="" name="WLCloudScrollY"/>
+ <check_box label="Klasyczne chmury" name="DrawClassicClouds"/>
+ <button label="?" name="WLClassicCloudsHelp"/>
</panel>
</tab_container>
<string name="WLDefaultSkyNames">
diff --git a/indra/newview/skins/default/xui/pl/floater_window_size.xml b/indra/newview/skins/default/xui/pl/floater_window_size.xml
new file mode 100644
index 0000000000..2a6c257e54
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_window_size.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="window_size" title="WYMIARY OKNA">
+ <string name="resolution_format">
+ [RES_X] x [RES_Y]
+ </string>
+ <text name="windowsize_text">
+ Ustaw rozmiar okna:
+ </text>
+ <combo_box name="window_size_combo" tool_tip="szerokość x wysokość">
+ <combo_box.item label="1000 x 700 (domyślnie)" name="item0"/>
+ <combo_box.item label="1024 x 768" name="item1"/>
+ <combo_box.item label="1280 x 720 (720p)" name="item2"/>
+ <combo_box.item label="1920 x 1080 (1080p)" name="item3"/>
+ </combo_box>
+ <button label="Ustaw" name="set_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml
index 36e3b0651b..95010e0b91 100644
--- a/indra/newview/skins/default/xui/pl/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/pl/floater_world_map.xml
@@ -1,59 +1,70 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="worldmap" title="MAPA ÅšWIATA">
- <tab_container name="maptab">
- <panel label="Obiekty" name="objects_mapview"/>
- <panel label="Teren" name="terrain_mapview"/>
- </tab_container>
- <text name="you_label">
- Ty
- </text>
- <icon left="1058" name="home"/>
- <text name="home_label">
- Start
- </text>
- <text name="auction_label">
- Aukcja
- </text>
- <text name="land_for_sale_label">
- Na Sprzedaż
- </text>
- <button width="122" left="1116" label="Teleportuj do Start" label_selected="Teleportuj do Start" name="Go Home" tool_tip="Teleportuj siÄ™ do miejsca startowego"/>
- <check_box label="Rezydent" name="people_chk"/>
- <check_box label="Infohub" name="infohub_chk"/>
- <check_box label="Telehub" name="telehubchk"/>
- <check_box label="Posiadłość na &#10;sprzedaż" name="land_for_sale_chk"/>
- <text name="events_label">
- Wydarzenia:
- </text>
- <check_box label="&apos;PG&apos;" name="event_chk"/>
- <check_box label="&apos;Mature&apos;" name="event_mature_chk"/>
- <check_box label="&apos;Adult&apos;" name="event_adult_chk"/>
- <icon bottom="-196" name="avatar_icon"/>
- <combo_box label="Dostępni Znajomi" name="friend combo" tool_tip="Znajomi na mapie">
- <combo_box.item name="item1" label="Dostępni Znajomi" />
- </combo_box>
- <combo_box label="Zapisane Miejsca" name="landmark combo" tool_tip="Zapisane miejsca na mapie">
- <combo_box.item name="item1" label="Zapisane Miejsca" />
- </combo_box>
- <line_editor label="Szukaj po nazwie regionu" name="location" tool_tip="Wpisz nazwÄ™ regionu"/>
- <button label="Szukaj" name="DoSearch" tool_tip="Wyszukiwaie regionu"/>
- <text name="search_label">
- Wyniki wyszukiwania:
- </text>
- <scroll_list name="search_results" bottom_delta="-310" height="304" >
- <column label="" name="icon"/>
- <column label="" name="sim_name"/>
- </scroll_list>
- <text name="location_label">
- Położenie:
- </text>
- <spinner name="spin x" tool_tip="współrzędne X na mapie"/>
- <spinner name="spin y" tool_tip="współrzędne Y na mapie"/>
- <spinner name="spin z" tool_tip="współrzędne Z na mapie"/>
- <button label="Teleportuj" label_selected="Teleportuj" name="Teleport" tool_tip="Teleportuj do wybranego miejsca"/>
- <button label="Pokaż Cel" label_selected="Pokaż Cel" name="Show Destination" tool_tip="Wycentruj miejsce celu na mapie"/>
- <button label="Wyczyść" label_selected="Wyczyść" name="Clear" tool_tip="Stop tracking"/>
- <button label="Pokaż moje miejsce" label_selected="Pokaż moje miejsce" name="Show My Location" tool_tip="Wycentruj pozcję awatara na mapie"/>
- <button label="Kopiuj SLurl do schowka" name="copy_slurl" tool_tip="Kopie SLurl obecnego miejsca będę mogły zostać użyte na stronie internetowej."/>
- <slider label="Skala" name="zoom slider"/>
+ <panel name="layout_panel_1">
+ <text name="events_label">
+ Legenda
+ </text>
+ </panel>
+ <panel name="layout_panel_2">
+ <button name="Show My Location" tool_tip="Wyśrodkuj mapę w miejscu, gdzie znajduje się mój awatar"/>
+ <text name="me_label">
+ Ja
+ </text>
+ <text name="person_label">
+ Osoba
+ </text>
+ <text name="infohub_label">
+ Infohub
+ </text>
+ <text name="land_sale_label">
+ Sprzedaż Posiadłości
+ </text>
+ <text name="by_owner_label">
+ przez Właściciela
+ </text>
+ <text name="auction_label">
+ aukcja Posiadłości
+ </text>
+ <button name="Go Home" tool_tip="Teleportuj do mojego Miejsca Startowego"/>
+ <text name="Home_label">
+ Miejsce Startu
+ </text>
+ <text name="events_label">
+ Wydarzenia:
+ </text>
+ <text name="pg_label">
+ Ogólne
+ </text>
+ <check_box initial_value="prawda" name="event_mature_chk"/>
+ <text name="mature_label">
+ Moderuj
+ </text>
+ <text name="adult_label">
+ Adult
+ </text>
+ </panel>
+ <panel name="layout_panel_3">
+ <text name="find_on_map_label">
+ Znajdź na mapie
+ </text>
+ </panel>
+ <panel name="layout_panel_4">
+ <combo_box label="Dostępni Znajomi" name="friend combo" tool_tip="Pokaż znajomych na mapie">
+ <combo_box.item label="Moi Dostępni Znajomi" name="item1"/>
+ </combo_box>
+ <combo_box label="Zapisane Miejsca" name="landmark combo" tool_tip="Pokaż zapisane miejsce na mapie">
+ <combo_box.item label="Zapisane Miejsca" name="item1"/>
+ </combo_box>
+ <search_editor label="Regiony Według Nazwy" name="location" tool_tip="Wpisz nazwę regionu"/>
+ <button label="Znajdź" name="DoSearch" tool_tip="Szukaj regionu"/>
+ <button name="Clear" tool_tip="Wyczyść zapamiętane linie oraz zresetuj mapę"/>
+ <button label="Teleportuj" name="Teleport" tool_tip="Teleportuj do wybranego miejsca"/>
+ <button label="Kopiuj SLurl" name="copy_slurl" tool_tip="Kopie obecnego miejsca jako SLurl mogą zostać użyte na stronie internetowej."/>
+ <button label="Pokaż wybrane" name="Show Destination" tool_tip="Wyśrodkuj mapę w wybranym miejscu"/>
+ </panel>
+ <panel name="layout_panel_5">
+ <text name="zoom_label">
+ Przybliż
+ </text>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/inspect_avatar.xml b/indra/newview/skins/default/xui/pl/inspect_avatar.xml
new file mode 100644
index 0000000000..3ee0b976eb
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/inspect_avatar.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+ Not can_close / no title to avoid window chrome
+ Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+ <string name="Subtitle">
+ [AGE]
+ </string>
+ <string name="Details">
+ [SL_PROFILE]
+ </string>
+ <slider name="volume_slider" tool_tip="Posiom Głośności" value="0.5"/>
+ <button label="Dodaj Znajomość" name="add_friend_btn"/>
+ <button label="IM" name="im_btn"/>
+ <button label="Profil" name="view_profile_btn"/>
+ <panel name="moderator_panel">
+ <button label="Wyłącz komunikację głosową" name="disable_voice"/>
+ <button label="Włącz komunikację głosową" name="enable_voice"/>
+ </panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/inspect_group.xml b/indra/newview/skins/default/xui/pl/inspect_group.xml
new file mode 100644
index 0000000000..0a2a62ce74
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/inspect_group.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+ Not can_close / no title to avoid window chrome
+ Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_group">
+ <string name="PrivateGroup">
+ Grupa prywatna
+ </string>
+ <string name="FreeToJoin">
+ Wstęp wolny
+ </string>
+ <string name="CostToJoin">
+ L$[AMOUNT] by dołączyć
+ </string>
+ <string name="YouAreMember">
+ Jesteś członkiem
+ </string>
+ <button label="Dołącz" name="join_btn"/>
+ <button label="Opuść" name="leave_btn"/>
+ <button label="Zobacz Profil" name="view_profile_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/inspect_object.xml b/indra/newview/skins/default/xui/pl/inspect_object.xml
new file mode 100644
index 0000000000..2e15691463
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/inspect_object.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+ Not can_close / no title to avoid window chrome
+ Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_object">
+ <string name="Creator">
+ Przez [CREATOR]
+ </string>
+ <string name="CreatorAndOwner">
+ przez [CREATOR]
+właściciel [OWNER]
+ </string>
+ <string name="Price">
+ L$[AMOUNT]
+ </string>
+ <string name="PriceFree">
+ Darmowe!
+ </string>
+ <string name="Touch">
+ Dotknij
+ </string>
+ <string name="Sit">
+ Usiądź tutaj
+ </string>
+ <button label="Kup" name="buy_btn"/>
+ <button label="Zapłać" name="pay_btn"/>
+ <button label="Weź kopię" name="take_free_copy_btn"/>
+ <button label="Dotknij" name="touch_btn"/>
+ <button label="Usiądź tutaj" name="sit_btn"/>
+ <button label="Otwórz" name="open_btn"/>
+ <icon name="secure_browsing" tool_tip="Zabezpiecz przeglÄ…danie"/>
+ <button label="Więcej" name="more_info_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/inspect_remote_object.xml b/indra/newview/skins/default/xui/pl/inspect_remote_object.xml
new file mode 100644
index 0000000000..0d570940c1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/inspect_remote_object.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+ Not can_close / no title to avoid window chrome
+ Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_remote_object">
+ <text name="object_owner_label">
+ Właściciel:
+ </text>
+ <button label="Mapa" name="map_btn"/>
+ <button label="Zablokuj" name="block_btn"/>
+ <button label="Zamknij" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/language_settings.xml b/indra/newview/skins/default/xui/pl/language_settings.xml
index 71418d446a..debc451a33 100644
--- a/indra/newview/skins/default/xui/pl/language_settings.xml
+++ b/indra/newview/skins/default/xui/pl/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">polish</string>
+ <string name="DarwinLocale">pl_PL.UTF-8</string>
+ <string name="LinuxLocale">pl_PL.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
index 1107a5d9d1..ff695be205 100644
--- a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Attachment Pie">
- <menu_item_call label="Dotnij" name="Attachment Object Touch"/>
+ <menu_item_call label="Dotknij" name="Attachment Object Touch"/>
<menu_item_call label="Edytuj" name="Edit..."/>
<menu_item_call label="Odłącz" name="Detach"/>
<menu_item_call label="Opuść" name="Drop"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
index 427c0d464b..0bca90168f 100644
--- a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Self Pie">
<menu_item_call label="Wstań" name="Stand Up"/>
- <context_menu label="Zdejmij &gt;" name="Take Off &gt;">
- <context_menu label="Ubranie &gt;" name="Clothes &gt;">
+ <context_menu label="Zdejmij â–¶" name="Take Off &gt;">
+ <context_menu label="Ubrania â–¶" name="Clothes &gt;">
<menu_item_call label="KoszulkÄ™" name="Shirt"/>
<menu_item_call label="Spodnie" name="Pants"/>
<menu_item_call label="Spódnicę" name="Skirt"/>
@@ -16,8 +16,8 @@
<menu_item_call label="Ubranie Przezroczyste" name="Self Alpha"/>
<menu_item_call label="Wszystko" name="All Clothes"/>
</context_menu>
- <context_menu label="HUD &gt;" name="Object Detach HUD"/>
- <context_menu label="Odłącz &gt;" name="Object Detach"/>
+ <context_menu label="HUD â–¶" name="Object Detach HUD"/>
+ <context_menu label="Odłącz ▶" name="Object Detach"/>
<menu_item_call label="Odłącz Wszystko" name="Detach All"/>
</context_menu>
<menu_item_call label="Mój Wygląd" name="Appearance..."/>
diff --git a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml
index 818dfc08ae..9fcf1b3440 100644
--- a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="hide_camera_move_controls_menu">
- <menu_item_check label="Przycisk Gesturek" name="ShowGestureButton"/>
+ <menu_item_check label="Przycisk Gestur" name="ShowGestureButton"/>
<menu_item_check label="Przycisk Ruchu" name="ShowMoveButton"/>
<menu_item_check label="Przycisk Widoku" name="ShowCameraButton"/>
<menu_item_check label="Przycisk Zdjęć" name="ShowSnapshotButton"/>
@@ -8,5 +8,5 @@
<menu_item_call label="Kopiuj" name="NearbyChatBar_Copy"/>
<menu_item_call label="Wklej" name="NearbyChatBar_Paste"/>
<menu_item_call label="Usuń" name="NearbyChatBar_Delete"/>
- <menu_item_call label="Zaznacz Wszystko" name="NearbyChatBar_Select_All"/>
+ <menu_item_call label="Zaznacz wszystko" name="NearbyChatBar_Select_All"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_favorites.xml b/indra/newview/skins/default/xui/pl/menu_favorites.xml
index 0a0b54a548..cbacaf4beb 100644
--- a/indra/newview/skins/default/xui/pl/menu_favorites.xml
+++ b/indra/newview/skins/default/xui/pl/menu_favorites.xml
@@ -3,7 +3,7 @@
<menu_item_call label="Teleportuj" name="Teleport To Landmark"/>
<menu_item_call label="Zobacz/Edytuj Ulubione Miejsce" name="Landmark Open"/>
<menu_item_call label="Kopiuj SLurl" name="Copy slurl"/>
- <menu_item_call label="Pokaż na Mapie" name="Show On Map"/>
+ <menu_item_call label="Pokaż na mapie" name="Show On Map"/>
<menu_item_call label="Kopiuj" name="Landmark Copy"/>
<menu_item_call label="Wklej" name="Landmark Paste"/>
<menu_item_call label="Usuń" name="Delete"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml b/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml
index 1c2687338d..d30f5a4d3f 100644
--- a/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="hide_navbar_menu">
- <menu_item_check label="Pokaż Pasek Nawigacji" name="ShowNavbarNavigationPanel"/>
- <menu_item_check label="Pokaż Pasek Ulubionych" name="ShowNavbarFavoritesPanel"/>
+ <menu_item_check label="Pokaż pasek Nawigacji" name="ShowNavbarNavigationPanel"/>
+ <menu_item_check label="Pokaż pasek Ulubionych" name="ShowNavbarFavoritesPanel"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_im_well_button.xml b/indra/newview/skins/default/xui/pl/menu_im_well_button.xml
new file mode 100644
index 0000000000..207bc2211b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+ <menu_item_call label="Zamknij wszystkie" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml
index 925272d5ee..4ead44878a 100644
--- a/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml
+++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="IMChiclet AdHoc Menu">
- <menu_item_call label="Zakończ Rozmowę" name="End Session"/>
+ <menu_item_call label="Zakończ rozmowę" name="End Session"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml
index dc232c096d..c53f72c043 100644
--- a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml
+++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="IMChiclet Group Menu">
<menu_item_call label="O Grupie" name="Show Profile"/>
- <menu_item_call label="Pokaż Sesję" name="Chat"/>
- <menu_item_call label="Zakończ Rozmowę" name="End Session"/>
+ <menu_item_call label="Pokaż sesję" name="Chat"/>
+ <menu_item_call label="Zakończ rozmowę" name="End Session"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml
index df991cbc36..c0c812c0a7 100644
--- a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml
+++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml
@@ -2,6 +2,6 @@
<menu name="IMChiclet P2P Menu">
<menu_item_call label="Zobacz Profil" name="Show Profile"/>
<menu_item_call label="Dodaj Znajomość" name="Add Friend"/>
- <menu_item_call label="Pokaż Sesję" name="Send IM"/>
- <menu_item_call label="Zakończ Rozmowę" name="End Session"/>
+ <menu_item_call label="Pokaż sesję" name="Send IM"/>
+ <menu_item_call label="Zakończ rozmowę" name="End Session"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml
index 22d81cb823..325072d0fb 100644
--- a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml
@@ -7,11 +7,13 @@
<menu_item_call label="Teleportuj" name="teleport"/>
<menu_item_call label="ZaproÅ› do Grupy" name="invite_to_group"/>
<menu_item_call label="Zablokuj" name="block"/>
+ <menu_item_call label="Odblokuj" name="unblock"/>
<menu_item_call label="Raport" name="report"/>
<menu_item_call label="Unieruchom" name="freeze"/>
<menu_item_call label="Wyrzuć" name="eject"/>
<menu_item_call label="Debug" name="debug"/>
- <menu_item_call label="Znajdź na Mapie" name="find_on_map"/>
+ <menu_item_call label="Znajdź na mapie" name="find_on_map"/>
<menu_item_call label="Przybliż" name="zoom_in"/>
<menu_item_call label="Zapłać" name="pay"/>
+ <menu_item_call label="Udostępnij" name="share"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml
index 988c31a6e4..2c56d2ca3d 100644
--- a/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml
@@ -5,7 +5,7 @@
<menu_item_call label="Zapłać" name="pay"/>
<menu_item_call label="Kup" name="buy"/>
<menu_item_call label="Weź" name="take"/>
- <menu_item_call label="Weź Kopię" name="take_copy"/>
+ <menu_item_call label="Weź kopię" name="take_copy"/>
<menu_item_call label="Otwórz" name="open"/>
<menu_item_call label="Edytuj" name="edit"/>
<menu_item_call label="Ubierz" name="wear"/>
@@ -13,5 +13,5 @@
<menu_item_call label="Zablokuj" name="block"/>
<menu_item_call label="Przybliż" name="zoom_in"/>
<menu_item_call label="Usuń" name="remove"/>
- <menu_item_call label="Więcej Informacji" name="more_info"/>
+ <menu_item_call label="Więcej informacji" name="more_info"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory.xml b/indra/newview/skins/default/xui/pl/menu_inventory.xml
index 75c84c275d..7fe9da3c0c 100644
--- a/indra/newview/skins/default/xui/pl/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inventory.xml
@@ -4,32 +4,32 @@
<menu_item_call label="Otwórz" name="Task Open"/>
<menu_item_call label="Odtwarzaj" name="Task Play"/>
<menu_item_call label="Właściwości" name="Task Properties"/>
- <menu_item_call label="Zmień Nazwę" name="Task Rename"/>
+ <menu_item_call label="Zmień nazwę" name="Task Rename"/>
<menu_item_call label="Usuń" name="Task Remove"/>
<menu_item_call label="Opróżnij Kosz" name="Empty Trash"/>
<menu_item_call label="Opróżnij Folder Zgubione i Odnalezione" name="Empty Lost And Found"/>
- <menu_item_call label="Nowy Folder" name="New Folder"/>
- <menu_item_call label="Nowy Skrypt" name="New Script"/>
- <menu_item_call label="Nowa Nota" name="New Note"/>
- <menu_item_call label="Nowy Gest" name="New Gesture"/>
+ <menu_item_call label="Nowy folder" name="New Folder"/>
+ <menu_item_call label="Nowy skrypt" name="New Script"/>
+ <menu_item_call label="Nowa nota" name="New Note"/>
+ <menu_item_call label="Nowy gest" name="New Gesture"/>
<menu label="Nowe Ubranie" name="New Clothes">
- <menu_item_call label="Nowa Koszulka" name="New Shirt"/>
- <menu_item_call label="Nowe Spodnie" name="New Pants"/>
- <menu_item_call label="Nowe Buty" name="New Shoes"/>
- <menu_item_call label="Nowe Skarpety" name="New Socks"/>
- <menu_item_call label="Nowa Kurtka" name="New Jacket"/>
- <menu_item_call label="Nowa Spódnica" name="New Skirt"/>
- <menu_item_call label="Nowe Rękawiczki" name="New Gloves"/>
- <menu_item_call label="Nowy Podkoszulek" name="New Undershirt"/>
- <menu_item_call label="Nowa Bielizna" name="New Underpants"/>
- <menu_item_call label="Nowa Maska Przezroczysta" name="New Alpha Mask"/>
- <menu_item_call label="Nowy Tatuaż" name="New Tattoo"/>
+ <menu_item_call label="Nowa koszulka" name="New Shirt"/>
+ <menu_item_call label="Nowe spodnie" name="New Pants"/>
+ <menu_item_call label="Nowe buty" name="New Shoes"/>
+ <menu_item_call label="Nowe skarpety" name="New Socks"/>
+ <menu_item_call label="Nowa kurtka" name="New Jacket"/>
+ <menu_item_call label="Nowa spódnica" name="New Skirt"/>
+ <menu_item_call label="Nowe rękawiczki" name="New Gloves"/>
+ <menu_item_call label="Nowy podkoszulek" name="New Undershirt"/>
+ <menu_item_call label="Nowa bielizna" name="New Underpants"/>
+ <menu_item_call label="Nowa maska Alpha" name="New Alpha Mask"/>
+ <menu_item_call label="Nowy tatuaż" name="New Tattoo"/>
</menu>
<menu label="Nowa Część Ciała" name="New Body Parts">
- <menu_item_call label="Nowy Kształt" name="New Shape"/>
- <menu_item_call label="Nowa Skórka" name="New Skin"/>
- <menu_item_call label="Nowe Włosy" name="New Hair"/>
- <menu_item_call label="Nowe Oczy" name="New Eyes"/>
+ <menu_item_call label="Nowy kształt" name="New Shape"/>
+ <menu_item_call label="Nowa skórka" name="New Skin"/>
+ <menu_item_call label="Nowe włosy" name="New Hair"/>
+ <menu_item_call label="Nowe oczy" name="New Eyes"/>
</menu>
<menu label="Zmień Czcionkę" name="Change Type">
<menu_item_call label="Domyślna" name="Default"/>
@@ -46,32 +46,31 @@
<menu_item_call label="Teleportuj" name="Landmark Open"/>
<menu_item_call label="Otwórz" name="Animation Open"/>
<menu_item_call label="Otwórz" name="Sound Open"/>
- <menu_item_call label="Usuń Obiekt" name="Purge Item"/>
- <menu_item_call label="Przywróć Obiekt" name="Restore Item"/>
- <menu_item_call label="Otwórz Link" name="Goto Link"/>
+ <menu_item_call label="Zmień strój" name="Replace Outfit"/>
+ <menu_item_call label="Dodaj do stroju" name="Add To Outfit"/>
+ <menu_item_call label="Usuń obiekt" name="Purge Item"/>
+ <menu_item_call label="Przywróć obiekt" name="Restore Item"/>
<menu_item_call label="Otwórz" name="Open"/>
<menu_item_call label="Właściwości" name="Properties"/>
- <menu_item_call label="Zmień Nazwę" name="Rename"/>
- <menu_item_call label="Kopiuj Dane UUID" name="Copy Asset UUID"/>
+ <menu_item_call label="Zmień nazwę" name="Rename"/>
+ <menu_item_call label="Kopiuj dane UUID" name="Copy Asset UUID"/>
<menu_item_call label="Kopiuj" name="Copy"/>
<menu_item_call label="Wklej" name="Paste"/>
- <menu_item_call label="Wklej jako Link" name="Paste As Link"/>
+ <menu_item_call label="Wklej jako link" name="Paste As Link"/>
<menu_item_call label="Usuń" name="Delete"/>
- <menu_item_call label="Zdejmij Obiekt" name="Take Off Items"/>
- <menu_item_call label="Dodaj do Stroju" name="Add To Outfit"/>
- <menu_item_call label="Zmień Strój" name="Replace Outfit"/>
- <menu_item_call label="Rozpocznij KonferencjÄ™ CzatowÄ…" name="Conference Chat Folder"/>
+ <menu_item_call label="Skasuj Folder Systemu" name="Delete System Folder"/>
+ <menu_item_call label="Rozpocznij konferencjÄ™ czatowÄ…" name="Conference Chat Folder"/>
<menu_item_call label="Odtwarzaj" name="Sound Play"/>
<menu_item_call label="O Miejscu" name="About Landmark"/>
- <menu_item_call label="Odtwarzaj w Åšwiecie" name="Animation Play"/>
- <menu_item_call label="Odtwarzaj Lokalnie" name="Animation Audition"/>
+ <menu_item_call label="Używaj in-world" name="Animation Play"/>
+ <menu_item_call label="Odtwarzaj lokalnie" name="Animation Audition"/>
<menu_item_call label="Wyślij IM" name="Send Instant Message"/>
- <menu_item_call label="Zaoferuj TeleportacjÄ™..." name="Offer Teleport..."/>
- <menu_item_call label="Rozpocznij KonferencjÄ™ CzatowÄ…" name="Conference Chat"/>
+ <menu_item_call label="Teleportuj..." name="Offer Teleport..."/>
+ <menu_item_call label="Rozpocznij konferencjÄ™ czatowÄ…" name="Conference Chat"/>
<menu_item_call label="Aktywuj" name="Activate"/>
<menu_item_call label="Deaktywuj" name="Deactivate"/>
<menu_item_call label="Zapisz jako" name="Save As"/>
- <menu_item_call label="Odłącz od Siebie" name="Detach From Yourself"/>
+ <menu_item_call label="Odłącz od siebie" name="Detach From Yourself"/>
<menu_item_call label="Ubierz" name="Object Wear"/>
<menu label="Dołącz do" name="Attach To"/>
<menu label="Dołącz do Załączników HUD" name="Attach To HUD"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml
index 5b8c5426dd..b4d85c2c5c 100644
--- a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml
@@ -1,32 +1,32 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_inventory_add">
<menu label="Załaduj" name="upload">
- <menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/>
- <menu_item_call label="Dźwięk (L$[COST])..." name="Upload Sound"/>
- <menu_item_call label="AnimacjÄ™ (L$[COST])..." name="Upload Animation"/>
- <menu_item_call label="Zbiór Plików (L$[COST] za jeden plik)..." name="Bulk Upload"/>
+ <menu_item_call label="obraz (L$[COST])..." name="Upload Image"/>
+ <menu_item_call label="dźwięk (L$[COST])..." name="Upload Sound"/>
+ <menu_item_call label="animacjÄ™ (L$[COST])..." name="Upload Animation"/>
+ <menu_item_call label="zbiór plików (L$[COST] za jeden plik)..." name="Bulk Upload"/>
</menu>
- <menu_item_call label="Nowy Folder" name="New Folder"/>
- <menu_item_call label="Nowy Skrypt" name="New Script"/>
- <menu_item_call label="Nowa Nota" name="New Note"/>
- <menu_item_call label="Nowa Gesturka" name="New Gesture"/>
+ <menu_item_call label="Nowy folder" name="New Folder"/>
+ <menu_item_call label="Nowy skrypt" name="New Script"/>
+ <menu_item_call label="Nowa nota" name="New Note"/>
+ <menu_item_call label="Nowy gest" name="New Gesture"/>
<menu label="Nowe Ubranie" name="New Clothes">
- <menu_item_call label="Nowa Koszulka" name="New Shirt"/>
- <menu_item_call label="Nowe Spodnie" name="New Pants"/>
- <menu_item_call label="Nowe Buty" name="New Shoes"/>
- <menu_item_call label="Nowe Skarpetki" name="New Socks"/>
- <menu_item_call label="Nowa Kurtka" name="New Jacket"/>
- <menu_item_call label="Nowa Spódnica" name="New Skirt"/>
- <menu_item_call label="Nowe Rękawiczki" name="New Gloves"/>
- <menu_item_call label="Nowy Podkoszulek" name="New Undershirt"/>
- <menu_item_call label="Nowa Bielizna" name="New Underpants"/>
- <menu_item_call label="Nowe Ubranie Przezroczyste" name="New Alpha"/>
- <menu_item_call label="Nowy Tatuaż" name="New Tattoo"/>
+ <menu_item_call label="Nowa koszulka" name="New Shirt"/>
+ <menu_item_call label="Nowe spodnie" name="New Pants"/>
+ <menu_item_call label="Nowe buty" name="New Shoes"/>
+ <menu_item_call label="Nowe skarpetki" name="New Socks"/>
+ <menu_item_call label="Nowa kurtka" name="New Jacket"/>
+ <menu_item_call label="Nowa spódnica" name="New Skirt"/>
+ <menu_item_call label="Nowe rękawiczki" name="New Gloves"/>
+ <menu_item_call label="Nowy podkoszulek" name="New Undershirt"/>
+ <menu_item_call label="Nowa bielizna" name="New Underpants"/>
+ <menu_item_call label="Nowe ubranie Przezroczyste" name="New Alpha"/>
+ <menu_item_call label="Nowy tatuaż" name="New Tattoo"/>
</menu>
<menu label="Nowa Część Ciała" name="New Body Parts">
- <menu_item_call label="Nowy Kształt" name="New Shape"/>
- <menu_item_call label="Nowa Skórka" name="New Skin"/>
- <menu_item_call label="Nowe Włosy" name="New Hair"/>
- <menu_item_call label="Nowe Oczy" name="New Eyes"/>
+ <menu_item_call label="Nowy kształt" name="New Shape"/>
+ <menu_item_call label="Nowa skórka" name="New Skin"/>
+ <menu_item_call label="Nowe włosy" name="New Hair"/>
+ <menu_item_call label="Nowe oczy" name="New Eyes"/>
</menu>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml
index 8f5f94a02f..2ec3741682 100644
--- a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_gear_default">
- <menu_item_call label="Nowe Okno Szafy" name="new_window"/>
- <menu_item_call label="Porządkuj Według Nazwy" name="sort_by_name"/>
- <menu_item_call label="Porządkuj Według Daty" name="sort_by_recent"/>
- <menu_item_call label="Pokaż Filtry" name="show_filters"/>
- <menu_item_call label="Zresetuj Filtry" name="reset_filters"/>
- <menu_item_call label="Zamknij Wszystkie Foldery" name="close_folders"/>
+ <menu_item_call label="Nowe okno Szafy" name="new_window"/>
+ <menu_item_call label="Porządkuj według nazwy" name="sort_by_name"/>
+ <menu_item_call label="Porządkuj według daty" name="sort_by_recent"/>
+ <menu_item_call label="Pokaż filtry" name="show_filters"/>
+ <menu_item_call label="Zresetuj filtry" name="reset_filters"/>
+ <menu_item_call label="Zamknij wszystkie foldery" name="close_folders"/>
<menu_item_call label="Opróżnij Kosz" name="empty_trash"/>
<menu_item_call label="Opróżnij Zagubione i Odnalezione" name="empty_lostnfound"/>
- <menu_item_call label="Zapisz TeksturÄ™ Jako" name="Save Texture As"/>
- <menu_item_call label="Znajdź Oryginał" name="Find Original"/>
- <menu_item_call label="Znajdź Wszystkie Linki" name="Find All Links"/>
+ <menu_item_call label="Zapisz teksturÄ™ jako" name="Save Texture As"/>
+ <menu_item_call label="Znajdź oryginał" name="Find Original"/>
+ <menu_item_call label="Znajdź wszystkie linki" name="Find All Links"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_land.xml b/indra/newview/skins/default/xui/pl/menu_land.xml
index 2c89b43525..1e1ce73089 100644
--- a/indra/newview/skins/default/xui/pl/menu_land.xml
+++ b/indra/newview/skins/default/xui/pl/menu_land.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Land Pie">
<menu_item_call label="O Posiadłości" name="Place Information..."/>
- <menu_item_call label="Usiądź Tutaj" name="Sit Here"/>
+ <menu_item_call label="Usiądź tutaj" name="Sit Here"/>
<menu_item_call label="Kup Posiadłość" name="Land Buy"/>
- <menu_item_call label="Kup Wstęp" name="Land Buy Pass"/>
+ <menu_item_call label="Kup przepustkÄ™" name="Land Buy Pass"/>
<menu_item_call label="Buduj" name="Create"/>
- <menu_item_call label="Edytuj Teren" name="Edit Terrain"/>
+ <menu_item_call label="Edytuj teren" name="Edit Terrain"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_landmark.xml b/indra/newview/skins/default/xui/pl/menu_landmark.xml
index 8cd7e03bf1..aa5808390c 100644
--- a/indra/newview/skins/default/xui/pl/menu_landmark.xml
+++ b/indra/newview/skins/default/xui/pl/menu_landmark.xml
@@ -3,5 +3,5 @@
<menu_item_call label="Kopiuj SLurl" name="copy"/>
<menu_item_call label="Usuń" name="delete"/>
<menu_item_call label="Utwórz" name="pick"/>
- <menu_item_call label="Dodaj do Paska Ulubionych" name="add_to_favbar"/>
+ <menu_item_call label="Dodaj do paska Ulubionych" name="add_to_favbar"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_login.xml b/indra/newview/skins/default/xui/pl/menu_login.xml
index 5084b59397..2673f5c271 100644
--- a/indra/newview/skins/default/xui/pl/menu_login.xml
+++ b/indra/newview/skins/default/xui/pl/menu_login.xml
@@ -2,7 +2,7 @@
<menu_bar name="Login Menu">
<menu label="Ja" name="File">
<menu_item_call label="Ustawienia" name="Preferences..."/>
- <menu_item_call label="Wyłącz Program" name="Quit"/>
+ <menu_item_call label="Wyłącz program" name="Quit"/>
</menu>
<menu label="Pomoc" name="Help">
<menu_item_call label="[SECOND_LIFE]: Pomoc" name="Second Life Help"/>
@@ -16,15 +16,15 @@
<menu_item_call label="Wklej" name="Paste"/>
<menu_item_call label="Usuń" name="Delete"/>
<menu_item_call label="Powiel" name="Duplicate"/>
- <menu_item_call label="Zaznacz Wszystko" name="Select All"/>
+ <menu_item_call label="Zaznacz wszystko" name="Select All"/>
<menu_item_call label="Odznacz" name="Deselect"/>
</menu>
- <menu_item_call label="Ustawienia Debugowania" name="Debug Settings"/>
- <menu_item_call label="Ustawienia UI/Kolor" name="UI/Color Settings"/>
- <menu_item_call label="Pokaż schowek" name="Show Side Tray"/>
+ <menu_item_call label="Ustawienia debugowania" name="Debug Settings"/>
+ <menu_item_call label="Ustawienia UI/kolor" name="UI/Color Settings"/>
<menu label="UI Testy" name="UI Tests"/>
+ <menu_item_call label="Ustaw rozmiar interfejsu..." name="Set Window Size..."/>
<menu_item_call label="Wyświetl TOS" name="TOS"/>
- <menu_item_call label="Wyświetl Wiadomość Krytyczną" name="Critical"/>
- <menu_item_call label="Test PrzeglÄ…darki Internetowej" name="Web Browser Test"/>
+ <menu_item_call label="Wyświetl wiadomość krytyczną" name="Critical"/>
+ <menu_item_call label="Test przeglÄ…darki internetowej" name="Web Browser Test"/>
</menu>
</menu_bar>
diff --git a/indra/newview/skins/default/xui/pl/menu_mini_map.xml b/indra/newview/skins/default/xui/pl/menu_mini_map.xml
index 4152fb41c8..94e4c91abb 100644
--- a/indra/newview/skins/default/xui/pl/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/pl/menu_mini_map.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
- <menu_item_call label="Zoom Blisko" name="Zoom Close"/>
- <menu_item_call label="Zoom Åšrednio" name="Zoom Medium"/>
- <menu_item_call label="Zoom Daleko" name="Zoom Far"/>
- <menu_item_check label="Obróć Mapę" name="Rotate Map"/>
+<menu name="Popup">
+ <menu_item_call label="Zoom blisko" name="Zoom Close"/>
+ <menu_item_call label="Zoom średnio" name="Zoom Medium"/>
+ <menu_item_call label="Zoom daleko" name="Zoom Far"/>
+ <menu_item_check label="Obróć mapę" name="Rotate Map"/>
<menu_item_call label="Zatrzymaj" name="Stop Tracking"/>
<menu_item_call label="Mapa Åšwiata" name="World Map"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_navbar.xml b/indra/newview/skins/default/xui/pl/menu_navbar.xml
index 8d84f3e764..f38b805ee2 100644
--- a/indra/newview/skins/default/xui/pl/menu_navbar.xml
+++ b/indra/newview/skins/default/xui/pl/menu_navbar.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="Navbar Menu">
- <menu_item_check label="Pokaż Współrzędne" name="Show Coordinates"/>
- <menu_item_check label="Pokaż Właściwości Posiadłości" name="Show Parcel Properties"/>
+ <menu_item_check label="Pokaż współrzędne" name="Show Coordinates"/>
+ <menu_item_check label="Pokaż właściwości Posiadłości" name="Show Parcel Properties"/>
<menu_item_call label="Ulubione Miejsce" name="Landmark"/>
<menu_item_call label="Wytnij" name="Cut"/>
<menu_item_call label="Kopiuj" name="Copy"/>
<menu_item_call label="Wklej" name="Paste"/>
<menu_item_call label="Usuń" name="Delete"/>
- <menu_item_call label="Zaznacz Wszystko" name="Select All"/>
+ <menu_item_call label="Zaznacz wszystko" name="Select All"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml b/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml
index 78b8c0a4fc..fe5bc6ba6f 100644
--- a/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="NearBy Chat Menu">
- <menu_item_call label="Pokaż Osoby w Pobliżu..." name="nearby_people"/>
- <menu_item_check label="Pokaż Zablokowany Tekst" name="muted_text"/>
- <menu_item_check label="Wyświetlaj Ikonki Znajomych" name="show_buddy_icons"/>
- <menu_item_check label="Wyświetlaj Imiona" name="show_names"/>
- <menu_item_check label="Wyświetlaj Ikonki i Imiona" name="show_icons_and_names"/>
- <menu_item_call label="Rozmiar Czcionki" name="font_size"/>
+ <menu_item_call label="Pokaż osoby w pobliżu..." name="nearby_people"/>
+ <menu_item_check label="Pokaż zablokowany tekst" name="muted_text"/>
+ <menu_item_check label="Wyświetlaj ikonki znajomych" name="show_buddy_icons"/>
+ <menu_item_check label="Wyświetlaj imiona" name="show_names"/>
+ <menu_item_check label="Wyświetlaj ikonki i imiona" name="show_icons_and_names"/>
+ <menu_item_call label="Rozmiar czcionki" name="font_size"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml b/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml
new file mode 100644
index 0000000000..bd3d42f9b1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+ <menu_item_call label="Zamknij" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_object.xml b/indra/newview/skins/default/xui/pl/menu_object.xml
index bdeeb61bf4..763b120f89 100644
--- a/indra/newview/skins/default/xui/pl/menu_object.xml
+++ b/indra/newview/skins/default/xui/pl/menu_object.xml
@@ -4,21 +4,24 @@
<menu_item_call label="Edytuj" name="Edit..."/>
<menu_item_call label="Buduj" name="Build"/>
<menu_item_call label="Otwórz" name="Open"/>
- <menu_item_call label="Usiądź Tutaj" name="Object Sit"/>
+ <menu_item_call label="Usiądź tutaj" name="Object Sit"/>
+ <menu_item_call label="Wstań" name="Object Stand Up"/>
<menu_item_call label="Sprawdź" name="Object Inspect"/>
- <context_menu label="Połóż &gt;" name="Put On">
+ <menu_item_call label="Przybliż" name="Zoom In"/>
+ <context_menu label="Załóż na ▶" name="Put On">
<menu_item_call label="Załóż" name="Wear"/>
- <context_menu label="Dołącz do &gt;" name="Object Attach"/>
- <context_menu label="Dołącz do HUD &gt;" name="Object Attach HUD"/>
+ <context_menu label="Dołącz ▶" name="Object Attach"/>
+ <context_menu label="Dołącz HUD ▶" name="Object Attach HUD"/>
</context_menu>
- <context_menu label="Usuń &gt;" name="Remove">
- <menu_item_call label="Weź" name="Pie Object Take"/>
+ <context_menu label="Usuń ▶" name="Remove">
<menu_item_call label="Raport" name="Report Abuse..."/>
<menu_item_call label="Zablokuj" name="Object Mute"/>
<menu_item_call label="Zwróć" name="Return..."/>
<menu_item_call label="Usuń" name="Delete"/>
</context_menu>
- <menu_item_call label="Weź Kopię" name="Take Copy"/>
+ <menu_item_call label="Kup" name="Pie Object Bye"/>
+ <menu_item_call label="Weź" name="Pie Object Take"/>
+ <menu_item_call label="Weź kopię" name="Take Copy"/>
<menu_item_call label="Zapłać" name="Pay..."/>
<menu_item_call label="Kup" name="Buy..."/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_participant_list.xml b/indra/newview/skins/default/xui/pl/menu_participant_list.xml
index 604ee2d104..079b8558da 100644
--- a/indra/newview/skins/default/xui/pl/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/pl/menu_participant_list.xml
@@ -1,16 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Participant List Context Menu">
+ <menu_item_check label="Sortuj według imienia" name="SortByName"/>
+ <menu_item_check label="Sortuj według ostatniego mówcy" name="SortByRecentSpeakers"/>
<menu_item_call label="Zobacz Profil" name="View Profile"/>
<menu_item_call label="Dodaj Znajomość" name="Add Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="Zadzwoń" name="Call"/>
<menu_item_call label="Udostępnij" name="Share"/>
<menu_item_call label="Zapłać" name="Pay"/>
- <menu_item_check label="Zablokuj/Odblokuj" name="Block/Unblock"/>
- <menu_item_check label="Zablokuj Tekst" name="MuteText"/>
- <menu_item_check label="Odblokuj Tekst" name="AllowTextChat"/>
- <menu_item_call label="Zablokuj tego uczestnika" name="ModerateVoiceMuteSelected"/>
- <menu_item_call label="Zablokuj wszystkich pozostałych" name="ModerateVoiceMuteOthers"/>
- <menu_item_call label="Oblokuj tego uczestnika" name="ModerateVoiceUnMuteSelected"/>
- <menu_item_call label="Odblokuj wszystkich pozostałych" name="ModerateVoiceUnMuteOthers"/>
+ <menu_item_check label="Zablokuj głos" name="Block/Unblock"/>
+ <menu_item_check label="Zablokuj tekst" name="MuteText"/>
+ <context_menu label="Opcje Moderatora &gt;" name="Moderator Options">
+ <menu_item_check label="Czat/IM dozwolony" name="AllowTextChat"/>
+ <menu_item_call label="Wycisz tego uczestnika" name="ModerateVoiceMuteSelected"/>
+ <menu_item_call label="Wycisz wszystkich pozostałych" name="ModerateVoiceMuteOthers"/>
+ <menu_item_call label="Odblokuj wyciszenie tego uczestnika" name="ModerateVoiceUnMuteSelected"/>
+ <menu_item_call label="Odblokuj wyciszenie wszystkich" name="ModerateVoiceUnMuteOthers"/>
+ </context_menu>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml
index 0043030035..9c33fad00f 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_check label="Porządkuj Według Nazwy" name="sort_name"/>
- <menu_item_check label="Porządkuj Według Statusu" name="sort_status"/>
- <menu_item_check label="Wyświetlaj Ikonki" name="view_icons"/>
- <menu_item_call label="Pokaż Zablokowanych Rezydentów &amp; Obiekty" name="show_blocked_list"/>
+ <menu_item_check label="Porządkuj według nazwy" name="sort_name"/>
+ <menu_item_check label="Porządkuj według statusu" name="sort_status"/>
+ <menu_item_check label="Wyświetlaj ikonki" name="view_icons"/>
+ <menu_item_call label="Pokaż zablokowanych Rezydentów &amp; obiekty" name="show_blocked_list"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups.xml b/indra/newview/skins/default/xui/pl/menu_people_groups.xml
new file mode 100644
index 0000000000..567482dcda
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+ <menu_item_call label="Zobacz Info" name="View Info"/>
+ <menu_item_call label="Czat" name="Chat"/>
+ <menu_item_call label="Rozmowa" name="Call"/>
+ <menu_item_call label="Aktywuj" name="Activate"/>
+ <menu_item_call label="Opuść" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml
index f661cfeba0..4be60d9b83 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_check label="Wyświetlaj Ikonki Grupy" name="Display Group Icons"/>
- <menu_item_call label="Opuść Zaznaczone Grupy" name="Leave Selected Group"/>
+ <menu_item_check label="Wyświetlaj ikonki Grupy" name="Display Group Icons"/>
+ <menu_item_call label="Opuść zaznaczone Grupy" name="Leave Selected Group"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml
index 0f80b56c16..afe3a5200b 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml
@@ -2,9 +2,12 @@
<context_menu name="Avatar Context Menu">
<menu_item_call label="Zobacz Profil" name="View Profile"/>
<menu_item_call label="Dodaj Znajomość" name="Add Friend"/>
+ <menu_item_call label="Usuń z listy Znajomych" name="Remove Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="Zadzwoń" name="Call"/>
+ <menu_item_call label="Mapa" name="Map"/>
<menu_item_call label="Udostępnij" name="Share"/>
<menu_item_call label="Zapłać" name="Pay"/>
<menu_item_check label="Zablokuj/Odblokuj" name="Block/Unblock"/>
+ <menu_item_call label="Teleportuj" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
index 156c10e3f3..bc89402a96 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Multi-Selected People Context Menu">
<menu_item_call label="Dodaj Znajomych" name="Add Friends"/>
+ <menu_item_call label="Usuń Znajomych" name="Remove Friend"/>
<menu_item_call label="IM" name="IM"/>
<menu_item_call label="Zadzwoń" name="Call"/>
<menu_item_call label="Udostępnij" name="Share"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml
index 9e5f1a5917..8ec3820f84 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_check label="Porządkuj Według Ostatnich Rozmówców" name="sort_by_recent_speakers"/>
- <menu_item_check label="Porządkuj Według Nazwy" name="sort_name"/>
- <menu_item_check label="Porządkuj Według Odległości" name="sort_distance"/>
- <menu_item_check label="Wyświetlaj Ikonki" name="view_icons"/>
- <menu_item_call label="Pokaż Zablokowanych Rezydentów &amp; Obiekty" name="show_blocked_list"/>
+ <menu_item_check label="Porządkuj według ostatnich rozmówców" name="sort_by_recent_speakers"/>
+ <menu_item_check label="Porządkuj według nazwy" name="sort_name"/>
+ <menu_item_check label="Porządkuj według odległości" name="sort_distance"/>
+ <menu_item_check label="Wyświetlaj ikonki" name="view_icons"/>
+ <menu_item_call label="Pokaż zablokowanych Rezydentów &amp; obiekty" name="show_blocked_list"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml
index 418b67bce8..b474a556bd 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_check label="Porządkuj Według Daty" name="sort_most"/>
- <menu_item_check label="Porządkuj Według Nazwy" name="sort_name"/>
- <menu_item_check label="Wyświetlaj Ikonki" name="view_icons"/>
- <menu_item_call label="Pokaż Zablokowanych Rezydentów &amp; Obiekty" name="show_blocked_list"/>
+ <menu_item_check label="Porządkuj według daty" name="sort_most"/>
+ <menu_item_check label="Porządkuj według nazwy" name="sort_name"/>
+ <menu_item_check label="Wyświetlaj ikonki" name="view_icons"/>
+ <menu_item_call label="Pokaż zablokowanych Rezydentów &amp; obiekty" name="show_blocked_list"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml
index 14ab9c2978..8f196612a8 100644
--- a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml
+++ b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="picks_plus_menu">
- <menu_item_call label="Utwórz" name="create_pick"/>
+ <menu_item_call label="Stwórz" name="create_pick"/>
<menu_item_call label="Nowa Reklama" name="create_classified"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_place.xml b/indra/newview/skins/default/xui/pl/menu_place.xml
index 72f4b1265f..312bfc6bb0 100644
--- a/indra/newview/skins/default/xui/pl/menu_place.xml
+++ b/indra/newview/skins/default/xui/pl/menu_place.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="place_overflow_menu">
- <menu_item_call label="Zapisz Ulubione Miejsce" name="landmark"/>
+ <menu_item_call label="Zapisz Landmark" name="landmark"/>
<menu_item_call label="Utwórz" name="pick"/>
- <menu_item_call label="Kup Wstęp" name="pass"/>
+ <menu_item_call label="Kup PrzepustkÄ™" name="pass"/>
<menu_item_call label="Edytuj" name="edit"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml
index a737fc49ce..6175671fb9 100644
--- a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml
+++ b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_folder_gear">
- <menu_item_call label="Dodaj Folder" name="add_folder"/>
- <menu_item_call label="Dodaj do Ulubionych Miejsc" name="add_landmark"/>
+ <menu_item_call label="Dodaj folder" name="add_folder"/>
+ <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml
index f5ece87b28..d17b6c1033 100644
--- a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_folder_gear">
- <menu_item_call label="Dodaj do Ulubionych Miejsc" name="add_landmark"/>
- <menu_item_call label="Dodaj Folder" name="add_folder"/>
+ <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/>
+ <menu_item_call label="Dodaj folder" name="add_folder"/>
<menu_item_call label="Wytnij" name="cut"/>
<menu_item_call label="Kopiuj" name="copy_folder"/>
<menu_item_call label="Wklej" name="paste"/>
- <menu_item_call label="Zmień Nazwę" name="rename"/>
+ <menu_item_call label="Zmień nazwę" name="rename"/>
<menu_item_call label="Usuń" name="delete"/>
<menu_item_call label="Rozwiń" name="expand"/>
<menu_item_call label="Schowaj" name="collapse"/>
- <menu_item_call label="Rozwiń Wszystkie Foldery" name="expand_all"/>
- <menu_item_call label="Schowaj Wszystkie Foldery" name="collapse_all"/>
+ <menu_item_call label="Rozwiń wszystkie foldery" name="expand_all"/>
+ <menu_item_call label="Schowaj wszystkie foldery" name="collapse_all"/>
<menu_item_check label="Sortuj według daty" name="sort_by_date"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml
index e88f650ed0..0720aea8aa 100644
--- a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_ladmark_gear">
<menu_item_call label="Teleportuj" name="teleport"/>
- <menu_item_call label="Więcej Informacji" name="more_info"/>
- <menu_item_call label="Pokaż na Mapie" name="show_on_map"/>
- <menu_item_call label="Dodaj do Ulubionych Miejsc" name="add_landmark"/>
- <menu_item_call label="Dodaj Folder" name="add_folder"/>
+ <menu_item_call label="Więcej informacji" name="more_info"/>
+ <menu_item_call label="Pokaż na mapie" name="show_on_map"/>
+ <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/>
+ <menu_item_call label="Dodaj folder" name="add_folder"/>
<menu_item_call label="Wytnij" name="cut"/>
- <menu_item_call label="Kopiuj Ulubione Miejsce" name="copy_landmark"/>
+ <menu_item_call label="Kopiuj Landmark" name="copy_landmark"/>
<menu_item_call label="Kopiuj SLurl" name="copy_slurl"/>
<menu_item_call label="Wklej" name="paste"/>
- <menu_item_call label="Zmień Nazwę" name="rename"/>
+ <menu_item_call label="Zmień nazwę" name="rename"/>
<menu_item_call label="Usuń" name="delete"/>
- <menu_item_call label="Rozwiń Wszystkie Foldery" name="expand_all"/>
- <menu_item_call label="Schowaj Wszystkie Foldery" name="collapse_all"/>
+ <menu_item_call label="Rozwiń wszystkie foldery" name="expand_all"/>
+ <menu_item_call label="Schowaj wszystkie foldery" name="collapse_all"/>
<menu_item_check label="Sortuj według daty" name="sort_by_date"/>
<menu_item_call label="Stwórz Ulubione" name="create_pick"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml b/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml
index 8405d48e49..ef836c8ecf 100644
--- a/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="profile_overflow_menu">
+ <menu_item_call label="Mapa" name="show_on_map"/>
<menu_item_call label="Zapłać" name="pay"/>
<menu_item_call label="Udostępnij" name="share"/>
+ <menu_item_call label="Zablokuj" name="block"/>
+ <menu_item_call label="Odblokuj" name="unblock"/>
+ <menu_item_call label="Wyrzuć" name="kick"/>
+ <menu_item_call label="Unieruchom" name="freeze"/>
+ <menu_item_call label="Uruchom" name="unfreeze"/>
+ <menu_item_call label="CSR" name="csr"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml
index 7e58747267..cd36c116b0 100644
--- a/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Teleport History Item Context Menu">
<menu_item_call label="Teleportuj" name="Teleport"/>
- <menu_item_call label="Więcej Szczegółów" name="More Information"/>
+ <menu_item_call label="Więcej szczegółów" name="More Information"/>
<menu_item_call label="Kopiuj do schowka" name="CopyToClipboard"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_agent.xml b/indra/newview/skins/default/xui/pl/menu_url_agent.xml
index 0f210b140b..7c90e6582d 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_agent.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
<menu_item_call label="Pokaż Profil Rezydenta" name="show_agent"/>
- <menu_item_call label="Kopiuj NazwÄ™ do Schowka" name="url_copy_label"/>
+ <menu_item_call label="Kopiuj nazwÄ™ do schowka" name="url_copy_label"/>
<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_group.xml b/indra/newview/skins/default/xui/pl/menu_url_group.xml
index 38e4360691..109f96e562 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_group.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_group.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Pokaż Szczegóły o Grupie" name="show_group"/>
- <menu_item_call label="Kopiuj GrupÄ™ do Schowka" name="url_copy_label"/>
+ <menu_item_call label="Pokaż szczegóły o Grupie" name="show_group"/>
+ <menu_item_call label="Kopiuj GrupÄ™ do schowka" name="url_copy_label"/>
<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_http.xml b/indra/newview/skins/default/xui/pl/menu_url_http.xml
index 0d8793d41e..e73f7b6745 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_http.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_http.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Otwórz Przeglądarkę Internetową" name="url_open"/>
- <menu_item_call label="Otwórz w Wewnętrzenej Przeglądarce" name="url_open_internal"/>
- <menu_item_call label="Otwórz w Zewnętrznej Przeglądarce" name="url_open_external"/>
+ <menu_item_call label="Otwórz przeglądarkę internetową" name="url_open"/>
+ <menu_item_call label="Otwórz w wewnętrzenej przeglądarce" name="url_open_internal"/>
+ <menu_item_call label="Otwórz w zewnętrznej przeglądarce" name="url_open_external"/>
<menu_item_call label="Kopiuj URL do schowka" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml
index c11860d6fe..ce3309cba0 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Pokaż Obiekt w Szafie" name="show_item"/>
- <menu_item_call label="Kopiuj NazwÄ™ do Schowka" name="url_copy_label"/>
+ <menu_item_call label="Pokaż obiekt w Szafie" name="show_item"/>
+ <menu_item_call label="Kopiuj nazwÄ™ do schowka" name="url_copy_label"/>
<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_map.xml b/indra/newview/skins/default/xui/pl/menu_url_map.xml
index becbd8276f..179ab1f676 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_map.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_map.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Pokaż na Mapie" name="show_on_map"/>
- <menu_item_call label="Teleportuj do Miejsca" name="teleport_to_location"/>
+ <menu_item_call label="Pokaż na mapie" name="show_on_map"/>
+ <menu_item_call label="Teleportuj do miejsca" name="teleport_to_location"/>
<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_objectim.xml b/indra/newview/skins/default/xui/pl/menu_url_objectim.xml
index 0bdf1da2a4..7576208a9e 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_objectim.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Pokaż Szczegóły o Obiekcie" name="show_object"/>
- <menu_item_call label="Pokaż na Mapie" name="show_on_map"/>
- <menu_item_call label="Teleportuj to Miejsca Obiektu" name="teleport_to_object"/>
- <menu_item_call label="Kopiuj NazwÄ™ Obiektu do Schowka" name="url_copy_label"/>
+ <menu_item_call label="Pokaż szczegóły o obiekcie" name="show_object"/>
+ <menu_item_call label="Pokaż na mapie" name="show_on_map"/>
+ <menu_item_call label="Teleportuj to miejsca obiektu" name="teleport_to_object"/>
+ <menu_item_call label="Kopiuj nazwÄ™ obiektu do schowka" name="url_copy_label"/>
<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml
index 881c010bc1..43b945b8be 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Pokaż Szczegóły o Miejscu" name="show_parcel"/>
- <menu_item_call label="Pokaż na Mapie" name="show_on_map"/>
+ <menu_item_call label="Pokaż szczegóły o Miejscu" name="show_parcel"/>
+ <menu_item_call label="Pokaż na mapie" name="show_on_map"/>
<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml
index b9fa692365..456146d8e5 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="Pokaż Szczegóły o Miejscu" name="show_place"/>
- <menu_item_call label="Pokaż na Mapie" name="show_on_map"/>
+ <menu_item_call label="Pokaż szczegóły o Miejscu" name="show_place"/>
+ <menu_item_call label="Pokaż na mapie" name="show_on_map"/>
<menu_item_call label="Teleportuj do miejsca" name="teleport_to_location"/>
<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index 2a5842e553..85ceb9592f 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -7,44 +7,45 @@
<menu_item_call label="Mój Profil" name="Profile"/>
<menu_item_call label="Mój Wygląd" name="Appearance"/>
<menu_item_check label="Moja Szafa" name="Inventory"/>
- <menu_item_call label="Pokaż Szafę w Schowku" name="ShowSidetrayInventory"/>
- <menu_item_call label="Moje Gesturki" name="Gestures"/>
+ <menu_item_check label="Moja Szafa" name="ShowSidetrayInventory"/>
+ <menu_item_check label="Moje Gesty" name="Gestures"/>
<menu label="Mój Status" name="Status">
<menu_item_call label="Tryb Oddalenia" name="Set Away"/>
<menu_item_call label="Tryb Pracy" name="Set Busy"/>
</menu>
- <menu_item_call label="ZarzÄ…daj Statusu Administratora" name="Request Admin Options"/>
+ <menu_item_call label="Zażądaj Statusu Administratora" name="Request Admin Options"/>
<menu_item_call label="Wyłącz Status Administratora" name="Leave Admin Options"/>
<menu_item_call label="Wyłącz [APP_NAME]" name="Quit"/>
</menu>
- <menu label="Kommunikacja" name="Communicate">
+ <menu label="Komunikacja" name="Communicate">
<menu_item_call label="Znajomi" name="My Friends"/>
<menu_item_call label="Grupy" name="My Groups"/>
<menu_item_check label="Czat Lokalny" name="Nearby Chat"/>
<menu_item_call label="Osoby w Pobliżu" name="Active Speakers"/>
- <menu_item_check label="Media w Pobliżu" name="Nearby Media"/>
</menu>
<menu label="Åšwiat" name="World">
- <menu_item_check label="Ustawienia Ruchu" name="Movement Controls"/>
- <menu_item_check label="Widok" name="Camera Controls"/>
- <menu_item_call label="O Posiadłości" name="About Land"/>
- <menu_item_call label="Region/MajÄ…tek" name="Region/Estate"/>
+ <menu_item_check label="Mini-Mapa" name="Mini-Map"/>
+ <menu_item_check label="Mapa Åšwiata" name="World Map"/>
+ <menu_item_call label="Zrób Zdjęcie" name="Take Snapshot"/>
+ <menu_item_call label="Zapamiętaj to Miejsce" name="Create Landmark Here"/>
+ <menu label="Miejsce" name="Land">
+ <menu_item_call label="O Posiadłości" name="About Land"/>
+ <menu_item_call label="Region/MajÄ…tek" name="Region/Estate"/>
+ </menu>
<menu_item_call label="Kup Posiadłość" name="Buy Land"/>
<menu_item_call label="Moje Posiadłości" name="My Land"/>
- <menu label="Pokaż" name="Land">
- <menu_item_check label="Linie Banu" name="Ban Lines"/>
+ <menu label="Pokaż" name="LandShow">
+ <menu_item_check label="Ustawienia Ruchu" name="Movement Controls"/>
+ <menu_item_check label="Zobacz Ustawienia" name="Camera Controls"/>
+ <menu_item_check label="Linie Bana" name="Ban Lines"/>
<menu_item_check label="Emitery" name="beacons"/>
<menu_item_check label="Granice Posiadłości" name="Property Lines"/>
<menu_item_check label="Właściciele Posiadłości" name="Land Owners"/>
+ <menu_item_check label="Współrzędne" name="Coordinates"/>
+ <menu_item_check label="Właściwości Posiadłości" name="Parcel Properties"/>
</menu>
- <menu label="Ulubione Miejsca" name="Landmarks">
- <menu_item_call label="Zapisz Ulubione Miejsce" name="Create Landmark Here"/>
- <menu_item_call label="Ustaw Miejsce Startu" name="Set Home to Here"/>
- </menu>
- <menu_item_call label="Miejsce Startu" name="Teleport Home"/>
- <menu_item_check label="Mini-Mapa" name="Mini-Map"/>
- <menu_item_check label="Mapa Åšwiata" name="World Map"/>
- <menu_item_call label="Zrób Zdjęcie" name="Take Snapshot"/>
+ <menu_item_call label="Teleportuj do Miejsca Startu" name="Teleport Home"/>
+ <menu_item_call label="Ustaw Miejsce Startu" name="Set Home to Here"/>
<menu label="Słońce" name="Environment Settings">
<menu_item_call label="Wschód Słońca" name="Sunrise"/>
<menu_item_call label="Południe" name="Noon"/>
@@ -74,12 +75,14 @@
<menu_item_call label="Zaznacz Wszystko" name="Select All"/>
<menu_item_call label="Cofnij Zaznaczenie" name="Deselect"/>
</menu>
- <menu_item_call label="Grupuj" name="Link"/>
+ <menu_item_call label="Linkuj" name="Link"/>
<menu_item_call label="Rozlinkuj" name="Unlink"/>
+ <menu_item_check label="Edytuj Zgrupowane Obiekty" name="Edit Linked Parts"/>
<menu_item_call label="Ogniskowa Selekcji" name="Focus on Selection"/>
<menu_item_call label="Przybliż do Selekcji" name="Zoom to Selection"/>
<menu label="Obiekt" name="Object">
- <menu_item_call label="Kup" name="Menu Object Take"/>
+ <menu_item_call label="Kup" name="Menu Object Buy"/>
+ <menu_item_call label="Weź" name="Menu Object Take"/>
<menu_item_call label="Weź Kopię" name="Take Copy"/>
<menu_item_call label="Zapisz Obiekt do Szafy" name="Save Object Back to My Inventory"/>
<menu_item_call label="Zapisz do Treści Obiektu" name="Save Object Back to Object Contents"/>
@@ -92,25 +95,18 @@
<menu_item_call label="Wstrzymaj Działanie Skryptów w Selekcji" name="Set Scripts to Not Running"/>
</menu>
<menu label="Opcje" name="Options">
- <menu_item_check label="Edytuj Części Zlinkowane" name="Edit Linked Parts"/>
<menu_item_call label="Ustaw DomyÅ›lne Pozwolenia Åadowania" name="perm prefs"/>
<menu_item_check label="Pokaż Zaawansowane Pozwolenia" name="DebugPermissions"/>
- <menu label="Selekcja" name="Selection">
- <menu_item_check label="Wybierz Tylko Moje Obiekty" name="Select Only My Objects"/>
- <menu_item_check label="Zaznacz Tylko PoruszajÄ…ce siÄ™ Obiekty" name="Select Only Movable Objects"/>
- <menu_item_check label="Wybierz Przez Zaznaczenie" name="Select By Surrounding"/>
- </menu>
- <menu label="Pokaż" name="Show">
- <menu_item_check label="Pokaż Ukrytą Selekcję" name="Show Hidden Selection"/>
- <menu_item_check label="Pokaż Promień Światła dla Selekcji" name="Show Light Radius for Selection"/>
- <menu_item_check label="Pokaż Emitery Selekcji" name="Show Selection Beam"/>
- </menu>
- <menu label="Siatka" name="Grid">
- <menu_item_check label="PrzeciÄ…gnij Obiekt" name="Snap to Grid"/>
- <menu_item_call label="PrzeciÄ…gnij Obiekt XY do Siatki" name="Snap Object XY to Grid"/>
- <menu_item_call label="Zastosuj Zaznaczenie dla Siatki" name="Use Selection for Grid"/>
- <menu_item_call label="Ustawienia Siatki" name="Grid Options"/>
- </menu>
+ <menu_item_check label="Wybierz Tylko Moje Obiekty" name="Select Only My Objects"/>
+ <menu_item_check label="Wybierz Tylko Obiekty Przesuwalne" name="Select Only Movable Objects"/>
+ <menu_item_check label="Wybierz przez Otoczenie" name="Select By Surrounding"/>
+ <menu_item_check label="Zobacz UkrytÄ… SelekcjÄ™" name="Show Hidden Selection"/>
+ <menu_item_check label="Pokaż Promień Emitera dla Selekcji" name="Show Light Radius for Selection"/>
+ <menu_item_check label="Pokaż Emiter Selekcji" name="Show Selection Beam"/>
+ <menu_item_check label="Uruchom SiatkÄ™" name="Snap to Grid"/>
+ <menu_item_call label="PrzeciÄ…gnij Obiekt do Siatki" name="Snap Object XY to Grid"/>
+ <menu_item_call label="Wybierz Zaznaczenie Siatki" name="Use Selection for Grid"/>
+ <menu_item_call label="Opcje Siatki" name="Grid Options"/>
</menu>
<menu label="Wybierz Zlinkowane Części" name="Select Linked Parts">
<menu_item_call label="Wybierz Następną Część" name="Select Next Part"/>
@@ -121,15 +117,14 @@
</menu>
<menu label="Pomoc" name="Help">
<menu_item_call label="[SECOND_LIFE] Portal Pomocy" name="Second Life Help"/>
- <menu_item_call label="Samouczek" name="Tutorial"/>
<menu_item_call label="Złóż Raport o Nadużyciu" name="Report Abuse"/>
<menu_item_call label="Zgłoś Błędy Klienta" name="Report Bug"/>
</menu>
<menu label="Zaawansowane" name="Advanced">
- <menu_item_check label="Uruchom Tryb Oddalenia po 30 Minutach" name="Go Away/AFK When Idle"/>
<menu_item_call label="Zatrzymaj Wszystkie Animacje" name="Stop Animating My Avatar"/>
<menu_item_call label="Odswież Wyświetlanie Tekstur" name="Rebake Texture"/>
<menu_item_call label="Domyślne Ustawienia Rozmiaru Interfejsu" name="Set UI Size to Default"/>
+ <menu_item_call label="Ustaw Rozmiar Interfejsu..." name="Set Window Size..."/>
<menu_item_check label="Ogranicz Dystans Selekcji" name="Limit Select Distance"/>
<menu_item_check label="Wyłącz Ograniczenia Zasięgu Kamery" name="Disable Camera Distance"/>
<menu_item_check label="Wysoka Rozdzielczość Zdjęć" name="HighResSnapshot"/>
@@ -176,8 +171,8 @@
<menu_item_check label="Uruchom Wiele Wątków" name="Run Multiple Threads"/>
<menu_item_call label="Wyczyść Bufor Danych Grupy" name="ClearGroupCache"/>
<menu_item_check label="Wygładzanie Ruchu Myszki" name="Mouse Smoothing"/>
- <menu_item_check label="Pokaż Wiadomości w Pobliżu" name="IMInChat"/>
<menu label="Skróty" name="Shortcuts">
+ <menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/>
<menu_item_check label="Szukaj" name="Search"/>
<menu_item_call label="Zwolnij Klawisze" name="Release Keys"/>
<menu_item_call label="Domyślne Ustawienia Rozmiaru Interfejsu" name="Set UI Size to Default"/>
@@ -189,7 +184,7 @@
<menu_item_call label="Widok Panoramiczny" name="Mouselook"/>
<menu_item_check label="Wolna Kamera" name="Joystick Flycam"/>
<menu_item_call label="Reset Widoku" name="Reset View"/>
- <menu_item_call label="Zobacz Ostatniego Rozmówce" name="Look at Last Chatter"/>
+ <menu_item_call label="Zobacz Ostatniego Rozmówcę" name="Look at Last Chatter"/>
<menu label="Wybierz Narzędzie Budowania" name="Select Tool">
<menu_item_call label="Narzędzie Ogniskowej" name="Focus"/>
<menu_item_call label="Narzędzie Ruchu" name="Move"/>
@@ -205,7 +200,7 @@
<menu_item_call label="Pokaż Ustawienia Debugowania" name="Debug Settings"/>
<menu_item_check label="Pokaż Menu Progresu" name="Debug Mode"/>
</menu>
- <menu label="Postęp" name="Develop">
+ <menu label="Postęp..." name="Develop">
<menu label="Konsola" name="Consoles">
<menu_item_check label="Konsola Tekstur" name="Texture Console"/>
<menu_item_check label="Debugowanie Zdarzeń Konsoli" name="Debug Console"/>
@@ -217,6 +212,7 @@
<menu_item_call label="Info Regionu do Debugowania Konsoli" name="Region Info to Debug Console"/>
<menu_item_check label="Kamera" name="Camera"/>
<menu_item_check label="Wiatr" name="Wind"/>
+ <menu_item_check label="Znak" name="Badge"/>
</menu>
<menu label="Pokaż Informacje" name="Display Info">
<menu_item_check label="Pokaż Czas" name="Show Time"/>
diff --git a/indra/newview/skins/default/xui/pl/mime_types.xml b/indra/newview/skins/default/xui/pl/mime_types.xml
index c90d5761e6..cbf2afa91d 100644
--- a/indra/newview/skins/default/xui/pl/mime_types.xml
+++ b/indra/newview/skins/default/xui/pl/mime_types.xml
@@ -2,13 +2,13 @@
<mimetypes name="default">
<widgetset name="web">
<label name="web_label">
- Zawartość Strony Internetowej
+ Zawartość przeglądarki internetowej
</label>
<tooltip name="web_tooltip">
- To miejsce posiada zawartość strony internetowej
+ To miejsce posiada zawartość przeglądarki internetowej
</tooltip>
<playtip name="web_playtip">
- Pokaż zawartość strony internetowej
+ Pokaż zawartość przeglądarki internetowej
</playtip>
</widgetset>
<widgetset name="movie">
diff --git a/indra/newview/skins/default/xui/pl/mime_types_linux.xml b/indra/newview/skins/default/xui/pl/mime_types_linux.xml
new file mode 100644
index 0000000000..a2b8168b51
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/mime_types_linux.xml
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<mimetypes name="default">
+ <widgetset name="web">
+ <label name="web_label">
+ Zawartość przeglądarki internetowej
+ </label>
+ <tooltip name="web_tooltip">
+ W tym miejscu można zobaczyć zawartość przeglądarki internetowej
+ </tooltip>
+ <playtip name="web_playtip">
+ Pokaż zawartość przeglądarki internetowej
+ </playtip>
+ </widgetset>
+ <widgetset name="movie">
+ <label name="movie_label">
+ Film
+ </label>
+ <tooltip name="movie_tooltip">
+ To miejsce wyświtela filmy
+ </tooltip>
+ <playtip name="movie_playtip">
+ Zacznij odtwarzanie filmu
+ </playtip>
+ </widgetset>
+ <widgetset name="image">
+ <label name="image_label">
+ Obraz
+ </label>
+ <tooltip name="image_tooltip">
+ W tym miejscu można zobaczyć obrazy
+ </tooltip>
+ <playtip name="image_playtip">
+ Zobacz obrazy wyświetlane w tym miejscu
+ </playtip>
+ </widgetset>
+ <widgetset name="audio">
+ <label name="audio_label">
+ Audio
+ </label>
+ <tooltip name="audio_tooltip">
+ W tym miejscu odtwarzane jest audio
+ </tooltip>
+ <playtip name="audio_playtip">
+ Zacznij odtwarzanie audio
+ </playtip>
+ </widgetset>
+ <scheme name="rtsp">
+ <label name="rtsp_label">
+ Strumieniowe w czasie rzeczywistym
+ </label>
+ </scheme>
+ <mimetype name="blank">
+ <label name="blank_label">
+ - Żadne -
+ </label>
+ </mimetype>
+ <mimetype name="none/none">
+ <label name="none/none_label">
+ - Żadne -
+ </label>
+ </mimetype>
+ <mimetype name="audio/*">
+ <label name="audio2_label">
+ Audio
+ </label>
+ </mimetype>
+ <mimetype name="video/*">
+ <label name="video2_label">
+ Video
+ </label>
+ </mimetype>
+ <mimetype name="image/*">
+ <label name="image2_label">
+ Obraz
+ </label>
+ </mimetype>
+ <mimetype name="video/vnd.secondlife.qt.legacy">
+ <label name="vnd.secondlife.qt.legacy_label">
+ Film (QuickTime)
+ </label>
+ </mimetype>
+ <mimetype name="application/javascript">
+ <label name="application/javascript_label">
+ Javascript
+ </label>
+ </mimetype>
+ <mimetype name="application/ogg">
+ <label name="application/ogg_label">
+ Ogg Audio/Video
+ </label>
+ </mimetype>
+ <mimetype name="application/pdf">
+ <label name="application/pdf_label">
+ Dokument PDF
+ </label>
+ </mimetype>
+ <mimetype name="application/postscript">
+ <label name="application/postscript_label">
+ Dokument Postscript
+ </label>
+ </mimetype>
+ <mimetype name="application/rtf">
+ <label name="application/rtf_label">
+ Tekst (RTF)
+ </label>
+ </mimetype>
+ <mimetype name="application/smil">
+ <label name="application/smil_label">
+ Synchronized Multimedia Integration Language (SMIL)
+ </label>
+ </mimetype>
+ <mimetype name="application/xhtml+xml">
+ <label name="application/xhtml+xml_label">
+ Strona internetowa (XHTML)
+ </label>
+ </mimetype>
+ <mimetype name="application/x-director">
+ <label name="application/x-director_label">
+ Macromedia Director
+ </label>
+ </mimetype>
+ <mimetype name="audio/mid">
+ <label name="audio/mid_label">
+ Audio (MIDI)
+ </label>
+ </mimetype>
+ <mimetype name="audio/mpeg">
+ <label name="audio/mpeg_label">
+ Audio (MP3)
+ </label>
+ </mimetype>
+ <mimetype name="audio/x-aiff">
+ <label name="audio/x-aiff_label">
+ Audio (AIFF)
+ </label>
+ </mimetype>
+ <mimetype name="audio/x-wav">
+ <label name="audio/x-wav_label">
+ Audio (WAV)
+ </label>
+ </mimetype>
+ <mimetype name="image/bmp">
+ <label name="image/bmp_label">
+ Obraz (BMP)
+ </label>
+ </mimetype>
+ <mimetype name="image/gif">
+ <label name="image/gif_label">
+ Obraz (GIF)
+ </label>
+ </mimetype>
+ <mimetype name="image/jpeg">
+ <label name="image/jpeg_label">
+ Obraz (JPEG)
+ </label>
+ </mimetype>
+ <mimetype name="image/png">
+ <label name="image/png_label">
+ Obraz (PNG)
+ </label>
+ </mimetype>
+ <mimetype name="image/svg+xml">
+ <label name="image/svg+xml_label">
+ Obraz (SVG)
+ </label>
+ </mimetype>
+ <mimetype name="image/tiff">
+ <label name="image/tiff_label">
+ Obraz (TIFF)
+ </label>
+ </mimetype>
+ <mimetype name="text/html">
+ <label name="text/html_label">
+ Strona internetowa
+ </label>
+ </mimetype>
+ <mimetype name="text/plain">
+ <label name="text/plain_label">
+ Tekst
+ </label>
+ </mimetype>
+ <mimetype name="text/xml">
+ <label name="text/xml_label">
+ XML
+ </label>
+ </mimetype>
+ <mimetype name="video/mpeg">
+ <label name="video/mpeg_label">
+ Film (MPEG)
+ </label>
+ </mimetype>
+ <mimetype name="video/mp4">
+ <label name="video/mp4_label">
+ Film (MP4)
+ </label>
+ </mimetype>
+ <mimetype name="video/quicktime">
+ <label name="video/quicktime_label">
+ Film (QuickTime)
+ </label>
+ </mimetype>
+ <mimetype name="video/x-ms-asf">
+ <label name="video/x-ms-asf_label">
+ Film (Windows Media ASF)
+ </label>
+ </mimetype>
+ <mimetype name="video/x-ms-wmv">
+ <label name="video/x-ms-wmv_label">
+ Film (Windows Media WMV)
+ </label>
+ </mimetype>
+ <mimetype name="video/x-msvideo">
+ <label name="video/x-msvideo_label">
+ Film (AVI)
+ </label>
+ </mimetype>
+</mimetypes>
diff --git a/indra/newview/skins/default/xui/pl/mime_types_mac.xml b/indra/newview/skins/default/xui/pl/mime_types_mac.xml
new file mode 100644
index 0000000000..ae860249bb
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/mime_types_mac.xml
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<mimetypes name="default">
+ <widgetset name="web">
+ <label name="web_label">
+ Zawartość przeglądarki internetowej
+ </label>
+ <tooltip name="web_tooltip">
+ W tym miejscu można zobaczyć zawartość przeglądarki internetowej
+ </tooltip>
+ <playtip name="web_playtip">
+ Pokaż zawartość przeglądarki internetowej
+ </playtip>
+ </widgetset>
+ <widgetset name="movie">
+ <label name="movie_label">
+ Film
+ </label>
+ <tooltip name="movie_tooltip">
+ To miejsce posiada zawartość filmową
+ </tooltip>
+ <playtip name="movie_playtip">
+ OglÄ…daj Film
+ </playtip>
+ </widgetset>
+ <widgetset name="image">
+ <label name="image_label">
+ Obraz
+ </label>
+ <tooltip name="image_tooltip">
+ To miejsce posiada zwartość graficzną
+ </tooltip>
+ <playtip name="image_playtip">
+ Zobacz zdjęcie miejsca
+ </playtip>
+ </widgetset>
+ <widgetset name="audio">
+ <label name="audio_label">
+ Audio
+ </label>
+ <tooltip name="audio_tooltip">
+ To miejsce posiada zwartość audio
+ </tooltip>
+ <playtip name="audio_playtip">
+ Rozpocznij odtwarzanie audio
+ </playtip>
+ </widgetset>
+ <scheme name="rtsp">
+ <label name="rtsp_label">
+ Synchroniczne Strumienie Medialne
+ </label>
+ </scheme>
+ <mimetype name="blank">
+ <label name="blank_label">
+ - Żadne -
+ </label>
+ </mimetype>
+ <mimetype name="none/none">
+ <label name="none/none_label">
+ - Żadne -
+ </label>
+ </mimetype>
+ <mimetype name="audio/*">
+ <label name="audio2_label">
+ Audio
+ </label>
+ </mimetype>
+ <mimetype name="video/*">
+ <label name="video2_label">
+ Video
+ </label>
+ </mimetype>
+ <mimetype name="image/*">
+ <label name="image2_label">
+ Obraz
+ </label>
+ </mimetype>
+ <mimetype name="video/vnd.secondlife.qt.legacy">
+ <label name="vnd.secondlife.qt.legacy_label">
+ Film (QuickTime)
+ </label>
+ </mimetype>
+ <mimetype name="application/javascript">
+ <label name="application/javascript_label">
+ Skrypt Java
+ </label>
+ </mimetype>
+ <mimetype name="application/ogg">
+ <label name="application/ogg_label">
+ Ogg Audio/Video
+ </label>
+ </mimetype>
+ <mimetype name="application/pdf">
+ <label name="application/pdf_label">
+ Dokument PDF
+ </label>
+ </mimetype>
+ <mimetype name="application/postscript">
+ <label name="application/postscript_label">
+ Dokument Postscript
+ </label>
+ </mimetype>
+ <mimetype name="application/rtf">
+ <label name="application/rtf_label">
+ Dokument RTF
+ </label>
+ </mimetype>
+ <mimetype name="application/smil">
+ <label name="application/smil_label">
+ Język Integracyjnej Synchronizacji Multimedialnej (SMIL)
+ </label>
+ </mimetype>
+ <mimetype name="application/xhtml+xml">
+ <label name="application/xhtml+xml_label">
+ Strona Internetowa (XHTML)
+ </label>
+ </mimetype>
+ <mimetype name="application/x-director">
+ <label name="application/x-director_label">
+ Macromedia Director
+ </label>
+ </mimetype>
+ <mimetype name="audio/mid">
+ <label name="audio/mid_label">
+ Audio (MIDI)
+ </label>
+ </mimetype>
+ <mimetype name="audio/mpeg">
+ <label name="audio/mpeg_label">
+ Audio (MP3)
+ </label>
+ </mimetype>
+ <mimetype name="audio/x-aiff">
+ <label name="audio/x-aiff_label">
+ Audio (AIFF)
+ </label>
+ </mimetype>
+ <mimetype name="audio/x-wav">
+ <label name="audio/x-wav_label">
+ Audio (WAV)
+ </label>
+ </mimetype>
+ <mimetype name="image/bmp">
+ <label name="image/bmp_label">
+ Obraz (BMP)
+ </label>
+ </mimetype>
+ <mimetype name="image/gif">
+ <label name="image/gif_label">
+ Obraz (GIF)
+ </label>
+ </mimetype>
+ <mimetype name="image/jpeg">
+ <label name="image/jpeg_label">
+ Obraz (JPEG)
+ </label>
+ </mimetype>
+ <mimetype name="image/png">
+ <label name="image/png_label">
+ Obraz (PNG)
+ </label>
+ </mimetype>
+ <mimetype name="image/svg+xml">
+ <label name="image/svg+xml_label">
+ Obraz (SVG)
+ </label>
+ </mimetype>
+ <mimetype name="image/tiff">
+ <label name="image/tiff_label">
+ Obraz (TIFF)
+ </label>
+ </mimetype>
+ <mimetype name="text/html">
+ <label name="text/html_label">
+ Strona Internetowa
+ </label>
+ </mimetype>
+ <mimetype name="text/plain">
+ <label name="text/plain_label">
+ Tekst
+ </label>
+ </mimetype>
+ <mimetype name="text/xml">
+ <label name="text/xml_label">
+ XML
+ </label>
+ </mimetype>
+ <mimetype name="video/mpeg">
+ <label name="video/mpeg_label">
+ Film (MPEG)
+ </label>
+ </mimetype>
+ <mimetype name="video/mp4">
+ <label name="video/mp4_label">
+ Film (MP4)
+ </label>
+ </mimetype>
+ <mimetype name="video/quicktime">
+ <label name="video/quicktime_label">
+ Film (QuickTime)
+ </label>
+ </mimetype>
+ <mimetype name="video/x-ms-asf">
+ <label name="video/x-ms-asf_label">
+ Film (Windows Media ASF)
+ </label>
+ </mimetype>
+ <mimetype name="video/x-ms-wmv">
+ <label name="video/x-ms-wmv_label">
+ Film (Windows Media WMV)
+ </label>
+ </mimetype>
+ <mimetype name="video/x-msvideo">
+ <label name="video/x-msvideo_label">
+ Film (AVI)
+ </label>
+ </mimetype>
+</mimetypes>
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 3cf9be507d..12d68ed30e 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -9,72 +9,43 @@
<global name="implicitclosebutton">
Zamknij
</global>
- <template name="okbutton">
- <form>
- <button
- name="OK"
- text="$yestext"/>
- </form>
- </template>
-
- <template name="okignore">
- <form>
- <button
- name="OK"
- text="$yestext"/>
- <ignore text="$ignoretext"/>
- </form>
- </template>
-
- <template name="okcancelbuttons">
- <form>
- <button
- name="OK"
- text="$yestext"/>
- <button
- name="Cancel"
- text="$notext"/>
- </form>
- </template>
-
- <template name="okcancelignore">
- <form>
- <button
- name="OK"
- text="$yestext"/>
- <button
- name="Cancel"
- text="$notext"/>
- <ignore text="$ignoretext"/>
- </form>
- </template>
-
- <template name="okhelpbuttons">
- <form>
- <button
- name="OK"
- text="$yestext"/>
- <button
- name="Help"
- text="$helptext"/>
- </form>
- </template>
-
- <template name="yesnocancelbuttons">
- <form>
- <button
- name="Yes"
- text="$yestext"/>
- <button
- name="No"
- text="$notext"/>
- <button
- name="Cancel"
- text="$canceltext"/>
- </form>
- </template>
+ <template name="okbutton">
+ <form>
+ <button name="OK_okbutton" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okignore">
+ <form>
+ <button name="OK_okignore" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okcancelbuttons">
+ <form>
+ <button name="OK_okcancelbuttons" text="$yestext"/>
+ <button name="Cancel_okcancelbuttons" text="$notext"/>
+ </form>
+ </template>
+ <template name="okcancelignore">
+ <form>
+ <button name="OK_okcancelignore" text="$yestext"/>
+ <button name="Cancel_okcancelignore" text="$canceltext"/>
+ </form>
+ </template>
+ <template name="okhelpbuttons">
+ <form>
+ <button name="OK_okhelpbuttons" text="$yestext"/>
+ <button name="Help" text="$helptext"/>
+ </form>
+ </template>
+ <template name="yesnocancelbuttons">
+ <form>
+ <button name="Yes" text="$yestext"/>
+ <button name="No" text="$notext"/>
+ <button name="Cancel_yesnocancelbuttons" text="$canceltext"/>
+ </form>
+ </template>
<notification functor="GenericAcknowledge" label="Nieznany rodzaj komunikatu" name="MissingAlert">
- Twoja wersja klienta [APP_NAME] nie może wyświetlić odebranej wiadomości.
+ Twoja wersja klienta [APP_NAME] nie może wyświetlić odebranej wiadomości. Upewnij się, że posiadasz najnowszą wersję klienta.
Szczegóły błędu: Błąd o nazwie &apos;[_NAME]&apos; nie został odnaleziony w pliku notifications.xml.
<usetemplate name="okbutton" yestext="OK"/>
@@ -97,24 +68,18 @@ Szczegóły błędu: Błąd o nazwie &apos;[_NAME]&apos; nie został odnaleziony
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/>
</notification>
<notification name="BadInstallation">
- Podczas aktualizacji klienta [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę secondlife.com by ściągnąć najnowszą wersje klienta.
- <usetemplate
- name="okbutton"
- yestext="OK"/>
+ Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę [http://get.secondlife.com download the latest version] by ściągnąć najnowszą wersje klienta.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LoginFailedNoNetwork">
- Błąd sieci: Brak połączenia.
+ Brak połączenia z [SECOND_LIFE_GRID].
&apos;[DIAGNOSTIC]&apos;
Sprawdź stan swojego połączenia sieciowego.
- <usetemplate
- name="okbutton"
- yestext="OK"/>
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="MessageTemplateNotFound">
Wzór komunikatu dla [PATH] nie odnaleziony.
- <usetemplate
- name="okbutton"
- yestext="OK"/>
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="WearableSave">
Zapisać zmiany dotyczące ubrania/części ciała?
@@ -124,7 +89,7 @@ Sprawdź stan swojego połączenia sieciowego.
W trakcie ładwania tekstu dla skryptu pojawił się problem z następującego powodu: [REASON]. Spróbuj ponownie za kilka minut.
</notification>
<notification name="CompileQueueSaveBytecode">
- W trakcie ładwania skompilowanego skryptu pojawił się problem z następującego powodu: [REASON]. Spróbuj ponownie za kilka minut.
+ W trakcie ładowania skompilowanego skryptu pojawił się problem z następującego powodu: [REASON]. Spróbuj ponownie za kilka minut.
</notification>
<notification name="WriteAnimationFail">
Problem w zapisywaniu danych animacji. Spróbuj ponownie za kilka minut.
@@ -140,15 +105,17 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz.
Zapisać wszystkie zmiany dotyczące ubrania/cześci ciała?
<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/>
</notification>
+ <notification name="FriendsAndGroupsOnly">
+ Osoby spoza listy znajomych, których rozmowy głosowe i IM są ignorowane, nie wiedzą o tym.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="GrantModifyRights">
- Udzielenie praw modyfikacji innemu Rezydentowi umożliwia modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów.
-Używaj tej opcji z rozwagą!
+ Udzielenie praw modyfikacji innemu Rezydentowi umożliwia modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. Używaj tej opcji z rozwagą!
Czy chcesz dać prawa modyfikacji osobie [FIRST_NAME] [LAST_NAME]?
<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
</notification>
<notification name="GrantModifyRightsMultiple">
- Udzielenie praw modyfikacji innym Rezydentom umożliwia im modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów.
-Używaj tej opcji z rozwagą!
+ Udzielenie praw modyfikacji innym Rezydentom umożliwia im modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. Używaj tej opcji z rozwagą!
Czy chcesz dać prawa modyfikacji wybranym osobom?
<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
</notification>
@@ -179,7 +146,7 @@ Czy chcesz dać prawa modyfikacji wybranym osobom?
Ta funkcja nie może być odebrana.
Członkowie muszą sami zrezygnować z pełnienia tej funkcji.
Chcesz kontynuować?
- <usetemplate ignoretext="Podczas dodawania członków grupy do funkcji właściciela" name="okcancelignore" notext="Nie" yestext="Tak"/>
+ <usetemplate ignoretext="Przed dodaniem nowego właściciela do grupy, proszę potwierdzić swoją decyzję." name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="AssignDangerousActionWarning">
Dodajesz przywilej [ACTION_NAME] do fukcji [ROLE_NAME].
@@ -201,67 +168,31 @@ Udzielaj tego przywileju z rozwagÄ….
Dodać ten przywilej do funkcji [ROLE_NAME]?
<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
</notification>
- <notification name="ClickPublishHelpLand">
- Wybranie opcji Publikuj w Wyszukiwarce Wybranie tej opcji umożliwi pokazywanie:
-- tej posiadłości w wynikach wyszukiwarki
-- publicznych obiektów na tej posiadłości
-- tej posiadłości w przeglądarce internetowej
- </notification>
- <notification name="ClickSoundHelpLand">
- Media oraz muzyka są aktywne według ustawień posiadłości dla mediów. Dźwięk oraz komunikacja głosowa mogą być ograniczone w danej posiadłości, w zależności od ustawień rodzaju treści jaką zawiera. Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostępu do regionów z podanym rodzajem treści jaką zawiera.
- <url name="url">
- https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=5046
- </url>
- <usetemplate
- name="okcancelbuttons"
- yestext="[SECOND_LIFE]:Pomoc"
- notext="Zamknij" />
- </notification>
- <notification name="ClickSearchHelpAll">
- Wyniki wyszukiwania wyświetlają się na podstawie rodzaju zakładki wyszukiwarki, z której korzystasz, rodzaju statusu Twojego wieku, wybranej kategorii, oraz innych czynników. By uzyskać wiecej szczegółów skorzystaj z [SECOND_LIFE]:Pomoc.
- <url name="url">
- https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=4722
- </url>
- <usetemplate
- name="okcancelbuttons"
- yestext="[SECOND_LIFE]:Pomoc"
- notext="Zamknij" />
- </notification>
- <notification name="ClickPublishHelpLandDisabled">
- Ta posiadłość nie może być pokazywana w wynikach wyszukiwania ponieważ region w którym się znajduje zabrania tego.
- </notification>
- <notification name="ClickPublishHelpAvatar">
- Wybranie opcji Publikuj w Wyszukiwarce umożliwi pokazywanie:
-- Twojego profilu w wynikach wyszukiwarki
-- linku do Twojego profilu na publicznych stronach
- </notification>
- <notification name="ClickPartnerHelpAvatar">
- Możesz zaproponować związek innemu Rezydentowi lub rozwiązać istniejący związek na stronie internetowej [SECOND_LIFE].
-
-Chcesz dowiedzieć się więcej na temat związków w [SECOND_LIFE]?
- <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Idź na stronę"/>
- </notification>
- <notification name="ClickUploadHelpPermissions">
- Twoje domyślne ustawienia praw dla Twoich obiektów mogą nie działać poprawnie w starszych regionach.
- </notification>
- <notification name="ClickWebProfileHelpAvatar">
- Jeżeli ten Rezydent posiada link URL w profilu możesz:
- * Kliknąć &apos;Załaduj&apos; żeby zobaczyć stronę w tej zakładce WWW.
- * Kliknąć &apos;Załaduj&apos; &gt; &apos;Użyj zewnętrznej przeglądarki&apos; żeby zobaczyć stronę używając domyślnej zewnętrznej przeglądarki.
- * Kliknąć &apos;Załaduj&apos; &gt; &apos;Otwórz URL strony profilu&apos; żeby wrócić do strony tego Rezydenta po jej opuszczeniu.
-
-Oglądając swój profil możesz wpisać dowolny link URL i kliknąć OK żeby go zapisać.
-Rezydenci mogą odwiedzać podany adres, kiedy przeglądają Twój profil.
+ <notification name="AttachmentDrop">
+ Wybrałeś opcję opuszczenia swojego załącznika.
+ Czy chcesz kontynuować?
+ <usetemplate ignoretext="Potwierdź przed zdjęciem załącznika." name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="JoinGroupCanAfford">
Dołączenie do tej grupy kosztuje [COST]L$.
Chcesz kontynuować?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Dołącz"/>
</notification>
+ <notification name="JoinGroupNoCost">
+ Dołączasz do grupy [NAME].
+Czy chcesz kontynuować?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Zaakceptuj"/>
+ </notification>
<notification name="JoinGroupCannotAfford">
Członkostwo w tej grupie kosztuje [COST]L$
Masz za mało L$ żeby zostać członkiem.
</notification>
+ <notification name="CreateGroupCost">
+ Stworzenie tej grupy kosztuje 100L$.
+W grupie powinien być więcej niż jeden członek, albo zostanie na zawsze skasowana.
+Zaproś proszę członków w ciągu 48 godzin.
+ <usetemplate canceltext="Anuluj" name="okcancelbuttons" notext="Anuluj" yestext="Stwórz grupę za 100L$"/>
+ </notification>
<notification name="LandBuyPass">
Za [COST]L$ możesz odwiedzić tą posiadłość (&apos;[PARCEL_NAME]&apos;) na [TIME] godzin. Chcesz kupić przepustkę?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
@@ -276,9 +207,9 @@ Cena wynosi [SALE_PRICE]L$ i sprzedaż będzie autoryzowana dla [NAME].
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="ConfirmLandSaleToAnyoneChange">
- UWAGA: Wybierając Sprzedaż dla Kogokolwiek umożliwiasz zakup posiadłości wszystkim Rezydentom [SECOND_LIFE].
+ UWAGA: Wybierając opcję &quot;Sprzedaj Każdemu&quot; udostępniasz swoją posiadłość do sprzedaży dla jakiegokolwiek Rezydenta [SECOND_LIFE] , nawet osób nieobecnych w tym regionie.
-Posiadłość o powierzchni [LAND_SIZE] m zostaje wystawiona na sprzedaż.
+Posiadłość o powierzchni [LAND_SIZE] m² zostaje wystawiona na sprzedaż.
Cena wynosi [SALE_PRICE]L$ i sprzedaż będzie autoryzowana dla [NAME].
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
@@ -324,7 +255,7 @@ Obiekty: [N]
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="DisableAllTopObjects">
- Czy na pewno chcesz deaktywować wszystkie obiekty w tym regionie?
+ Czy na pewno chcesz deaktywować wszystkie obiekty w tym Regionie?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="ReturnObjectsNotOwnedByGroup">
@@ -338,6 +269,12 @@ Obiekty: [N]
Ten region pozwala na uszkodzenia.
Skrypty muszą pozostać aktywne dla prawidłowego działania broni.
</notification>
+ <notification name="MultipleFacesSelected">
+ Obecnie zaznaczono wiele powierzchni.
+Jeśli działanie będzie kontynuowane, oddzielne media będą ustawione na wielu powierzchniach obiektu.
+W celu umieszczenia mediów tylko na jednej powierzchni skorzystaj z Wybierz Powierzchnię i kliknij na wybranej powierzchni obiektu oraz kliknij Dodaj.
+ <usetemplate ignoretext="Media zostanÄ… ustawione na wielu zaznaczonych powierzchniach" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ </notification>
<notification name="MustBeInParcel">
Musisz znajdować się wewnątrz posiadłości żeby wybrać punkt lądowania.
</notification>
@@ -373,6 +310,10 @@ Folder stroju nie zawiera żadnego ubrania, części ciała ani załączników.
<notification name="CannotWearTrash">
Nie możesz założyć ubrania, które znajduje się w koszu.
</notification>
+ <notification name="MaxAttachmentsOnOutfit">
+ Nie można dołączyć obiektu.
+Limit [MAX_ATTACHMENTS] załączników został przekroczony. Proszę najpierw odłączyć inny obiekt.
+ </notification>
<notification name="CannotWearInfoNotComplete">
Nie możesz założyć tego artkułu ponieważ nie załadował się poprawnie. Spróbuj ponownie za kilka minut.
</notification>
@@ -382,27 +323,36 @@ Czy chcesz przejść na stronę www.secondlife.com by założyć konto?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="AddClassified">
- Ogłoszenia reklamowe ukazują się w zakładce Reklama w wyszukiwarce (Szukaj) oraz na stronie internetowej www.secondlife.com przez tydzień.
+ Ogłoszenia reklamowe ukazują się w zakładce Reklama w wyszukiwarce (Szukaj) oraz na [http://secondlife.com/community/classifieds secondlife.com] przez tydzień.
Napisz treść swojej reklamy, kliknij Zamieść by dodać katalogu ogłoszeń.
-Po zamieszczeniu reklamy zostaniesz poproszony o sprecyzowanie opłaty za reklamę.
+Po zamieszczeniu reklamy zostaniesz poproszony o sprecyzowanie opłaty za Reklamę.
Im wyższa opłata tym wyżej Twoja reklama wyświetla się w katalogu i wyszukiwarce po wpisaniu słów kluczowych.
- <usetemplate ignoretext="W momencie dodawania nowej reklamy" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ <usetemplate ignoretext="Jak stworzyć nową reklamę?" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="DeleteClassified">
Usunąć reklamę &apos;[NAME]&apos;?
Pamiętaj! Nie ma rekompensaty za poniesione koszta.
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
+ <notification name="DeleteMedia">
+ Wybrano usunięcie mediów związanych z tą powierzchnią.
+Czy na pewno chcesz kontynuować?
+ <usetemplate ignoretext="Potwierdź przed usunięciem mediów z obiektu" name="okcancelignore" notext="Nie" yestext="Tak"/>
+ </notification>
<notification name="ClassifiedSave">
- Zapisać zmiany w reklamie [NAME]?
+ Zapisać zmiany w Reklamie [NAME]?
<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/>
</notification>
+ <notification name="ClassifiedInsufficientFunds">
+ Nie posiadasz wystarczających środków aby dodać Reklamę.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="DeleteAvatarPick">
Usunąć wybór [PICK] z kategorii Lubię?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="PromptGoToEventsPage">
- Odwiedzić internetową stronę imprez [SECOND_LIFE]?
+ Odwiedzić internetową stronę Imprez [SECOND_LIFE]?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="SelectProposalToView">
@@ -411,26 +361,18 @@ Pamiętaj! Nie ma rekompensaty za poniesione koszta.
<notification name="SelectHistoryItemToView">
Wybierz obiekt z historii, który chcesz zobaczyć.
</notification>
- <notification name="ResetShowNextTimeDialogs">
- Zresetować &apos;Pokaż następnym razem&apos; opcję we wszystkich dialogach?
- <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
- </notification>
- <notification name="SkipShowNextTimeDialogs">
- Wyłączyć &apos;Pokaż następnym razem&apos; opcję we wszystkich dialogach?
- <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
- </notification>
<notification name="CacheWillClear">
- Bufor danych na dysku zostanie zresetowany po relogu do [APP_NAME].
+ Bufor danych zostanie wyczyszczony po restarcie aplikacji [APP_NAME].
</notification>
<notification name="CacheWillBeMoved">
- Bufor danych na dysku zostanie przemieszczony po relogu do [APP_NAME].
-Bufor będzie również wyczyszczony.
+ Bufor danych zostanie przeniesiony po restarcie aplikacji [APP_NAME].
+Pamiętaj: Opcja ta wyczyszcza bufor danych.
</notification>
<notification name="ChangeConnectionPort">
- Ustawienia portu zostanÄ… wprowadzone po relogu do [APP_NAME].
+ Ustawienia portu zostajÄ… zaktualizowane po restarcie aplikacji [APP_NAME].
</notification>
<notification name="ChangeSkin">
- Nowa skórka zostanie wprowadzona po relogu do [APP_NAME].
+ Nowa skórka zostanie wczytana po restarcie aplikacji [APP_NAME].
</notification>
<notification name="GoToAuctionPage">
Odwiedzić stronę internetową [SECOND_LIFE] żeby zobaczyć szczgóły aukcji lub zrobić ofertę?
@@ -450,17 +392,17 @@ Usuń kilka etapów i zapisz jeszcze raz.
</notification>
<notification name="GestureSaveFailedObjectNotFound">
Nie można zapisać gestu ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony.
-Obiekt może znajdować się zbyt daleko albo został usuniety.
+Obiekt może znajdować się zbyt daleko albo został usunięty.
</notification>
<notification name="GestureSaveFailedReason">
- Nie można zapisać gestu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej.
+ Nie można zapisać gestu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później.
</notification>
<notification name="SaveNotecardFailObjectNotFound">
Nie można zapisać notki ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony.
Obiekt może znajdować się zbyt daleko albo został usuniety.
</notification>
<notification name="SaveNotecardFailReason">
- Nie można zapisać notki z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej.
+ Nie można zapisać notki z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później.
</notification>
<notification name="ScriptCannotUndo">
Nie można cofnąć wszystkich zmian w Twojej wersji skryptu.
@@ -469,7 +411,7 @@ Czy chcesz załadować ostatnią wersję zapisaną na serwerze?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="SaveScriptFailReason">
- Nie można zapisać skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej.
+ Nie można zapisać skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później.
</notification>
<notification name="SaveScriptFailObjectNotFound">
Nie można zapisać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony.
@@ -478,6 +420,11 @@ Obiekt może znajdować się zbyt daleko albo został usuniety.
<notification name="SaveBytecodeFailReason">
Nie można zapisać skompilowanego skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej.
</notification>
+ <notification name="StartRegionEmpty">
+ Oops, Twoje miejsce startu nie zostało określone.
+Wpisz proszÄ™ nazwÄ™ regionu w lokalizacjÄ™ startu w polu Lokalizacja Startu lub wybierz Moja Ostatnia Lokalizacja albo Miejsce Startu.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="CouldNotStartStopScript">
Nie można uruchomić lub zatrzymać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony.
Obiekt może znajdować się zbyt daleko albo został usuniety.
@@ -489,26 +436,26 @@ Obiekt może znajdować się zbyt daleko albo został usuniety.
Nie można zapisać pliku [[FILE]]
</notification>
<notification name="UnsupportedHardware">
- Uwaga: Twój system nie spełnia minimalnych wymagań sprzętowych [APP_NAME]. Jakość i prędkość [APP_NAME] mogą być pogorszone. Niestety, nie będziemy w stanie udzielić Ci technicznej pomocy, ponieważ konfiguracja Twojego systemu nie spełnia wymagań sprzętowych.
+ Niestety Twój komputer nie spełnia minimalnych wymogów sprzętowych dla poprawnego działania [APP_NAME]. Możesz odczuwać bardzo niską wydajność operacyjną. Niestety portal pomocy, [SUPPORT_SITE] nie posiada informacji na temat poprawnej konfiguracji technicznej Twojego systemu.
-MINSPECS
-Czy chcesz odwiedzić stronę [_URL] po dodatkowe informacje?
+Po więcej info, odwiedź stronę [_URL] .
<url name="url" option="0">
http://www.secondlife.com/corporate/sysreqs.php
</url>
- <usetemplate ignoretext="Zignoruj ostrzeżenie" name="okcancelignore" notext="Nie" yestext="Tak"/>
+ <usetemplate ignoretext="Dysk twardy mojego komputera nie jest wspomagany" name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="UnknownGPU">
- Twój system jest wyposażony w kartę graficzną której jeszcze nie znamy.
-To się często zdarza z nowym sprzętem, którego jeszcze nie testowaliśmy.
-[APP_NAME] najprawdopodobniej będzie działało poprawnie. Możliwe, że będziesz musiał wyregulować ustawienia grafiki.
-(Edycja &gt; Ustawienia &gt; Grafika).
+ Twój system jest wyposażony w kartę graficzną, która nie jest rozpoznana przez [APP_NAME].
+Zdarza się to częstow w przypadku nowego sprzętu, który nie był testowany z [APP_NAME]. Prawdopodobnie wystarczy dostosowanie ustawień grafiki aby działanie było poprawne.
+(Ja &gt; Właściwości &gt; Grafika).
<form name="form">
- <ignore name="ignore" text="Zignoruj ostrzeżenie"/>
+ <ignore name="ignore" text="Karta graficzna nie została zidentyfikowana."/>
</form>
</notification>
<notification name="DisplaySettingsNoShaders">
- [APP_NAME] zawiesił się podczas inicjalizacji sterowników graficznych. Jakość grafiki została zmniejszona - może pomoże. Pewne funkcje graficzne zostały wyłączone. Zalecamy aktualizcje strerowników grapicznych.
+ [APP_NAME] zawiesił się podczas inicjalizacji sterowników graficznych.
+Jakość grafiki została zmniejszona - może pomoże.
+Pewne funkcje graficzne zostały wyłączone. Zalecamy aktualizcje sterowników graficznych.
Możesz podnieść jakość grafiki pod Ustawienia &gt; Grafika.
</notification>
<notification name="RegionNoTerraforming">
@@ -553,6 +500,9 @@ Ta osoba tymczasowo nie będzie mógła się poruszać, nie będzie mógł używ
Wyrzucić [AVATAR_NAME] z Twojej posiadłości?
<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wyrzuć i zabroń wstępu (ban)" yestext="Wyrzuć"/>
</notification>
+ <notification name="EjectAvatarFromGroup">
+ Wyrzuć [AVATAR_NAME] z grupy [GROUP_NAME]
+ </notification>
<notification name="AcquireErrorTooManyObjects">
BÅÄ„D OTRZYMYWANIA: Zbyt wiele wybranych obiektów.
</notification>
@@ -562,12 +512,12 @@ Ta osoba tymczasowo nie będzie mógła się poruszać, nie będzie mógł używ
<notification name="PromptGoToCurrencyPage">
[EXTRA]
-Iść na stronę [_URL] po informacje dotyczące zakupu L$?
+Odwiedź stronę [_URL] po więcej informacji na temat zakupu L$?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="UnableToLinkObjects">
Nie można połączyć [COUNT] obiektów.
-Maksimalnie można połączyć [MAX] obiektów.
+Maksymalnie można połączyć [MAX] obiektów.
</notification>
<notification name="CannotLinkIncompleteSet">
Możesz łączyć tylko kompletne zbiory obiektów i musisz wybrać więcej niż jeden obiekt.
@@ -643,12 +593,19 @@ Oczekiwana - [VALIDS]
Nie można utworzyć pliku wyjściowego: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- Åadowanie zbiorów plików animacji nie jest jeszcze dostÄ™pne.
+ [APP_NAME] obecnie nie wspomaga ładowania grupowego plików animacji.
</notification>
<notification name="CannotUploadReason">
Åadowanie pliku [FILE] nie powiodÅ‚o siÄ™ z powodu: [REASON]
Spróbuj jeszcze raz póżniej.
</notification>
+ <notification name="LandmarkCreated">
+ Dodano &quot;[LANDMARK_NAME]&quot; do folderu [FOLDER_NAME].
+ </notification>
+ <notification name="LandmarkAlreadyExists">
+ Posiadasz już landmark dla tej lokalizacji.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="CannotCreateLandmarkNotOwner">
Nie możesz zapamiętać tego miejsca (LM) ponieważ właściciel posiadłości nie pozwala na to.
</notification>
@@ -672,6 +629,9 @@ Wybierz obiekty zawierajÄ…ce skrypty.
Wybierz skryptowane obiekty do których masz prawa modyfikacji.
</notification>
+ <notification name="CannotOpenScriptObjectNoMod">
+ Nie można otworzyć skryptu bez prawa do modyfikacji obiektu.
+ </notification>
<notification name="CannotSetRunningSelectObjectsNoScripts">
&apos;Uruchomienie&apos; skryptów nie powiodło się.
@@ -697,52 +657,47 @@ Nowe zapytanie: [FINALQUERY]
Teleportacja nie powiodła się.
[REASON]
</notification>
-
- <notification name="invalid_tport">
-Wystąpił problem z teleportacją. Wyloguj się i zaloguj ponownie.
-Jeśli nadal otrzymujesz ten komunikat sprawdź Pomoc Techniczną na stronie:
-www.secondlife.com/support.
- </notification>
- <notification name="invalid_region_handoff">
-Wystąpił problem ze zmianą regionu. Wyloguj się i zaloguj ponownie.
-Jeśli nadal otrzymujesz ten komunikat sprawdź Pomoc Techniczną na stronie:
-www.secondlife.com/support.
- </notification>
- <notification name="blocked_tport">
-Przepraszamy, teleportacja jest chwilowo niedostępna. Spróbuj jeszcze raz.
+ <notification name="invalid_tport">
+ Niestety, pojawił się błąd podczas próby teleportacji. Proponujemy wylogowanie się i spróbowanie teleportacji ponownie.
+Jeżeli nadal otrzymujesz tę wiadomość proponujemy odwiedzić stronę [SUPPORT_SITE].
+ </notification>
+ <notification name="invalid_region_handoff">
+ Niestety, pojawił się błąd podczas próby przedostania się na drugi region. Proponujemy wylogowanie się i spróbowanie przedostania się na drugi region ponownie.
+Jeżeli nadal otrzymujesz tę wiadomość proponujemy odwiedzić stronę [SUPPORT_SITE].
+ </notification>
+ <notification name="blocked_tport">
+ Przepraszamy, teleportacja jest chwilowo niedostępna. Spróbuj jeszcze raz.
Jeśli nadal nie możesz się teleportować wyloguj się i ponownie zaloguj.
- </notification>
- <notification name="nolandmark_tport">
-Przepraszamy, ale nie możemy znaleźć miejsca docelowego.
- </notification>
- <notification name="timeout_tport">
-Przepraszamy, ale nie udało się przeprowadzić teleportacji. Spróbuj jeszcze raz.
- </notification>
- <notification name="noaccess_tport">
-Przepraszamy, ale nie masz dostępu do miejsca docelowego.
- </notification>
- <notification name="missing_attach_tport">
-Czekamy na Twoje akcesoria. Możesz poczekać kilka minut lub zrobić relog przed następną próbą teleportacji.
- </notification>
- <notification name="too_many_uploads_tport">
-Obecnie ten region ma problemy z ładowaniem obiektów w związku z czym teleportacja bardzo sie opóznia.
+ </notification>
+ <notification name="nolandmark_tport">
+ Przepraszamy, ale nie możemy znaleźć miejsca docelowego.
+ </notification>
+ <notification name="timeout_tport">
+ Przepraszamy, ale nie udało się przeprowadzić teleportacji. Spróbuj jeszcze raz.
+ </notification>
+ <notification name="noaccess_tport">
+ Przepraszamy, ale nie masz dostępu do miejsca docelowego.
+ </notification>
+ <notification name="missing_attach_tport">
+ Czekamy na Twoje akcesoria. Możesz poczekać kilka minut lub zrobić relog przed następną próbą teleportacji.
+ </notification>
+ <notification name="too_many_uploads_tport">
+ Obecnie ten region ma problemy z ładowaniem obiektów w związku z czym teleportacja bardzo sie opóźnia.
Spróbuj jeszcze raz za kilka minut albo teleportuj się do mniej zatłoczonego miejsca.
- </notification>
- <notification name="expired_tport">
-Przepraszamy, ale nie udało się przeprowadzić teleportacji wystarczająco szybko. Spróbuj jeszcze raz za kilka minut.
- </notification>
- <notification name="expired_region_handoff">
-Przepraszamy, ale nie udało się przeprowadzić zmiany regionu wystarczająco szybko. Spróbuj jeszcze raz za kilka minut.
- </notification>
- <notification name="no_host">
-Nie możemy znaleść miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć.
+ </notification>
+ <notification name="expired_tport">
+ Przepraszamy, ale nie udało się przeprowadzić teleportacji wystarczająco szybko. Spróbuj jeszcze raz za kilka minut.
+ </notification>
+ <notification name="expired_region_handoff">
+ Przepraszamy, ale nie udało się przeprowadzić zmiany regionu wystarczająco szybko. Spróbuj jeszcze raz za kilka minut.
+ </notification>
+ <notification name="no_host">
+ Nie możemy znaleść miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć.
Spróbuj jeszcze raz za kilka minut.
- </notification>
- <notification name="no_inventory_host">
-Szafa chwilowo nie działa.
- </notification>
-
-
+ </notification>
+ <notification name="no_inventory_host">
+ Szafa chwilowo nie działa.
+ </notification>
<notification name="CannotSetLandOwnerNothingSelected">
Nie można wybrać właściciela posiadłości.
Posiadłość nie została wybrana.
@@ -751,7 +706,8 @@ Posiadłość nie została wybrana.
Nie można wybrać właściciela posiadłości ponieważ wybrany obszar przekracza granicę regionów. Wybierz mniejszy obszar i spróbuj jeszcze raz.
</notification>
<notification name="ForceOwnerAuctionWarning">
- Ta posiadłość jest wystawiona na aukcję. Wymuszenie własności anulue aukcję i potencjalnie może zdenerwować zainteresowanych Rezydentów, jeżeli licytacja już się rozpoczęła. Wymusić własność?
+ Ta posiadłość jest wystawiona na aukcję. Wymuszenie własności anuluje aukcję i potencjalnie może zdenerwować zainteresowanych Rezydentów, jeżeli licytacja już się rozpoczęła.
+Wymusić własność?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="CannotContentifyNothingSelected">
@@ -779,7 +735,7 @@ Posiadłość nie została wybrana.
Region nie znaleziony.
</notification>
<notification name="CannotCloseFloaterBuyLand">
- Dialog Kup Posiadłość nie może zostać zamknięty dopóki [APP_NAME] nie oszacuje ceny tej tranzakcji.
+ Okno zakupu landu nie może zostać zamknięte dopóki aplikacja [APP_NAME] nie określi ceny dla tej transkacji.
</notification>
<notification name="CannotDeedLandNothingSelected">
Nie można przekazać posiadłości:
@@ -790,8 +746,8 @@ Posiadłość nie została wybrana.
Grupa nie została wybrana.
</notification>
<notification name="CannotDeedLandNoRegion">
- Nie można przekazać posiadłości:
-Region nie znaleziony.
+ Brak możliwości przepisania posiadłości grupie:
+Region, gdzie posiadłość się znajduje nie został odnaleziony.
</notification>
<notification name="CannotDeedLandMultipleSelected">
Nie można przekazać posiadłości:
@@ -799,14 +755,6 @@ Wiele posiadłości jest wybranych.
Spróbuj wybrać pojedynczą posiadłość.
</notification>
- <notification name="ParcelCanPlayMedia">
- To miejsce może odtwarzać strumienie mediów.
-Odtwarzanie strumieni wymaga szybkiego połączenia do Internetu.
-
-Odtwarzać dostępne strumienie mediów?
-(Selekcja może zostać zmieniona póżniej pod Ustawienia &gt; Audio i Video.)
- <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Odtwarzaj"/>
- </notification>
<notification name="CannotDeedLandWaitingForServer">
Nie można przekazać posiadłości:
Serwer aktualizuje dane własności.
@@ -836,8 +784,8 @@ Nie masz praw do porzucenia tej posiadłości.
Twoje posiadłości są podkreślone na zielono.
</notification>
<notification name="CannotReleaseLandRegionNotFound">
- Nie można porzucić posiadłości:
-Region nie znaleziony.
+ Brak możliwości porzucenia posiadłości:
+Region, gdzie posiadłość się znajduje nie został odnaleziony.
</notification>
<notification name="CannotReleaseLandNoTransfer">
Nie możesz porzucić posiadłości:
@@ -875,12 +823,12 @@ Podzielić posiadłość?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="CannotDivideLandNoRegion">
- Nie można podzielić posiadłości:
-Region nie znaleziony.
+ Brak możliwości podziału posiadłości:
+Region, gdzie posiadłość się znajduje nie został odnaleziony.
</notification>
<notification name="CannotJoinLandNoRegion">
- Nie można połączyć posiadłości:
-Region nie znaleziony.
+ Brak możliwości złączenia posiadłości:
+Region, gdzie posiadłość się znajduje nie został odnaleziony.
</notification>
<notification name="CannotJoinLandNothingSelected">
Nie można połączyć posiadłości:
@@ -904,17 +852,6 @@ Wybierz obaszar usytuowany na obu posiadłościach.
Połączyć posiadłości?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
- <notification name="ShowOwnersHelp">
- Pokaż właścicieli:
-Pokoloruj posiadłości zgodnie z przynależnością do właściciela
-
-Zielony = Twoja Posiadłość
-Morski = Posiadłość Twojej Grupy
-Czerwony = Posiadłości Innych
-Żółty = Na Sprzedaż
-Fioletowy = Na AukcjÄ™
-Szary = Publiczna
- </notification>
<notification name="ConfirmNotecardSave">
Ta notka musi być zapisana żeby mogła być skopiowana lub zobaczona. Zapisać notkę?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
@@ -927,10 +864,10 @@ Szary = Publiczna
Zmiana rozdzielczości do [RESX] x [RESY] nie powidła się
</notification>
<notification name="ErrorUndefinedGrasses">
- Błąd: Niezdefiniowane trawy: [SPECIES]
+ Błąd: niezdefiniowane trawy: [SPECIES]
</notification>
<notification name="ErrorUndefinedTrees">
- Bład: Niezdefiniowane drzewa: [SPECIES]
+ Bład: niezdefiniowane drzewa: [SPECIES]
</notification>
<notification name="CannotSaveWearableOutOfSpace">
Nie można zapisać &apos;[NAME]&apos; do pliku stroju. Musisz zwolnić trochę miejsca na Twoim komputerze i zapisać strój jeszcze raz.
@@ -940,11 +877,8 @@ Szary = Publiczna
Zazwyczaj jest to tymczasowy problem. Możesz kontynuować modyfikacje i zapisać strój ponownie za kilka minut.
</notification>
<notification name="YouHaveBeenLoggedOut">
- Twoja sesja [SECOND_LIFE] została zakończona:
-[MESSAGE]
-
-Kliknij Kontynuuj żeby zobaczyć IMy i czat.
-Żadne inne operacje nie będą dozwolone. Kliknij Wyłącz w celu natychmiastowego opuszczenia [APP_NAME].
+ Nastąpiło wylogowanie z [SECOND_LIFE]
+ [MESSAGE]
<usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Kontynuuj"/>
</notification>
<notification name="OnlyOfficerCanBuyLand">
@@ -996,7 +930,7 @@ ze wszystkich posiadłości w tym symulatorze?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="BlankClassifiedName">
- Musisz nadać tytuł Twojej reklamie.
+ Musisz nadać tytuł Twojej Reklamie.
</notification>
<notification name="MinClassifiedPrice">
Minimalna cena za publikacjÄ™ wynosi [MIN_PRICE]L$.
@@ -1097,29 +1031,39 @@ Przekazać tą posiadłość o powierzchni [AREA] m² grupie &apos;[GROUP_NAME]&
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="AvatarMoved">
- Twoje miejsce [TYPE] jest obecnie niedostępne. [HELP]
-Przeniesiono CiÄ™ do pobliskiego regionu.
+ <notification name="AvatarMovedDesired">
+ Miejsce, do którego chcesz się teleportować jest chwilowo nieobecne.
+Zostałeś przeniesiony do regionu sąsiedniego.
+ </notification>
+ <notification name="AvatarMovedLast">
+ Twoje miejsce startu jest obecnie niedostępne.
+Zostałeś przeniesiony do sąsiedniego regionu.
+ </notification>
+ <notification name="AvatarMovedHome">
+ Twoje miejsce startu jest obecnie niedostępne.
+Zostałeś przeniesiony do pobliskiego regionu.
+Możesz ustawić nowe miejsce startu.
</notification>
<notification name="ClothingLoading">
Twoje ubranie wciąż się ładuje.
Możesz normalnie używać [SECOND_LIFE], inni użytkownicy będą Cię widzieli poprawnie.
<form name="form">
- <ignore name="ignore" text="Åadowanie ubrania zajmuje dużo czasu"/>
+ <ignore name="ignore" text="Åadowanie ubraÅ„ nadal trwa"/>
</form>
</notification>
<notification name="FirstRun">
Instalacja [APP_NAME] zakończona.
Jeżeli używasz [SECOND_LIFE] po raz pierwszy to musisz stworzyć konto żeby móc się zalogować.
-Przejść na stronę www.secondlife.com żeby stworzyć nowe konto?
+Czy chcesz przejść na stronę [http://join.secondlife.com secondlife.com] żeby stworzyć nowe konto?
<usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Nowe Konto..."/>
</notification>
<notification name="LoginPacketNeverReceived">
- Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie serwerów [SECOND_LIFE].
+ Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie [SECOND_LIFE_GRID].
-Możesz sprawdzić swoje połączenie z Internetem i spróbować ponownie za kilka minut albo kliknij Pomoc żeby połączyć się ze stroną pomocy technicznej albo wybierz Teleportuj żeby spróbować teleportacji do Twojego miejsca startu.
+Możesz sprawdzić swoje połączenie z Internetem i spróbować ponownie za kilka minut lub połączyć się ze stroną pomocy technicznej tutaj [SUPPORT_SITE] lub wybrać Teleportuj by teleportować się do swojego miejsca startu.
<form name="form">
<button name="OK" text="OK"/>
<button name="Help" text="Pomoc"/>
@@ -1139,10 +1083,10 @@ Ten wybór będzie można później zmienić.
[NAME] [PRICE]L$ Masz za mało L$.
</notification>
<notification name="GrantedModifyRights">
- Masz teraz prawa modyfikacji obiektów należących do [FIRST_NAME] [LAST_NAME].
+ Masz teraz prawa modyfikacji obiektów należących do [NAME].
</notification>
<notification name="RevokedModifyRights">
- Prawa modyfikacji obiektów należących do [FIRST_NAME] [LAST_NAME] zostały Ci odebrane.
+ Prawa modyfikacji obiektów należących do [NAME] zostały Ci odebrane.
</notification>
<notification name="FlushMapVisibilityCaches">
To spowoduje wyczyszczenie buforów map regionu.
@@ -1188,10 +1132,10 @@ Zamień teksturę [TEXTURE_NUM] na 24-o bitową teksturę o wymiarze 512x512 lub
Maksymalna liczba gości wynosi [MAX_AGENTS].
</notification>
<notification name="MaxBannedAgentsOnRegion">
- Maksymalna liczba nieporządanych Rezydentów (banów) wynosi [MAX_BANNED].
+ Maksymalna liczba niepożądanych Rezydentów (banów) wynosi [MAX_BANNED].
</notification>
<notification name="MaxAgentOnRegionBatch">
- Próba dodania [NUM_ADDED] osób nie powidła się:
+ Próba dodania [NUM_ADDED] osób nie powiodła się:
[MAX_AGENTS] [LIST_TYPE] limit przekroczony o [NUM_EXCESS].
</notification>
<notification name="MaxAllowedGroupsOnRegion">
@@ -1236,12 +1180,30 @@ Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i st
Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i stabilności.
<usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Załaduj"/>
</notification>
+ <notification name="DownloadLinuxMandatory">
+ Nowa wersja [APP_NAME] jest dostępna.
+[MESSAGE]
+Musisz pobrać aktualizację aby korzystać z [APP_NAME].
+ <usetemplate name="okcancelbuttons" notext="Wyjdź" yestext="Pobieranie"/>
+ </notification>
+ <notification name="DownloadLinux">
+ Aktualizacja [APP_NAME] jest dostępna.
+[MESSAGE]
+Ta aktualizacja nie jest wymagana ale zaleca się jej instalację w celu poprawienia szybkości i stabilności.
+ <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobieranie"/>
+ </notification>
+ <notification name="DownloadLinuxReleaseForDownload">
+ Uaktualniona wersja [APP_NAME]została opublikowana.
+[MESSAGE]
+Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i stabilności.
+ <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobieranie"/>
+ </notification>
<notification name="DownloadMacMandatory">
Nowa wersja [APP_NAME] została opublikowana.
[MESSAGE]
Musisz zainstalować nową wersję żeby używać [APP_NAME].
-Załadować do foldera Aplikacji?
+Pobrać i zapisać w folderze Aplikacji?
<usetemplate name="okcancelbuttons" notext="Wyłącz program" yestext="Załaduj"/>
</notification>
<notification name="DownloadMac">
@@ -1249,7 +1211,7 @@ Załadować do foldera Aplikacji?
[MESSAGE]
Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i stabilności.
-Załadować do foldera Aplikacji?
+Pobrać i zapisać w folderze Aplikacji?
<usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Załaduj"/>
</notification>
<notification name="DownloadMacReleaseForDownload">
@@ -1257,55 +1219,51 @@ Załadować do foldera Aplikacji?
[MESSAGE]
Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i stabilności.
-Załadować do foldera Aplikacji?
+Pobrać i zapisać w folderze Aplikacji?
<usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Załaduj"/>
</notification>
<notification name="DeedObjectToGroup">
- Przekazanie tego obiektu spowoduje, że grupa:
+ Przekazanie tego obiektu spowoduje, że Grupa:
* Otrzyma L$ zapłacone temu obiektowi
- <usetemplate ignoretext="Przekazując obiekty grupom" name="okcancelignore" notext="Anuluj" yestext="Przekaż"/>
+ <usetemplate ignoretext="Proszę potwierdzić decyzję przed przepisaniem obiektu do grupy" name="okcancelignore" notext="Anuluj" yestext="Przekaż"/>
</notification>
<notification name="WebLaunchExternalTarget">
- Otworzyć systemową przegłądarke żeby zobaczyć tą zawartość?
- <usetemplate ignoretext="Otwierając systemową przeglądarkę żeby zobaczyć stronę" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ Czy chcesz otworzyć swoją przeglądarkę internetową by zobaczyć zawartość?
+ <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć stronę internetową" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="WebLaunchJoinNow">
- Otworzyć stronę www.secondlife.com żeby zarządzać Twoim kontem?
- <usetemplate ignoretext="Otwierając systemową przeglądarkę żeby zarządzać Twoim kontem" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ By dokonać zmian i aktualizacji swojego konta, odwiedź [http://secondlife.com/account/ Dashboard].
+ <usetemplate ignoretext="Uruchom przeglądarkę internetową by dokonać zmian w konfiguracji mojego konta" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="WebLaunchSecurityIssues">
Odwiedź [SECOND_LIFE] Wiki i zobacz jak zgłaszać problemy z bezpieczeństwem danych.
- <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć Wiki kwestii bezpieczeństwa danych" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ <usetemplate ignoretext="Uruchom przeglądarkę internetową by dowiedzieć się więcej na temat zgłaszania problemów bezpieczeństwa" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="WebLaunchQAWiki">
Odwiedź [SECOND_LIFE] Wiki pytań i odpowiedzi.
- <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć Wiki pytań i odpowiedzi" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć QA Wiki" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="WebLaunchPublicIssue">
Odwiedź [SECOND_LIFE] katalog publicznych problemów, gdzie możesz zgłaszać błędy i inne problemy.
- <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć katalog publicznych problemów" name="okcancelignore" notext="Anuluj" yestext="OK"/>
- </notification>
- <notification name="WebLaunchPublicIssueHelp">
- Odwiedź [SECOND_LIFE] Wiki i sprawdź jak używać katalogu publicznych problemów.
- <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć Wiki katalogu publicznych problemów" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ <usetemplate ignoretext="Uruchom przeglądarkę internetową by wysłać Błędy Klienta" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="WebLaunchSupportWiki">
Otwórz oficjalny blog Lindenów żeby zobaczyć nowe wiadomości i informacje.
- <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć blog" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć blog" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="WebLaunchLSLGuide">
- Otworzyć przewodnik skryptowania po pomoc ze skryptami?
- <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć przewodnik skryptowania" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ Czy chcesz otworzyć samouczek Języka Skryptowania?
+ <usetemplate ignoretext="Uruchom przeglądarkę internetową by samouczek Języka Skryptowania" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="WebLaunchLSLWiki">
- Otworzyć portal LSL po pomoc ze skryptami?
- <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć portal LSL" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ Czy napewno chcesz odwiedzić portal LSL Portal?
+ <usetemplate ignoretext="Uruchom przeglÄ…darkÄ™ internetowÄ… by LSL Portal" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="ReturnToOwner">
Czy na pewno chcesz zwrócić wybrane obiekty do ich właścicieli? Wszystkie udostępnione obiekty z prawem transferu zostaną zwrócone poprzednim właścicielom.
*UWAGA* Wszystkie udostępnione obiekty bez prawa transferu zostaną usunięte!
- <usetemplate ignoretext="Zwracając obiekty ich właścicielom" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ <usetemplate ignoretext="Potwierdź zanim zwrócisz obiekty do ich właścicieli" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="GroupLeaveConfirmMember">
Jesteś członkiem grupy [GROUP].
@@ -1313,18 +1271,18 @@ Chcesz opuścić grupę?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="ConfirmKick">
- NA PEWNO chcesz wyrzucić wszystkich użytkowników z sieci?
- <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć Wszystkich Użytkowników"/>
+ Napewno chcesz wyrzucić wszystkich Rezydentów z gridu?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć wszystkich Rezydentów"/>
</notification>
<notification name="MuteLinden">
- Przepraszamy, ale nie możesz wyciszyć Lindena.
+ Przepraszamy, ale nie możesz zablokować Lindena.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CannotStartAuctionAlreadyForSale">
Aukcja nie może zostać rozpoczęta w posiadłości, która została już wcześniej wystawiona na aukcję. Deaktywuj opcję sprzedaży posiadłości jeżeli chcesz rozpocząć aukcję.
</notification>
- <notification label="Błąd Wyciszenia Obiektu Przez Nazwę" name="MuteByNameFailed">
- Ta osoba została już wyciszona przez Ciebie.
+ <notification label="Zablokuj obiekty według wpisanej nazwy" name="MuteByNameFailed">
+ Rezydent/obiekt jest już zablokowany.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RemoveItemWarn">
@@ -1341,19 +1299,21 @@ Chcesz opuścić grupę?
</notification>
<notification name="BusyModeSet">
Tryb Pracy jest włączony.
-Czat i IMy bedą ukryte. Wysłane IMy będą otrzymywały Twoją odpowiedź Trybu Pracy. Propozycje teleportacji będą odrzucone.
-Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywane w folderze "Kosz" w Twojej szafie.
- <usetemplate ignoretext="Włączając Tryb Pracy" name="okignore" yestext="OK"/>
+Czat i IM będą ukryte. Wysłane IM będą otrzymywały Twoją odpowiedź Trybu Pracy. Propozycje teleportacji będą odrzucone.
+Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywane w folderze &quot;Kosz&quot; w Twojej szafie.
+ <usetemplate ignoretext="Status zmieniony na Tryb Pracy" name="okignore" yestext="OK"/>
</notification>
<notification name="JoinedTooManyGroupsMember">
- Należysz już do maksymalnej ilości grup.
-Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej grupie, albo musisz odmówić. W celu opuszczenia grupy wybierz opcję &apos;Grupy...&apos; z menu &apos;Edycja&apos;.
+ Należysz już do maksymalnej ilości grup. Opuść proszę przynajmniej jedną grupę żeby przyjąć członkostwo w tej grupie, albo odmów.
[NAME] oferuje Ci członkostwo w grupie.
-[INVITE]
<usetemplate name="okcancelbuttons" notext="Odmów" yestext="Przyjmij"/>
</notification>
+ <notification name="JoinedTooManyGroups">
+ Należysz już do maksymalnej ilości grup. Opuść proszę przynajmiej jedną grupę żeby przyjąć członkostwo w tej grupie, albo odmów.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="KickUser">
- Z jakim komunikatem wyrzucić tego użytkownia?
+ Wyrzuć tego Rezydenta, wysyłając następujący komunikat.
<form name="form">
<input name="message">
Administrator wylogował Cię.
@@ -1373,7 +1333,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g
</form>
</notification>
<notification name="FreezeUser">
- Z jakim komunikatem unieruchomić tego użytkownia?
+ Unieruchom tego Rezydenta, wysyłając następujący komunikat.
<form name="form">
<input name="message">
Unieruchomiono Cię. Nie możesz się ruszać ani rozmawiać. Administrator skontaktuje się z Tobą poprzez IM.
@@ -1383,7 +1343,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g
</form>
</notification>
<notification name="UnFreezeUser">
- Z jakim komunikatem odblokować tego użytkownia?
+ Cofnij unieruchomienie tego Rezydenta, wysyłając następujący komunikat.
<form name="form">
<input name="message">
Odblokowano CiÄ™.
@@ -1403,7 +1363,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g
</form>
</notification>
<notification name="OfferTeleportFromGod">
- Wymusić przeniesienie użytkownika do miejsca Twojego pobytu?
+ Wysłać propozycję teleportacji do Twojego miejsca?
<form name="form">
<input name="message">
Zapraszam do siebie. Region: [REGION]
@@ -1413,8 +1373,16 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g
</form>
</notification>
<notification name="TeleportFromLandmark">
- Na pewno chcesz się teleportować?
- <usetemplate ignoretext="TeleportujÄ…c z miejsca (LM) z Twojej szafy" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
+ Na pewno chcesz się teleportować do &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
+ <usetemplate ignoretext="Potwierdź próbę teleportacji do zapisanego miejsca" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
+ </notification>
+ <notification name="TeleportToPick">
+ Teleportuj do [PICK]?
+ <usetemplate ignoretext="Potwierdź, że chcesz teleportować się do miejsca w Ulubionych" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
+ </notification>
+ <notification name="TeleportToClassified">
+ Teleportuj do [CLASSIFIED]?
+ <usetemplate ignoretext="Potwierdź, że chcesz teleportować się do lokalizacji z Reklamy" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
</notification>
<notification label="Wiadomość do Wszystkich w Twoim Majątku" name="MessageEstate">
Wpisz krótką wiadomość która zostanie wysłana do wszystkich osób w Twoim majątku.
@@ -1425,9 +1393,9 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g
</form>
</notification>
<notification label="Zmiana Majątku Lindenów" name="ChangeLindenEstate">
- Dokonujesz zmiany w Regionie Głównym należącym do Lindenów (Regiony Główne, Teen Grid, Orientacja).
-
-Żądana operacja jest wyjątkowo niebezpieczna dla wszystkich Rezydentów przebywających w regionie. Dodatkowo, zmiany dokonane w Regionie Głównym mogą spowodować problemy przestrzeni serwerowej innych regionów.
+ Czy napewno chcesz zmienić ustawienia majątku Linden (mainland, teen grid, orientacja, itp).
+
+Jest to wyjątkowo niebezpieczna decyzja, odczuwalna przez wszystkich Rezydentów. Dla mainland, spowoduje to zmianę tysięcy regionów oraz ich przestrzeń serwerową.
Kontynuować?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
@@ -1485,9 +1453,7 @@ Kontynuować?
Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie. Może być to wynikiem braku informacji na temat weryfikacji Twojego wieku.
Upewnij się, że masz zainstalowaną najnowszą wersję klienta i skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostępu do regionów z podanym rodzajem treści jaką zawiera.
- <usetemplate
- name="okbutton"
- yestext="OK"/>
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="RegionEntryAccessBlocked_KB">
Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie.
@@ -1496,37 +1462,26 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp
<url name="url">
https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=6010
</url>
- <usetemplate
- name="okcancelignore"
- yestext="[SECOND_LIFE]:Pomoc"
- notext="Zamknij"
- ignoretext="Dostęp do posiadłości jest zablokowany ze względu na rodzaj treści jaką zawiera"/>
+ <usetemplate ignoretext="Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie. Może być to wynikiem braku informacji na temat weryfikacji Twojego wieku." name="okcancelignore" notext="Zamknij" yestext="[SECOND_LIFE]:Pomoc"/>
</notification>
<notification name="RegionEntryAccessBlocked_Notify">
Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- W związku ze statusem ustawień Twojego wieku, nie jesteś uprawniony do przebywania w tym regionie.
-
-Możeszy wybrać &apos;Zmień Ustawienia&apos; by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do regionu. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Edycja &gt; Ustawienia... &gt; Główne.
- <form name="form">
- <button
- name="OK"
- text="Zmień Ustawienia"/>
- <button
- default="true"
- name="Cancel"
- text="Zamknij"/>
- <ignore name="ignore" text="Dostęp do posiadłości jest zablokowany ze względu na ustawienia rodzaju treści jaką zawiera"/>
- </form>
+ Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie.
+
+Możesz wybrać &apos;Zmień Ustawienia&apos; by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do regionu. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Ja &gt; Ustawienia &gt; Główne.
+ <form name="form">
+ <button name="OK" text="Zmień Ustawienia"/>
+ <button default="true" name="Cancel" text="Zamknij"/>
+ <ignore name="ignore" text="Moje ustawienia wieku nie dopuszczajÄ… do regionu"/>
+ </form>
</notification>
<notification name="LandClaimAccessBlocked">
W związku ze statusem ustawień Twojego wieku, nie możesz odzyskać tej posiadłości. Możesz potrzebować weryfikacji wieku bądź instalacji najnowszej wersji klienta.
Upewnij się, że masz zainstalowaną najnowszą wersję klienta i skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostępu do regionów z podanym rodzajem treści jaką zawiera.
- <usetemplate
- name="okbutton"
- yestext="OK"/>
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LandClaimAccessBlocked_KB">
Ze względu na Twój wiek, nie możesz odzyskać tej posiadłości.
@@ -1535,11 +1490,7 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp
<url name="url">
https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=6010
</url>
- <usetemplate
- name="okcancelignore"
- yestext="[SECOND_LIFE]:Pomoc"
- notext="Zamknij"
- ignoretext="Odzyskanie posiadłości jest zablokowane ze względu na rodzaj treści jaką zwiera"/>
+ <usetemplate ignoretext="W związku ze statusem ustawień Twojego wieku, nie możesz odzyskać tej posiadłości." name="okcancelignore" notext="Zamknij" yestext="[SECOND_LIFE]:Pomoc"/>
</notification>
<notification name="LandClaimAccessBlocked_Notify">
Ze względu na Twój wiek, nie możesz odzyskać tej posiadłości.
@@ -1547,20 +1498,14 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp
<notification name="LandClaimAccessBlocked_Change">
W związku ze statusem ustawień Twojego wieku, nie możesz odzyskać tej posiadłości.
-Możeszy wybrać &apos;Zmień Ustawienia&apos; by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do posiadłości. Wówczas będziesz w stanie znaleźć, oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Edycja &gt; Ustawienia... &gt; Główne.
- <usetemplate
- name="okcancelignore"
- yestext="Zmień Ustawienia"
- notext="Zamknij"
- ignoretext="Odzyskanie posiadłości jest zablokowane ze względu na ustawienia rodzaju treści jaką zawiera"/>
+Możesz wybrać &apos;Zmień Ustawienia&apos; by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do regionu. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Ja &gt; Ustawienia &gt; Główne.
+ <usetemplate ignoretext="Ze względu na Twój wiek, nie możesz odzyskać tej posiadłości." name="okcancelignore" notext="Zamknij" yestext="Zmień Ustawienia"/>
</notification>
<notification name="LandBuyAccessBlocked">
Ze względu na Twój wiek, nie możesz kupić tej posiadłości. Może być to wynikiem braku informacji na temat weryfikacji Twojego wieku.
Upewnij się, że masz zainstalowaną najnowszą wersję klienta i skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostępu do regionów z podanym rodzajem treści jaką zawiera.
- <usetemplate
- name="okbutton"
- yestext="OK"/>
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="LandBuyAccessBlocked_KB">
Ze względu na Twój wiek, nie możesz kupić tej posiadłości.
@@ -1569,11 +1514,7 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp
<url name="url">
https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=6010
</url>
- <usetemplate
- name="okcancelignore"
- yestext="[SECOND_LIFE]:Pomoc"
- notext="Zamknij"
- ignoretext="Zakup posiadłości jest zablokowany ze względu na rodzaj treści jaką zawiera"/>
+ <usetemplate ignoretext="Ze względu na Twój wiek, nie możesz kupić tej posiadłości." name="okcancelignore" notext="Zamknij" yestext="[SECOND_LIFE]:Pomoc"/>
</notification>
<notification name="LandBuyAccessBlocked_Notify">
Ze względu na Twój wiek, nie możesz kupić tej posiadłości.
@@ -1581,12 +1522,11 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp
<notification name="LandBuyAccessBlocked_Change">
W związku ze statusem ustawień Twojego wieku, nie możesz kupić tej posiadłości.
-Możesz wybrać &apos;Zmień Ustawienia&apos; by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do posiadłości. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Edycja &gt; Ustawienia... &gt; Główne.
- <usetemplate
- name="okcancelignore"
- yestext="Zmień Ustawienia"
- notext="Zamknij"
- ignoretext="Zakup posiadłości jest zablokowany ze względu na ustawienia rodzaju treści jaką zawiera"/>
+Możesz wybrać &apos;Zmień Ustawienia&apos; by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do regionu. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Ja &gt; Ustawienia &gt; Główne.
+ <usetemplate ignoretext="W związku ze statusem ustawień Twojego wieku, nie możesz kupić tej posiadłości." name="okcancelignore" notext="Zamknij" yestext="Zmień Ustawienia"/>
+ </notification>
+ <notification name="TooManyPrimsSelected">
+ Zbyt wiele wybranych obiektów. Wybierz [MAX_PRIM_COUNT] lub mniej i spróbuj ponownie
</notification>
<notification name="ProblemImportingEstateCovenant">
Problem z importem umowy majÄ…tku.
@@ -1600,9 +1540,7 @@ Możesz wybrać &apos;Zmień Ustawienia&apos; by dokonać zmian w ustawieniach T
</notification>
<notification name="UnableToLoadNotecardAsset">
Brak możliwości załadowania noty w tej chwili.
- <usetemplate
- name="okbutton"
- yestext="OK"/>
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="NotAllowedToViewNotecard">
NiewystarczajÄ…ce prawa do zobaczenia notki przypisanej do wybranego ID.
@@ -1620,19 +1558,11 @@ Zamieścić tą reklamę za [AMOUNT]L$?
</notification>
<notification name="SetClassifiedMature">
Czy ta reklama zawiera treść &apos;Mature&apos;?
- <usetemplate
- canceltext="Anuluj"
- name="yesnocancelbuttons"
- notext="Nie"
- yestext="Tak"/>
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie" yestext="Tak"/>
</notification>
<notification name="SetGroupMature">
Czy ta grupa zawiera treść &apos;Mature&apos;?
- <usetemplate
- canceltext="Anuluj"
- name="yesnocancelbuttons"
- notext="Nie"
- yestext="Tak"/>
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie" yestext="Tak"/>
</notification>
<notification label="Potwierdź Restart" name="ConfirmRestart">
Na pewno chcesz zrobić restart tego regionu za 2 minuty?
@@ -1646,201 +1576,14 @@ Zamieścić tą reklamę za [AMOUNT]L$?
<button name="Cancel" text="Anuluj"/>
</form>
</notification>
- <notification label="Blokowanie Kształtowania Terenu" name="HelpRegionBlockTerraform">
- Jeżeli ta opcja jest wybrana właściciele posiadłości nie będą mogli kształtować terenu niezależnie od ustawienia opcji &apos;Edycja Terenu&apos; dla posiadłości.
-
-Domyślnie: nie wybrana
- </notification>
- <notification label="Blokowanie Latania" name="HelpRegionBlockFly">
- Jeżeli ta opcja jest wybrana ludzie nie będą mogli latać w tym regionie niezależnie od ustawienia opcji &apos;Latanie&apos; dla posiadłości.
-
-Domyślnie: nie wybrana
- </notification>
- <notification label="Zezwalanie na Uszkodzenia" name="HelpRegionAllowDamage">
- Jeżeli ta opcja jest wybrana system zdrowia będzie aktywny we wszystkich posiadłościach niezależnie od ustawień dla indywidualnych posiadłości. Jeżeli ta opcja nie jest wybrana właściciele indywidualych posiadłości będą mogli kontrolować system zdrowia w swoich posiadłościach.
-
-Domyślnie: nie wybrana
- </notification>
- <notification label="Limit Liczby Awatarów" name="HelpRegionAgentLimit">
- Wybierz maksymalną liczbę awatarów dozwoloną w tym regionie.
-Wydajność systemu może się zmieniać w zależności od liczby obecnych awatarów.
-
-Domyślnie: 40
- </notification>
- <notification label="Ekstra Obiekty" name="HelpRegionObjectBonus">
- Ekstra Obiekty jest to mnożnik dla dozwolonych elementów (obiektów prostych). Dozwolony zakres to 1 do 10. Ustawienie &apos;1&apos; pozwala na 117 elementów na każdej posiadłości o powierzchni 512m. Ustawienie &apos;2&apos; pozwala na 234 elementy, czyli dwa razy tyle, itd.
-Maksymalna liczba elementów w regionie to 15000 niezależnie od ustawienia Ekstra Obiektów. Pamiętaj - zmniejszenie Ekstra Obiektów po fakcie może spowodować odsyłanie lub usuwanie istniejących obiektów.
-
-Domyślnie: 1,0
- </notification>
- <notification label="Treść" name="HelpRegionMaturity">
- Aktywuj opcję klasyfikacji regionu ze względu na treść jaką zawiera, która zostaje wyświetlana w górnym pasku widoku w nazwie regionu oraz w podpowiedziach Mapy Świata. Dodatkowo, opcja ta wpływa na dostęp do wyników w czasie wyszukiwania danego regionu. By móc odwiedzić dany region lub mieć dostęp do jego wyników w czasie wyszukiwania, Rezydent musi mieć takie same ustawienia dla treści jak dany region.
-
-By dokonana zmiana została zsynchronizowana z Mapą Świata, poczekaj kilka minut.
- </notification>
- <notification label="Blokowanie Popychania" name="HelpRegionRestrictPushObject">
- Ta opcja powoduje, że popychanie będzie ograniczone w całym regionie. Jeżeli ta opcja jest wybrana Rezydenci mogą być popchnięci tylko przez samych siebie lub przez właściciela posiadłości.
-(Popychanie odnosi sie do funkcji llPushObject() w LSL.)
-
-Domyślnie: nie wybrana
- </notification>
- <notification label="Dzielenie / ÅÄ…czenie PosiadÅ‚oÅ›ci" name="HelpParcelChanges">
- Ta opcja kontroluje czy posiadłości nie należące do właściciela tego majątku mogą być łączone / dzielone.
-Jeżeli opcja nie jest wybrana:
-* Tylko właściciele majątku i zarządcy mogą łączyć / dzielić posiadłości.
-* Tylko posiadłości należące do właściciela albo do grupy mogą być
- łączone / dzielone przez członków z wystarczającymi prawami.
-Jeżeli ta opcja jest wybrana:
-* Wszyscy właściciele mogą łączyć / dzielić swoje posiadłości.
-* Posiadłości należące do grupy mogą być łączone / dzielone
- przez członków z wystarczającymi prawami.
-
-Domyślnie: wybrana
- </notification>
- <notification label="Nie Pokazuj w Wyszukiwaniu" name="HelpRegionSearch">
- Wybranie tej opcji uniemożliwi właścicielom posiadłość wyświetlanie ich posiadłości w wyszukiwaniu
-Domyślinie: nie wybrana
- </notification>
<notification label="Zmienione Restrykcje Wieku dla Regionu" name="RegionMaturityChange">
Ustawienie restrykcji wieku dla regionu zostało zmienione.
Zazwyczaj musi upłynąć nieco czasu zanim ta zmiana zostanie odzwierciedlona na mapie.
- </notification>
- <notification label="Odsprzedaż Posiadłości" name="HelpRegionLandResell">
- Właściciele majątku i zarządcy mogą sprzedawać posiadłości należące do właściciela majątku.
-Jeżeli ta opcja nie jest wybrana kupujący nie będą mogli odsprzedać posiadłości w tym regionie.
-Jeżeli ta opcja jest wybrana kupujący będą mogli odsprzedać posiadłości w tym regionie.
-
-Domyślinie: nie pozwalaj
- </notification>
- <notification label="Wyłącz Skrypty" name="HelpRegionDisableScripts">
- Słaba wydajność / prędkość symulatora może być spowodowana przez skrypt. Otwórz panel Statystyki (Ctrl+Shift+1). Sprawdź ilość klatek na sekundę (FPS) w Fizyce Symulatora. Jeżeli jest mniej niż 45 wybierz panel Czas znajdujący się na dole panelu Statystyki. Jeżeli Czas Skryptów wynosi 25 ms lub więcej kliknij na Główne Skrypty. Zobaczysz listę nazw i lokacji skryptów które mogą być odpowiedzialne za pogorszenie wydajności.
-
-Wybranie opcji Wyłącz Skrypty i naciśnięcie Zastosuj tymczasowo wyłączy wszystkie skrypty w tym regionie. Wybranie tej opcji może być niezbędne w celu umożliwienia podróży do lokacji wymienionego Głównego Skryptu.
-Po przebyciu na miejsce zobacz skrypt i sprawdź czy jest on źródłem problemu. W razie potrzeby skontaktuj się z właścicielem skryptu albo usuń lub zwróć obiekt.
-Wyłączenie opcji Wyłącz Skrypty i naciśnięcie Zastosuj ponownie włączy skrypty w tym regionie.
-
-Domyślnie: nie wybrana
- </notification>
- <notification label="Wyłącz Kolizje" name="HelpRegionDisableCollisions">
- Słaba wydajność / prędkość symulatora może być spowodowana przez fizyczne obiekty. Otwórz panel Statystyki (Ctrl+Shift+1). Sprawdź ilość klatek na sekundę (FPS) w Fizyce Symulatora. Jeżeli jest mniej niż 45 wybierz panel Czas znajdujący się na dole panelu Statystyki. Jeżeli Czas Symulatora (Fizyka) wynosi 20 ms lub więcej kliknij na Główne Kolizje. Zobaczysz listę nazw i lokacji fizycznych obiektów które mogą być odpowiedzialne za pogorszenie wydajności.
-
-Wybranie opcji Wyłącz Kolizje i naciśnięcie Zastosuj tymczasowo wyłączy kolizje obiektów. Wybranie tej opcji może być niezbędne w celu umożliwienia podróży do lokacji wymienionych Główneych Kolizji.
-Po przebyciu na miejsce zobacz obiekt i sprawdź czy jest on źródłem kolizji z innymi obiektami. W razie potrzeby skontaktuj się z właścicielem obiektu albo usuń lub zwróć obiekt.
-Wyłączenie opcji Wyłącz Kolizje i naciśnięcie Zastosuj ponownie włączy kolizje w tym regionie.
-
-Domyślnie: nie wybrana
- </notification>
- <notification label="Wyłącz Fizykę" name="HelpRegionDisablePhysics">
- Opcja Wyłącz Fizykę jest podobna do opcji Wyłącz Kolizje i spowoduje wyłączenie symulacji fizyki. Oznacza to, że nie tylko obiekty przestaną się zderzać, ale również awatary nie będą się mogły poruszać.
-
-Ta opcja powinna być używana wyłącznie w przypadku kiedy użycie opcji Wyłącz Kolizje nie zwiększa wystarczająco wydajności symulatora w celu sprawdzenia problemów związanych z fizyką i z kolizjami.
-
-Po zakończeniu badań musisz ponownie włączyć fizykę żeby awatary mogły się poruszać.
-
-Domyślnie: nie wybrana
- </notification>
- <notification label="Główne Kolizje" name="HelpRegionTopColliders">
- Pokaż listę obiektów potencjalnie doświadczających największej ilości kolizji między obiektami. Te obiekty mogą być odpowiedzialne za zmniejszenie wydajności. Wybierz Widok &gt; Statystyki i zobacz Symulator &gt; Czas &gt; Czas Symulatora (Fizyka) i sprawdź czy więcej niż 20 ms jest spędzane w fizyce.
- </notification>
- <notification label="Główne Skrypty" name="HelpRegionTopScripts">
- Pokaż listę obiektów spędzających najwęcej czasu wykonując skrypty LSL. Te obiekty mogą być odpowiedzialne za zmniejszenie wydajności. Wybierz Widok &gt; Statystyki i zobacz Symulator &gt; Czas &gt; Czas Skryptów i sprawdź czy więcej niż 25 ms jest spędzane w skryptach.
- </notification>
- <notification label="Restart Regionu" name="HelpRegionRestart">
- Restart procesu na serwerze obsługującym ten region za dwie minuty. Wszyscy Rezydenci w tym regionie zostaną wylogowani. Region zapisze swoje dane i powinien wystartować w przeciągu 90 sekund.
-
-Restart regionu nie naprawi większości problemów związanych z wydajnością / prędkością i generalnie powinnien być używany na polecenie.
- </notification>
- <notification label="Poziom Wody" name="HelpRegionWaterHeight">
- Jest to poziom w metrach gdzie pojawia się woda. Jeżeli jest wybrana inna wartość niż 20 i Twoja woda sąsiaduje z krawędzią świata lub pustym miejscem to będzie widoczny uskok.
-
-Domyślnie: 20
- </notification>
- <notification label="Wznoszenie Terenu" name="HelpRegionTerrainRaise">
- Jest to dystans w metrach o który właściciele posiadłości mogą podnieść teren powyżej ustalonego poziomu odniesienia.
-
-Domyślnie: 4
- </notification>
- <notification label="Obniżanie Terenu" name="HelpRegionTerrainLower">
- Jest to dystans w metrach o który właściciele posiadłości mogą obniżyć teren poniżej ustalonego poziomu odniesienia.
-
-Domyślnie: -4
- </notification>
- <notification label="Åadowanie RAW Terenu" name="HelpRegionUploadRaw">
- Ten przycisk ładuje plik .RAW dla tego regionu.
-Plik musi mieć poprawne wymiary (RGB, 256x256) i 13 kanałów.
-Najprostszy sposób na stworzenie pliku terenu to zapisanie istniejącego pliku RAW. Zalecany pierwszy krok to modyfikacje kanału czerwieni (wysokość terenu) i ładowanie nowego pliku.
-
-Åadowanie pliku może zająć 45 sekund. ZaÅ‚adowanie terenu nie przemieÅ›ci obiektów znajdujÄ…cych siÄ™ na tym terenie, tylko teren i prawa przypisane do posiadÅ‚oÅ›ci ulegnÄ… zmianie. Może to spowodować, że niektóre obiekty zniknÄ… pod ziemiÄ….
-
-Aby uzyskać więcej informacji o edycji map wysokości sprawdź F1 Pomoc.
- </notification>
- <notification label="Zapisywanie RAW Terenu" name="HelpRegionDownloadRaw">
- Ten przycisk zapisuje plik zawierający mapę wysokości, wymiary posiadłości, dane o posiadłościach na sprzedaż i niektóre prawa przypisane do posiadłości w tym regionie. Jeżeli otwierasz ten plik w programie takim jak Photoshop musisz zdefniować wymiary dokumentu jako: RGB, 256x256, 13 kanałów. Ten plik terenu nie może zostać otwarty w żaden inny sposób.
-
-Aby uzyskać więcej informacji o edycji map wysokości sprawdź F1 Pomoc.
- </notification>
- <notification label="Używaj Słońca Majątku" name="HelpRegionUseEstateSun">
- Ta opcja ustala pozycję słońca w tym regionie żeby była taka sama jak pozycja słońca w reszcie majątku.
-
-Domyślnie: włączona
- </notification>
- <notification label="Stałe Słońce" name="HelpRegionFixedSun">
- Ta opcja ustala pozycję słońca do pozycji w suwaku faz i unieruchamia słońce w wybranej pozycji.
-
-Domyślnie: nie włączona
- </notification>
- <notification label="Ustalanie Terenu" name="HelpRegionBakeTerrain">
- Ten przycisk zapisuje obecne ukształtowanie terenu jako nowy punkt odniesienia dla regionu. Po ustaleniu punktu odniesienia teren może zostać odtworzony do zapisanego kształtu wybierając opcję Odtwórz w Edycji Terenu. Zapisany, ustalony teren jest również punktem odniesienia dla górnego i dolnego limitu zmian wysokości.
- </notification>
- <notification label="ZarzÄ…dcy MajÄ…tku" name="HelpEstateEstateManager">
- Zarządca majątku jest Rezydentem oddelegowanym przez Ciebie do kontroli ustawień regionu i majątku. Zarządca majątku może zmieniać wszystkie ustawienia dostępne na tym panelu, za wyjątkiem ładowania, zapisywania i ustalania terenu. W szczgólności może kontrolować dostęp innych Rezydentów (bany) do Twojego majątku.
-
-Zarządcy majątku mogą być dodawani i usuwani wyłącznie przez właściciela majątku. Wybieraj na zarządców tylko tych Rezydentów którym ufasz ponieważ ponosisz odpowiedzialność za ich działania.
- </notification>
- <notification label="Używaj Globalnego Czasu" name="HelpEstateUseGlobalTime">
- Ta opcja ustala pozycję słońca w Twoim majątku żeby była taka sama jak pozycja słońca w regionach głównych należących do Lindenów.
- </notification>
- <notification label="Stałe Słońce" name="HelpEstateFixedSun">
- Ta opcja ustala pozycję słońca do pozycji w suwaku faz i unieruchamia słońce w wybranej pozycji.
- </notification>
- <notification label="Dostęp Publiczny" name="HelpEstateExternallyVisible">
- Ta opcja kontroluje czy Rezydenci znajdujący się w innych majątkach mogą przenosić się do tego majątku jeżeli nie są umieszczeni na liście dostępu.
-
-Domyślnie: włączona
- </notification>
- <notification label="Pozwalaj na Bezpośrednią Teleportację" name="HelpEstateAllowDirectTeleport">
- Włączenie tej opcji pozwala Rezydentom na bezpośrednią teleportację do dowolnego miejsca a Twoim majątku. Jeżeli ta opcja nie jest wyłączona Rezydenci mogą się teleportować do najbliższego teleportera.
-Domyślnie: nie włączona
- </notification>
- <notification label="Dostęp do Majątku" name="HelpEstateAllowResident">
- Dostęp do tego majątku będzie ograniczony do wymienionych Rezydentów i poniższych grup. Ta opcja jest dostępna tylko wtedy kiedy opcja Dostępu Publicznego jest wyłączona.
- </notification>
- <notification label="Dostęp Grup do Majątku" name="HelpEstateAllowGroup">
- Dostęp do tego majątku będzie ograniczony do wymienionych grup i powyższych Rezydentów. Ta opcja jest dostępna tylko wtedy kiedy opcja Dostępu Publicznego jest wyłączona.
- </notification>
- <notification label="Email o Nadużyciach" name="HelpEstateAbuseEmailAddress">
- Wpisanie ważnego email adresu spowoduje, że raporty o nadużyciach w obrębie tego majątku będą wysyłane na ten adres. Zostawienie pustego miejsca spowoduje, że raporty o nadużyciach będą wysyłane wyłącznie do Linden Lab.
- </notification>
- <notification label="Wstęp Wzbroniony (bany)" name="HelpEstateBanResident">
- Rezydenci umieszczeni na tej liście nie mają dostępu do Twojego majątku, niezależnie od jakichkolwiek innych ustawień.
- </notification>
- <notification label="Pozwalaj na Rozmowy" name="HelpEstateVoiceChat">
- Posiadłości w tym majątku mogą mieć własne kanały głosu pozwalające Rezydentom na rozmowy z osobami w pobliżu.
-
-Domyślnie: nie włączone
+Aby wejść do regionu Adult, Rezydenci muszą posiadać zweryfikowane konto, albo w wyniku weryfikacji wieku albo płatości.
</notification>
<notification label="Wersja Niezgodna z Systemem Rozmów" name="VoiceVersionMismatch">
- Ta wersja [APP_NAME] nie jest kompatybilna z systemem Rozmów w tym regionie. Musisz zainstalować aktualną wersję [APP_NAME] żeby Rozmowy działały porawnie.
- </notification>
- <notification label="Umowa MajÄ…tku" name="HelpEstateCovenant">
- Włączenie opcji umowy majątku jest wymagane w celu umożliwienia sprzedaży posiadłości w obrębie majątku.
-Jeżeli opcja umowy nie jest wybrana sprzedaż posiadłości nie jest dozwolona. Notka określająca Twoją umowę może być pusta jeżeli nie chcesz ustalić zasad specyficznych dla Twojego majątku i jeżeli nie chcesz uprzedzać nabywców o faktach odnoszących się do posiadłości przed zakupem.
-
-Umowa może być używana w celu określenia zasad, zaleceń, przekazywania informacji o kulturze lub, po prostu, Twoich własnych oczekiwań w odniesieniu do potencjalnego nabywacy.
-Możesz zdefiniować zasady podziału posidłości, prawa budowlane, zasady opłat i wszystkie dodatkowe informacje z którymi nowy właściciel powinien zapoznać się i zaakceptować przed zakupem.
-
-Nabywca musi wybrać opcję akceptacji umowy żeby trasakcja mogła zostać sfinalizowana. Umowa majątku jest zawsze dostępna w dialogu O Posiadłości dla każedej posiadłości ze zdefinowaną umową.
+ Ta wersja [APP_NAME] nie jest kompatybilna z systemem rozmów w tym Regionie. Musisz zainstalować aktualną wersję [APP_NAME] aby komunikacja głosowa działała poprawnie.
</notification>
<notification label="Nie Można Kupić Obiektów" name="BuyObjectOneOwner">
Jednorazowo możesz kupować tylko od jednego właściciela.
@@ -1917,63 +1660,45 @@ Wpisz hasło ponownie i kliknij OK.
</notification>
<notification name="SetPickLocation">
Uwaga:
-Lokacja tego wyboru została zaktualizowana ale pozostałe szczegóły zachowają oryginalne wartości.
+Lokalizacja tego wyboru została zaktualizowana ale pozostałe szczegóły zachowają oryginalne wartości.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="MoveInventoryFromObject">
- Wybrane obiekty szafy nie majÄ… praw kopiowania.
-Obiekty zostanÄ… przeniesione do Twojej szafy, nie zostanÄ… skopiowane.
+ Wybrane obiekty Szafy nie majÄ… praw kopiowania.
+Obiekty zostanÄ… przeniesione do Twojej Szafy, nie zostanÄ… skopiowane.
-Przenieść obiekty szafy?
- <usetemplate ignoretext="Przenosząc szafę bez praw kopiowania z obiektów" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+Przenieść obiekty Szafy?
+ <usetemplate ignoretext="Uprzedź przed przeniesieniem zawartości niekopiowalnej z obiektu" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="MoveInventoryFromScriptedObject">
- Wybrane obiekty szafy nie majÄ… praw kopiowania.
+ Wybrane obiekty Szafy nie majÄ… praw kopiowania.
Obiekty zostanÄ… przeniesione do Twojej Szafy, nie zostanÄ… skopiowane.
-Ponieważ obiekty zawierają skrypty, przeniesienie obiektów do Twojej szafy może spowodować niepoprawne działanie skryptów.
+Ponieważ obiekty zawierają skrypty, przeniesienie obiektów do Twojej Szafy może spowodować niepoprawne działanie skryptów.
Przenieść obiekty szafy?
- <usetemplate ignoretext="Przenosząc szafę bez praw kopiowania ze skryptowanych obiektów" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ <usetemplate ignoretext="Uprzedź przed przeniesieniem zawartości niekopiowalnej z obiektu, która może uszkodzić skrypty obiektu" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="ClickActionNotPayable">
- Uwaga: Opcja &apos;Zapłać Obiektowi&apos; została wybrana, ale żeby ta opcja działała musi być dodany skrypt z funkcją money().
+ Uwaga: Opcja Zapłać Obiektowi została wybrana, ale żeby ta opcja działała musi być dodany skrypt z funkcją money().
<form name="form">
- <ignore name="ignore" text="Wybierając opcję Zapłać Obiektowi dla obiektów bez funkcji money()"/>
+ <ignore name="ignore" text="Opcja Zapłać Obiektowi została aktywowana podczas budowania obiektów bez skryptu z funkcją money()."/>
</form>
</notification>
<notification name="OpenObjectCannotCopy">
W tym obiekcie nie ma elementów które możesz skopiować.
</notification>
<notification name="WebLaunchAccountHistory">
- Przejść na stronę [SECOND_LIFE] żeby zobaczyć historię konta?
- <usetemplate ignoretext="ÅadujÄ…c stronÄ™ historii konta." name="okcancelignore" notext="Anuluj" yestext="Idź na stronÄ™"/>
- </notification>
- <notification name="ClickOpenF1Help">
- Przejść na stronę [SECOND_LIFE]?
- <usetemplate ignoretext="Odwiedzając stronę [SECOND_LIFE]." name="okcancelignore" notext="Anuluj" yestext="Idź"/>
+ Przejść na stronę [http://secondlife.com/account/ Dashboard] żeby zobaczyć historię konta?
+ <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć historię konta" name="okcancelignore" notext="Anuluj" yestext="Idź na stronę"/>
</notification>
<notification name="ConfirmQuit">
Na pewno chcesz skończyć?
- <usetemplate ignoretext="Wyłączając [APP_NAME]." name="okcancelignore" notext="Kontynuuj" yestext="Wyłącz"/>
+ <usetemplate ignoretext="Na pewno chcesz skończyć?" name="okcancelignore" notext="Nie kończ" yestext="Wyłącz"/>
</notification>
<notification name="HelpReportAbuseEmailLL">
- Używaj tej opcji do zgłaszania nadużyć Warunków Umowy (Terms of Service) i Standardów Społeczeństwa (Community Standards). Zobacz:
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
-
-Wszystkie zgłoszone nadużycia Warunków Umowy (Terms of Service) i Standardów Społeczeństwa (Community Standards) są badane i rozwiązywane. Możesz zobaczyć konkluzję zgłoszenia w Raporcie Zgłoszeń pod:
+ Używaj tej opcji do zgłaszania nadużyć [http://secondlife.com/corporate/tos.php Warunków Umowy (Terms of Service)] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa (Community Standards)].
-http://secondlife.com/support/incidentreport.php
- </notification>
- <notification name="HelpReportAbuseEmailEO">
- UWAGA: Ten raport zostanie wysłany do właściciela regionu w którym się znajdujesz i nie będzie wysłany do Linden Lab.
-
-W ramach serwisu dla Rezydentów i gości właściciel tego regionu postanowił odbierać i rozwiązywać wszystkie reporty wysłane z tego regionu. Linden Lab nie będzie analizował żadnych reportów zgłoszonych z tego miejsca.
-
-Właściciel regionu będzie rozpatrywał raporty w oparciu o lokalne prawa tego regionu zdefiniowane w umowie majątku. (Możesz zobaczyć umowę wybierając opcję O Posiadłości z menu Świat.)
-
-Rozwiązanie tego raportu odnosi się wyłącznie do tego regionu; konkluzja tego raportu nie będzie miała wpływu na dostęp Rezydentów do innych regionów w [SECOND_LIFE]. Wyłącznie Linden Lab może całkowicie odebrać dostęp do [SECOND_LIFE].
+Wszystkie zgłoszone nadużycia są badane i rozwiązywane.
</notification>
<notification name="HelpReportAbuseSelectCategory">
Wybierz kategorię dla tego raportu o nadużyciu.
@@ -2001,9 +1726,9 @@ Dokładne dane pomogą nam w klasyfikacji i prztwarzaniu raportu.
Jeżeli składasz raport dotyczący naruszenia praw autorskich proszę się upewnić, że robisz to poprawnie:
-(1) Przypadek Nadużycia. Możesz złożyć raport jeżeli sądzisz, że Rezydent narusza system przywilejów [SECOND_LIFE], na przykład używając CopyBot lub podobnych narzędzi robiących kopie, naruszając prawa autorskie. Komisja Nadużyć bada wykrocznia i stosuje akcje dyscyplinarne za zachowania sprzeczne z zasadami Warunków Umowy (Terms of Service) i Standardów Społeczeństwa (Community Standards) [SECOND_LIFE]. Komisja Nadużyć nie zajmuje się i nie odpowiada na żądania usunięcia treści ze środowiska [SECOND_LIFE].
+(1) Przypadek Nadużycia. Możesz złożyć raport jeżeli sądzisz, że Rezydent narusza system przywilejów [SECOND_LIFE], na przykład używając CopyBot lub podobnych narzędzi robiących kopie, naruszając prawa autorskie. Komisja Nadużyć bada wykroczenia i stosuje akcje dyscyplinarne za zachowania sprzeczne z zasadami Warunków Umowy [SECOND_LIFE] [http://secondlife.com/corporate/tos.php Terms of Service] i Standardów Społeczeństwa [http://secondlife.com/corporate/cs.php Community Standards]. Komisja Nadużyć nie zajmuje się i nie odpowiada na żądania usunięcia treści ze środowiska [SECOND_LIFE].
-(2) Przypadek DMCA lub Usuwanie Treści. Aby wystąpić z żądaniem o usunięcie treści ze środowiska [SECOND_LIFE] MUSISZ przedłożyć ważne zawiadomienie o nadużyciu zgodne z naszą polisą DMCA pod http://secondlife.com/corporate/dmca.php.
+(2) Przypadek DMCA lub Usuwanie Treści. Aby wystąpić z żądaniem o usunięcie treści ze środowiska [SECOND_LIFE] MUSISZ przedłożyć ważne zawiadomienie o nadużyciu zgodne z naszą polityką DMCA [http://secondlife.com/corporate/dmca.php DMCA Policy].
Jeżeli chcesz kontynuować dalej zamknij to okno i dokończ wysyłanie raportu. Może być potrzebny wybór kategorii &apos;CopyBot albo Nadużycie Przywilejów&apos;.
@@ -2019,7 +1744,7 @@ Linden Lab
Obecnie masz już dołączony obiekt do tej części Twojego ciała.
Chcesz go zamienić na wybrany obiekt?
<form name="form">
- <ignore name="ignore" save_option="true" text="ZamieniajÄ…c istniejÄ…ce dodatki"/>
+ <ignore name="ignore" save_option="true" text="Obecnie masz już dołączony obiekt do tej części Twojego ciała.Chcesz go zamienić na wybrany obiekt?"/>
<button ignore="Zamień Automatycznie" name="Yes" text="OK"/>
<button ignore="Nie Zamieniaj" name="No" text="Anuluj"/>
</form>
@@ -2029,18 +1754,22 @@ Chcesz go zamienić na wybrany obiekt?
Chcesz wyłączyć Tryb Pracy przed zakończeniem tej tranzakcji?
<form name="form">
- <ignore name="ignore" save_option="true" text="Płacąc osobie lub obiektowi będąc w Trybie Pracy"/>
+ <ignore name="ignore" save_option="true" text="Jesteś w Trybie Pracy co oznacza, że nie dostaniesz żadnych obiektów w zamian za tą opłatę. Chcesz wyłączyć Tryb Pracy przed zakończeniem tej transakcji?"/>
<button ignore="Zawsz wyłączaj Tryb Pracy" name="Yes" text="OK"/>
<button ignore="Nie wyłączaj Trybu Pracy" name="No" text="Anuluj"/>
</form>
</notification>
+ <notification name="ConfirmDeleteProtectedCategory">
+ Ten folder &apos;[FOLDERNAME]&apos; to folder systemowy. Usunięcie foldera systemowego spowoduje niestabilność. Czy na pewno chcesz go skasować?
+ <usetemplate ignoretext="Potwierdź zanim folder systemu zostanie skasowany" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ </notification>
<notification name="ConfirmEmptyTrash">
- Na pewno chcesz permanentnie usunąć zawartość Śmietnika?
- <usetemplate ignoretext="Usuwając zawartość Śmietnika" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ Na pewno chcesz permanentnie usunąć zawartość Kosza?
+ <usetemplate ignoretext="Potwierdź przed usunięciem zawartości Kosza" name="okcancelignore" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="ConfirmClearBrowserCache">
Na pewno chcesz wyczyścić bufor przeglądarki?
- <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/>
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
</notification>
<notification name="ConfirmClearCookies">
Na pewno chcesz wyczyścić ciasteczka?
@@ -2051,39 +1780,18 @@ Chcesz wyłączyć Tryb Pracy przed zakończeniem tej tranzakcji?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/>
</notification>
<notification name="ConfirmEmptyLostAndFound">
- Na pewno chcesz permanentnie usunąć zawartość Twojego foldera Zgubione i Znalezione?
- <usetemplate ignoretext="UsuwajÄ…c szafÄ™ z Twojego foldera Zgubione i Znalezione" name="okcancelignore" notext="Nie" yestext="Tak"/>
+ Na pewno chcesz permanentnie usunąć zawartość Twojego foldera Zgubione i Odnalezione?
+ <usetemplate ignoretext="Potwierdź przed usunięciem zawartości foldera Zagubione i Odnalezione" name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="CopySLURL">
- Następujący link SLurl został skopiowany do pamięci podręcznej:
+ Następujący link SLURL został skopiowany do schowka:
[SLURL]
-Zamieść go na stronie Internetowej żeby umożliwić innym łatwy dostęp do tego miejsca, albo wklej go do panela adresu Twojej przeglądarki żeby go wypróbować.
+Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do tego miejsca, albo wklej go do panela adresu Twojej przeglądarki żeby go otworzyć.
<form name="form">
- <ignore name="ignore" text="Kopiując SLurl do pamięci podręcznej"/>
+ <ignore name="ignore" text="SLurl skopiowany do schowka"/>
</form>
</notification>
- <notification name="GraphicsPreferencesHelp">
- Ten panel kontroluje wymiary i rozdzielczość okna oraz jakość grafiki klienta. Panel Ustawienia &gt; Grafika pozwala na wybór jednego z czterech poziomów jakości grafiki: Niska, Średnia, Wysoka i Super. Możesz również dostosować grafikę do własnych potrzeb wybierając opcję Zaawansowane i zmieniając następujące ustawienia:
-
-Shadery: Opcja ta pozwala włączyć i wyłączyć różne rodzaje shaderów pikseli.
-
-Ustawienia Odbić: Określa rodzaje obiektów które mogą odbijać się w wodzie.
-
-Prezentacja Awatarów: Określa opcje mające wpływ na rysowanie awatarów przez klienta.
-
-Głębia Rysowania: Określa od jakiej odległości od pozycji kamery obiekty będą rysowane w tle.
-
-Liczba Cząsteczek: Określa maksymalną liczbę cząsteczek widocznych jednocześnie na ekranie.
-
-Jakość Post-Procesu: Określa rozdzielczość z jaką jest wyświetlana poświata.
-
-Szczegóły Meszu: Określa ilość szczegółów albo liczbę trójkątów używaną przy rysowaniu pewnych obiektów. Większa wartość zwalnia prędkość rysowania ale powoduje, że obiekty wyglądają bardziej szczgółowo.
-
-Ustawienia Światła: Określa jaki rodzaj światła jest używany do rysowania.
-
-Szczegóły Terenu: Określa ilość szczgółów widoczną w teksturach terenu.
- </notification>
<notification name="WLSavePresetAlert">
Chcesz zmienić zapisane ustawienia?
<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
@@ -2102,152 +1810,6 @@ Szczegóły Terenu: Określa ilość szczgółów widoczną w teksturach terenu.
Efekt Post-Procesu już istnieje. Chcesz zapisać nowy na jego miejsce?
<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
</notification>
- <notification name="HelpEditSky">
- Ustaw suwaki żeby stworzyć i zapisać zbiór nieb.
- </notification>
- <notification name="HelpEditDayCycle">
- Wybierz których nieb używać w przeciągu dnia.
- </notification>
- <notification name="EnvSettingsHelpButton">
- Te ustawienia zmieniają wygląd środowiska na Twoim komputerze. Twoja karta graficzna musi posiadać opcję shaderów atmosfery aby umożliwić dostęp do wszystkich ustawień.
-
-Ustaw suwak &quot;Pora Dnia&quot; żeby zmienić lokalną porę dnia w kliencie.
-
-Ustaw suwak &quot;Chmury&quot; żeby zmienić ilość chmur widoczną na niebie.
-
-Wybierz kolor w selekcji &quot;Kolor Wody&quot; żeby zmienić kolor wody.
-
-Ustaw suwak &quot;Zamglenie&quot; żeby zmienić gęstość zamglenia pod wodą.
-
-Kliknij &quot;Używaj Czasu Regionu&quot; żeby dostosowywać porę dnia do pory dnia w regionie.
-
-Kliknij &quot;Zaawansowane Niebo&quot; żeby wybrać bardziej szczegółowy edytor ustawień nieba.
-
-Kliknij &quot;Zaawansowana Woda&quot; żeby wybrać bardziej szczegółowy edytor ustawień wody.
- </notification>
- <notification name="HelpDayCycle">
- Edytor Cyklu Dnia pozwala na kontrolę nieba podczas cyklu dnia/nocy w [SECOND_LIFE]. Ten cykl jest używany przez suwak Pora Dnia w podstawowym Edytorze Środowiska.
-
-Edytor Cyklu Dnia ustala klatki odniesienia. Są to punkty (widoczne jako szare plamki na wykresie czasu) które mają przypisane Ustawienia Nieba. W miarę upływu czasu niebo jest animowane używając średnich pomiędzy klatkami odniesienia.
-
-Żółta strzałka powyżej linii czasu odpowiada biżącemu widokowi opartemu na Porze Dnia. Kliknij i przeciągnij strzałkę żeby zobaczyć animację w przeciągu dnia. Możesz dodawać i usuwać klatki odniesienia używająć przycisków Dodaj i Usuń po prawej stronie linii czasu.
-
-Długość Cyklu dyktuje całkowitą długość &quot;dnia&quot;. Wybranie małej wartości (na przykład 2 min) oznacza, że Twoja 24-o godzinna linia czasu będzie animowana w całości w przeciągu dwóch minut czasu rzeczywistego! Po wybraniu odpowiednich ustawień linii czasu i klatek odniesienia użyj przycisków Start i Stop żeby zobaczyć rezultaty. Pamiętaj - zawsze możesz używać żółtej strzałki wskażnika czasu powyżej linii czasu żeby zmieniać animację dynamicznie. Użycie przycisku Używaj Czasu Regionu zsynchronizuje Twoją długość dnia i czas z cyklem Regionu.
-
-Po zdefiniowaniu Cyklu Dnia możesz zapisać i załadować ustawienia używając przycisków Zapisz Test Dnia i Załaduj Test Dnia. Uwaga, obecnie tylko jeden Cykl Dnia jest dozwolony.
- </notification>
- <notification name="HelpBlueHorizon">
- Ustaw suwaki Czerwony/Zielony/Niebieski (RGB) żeby zmienić kolor nieba. Możesz używać suwaka Intensywność (I) żeby zmieniać ustawienia suwaków wszystkich kolorów (RGB) jednocześnie.
- </notification>
- <notification name="HelpHazeHorizon">
- Horyzont Zamglenia jest jednym z ważniejszych parametrów kontrolujących oświetlenie sceny. Jest efektywnym do symulacji wielu ustawień oświetlenia takich jak rozbyski słońca i ciemniejsze ustawienia zamkniętej przesłony.
- </notification>
- <notification name="HelpBlueDensity">
- Gęstość Błękitu ma wpływ na nasycenie koloru nieba i mgły. Jeżeli przesuniesz suwak Intensywności (I) w prawo kolory będą jaśniejsze i żywsze. Jeżeli przesuniesz całkowicie w lewo kolory będą rozmywać się aż do przejścia w biel i czerń. Jeżeli chcesz precyzyjnie kontrolować balans koloru nieba możesz używać suwaków kolorów Czerwony/Zielony/Niebieski (RGB) w celu zmiany nasycenia indywidualnych składników.
- </notification>
- <notification name="HelpHazeDensity">
- Gęstość Zamglenia kontroluje zawartość mętnego, szarego zamglenia w atmosferze. Jest to przydatne do symulacji scen z dużą ilością dymu i zanieczyszczeń.
-Oraz do symulacji mgły i zamgleń.
- </notification>
- <notification name="HelpDensityMult">
- Mnożnik Gęstości wpływa na gęstość atmosfery w całości. Niskie ustawienie sprawia wrażenie lekkiego powietrza, wyższe ustawienia tworzą bardzo ciężki, zamglony efekt.
- </notification>
- <notification name="HelpDistanceMult">
- Mnożnik Dystansu wpływa na postrzeganie dystansu. Wartość zero niweluje wpływ dystansu na wygląd terenu i obiektów.
-Wartości większe od 1 symulują większy dystans tworząc silniejszy efekt atmosferyczny.
- </notification>
- <notification name="HelpMaxAltitude">
- Max Wysokość wpływa na obliczanie światła atmosferycznego.
-O póżniejszych porach dnia ta wartość jest przydatna do regulacji percepcji dystansu zachodącego słońca.
- </notification>
- <notification name="HelpSunlightColor">
- Reguluje kolor i intensywność bezpośredniego światła w scenie.
- </notification>
- <notification name="HelpSunAmbient">
- Reguluje kolor i intensywność rozproszonego światła atmosferycznego w scenie.
- </notification>
- <notification name="HelpSunGlow">
- Suwak Rozmiar kontroluje wielkość słońca.
-Suwak Ostrość kontroluje ostrość słońca na niebie.
- </notification>
- <notification name="HelpSceneGamma">
- Reguluje dystrybucję światła i cienia na ekranie.
- </notification>
- <notification name="HelpStarBrightness">
- Reguluje blask gwiazd na niebie.
- </notification>
- <notification name="HelpTimeOfDay">
- Kontroluje pozycję słońca na niebie.
-Zbliżone do wysokości.
- </notification>
- <notification name="HelpEastAngle">
- Kontroluje pozycję słońca na niebie.
-Zbliżone do azymutu.
- </notification>
- <notification name="HelpCloudColor">
- Kontroluje kolor chmur. Generalnie powinny być białawe, ale hej, pobaw się jeżeli masz ochotę.
- </notification>
- <notification name="HelpCloudDetail">
- Kontroluje szczegółowy obraz nałożony na górę głównego obrazu chmur. X i Y kontrolują jego pozycję. G (Gęstość) kontroluje jak puchate lub postrzępione są chmury.
- </notification>
- <notification name="HelpCloudDensity">
- Suwaki X i Y kontrolujÄ… pozycjÄ™ chmur.
-Suwak G (Gęstość) kontroluje gęstość chmur.
- </notification>
- <notification name="HelpCloudCoverage">
- Kontroluje ilość chmur pokrywających niebo.
- </notification>
- <notification name="HelpCloudScale">
- Kontroluje skalÄ™ obrazu chmur na kopule nieba.
- </notification>
- <notification name="HelpCloudScrollX">
- Kontroluje prędkość przemieszczania chmur wzdłuż osi X.
- </notification>
- <notification name="HelpCloudScrollY">
- Kontroluje prędkość przemieszczania chmur wzdłuż osi Y.
- </notification>
- <notification name="HelpClassicClouds">
- Wybierz tą opcję w celu używania dodatkowo starszej, klasycznej wersji chmur [SECOND_LIFE].
- </notification>
- <notification name="HelpWaterFogColor">
- Kontroluje kolor podwodnej mgły.
- </notification>
- <notification name="HelpWaterFogDensity">
- Kontroluje gęstość mgły i głębie wizji pod wodą.
- </notification>
- <notification name="HelpUnderWaterFogMod">
- Modyfikuje wpływ wykładnika gęstości mgły na głębie wizji awatara pod wodą.
- </notification>
- <notification name="HelpWaterGlow">
- Kontroluje emisję światła z powierzchni wody.
- </notification>
- <notification name="HelpWaterNormalScale">
- Kontroluje skalę trzech zmarszczeń które tworzą wodę.
- </notification>
- <notification name="HelpWaterFresnelScale">
- Kontroluje jak dużo światła jest odbijane pod różnymi kątami.
- </notification>
- <notification name="HelpWaterFresnelOffset">
- Kontroluje jak dużo intensywności światła jest odbijane.
- </notification>
- <notification name="HelpWaterScaleAbove">
- Kontroluje jak dużo światła odbija się od górnej powierzchni wody.
- </notification>
- <notification name="HelpWaterScaleBelow">
- Kontroluje jak dużo światła odbija się od dolnej powierzchni wody.
- </notification>
- <notification name="HelpWaterBlurMultiplier">
- Kontroluje jak fale i odbicia sÄ… mieszane.
- </notification>
- <notification name="HelpWaterNormalMap">
- Kontroluje która mapa normalnych jest używana w wodzie do określania odbić/załamań.
- </notification>
- <notification name="HelpWaterWave1">
- Kontroluje gdzie i jak szybko duża wersja mapy normalnych przemieszcza się wzdłuż osi X i Y.
- </notification>
- <notification name="HelpWaterWave2">
- Kontroluje gdzie i jak szybko mała wersja mapy normalnych przemieszcza się wzdłuż osi X i Y.
- </notification>
<notification name="NewSkyPreset">
Nazwij nowe niebo.
<form name="form">
@@ -2275,7 +1837,7 @@ Suwak G (Gęstość) kontroluje gęstość chmur.
Ustawienie już istnieje!
</notification>
<notification name="WaterNoEditDefault">
- Domyśle ustawienie nie może być zmienione ani usunięte.
+ Domyślne ustawienie nie może być zmienione ani usunięte.
</notification>
<notification name="ChatterBoxSessionStartError">
Błąd podczas rozpoczynania czatu/IM z [RECIPIENT].
@@ -2293,8 +1855,7 @@ Suwak G (Gęstość) kontroluje gęstość chmur.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="Cannot_Purchase_an_Attachment">
- Rzeczy nie mogą być kupione jeżeli
- są częścią załącznika.
+ Rzeczy nie mogą być kupione jeżeli są częścią załącznika.
</notification>
<notification label="Prośba o Zgodę na Pobieranie L$" name="DebitPermissionDetails">
Akceptując tą prośbę wyrażasz zgodę na ciągłe pobieranie Lindenów (L$) z Twojego konta. Żeby cofnąć to pozwolenie właściciel obiektu będzie musiał usunąć ten obiekt albo zresetowć skrypty obieku.
@@ -2302,27 +1863,25 @@ Suwak G (Gęstość) kontroluje gęstość chmur.
</notification>
<notification name="AutoWearNewClothing">
Czy chcesz automatycznie nosić ubranie które tworzysz?
- <usetemplate ignoretext="Automatycznie noÅ› nowe ubranie" name="okcancelignore" notext="Nie" yestext="Tak"/>
+ <usetemplate ignoretext="Załóż ubranie automatycznie będąc w trybie Edycji Wyglądu" name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="NotAgeVerified">
- Nie masz dostępu do tej posiadłości ze względu na brak weryfikacji Twojego wieku.
-Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić?
+ Nie masz dostępu do tej posiadłości ze względu na brak weryfikacji Twojego wieku. Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić?
[_URL]
<url name="url" option="0">
https://secondlife.com/account/verification.php
</url>
- <usetemplate ignoretext="Ostrzegaj o braku weryfikacji wieku" name="okcancelignore" notext="Nie" yestext="Tak"/>
+ <usetemplate ignoretext="Brak weryfikacji wieku" name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
- Nie masz dostępu do tej posiadłości ze względu na brak danych o Twoim koncie.
-Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić?
+ Nie masz dostępu do tej posiadłości ze względu na brak danych o Twoim koncie. Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić?
[_URL]
<url name="url" option="0">
https://secondlife.com/account/
</url>
- <usetemplate ignoretext="Ostrzegaj o braku danych konta" name="okcancelignore" notext="Nie" yestext="Tak"/>
+ <usetemplate ignoretext="Brak danych o koncie" name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="MissingString">
Zdanie [STRING_NAME] nie znalezione w strings.xml
@@ -2371,11 +1930,10 @@ Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić?
Plik terrain.raw ściągniety.
</notification>
<notification name="GestureMissing">
- Gest [NAME] nie znaleziony w bazie danych.
+ Gesturka [NAME] nie znaleziony w bazie danych.
</notification>
<notification name="UnableToLoadGesture">
Åadowanie gestu [NAME] nie powiodÅ‚o siÄ™.
-Spróbuj jeszcze raz.
</notification>
<notification name="LandmarkMissing">
Miejsce (LM) nie znalezione w bazie danych.
@@ -2444,7 +2002,7 @@ Wybierz jeden obiekt.
Wyłączanie trybu boskiego, poziom [LEVEL]
</notification>
<notification name="CopyFailed">
- Kopiowanie się nie powiodło - nie masz pozwolenia
+ Nie masz praw do skopiowania wybranych obiektów.
</notification>
<notification name="InventoryAccepted">
Podarunek od Ciebie został przyjęty przez [NAME].
@@ -2462,12 +2020,14 @@ Wybierz jeden obiekt.
Twoja wizytówka została odrzucona.
</notification>
<notification name="TeleportToLandmark">
- Jesteś w Głównym Regionie i możesz się stąd teleportować do innych miejsc jak &apos;[NAME]&apos; wybierając Moja Szafa w prawym dolnym rogu ekranu i wybierając folder Miejsca (LM).
-Kliknij dwa razy na miejsce (LM) i wybierz Teleportuj żeby tam się przenieść.
+ Jesteś w Głównym Regionie i możesz się stąd teleportować do innych miejsc jak &apos;[NAME]&apos; wybierając Moja Szafa w prawym dolnym rogu ekranu
+i wybierajÄ…c folder Zapisane Miejsca (LM).
+(Kliknij dwa razy na miejsce (LM) i wybierz &apos;Teleport&apos; żeby tam się przenieść.)
</notification>
<notification name="TeleportToPerson">
- Jesteś w Głównym Regionie i możesz komunikować się z innymi Rezydentami jak &apos;[NAME]&apos; wybierając Moja Szafa w prawym dolnym rogu ekranu i wybierając folder Wizytówki.
-Kliknij dwa razy na wizytówce, wybierz Wyślij IM i napisz wiadomość.
+ Możesz skontaktować się z Rezydentem &apos;[NAME]&apos; poprzez otworzenie panelu Ludzie po prawej stronie ekranu.
+Wybierz Rezydenta z listy, następnie kliknij &apos;IM&apos; na dole panelu.
+(Możesz także kliknąć podwójnie na ich imię na liście, lub prawym przyciskiem i wybrać &apos;IM&apos;).
</notification>
<notification name="CantSelectLandFromMultipleRegions">
Nie możesz przekraczać granic serwera wybierając obszar.
@@ -2490,6 +2050,9 @@ Spróbuj wybrać mniejszy obszar.
<notification name="SystemMessage">
[MESSAGE]
</notification>
+ <notification name="PaymentRecived">
+ [MESSAGE]
+ </notification>
<notification name="EventNotification">
Zawiadomienie o Imprezie:
@@ -2515,7 +2078,19 @@ Spróbuj wybrać mniejszy obszar.
</notification>
<notification name="NoQuickTime">
Wygląda na to, że QuickTime z Apple nie jest zainstalowany na Twoim komputerze.
-Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime idź do http://www.apple.com/quicktime i zainstaluj odtwarzacz.
+Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime idź do [http://www.apple.com/quicktime QuickTime site] i zainstaluj odtwarzacz.
+ </notification>
+ <notification name="NoPlugin">
+ Nie znaleziono wtyczki mediów dla &quot;[MIME_TYPE]&quot; typu mime. Media tego typu będą niedostępne.
+ </notification>
+ <notification name="MediaPluginFailed">
+ Następujące wtyczki mediów nie działają:
+ [PLUGIN]
+
+Zainstaluj proszę wtyczki ponownie lub skontaktuj się z dostawcą jeśli nadal problem będzie występował.
+ <form name="form">
+ <ignore name="ignore" text="Wtyczka mediów nie działa"/>
+ </form>
</notification>
<notification name="OwnedObjectsReturned">
Twoje obiekty z wybranej posiadłości zostały zwrócone do Twojej Szafy.
@@ -2524,7 +2099,7 @@ Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime
Obiekty należące do [FIRST] [LAST] na wybranej posiadłości zostały zwrócone do szafy tej osoby.
</notification>
<notification name="OtherObjectsReturned2">
- Obiekty z wybranej posiadłości należącej do Rezydenta &apos;[NAME]&apos; zostały zwrócone do ich właściciela.
+ Obiekty z posiadłości należącej do Rezydenta&apos;[NAME]&apos; zostały zwrócone do właściciela.
</notification>
<notification name="GroupObjectsReturned">
Obiekty z wybranej posiadłości przypisane do grupy [GROUPNAME] zostały zwrócone do szafy ich właścicieli.
@@ -2534,6 +2109,10 @@ Nieprzekazywalne obiekty przekazane grupie zostały usunięte.
<notification name="UnOwnedObjectsReturned">
Obiekty z wybranej posiadłości które nie należą do Ciebie zostały zwrócone do ich właścicieli.
</notification>
+ <notification name="ServerObjectMessage">
+ Wiadomość od [NAME]:
+&lt;nolink&gt;[MSG]&lt;/nolink&gt;
+ </notification>
<notification name="NotSafe">
Ta posiadłość pozwala na uszkodzenia.
Możesz doznać tutaj urazu. Jeżeli zginiesz nastąpi teleportacja do Twojego miejsca startu.
@@ -2543,15 +2122,13 @@ Możesz doznać tutaj urazu. Jeżeli zginiesz nastąpi teleportacja do Twojego m
Nie możesz tutaj latać.
</notification>
<notification name="PushRestricted">
- Popychanie niedozwolone.
-Nie możesz tutaj popychać innych, chyba, że jesteś właścicielem tej posiadłości.
+ Popychanie niedozwolone. Nie możesz tutaj popychać innych, chyba, że jesteś właścicielem tej posiadłości.
</notification>
<notification name="NoVoice">
Ta posiadłość nie pozwala na rozmowy.
</notification>
<notification name="NoBuild">
- Ta posiadłość nie pozwala na budowanie.
-Nie możesz tworzyć tutaj obiektów.
+ Ta posiadłość nie pozwala na budowanie. Nie możesz tworzyć tutaj obiektów.
</notification>
<notification name="ScriptsStopped">
Administrator czasowo zatrzymał skrypty w tym regionie.
@@ -2561,7 +2138,8 @@ Nie możesz tworzyć tutaj obiektów.
</notification>
<notification name="NoOutsideScripts">
Ta posiadłość nie pozwala na zewnętrzne skrypty.
-Żadne skrypty nie będą tutaj działać za wyjątkiem skryptów zleżących do właściciela posiadłości.
+
+Żadne skrypty nie będą tutaj działać za wyjątkiem skryptów należących do właściciela posiadłości.
</notification>
<notification name="ClaimPublicLand">
Tylko publiczne posiadłości w tym regionie mogą być przejęte.
@@ -2577,16 +2155,9 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp
<notification name="NoTeenGridAccess">
Twoje konto nie może zostać połączone z podanym regionem Teen Grid.
</notification>
- <notification name="NoHelpIslandTP">
- Brak możliwości ponownej teleportacji do Help Island.
-Odwiedź &apos;Help Island Public&apos; by powtórzyć szkolenie.
- </notification>
<notification name="ImproperPaymentStatus">
Nie posiadasz odpowiedniego statusu płatniczego by uzyskać dostęp do regionu.
</notification>
- <notification name="MustGetAgeRegion">
- By odwiedzić ten region, Twoje konto musi zostać poddane weryfikacji wieku.
- </notification>
<notification name="MustGetAgeParcel">
By móc przebywać na tej posiadłości wymagana jest weryfikacja Twojego wieku.
</notification>
@@ -2649,31 +2220,35 @@ Spróbuj ponowanie za kilka minut.
Nieważana posiadłość.
</notification>
<notification name="ObjectGiveItem">
- Obiekt [OBJECTFROMNAME] należący do [FIRST] [LAST] dał Ci [OBJECTTYPE] [OBJECTNAME].
+ Obiekt [OBJECTFROMNAME] należący do [NAME_SLURL] dał Ci [OBJECTTYPE]:
+[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Zachowaj"/>
<button name="Discard" text="Wyrzuć"/>
- <button name="Mute" text="Wycisz"/>
+ <button name="Mute" text="Zablokuj"/>
</form>
</notification>
<notification name="ObjectGiveItemUnknownUser">
- Obiekt [OBJECTFROMNAME] należący do (właściciel nieznany) dał Ci [OBJECTTYPE] [OBJECTNAME].
+ Obiekt [OBJECTFROMNAME] należący (właściciel nieznany) dał Ci [OBJECTTYPE]:
+[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Zachowaj"/>
<button name="Discard" text="Wyrzuć"/>
- <button name="Mute" text="Wycisz"/>
+ <button name="Mute" text="Zablokuj"/>
</form>
</notification>
<notification name="UserGiveItem">
- [NAME] dał Ci [OBJECTTYPE] &apos;[OBJECTNAME]&apos;.
+ [NAME_SLURL] dał Ci [OBJECTTYPE]:
+[ITEM_SLURL]
<form name="form">
- <button name="Keep" text="Zachowaj"/>
+ <button name="Show" text="Pokaż"/>
<button name="Discard" text="Wyrzuć"/>
- <button name="Mute" text="Wycisz"/>
+ <button name="Mute" text="Zablokuj"/>
</form>
</notification>
<notification name="GodMessage">
[NAME]
+
[MESSAGE]
</notification>
<notification name="JoinGroup">
@@ -2685,7 +2260,7 @@ Spróbuj ponowanie za kilka minut.
</form>
</notification>
<notification name="TeleportOffered">
- [NAME] proponuje Ci teleportacjÄ™ do siebie:
+ [NAME] proponuje Ci teleportcjÄ™ do siebie:
[MESSAGE]
<form name="form">
@@ -2693,6 +2268,9 @@ Spróbuj ponowanie za kilka minut.
<button name="Cancel" text="Anuluj"/>
</form>
</notification>
+ <notification name="TeleportOfferSent">
+ Oferta teleportacji wysłana do [TO_NAME]
+ </notification>
<notification name="GotoURL">
[MESSAGE]
[URL]
@@ -2712,6 +2290,9 @@ Spróbuj ponowanie za kilka minut.
<button name="Decline" text="Odmów"/>
</form>
</notification>
+ <notification name="FriendshipOffered">
+ Oferta znajomości dla [TO_NAME]
+ </notification>
<notification name="OfferFriendshipNoMessage">
[NAME] proponuje Ci znajomość.
@@ -2727,9 +2308,15 @@ Spróbuj ponowanie za kilka minut.
<notification name="FriendshipDeclined">
Twoja propozycja znajomości została odrzucona przez [NAME].
</notification>
+ <notification name="FriendshipAcceptedByMe">
+ Propozycja znajomości została zaakceptowana.
+ </notification>
+ <notification name="FriendshipDeclinedByMe">
+ Propozycja znajomości została odrzucona.
+ </notification>
<notification name="OfferCallingCard">
- [FIRST] [LAST] daje Ci swoją wizytówkę.
-Wizytówka w Twojej Szafie może być używana do komunikowania się (IM) z tym Rezydentem.
+ [FIRST] [LAST] daje Tobie swoją wizytówkę.
+Wizytówka będzie znajdowała się w Szafie i umożliwi szybkie wysłanie IM do tego Rezydenta.
<form name="form">
<button name="Accept" text="Zaakceptuj"/>
<button name="Decline" text="Odmów"/>
@@ -2740,7 +2327,7 @@ Wizytówka w Twojej Szafie może być używana do komunikowania się (IM) z tym
Nastąpi wylogowanie jeżeli zostaniesz w tym regionie.
</notification>
<notification name="RegionRestartSeconds">
- Restart regionu za [MINUTES] sek.
+ Restart regionu za [SECONDS] sec.
Nastąpi wylogowanie jeżeli zostaniesz w tym regionie.
</notification>
<notification name="LoadWebPage">
@@ -2761,7 +2348,7 @@ Obiekt: [OBJECTNAME], właściciel: [NAME]?
[TYPE] [DESC] - nie znaleziono w bazie danych.
</notification>
<notification name="InvalidWearable">
- Obiekt, który chcesz założyć używa narzędzia nieobecnego w wersji klienta, którą używasz. By go założyć ściągnij najnowszą wersję klienta [APP_NAME].
+ Obiekt, który chcesz założyć używa narzędzia nieobecnego w wersji klienta, którą używasz. By go założyć ściągnij najnowszą wersję [APP_NAME].
</notification>
<notification name="ScriptQuestion">
&apos;[OBJECTNAME]&apos;, właściciel: &apos;[NAME]&apos;, chciał by:
@@ -2771,14 +2358,14 @@ Zgadzasz siÄ™?
<form name="form">
<button name="Yes" text="Tak"/>
<button name="No" text="Nie"/>
- <button name="Mute" text="Wycisz"/>
+ <button name="Mute" text="Zablokuj"/>
</form>
</notification>
<notification name="ScriptQuestionCaution">
- &apos;[OBJECTNAME]&apos;, właściciel: &apos;[NAME]&apos;, chciał by:
+ Obiekt &apos;[OBJECTNAME]&apos;, należący do &apos;[NAME]&apos; proponuje Ci:
[QUESTIONS]
-Jeżeli nie ufasz temu obiektowi lub jego twórcy - odmów. Wybierz Szczegóły żeby otrzymać więcej informacji.
+Jeżeli nie znasz tego obiektu lub kreatora, odmów.
Zgadzasz siÄ™?
<form name="form">
@@ -2801,39 +2388,12 @@ Zgadzasz siÄ™?
<button name="Ignore" text="Zignoruj"/>
</form>
</notification>
- <notification name="FirstBalanceIncrease">
- Przekazano Ci [AMOUNT]L$.
-Obiekty i inni użytkownicy mogą Ci dawać L$.
-Twój balans jest wyświetlony w prawym górnym rogu ekranu.
- </notification>
- <notification name="FirstBalanceDecrease">
- Pobrano od Ciebie [AMOUNT]L$.
-Twój balans jest wyświetlony w prawym górnym rogu ekranu.
- </notification>
- <notification name="FirstSit">
- Siedzisz.
-Używaj strzałek (albo AWSD) żeby zmieniać widok.
-Naciśnij przycisk Wstań żeby sie podnieść.
- </notification>
- <notification name="FirstMap">
- Kliknij i przeciągnij by przsuwać mapę.
-Kliknij dwa razy żeby się teleportować.
-Używaj narzędzi po prawej stronie żeby znajdować i wyświetlać różne obiekty.
- </notification>
- <notification name="FirstBuild">
- Możesz budować nowe obiekty w niektórych miejscach.
-Używaj narzędzi w lewym górnym rogu żeby budować, przyciskaj Ctrl lub Alt żeby szybko zmieniać narzędzia.
-Naciśnij Esc żeby skończyć budować.
- </notification>
- <notification name="FirstLeftClickNoHit">
- Lewy klik żeby używać specjalnych obiektów.
-Jeżeli strzałka zmieni się na rączkę możesz używać tego obiektu.
-Prawy klik zawsze pokazuje menu dostępnych operacji.
- </notification>
- <notification name="FirstTeleport">
- Nastąpiła teleportacja.
-Jesteś przy Infohub najbliższej Twojego celu.
-Twój cel jest zaznaczony wysokim czerwonym wskaźnikiem.
+ <notification name="BuyLindenDollarSuccess">
+ Dziękujemy za wpłatę!
+
+Twój stan konta L$ zostanie zaktualizowany w momencie zakończenia transakcji. Jeżeli w ciągu 20 minut, Twój balans konta nie ulegnie zmianie, transakcja została anulowana. W tym przypadku, pobrana kwota zostanie zwrócona na stan konta w US$.
+
+Status transkacji możesz sprawdzić odwiedzając Historię Transakcji swojego konta na [http://secondlife.com/account/ Dashboard]
</notification>
<notification name="FirstOverrideKeys">
Twoje sterujące klawisze zostały przejęte przez obiekt.
@@ -2841,41 +2401,10 @@ Użyj strzałek lub AWSD żeby sprawdzić ich działanie.
Niektóre obiekty (np broń) wymagają trybu panoramicznego.
Nacisnij &apos;M&apos; żeby go wybrać.
</notification>
- <notification name="FirstAppearance">
- Edytujesz swój wygląd.
-Używaj strzałek do obracania i zbliżenia.
-Po skończeniu wybierz &apos;Zapisz Zmiany&apos;
-żeby zapisać Twój wygląd i wyjść.
-Możesz edytować wygląd jak często chcesz.
- </notification>
- <notification name="FirstInventory">
- To jest Twoja Szafa, który zawiera obikty, notki, ubrania i inne Twoje rzeczy.
-* Żeby założyć obiekt lub strój (folder) przeciągnij go na siebie.
-* Żeby przenieść obiekt do świata przeciągnij go na grunt.
-* Żeby przeczytać notkę kliknij na niej dwa razy.
- </notification>
<notification name="FirstSandbox">
Ten region to piaskownica.
-Obiekty które tu zbudujesz mogą zostać usunięte jak opuścisz ten obszar - piaskownice są regularnie czyszczone, sprawdź informacje na górze ekranu obok nazwy regionu.
-Piaskownice spotyka siÄ™ rzadko i sÄ… zawsze oznakowane.
- </notification>
- <notification name="FirstFlexible">
- To jest elastyczny obiekt.
-Obiekty elastyczne nie mogą być fizyczne i muszą być typu fantom.
- </notification>
- <notification name="FirstDebugMenus">
- Zaawansowane menu zostało włączone.
-To menu zawiera funkcje użyteczne dla programistów analizujących [SECOND_LIFE].
-To menu jest aktywowane dzięki kombinacji klawiszy Ctrl+Alt+D (Windows) lub &#8997;&#8984;D (Mac).
- </notification>
- <notification name="FirstSculptedPrim">
- Edytujesz sculpt.
-Skulpty wymagają specjalnych tekstur które definiują ich kształt.
-Przykłady tekstur znajdują się w bibliotece szafy.
- </notification>
- <notification name="FirstMedia">
- Odtwarzasz media. Możesz wybrać automatyczne odtwarzanie w Ustawieniach pod Audio i Video. Odtwarzanie mediów w miejscach którym nie ufasz może być niebezpieczne.
+Obiekty które tu zbudujesz mogą zostać usunięte jak opuścisz ten obszar - piaskownice są regularnie czyszczone, sprawdź informacje na górze ekranu obok nazwy regionu.
</notification>
<notification name="MaxListSelectMessage">
Maksymalnie możesz wybrać [MAX_SELECT] rzeczy
@@ -2884,50 +2413,47 @@ z tej listy.
<notification name="VoiceInviteP2P">
[NAME] zaprasza Cię do rozmowy głosem.
Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia.
-Wybierz Wycisz żeby wyciszyć dzwoniącą osobę.
+Wybierz Zablokuj żeby wyciszyć dzwoniącą osób
<form name="form">
<button name="Accept" text="Zaakceptuj"/>
<button name="Decline" text="Odmów"/>
- <button name="Mute" text="Wycisz"/>
+ <button name="Mute" text="Zablokuj"/>
</form>
</notification>
<notification name="AutoUnmuteByIM">
- Wiadomość (IM) została wysłana do [FIRST] [LAST] i wyciszenie zostało automatycznie usunięte.
+ Wiadomość (IM) została wysłana do [FIRST] [LAST] i blokada została automatycznie usunięta.
</notification>
<notification name="AutoUnmuteByMoney">
- Pieniądze zostały przekazane do [FIRST] [LAST] i wyciszenie zostało automatycznie usunięte.
+ Pieniądze zostały przekazane do [FIRST] [LAST] i blokada została automatycznie usunięta.
</notification>
<notification name="AutoUnmuteByInventory">
- Oferta z szafy dla [FIRST] [LAST] automatycznie usunęła wyciszenie.
+ Oferta z szafy dla [FIRST] [LAST] i blokada została automatycznie usunięta.
</notification>
<notification name="VoiceInviteGroup">
[NAME] zaczyna rozmowÄ™ z grupÄ… [GROUP].
-Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia.
-Wybierz Wycisz żeby wyciszyć dzwoniącą osobę.
+Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia. Wybierz Zablokuj żeby wyciszyć dzwoniącą osobę.
<form name="form">
<button name="Accept" text="Zaakceptuj"/>
<button name="Decline" text="Odmów"/>
- <button name="Mute" text="Wycisz"/>
+ <button name="Mute" text="Zablokuj"/>
</form>
</notification>
<notification name="VoiceInviteAdHoc">
[NAME] zaczyna konferencję głosem.
-Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia.
-Wybierz Wycisz żeby wyciszyć dzwoniącą osobę.
+Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia. Wybierz Zablokuj żeby wyciszyć dzwoniącą osobę.
<form name="form">
<button name="Accept" text="Zaakceptuj"/>
<button name="Decline" text="Odmów"/>
- <button name="Mute" text="Wycisz"/>
+ <button name="Mute" text="Zablokuj"/>
</form>
</notification>
<notification name="InviteAdHoc">
[NAME] zaprasza CiÄ™ do konferencji poprzez Czat/IM.
-Wybierz Zaakceptuj żeby zacząć czat albo Odmów żeby nie przyjąć zaproszenia.
-Wybierz Wycisz żeby wyciszyć tą osobę.
+Wybierz Zaakceptuj żeby zacząć czat albo Odmów żeby nie przyjąć zaproszenia. Wybierz Zablokuj żeby wyciszyć tą osobę.
<form name="form">
<button name="Accept" text="Zaakceptuj"/>
<button name="Decline" text="Odmów"/>
- <button name="Mute" text="Wycisz"/>
+ <button name="Mute" text="Block"/>
</form>
</notification>
<notification name="VoiceChannelFull">
@@ -2970,10 +2496,54 @@ Wybierz Wycisz żeby wyciszyć tą osobę.
Błąd podczas łączenia z rozmową [VOICE_CHANNEL_NAME]. Spróbuj póżniej.
</notification>
<notification name="ServerVersionChanged">
- Ten region używa innej wersji symulatora. Kliknij na tą wiadomość żeby uzyskać więcej informacji.
+ Ten region używa innej wersji symulatora. Kliknij na tą wiadomość żeby uzyskać więcej informacji: [[URL] View the release notes.]
+ </notification>
+ <notification name="UnsupportedCommandSLURL">
+ Nie można otworzyć wybranego SLurl.
</notification>
- <notification name="UnableToOpenCommandURL">
- Wybrany link nie daje się otworzyć z tej przeglądarki.
+ <notification name="BlockedSLURL">
+ SLurl został otrzymany z niesprawdzonej przeglądarki i został zablokowany dla bezpieczeństwa.
+ </notification>
+ <notification name="ThrottledSLURL">
+ Wiele SLurlów zostało otrzymanych w krótkim czasie od niesprawdzonej przeglądarki.
+Zostaną zablokowane na kilka sekund dla bezpieczeństwa.
+ </notification>
+ <notification name="IMToast">
+ [MESSAGE]
+ <form name="form">
+ <button name="respondbutton" text="Odpowiedź"/>
+ </form>
+ </notification>
+ <notification name="ConfirmCloseAll">
+ Czy chcesz zamknąć wszystkie wiadomości IM?
+ <usetemplate ignoretext="Potwierdź, przed zamknięciem wszystkich wiadomości prywatnych (IM)." name="okcancelignore" notext="Anuluj" yestext="OK"/>
+ </notification>
+ <notification name="AttachmentSaved">
+ Załącznik został zapisany.
+ </notification>
+ <notification name="UnableToFindHelpTopic">
+ Nie można znależć tematu pomocy dla tego elementu.
+ </notification>
+ <notification name="ObjectMediaFailure">
+ Błąd serwera: aktualizacja mediów nie powiodła się.
+&apos;[ERROR]&apos;
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="TextChatIsMutedByModerator">
+ Twój czat został wyciszony przez moderatora.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="VoiceIsMutedByModerator">
+ Twoja rozmowa głosowa została wyciszona przez moderatora.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
+ <notification name="ConfirmClearTeleportHistory">
+ Czy na pewno chcesz usunąć historię teleportacji?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
+ </notification>
+ <notification name="BottomTrayButtonCanNotBeShown">
+ Wybrany przycisk nie może zostać wyświetlony w tej chwili.
+Przycisk zostanie wyświetlony w przypadku dostatecznej ilości przestrzeni.
</notification>
<global name="UnsupportedCPU">
- Prędkość Twojego CPU nie spełnia minimalnych wymagań.
@@ -2981,7 +2551,7 @@ Wybierz Wycisz żeby wyciszyć tą osobę.
<global name="UnsupportedGLRequirements">
Wygląda na to, że Twój system nie spełnia wymagań sprzętowych [APP_NAME]. [APP_NAME] wymaga karty graficznej kompatybilnej z OpenGL z multiteksturami. Jeżeli masz taką kartę zainstaluj najnowsze sterowniki do niej i uaktualnienia systemu operacyjnego.
-Jeżeli wciąż masz problemy sprawdź: http://www.secondlife.com/support
+Jeżeli wciąż masz problemy sprawdź: [SUPPORT_SITE].
</global>
<global name="UnsupportedCPUAmount">
796
@@ -2995,10 +2565,8 @@ Jeżeli wciąż masz problemy sprawdź: http://www.secondlife.com/support
<global name="UnsupportedRAM">
- Pamięć Twojego systemu nie spełnia minimalnych wymagań.
</global>
- <global name="PermYes">
- Tak
- </global>
- <global name="PermNo">
- Nie
+ <global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
+ Jeśli jesteś właścicielem posiadłości, możesz ustawić na niej miejsce startu.
+W innym przypadku możesz poszukać na mapie miejsca oznaczone jako &quot;Infohub&quot;.
</global>
</notifications>
diff --git a/indra/newview/skins/default/xui/pl/panel_active_object_row.xml b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml
new file mode 100644
index 0000000000..57dc8a3dd7
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_activeim_row">
+ <string name="unknown_obj">
+ Nieznany Obiekt
+ </string>
+ <text name="object_name">
+ Nienazwany Obiekt
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml
new file mode 100644
index 0000000000..6cd47c6ce7
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+ <layout_stack name="vertical_stack">
+ <layout_panel name="call_btn_panel">
+ <button label="Dzwoń" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Zakończ Rozmowe" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Przełączniki Głosu" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml
index fc3b3776f0..fa8dde77eb 100644
--- a/indra/newview/skins/default/xui/pl/panel_audio_device.xml
+++ b/indra/newview/skins/default/xui/pl/panel_audio_device.xml
@@ -13,7 +13,7 @@
Poziom Wejścia
</text>
<text_editor name="voice_intro_text1">
- Użyj suwaka by dostosować jak głośno Cię słychać dla innych Rezydentów. By przetestować poziom wejścia, zacznij mówić do mikrofonu.
+ Użyj suwaka by dostosować jak głośno Cię słychać dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu.
</text_editor>
<volume_slider name="mic_volume_slider"
tool_tip="By zmienić poziom głośności użyj suwaka" />
diff --git a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
new file mode 100644
index 0000000000..917610d3e9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="avatar_list_item">
+ <string name="FormatSeconds">
+ [COUNT]s
+ </string>
+ <string name="FormatMinutes">
+ [COUNT]m
+ </string>
+ <string name="FormatHours">
+ [COUNT]h
+ </string>
+ <string name="FormatDays">
+ [COUNT]d
+ </string>
+ <string name="FormatWeeks">
+ [COUNT]tyg
+ </string>
+ <string name="FormatMonths">
+ [COUNT]mc
+ </string>
+ <string name="FormatYears">
+ [COUNT]lat
+ </string>
+ <text name="avatar_name" value="Nieznane"/>
+ <button name="profile_btn" tool_tip="Zobacz profil"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml
index d7fcb8c966..122d834bdd 100644
--- a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml
@@ -3,8 +3,8 @@
<text name="title_text">
Lista Blokad
</text>
- <scroll_list name="blocked" tool_tip="Lista zablokowanych obecnie rezydentów"/>
- <button label="Zablokuj Rezydenta..." label_selected="Zablokuj Rezydenta..." name="Block resident..." tool_tip="Wybierz rezydenta, którego chcesz zablokować"/>
+ <scroll_list name="blocked" tool_tip="Lista Zablokowanych Osób"/>
+ <button label="Zablokuj Rezydenta..." label_selected="Zablokuj Rezydenta..." name="Block resident..." tool_tip="Wybierz Rezydenta aby zablokować"/>
<button label="Zablokuj obiekt według nazwy..." label_selected="Zablokuj obiekt według nazwy..." name="Block object by name..."/>
- <button label="Odblokuj" label_selected="Odblokuj" name="Unblock" tool_tip="Usuń rezydenta lub obiekt z listy blokad"/>
+ <button label="Odblokuj" label_selected="Odblokuj" name="Unblock" tool_tip="Usuń Rezydenta lub Obiekt z Listy Zablokowanych"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
new file mode 100644
index 0000000000..e21d8a077d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray">
+ <string name="SpeakBtnToolTip">
+ Włącza/Wyłącza mikrofon
+ </string>
+ <string name="VoiceControlBtnToolTip">
+ Pokazuje/Ukrywa panel kontroli głosu
+ </string>
+ <layout_stack name="toolbar_stack">
+ <layout_panel name="speak_panel">
+ <talk_button name="talk">
+ <speak_button label="Mów" label_selected="Mów" name="speak_btn"/>
+ </talk_button>
+ </layout_panel>
+ <layout_panel name="gesture_panel">
+ <gesture_combo_list label="Gestury" name="Gesture" tool_tip="Pokazuje/Ukrywa gestury"/>
+ </layout_panel>
+ <layout_panel name="movement_panel">
+ <button label="Ruch" name="movement_btn" tool_tip="Pokaż/Ukryj Ustawienia Ruchu"/>
+ </layout_panel>
+ <layout_panel name="cam_panel">
+ <button label="Widok" name="camera_btn" tool_tip="Pokaż/Ukryj Ustawienia Kamery"/>
+ </layout_panel>
+ <layout_panel name="snapshot_panel">
+ <button label="" name="snapshots" tool_tip="Zrób Zdjęcie"/>
+ </layout_panel>
+ <layout_panel name="im_well_panel">
+ <chiclet_im_well name="im_well">
+ <button name="Unread IM messages" tool_tip="Rozmowy"/>
+ </chiclet_im_well>
+ </layout_panel>
+ <layout_panel name="notification_well_panel">
+ <chiclet_notification name="notification_well">
+ <button name="Unread" tool_tip="Ogłoszenia"/>
+ </chiclet_notification>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml
new file mode 100644
index 0000000000..77d2e86b7e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray_lite">
+ <layout_stack name="toolbar_stack_lite">
+ <layout_panel name="gesture_panel">
+ <gesture_combo_list label="Gest" name="Gest" tool_tip="Pokaż/ukryj gestury"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_classified_info.xml b/indra/newview/skins/default/xui/pl/panel_classified_info.xml
new file mode 100644
index 0000000000..0b275d6dcf
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_classified_info.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_classified_info">
+ <panel.string name="l$_price">
+ L$[PRICE]
+ </panel.string>
+ <panel.string name="click_through_text_fmt">
+ [TELEPORT] teleport, [MAP] map, [PROFILE] profile
+ </panel.string>
+ <panel.string name="date_fmt">
+ [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
+ </panel.string>
+ <panel.string name="auto_renew_on">
+ Aktywne
+ </panel.string>
+ <panel.string name="auto_renew_off">
+ Wyłączone
+ </panel.string>
+ <text name="title" value="Reklama"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <text_editor name="classified_name" value="[name]"/>
+ <text name="classified_location_label" value="Miejsce:"/>
+ <text_editor name="classified_location" value="[loading...]"/>
+ <text name="content_type_label" value="Rodzaj Zawartości:"/>
+ <text_editor name="content_type" value="[content type]"/>
+ <text name="category_label" value="Kategoria:"/>
+ <text_editor name="category" value="[category]"/>
+ <text name="creation_date_label" value="Data stworzenia:"/>
+ <text_editor name="creation_date" tool_tip="Data stworzenia" value="[date]"/>
+ <text name="price_for_listing_label" value="Cena za wyświetlenie:"/>
+ <text_editor name="price_for_listing" tool_tip="Cena za umieszczenie reklamy." value="[price]"/>
+ <layout_stack name="descr_stack">
+ <layout_panel name="clickthrough_layout_panel">
+ <text name="click_through_label" value="Kliknięcia:"/>
+ <text_editor name="click_through_text" tool_tip="Kliknij według daty" value="[clicks]"/>
+ </layout_panel>
+ <layout_panel name="price_layout_panel">
+ <text name="auto_renew_label" value="Automatyczne przedłużenie:"/>
+ <text name="auto_renew" value="Aktywne"/>
+ </layout_panel>
+ <layout_panel name="descr_layout_panel">
+ <text name="classified_desc_label" value="Opis:"/>
+ <text_editor name="classified_desc" value="[description]"/>
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ </scroll_container>
+ <panel name="buttons">
+ <button label="Teleportuj" name="teleport_btn"/>
+ <button label="Mapa" name="show_on_map_btn"/>
+ <button label="Edytuj" name="edit_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml
new file mode 100644
index 0000000000..ac2739633e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_alpha_panel">
+ <panel name="avatar_alpha_color_panel">
+ <texture_picker label="Alpha Dolnej Części Ciała" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Alpha Górnej Części Ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Alpha Głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Alpha Oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Alpha Włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
new file mode 100644
index 0000000000..6395d5c59a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Edytuj ReklamÄ™" name="panel_edit_classified">
+ <panel.string name="location_notice">
+ (zostanie zaktualizowane po zapisaniu)
+ </panel.string>
+ <string name="publish_label">
+ Publikuj
+ </string>
+ <string name="save_label">
+ Zapisz
+ </string>
+ <text name="title">
+ Edytuj ReklamÄ™
+ </text>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <panel name="snapshot_panel">
+ <icon label="" name="edit_icon" tool_tip="Kliknij by wybrać teksturę"/>
+ </panel>
+ <text name="Name:">
+ Tytuł:
+ </text>
+ <text name="description_label">
+ Opis:
+ </text>
+ <text name="location_label">
+ Lokalizacja:
+ </text>
+ <text name="classified_location">
+ ładowanie...
+ </text>
+ <button label="Ustaw na bieżącą lokalizację" name="set_to_curr_location_btn"/>
+ <text name="category_label" value="Kategoria:"/>
+ <text name="content_type_label" value="Typ Zawartości:"/>
+ <icons_combo_box label="Treść Ogólna" name="content_type">
+ <icons_combo_box.item label="Moderuj Treść" name="mature_ci" value="Mature"/>
+ <icons_combo_box.item label="Treść Ogólna" name="pg_ci" value="PG"/>
+ </icons_combo_box>
+ <text name="price_for_listing_label" value="Cena za wyświetlenie:"/>
+ <spinner label="L$" name="price_for_listing" tool_tip="Cena za umieszczenie reklamy." value="50"/>
+ <check_box label="Ponawiaj automatycznie co tydzień." name="auto_renew"/>
+ </panel>
+ </scroll_container>
+ <panel label="bottom_panel" name="bottom_panel">
+ <button label="[LABEL]" name="save_changes_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml b/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml
new file mode 100644
index 0000000000..5e7a3a8fa0
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_eyes_panel">
+ <panel name="avatar_eye_color_panel">
+ <texture_picker label="Iris" name="Iris" tool_tip="Kliknij aby wybrać teksturę"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="eyes_main_tab" title="Oczy"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml b/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml
new file mode 100644
index 0000000000..8b16506d9c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_gloves_panel">
+ <panel name="avatar_gloves_color_panel">
+ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać teksturę"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="gloves_main_tab" title="Rękawiczki"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_hair.xml b/indra/newview/skins/default/xui/pl/panel_edit_hair.xml
new file mode 100644
index 0000000000..567ff10506
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_hair.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_hair_panel">
+ <panel name="avatar_hair_color_panel">
+ <texture_picker label="Tekstura" name="Texture" tool_tip="Kliknij aby wybrać teksturę"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="hair_color_tab" title="Kolor"/>
+ <accordion_tab name="hair_style_tab" title="Styl"/>
+ <accordion_tab name="hair_eyebrows_tab" title="Brwi"/>
+ <accordion_tab name="hair_facial_tab" title="Twarzy"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml b/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml
new file mode 100644
index 0000000000..f4ea9303aa
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_jacket_panel">
+ <panel name="avatar_jacket_color_panel">
+ <texture_picker label="Górny materiał" name="Upper Fabric" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Dolny materiał" name="Lower Fabric" tool_tip="Kliknij aby wybrać teksturę"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="jacket_main_tab" title="Kurtka"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pants.xml b/indra/newview/skins/default/xui/pl/panel_edit_pants.xml
new file mode 100644
index 0000000000..247d63c5a3
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_pants.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_pants_panel">
+ <panel name="avatar_pants_color_panel">
+ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="pants_main_tab" title="Spodnie"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
new file mode 100644
index 0000000000..22fb00671d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Edytuj Ulubione" name="panel_edit_pick">
+ <panel.string name="location_notice">
+ (aktualizacja nastÄ…pi po zapisaniu)
+ </panel.string>
+ <text name="title">
+ Edytuj Ulubione
+ </text>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <icon label="" name="edit_icon" tool_tip="Kliknij aby wybrać teksturę"/>
+ <text name="Name:">
+ Tytuł:
+ </text>
+ <text name="description_label">
+ Opis:
+ </text>
+ <text name="location_label">
+ Lokalizacja:
+ </text>
+ <text name="pick_location">
+ ładowanie...
+ </text>
+ <button label="Ustaw na bieżąca lokalizację" name="set_to_curr_location_btn"/>
+ </panel>
+ </scroll_container>
+ <panel label="bottom_panel" name="bottom_panel">
+ <button label="Zapisz obrazek" name="save_changes_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
index 97fa3118f8..edd7415751 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
@@ -1,45 +1,51 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
- <string name="CaptionTextAcctInfo">
- [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
- </string>
- <string name="AcctTypeResident"
- value="Rezydent" />
- <string name="AcctTypeTrial"
- value="Próbne" />
- <string name="AcctTypeCharterMember"
- value="Członek-zalożyciel" />
- <string name="AcctTypeEmployee"
- value="Pracownik Linden Lab" />
- <string name="PaymentInfoUsed"
- value="Dane Konta Używane" />
- <string name="PaymentInfoOnFile"
- value="Dane Konta Dostępne" />
- <string name="NoPaymentInfoOnFile"
- value="Brak Danych Konta" />
- <string name="AgeVerified"
- value="Wiek Zweryfikowany" />
- <string name="NotAgeVerified"
- value="Brak Weryfikacji Wieku" />
- <string name="partner_edit_link_url">
- http://www.secondlife.com/account/partners.php?lang=pl
- </string>
- <panel name="scroll_content_panel">
- <panel name="data_panel" >
- <panel name="lifes_images_panel">
- <panel name="second_life_image_panel">
- <text name="second_life_photo_title_text">
- [SECOND_LIFE]:
- </text>
- </panel>
- </panel>
- <text name="title_partner_text" value="Partner:"/>
- <panel name="partner_data_panel">
- <text name="partner_text" value="[FIRST] [LAST]"/>
- </panel>
- <text name="text_box3">
- Pracuś Mówi:
- </text>
- </panel>
- </panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Edycja profilu" name="edit_profile_panel">
+ <string name="CaptionTextAcctInfo">
+ [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+ </string>
+ <string name="RegisterDateFormat">
+ [REG_DATE] ([AGE])
+ </string>
+ <string name="AcctTypeResident" value="Rezydent"/>
+ <string name="AcctTypeTrial" value="Próbne"/>
+ <string name="AcctTypeCharterMember" value="Członek-zalożyciel"/>
+ <string name="AcctTypeEmployee" value="Pracownik Linden Lab"/>
+ <string name="PaymentInfoUsed" value="Dane konta używane"/>
+ <string name="PaymentInfoOnFile" value="Dane konta dostępne"/>
+ <string name="NoPaymentInfoOnFile" value="Brak danych konta"/>
+ <string name="AgeVerified" value="Wiek zweryfikowany"/>
+ <string name="NotAgeVerified" value="Brak weryfikacji wieku"/>
+ <string name="partner_edit_link_url">
+ http://www.secondlife.com/account/partners.php?lang=pl
+ </string>
+ <string name="no_partner_text" value="Żadne"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <panel name="data_panel">
+ <panel name="lifes_images_panel">
+ <icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij aby wybrać teksturę"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <text name="real_world_photo_title_text" value="Życie#1:"/>
+ </panel>
+ <icon label="" name="real_world_edit_icon" tool_tip="Kliknij aby wybrać teksturę"/>
+ <text name="title_homepage_text">
+ WWW:
+ </text>
+ <check_box label="Pokaż w wyszukiwarce" name="show_in_search_checkbox"/>
+ <text name="title_acc_status_text" value="Moje Konto:"/>
+ <text name="my_account_link" value="[[URL] idź do Dashboard]"/>
+ <text name="acc_status_text" value="Rezydent. Brak danych konta."/>
+ <text name="title_partner_text" value="Partner:"/>
+ <text name="partner_edit_link" value="[[URL] Edytuj]"/>
+ <panel name="partner_data_panel">
+ <text initial_value="(wyszukiwanie)" name="partner_text" value="[FIRST] [LAST]"/>
+ </panel>
+ </panel>
+ </panel>
+ </scroll_container>
+ <panel name="profile_me_buttons_panel">
+ <button label="Zapisz zmiany" name="save_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shape.xml b/indra/newview/skins/default/xui/pl/panel_edit_shape.xml
new file mode 100644
index 0000000000..3cacbd7fdd
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_shape.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_shape_panel">
+ <panel name="avatar_sex_panel">
+ <text name="gender_text">
+ Płeć:
+ </text>
+ <radio_group name="sex_radio">
+ <radio_item label="Kobieta" name="radio"/>
+ <radio_item label="Mężczyzna" name="radio2"/>
+ </radio_group>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="shape_body_tab" title="Ciało"/>
+ <accordion_tab name="shape_head_tab" title="Głowa"/>
+ <accordion_tab name="shape_eyes_tab" title="Oczy"/>
+ <accordion_tab name="shape_ears_tab" title="Uszy"/>
+ <accordion_tab name="shape_nose_tab" title="Nos"/>
+ <accordion_tab name="shape_mouth_tab" title="Usta"/>
+ <accordion_tab name="shape_chin_tab" title="Podbródek"/>
+ <accordion_tab name="shape_torso_tab" title="Tułów"/>
+ <accordion_tab name="shape_legs_tab" title="Nogi"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_shirt.xml
new file mode 100644
index 0000000000..27d8981e80
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_shirt.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_shirt_panel">
+ <panel name="avatar_shirt_color_panel">
+ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać grafikę"/>
+ <color_swatch label="Kolor/Odcień" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="shirt_main_tab" title="Spódnica"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml b/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml
new file mode 100644
index 0000000000..09eb1008e8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_shoes_panel">
+ <panel name="avatar_shoes_color_panel">
+ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="shoes_main_tab" title="Buty"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_skin.xml b/indra/newview/skins/default/xui/pl/panel_edit_skin.xml
new file mode 100644
index 0000000000..617aad8650
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_skin.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_skin_panel">
+ <panel name="avatar_skin_color_panel">
+ <texture_picker label="Tatuaż na głowie" name="Head Tattoos" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Górny tatuaż" name="Upper Tattoos" tool_tip="Kliknij aby wybrać teksturę"/>
+ <texture_picker label="Dolny tatuaż" name="Lower Tattoos" tool_tip="Kliknij aby wybrać teksturę"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="skin_color_tab" title="Kolor skórki"/>
+ <accordion_tab name="skin_face_tab" title="Szczegóły twarzy"/>
+ <accordion_tab name="skin_makeup_tab" title="Makijaż"/>
+ <accordion_tab name="skin_body_tab" title="Szczegóły budowy ciała"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml
new file mode 100644
index 0000000000..f89148ffac
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_skirt_panel">
+ <panel name="avatar_skirt_color_panel">
+ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="skirt_main_tab" title="Spódnica"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_socks.xml b/indra/newview/skins/default/xui/pl/panel_edit_socks.xml
new file mode 100644
index 0000000000..5481c73804
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_socks.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_socks_panel">
+ <panel name="avatar_socks_color_panel">
+ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="socks_main_tab" title="Skarpetki"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml
new file mode 100644
index 0000000000..b5e1828588
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_tattoo_panel">
+ <panel name="avatar_tattoo_color_panel">
+ <texture_picker label="Tatuaż głowy" name="Head Tattoo" tool_tip="Kliknij by wybrać grafikę"/>
+ <texture_picker label="Tatuaż górnej części ciała" name="Upper Tattoo" tool_tip="Kliknij by wybrać grafikę"/>
+ <texture_picker label="Tatuaż dolnej części ciała" name="Lower Tattoo" tool_tip="Kliknij by wybrać grafikę"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml b/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml
new file mode 100644
index 0000000000..94034aa8ab
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_underpants_panel">
+ <panel name="avatar_underpants_color_panel">
+ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać kolor"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="underpants_main_tab" title="Bielizna"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml
new file mode 100644
index 0000000000..72b72b76de
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="edit_undershirt_panel">
+ <panel name="avatar_undershirt_color_panel">
+ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/>
+ <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
+ </panel>
+ <accordion name="wearable_accordion">
+ <accordion_tab name="undershirt_main_tab" title="Podkoszulek"/>
+ </accordion>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
new file mode 100644
index 0000000000..cf17afea3f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ubranie/części ciała" name="panel_edit_wearable">
+ <string name="edit_shape_title">
+ Edycja kształtu
+ </string>
+ <string name="edit_skin_title">
+ Edycja skórki
+ </string>
+ <string name="edit_hair_title">
+ Edycja włosów
+ </string>
+ <string name="edit_eyes_title">
+ Edycja oczu
+ </string>
+ <string name="edit_shirt_title">
+ Edycja spódnicy
+ </string>
+ <string name="edit_pants_title">
+ Edycja spodni
+ </string>
+ <string name="edit_shoes_title">
+ Edycja butów
+ </string>
+ <string name="edit_socks_title">
+ Edycja skarpetek
+ </string>
+ <string name="edit_jacket_title">
+ Edycja kurtki
+ </string>
+ <string name="edit_skirt_title">
+ Edycja spódnicy
+ </string>
+ <string name="edit_gloves_title">
+ Edycja rękawiczek
+ </string>
+ <string name="edit_undershirt_title">
+ Edycja podkoszulki
+ </string>
+ <string name="edit_underpants_title">
+ Edycja bielizny
+ </string>
+ <string name="edit_alpha_title">
+ Edycja maski Alpha
+ </string>
+ <string name="edit_tattoo_title">
+ Edycja tatuażu
+ </string>
+ <string name="shape_desc_text">
+ Kształt:
+ </string>
+ <string name="skin_desc_text">
+ Skórka:
+ </string>
+ <string name="hair_desc_text">
+ Włosy:
+ </string>
+ <string name="eyes_desc_text">
+ Oczy:
+ </string>
+ <string name="shirt_desc_text">
+ Koszula:
+ </string>
+ <string name="pants_desc_text">
+ Spodnie:
+ </string>
+ <string name="shoes_desc_text">
+ Buty:
+ </string>
+ <string name="socks_desc_text">
+ Skarpetki:
+ </string>
+ <string name="jacket_desc_text">
+ Kurtka:
+ </string>
+ <string name="skirt_skirt_desc_text">
+ Spódnica:
+ </string>
+ <string name="gloves_desc_text">
+ Rękawiczki:
+ </string>
+ <string name="undershirt_desc_text">
+ Podkoszulek:
+ </string>
+ <string name="underpants_desc_text">
+ Bielizna:
+ </string>
+ <string name="alpha_desc_text">
+ Maska Alpha:
+ </string>
+ <string name="tattoo_desc_text">
+ Tatuaż:
+ </string>
+ <text name="edit_wearable_title" value="Edycja Kształtu"/>
+ <panel label="Koszula" name="wearable_type_panel">
+ <text name="description_text" value="Kształt:"/>
+ </panel>
+ <panel name="button_panel">
+ <button label="Zapisz" name="save_as_button"/>
+ <button label="Wróć" name="revert_button"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_friends.xml b/indra/newview/skins/default/xui/pl/panel_friends.xml
index b6df36f199..fca0dad380 100644
--- a/indra/newview/skins/default/xui/pl/panel_friends.xml
+++ b/indra/newview/skins/default/xui/pl/panel_friends.xml
@@ -1,27 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="friends">
<string name="Multiple">
- Znajomi...
+ Znajomi
</string>
- <scroll_list name="friend_list"
- tool_tip="By wybrać wielu znajomych za jednym razem przetrzymaj klawisz shift lub control">
- <column name="icon_online_status" tool_tip="Status dostępności" />
- <column label="ImiÄ™" name="friend_name" tool_tip="ImiÄ™" />
- <column name="icon_visible_online"
- tool_tip="Ta osoba może widzieć czy jesteś w Second Life" />
- <column name="icon_visible_map"
- tool_tip="Ta osoba może zlokalizować Cię na mapie" />
- <column name="icon_edit_mine"
- tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty" />
- <column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby" />
+ <scroll_list name="friend_list" tool_tip="By wybrać wielu znajomych za jednym razem przetrzymaj klawisz shift lub control">
+ <column name="icon_online_status" tool_tip="Status dostępności"/>
+ <column label="ImiÄ™" name="friend_name" tool_tip="ImiÄ™"/>
+ <column name="icon_visible_online" tool_tip="Ta osoba może widzieć czy jesteś w Second Life"/>
+ <column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Cię na mapie"/>
+ <column name="icon_edit_mine" tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty"/>
+ <column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby"/>
</scroll_list>
- <button label="Czat/IM" name="im_btn" tool_tip="Rozpocznij sesjÄ™ czatu/IM" />
- <button label="Profil" name="profile_btn"
- tool_tip="Pokaż zdjęcia, grupy i inne informacje" />
- <button label="Teleportuj..." name="offer_teleport_btn"
- tool_tip="Zaoferuj teleportacjÄ™ do siebie" />
- <button label="Zapłać..." name="pay_btn" tool_tip="Zapłać L$ tej osobie" />
- <button label="Usuń..." name="remove_btn"
- tool_tip="Usuń tę osobę z listy znajomych" />
- <button label="Dodaj..." name="add_btn" tool_tip="Zaproponuj znajomość" />
+ <button label="Czat/IM" name="im_btn" tool_tip="Rozpocznij sesjÄ™ czatu/IM"/>
+ <button label="Profil" name="profile_btn" tool_tip="Pokaż zdjęcia, grupy i inne informacje"/>
+ <button label="Teleportuj" name="offer_teleport_btn" tool_tip="Zaoferuj teleportacjÄ™ do siebie"/>
+ <button label="Zapłać" name="pay_btn" tool_tip="Zapłać L$ tej osobie"/>
+ <button label="Usuń" name="remove_btn" tool_tip="Usuń tę osobę z listy znajomych"/>
+ <button label="Dodaj" name="add_btn" tool_tip="Zaoferuj znajomość"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml
new file mode 100644
index 0000000000..b57ec8f2e6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml
@@ -0,0 +1,17 @@
+<?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="Grupa" name="group_info_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Dzwoń" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Zakończ Rozmowę" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Przełączniki Głosu" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_general.xml b/indra/newview/skins/default/xui/pl/panel_group_general.xml
index d09ff72226..67fa0bf085 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_general.xml
@@ -1,70 +1,55 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Ogólne" name="general_tab">
- <string name="help_text">
- Zakładka Ogólne zawiera informacje na temat tej grupy, listę właścicieli, widocznych członków, ustawienia grupy oraz opcje członkostwa.
- </string>
- <string name="group_info_unchanged">
+ <panel.string name="help_text">
+ Zakładka Główne zawiera ogólne informacje na temat tej grupy, ustawień dla całej grupy oraz danego członka.
+
+By otrzymać pomoc i dodatkowe wskazówki przesuń kursor na przyciski.
+ </panel.string>
+ <panel.string name="group_info_unchanged">
Ogólne informacje na temat grupy uległy zmianie.
- </string>
- <button label="?" label_selected="?" name="help_button"/>
- <line_editor label="Wpisz nazwÄ™ grupy tutaj" name="group_name_editor"/>
- <text name="group_name">
- Wpisz nazwÄ™ grupy tutaj
- </text>
- <text name="prepend_founded_by">
- Założyciel:
- </text>
- <text name="founder_name">
- (proszę czekać)
- </text>
- <text name="group_charter_label">
- Status Grupy
- </text>
- <texture_picker label="Insygnia Grupy" name="insignia" tool_tip="Kliknij by wybrać zdjęcie"/>
+ </panel.string>
+ <panel.string name="incomplete_member_data_str">
+ Wyszukiwanie informacji o członku
+ </panel.string>
+ <panel name="group_info_top">
+ <texture_picker label="" name="insignia" tool_tip="Kliknij by wybrać obraz"/>
+ <text name="prepend_founded_by">
+ Założyciel:
+ </text>
+ <name_box initial_value="(przetwarzanie)" name="founder_name"/>
+ <text name="join_cost_text">
+ Wstęp wolny
+ </text>
+ <button label="DOÅÄ„CZ TERAZ!" name="btn_join"/>
+ </panel>
<text_editor name="charter">
Status Grupy
</text_editor>
- <button label="Dołącz (L$0)" label_selected="Dołącz (L$0)" name="join_button"/>
- <button label="Szczegóły" label_selected="Szczegóły" name="info_button"/>
- <text name="text_owners_and_visible_members">
- Właściciele i widoczni członkowie
- </text>
- <text name="text_owners_are_shown_in_bold">
- (Właściciele wyświetlają się pogrubioną czcionką)
- </text>
<name_list name="visible_members">
- <name_list.columns label="ImiÄ™" name="name"/>
+ <name_list.columns label="Członek" name="name"/>
<name_list.columns label="Tytuł" name="title"/>
- <name_list.columns label="Ostatnio w SL" name="online"/>
+ <name_list.columns label="Status" name="status"/>
</name_list>
- <text name="text_group_preferences">
- Ustawienia Grupy
+ <text name="my_group_settngs_label">
+ ja
</text>
+ <text name="active_title_label">
+ Mój Aktywny Tytuł:
+ </text>
+ <combo_box name="active_title" tool_tip="Ustaw tytuł który wyświetla się kiedy grupa jest aktywna."/>
+ <check_box label="Otrzymuj grupowe ogłoszenia" name="receive_notices" tool_tip="Zaznacz jeżeli chcesz otrzymywać ogłoszenia z tej grupy. Anuluj z zaznaczenia, jeżeli nie chcesz otrzymywać żadnych ogłoszeń z tej grupy."/>
+ <check_box label="Wyświetl grupę w profilu" name="list_groups_in_profile" tool_tip="Zaznacz jeżeli chcesz by grupa wyświetlała się w Twoim profilu"/>
<panel name="preferences_container">
- <check_box label="Wyświetlaj w wyszukiwarce" name="show_in_group_list" tool_tip="Udostępnij info o grupie w wyszukiwarce"/>
- <check_box label="Wolny Wstęp" name="open_enrollement" tool_tip="Sprawdź czy grupa oferuje wolny wstęp i nie wymaga zaproszenia."/>
- <check_box label="Opłata Wstępu:" name="check_enrollment_fee" tool_tip="Ustaw opłatę za przyłączenie się do grupy."/>
- <spinner name="spin_enrollment_fee" tool_tip="Nowi członkowie grupy muszą zapłacić wymaganą opłatę by dołączyć do grupy."/>
+ <text name="group_settngs_label">
+ Grupa
+ </text>
+ <check_box label="Wolny wstęp" name="open_enrollement" tool_tip="Sprawdź czy grupa oferuje wolny wstęp i nie wymaga zaproszenia."/>
+ <check_box label="Opłata wstępu" name="check_enrollment_fee" tool_tip="Ustaw opłatę za przyłączenie się do grupy."/>
+ <spinner label="L$" name="spin_enrollment_fee" tool_tip="Nowi członkowie grupy muszą zapłacić wymaganą opłatę by dołączyć do grupy."/>
<combo_box name="group_mature_check" tool_tip="Wybierz jeżeli uważasz, iż Twoja grupa klasyfikowana jest jako &apos;Mature&apos;.">
- <combo_box.item name="select_mature" label="- Wybierz Treść -"/>
- <combo_box.item name="mature" label="Treść &apos;Mature&apos;"/>
- <combo_box.item name="pg" label="Treść &apos;PG&apos;"/>
+ <combo_box.item label="Treść &apos;PG&apos;" name="pg"/>
+ <combo_box.item label="Treść &apos;Mature&apos;" name="mature"/>
</combo_box>
- <panel name="title_container">
- <text name="active_title_label">
- Mój Aktywny Tytuł
- </text>
- <combo_box name="active_title" tool_tip="Ustaw tytuł który wyświetla się kiedy grupa jest aktywna."/>
- </panel>
- <check_box label="Otrzymuj grupowe ogłoszenia" name="receive_notices" tool_tip="Zaznacz jeżeli chcesz otrzymywać ogłoszenia z tej grupy. Anuluj z zaznaczenia, jeżeli nie chcesz otrzymywać żadnych ogłoszeń z tej grupy."/>
- <check_box label="Wyświetl grupę w profilu" name="list_groups_in_profile" tool_tip="Zaznacz jeżeli chcesz by grupa wyświetlała się w Twoim profilu"/>
+ <check_box initial_value="true" label="Wyświetlaj w wyszukiwarce" name="show_in_group_list" tool_tip="Udostępnij info o grupie w wyszukiwarce"/>
</panel>
- <string name="incomplete_member_data_str">
- Wyszukiwanie informacji o członku
- </string>
- <string name="confirm_group_create_str">
- Koszt utworzenia tej grupy wynosi L$100.
-Czy napewno jesteś PEWNY,że chcesz zapłacić L$100 by utworzyć grupę?
-Pamiętaj, jeżeli w ciągu 48h od utworzenia grupy nikt do niej nie dołączy, informacje o grupie zostaną usunięte z bazy, a nazwa grupy zablokowana do użycia w przyszłości.
- </string>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
new file mode 100644
index 0000000000..509c2893cf
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="O Grupie" name="GroupInfo">
+ <panel.string name="default_needs_apply_text">
+ Nie zapisałeś zmian
+ </panel.string>
+ <panel.string name="want_apply_text">
+ Czy chcesz zachować te zmiany?
+ </panel.string>
+ <panel.string name="group_join_btn">
+ Dołącz (L$[AMOUNT])
+ </panel.string>
+ <panel.string name="group_join_free">
+ Darmowe
+ </panel.string>
+ <panel name="group_info_top">
+ <text name="group_name" value="(Åadowanie...)"/>
+ <line_editor label="Wpisz nazwÄ™ swojej nowej grupy tutaj" name="group_name_editor"/>
+ </panel>
+ <layout_stack name="layout">
+ <layout_panel name="group_accordions">
+ <accordion name="groups_accordion">
+ <accordion_tab name="group_general_tab" title="Ogólne"/>
+ <accordion_tab name="group_roles_tab" title="Funkcja"/>
+ <accordion_tab name="group_notices_tab" title="Notki"/>
+ <accordion_tab name="group_land_tab" title="Posiadlość/Majątek"/>
+ </accordion>
+ </layout_panel>
+ <layout_panel name="button_row">
+ <button label="Czat" name="btn_chat"/>
+ <button label="Konferencja Głosowa" name="btn_call" tool_tip="Konferencja Głosowa"/>
+ <button label="Zapisz" label_selected="Zapisz" name="btn_apply"/>
+ <button label="Stwórz nową Grupę" name="btn_create" tool_tip="Stwórz nową Grupę"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_invite.xml b/indra/newview/skins/default/xui/pl/panel_group_invite.xml
index 12d48279ad..e520c06944 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_invite.xml
@@ -1,23 +1,27 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Zaproszenie do Grupy" name="invite_panel">
+ <panel.string name="confirm_invite_owner_str">
+ Jesteś pewny, że chcesz wybrać nowych właścieli grupy? Ta decyzja jest ostateczna!
+ </panel.string>
+ <panel.string name="loading">
+ (ładowanie...)
+ </panel.string>
+ <panel.string name="already_in_group">
+ Niektórzy Rezydenci, których wybrałeś już należą do grupy i nie otrzymali zaproszenia.
+ </panel.string>
<text name="help_text">
- Możesz zaprosić kilku Rezydentów
-do swojej grupy. Wybierz &apos;Otwórz
-Katalog Osobisty&apos; by rozpocząć.
+ Możesz zaprosić kilku Rezydentów do swojej grupy. Wybierz &apos;Otwórz Katalog Osobisty&apos; aby rozpocząć.
</text>
<button label="Otwórz Katalog Osobisty" name="add_button" tool_tip=""/>
- <name_list name="invitee_list" tool_tip="" />
- <button label="Usuń z Listy" name="remove_button" tool_tip="" />
+ <name_list name="invitee_list" tool_tip="Przytrzymaj klawisz Ctrl i kliknij imię Rezydenta aby wybrać kilka osób."/>
+ <button label="Usuń z Listy" name="remove_button" tool_tip="Usuwa wybranych powyżej Rezydentów z listy zaproszeń."/>
<text name="role_text">
Wybierz rolę dla nowego członka:
</text>
- <combo_box name="role_name" tool_tip="" />
- <button label="Wyślij Zaproszenia" name="ok_button" />
- <button label="Anuluj" name="cancel_button" />
- <string name="confirm_invite_owner_str">
- Jesteś pewny, że chcesz wybrać nowych właścieli grupy? Ta decyzja jest ostateczna!
- </string>
- <string name="loading">
- (loading...)
+ <combo_box name="role_name" tool_tip="Wybierz z listy Role, które możesz przypisać Członkom"/>
+ <button label="Wyślij Zaproszenia" name="ok_button"/>
+ <button label="Anuluj" name="cancel_button"/>
+ <string name="GroupInvitation">
+ Zaproszenie do Grupy
</string>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
index dbfa8e3122..a52b7f7745 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
@@ -1,84 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Posiadłości i L$" name="land_money_tab">
- <string name="help_text">
- Posiadłości, które są własnością grupy zawierają dane poszczególnych kontrybucji ich członków. W przypadku kiedy całkowita ilość metrów przypisanej danej posiadłości przez grupę jest mniejsza lub równa całkowitej liczbie kontrybucji dla przypisanej ilości metrów pojawia się ostrzeżenie. Zakładki: Planowanie, Szczegóły oraz Sprzedaże udostępniają informacje na temat statusu finansowego grupy.
- </string>
- <button label="?" name="help_button"/>
- <string name="cant_view_group_land_text">
+ <panel.string name="help_text">
+ Ostrzeżenie pojawia siÄ™ kiedy ÅÄ…czna Powierzchnia PosiadÅ‚oÅ›ci jest mniejsza lub = Kontrybucjom
+ </panel.string>
+ <panel.string name="cant_view_group_land_text">
Nie masz pozwolenia na oglądanie Posiadłości Grupy.
- </string>
- <string name="cant_view_group_accounting_text">
+ </panel.string>
+ <panel.string name="cant_view_group_accounting_text">
Nie masz dostępu do konta, finansów Grupy.
- </string>
- <string name="loading_txt">
+ </panel.string>
+ <panel.string name="loading_txt">
Åadowanie...
- </string>
- <text name="group_land_heading">
- Posiadłości Grupy
- </text>
- <scroll_list name="group_parcel_list">
- <column label="Posiadłości" name="name"/>
- <column label="Region" name="location"/>
- <column label="Typ" name="type"/>
- <column label="Obszar" name="area"/>
- <column label="" name="hidden"/>
- </scroll_list>
- <button label="Pokaż na Mapie" label_selected="Pokaż na Mapie" name="map_button"/>
- <text name="total_contributed_land_label">
- Kontrybucje:
- </text>
- <text name="total_contributed_land_value">
- [AREA] metrów
- </text>
- <text name="total_land_in_use_label">
- Używane Posiadłości:
- </text>
- <text name="total_land_in_use_value">
- [AREA] metrów
- </text>
- <text name="land_available_label">
- Dostępne Posiadłości:
- </text>
- <text name="land_available_value">
- [AREA] metrów
- </text>
- <text name="your_contribution_label">
- Twoje Kontrybucje:
- </text>
- <string name="land_contrib_error">
+ </panel.string>
+ <panel.string name="land_contrib_error">
Nie można ustalić Twoich kontrybucji.
- </string>
- <text name="your_contribution_units">
- ( m )
- </text>
- <text name="your_contribution_max_value">
- ([AMOUNT] maksimum)
- </text>
- <text name="group_over_limit_text">
- Członkowie Grupy muszą zwiększyć kredyt na używanie Posiadłości.
- </text>
- <text name="group_money_heading">
- L$ Grupy
- </text>
+ </panel.string>
+ <panel name="layout_panel_landmoney">
+ <scroll_list name="group_parcel_list">
+ <scroll_list.columns label="Posiadłość" name="name"/>
+ <scroll_list.columns label="Region" name="location"/>
+ <scroll_list.columns label="Typ" name="type"/>
+ <scroll_list.columns label="Obszar" name="area"/>
+ </scroll_list>
+ <text name="total_contributed_land_label">
+ Kontrybucje:
+ </text>
+ <text name="total_contributed_land_value">
+ [AREA] m²
+ </text>
+ <button label="Mapa" label_selected="Mapa" name="map_button"/>
+ <text name="total_land_in_use_label">
+ Używane Posiadłości:
+ </text>
+ <text name="total_land_in_use_value">
+ [AREA] m²
+ </text>
+ <text name="land_available_label">
+ Dostępne Posiadłości:
+ </text>
+ <text name="land_available_value">
+ [AREA] m²
+ </text>
+ <text name="your_contribution_label">
+ Twoje Kontrybucje:
+ </text>
+ <text name="your_contribution_units">
+ m²
+ </text>
+ <text name="your_contribution_max_value">
+ ([AMOUNT] max)
+ </text>
+ <text name="group_over_limit_text">
+ Należy zwięszyć kredyt na używanie Posiadłości.
+ </text>
+ <text name="group_money_heading">
+ L$ Grupy
+ </text>
+ </panel>
<tab_container name="group_money_tab_container">
- <panel label="Planowanie" name="group_money_planning_tab">
+ <panel label="PLANOWANIE" name="group_money_planning_tab">
<text_editor name="group_money_planning_text">
- Obliczanie...
+ Åadowanie...
</text_editor>
</panel>
- <panel label="Szczegóły" name="group_money_details_tab">
+ <panel label="SZCZEGÓÅY" name="group_money_details_tab">
<text_editor name="group_money_details_text">
- Obliczanie...
+ Åadowanie...
</text_editor>
- <button label="&lt; Wcześniej" label_selected="&lt; Wcześniej" name="earlier_details_button" tool_tip="Do tyłu w czasie"/>
- <button label="Później &gt;" label_selected="Później &gt;" name="later_details_button" tool_tip="Do przodu w czasie"/>
+ <button label="&lt; Wcześniej" label_selected="&lt; Wcześniej" name="earlier_details_button" tool_tip="Wcześniej"/>
+ <button label="Później &gt;" label_selected="Później &gt;" name="later_details_button" tool_tip="Później"/>
</panel>
- <panel label="Sprzedaż" name="group_money_sales_tab">
+ <panel label="SPRZEDAÅ»" name="group_money_sales_tab">
<text_editor name="group_money_sales_text">
- Obliczanie...
+ Åadowanie...
</text_editor>
- <button label="&lt; Wcześniej" label_selected="&lt; Wcześniej" name="earlier_sales_button" tool_tip="Do tyłu w czasie"/>
- <button label="Później &gt;" label_selected="Później &gt;" name="later_sales_button" tool_tip="Do przodu w czasie"/>
+ <button label="&lt; Wcześniej" label_selected="&lt; Wcześniej" name="earlier_sales_button" tool_tip="Wcześniej"/>
+ <button label="Później &gt;" label_selected="Później &gt;" name="later_sales_button" tool_tip="Później"/>
</panel>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_list_item.xml b/indra/newview/skins/default/xui/pl/panel_group_list_item.xml
new file mode 100644
index 0000000000..a8b4056976
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_group_list_item.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="group_list_item">
+ <text name="group_name" value="Nieznana"/>
+ <button name="profile_btn" tool_tip="Zobacz profil"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_notices.xml b/indra/newview/skins/default/xui/pl/panel_group_notices.xml
index 1c19571ec0..31882ab0e6 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_notices.xml
@@ -1,38 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Ogłoszenia" name="notices_tab">
- <string name="help_text">
+ <panel.string name="help_text">
Ogłoszenia to szybka droga do komunikowania się ze wszystkmi członkami grupy poprzez wysylanie ich na grupowym kanale. Dodatkowo, do ogłoszenia można dołańczać załączniki. Ogłoszenia docierają jedynie do członków grupy, którzy mają zdolność ich otrzymywania. By nie otrzymywać ogłoszeń, w zakładce Ogólne pozostaw niezaznaczonym &quot;Otrzymuj grupowe ogłoszenia&quot;.
- </string>
- <string name="no_notices_text">
+ </panel.string>
+ <panel.string name="no_notices_text">
Brak przeszłych ogłoszeń
- </string>
- <button label="?" label_selected="?" name="help_button" />
- <text name="lbl">
- Archiwum Grupowych Ogłoszeń
- </text>
+ </panel.string>
<text name="lbl2">
- Ogłoszenia przechowywane są przez 14 dni.
+ Ogłoszenia przechowywane są przez 14 dni.
Limit dzienny ogłoszeń dla grupy wynosi 200.
</text>
<scroll_list name="notice_list">
- <column label="" name="icon" />
- <column label="Temat" name="subject" />
- <column label="Autor" name="from" />
- <column label="Data" name="date" />
+ <scroll_list.columns label="" name="icon"/>
+ <scroll_list.columns label="Temat" name="subject"/>
+ <scroll_list.columns label="Autor" name="from"/>
+ <scroll_list.columns label="Data" name="date"/>
</scroll_list>
<text name="notice_list_none_found">
- Nie znalezione.
+ Nie znaleziono
</text>
- <button label="Stwórz Nowe Ogłoszenie" label_selected="Stwórz Nowe Ogłoszenie"
- name="create_new_notice" />
- <button label="Odśwież" label_selected="Odśwież Listę" name="refresh_notices" />
+ <button label="Stwórz Ogłoszenie" label_selected="Stwórz Nowe Ogłoszenie" name="create_new_notice" tool_tip="Stwórz Ogłoszenie"/>
+ <button label="Odśwież" label_selected="Odśwież Listę" name="refresh_notices" tool_tip="Użyj Odśwież by zobaczyć czy nowe ogłoszenia zostały wysłane."/>
<panel label="Stwórz Nowe Ogłoszenie" name="panel_create_new_notice">
<text name="lbl">
Stwórz Ogłoszenie
</text>
- <text name="lbl2">
- Możesz także dołączyć pojedynczy załącznik ze swojej szafy. Załącznik musi mieć prawo modyfikacyjne do kopiowania oraz transferu.
- </text>
<text name="lbl3">
Temat:
</text>
@@ -42,17 +34,19 @@ Limit dzienny ogłoszeń dla grupy wynosi 200.
<text name="lbl5">
Załącz:
</text>
- <button label="Usuń Załącznik" label_selected="Usuń Załącznik"
- name="remove_attachment" />
- <button label="Wyślij" label_selected="Wyślij" name="send_notice" />
- <panel name="drop_target" tool_tip="" />
+ <text name="string">
+ Przeciągnij i upuść załącznik tutaj aby go dodać:
+ </text>
+ <button label="Usuń załącznik" label_selected="Usuń Załącznik" name="remove_attachment" tool_tip="Usuń załącznik z noty"/>
+ <button label="Wyślij" label_selected="Wyślij" name="send_notice"/>
+ <group_drop_target name="drop_target" tool_tip="Przeciągnij załącznik ze swojej Szafy na pole docelowe aby wysłać go z Ogłoszeniem. Musisz posiadać prawo do kopiowania i transferu załącznika aby go dodać do ogłoszenia."/>
</panel>
- <panel label="Zobacz Przeszłe Ogłoszenia" name="panel_view_past_notice">
+ <panel label="Zobacz przeszłe Ogłoszenia" name="panel_view_past_notice">
<text name="lbl">
- Ogłoszenia Zachowane
+ Ogłoszenia zachowane
</text>
<text name="lbl2">
- By wysłać nowe ogłoszenie, kliknij Stwórz Nowe Ogłoszenie.
+ W celu wysłania nowego ogłoszenia kliknij przycisk +
</text>
<text name="lbl3">
Temat:
@@ -60,7 +54,6 @@ Limit dzienny ogłoszeń dla grupy wynosi 200.
<text name="lbl4">
Treść:
</text>
- <button label="Otwórz Załącznik" label_selected="Otwórz Załącznik"
- name="open_attachment" />
+ <button label="Otwórz Załącznik" label_selected="Otwórz Załącznik" name="open_attachment"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_notify.xml b/indra/newview/skins/default/xui/pl/panel_group_notify.xml
new file mode 100644
index 0000000000..d81c3f68f2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_group_notify.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="instant_message" name="panel_group_notify">
+ <panel label="header" name="header">
+ <text name="title" value="ImiÄ™ Nadawcy / Nazwa Grupy"/>
+ </panel>
+ <text name="attachment" value="Załącznik"/>
+ <button label="OK" name="btn_ok"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_roles.xml b/indra/newview/skins/default/xui/pl/panel_group_roles.xml
index dd46b4aeaa..8a422e2586 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_roles.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Członkowie" name="roles_tab">
<panel.string name="default_needs_apply_text">
- Zakładka zawiera niezapisane zmiany
+ Panel zawiera niezapisane zmiany.
</panel.string>
<panel.string name="want_apply_text">
Czy chcesz zapisać zmiany?
@@ -16,7 +16,7 @@ Możesz wybrać wielu Członków naciskając Ctrl i klikając na ich imionach.
<name_list name="member_list">
<name_list.columns label="Członek" name="name"/>
<name_list.columns label="Dotacje" name="donated"/>
- <name_list.columns label="Ostatnio w SL" name="online"/>
+ <name_list.columns label="Status" name="online"/>
</name_list>
<button label="ZaproÅ› do Grupy" name="member_invite"/>
<button label="Usuń z Grupy" name="member_eject"/>
@@ -29,7 +29,7 @@ jedną lub wiele funkcji. Każda grupa może posiadać maksymalnie 10 funkcji,
łącznie z funkcją Każdy i Właściciel.
</panel.string>
<panel.string name="cant_delete_role">
- Specjalne Funkcje Każdy i Właściciel nie mogą zostać usunięte.
+ Funkcje &quot;Wszyscy&quot; oraz &quot;Właściciele&quot; są domyślnie oraz nie mogą zostać usunięte.
</panel.string>
<panel.string name="power_folder_icon">
Inv_FolderClosed
@@ -38,7 +38,7 @@ jedną lub wiele funkcji. Każda grupa może posiadać maksymalnie 10 funkcji,
<scroll_list name="role_list">
<scroll_list.columns label="Funkcja" name="name"/>
<scroll_list.columns label="Tytuł" name="title"/>
- <scroll_list.columns label="Liczba" name="members"/>
+ <scroll_list.columns label="#" name="members"/>
</scroll_list>
<button label="Stwórz Nową Funkcję" name="role_create"/>
<button label="Usuń Funkcję" name="role_delete"/>
@@ -57,7 +57,7 @@ Istnieje wiele Przywilei.
</tab_container>
<panel name="members_footer">
<text name="static">
- Funkcje
+ Przywileje
</text>
<scroll_list name="member_assigned_roles">
<scroll_list.columns label="" name="checkbox"/>
@@ -73,13 +73,13 @@ Istnieje wiele Przywilei.
</panel>
<panel name="roles_footer">
<text name="static">
- Nazwa
+ Nazwa Funkcji
</text>
<line_editor name="role_name">
Liczba
</line_editor>
<text name="static3">
- Tytuł
+ Nazwa Funkcji
</text>
<line_editor name="role_title">
(proszę czekać)
diff --git a/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml
new file mode 100644
index 0000000000..ffd75994cb
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+ <layout_stack name="button_stack">
+ <layout_panel name="view_profile_btn_panel">
+ <button label="Profil" name="view_profile_btn"/>
+ </layout_panel>
+ <layout_panel name="add_friend_btn_panel">
+ <button label="Poznaj" name="add_friend_btn"/>
+ </layout_panel>
+ <layout_panel name="teleport_btn_panel">
+ <button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj"/>
+ </layout_panel>
+ <layout_panel name="share_btn_panel">
+ <button label="Udostępnij" name="share_btn"/>
+ </layout_panel>
+ <layout_panel name="pay_btn_panel">
+ <button label="Zapłać" name="pay_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Dzwoń" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Zakończ Rozmowę" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Przełączniki Głosu" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml
new file mode 100644
index 0000000000..64479176fa
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="landmark_info">
+ <string name="title_create_landmark" value="Zapamiętaj Miejsce"/>
+ <string name="title_edit_landmark" value="Edytuj Zapamiętane Miejsce"/>
+ <string name="title_landmark" value="Zapamiętane Miejsce (LM)"/>
+ <string name="not_available" value="(N\A)"/>
+ <string name="unknown" value="(nieznane)"/>
+ <string name="public" value="(publiczne)"/>
+ <string name="server_update_text">
+ Informacje o miejscu nie są dostępne bez aktualizacji serwera.
+ </string>
+ <string name="server_error_text">
+ Informacje o miejscu nie są dostępne w tej chwili. Prosimy sprobować później.
+ </string>
+ <string name="server_forbidden_text">
+ Informacje o miejscu są niedostępne z powodu braku dostępu. Prosimy sprawdzić swoje prawa z właścicielem posiadłości.
+ </string>
+ <string name="acquired_date">
+ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+ </string>
+ <button name="back_btn" tool_tip="Cofnij"/>
+ <text name="title" value="Profil Miejsca"/>
+ <scroll_container name="place_scroll">
+ <panel name="scrolling_panel">
+ <text name="maturity_value" value="nieznany"/>
+ <panel name="landmark_info_panel">
+ <text name="owner_label" value="Właściciel:"/>
+ <text name="creator_label" value="Twórca:"/>
+ <text name="created_label" value="Stworzone:"/>
+ </panel>
+ <panel name="landmark_edit_panel">
+ <text name="title_label" value="Tytuł:"/>
+ <text name="notes_label" value="Moje notatki:"/>
+ <text name="folder_label" value="Lokalizacja zapisanego miejsca:"/>
+ </panel>
+ </panel>
+ </scroll_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_landmarks.xml b/indra/newview/skins/default/xui/pl/panel_landmarks.xml
new file mode 100644
index 0000000000..dcc495b5a8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_landmarks.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="Landmarks">
+ <accordion name="landmarks_accordion">
+ <accordion_tab name="tab_favorites" title="Ulubione"/>
+ <accordion_tab name="tab_landmarks" title="Landmarki"/>
+ <accordion_tab name="tab_inventory" title="Moja Szafa"/>
+ <accordion_tab name="tab_library" title="Biblioteka"/>
+ </accordion>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Pokaż dodatkowe opcje"/>
+ <button name="add_btn" tool_tip="Dodaj nowy landmark"/>
+ <dnd_button name="trash_btn" tool_tip="Usuń zaznaczony landmark"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_login.xml b/indra/newview/skins/default/xui/pl/panel_login.xml
index cec7e34da5..6b0061926b 100644
--- a/indra/newview/skins/default/xui/pl/panel_login.xml
+++ b/indra/newview/skins/default/xui/pl/panel_login.xml
@@ -6,33 +6,29 @@
<panel.string name="forgot_password_url">
http://secondlife.com/account/request.php
</panel.string>
- <panel name="login_widgets">
- <text name="first_name_text">
- ImiÄ™:
- </text>
- <line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] ImiÄ™"/>
- <text name="last_name_text">
- Nazwisko
- </text>
- <line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] Nazwisko"/>
- <text name="password_text">
- Hasło:
- </text>
- <button label="Zaloguj" label_selected="Zaloguj" name="connect_btn"/>
- <text name="start_location_text">
- Miejsce Startu:
- </text>
- <combo_box name="start_location_combo">
- <combo_box.item label="Moje Ostatnie Miejsce" name="MyLastLocation"/>
- <combo_box.item label="Moje Miejsce Startu" name="MyHome"/>
- <combo_box.item label="&lt;Wpisz nazwÄ™ regionu&gt;" name="Typeregionname"/>
- </combo_box>
- <check_box label="Zapamiętaj Hasło" name="remember_check"/>
- <text name="create_new_account_text">
- Załóż Nowe Konto
- </text>
- <text name="forgot_password_text">
- Nie pamiętasz swojego imienia lub hasła?
- </text>
- </panel>
+ <layout_stack name="login_widgets">
+ <layout_panel name="login">
+ <text name="first_name_text">
+ ImiÄ™:
+ </text>
+ <line_editor label="ImiÄ™" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/>
+ <line_editor label="Nazwisko" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/>
+ <check_box label="Zapamiętaj Hasło" name="remember_check"/>
+ <text name="start_location_text">
+ Rozpocznij w:
+ </text>
+ <combo_box name="start_location_combo">
+ <combo_box.item label="Moje Miejsce Startu" name="MyHome"/>
+ </combo_box>
+ <button label="Połącz" name="connect_btn"/>
+ </layout_panel>
+ <layout_panel name="links">
+ <text name="create_new_account_text">
+ Utwórz nowe konto
+ </text>
+ <text name="login_help">
+ Potrzebujesz pomocy z logowaniem siÄ™?
+ </text>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_main_inventory.xml b/indra/newview/skins/default/xui/pl/panel_main_inventory.xml
index e34fd69671..e0d9def8b3 100644
--- a/indra/newview/skins/default/xui/pl/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/panel_main_inventory.xml
@@ -1,26 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Rzeczy" name="main inventory panel">
- <panel.string name="Title">
- Rzeczy
+ <panel.string name="ItemcountFetching">
+ Dostarczanie [ITEM_COUNT] obiektów... [FILTER]
</panel.string>
- <filter_editor label="Filtr" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="Wszystkie Obiekty" name="All Items"/>
- <inventory_panel label="Ostatnio Dodane Obiekty" name="Recent Items"/>
- </tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Pokaż dodatkowe opcje"/>
- <button name="add_btn" tool_tip="Dodaj nowy obiekt"/>
- <dnd_button name="trash_btn" tool_tip="Usuń wybrany obiekt"/>
- </panel>
+ <panel.string name="ItemcountCompleted">
+ [ITEM_COUNT] obiekty [FILTER]
+ </panel.string>
+ <text name="ItemcountText">
+ Obiekty:
+ </text>
<menu_bar name="Inventory Menu">
<menu label="Plik" name="File">
<menu_item_call label="Otwórz" name="Open"/>
<menu label="Załaduj" name="upload">
- <menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/>
- <menu_item_call label="Dźwięk (L$[COST])..." name="Upload Sound"/>
- <menu_item_call label="AnimacjÄ™ (L$[COST])..." name="Upload Animation"/>
- <menu_item_call label="Zbiór Plików (L$[COST] za jeden plik)..." name="Bulk Upload"/>
+ <menu_item_call label="obraz (L$[COST])..." name="Upload Image"/>
+ <menu_item_call label="dźwięk (L$[COST])..." name="Upload Sound"/>
+ <menu_item_call label="animacjÄ™ (L$[COST])..." name="Upload Animation"/>
+ <menu_item_call label="zbiór plików (L$[COST] za jeden plik)..." name="Bulk Upload"/>
</menu>
<menu_item_call label="Nowe Okno" name="New Window"/>
<menu_item_call label="Pokaż Filtry" name="Show Filters"/>
@@ -30,35 +26,45 @@
<menu_item_call label="Opróżnij Folder Zgubione i Znalezione" name="Empty Lost And Found"/>
</menu>
<menu label="Stwórz" name="Create">
- <menu_item_call label="Nowy Folder" name="New Folder"/>
- <menu_item_call label="Nowy Skrypt" name="New Script"/>
- <menu_item_call label="NowÄ… NotÄ™" name="New Note"/>
- <menu_item_call label="NowÄ… GesturkÄ™" name="New Gesture"/>
+ <menu_item_call label="Nowy folder" name="New Folder"/>
+ <menu_item_call label="Nowy skrypt" name="New Script"/>
+ <menu_item_call label="Nowa nota" name="New Note"/>
+ <menu_item_call label="Nowy gest" name="New Gesture"/>
<menu label="Nowe Ubranie" name="New Clothes">
- <menu_item_call label="NowÄ… KoszulkÄ™" name="New Shirt"/>
- <menu_item_call label="Nowe Spodnie" name="New Pants"/>
- <menu_item_call label="Nowe Buty" name="New Shoes"/>
- <menu_item_call label="Nowe Skarpetki" name="New Socks"/>
- <menu_item_call label="NowÄ… KurtkÄ™" name="New Jacket"/>
- <menu_item_call label="Nową Spódnicę" name="New Skirt"/>
- <menu_item_call label="Nowe Rękawiczki" name="New Gloves"/>
- <menu_item_call label="Nowy Podkoszulek" name="New Undershirt"/>
- <menu_item_call label="NowÄ… BieliznÄ™" name="New Underpants"/>
- <menu_item_call label="Nowe Ubranie Przezroczyste" name="New Alpha"/>
- <menu_item_call label="Nowy Tatuaż" name="New Tattoo"/>
+ <menu_item_call label="NowÄ… kkoszulkÄ™" name="New Shirt"/>
+ <menu_item_call label="Nowe spodnie" name="New Pants"/>
+ <menu_item_call label="Nowe buty" name="New Shoes"/>
+ <menu_item_call label="Nowe skarpetki" name="New Socks"/>
+ <menu_item_call label="NowÄ… kurtkÄ™" name="New Jacket"/>
+ <menu_item_call label="Nową spódnicę" name="New Skirt"/>
+ <menu_item_call label="Nowe rękawiczki" name="New Gloves"/>
+ <menu_item_call label="Nowy podkoszulek" name="New Undershirt"/>
+ <menu_item_call label="NowÄ… bieliznÄ™" name="New Underpants"/>
+ <menu_item_call label="Nowe ubranie Alpha" name="New Alpha"/>
+ <menu_item_call label="Nowy tatuaż" name="New Tattoo"/>
</menu>
<menu label="Nową Część Ciała" name="New Body Parts">
- <menu_item_call label="Nowy Kształt" name="New Shape"/>
- <menu_item_call label="Nową Skórkę" name="New Skin"/>
- <menu_item_call label="Nowe Włosy" name="New Hair"/>
- <menu_item_call label="Nowe Oczy" name="New Eyes"/>
+ <menu_item_call label="Nowy kształt" name="New Shape"/>
+ <menu_item_call label="Nową skórkę" name="New Skin"/>
+ <menu_item_call label="Nowe włosy" name="New Hair"/>
+ <menu_item_call label="Nowe oczy" name="New Eyes"/>
</menu>
</menu>
<menu label="UporzÄ…dkuj" name="Sort">
- <menu_item_check label="Wegług Nazwy" name="By Name"/>
- <menu_item_check label="Według Daty" name="By Date"/>
+ <menu_item_check label="Wegług bazwy" name="By Name"/>
+ <menu_item_check label="Według daty" name="By Date"/>
<menu_item_check label="Foldery zawsze według nazwy" name="Folders Always By Name"/>
- <menu_item_check label="Foldery Systemowe od Góry" name="System Folders To Top"/>
+ <menu_item_check label="Foldery Systemowe od góry" name="System Folders To Top"/>
</menu>
</menu_bar>
+ <filter_editor label="Filtr" name="inventory search editor"/>
+ <tab_container name="inventory filter tabs">
+ <inventory_panel label="Wszystkie obiekty" name="All Items"/>
+ <inventory_panel label="Ostatnio dodane obiekty" name="Recent Items"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Pokaż dodatkowe opcje"/>
+ <button name="add_btn" tool_tip="Dodaj nowy obiekt"/>
+ <dnd_button name="trash_btn" tool_tip="Usuń wybrany obiekt"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_me.xml b/indra/newview/skins/default/xui/pl/panel_me.xml
new file mode 100644
index 0000000000..72a5f51520
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_me.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mój Profil" name="panel_me">
+ <tab_container name="tabs">
+ <panel label="PROFIL" name="panel_profile"/>
+ <panel label="ULUBIONE" name="panel_picks"/>
+ </tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml
new file mode 100644
index 0000000000..03b063ddfe
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ogólne" name="Media Settings General">
+ <text name="home_label">
+ Strona Domowa:
+ </text>
+ <text name="home_fails_whitelist_label">
+ (ta strona nie została zaakceptowana przez filtr listy dostępowej)
+ </text>
+ <line_editor name="home_url" tool_tip="Strona domowa dla źródla mediów"/>
+ <text name="preview_label">
+ Pokaż
+ </text>
+ <text name="current_url_label">
+ Obecna Strona:
+ </text>
+ <text name="current_url" tool_tip="The current page for this media source" value=""/>
+ <button label="Zresetuj" name="current_url_reset_btn"/>
+ <check_box initial_value="false" label="Pętla" name="auto_loop"/>
+ <check_box initial_value="false" label="Interakcja Kliknięcia" name="first_click_interact"/>
+ <check_box initial_value="false" label="Autopowiększenie" name="auto_zoom"/>
+ <check_box initial_value="false" label="Automatyczne Odtwarzanie Mediów" name="auto_play"/>
+ <text name="media_setting_note">
+ Pamiętaj: Rezydenci mogą zmienić to ustawienie
+ </text>
+ <check_box initial_value="false" label="Automatyczne dopasowanie mediów na twarzy lub obiekcie" name="auto_scale"/>
+ <text name="size_label">
+ Rozmiar:
+ </text>
+ <text name="X_label">
+ X
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml
new file mode 100644
index 0000000000..939bcbbb42
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Dopasuj" name="Media settings for controls">
+ <text name="controls_label">
+ Ustawienia:
+ </text>
+ <combo_box name="controls">
+ <combo_item name="Standard">
+ Standardowe
+ </combo_item>
+ <combo_item name="Mini">
+ Mini
+ </combo_item>
+ </combo_box>
+ <check_box initial_value="false" label="Pozwól na nawigację &amp; interaktywność" name="perms_owner_interact"/>
+ <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_owner_control"/>
+ <check_box initial_value="false" label="Pozwól na nawigację &amp; Interaktywność" name="perms_group_interact"/>
+ <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_group_control"/>
+ <check_box initial_value="false" label="Pozwól na nawigację &amp; interaktywność" name="perms_anyone_interact"/>
+ <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_anyone_control"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml
new file mode 100644
index 0000000000..da3142b54e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ochrona" name="Media Settings Security">
+ <check_box initial_value="false" label="Dostęp dozwolony tylko dla wybranych URL" name="whitelist_enable"/>
+ <text name="home_url_fails_some_items_in_whitelist">
+ Wejścia na stronę WWW, które się nie powiodły są zaznaczone:
+ </text>
+ <button label="Dodaj" name="whitelist_add"/>
+ <button label="Usuń" name="whitelist_del"/>
+ <text name="home_url_fails_whitelist">
+ UWAGA: WWW wyszczególnione w Ogólne nie przeszły Białej Listy. Została ona wyłączona dopóki poprawny zapis nie zostanie dodany.
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_my_profile.xml b/indra/newview/skins/default/xui/pl/panel_my_profile.xml
new file mode 100644
index 0000000000..7ca762b825
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_my_profile.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profil" name="panel_profile">
+ <string name="no_partner_text" value="Żadne"/>
+ <string name="no_group_text" value="Żadne"/>
+ <string name="RegisterDateFormat">
+ [REG_DATE] ([AGE])
+ </string>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <panel name="second_life_image_panel">
+ <icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij przycisk Edytuj Profil by zmienić zdjęcie"/>
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <icon label="" name="real_world_edit_icon" tool_tip="Kliknij przycisk Edytuj Profil by zmienić zdjęcie"/>
+ <text name="title_rw_descr_text" value="Życie#1:"/>
+ </panel>
+ <text name="title_member_text" value="Urodziny:"/>
+ <text name="title_acc_status_text" value="Konto:"/>
+ <text name="title_partner_text" value="Partner:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(przetwarzanie)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Grupy:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Edytuj Profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/>
+ <button label="Edytuj Wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubrania itp."/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml b/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml
new file mode 100644
index 0000000000..b01e686c41
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="navigation_bar">
+ <panel name="navigation_panel">
+ <pull_button name="back_btn" tool_tip="Wróć do poprzedniej lokalizacji"/>
+ <pull_button name="forward_btn" tool_tip="Idź do następnej lokalizacji"/>
+ <button name="home_btn" tool_tip="Teleportuj do miejsca startu"/>
+ <location_input label="Lokalizacja" name="location_combo"/>
+ <search_combo_box label="Szukaj" name="search_combo_box" tool_tip="Szukaj">
+ <combo_editor label="Szukaj [SECOND_LIFE]" name="search_combo_editor"/>
+ </search_combo_box>
+ </panel>
+ <favorites_bar name="favorite" tool_tip="Przeciągnij swoje landmarki tutaj by szybko dostać się do swoich ulubionych miejsc w Second Life!">
+ <label name="favorites_bar_label" tool_tip="Przeciągnij swoje landmarki tutaj by szybko dostać się do swoich ulubionych miejsc w Second Life!">
+ Pasek Ulubionych
+ </label>
+ <chevron_button name="&gt;&gt;" tool_tip="Pokaż więcej Moich Ulubionych"/>
+ </favorites_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml
new file mode 100644
index 0000000000..bcecaeabb3
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- All our XML is utf-8 encoded. -->
+<panel name="nearby_chat">
+ <panel name="chat_caption">
+ <text name="sender_name">
+ CZAT LOKALNY
+ </text>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml
new file mode 100644
index 0000000000..2d1decd960
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+ <string name="min_width">
+ 192
+ </string>
+ <string name="max_width">
+ 320
+ </string>
+ <line_editor label="Kliknij tutaj aby rozmawiać." name="chat_box" tool_tip="Naciśnij Enter aby mówić, Ctrl + Enter aby krzyknąć"/>
+ <button name="show_nearby_chat" tool_tip="Pokazuje/ukrywa pobliski Czat"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml
new file mode 100644
index 0000000000..a05c0d856f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="nearby_media">
+ <string name="empty_item_text">
+ &lt;empty&gt;
+ </string>
+ <string name="parcel_media_name">
+ Strumień Mediów Posiadłości
+ </string>
+ <string name="parcel_audio_name">
+ Strumień Audio Posiadłości
+ </string>
+ <string name="playing_suffix">
+ (odtwarzanie)
+ </string>
+ <panel name="minimized_controls">
+ <button label="Zatrzymaj" name="all_nearby_media_disable_btn" tool_tip="Wyłącz wszystkie media w pobliżu"/>
+ <button label="Włącz" name="all_nearby_media_enable_btn" tool_tip="Włącz wszystkie media w pobliżu"/>
+ <button name="open_prefs_btn" tool_tip="Uruchom preferencje medialne"/>
+ <button label="Więcej &gt;&gt;" label_selected="Mniej &lt;&lt;" name="more_less_btn" tool_tip="Zaawansowane"/>
+ </panel>
+ <panel name="nearby_media_panel">
+ <text name="nearby_media">
+ Media w pobliżu
+ </text>
+ <text name="show">
+ Pokaż:
+ </text>
+ <combo_box name="show_combo">
+ <combo_box.item label="Wszystkie" name="All"/>
+ <combo_box.item label="Na obecnej Parceli" name="WithinParcel"/>
+ <combo_box.item label="Poza Posiadłością" name="OutsideParcel"/>
+ <combo_box.item label="Na innych awatarach" name="OnOthers"/>
+ </combo_box>
+ <scroll_list name="media_list">
+ <scroll_list.columns label="Dokładność" name="media_proximity"/>
+ <scroll_list.columns label="Widoczność" name="media_visibility"/>
+ <scroll_list.columns label="Klasa" name="media_class"/>
+ <scroll_list.columns label="Nazwa" name="media_name"/>
+ <scroll_list.columns label="Debugowanie" name="media_debug"/>
+ </scroll_list>
+ <panel name="media_controls_panel">
+ <layout_stack name="media_controls">
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Zatrzymaj wybrane media"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Odtwarzaj wybrane media"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Zatrzymaj wybrane media"/>
+ </layout_panel>
+ <layout_panel name="volume_slider_ctrl">
+ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Regulacja audio dla wybranych mediów"/>
+ </layout_panel>
+ <layout_panel name="mute">
+ <button name="mute_btn" tool_tip="Wycisz audio wybranych mediów"/>
+ </layout_panel>
+ <layout_panel name="zoom">
+ <button name="zoom_btn" tool_tip="Przybliż do wybranych mediów"/>
+ </layout_panel>
+ <layout_panel name="unzoom">
+ <button name="unzoom_btn" tool_tip="Oddal od wybranych mediów"/>
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_notes.xml b/indra/newview/skins/default/xui/pl/panel_notes.xml
new file mode 100644
index 0000000000..35cb7e1bce
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_notes.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Notatki &amp; Prywatność" name="panel_notes">
+ <layout_stack name="layout">
+ <panel name="notes_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="profile_scroll_panel">
+ <text name="status_message" value="Notatki:"/>
+ <text name="status_message2" value="Pozwól tej osobie na:"/>
+ <check_box label="Widzenie mojego statusu" name="status_check"/>
+ <check_box label="Lokalizowanie mnie na mapie" name="map_check"/>
+ <check_box label="Edytowanie, kasowanie lub zabieranie moich obiektów" name="objects_check"/>
+ </panel>
+ </scroll_container>
+ </panel>
+ <panel name="notes_buttons_panel">
+ <button label="Dodaj do znajomych" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/>
+ <button label="IM" name="im" tool_tip="Otwórz wiadomości IM"/>
+ <button label="Dzwoń" name="call" tool_tip="Zadzwoń do Rezydenta"/>
+ <button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/>
+ <button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>
+ </panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_online_status.xml b/indra/newview/skins/default/xui/pl/panel_online_status.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_online_status.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml b/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml
new file mode 100644
index 0000000000..5e7fd46754
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Rzeczy" name="Outfits">
+ <tab_container name="appearance_tabs">
+ <inventory_panel label="MOJE UBRANIA" name="outfitslist_tab"/>
+ <inventory_panel label="ZAÅOÅ»ONE" name="cof_tab"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Pokaż opcje dodatkowe"/>
+ <dnd_button name="trash_btn" tool_tip="Usuń zaznaczony obiekt"/>
+ <button label="Zapisz Ubranie" name="make_outfit_btn" tool_tip="Zapisz wyglÄ…d jako ubranie"/>
+ <button label="Ubierz" name="wear_btn" tool_tip="Ubierz wybrany obiekt"/>
+ <button label="M" name="look_edit_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml
new file mode 100644
index 0000000000..5b77c390ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_gear_default">
+ <menu_item_call label="ZastÄ…p Obecne Ubranie" name="wear"/>
+ <menu_item_call label="Dodaj do Obecnego Ubrania" name="add"/>
+ <menu_item_call label="Usuń z Obecnego Ubrania" name="remove"/>
+ <menu_item_call label="Zmień nazwę" name="rename"/>
+ <menu_item_call label="Usuń Link" name="remove_link"/>
+ <menu_item_call label="Usuń Ubranie" name="delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml
new file mode 100644
index 0000000000..5ea5356c60
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_people.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Side tray panel -->
+<panel label="Ludzie" name="people_panel">
+ <string name="no_people" value="Brak ludzi"/>
+ <string name="no_one_near" value="Nikogo w pobliżu"/>
+ <string name="no_friends_online" value="Brak dostępnych Znajomych"/>
+ <string name="no_friends" value="Brak Znajomych"/>
+ <string name="people_filter_label" value="Filtruj Ludzi"/>
+ <string name="groups_filter_label" value="Filtruj Grupy"/>
+ <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Może spróbuj odnaleźć Grupę korzystając z Szukaj?]"/>
+ <string name="no_groups_msg" value="[secondlife:///app/search/groups Spróbuj wyszukać grupy aby do nich dołączyć.]"/>
+ <filter_editor label="Filtr" name="filter_input"/>
+ <tab_container name="tabs">
+ <panel label="W POBLIŻU" name="nearby_panel">
+ <panel label="bottom_panel" name="bottom_panel">
+ <button name="nearby_view_sort_btn" tool_tip="Opcje"/>
+ <button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do Znajomych"/>
+ </panel>
+ </panel>
+ <panel label="ZNAJOMI" name="friends_panel">
+ <accordion name="friends_accordion">
+ <accordion_tab name="tab_online" title="Dostępni"/>
+ <accordion_tab name="tab_all" title="Wszyscy"/>
+ </accordion>
+ <panel label="bottom_panel" name="bottom_panel">
+ <button name="friends_viewsort_btn" tool_tip="Opcje"/>
+ <button name="add_btn" tool_tip="Zaproponuj znajomość"/>
+ <button name="del_btn" tool_tip="Usuń wybraną osobę ze swojej listy znajomych"/>
+ </panel>
+ <text name="no_friends_msg">
+ By dodać nową znajomość skorzystaj ze strony [secondlife:///app/search/people ogólne wyszukiwanie] lub kliknij prawym przyciskiem myszki na Rezydenta by wysłać mu zaproszenie.
+Jeżeli szukasz ludzi, z którymi można się spotkać, kliknij tutaj [secondlife:///app/worldmap skorzystaj z mapy].
+ </text>
+ </panel>
+ <panel label="GRUPY" name="groups_panel">
+ <panel label="bottom_panel" name="bottom_panel">
+ <button name="groups_viewsort_btn" tool_tip="Opcje"/>
+ <button name="plus_btn" tool_tip="Dołącz do grupy/Stwórz nową grupę"/>
+ <button name="activate_btn" tool_tip="Aktywuj wybranÄ… grupÄ™"/>
+ </panel>
+ </panel>
+ <panel label="OSTATNIE" name="recent_panel">
+ <panel label="bottom_panel" name="bottom_panel">
+ <button name="recent_viewsort_btn" tool_tip="Opcje"/>
+ <button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do Znajomych"/>
+ </panel>
+ </panel>
+ </tab_container>
+ <panel name="button_bar">
+ <button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>
+ <button label="IM" name="im_btn" tool_tip="Rozpocznij rozmowÄ™ prywatnÄ… (IM)"/>
+ <button label="Zadzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>
+ <button label="Podziel siÄ™" name="share_btn"/>
+ <button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleportacjÄ™"/>
+ <button label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie"/>
+ <button label="Konferencja Grupowa" name="chat_btn" tool_tip="Rozpocznij konferencÄ™"/>
+ <button label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa Głosowa w tej Grupie"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_pick_info.xml b/indra/newview/skins/default/xui/pl/panel_pick_info.xml
new file mode 100644
index 0000000000..0454ecc430
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_pick_info.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_pick_info">
+ <text name="title" value="Info o Ulubionych"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <text name="pick_name" value="[name]"/>
+ <text name="pick_location" value="[loading...]"/>
+ <text name="pick_desc" value="[description]"/>
+ </panel>
+ </scroll_container>
+ <panel name="buttons">
+ <button label="Teleportuj" name="teleport_btn"/>
+ <button label="Mapa" name="show_on_map_btn"/>
+ <button label="Edytuj" name="edit_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_picks.xml b/indra/newview/skins/default/xui/pl/panel_picks.xml
new file mode 100644
index 0000000000..5d69c25ff3
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_picks.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ulubione" name="panel_picks">
+ <string name="no_picks" value="Brak Ulubionych"/>
+ <string name="no_classifieds" value="Brak Reklam"/>
+ <text name="empty_picks_panel_text">
+ Brak ulubionych/reklam w tym miejscu
+ </text>
+ <accordion name="accordion">
+ <accordion_tab name="tab_picks" title="Ulubione"/>
+ <accordion_tab name="tab_classifieds" title="Reklamy"/>
+ </accordion>
+ <panel label="bottom_panel" name="edit_panel">
+ <button name="new_btn" tool_tip="Stwórz w obecnym miejscu nową zakładkę w ulubionych lub reklamę"/>
+ </panel>
+ <panel name="buttons_cucks">
+ <button label="Info" name="info_btn" tool_tip="Pokaż info o ulubionych"/>
+ <button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj do odpowiadajÄ…cego miejsca"/>
+ <button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż odpowiadające miejsce w Mapie Świata"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_place_profile.xml b/indra/newview/skins/default/xui/pl/panel_place_profile.xml
new file mode 100644
index 0000000000..3714a141db
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_place_profile.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="place_profile">
+ <string name="on" value="Włącz"/>
+ <string name="off" value="Wyłącz"/>
+ <string name="anyone" value="Każdy"/>
+ <string name="available" value="dostępny"/>
+ <string name="allocated" value="przydzielony"/>
+ <string name="title_place" value="Profil Miejsca"/>
+ <string name="title_teleport_history" value="Historia teleportacji"/>
+ <string name="not_available" value="(brak)"/>
+ <string name="unknown" value="(nieznany)"/>
+ <string name="public" value="(publiczny)"/>
+ <string name="none_text" value="(żaden)"/>
+ <string name="sale_pending_text" value="(Sprzedaż w Toku Realizacji)"/>
+ <string name="group_owned_text" value="(Własność Grupy)"/>
+ <string name="price_text" value="L$"/>
+ <string name="area_text" value="m²"/>
+ <string name="all_residents_text" value="Każdemu"/>
+ <string name="group_text" value="Grupie"/>
+ <string name="can_resell">
+ Posiadłość zakupiona w tym regionie może być odsprzedana.
+ </string>
+ <string name="can_not_resell">
+ Posiadłość zakupiona w tym regionie nie może być odsprzedana.
+ </string>
+ <string name="can_change">
+ Posiadłość zakupiona w tym regionie może być łączona/dzielona.
+ </string>
+ <string name="can_not_change">
+ Posiadłość zakupiona w tym regionie nie może być łączona/dzielona.
+ </string>
+ <string name="server_update_text">
+ Informacje o tym miejscu nie będą dostępne bez aktualizacji serwera.
+ </string>
+ <string name="server_error_text">
+ Informacje o tym miejscu są obecnie niedostępne, spróbuj później.
+ </string>
+ <string name="server_forbidden_text">
+ Dostęp do informacji o tym miejscu jest ograniczony. Zweryfikuj swoje przywileje z właścicielem posiadłości.
+ </string>
+ <string name="acquired_date">
+ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+ </string>
+ <button name="back_btn" tool_tip="Cofnij"/>
+ <text name="title" value="Profil Miejsca"/>
+ <scroll_container name="place_scroll">
+ <panel name="scrolling_panel">
+ <text name="owner_label" value="Właściciel:"/>
+ <text name="maturity_value" value="nieznany"/>
+ <accordion name="advanced_info_accordion">
+ <accordion_tab name="parcel_characteristics_tab" title="Posiadłość">
+ <panel name="parcel_characteristics_panel">
+ <text name="rating_label" value="Rodzaj:"/>
+ <text name="rating_value" value="nieznane"/>
+ <text name="voice_label" value="Komunikacja Głosowa:"/>
+ <text name="voice_value" value="Włączone"/>
+ <text name="fly_label" value="Lataj:"/>
+ <text name="fly_value" value="Włączone"/>
+ <text name="push_label" value="Popchnięcia:"/>
+ <text name="push_value" value="Wyłączone"/>
+ <text name="build_label" value="Budowanie:"/>
+ <text name="build_value" value="Włączone"/>
+ <text name="scripts_label" value="Skrypty:"/>
+ <text name="scripts_value" value="Włączone"/>
+ <text name="damage_label" value="Zniszczenia:"/>
+ <text name="damage_value" value="Wyłączone"/>
+ <button label="O Posiadłości" name="about_land_btn"/>
+ </panel>
+ </accordion_tab>
+ <accordion_tab name="region_information_tab" title="Region">
+ <panel name="region_information_panel">
+ <text name="region_name_label" value="Region:"/>
+ <text name="region_name" value="Mooseland"/>
+ <text name="region_type_label" value="Typ:"/>
+ <text name="region_type" value="Moose"/>
+ <text name="region_rating_label" value="Rodzaj:"/>
+ <text name="region_rating" value="Adult"/>
+ <text name="region_owner_label" value="Właściciel:"/>
+ <text name="region_owner" value="moose Van Moose"/>
+ <text name="region_group_label" value="Grupa:"/>
+ <text name="region_group">
+ The Mighty Moose of mooseville soundvillemoose
+ </text>
+ <button label="Region/MajÄ…tek" name="region_info_btn"/>
+ </panel>
+ </accordion_tab>
+ <accordion_tab name="estate_information_tab" title="MajÄ…tek">
+ <panel name="estate_information_panel">
+ <text name="estate_name_label" value="MajÄ…tek:"/>
+ <text name="estate_rating_label" value="Rodzaj:"/>
+ <text name="estate_owner_label" value="Właściciel:"/>
+ <text name="covenant_label" value="Umowa:"/>
+ </panel>
+ </accordion_tab>
+ <accordion_tab name="sales_tab" title="Na Sprzedaż">
+ <panel name="sales_panel">
+ <text name="sales_price_label" value="Cena:"/>
+ <text name="area_label" value="Powierzchnia:"/>
+ <text name="traffic_label" value="Ruch:"/>
+ <text name="primitives_label" value="Primy:"/>
+ <text name="parcel_scripts_label" value="Skrypty:"/>
+ <text name="terraform_limits_label" value="Ograniczenia terraformingu:"/>
+ <text name="subdivide_label" value="Podziel/Złącz:"/>
+ <text name="resale_label" value="Możliwość sprzedaży:"/>
+ <text name="sale_to_label" value="Na sprzedaż:"/>
+ </panel>
+ </accordion_tab>
+ </accordion>
+ </panel>
+ </scroll_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml
new file mode 100644
index 0000000000..c7f3f00d98
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_places.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Miejsca" name="places panel">
+ <string name="landmarks_tab_title" value="MOJE LANDMARKI"/>
+ <string name="teleport_history_tab_title" value="HISTORIA TELEPORTÓW"/>
+ <filter_editor label="Filtruj Moje Miejsca" name="Filter"/>
+ <panel name="button_panel">
+ <button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj do wybranego miejsca"/>
+ <button label="Mapa" name="map_btn"/>
+ <button label="Edytuj" name="edit_btn" tool_tip="Edytuj informacje landmarka"/>
+ <button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>
+ <button label="Zamknij" name="close_btn"/>
+ <button label="Anuluj" name="cancel_btn"/>
+ <button label="Zapisz" name="save_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml
index c3bd66274b..9905bbbc18 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml
@@ -1,48 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
-<panel name="advanced">
- <panel.string name="resolution_format">
- [RES_X] x [RES_Y]
- </panel.string>
+<panel label="Zaawansowane" name="advanced">
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
- <check_box label="Czat Chmurkowy" name="bubble_text_chat"/>
- <color_swatch name="background" tool_tip="Wybierz kolor czatu w chmurce"/>
- <slider label="Intensywność" name="bubble_chat_opacity"/>
- <text name="AspectRatioLabel1" tool_tip="width / height">
- Proporcje
- </text>
- <combo_box name="aspect_ratio" tool_tip="width / height">
- <combo_box.item label="4:3 (Standardowy CRT)" name="item1"/>
- <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
- <combo_box.item label="8:5 (Panoramiczny)" name="item3"/>
- <combo_box.item label="16:9 (Panoramiczny)" name="item4"/>
- </combo_box>
- <check_box label="Automatyczne Wykrywanie" name="aspect_auto_detect"/>
- <text name="heading1">
- Kamery:
- </text>
- <slider label="KÄ…t Widoku" name="camera_fov"/>
+ <panel.string name="middle_mouse">
+ Åšrodkowy klawisz myszki
+ </panel.string>
+ <slider label="KÄ…t widoku" name="camera_fov"/>
<slider label="Odległość" name="camera_offset_scale"/>
<text name="heading2">
- Automatyczne pozycjonowanie dla:
+ Automatyczna pozycja dla:
</text>
<check_box label="Buduj/Edytuj" name="edit_camera_movement" tool_tip="Używaj automatycznego pozycjonowania kamery aktywując i deaktywując tryb edycji"/>
<check_box label="Wygląd" name="appearance_camera_movement" tool_tip="Używaj automatycznego pozycjonowania kamery podczas trybu edycji"/>
- <text name="heading3">
- Awatary:
- </text>
<check_box label="Pokaż w trybie widoku panoramicznego" name="first_person_avatar_visible"/>
<check_box label="Aktywacja klawiszy strzałek do poruszania awatarem" name="arrow_keys_move_avatar_check"/>
<check_box label="kliknij-kliknij-przytrzymaj, aby uruchomić" name="tap_tap_hold_to_run"/>
<check_box label="Poruszaj ustami awatara kiedy używana jest komunikacja głosowa" name="enable_lip_sync"/>
- <check_box label="Pokaż błędy skryptów" name="show_script_errors"/>
+ <check_box label="Czat Chmurkowy" name="bubble_text_chat"/>
+ <slider label="Intensywność" name="bubble_chat_opacity"/>
+ <color_swatch name="background" tool_tip="Wybierz kolor czatu w chmurce"/>
+ <check_box label="Pokaż błędy skryptu w:" name="show_script_errors"/>
<radio_group name="show_location">
- <radio_item label="W czacie" name="0"/>
- <radio_item label="W oknie" name="1"/>
+ <radio_item label="Czat Lokalny" name="0"/>
+ <radio_item label="Osobne okno:" name="1"/>
</radio_group>
- <check_box label="Uruchom tryb mówienia przez mikrofon podczas nasiśnięcia przycisku Mów:" name="push_to_talk_toggle_check" tool_tip="Jeżeli jesteś w trybie mówienia, w celu aktywacji lub deaktywacji swojego mikrofonu wybierz i wyłącz przycisk Mów tylko raz. Jeżeli nie jesteś w trybie mówienia, mikrofon przesyła Twój głos tylko w momencie aktywacji pełnej przycisku Mów."/>
+ <check_box label="Włącz/Wyłącz głos:" name="push_to_talk_toggle_check" tool_tip="Jeżeli jesteś w trybie mówienia, w celu aktywacji lub deaktywacji swojego mikrofonu wybierz i wyłącz przycisk Mów tylko raz. Jeżeli nie jesteś w trybie mówienia, mikrofon przesyła Twój głos tylko w momencie aktywacji pełnej przycisku Mów."/>
<line_editor label="Naciśnij Mów by rozpocząć komunikację głosową" name="modifier_combo"/>
<button label="wybierz Klawisz" name="set_voice_hotkey_button"/>
- <button label="Åšrodkowy Przycisk Myszki" name="set_voice_middlemouse_button"/>
+ <button label="Środkowy Przycisk Myszki" name="set_voice_middlemouse_button" tool_tip="Zresetuj do środkowego przycisku myszy"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml
index 7195c30f20..e843342aa2 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml
@@ -4,11 +4,11 @@
Powiadom mnie:
</text>
<check_box label="Kiedy wydajÄ™ lub otrzymujÄ™ L$" name="notify_money_change_checkbox"/>
- <check_box label="Kiedy moi znajomi siÄ™ logujÄ… lub wylogowujÄ…" name="friends_online_notify_checkbox"/>
+ <check_box label="Kiedy moi Znajomi zalogowujÄ… siÄ™ i wylogowujÄ…" name="friends_online_notify_checkbox"/>
<text name="show_label">
- Zawsze pokazuj te powiadomienia:
+ Zawsze pokazuj:
</text>
<text name="dont_show_label">
- Nigdy nie pokazuj tych powiadomień:
+ Nie pokazuj:
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
index 5599c21686..ae13cf662f 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Czat/IM" name="chat">
+ <text name="font_size">
+ Rozmiar czcionki:
+ </text>
<radio_group name="chat_font_size">
- <radio_item label="Mała" name="radio"/>
- <radio_item label="Åšrednia" name="radio2"/>
- <radio_item label="Duża" name="radio3"/>
+ <radio_item label="Mała" name="radio" value="0"/>
+ <radio_item label="Åšrednia" name="radio2" value="1"/>
+ <radio_item label="Duża" name="radio3" value="2"/>
</radio_group>
+ <text name="font_colors">
+ Kolor czcionki:
+ </text>
<color_swatch label="Ty" name="user"/>
<text name="text_box1">
Ja
@@ -39,4 +45,14 @@
</text>
<check_box initial_value="true" label="Używaj animacji podczas pisania" name="play_typing_animation"/>
<check_box label="Wysyłaj wszystkie wiadomości (IM) na moją skrzynkę pocztową kiedy jestem niedostępny" name="send_im_to_email"/>
+ <text name="show_ims_in_label">
+ Pokaż wiadomości (IM) w:
+ </text>
+ <text name="requires_restart_label">
+ (restart wymagany)
+ </text>
+ <radio_group name="chat_window" tool_tip="Pokaż wiadomości IM osobno lub razem (restart wymagany)">
+ <radio_item label="Osobne okna" name="radio" value="0"/>
+ <radio_item label="Etykiety" name="radio2" value="1"/>
+ </radio_group>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
index 97b4975f29..e7134f23c3 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
@@ -1,91 +1,67 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Ogólne" name="general_panel">
- <combo_box name="start_location_combo">
- <combo_box.item name="MyHome" tool_tip="Domyślnie loguj mnie do mojego miejsca startu." label="Mój Start"/>
- <combo_box.item name="MyLastLocation" tool_tip="Domyślnie loguj mnie do ostatnio odwiedzonego miejsca." label="Ostatnie Miejsce"/>
- </combo_box>
- <check_box label="Pokaż Miejsce Startu podczas Logowania" name="show_location_checkbox"/>
- <combo_box name="fade_out_combobox">
- <combo_box.item name="Never" label="Nigdy"/>
- <combo_box.item name="Show Temporarily" label="Tymczasowo"/>
- <combo_box.item name="Always" label="Zawsze"/>
- </combo_box>
- <check_box label="Używaj Małych Imion Awatarów" name="small_avatar_names_checkbox"/>
- <check_box label="Nie Wyświetlaj Mojego Imienia" name="show_my_name_checkbox"/>
- <text name="group_titles_textbox">
- Tytuły Grupowe:
- </text>
- <check_box label="Nie Wyświetlaj Żadnych Tytułów Grupowych" name="show_all_title_checkbox"/>
- <check_box label="Nie Wyświetlaj Mojego Tytułu Grupowego" name="show_my_title_checkbox"/>
- <color_swatch label="" name="effect_color_swatch" tool_tip="Selekcja koloru"/>
- <text name="UI Size:">
- Wymiar Interfejsu (UI):
+ <text name="language_textbox">
+ Język:
</text>
- <slider name="ui_scale_slider"/>
- <check_box label="Używaj Skali Nizależnej od Rozdzielczości" name="ui_auto_scale"/>
- <spinner label="Zasypiaj w:" name="afk_timeout_spinner"/>
- <check_box label="Powiadamiaj o Wydatkach i Zarobkach (L$)" name="notify_money_change_checkbox"/>
- <text name="maturity_desired_label">
- Treść:
+ <combo_box name="language_combobox">
+ <combo_box.item label="Domyślny" name="System Default Language"/>
+ <combo_box.item label="English (Angielski)" name="English"/>
+ <combo_box.item label="Dansk (Duński) - Beta" name="Danish"/>
+ <combo_box.item label="Deutsch (Niemiecki) - Beta" name="Deutsch(German)"/>
+ <combo_box.item label="Español (Hiszpański) - Beta" name="Spanish"/>
+ <combo_box.item label="Français (Francuski) - Beta" name="French"/>
+ <combo_box.item label="Italiano (Włoski) - Beta" name="Italian"/>
+ <combo_box.item label="Nederlands (Niderlandzki) - Beta" name="Dutch"/>
+ <combo_box.item label="Polski - Beta" name="Polish"/>
+ <combo_box.item label="Portugués (Portugalski) - Beta" name="Portugese"/>
+ <combo_box.item label="日本語 (Japoński) - Beta" name="(Japanese)"/>
+ </combo_box>
+ <text name="language_textbox2">
+ (Restart wymagany)
</text>
<text name="maturity_desired_prompt">
Chcę uzyskać dostęp do miejsc zakwalifikowanych jako:
</text>
+ <text name="maturity_desired_textbox"/>
<combo_box name="maturity_desired_combobox">
- <combo_box.item name="Desired_Adult" label="&apos;PG&apos;, &apos;Mature&apos; oraz &apos;Adult&apos;"/>
- <combo_box.item name="Desired_Mature" label="&apos;PG&apos; i &apos;Mature&apos;"/>
- <combo_box.item name="Desired_PG" label="&apos;PG&apos;"/>
+ <combo_box.item label="&apos;PG&apos;, &apos;Mature&apos; oraz &apos;Adult&apos;" name="Desired_Adult"/>
+ <combo_box.item label="&apos;PG&apos; i &apos;Mature&apos;" name="Desired_Mature"/>
+ <combo_box.item label="&apos;PG&apos;" name="Desired_PG"/>
</combo_box>
- <text name="maturity_desired_textbox">
- &apos;PG&apos;
- </text>
<text name="start_location_textbox">
Miejsce Startu:
</text>
- <text name="show_names_textbox">
+ <combo_box name="start_location_combo">
+ <combo_box.item label="Ostatnie Miejsce" name="MyLastLocation" tool_tip="Domyślnie loguj mnie do ostatnio odwiedzonego miejsca."/>
+ <combo_box.item label="Mój Start" name="MyHome" tool_tip="Domyślnie loguj mnie do mojego miejsca startu."/>
+ </combo_box>
+ <check_box initial_value="true" label="Pokaż przy zalogowaniu" name="show_location_checkbox"/>
+ <text name="name_tags_textbox">
Imiona:
</text>
+ <radio_group name="Name_Tag_Preference">
+ <radio_item label="Wyłącz" name="radio" value="0"/>
+ <radio_item label="Włącz" name="radio2" value="1"/>
+ <radio_item label="Pokaż w skrócie" name="radio3" value="2"/>
+ </radio_group>
+ <check_box label="Wyświetl moje imię:" name="show_my_name_checkbox1"/>
+ <check_box initial_value="true" label="Używaj Małych Imion Awatarów" name="small_avatar_names_checkbox"/>
+ <check_box label="Wyświetl Tytuł Grupowy" name="show_all_title_checkbox1"/>
<text name="effects_color_textbox">
- Kolor dla Moich Efektów:
- </text>
- <text name="seconds_textbox">
- sekund
- </text>
- <text name="crash_report_textbox">
- Zgłaszanie Błędów:
- </text>
- <text name="language_textbox">
- Język:
+ Kolor moich efektów:
</text>
- <text name="language_textbox2">
- (Restart wymagany)
+ <text name="title_afk_text">
+ Zasypiaj w czasie:
</text>
- <string name="region_name_prompt">
- &lt;Wpisz Region&gt;
- </string>
- <combo_box name="crash_behavior_combobox">
- <combo_box.item name="Askbeforesending" label="Pytaj przed wysłaniem"/>
- <combo_box.item name="Alwayssend" label="Zawsze wysyłaj"/>
- <combo_box.item name="Neversend" label="Nigdy nie wysyłaj"/>
- </combo_box>
- <combo_box name="language_combobox">
- <combo_box.item name="System Default Language" label="Domyślny"/>
- <combo_box.item name="English" label="English (Angielski)"/>
- <combo_box.item name="Danish" label="Dansk (Duński) - Beta"/>
- <combo_box.item name="Deutsch(German)" label="Deutsch (Niemiecki) - Beta"/>
- <combo_box.item name="Spanish" label="Español (Hiszpański) - Beta"/>
- <combo_box.item name="French" label="Français (Francuski) - Beta"/>
- <combo_box.item name="Italian" label="Italiano (Włoski) - Beta"/>
- <combo_box.item name="Hungarian" label="Magyar (Węgierski) - Beta"/>
- <combo_box.item name="Dutch" label="Nederlands (Niderlandzki) - Beta"/>
- <combo_box.item name="Polish" label="Polski - Beta"/>
- <combo_box.item name="Portugese" label="Portugués (Portugalski) - Beta"/>
- <combo_box.item name="Russian" label="РуÑÑкий (Rosyjski) - Beta"/>
- <combo_box.item name="Turkish" label="Türkçe (Turecki) - Beta"/>
- <combo_box.item name="Ukrainian" label="УкраїнÑька (UkraiÅ„ski) - Beta"/>
- <combo_box.item name="Chinese" label="中文 (简体) (Chiński) - Beta"/>
- <combo_box.item name="(Japanese)" label="日本語 (Japoński) - Beta"/>
- <combo_box.item name="(Korean)" label="한국어 (Koreański) - Beta"/>
+ <color_swatch label="" name="effect_color_swatch" tool_tip="Selekcja koloru"/>
+ <combo_box label="Czas Trybu Oddalenia:" name="afk">
+ <combo_box.item label="2 minuty" name="item0"/>
+ <combo_box.item label="5 minut" name="item1"/>
+ <combo_box.item label="10 minut" name="item2"/>
+ <combo_box.item label="30 minut" name="item3"/>
+ <combo_box.item label="nigdy" name="item4"/>
</combo_box>
- <check_box label="Język znany publicznie" name="language_is_public" tool_tip="Pozwala obiektom w świecie poznać Twój wybór język."/>
+ <text name="text_box3">
+ Odpowiedź w trybie pracy:
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
index ddd4c736d6..bc08e025dd 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
@@ -1,42 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Grafika" name="Display panel">
- <button label="?" name="GraphicsPreferencesHelpButton" />
- <check_box label="Uruchom Second Life w oknie" name="windowed mode" />
- <text_editor name="FullScreenInfo">
- Wyłączone = klient uruchamiany w trybie pełnoekranowym.
- </text_editor>
- <text name="WindowSizeLabel">
- Wymiary Okna:
+ <text name="UI Size:">
+ UI rozmiar:
</text>
- <combo_box name="windowsize combo">
- <combo_box.item name="640x480" label="640x480" />
- <combo_box.item name="800x600" label="800x600" />
- <combo_box.item name="720x480" label="720x480 (NTSC)" />
- <combo_box.item name="768x576" label="768x576 (PAL)" />
- <combo_box.item name="1024x768" label="1024x768" />
- </combo_box>
- <text name="DisplayResLabel">
- Rozdzielczość:
- </text>
- <text name="AspectRatioLabel1" tool_tip="width / height">
- Proporcje:
- </text>
- <combo_box name="aspect_ratio" tool_tip="width / height">
- <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standardowy CRT)" />
- <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" />
- <combo_box.item name="8:5(Widescreen)" label="8:5 (Panoramiczny)" />
- <combo_box.item name="16:9(Widescreen)" label="16:9 (Panoramiczny)" />
- </combo_box>
- <check_box label="Detekcja proporcji" name="aspect_auto_detect" />
- <text name="HigherText">
- Jakość i
- </text>
- <text name="QualityText">
- Prędkość:
+ <text name="QualitySpeed">
+ Jakość i prędkość:
</text>
<text name="FasterText">
Prędkość
</text>
+ <text name="BetterText">
+ Lepiej
+ </text>
+ <slider label="" name="QualityPerformanceSelection"/>
<text name="ShadersPrefText">
Niska
</text>
@@ -49,99 +25,82 @@
<text name="ShadersPrefText4">
Super
</text>
- <text name="HigherText2">
- Wyższa
- </text>
- <text name="QualityText2">
- Jakość
- </text>
- <slider label="" name="QualityPerformanceSelection" />
- <check_box label="Zaawansowane" name="CustomSettings" />
- <panel name="CustomGraphics Panel">
- <text name="ShadersText">
- Shadery:
- </text>
- <check_box label="Mapowanie Wypukłości i Połysk" name="BumpShiny" />
- <check_box label="Podstawowe Shadery" name="BasicShaders"
- tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych." />
- <check_box label="Shadery Atmosfery" name="WindLightUseAtmosShaders" />
- <check_box label="Odbicia w Wodzie" name="Reflections" />
- <text name="ReflectionDetailText">
- Ustawienia Odbić:
- </text>
- <radio_group name="ReflectionDetailRadio">
- <radio_item name="0" label="Teren i Drzewa" />
- <radio_item name="1" label="Obiekty Statyczne" />
- <radio_item name="2" label="Awatary i Obiekty" />
- <radio_item name="3" label="Wszystko" />
- </radio_group>
- <text name="AvatarRenderingText">
- Prezentacja Awatarów:
- </text>
- <check_box label="Impostoryzacja Awatarowa" name="AvatarImpostors" />
- <check_box label="Skinning" name="AvatarVertexProgram" />
- <check_box label="Ubranie Awatarów" name="AvatarCloth" />
- <text name="DrawDistanceMeterText1">
- m
- </text>
- <text name="DrawDistanceMeterText2">
- m
- </text>
- <slider label="Głębia Rysowania:" name="DrawDistance" />
- <slider label="Liczba CzÄ…steczek:" name="MaxParticleCount" />
- <slider label="Jakość Post-Procesu:" name="RenderPostProcess" />
- <text name="MeshDetailText">
- Szczegóły Meszu:
- </text>
- <slider label=" Obiekty:" name="ObjectMeshDetail" />
- <slider label=" Elastyczne:" name="FlexibleMeshDetail" />
- <slider label=" Drzewa:" name="TreeMeshDetail" />
- <slider label=" Awatary:" name="AvatarMeshDetail" />
- <slider label=" Teren:" name="TerrainMeshDetail" />
- <slider label=" Niebo:" name="SkyMeshDetail" />
- <text name="PostProcessText">
- Mało
- </text>
- <text name="ObjectMeshDetailText">
- Mało
- </text>
- <text name="FlexibleMeshDetailText">
- Mało
- </text>
- <text name="TreeMeshDetailText">
- Mało
- </text>
- <text name="AvatarMeshDetailText">
- Mało
- </text>
- <text name="TerrainMeshDetailText">
- Mało
- </text>
- <text name="SkyMeshDetailText">
- Mało
- </text>
- <text name="LightingDetailText">
- Ustawienia Światła:
- </text>
- <radio_group name="LightingDetailRadio">
- <radio_item name="SunMoon" label="Tylko Słońce i Księżyc" />
- <radio_item name="LocalLights" label="Tylko Bliskie Światła" />
- </radio_group>
- <text name="TerrainDetailText">
- Szczgóły Terenu:
- </text>
- <radio_group name="TerrainDetailRadio">
- <radio_item name="0" label="Mało" />
- <radio_item name="2" label="Dużo" />
- </radio_group>
+ <panel label="CustomGraphics" name="CustomGraphics Panel">
+ <text name="ShadersText">
+ Cieniowanie pixeli (shadery):
+ </text>
+ <check_box initial_value="true" label="Mapowanie Wypukłości i Połysk" name="BumpShiny"/>
+ <check_box initial_value="true" label="Podstawowe Shadery" name="BasicShaders" tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych."/>
+ <check_box initial_value="true" label="Shadery Atmosfery" name="WindLightUseAtmosShaders"/>
+ <check_box initial_value="true" label="Refleksy w wodzie" name="Reflections"/>
+ <text name="ReflectionDetailText">
+ Ustawienia refleksów:
+ </text>
+ <radio_group name="ReflectionDetailRadio">
+ <radio_item label="Teren i drzewa" name="0"/>
+ <radio_item label="Obiekty Statyczne" name="1"/>
+ <radio_item label="Awatary i Obiekty" name="2"/>
+ <radio_item label="Wszystko" name="3"/>
+ </radio_group>
+ <text name="AvatarRenderingText">
+ Rendering awatarów
+ </text>
+ <check_box initial_value="true" label="Impostoryzacja Awatarowa" name="AvatarImpostors"/>
+ <check_box initial_value="true" label="Rendering awatara przez GPU" name="AvatarVertexProgram"/>
+ <check_box initial_value="true" label="Oddzielne warstwy ubrań" name="AvatarCloth"/>
+ <slider label="Pole widzenia:" name="DrawDistance"/>
+ <text name="DrawDistanceMeterText2">
+ m
+ </text>
+ <slider label="Liczba czÄ…steczek:" name="MaxParticleCount"/>
+ <slider label="Jakość Post-Procesu:" name="RenderPostProcess"/>
+ <text name="MeshDetailText">
+ Szczególy obiektów:
+ </text>
+ <slider label=" Przedmioty:" name="ObjectMeshDetail"/>
+ <slider label=" Obiekty elastyczne:" name="FlexibleMeshDetail"/>
+ <slider label=" Drzewa:" name="TreeMeshDetail"/>
+ <slider label=" Awatary:" name="AvatarMeshDetail"/>
+ <slider label=" Teren:" name="TerrainMeshDetail"/>
+ <slider label=" Niebo:" name="SkyMeshDetail"/>
+ <text name="PostProcessText">
+ Mało
+ </text>
+ <text name="ObjectMeshDetailText">
+ Mało
+ </text>
+ <text name="FlexibleMeshDetailText">
+ Mało
+ </text>
+ <text name="TreeMeshDetailText">
+ Mało
+ </text>
+ <text name="AvatarMeshDetailText">
+ Mało
+ </text>
+ <text name="TerrainMeshDetailText">
+ Mało
+ </text>
+ <text name="SkyMeshDetailText">
+ Mało
+ </text>
+ <text name="LightingDetailText">
+ Ustawienia świateł:
+ </text>
+ <radio_group name="LightingDetailRadio">
+ <radio_item label="Tylko Słońce i Księżyc" name="SunMoon" value="0"/>
+ <radio_item label="Tylko Bliskie Światła" name="LocalLights" value="1"/>
+ </radio_group>
+ <text name="TerrainDetailText">
+ Szczegóły terenu:
+ </text>
+ <radio_group name="TerrainDetailRadio">
+ <radio_item label="Niska" name="0"/>
+ <radio_item label="Wysoka" name="2"/>
+ </radio_group>
</panel>
- <button label="Ustawienia Domyślne" name="Defaults" />
- <button label="Ustawnia Sprzętowe" label_selected="Ustawienia Sprzętowe"
- name="GraphicsHardwareButton" />
- <panel.string name="resolution_format">
- [RES_X] x [RES_Y]
- </panel.string>
- <panel.string name="aspect_ratio_text">
- [NUM]:[DEN]
- </panel.string>
+ <button label="Zastosuj" label_selected="Zastosuj" name="Apply"/>
+ <button label="Zresetuj" name="Defaults"/>
+ <button label="Zaawansowane" name="Advanced"/>
+ <button label="Sprzęt" label_selected="Sprzęt" name="GraphicsHardwareButton"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
index e3cdaae840..9504019f79 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
@@ -1,33 +1,25 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Komunikacja" name="im">
- <text name="text_box">
- Mój Status Online:
+ <panel.string name="log_in_to_change">
+ Zaloguj się ponownie, aby zmienić
+ </panel.string>
+ <button label="Wyczyść Historię" name="clear_cache" tool_tip="Wyczyść obraz zapisu, ostatniej lokalizacji, historii teleportów, stron i bufor danych tekstur"/>
+ <text name="cache_size_label_l">
+ (Miejsca, obrazy, przeglÄ…darka internetowa, wyszukiwarka historii)
</text>
- <check_box label="Mój status online jest dostepny tylko dla Znajomych i Grup"
- name="online_visibility" />
- <text name="text_box2">
- Ustawienia IM:
+ <check_box label="Mój status online jest dostępny tylko dla znajomych i grup do których należę" name="online_visibility"/>
+ <check_box label="Możliwość wysyłania wiadomości prywatnej (IM) oraz rozmowy głosowej tylko dla znajomych i grup do których należę" name="voice_call_friends_only_check"/>
+ <check_box label="Wyłącz mikrofon po zakończeniu rozmowy głosowej" name="auto_disengage_mic_check"/>
+ <check_box label="Akceptuj Ciasteczka" name="cookies_enabled"/>
+ <text name="Logs:">
+ Logi:
</text>
- <string name="log_in_to_change">
- zaloguj się żeby zmienić
- </string>
- <check_box label="Wysyłaj IMy na email ([EMAIL])" name="send_im_to_email" />
- <check_box label="Dołącz IMy do Konsola Czatu" name="include_im_in_chat_console" />
- <check_box label="Pokazuj czas w IM" name="show_timestamps_check" />
- <check_box label="Powiadamiaj o zalogowanych znajomych"
- name="friends_online_notify_checkbox" />
- <text name="text_box3">
- Pracuś Mówi:
+ <check_box label="Zapisz logi rozmów ogólnych na moim komputerze" name="log_nearby_chat"/>
+ <check_box label="Zapisuj logi wiadomości prywatnych (IM) na moim komputerze" name="log_instant_messages"/>
+ <check_box label="Pokazuj czas" name="show_timestamps_check_im"/>
+ <text name="log_path_desc">
+ Lokalizacja zapisu:
</text>
- <text name="text_box4">
- Ustawienia Zapisu:
- </text>
- <check_box label="Zapisuj IMy" name="log_instant_messages" />
- <check_box label="Pokazuj czas w zapisie IM" name="log_instant_messages_timestamp" />
- <check_box label="Pokazuj koniec ostatniego dialogu IM" name="log_show_history" />
- <check_box label="Zapisuj czat" name="log_chat" />
- <check_box label="Pokazuj czas w zapisie czatu" name="log_chat_timestamp" />
- <check_box label="Pokazuj nowe IMy w zapisie czatu" name="log_chat_IM" />
- <check_box label="Pokazuj czas łącznie z datą" name="log_date_timestamp" />
- <button label="Lokacja" label_selected="Lokacja" name="log_path_button" />
+ <button label="PrzeglÄ…daj" label_selected="PrzeglÄ…daj" name="log_path_button"/>
+ <button label="Lista Zablokowanych" name="block_list"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
index 1e2289b496..f74f4f2333 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
@@ -1,31 +1,50 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Joystick i Kamera" name="Input panel">
- <text name=" Mouselook Options:">
- Widok Panoramiczny:
+<panel label="Ustawienia" name="Input panel">
+ <button label="Ustawienia Joysticka" name="joystick_setup_button"/>
+ <text name="Mouselook:">
+ Widok panoramiczny:
</text>
- <text name=" Mouse Sensitivity:">
- Czułość Myszki:
+ <text name=" Mouse Sensitivity">
+ Czułość Myszki
</text>
- <slider_bar name="mouse_sensitivity"/>
- <check_box label="Zamień klawisze myszy" name="invert_mouse"/>
- <text name=" Auto Fly Options:">
- Automatczne Latanie:
+ <slider name="mouse_sensitivity"/>
+ <check_box label="Zmień klawisze myszki" name="invert_mouse"/>
+ <text name="Network:">
+ Sieć:
</text>
- <check_box label="Lataj/Ląduj Używając Klawiszy PgUp/PgDn" name="automatic_fly"/>
- <text name=" Camera Options:">
- Ustawienia Kamery:
+ <text name="Maximum bandwidth">
+ Maksymalna przepustowość
</text>
- <text name="camera_fov_label">
- KÄ…t Widoku Kamery:
+ <text name="text_box2">
+ kbps
</text>
- <text name="Camera Follow Distance:">
- Dystans Kamery:
+ <check_box label="Port dedykowany dla aplikacji" name="connection_port_enabled"/>
+ <spinner label="Numer Portu:" name="connection_port"/>
+ <text name="cache_size_label_l">
+ Rozmiar bufora danych
</text>
- <check_box label="Edycja - Automatyczny Ruch Kamery" name="edit_camera_movement" tool_tip="Używaj automatycznego ustawienia kamery podczas włączania i wyłączania trybu edycji"/>
- <check_box label="Wygląd - Automatyczny Ruch Kamery" name="appearance_camera_movement" tool_tip="Używaj automatycznego ustawienia kamery w trybu edycji"/>
- <text name="text2">
- Wyświetlanie Awatara:
+ <text name="text_box5">
+ MB
</text>
- <check_box label="Awatar Widoczny w Trybie Panoramicznym" name="first_person_avatar_visible"/>
- <button label="Ustawienia Joysticka" name="joystick_setup_button"/>
+ <text name="Cache location">
+ Lokalizacja bufora danych:
+ </text>
+ <button label="Ustaw" label_selected="Ustaw" name="set_cache"/>
+ <button label="Zresetuj" label_selected="Zresetuj" name="reset_cache"/>
+ <text name="Web:">
+ Internet:
+ </text>
+ <radio_group name="use_external_browser">
+ <radio_item label="Użyj zewnętrznej przeglądarki (IE, Firefox, Safari)" name="external" tool_tip="Używaj zewnętrznej przeglądarki. Nie jest to rekomendowane w trybie pełnoekranowym." value="1"/>
+ <radio_item label="Używaj wbudowanej przeglądarki." name="internal" tool_tip="Używaj wbudowanej przeglądarki. Ta przeglądarka otworzy nowe okno w [APP_NAME]." value=""/>
+ </radio_group>
+ <check_box initial_value="prawda" label="Zezwalaj na wtyczki" name="browser_plugins_enabled"/>
+ <check_box initial_value="prawda" label="Akceptuj ciasteczka z Internetu" name="cookies_enabled"/>
+ <check_box initial_value="prawda" label="Zezwalaj na Javascript" name="browser_javascript_enabled"/>
+ <check_box initial_value="false" label="Używaj Serwera Proxy" name="web_proxy_enabled"/>
+ <text name="Proxy location">
+ Lokalizacja Proxy:
+ </text>
+ <line_editor name="web_proxy_editor" tool_tip="Nazwa lub IP proxy, którego chcesz użyć"/>
+ <spinner label="Numer portu:" name="web_proxy_port"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
index f9b5d221a5..04372208d6 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
@@ -2,13 +2,20 @@
<panel label="Dźwięki" name="Preference Media panel">
<slider label="Główny" name="System Volume"/>
<check_box initial_value="true" label="Wycisz podczas minimalizacji" name="mute_when_minimized"/>
- <slider label="Otoczenie" name="Wind Volume"/>
<slider label="Interfejs" name="UI Volume"/>
+ <slider label="Otoczenie" name="Wind Volume"/>
+ <slider label="Efekty dźwiękowe" name="SFX Volume"/>
+ <slider label="Muzyka strumieniowa" name="Music Volume"/>
+ <check_box label="Odtwarzaj media audio" name="music_enabled"/>
<slider label="Media" name="Media Volume"/>
- <slider label="Efekty Dźwiękowe" name="SFX Volume"/>
- <slider label="Muzyka Strumieniowa" name="Music Volume"/>
- <check_box label="Głos" name="enable_voice_check"/>
- <slider label="Głos" name="Voice Volume"/>
+ <check_box label="Odtwarzaj media" name="enable_media"/>
+ <slider label="Komunikacja Głosowa" name="Voice Volume"/>
+ <check_box label="Pozwól na rozmowy głosowe" name="enable_voice_check"/>
+ <check_box label="Automatycznie odtwarzaj media" name="media_auto_play_btn" tool_tip="Zaznacz tę funkcję by uruchomić automatyczne uruchamianie mediów" value="prawda"/>
+ <check_box label="Uruchom media załączone do innych awatarów" name="media_show_on_others_btn" tool_tip="Odznacz tę funkcję by ukryć media załączone to awatarów w publiżu" value="prawda"/>
+ <text name="voice_chat_settings">
+ Ustawienia Komunikacji Głosowej
+ </text>
<text name="Listen from">
Odtwarzaj z:
</text>
diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
new file mode 100644
index 0000000000..f10ce5ea4d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="MediaControlsPanel">
+ <string name="min_width">
+ 300
+ </string>
+ <string name="min_height">
+ 75
+ </string>
+ <string name="zoom_medium_padding">
+ 1.1
+ </string>
+ <string name="top_world_view_avoid_zone">
+ 50
+ </string>
+ <layout_stack name="progress_indicator_area">
+ <panel name="media_progress_indicator">
+ <progress_bar name="media_progress_bar" tool_tip="Wczytywanie mediów"/>
+ </panel>
+ </layout_stack>
+ <layout_stack name="media_controls">
+ <layout_panel name="back">
+ <button name="back_btn" tool_tip="Przejdź do poprzedniego"/>
+ </layout_panel>
+ <layout_panel name="fwd">
+ <button name="fwd_btn" tool_tip="Przejdź do następnego"/>
+ </layout_panel>
+ <layout_panel name="home">
+ <button name="home_btn" tool_tip="Strona Domowa"/>
+ </layout_panel>
+ <layout_panel name="media_stop">
+ <button name="media_stop_btn" tool_tip="Zatrzymaj media"/>
+ </layout_panel>
+ <layout_panel name="reload">
+ <button name="reload_btn" tool_tip="Odśwież"/>
+ </layout_panel>
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Zatrzymaj wczytywanie"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Odtwarzaj Media"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Wstrzymaj media"/>
+ </layout_panel>
+ <layout_panel name="media_address">
+ <line_editor name="media_address_url" tool_tip="URL Mediów"/>
+ <layout_stack name="media_address_url_icons">
+ <layout_panel>
+ <icon name="media_whitelist_flag" tool_tip="Biała Lista aktywna"/>
+ </layout_panel>
+ <layout_panel>
+ <icon name="media_secure_lock_flag" tool_tip="Zabezpiecz przeglÄ…danie"/>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="media_play_position">
+ <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Postęp odtwarzania filmu"/>
+ </layout_panel>
+ <layout_panel name="skip_back">
+ <button name="skip_back_btn" tool_tip="Przewiń do tyłu"/>
+ </layout_panel>
+ <layout_panel name="skip_forward">
+ <button name="skip_forward_btn" tool_tip="Przewiń do przodu"/>
+ </layout_panel>
+ <layout_panel name="media_volume">
+ <button name="media_mute_button" tool_tip="Wycisz Media"/>
+ <slider name="volume_slider" tool_tip="Głośność Mediów"/>
+ </layout_panel>
+ <layout_panel name="zoom_frame">
+ <button name="zoom_frame_btn" tool_tip="Przybliż do mediów"/>
+ </layout_panel>
+ <layout_panel name="close">
+ <button name="close_btn" tool_tip="Oddal"/>
+ </layout_panel>
+ <layout_panel name="new_window">
+ <button name="new_window_btn" tool_tip="Otwórz URL w przeglądarce"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_profile.xml b/indra/newview/skins/default/xui/pl/panel_profile.xml
new file mode 100644
index 0000000000..766ed94822
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_profile.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profil" name="panel_profile">
+ <string name="no_partner_text" value="Brak"/>
+ <string name="no_group_text" value="Żadne"/>
+ <string name="RegisterDateFormat">
+ [REG_DATE] ([AGE])
+ </string>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="profile_scroll_panel">
+ <panel name="second_life_image_panel">
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <text name="title_rw_descr_text" value="Życie#1:"/>
+ </panel>
+ <text name="title_member_text" value="Urodziny:"/>
+ <text name="title_acc_status_text" value="Konto:"/>
+ <text name="title_partner_text" value="Partner:"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(przetwarzanie)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Grupy:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_buttons_panel">
+ <button label="Poznaj" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/>
+ <button label="IM" name="im" tool_tip="Rozpocznij sesjÄ™ czatu (IM)"/>
+ <button label="Dzwoń" name="call" tool_tip="Zadzwoń"/>
+ <button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/>
+ <button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>
+ <button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekty Rezydentowi"/>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Edytuj Profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/>
+ <button label="Edytuj Wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubranie..."/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_profile_view.xml b/indra/newview/skins/default/xui/pl/panel_profile_view.xml
new file mode 100644
index 0000000000..637b278ef2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_profile_view.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+ <string name="status_online">
+ Obecnie w SL
+ </string>
+ <string name="status_offline">
+ Nieaktywny
+ </string>
+ <text_editor name="user_name" value="(Åadowanie...)"/>
+ <text name="status" value="Obecnie w SL"/>
+ <tab_container name="tabs">
+ <panel label="PROFIL" name="panel_profile"/>
+ <panel label="ULUBIONE" name="panel_picks"/>
+ <panel label="NOTATKI &amp; PRYWATNOŚĆ" name="panel_notes"/>
+ </tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml
index f20387dd25..2b37dd96b7 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Umowa" name="Covenant">
<text name="estate_section_lbl">
- MajÄ…tek:
+ MajÄ…tek
</text>
<text name="estate_name_lbl">
Nazwa:
@@ -26,45 +26,45 @@
Brak umowy dla tego majÄ…tku.
</text_editor>
<button label="Wyresetuj" name="reset_covenant"/>
- <text name="covenant_help_text" bottom_delta="-6">
+ <text bottom_delta="-6" name="covenant_help_text">
Zmiany w umowie zostaną wyświetlone we
wszystkich posiadłościach majątku.
</text>
- <text name="covenant_instructions" bottom_delta="-36">
+ <text bottom_delta="-36" name="covenant_instructions">
Przeciągnij oraz wrzuć notę by zmienić umowę dla tego majątku.
</text>
<text name="region_section_lbl">
- Region:
+ Region
</text>
<text name="region_name_lbl">
Nazwa:
</text>
- <text name="region_name_text" left="115">
+ <text left="115" name="region_name_text">
leyla
</text>
<text name="region_landtype_lbl">
Typ:
</text>
- <text name="region_landtype_text" left="115">
+ <text left="115" name="region_landtype_text">
Region Główny / Ziemia
</text>
<text name="region_maturity_lbl">
Rodzaj:
</text>
- <text name="region_maturity_text" left="115">
+ <text left="115" name="region_maturity_text">
&apos;Adult&apos;
</text>
<text name="resellable_lbl">
Odsprzedaj:
</text>
- <text name="resellable_clause" left="115" width="350">
- Posiadłość zakupiona w tym regionie nie może być odsprzedana.
+ <text left="115" name="resellable_clause" width="350">
+ Posiadłość kupiona w tym Regionie nie może być odsprzedana.
</text>
<text name="changeable_lbl">
Podziel:
</text>
- <text name="changeable_clause" left="115" width="350">
- Posiadłość zakupiona w tym regionie nie może być
+ <text left="115" name="changeable_clause" width="350">
+ Posiadłość kupiona w tym Regionie nie może być
łączona/dzielona.
</text>
<string name="can_resell">
diff --git a/indra/newview/skins/default/xui/pl/panel_region_debug.xml b/indra/newview/skins/default/xui/pl/panel_region_debug.xml
index fe7b554a13..c5b08383dc 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_debug.xml
@@ -6,15 +6,15 @@
<text name="region_text">
brak danych
</text>
- <check_box label="Zablokuj Skrypty" name="disable_scripts_check" tool_tip="Zablokuj wszystkie skrypty w tym Regionie"/>
+ <check_box label="Zablokuj skrypty" name="disable_scripts_check" tool_tip="Zablokuj wszystkie skrypty w tym Regionie"/>
<button label="?" name="disable_scripts_help"/>
- <check_box label="Zablokuj Kolizje" name="disable_collisions_check" tool_tip="Zablokuj kolizje obiektów (nie Awatarów) w tym Regionie"/>
+ <check_box label="Zablokuj kolizje" name="disable_collisions_check" tool_tip="Zablokuj kolizje obiektów (nie awatarów) w tym Regionie"/>
<button label="?" name="disable_collisions_help"/>
- <check_box label="Zablokuj Fizykę" name="disable_physics_check" tool_tip="Zablokuj wpływ fizyki w tym Regionie"/>
+ <check_box label="Zablokuj fizykę" name="disable_physics_check" tool_tip="Zablokuj wpływ fizyki w tym Regionie"/>
<button label="?" name="disable_physics_help"/>
<button label="Zastosuj" name="apply_btn"/>
<text name="objret_text_lbl">
- Zwrot Obiektu
+ Zwrot obiektu
</text>
<text name="resident_text_lbl">
Rezydent:
@@ -22,19 +22,19 @@
<line_editor name="target_avatar_name">
(brak)
</line_editor>
- <button label="Wybierz..." name="choose_avatar_btn"/>
+ <button label="Wybierz" name="choose_avatar_btn"/>
<text name="options_text_lbl">
Opcje:
</text>
- <check_box label="Odeślij wyłącznie obiekty ze skryptami" name="return_scripts" tool_tip="Odeślij wyłącznie obiekty ze skryptami."/>
+ <check_box label="Ze skryptami" name="return_scripts" tool_tip="Odeślij wyłącznie obiekty ze skryptami"/>
<check_box label="Odeślij wyłącznie obiekty które są na posiadłościach innych osób" name="return_other_land" tool_tip="Odeślij wyłącznie obiekty które są na posiadłościach innych osób"/>
- <check_box label="Odeślij obiekty z wszystkich regionów w tym majątku" name="return_estate_wide" tool_tip="Odeślij obiekty z wszystkich regionów w tym majątku"/>
+ <check_box label="W każdym regionie tego majątku" name="return_estate_wide" tool_tip="Odeślij obiekty z wszystkich regionów w tym majątku"/>
<button label="Odeślij" name="return_btn"/>
- <button label="Znajdź Główne Kolizje..." name="top_colliders_btn" tool_tip="Lista obiektów doświadczających najwięcej potencjalnych kolizji"/>
+ <button label="Znajdź główne kolizje..." name="top_colliders_btn" tool_tip="Lista obiektów doświadczających najwięcej potencjalnych kolizji"/>
<button label="?" name="top_colliders_help"/>
- <button label="Główne Skrypty..." name="top_scripts_btn" tool_tip="Lista obiektów najdłużej wykonujących skrypty"/>
+ <button label="Główne skrypty..." name="top_scripts_btn" tool_tip="Lista obiektów najdłużej wykonujących skrypty"/>
<button label="?" name="top_scripts_help"/>
<button label="Restart Regionu" name="restart_btn" tool_tip="Odliczanie i restart Regionu za dwie minuty"/>
<button label="?" name="restart_help"/>
- <button label="Opóźnij Restart" name="cancel_restart_btn" tool_tip="Opóźnij restart Regionu o godzinę"/>
+ <button label="Opóźnij restart" name="cancel_restart_btn" tool_tip="Opóźnij restart Regionu o godzinę"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_estate.xml b/indra/newview/skins/default/xui/pl/panel_region_estate.xml
index 4275f3f647..a796274738 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_estate.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="MajÄ…tek" name="Estate">
<text name="estate_help_text">
- Zmiany ustawień na tej zakładce odnoszą się
-do wszystkich Regionów w tym Majątku.
+ Zmiany w tej zakładce będą odczuwalne w całym Regionie.
</text>
<text name="estate_text">
MajÄ…tek:
@@ -11,24 +10,24 @@ do wszystkich Regionów w tym Majątku.
(brak danych)
</text>
<text name="owner_text">
- Właściciel:
+ Właściciel Majątku:
</text>
<text name="estate_owner">
(brak danych)
</text>
- <check_box label="Używaj Czasu Światowego" name="use_global_time_check"/>
+ <check_box label="Używaj czasu światowego" name="use_global_time_check"/>
<button label="?" name="use_global_time_help"/>
<check_box label="Stałe Słońce" name="fixed_sun_check"/>
<button label="?" name="fixed_sun_help"/>
- <slider label="Pora Doby" name="sun_hour_slider"/>
- <check_box label="Dostęp Publiczny" name="externally_visible_check"/>
+ <slider label="Pora doby" name="sun_hour_slider"/>
+ <check_box label="Dostęp publiczny" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Dostęp Ograniczony do:
+ Ogranicz dostęp dla kont zweryfikowanych przez:
</text>
- <check_box label="Rezydenci z danymi o koncie" name="limit_payment" tool_tip="Zablokuj niepożądanych Rezydentów."/>
- <check_box label="Dorośli ze sprawdzonym wiekiem" name="limit_age_verified" tool_tip="Zablokuj Rezydentów którzy nie zweryfikowali swojego wieku. Dodatkowe informacje pod support.secondlife.com."/>
- <check_box label="Rozmowy Dozwolone" name="voice_chat_check"/>
+ <check_box label="Rezydenci z danymi o koncie" name="limit_payment" tool_tip="Zbanuj niezidentyfikowanych Rezydentów"/>
+ <check_box label="Rezydenci, którzy dokonali weryfikacji wieku" name="limit_age_verified" tool_tip="Zbanuj Rezydentów, którzy nie zweryfikowali swojego wieku. Odwiedź stronę [SUPPORT_SITE] po więcej informacji."/>
+ <check_box label="Rozmowy dozwolone" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Teleportacja Dozwolona" name="allow_direct_teleport"/>
<button label="?" name="allow_direct_teleport_help"/>
@@ -41,7 +40,7 @@ do wszystkich Regionów w tym Majątku.
</string>
<button label="?" name="abuse_email_address_help"/>
<button label="Zastosuj" name="apply_btn"/>
- <button label="Wyrzuć Awatara z Majątku..." name="kick_user_from_estate_btn"/>
+ <button label="Wyrzuć Rezydenta z Majątku..." name="kick_user_from_estate_btn"/>
<button label="Wyślij Wiadomość do Majątku..." name="message_estate_btn"/>
<text name="estate_manager_label">
ZarzÄ…dcy MajÄ…tku:
diff --git a/indra/newview/skins/default/xui/pl/panel_region_general.xml b/indra/newview/skins/default/xui/pl/panel_region_general.xml
index 20296dac71..1410a2a882 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_general.xml
@@ -18,36 +18,26 @@
<text name="region_type">
nieznany
</text>
- <check_box label="Zablokuj Zmiany Terenu" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
- <check_box label="Zablokuj Latanie" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
- <check_box label="Uszkodzenia Dozwolone" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
- <check_box label="Zablokuj Popychanie" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
- <check_box label="Odsprzedaż Dozwolona" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help"/>
- <check_box label="ÅÄ…czenie/Dzielenie Dozwolone" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help"/>
- <check_box label="Zablokuj Wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy regionu i posiadłości w wynikach wyszukiwania"/>
- <button label="?" name="parcel_search_help"/>
+ <check_box label="Zablokuj zmiany terenu" name="block_terraform_check"/>
+ <check_box label="Zablokuj latanie" name="block_fly_check"/>
+ <check_box label="Uszkodzenia dozwolone" name="allow_damage_check"/>
+ <check_box label="Zablokuj popychanie" name="restrict_pushobject"/>
+ <check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/>
+ <check_box label="ÅÄ…czenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/>
+ <check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy regionu i posiadłości w wynikach wyszukiwania"/>
<spinner label="Limit Gości" name="agent_limit_spin"/>
- <button label="?" name="agent_limit_help"/>
- <spinner label="Ekstra Obiekty" name="object_bonus_spin"/>
- <button label="?" name="object_bonus_help"/>
- <text label="Ograniczenia Wieku" name="access_text">
+ <spinner label="Ekstra obiekty" name="object_bonus_spin"/>
+ <text label="Ograniczenia wieku" name="access_text">
Rodzaj:
</text>
- <combo_box label="&apos;Mature&apos;" name="access_combo">
- <combo_box.item label="&apos;Adult&apos;" name="Adult"/>
- <combo_box.item label="&apos;Mature&apos;" name="Mature"/>
- <combo_box.item label="&apos;PG&apos;" name="PG"/>
- </combo_box>
- <button label="?" name="access_help"/>
+ <icons_combo_box label="&apos;Mature&apos;" name="access_combo">
+ <icons_combo_box.item label="&apos;Adult&apos;" name="Adult" value="42"/>
+ <icons_combo_box.item label="&apos;Mature&apos;" name="Mature" value="21"/>
+ <icons_combo_box.item label="&apos;PG&apos;" name="PG" value="13"/>
+ </icons_combo_box>
<button label="Zastosuj" name="apply_btn"/>
- <button label="Wyrzuć Awatara..." name="kick_btn"/>
- <button label="Wyrzuć Wszystkich..." name="kick_all_btn"/>
- <button label="Wyślij Wiadomość do Regionu..." name="im_btn"/>
- <button label="Obsługa Teleportera..." name="manage_telehub_btn"/>
+ <button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/>
+ <button label="Teleportuj do Miejsca Startu wszystkich Rezydentów..." name="kick_all_btn"/>
+ <button label="Wyślij wiadomość do Regionu..." name="im_btn"/>
+ <button label="Obsługa teleportera..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
new file mode 100644
index 0000000000..ffa8f1e18a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Region" name="General">
+ <text name="region_text_lbl">
+ Region:
+ </text>
+ <text name="region_text">
+ nieznany
+ </text>
+ <text name="version_channel_text_lbl">
+ Wersja:
+ </text>
+ <text name="version_channel_text">
+ nieznany
+ </text>
+ <text name="region_type_lbl">
+ Typ:
+ </text>
+ <text name="region_type">
+ nieznany
+ </text>
+ <check_box label="Zablokuj zmiany terenu" name="block_terraform_check"/>
+ <check_box label="Zablokuj latanie" name="block_fly_check"/>
+ <check_box label="Uszkodzenia dozwolone" name="allow_damage_check"/>
+ <check_box label="Zablokuj popychanie" name="restrict_pushobject"/>
+ <check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/>
+ <check_box label="ÅÄ…czenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/>
+ <check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy Regionu i Posiadłości w wynikach wyszukiwania"/>
+ <spinner label="Limit Gości" name="agent_limit_spin"/>
+ <spinner label="Ekstra obiekty" name="object_bonus_spin"/>
+ <text label="Restrykcje wieku" name="access_text">
+ Rodzaj:
+ </text>
+ <combo_box label="Moderuj" name="access_combo">
+ <combo_box.item label="Adult" name="Adult"/>
+ <combo_box.item label="Moderuj" name="Mature"/>
+ <combo_box.item label="Ogólne" name="PG"/>
+ </combo_box>
+ <button label="Zastosuj" name="apply_btn"/>
+ <button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/>
+ <button label="Teleportuj do Miejsca Startu wszystkich Rezydentów..." name="kick_all_btn"/>
+ <button label="Wyślij wiadomość do Regionu..." name="im_btn"/>
+ <button label="Obsługa teleportera..." name="manage_telehub_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml
index b206616e34..917ae91774 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml
@@ -6,22 +6,22 @@
<text name="region_text">
brak danych
</text>
- <spinner label="Poziom Wody" name="water_height_spin" />
+ <spinner label="Poziom wody" name="water_height_spin" />
<button label="?" name="water_height_help" />
- <spinner label="Górny Limit Terenu" name="terrain_raise_spin" />
+ <spinner label="Górny limit terenu" name="terrain_raise_spin" />
<button label="?" name="terrain_raise_help" />
- <spinner label="Dolny Limit Terenu" name="terrain_lower_spin" />
+ <spinner label="Dolny limit terenu" name="terrain_lower_spin" />
<button label="?" name="terrain_lower_help" />
<check_box label="Używaj Słońca Majątku" name="use_estate_sun_check" />
<button label="?" name="use_estate_sun_help" />
<check_box label="Stałe Słońce" name="fixed_sun_check" />
<button label="?" name="fixed_sun_help" />
- <slider label="Pora Doby" name="sun_hour_slider" />
+ <slider label="Pora doby" name="sun_hour_slider" />
<button label="Zastosuj" name="apply_btn" />
- <button label="Zapisz Surowy Teren..." name="download_raw_btn"
+ <button label="Zapisz surowy teren..." name="download_raw_btn"
tool_tip="Dostępne tylko dla Właścicieli Majątku, nie dla Zarządców" />
<button label="?" name="download_raw_help" />
- <button label="Załaduj Surowy Teren..." name="upload_raw_btn"
+ <button label="Załaduj surowy teren..." name="upload_raw_btn"
tool_tip="Dostępne tylko dla Właścicieli Majątku, nie dla Zarządców" />
<button label="?" name="upload_raw_help" />
<button label="Ustal Teren" name="bake_terrain_btn"
diff --git a/indra/newview/skins/default/xui/pl/panel_region_texture.xml b/indra/newview/skins/default/xui/pl/panel_region_texture.xml
index d24579fc75..156f3db63f 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_texture.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="Tekstury Gruntu" name="Textures">
<text name="region_text_lbl">
Region:
@@ -25,33 +25,33 @@
Zakres Poziomów dla Tekstury
</text>
<text name="height_text_lbl6">
- Południe-Zachód
+ Północny-Zachód
</text>
<text name="height_text_lbl7">
- Północ-Zachód
+ Północny-Wschód
</text>
<text name="height_text_lbl8">
- Południe-Wschód
+ Południowy-Zachód
</text>
<text name="height_text_lbl9">
- Północ-Wschód
- </text>
- <spinner label="Dół" name="height_start_spin_0" />
- <spinner label="Dół" name="height_start_spin_1" />
- <spinner label="Dół" name="height_start_spin_2" />
- <spinner label="Dół" name="height_start_spin_3" />
- <spinner label="Góra" name="height_range_spin_0" />
- <spinner label="Góra" name="height_range_spin_1" />
- <spinner label="Góra" name="height_range_spin_2" />
- <spinner label="Góra" name="height_range_spin_3" />
+ Południowy-Wschód
+ </text>
+ <spinner label="Dół" name="height_start_spin_0"/>
+ <spinner label="Dół" name="height_start_spin_1"/>
+ <spinner label="Dół" name="height_start_spin_2"/>
+ <spinner label="Dół" name="height_start_spin_3"/>
+ <spinner label="Góra" name="height_range_spin_0"/>
+ <spinner label="Góra" name="height_range_spin_1"/>
+ <spinner label="Góra" name="height_range_spin_2"/>
+ <spinner label="Góra" name="height_range_spin_3"/>
<text name="height_text_lbl10">
Wartości reprezentują zakresy zlewania powyższych tekstur.
</text>
<text name="height_text_lbl11">
- Wartość DÓÅ, wyrażona w metrach, to MAKSYMALNY poziom dla tekstury #1,
+ Wartość DÓÅ, wyrażona w metrach, to MAKSYMALNY poziom dla tekstury #1, a wartość GÓRA to MINIMALNY poziom dla tekstury #4.
</text>
<text name="height_text_lbl12">
a wartość GÓRA to MINIMALNY poziom dla tekstury #4.
</text>
- <button label="Zastosuj" name="apply_btn" />
+ <button label="Zastosuj" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_script_ed.xml b/indra/newview/skins/default/xui/pl/panel_script_ed.xml
new file mode 100644
index 0000000000..09c3d8ad04
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_script_ed.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="script panel">
+ <panel.string name="loading">
+ Åadowanie...
+ </panel.string>
+ <panel.string name="can_not_view">
+ Nie posiadasz praw do zobaczenia lub edycji kodu tego skryptu ponieważ udostępnione Ci prawa to &quot;brak kopiowania&quot;. Musisz posiadać pełne prawa by móc zobaczyć lub edytować kod skryptu w zawartości obiektu.
+ </panel.string>
+ <panel.string name="public_objects_can_not_run">
+ Publiczne obiekty nie mogą uruchamiać skryptów
+ </panel.string>
+ <panel.string name="script_running">
+ Uruchomione
+ </panel.string>
+ <panel.string name="Title">
+ Skrypt: [NAME]
+ </panel.string>
+ <text_editor name="Script Editor">
+ Åadowanie...
+ </text_editor>
+ <button label="Zapisz" label_selected="Zapisz" name="Save_btn"/>
+ <combo_box label="Wklej..." name="Insert..."/>
+ <menu_bar name="script_menu">
+ <menu label="Plik" name="File">
+ <menu_item_call label="Zapisz" name="Save"/>
+ <menu_item_call label="Cofnij wszystkie zmiany" name="Revert All Changes"/>
+ </menu>
+ <menu label="Edytuj" name="Edit">
+ <menu_item_call label="Cofnij" name="Undo"/>
+ <menu_item_call label="Do Przodu" name="Redo"/>
+ <menu_item_call label="Wytnij" name="Cut"/>
+ <menu_item_call label="Kopiuj" name="Copy"/>
+ <menu_item_call label="Wklej" name="Paste"/>
+ <menu_item_call label="Wybierz Wszystko" name="Select All"/>
+ <menu_item_call label="Odznacz" name="Deselect"/>
+ <menu_item_call label="Znajdź / Zamień..." name="Search / Replace..."/>
+ </menu>
+ <menu label="Pomoc" name="Help">
+ <menu_item_call label="Pomoc..." name="Help..."/>
+ <menu_item_call label="Pomoc..." name="Keyword Help..."/>
+ </menu>
+ </menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml
new file mode 100644
index 0000000000..e1863517a2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="MÓJ AWATAR" name="script_limits_my_avatar_panel">
+ <text name="script_memory">
+ Zużycie Skryptów przez Awatara
+ </text>
+ <text name="loading_text">
+ Åadowanie...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Rozmiar (kb)" name="size"/>
+ <scroll_list.columns label="URL" name="urls"/>
+ <scroll_list.columns label="Nazwa Obiektu" name="name"/>
+ <scroll_list.columns label="Lokalizacja" name="location"/>
+ </scroll_list>
+ <button label="Odśwież listę" name="refresh_list_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml
new file mode 100644
index 0000000000..1419a9c9f6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="PAMIĘĆ REGIONU" name="script_limits_region_memory_panel">
+ <text name="script_memory">
+ Pamięć Skryptu Parceli
+ </text>
+ <text name="loading_text">
+ Åadowanie...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Rozmiar (kb)" name="size"/>
+ <scroll_list.columns label="URL" name="urls"/>
+ <scroll_list.columns label="Nazwa Obiektu" name="name"/>
+ <scroll_list.columns label="Właściciel" name="owner"/>
+ <scroll_list.columns label="Parcela" name="parcel"/>
+ <scroll_list.columns label="Lokalizacja" name="location"/>
+ </scroll_list>
+ <button label="Odśwież listę" name="refresh_list_btn"/>
+ <button label="Pokaż" name="highlight_btn"/>
+ <button label="Zwróć" name="return_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray.xml b/indra/newview/skins/default/xui/pl/panel_side_tray.xml
new file mode 100644
index 0000000000..f34fd0e108
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_side_tray.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Side tray cannot show background because it is always
+ partially on screen to hold tab buttons. -->
+<side_tray name="sidebar">
+ <sidetray_tab description="Przełącz Panel Boczny" name="sidebar_openclose" tab_title="Przełącz Panel Boczny"/>
+ <sidetray_tab description="Miejsce Startu." name="sidebar_home" tab_title="Home">
+ <panel label="miejsce startu" name="panel_home"/>
+ </sidetray_tab>
+ <sidetray_tab description="Edytuj swój publiczny profil oraz ulubione zakładki." name="sidebar_me" tab_title="My Profile">
+ <panel_container name="panel_container">
+ <panel label="Ja" name="panel_me"/>
+ </panel_container>
+ </sidetray_tab>
+ <sidetray_tab description="Znajdź swoich znajomych, kontakty oraz Rezydentów w pobliżu Ciebie." name="sidebar_people" tab_title="People">
+ <panel_container name="panel_container">
+ <panel label="Grupa" name="panel_group_info_sidetray"/>
+ <panel label="Zablokowani Rezydenci &amp; Obiekty" name="panel_block_list_sidetray"/>
+ </panel_container>
+ </sidetray_tab>
+ <sidetray_tab description="Znajdź i odwiedź miejsca, w których byłeś wcześniej." label="Miejsca" name="sidebar_places" tab_title="Places">
+ <panel label="Miejsca" name="panel_places"/>
+ </sidetray_tab>
+ <sidetray_tab description="PrzeglÄ…daj SzafÄ™." name="sidebar_inventory" tab_title="My Inventory">
+ <panel label="Edytuj SzafÄ™" name="sidepanel_inventory"/>
+ </sidetray_tab>
+ <sidetray_tab description="Zmień swój obecny wygląd i ubranie." name="sidebar_appearance" tab_title="My Appearance">
+ <panel label="Edytuj WyglÄ…d" name="sidepanel_appearance"/>
+ </sidetray_tab>
+</side_tray>
diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml
new file mode 100644
index 0000000000..0ae9c1cf61
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="sidetray_tab_panel">
+ <text name="sidetray_tab_title" value="Schowek"/>
+ <button name="show_help" tool_tip="Pomoc"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml
new file mode 100644
index 0000000000..0f99f3911c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
+<panel name="panel_stand_stop_flying">
+ <button label="Wstań" name="stand_btn" tool_tip="Kliknij tutaj by wstać."/>
+ <button label="Zatrzymaj latanie" name="stop_fly_btn" tool_tip="Zatrzymaj latanie"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_status_bar.xml b/indra/newview/skins/default/xui/pl/panel_status_bar.xml
index 9226e67dff..cd2ae14f6c 100644
--- a/indra/newview/skins/default/xui/pl/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/pl/panel_status_bar.xml
@@ -1,39 +1,31 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="status">
- <text name="ParcelNameText" tool_tip="Nazwa posiadłości w której się znajdujesz. Po więcej informacji kliknij O Posiadłości.">
- Nazwa Posiadłości
- </text>
- <text name="BalanceText" tool_tip="Stan Konta">
- Åadowanie...
- </text>
- <button label="" label_selected="" name="buycurrency" tool_tip="Kup $L" />
- <text name="TimeText" tool_tip="Obecny Czas (Pacyficzny)">
- 12:00 AM
- </text>
- <string name="StatBarDaysOfWeek">
+ <panel.string name="StatBarDaysOfWeek">
Niedziela:Poniedziałek:Wtorek:Środa:Czwartek:Piątek:Sobota
- </string>
- <string name="StatBarMonthsOfYear">
+ </panel.string>
+ <panel.string name="StatBarMonthsOfYear">
Styczeń:Luty:Marzec:Kwiecień:Maj:Czerwiec:Lipiec:Styczeń:Wrzesień:Październik:Listopad:Grudzień
- </string>
- <button label="" label_selected="" name="scriptout" tool_tip="Błędy i Ostrzeżenia Skryptów" />
- <button label="" label_selected="" name="health" tool_tip="Stan" />
- <text name="HealthText" tool_tip="Stan">
- 100%
- </text>
- <button label="" label_selected="" name="no_fly" tool_tip="Latanie jest niedozwolone" />
- <button label="" label_selected="" name="no_build" tool_tip="Budowanie/rezzowanie jest niedozwolone" />
- <button label="" label_selected="" name="no_scripts" tool_tip="Używanie skryptów jest niedozwolone" />
- <button label="" label_selected="" name="restrictpush" tool_tip="Pochnięcia są niedozwolone" />
- <button label="" label_selected="" name="status_no_voice" tool_tip="Używanie komunikacji głosowej jest niedozwolone" />
- <button label="" label_selected="" name="buyland" tool_tip="Kup tą posiadłość" />
- <button label="" name="menubar_search_bevel_bg" />
- <line_editor label="Szukaj" name="search_editor" tool_tip="Szukaj w [SECOND_LIFE]" />
- <button label="" label_selected="" name="search_btn" tool_tip="Szukaj w [SECOND_LIFE]" />
- <string name="packet_loss_tooltip">
- Utracone Pakiety
- </string>
- <string name="bandwidth_tooltip">
+ </panel.string>
+ <panel.string name="packet_loss_tooltip">
+ Utracone pakiety
+ </panel.string>
+ <panel.string name="bandwidth_tooltip">
Przepustowość
- </string>
+ </panel.string>
+ <panel.string name="time">
+ [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
+ </panel.string>
+ <panel.string name="timeTooltip">
+ [weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt]
+ </panel.string>
+ <panel.string name="buycurrencylabel">
+ L$ [AMT]
+ </panel.string>
+ <button label="" label_selected="" name="buycurrency" tool_tip="Bilans"/>
+ <button label="Kup" name="buyL" tool_tip="Kliknij aby kupić L$"/>
+ <text name="TimeText" tool_tip="Obecny Czas (Pacyficzny)">
+ 24:00 AM PST
+ </text>
+ <button name="media_toggle_btn" tool_tip="Start/Stop Wszystkie Media (Muzyka, Video, WWW)"/>
+ <button name="volume_btn" tool_tip="Regulacja Głośności"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history.xml
new file mode 100644
index 0000000000..d143843eaf
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_teleport_history.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="Teleport History">
+ <accordion name="history_accordion">
+ <accordion_tab name="today" title="Dzisiaj"/>
+ <accordion_tab name="yesterday" title="Wczoraj"/>
+ <accordion_tab name="2_days_ago" title="2 dni temu"/>
+ 5
+ <accordion_tab name="3_days_ago" title="3 dni temu"/>
+ <accordion_tab name="4_days_ago" title="4 dni temu"/>
+ <accordion_tab name="5_days_ago" title="5 dni temu"/>
+ <accordion_tab name="6_days_and_older" title="6 dni i więcej"/>
+ <accordion_tab name="1_month_and_older" title="1 miesiąc i więcej"/>
+ <accordion_tab name="6_months_and_older" title="6 miesięcy i więcej"/>
+ </accordion>
+ <panel name="bottom_panel">
+ <button name="gear_btn" tool_tip="Pokaż dodatkowe opcje"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml
new file mode 100644
index 0000000000..f0fe28c4ce
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="teleport_history_item">
+ <button name="profile_btn" tool_tip="Pokaż info o obiekcie"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_world_map.xml b/indra/newview/skins/default/xui/pl/panel_world_map.xml
index 70479fe209..849b01a1ce 100644
--- a/indra/newview/skins/default/xui/pl/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/pl/panel_world_map.xml
@@ -4,7 +4,7 @@
Åadowanie...
</panel.string>
<panel.string name="InvalidLocation">
- Niewłaściwa Lokalizacja
+ Niewłaściwa lokalizacja
</panel.string>
<panel.string name="world_map_north">
N
diff --git a/indra/newview/skins/default/xui/pl/role_actions.xml b/indra/newview/skins/default/xui/pl/role_actions.xml
index 5711eacf2f..ccfa5f222e 100644
--- a/indra/newview/skins/default/xui/pl/role_actions.xml
+++ b/indra/newview/skins/default/xui/pl/role_actions.xml
@@ -1,197 +1,76 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<role_actions>
- <action_set
- description="Przywileje pozwajające na dodawanie i usuwanie Członków oraz pozwalają nowym Członkom na dodawanie się bez zaproszenia."
- name="Membership">
- <action description="Zapraszanie do Grupy"
- longdescription="Zapraszanie nowych Ludzi do Grupy używając &apos;Zaproś Nową Osobę...&apos; pod Członkowie &gt; Członkowie."
- name="member invite" />
- <action description="Usuwanie z Grupy"
- longdescription="Usuwanie Członków z Grupy używając &apos;Usuń z Grupy&apos; pod Członkowie &gt; Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej &apos;Odbieranie Funkcji&apos;."
- name="member eject" />
- <action
- description="Selekcja opcji &apos;Wolne Zapisy&apos; i wybór &apos;Opłaty Wstępnej&apos;"
- longdescription="Selekcja opcji &apos;Wolne Zapisy&apos; (pozwola nowym Członkom na dodawanie sie bez zaproszenia) i wybiór &apos;Opłaty Wstępnej&apos; w Ustawieniach Grupy w sekcji Ogólne."
- name="member options" />
+ <action_set description="Przywileje pozwajające na dodawanie i usuwanie Członków oraz pozwalają nowym Członkom na dodawanie się bez zaproszenia." name="Membership">
+ <action description="Zapraszanie do Grupy" longdescription="Zapraszanie nowych Ludzi do Grupy używając przycisku &apos;Zaproś&apos; w sekcji Ról &gt; Członkowie" name="member invite"/>
+ <action description="Usuwanie z Grupy" longdescription="Usuwanie Członków z Grupy używając &apos;Usuń z Grupy&apos;; pod Członkowie &gt; Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej &apos;Odbieranie Funkcji&apos;." name="member eject"/>
+ <action description="Selekcja opcji &apos;Wolne Zapisy&apos; i wybór &apos;Opłaty Wstępnej&apos;" longdescription="Selekcja opcji &apos;Wolne Zapisy&apos; (pozwala nowym Członkom na dodawanie się bez zaproszenia) i wybór &apos;Opłaty Wstępnej&apos; w Ustawieniach Grupy w sekcji Ogólne." name="member options"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na dodawanie, usuwanie i edycję Funkcji w Grupie, oraz na nadawanie i odbieranie Funkcji, oraz na przypisywanie Przywilejów do Funkcji."
- name="Roles">
- <action description="Dodawanie Funkcji"
- longdescription="Dodawanie nowych Funkcji pod Członkowie &gt; Funkcje."
- name="role create" />
- <action description="Usuwanie Funkcji"
- longdescription="Usuwanie Funkcji pod Członkowie &gt; Funkcje."
- name="role delete" />
- <action description="Zmiany nazw Funkcji, Tytułów i Opisów"
- longdescription="Zmiany nazw Funkcji, Tytułów i Opisów w dolnej części Członkowie &gt; Funkcje po wybraniu Funkcje."
- name="role properties" />
- <action description="Przypisywanie Członków do posiadanych Funkcji"
- longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada."
- name="role assign member limited" />
- <action description="Przypisywanie Członków do wszystkich Funkcji"
- longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą."
- name="role assign member" />
- <action description="Odbieranie Funkcji"
- longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Funkcja Właściciela nie może być odebrana."
- name="role remove member" />
- <action description="Dodawanie i Usuwanie Przywilejów z Funkcji"
- longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie &gt; Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innychm Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą."
- name="role change actions" />
+ <action_set description="Przywileje pozwalające na dodawanie, usuwanie i edycję Funkcji w Grupie, oraz na nadawanie i odbieranie Funkcji, oraz na przypisywanie Przywilejów do Funkcji." name="Roles">
+ <action description="Dodawanie Funkcji" longdescription="Dodawanie nowych Funkcji pod Członkowie &gt; Funkcje." name="role create"/>
+ <action description="Usuwanie Funkcji" longdescription="Usuń Funkcje w zakładce Funkcje &gt; Funkcje" name="role delete"/>
+ <action description="Zmiany nazw Funkcji, Tytułów i Opisów i widoczność Członków w Informacjach o Grupie" longdescription="Zmiany nazw Funkcji, Tytułów i Opisów i wybór czy Członkowie z daną Rolą są widoczni Informacji o Grupie w dolnej części sekcji Funkcji &gt; Funkcje po wybraniu Funkcje." name="role properties"/>
+ <action description="Przypisywanie Członków do posiadanych Funkcji" longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." name="role assign member limited"/>
+ <action description="Przypisywanie Członków do wszystkich Funkcji" longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role assign member"/>
+ <action description="Odbieranie Funkcji" longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Funkcja Właściciela nie może być odebrana." name="role remove member"/>
+ <action description="Dodawanie i Usuwanie Przywilejów z Funkcji" longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie &gt; Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innym Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role change actions"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na edycję atrybutów Grupy takich jak widoczność w wyszukiwarce, status i insygnia."
- name="Group Identity">
- <action
- description="Zmiany Statusu Grupy, Insygniów, &apos;Widoczność w Wyszukiwarce&apos; i widoczność Członków w Informacjach o Grupie."
- longdescription="Zmiany Statusu Grupy, Insygniów, &apos;Widoczność w Wyszukiwarce&apos; i widoczność Członków w Informacjach o Grupie. Dostęp poprzez ustawienia Ogólne."
- name="group change identity" />
+ <action_set description="Przywileje pozwalające na edycję atrybutów Grupy takich jak widoczność w wyszukiwarce, status i insygnia." name="Group Identity">
+ <action description="Zmiany Statusu Grupy, Insygniów, &apos;Widoczność w Wyszukiwarce&apos; i widoczność Członków w Informacjach o Grupie." longdescription="Zmiany Statusu Grupy, Insygniów, i Widoczność w Wyszukiwarce. Dostęp poprzez ustawienia Ogólne." name="group change identity"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż Posiadłości Grupy. Aby zobaczyć okno O Posiadlości wybierz grunt prawym klawiszem myszki i wybierz &apos;O Posiadlości&apos; albo wybierz O Posiadłości w głównym menu."
- name="Parcel Management">
- <action description="Przypisywanie i kupowanie Posiadłości dla Grupy"
- longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości &gt; ustawienia Ogólne."
- name="land deed" />
- <action description="Oddawanie Posiadłości do Linden Lab"
- longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą."
- name="land release" />
- <action description="Sprzedaż Posiadłości"
- longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą."
- name="land set sale info" />
- <action description="PodziaÅ‚ i ÅÄ…czenie PosiadÅ‚oÅ›ci"
- longdescription="PodziaÅ‚ i ÅÄ…czenie PosiadÅ‚oÅ›ci. DostÄ™p poprzez wybranie gruntu prawym klawiszem myszki, &apos;Edycja Terenu&apos;, i przesuwanie myszkÄ… po gruncie wybierajÄ…c obszar. Aby podzielić wybierz obszar i naciÅ›nij &apos;Podziel...&apos;. Aby połączyć wybierz dwie albo wiÄ™cej sÄ…siadujÄ…ce PosiadÅ‚oÅ›ci i naciÅ›nij &apos;Połącz...&apos;."
- name="land divide join" />
+ <action_set description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż Posiadłości Grupy. Aby zobaczyć okno O Posiadłości wybierz grunt prawym klawiszem myszki i wybierz &apos;O Posiadłości&apos; albo wybierz ikonę &apos;i&apos; w głównym menu." name="Parcel Management">
+ <action description="Przypisywanie i kupowanie Posiadłości dla Grupy" longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości &gt; ustawienia Ogólne." name="land deed"/>
+ <action description="Oddawanie Posiadłości do Linden Lab" longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." name="land release"/>
+ <action description="Sprzedaż Posiadłości" longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." name="land set sale info"/>
+ <action description="PodziaÅ‚ i ÅÄ…czenie PosiadÅ‚oÅ›ci" longdescription="PodziaÅ‚ i ÅÄ…czenie PosiadÅ‚oÅ›ci. DostÄ™p poprzez wybranie gruntu prawym klawiszem myszki, &apos;Edycja Terenu&apos;, i przesuwanie myszkÄ… po gruncie wybierajÄ…c obszar. Aby podzielić wybierz obszar i naciÅ›nij &apos;Podziel&apos;. Aby połączyć wybierz dwie albo wiÄ™cej sÄ…siadujÄ…ce PosiadÅ‚oÅ›ci i naciÅ›nij &apos;Połącz&apos;." name="land divide join"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na zmianę nazwy Posiadłości, widoczność w wyszukiwarce, widoczność w wyszukiwarce, wybór miejsce lądowania i zmianę ustawień teleportacji (TP)."
- name="Parcel Identity">
- <action
- description="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii"
- longdescription="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii Posiadłości pod O Posiadłości &gt; Opcje."
- name="land find places" />
- <action
- description="Zmiany nazwy Posiadłości, opisu i selekcja &apos;Widoczność w Wyszukiwarce&apos;"
- longdescription="Zmiany nazwy Posiadłości, opisu i selekcja &apos;Widoczność w Wyszukiwarce&apos;. Dostęp poprzez O Posiadłości &gt; Opcje."
- name="land change identity" />
- <action description="Wybór miejsca lądowania i ustawienia teleportacji (TP)"
- longdescription="Na Posiadłości Grupy Członek w Funkcji z tym Przywilejem może wybrać miejsce gdzie teleportujące się osoby będą ladować oraz może ustalić dodatkowe parametry teleportacji (TP). Dostęp poprzez O Posiadłości &gt; Opcje."
- name="land set landing point" />
+ <action_set description="Przywileje pozwalające na zmianę nazwy Posiadłości, widoczność w wyszukiwarce, widoczność w wyszukiwarce, wybór miejsce lądowania i zmianę ustawień teleportacji (TP)." name="Parcel Identity">
+ <action description="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii" longdescription="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii Posiadłości pod O Posiadłości &gt; Opcje." name="land find places"/>
+ <action description="Zmiany nazwy Posiadłości, opisu i selekcja &apos;Widoczność w Wyszukiwarce&apos;" longdescription="Zmiany nazwy Posiadłości, opisu i selekcja &apos;Widoczność w Wyszukiwarce&apos;. Dostęp poprzez O Posiadłości &gt; Opcje." name="land change identity"/>
+ <action description="Wybór miejsca lądowania i ustawienia teleportacji (TP)" longdescription="Na Posiadłości Grupy Członek w Funkcji z tym Przywilejem może wybrać miejsce gdzie teleportujące się osoby będą ladować oraz może ustalić dodatkowe parametry teleportacji (TP). Dostęp poprzez O Posiadłości &gt; Opcje." name="land set landing point"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na zmianę opcji Posiadłości takich jak &apos;Tworzenie Obiektów&apos;, &apos;Edycja Terenu&apos; i zmianę ustawień muzyki &amp; mediów."
- name="Parcel Settings">
- <action description="Zmiany ustawień muzyki &amp; mediów"
- longdescription="Zmiany ustawień muzyki &amp; mediów pod O Posiadłości &gt; Media."
- name="land change media" />
- <action description="Selekcja opcji &apos;Edycja Terenu&apos;"
- longdescription="Selekcja opcji &apos;Edycja Terenu&apos;. *UWAGA* O Posiadłości &gt; Opcje &gt; Edycja Terenu pozwala każdemu na formowanie gruntów Twojej Posiadłości oraz na przemieszczanie roślin z Linden Labs. Udzielaj tego Przywileju z rozwagą. Selekcja opcji Edycji Terenu jest dostępna poprzez O Posiadłości &gt; Opcje."
- name="land edit" />
- <action description="Dodatkowe ustawienia O Posiadłości &gt; Opcje"
- longdescription="Selekcja opcji &apos;Bezpieczeństwo (brak uszkodzeń)&apos;, &apos;Latanie&apos;, opcje dla innych Rezydentów: &apos;Tworzenie Obiektów&apos;, &apos;Edycja Terenu&apos;, &apos;Zapamiętywanie Miejsca (LM)&apos;, &apos;Skrypty&apos; na Posiadłościach Grupy pod O Posiadłości &gt; Opcje."
- name="land options" />
+ <action_set description="Przywileje pozwalające na zmianę opcji Posiadłości takich jak &apos;Tworzenie Obiektów&apos;, &apos;Edycja Terenu&apos; i zmianę ustawień muzyki &amp; mediów." name="Parcel Settings">
+ <action description="Zmiany ustawień muzyki &amp; mediów" longdescription="Zmiany ustawień muzyki &amp; mediów pod O Posiadłości &gt; Media." name="land change media"/>
+ <action description="Selekcja opcji &apos;Edycja Terenu&apos;" longdescription="Selekcja opcji &apos;Edycja Terenu&apos;. *UWAGA* O Posiadłości &gt; Opcje &gt; Edycja Terenu pozwala każdemu na formowanie gruntów Twojej Posiadłości oraz na przemieszczanie roślin z Linden Labs. Udzielaj tego Przywileju z rozwagą. Selekcja opcji Edycji Terenu jest dostępna poprzez O Posiadłości &gt; Opcje." name="land edit"/>
+ <action description="Dodatkowe ustawienia O Posiadłości &gt; Opcje" longdescription="Selekcja opcji &apos;Bezpieczeństwo (brak uszkodzeń)&apos; &apos;Latanie&apos;, opcje dla innych Rezydentów: &apos;Tworzenie Obiektów&apos;; &apos;Edycja Terenu&apos;, &apos;Zapamiętywanie Miejsca (LM)&apos;, i &apos;Skrypty&apos; na Posiadłościach Grupy pod O Posiadłości &gt; Opcje." name="land options"/>
</action_set>
- <action_set
- description="Przywileje pozwalające Członkom na omijanie ograniczeń na Posiadłościach Grupy."
- name="Parcel Powers">
- <action description="Pozwól na Edycję Terenu"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy."
- name="land allow edit land" />
- <action description="Pozwól na Latanie"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy."
- name="land allow fly" />
- <action description="Pozwól na Tworzenie Obiektów"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy."
- name="land allow create" />
- <action description="Pozwól na Zapamiętywanie Miejsc (LM)"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy."
- name="land allow landmark" />
- <action description="Pozwól na wybór Miejsca Startu na Posiadłościach Grupy"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze wybrać Miejsce Startu na Posiadłościach Grupy."
- name="land allow set home" />
+ <action_set description="Przywileje pozwalające Członkom na omijanie ograniczeń na Posiadłościach Grupy." name="Parcel Powers">
+ <action description="Pozwól na Edycję Terenu" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." name="land allow edit land"/>
+ <action description="Pozwól na Latanie" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." name="land allow fly"/>
+ <action description="Pozwól na Tworzenie Obiektów" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." name="land allow create"/>
+ <action description="Pozwól na Zapamiętywanie Miejsc (LM)" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." name="land allow landmark"/>
+ <action description="Pozwól na wybór Miejsca Startu na Posiadłościach Grupy" longdescription="Członkowie w Funkcji z tym Przywilejem mogą używać menu Świat &gt; Zapamiętaj Miejsce &gt; Miejsce Startu na Posiadłości przypisanej Grupie." name="land allow set home"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na dawanie i odbieranie dostępu do Posiadłości Grupy zawierające możliwości unieruchomiania i wyrzucania Rezydentów."
- name="Parcel Access">
- <action description="Zarządzanie Listą Dostępu do Posiadłości"
- longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp."
- name="land manage allowed" />
- <action description="Zarządzanie Listą Usuniętych z Posiadłości (Bany)"
- longdescription="Zarządzanie Listą Usuniętych z Posiadłości (Bany) pod O Posiadlości &gt; Usuwanie."
- name="land manage banned" />
- <action description="Selekcja opcji &apos;Wstęp Płatny...&apos;"
- longdescription="Selekcja opcji &apos;Wstęp Płatny...&apos; pod O Posiadłości &gt; Dostęp."
- name="land manage passes" />
- <action description="Wyrzucanie i unieruchamianie Rezydentów na Posiadłościach"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając Więcej &gt; &apos;Wyrzuć...&apos; albo &apos;Unieruchom...&apos;."
- name="land admin" />
+ <action_set description="Przywileje pozwalające na dawanie i odbieranie dostępu do Posiadłości Grupy zawierające możliwości unieruchomiania i wyrzucania Rezydentów." name="Parcel Access">
+ <action description="Zarządzanie Listą Dostępu do Posiadłości" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage allowed"/>
+ <action description="Zarządzanie Listą Usuniętych z Posiadłości (Bany)" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage banned"/>
+ <action description="Selekcja opcji &apos;Wstęp Płatny&apos;" longdescription="Selekcja opcji &apos;Wstęp Płatny&apos;; pod O Posiadłości &gt; Dostęp." name="land manage passes"/>
+ <action description="Wyrzucanie i unieruchamianie Rezydentów na Posiadłościach" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając &apos;;Wyrzuć&apos; albo &apos;Unieruchom&apos;." name="land admin"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na odsyłanie obiektów i przemieszczanie roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczaniu roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne."
- name="Parcel Content">
- <action description="Odsyłanie obiektów należących do Grupy"
- longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości &gt; Obiekty."
- name="land return group owned" />
- <action description="Odsyłanie obiektów przypisanych do Grupy"
- longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości &gt; Obiekty."
- name="land return group set" />
- <action description="Odsyłanie obiektów nie przypisanych do Grupy"
- longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości &gt; Obiekty."
- name="land return non group" />
- <action description="Ogrodnictwo używając roślin z Linden Lab"
- longdescription="Ogrodnictwo pozwala na umieszczanie i przemieszczanie drzew, roślin i trawy z Linden Lab. Te obiekty znajdują się w Twojej Szafie pod Zbiór &gt; Obiekty, mogą też być stworzone używając przycisku Buduj."
- name="land gardening" />
+ <action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczanie roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczaniu roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Parcel Content">
+ <action description="Odsyłanie obiektów należących do Grupy" longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości &gt; Obiekty." name="land return group owned"/>
+ <action description="Odsyłanie obiektów przypisanych do Grupy" longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return group set"/>
+ <action description="Odsyłanie obiektów nie przypisanych do Grupy" longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return non group"/>
+ <action description="Ogrodnictwo używając roślin z Linden Lab" longdescription="Możliwość przemieszczenia roślin z Linden Lab. Obiekty te mogą zostać odnalezione w Twojej Szafie, w folderze Biblioteka &gt; Folderze Obiektów lub mogą zostać stworzone dzięki aktywacji Narzędzi Edycji." name="land gardening"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż obiektów należących do Grupy. Dostęp poprzez Narzędzia Edycji &gt; Ogólne. Wybierz obiekt prawym klawiszem myszki i wybierz Edycja żeby zobaczyć ustawienia."
- name="Object Management">
- <action description="Przypisywanie obiektów do Grupy"
- longdescription="Przypisywanie obiektów do Grupy pod Narzędzia Edycji &gt; Ogólne."
- name="object deed" />
- <action
- description="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy"
- longdescription="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy pod Narzędzia Edycji &gt; Ogólne."
- name="object manipulate" />
- <action description="Sprzedaż obiektów należących do Grupy"
- longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji &gt; Ogólne."
- name="object set sale" />
+ <action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczenia roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczenia roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Object Management">
+ <action description="Przypisywanie obiektów do Grupy" longdescription="Przypisywanie obiektów do Grupy w Narzędziach Edycji &gt; Ogólne" name="object deed"/>
+ <action description="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy" longdescription="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy w Narzędziach Edycji &gt; Ogólne" name="object manipulate"/>
+ <action description="Sprzedaż obiektów należących do Grupy" longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji &gt; Ogólne." name="object set sale"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na wybór opłat grupowych, otrzymywanie dochodu i ograniczanie dostępu do historii konta grupy."
- name="Accounting">
- <action description="Opłaty grupowe i dochód grupowy"
- longdescription="Członkowie w Funkcji z tym Przywilejem będą automatycznie wnosić opłaty grupowe i będą otrzymywać dochód grupowy. Tzn. będą codziennie otrzymywać część dochodu ze sprzedaży Posiadłości Grupy oraz będą partycypować w kosztach ogłoszeń itp."
- name="accounting accountable" />
+ <action_set description="Przywileje pozwalające na wybór opłat grupowych, otrzymywanie dochodu i ograniczanie dostępu do historii konta grupy." name="Accounting">
+ <action description="Opłaty grupowe i dochód grupowy" longdescription="Członkowie w Funkcji z tym Przywilejem będą automatycznie wnosić opłaty grupowe i będą otrzymywać dochód grupowy. Tzn. będą codziennie otrzymywać część dochodu ze sprzedaży Posiadłości Grupy oraz będą partycypować w kosztach ogłoszeń itp." name="accounting accountable"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na wysyłanie, odbieranie i czytanie Notek Grupy."
- name="Notices">
- <action description="Wysyłanie Notek"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie &gt; Notek."
- name="notices send" />
- <action description="Odbieranie Notek i dostęp do dawniejszych Notek"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie &gt; Notki."
- name="notices receive" />
+ <action_set description="Przywileje pozwalające na wysyłanie, odbieranie i czytanie Notek Grupy." name="Notices">
+ <action description="Wysyłanie Notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie &gt; Notek." name="notices send"/>
+ <action description="Odbieranie Notek i dostęp do dawniejszych Notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie &gt; Notki." name="notices receive"/>
</action_set>
- <action_set
- description="Przywileje pozwalające na zgłaszanie Propozycji, głosowanie nad Propozycjami i śledzenie historii głosowania."
- name="Proposals">
- <action description="Zgłaszanie Propozycji"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie &gt; Propozycje."
- name="proposal start" />
- <action description="Głosowanie nad Propozycjami"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie &gt; Propozycje."
- name="proposal vote" />
+ <action_set description="Przywileje pozwalające na zgłaszanie Propozycji, głosowanie nad Propozycjami i śledzenie historii głosowania." name="Proposals">
+ <action description="Zgłaszanie Propozycji" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie &gt; Propozycje." name="proposal start"/>
+ <action description="Głosowanie nad Propozycjami" longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie &gt; Propozycje." name="proposal vote"/>
</action_set>
<action_set description="Przywileje kontrolujÄ…ce czat i rozmowy grupowe." name="Chat">
- <action description="Dostęp do Czatu Grupowego"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych."
- name="join group chat" />
- <action description="Dostęp do Rozmów Grupowych"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych."
- name="join voice chat" />
- <action description="Moderator Czatu Grupowego"
- longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych."
- name="moderate group chat" />
+ <action description="Dostęp do Czatu Grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." name="join group chat"/>
+ <action description="Dostęp do Rozmów Grupowych" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." name="join voice chat"/>
+ <action description="Moderator Czatu Grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." name="moderate group chat"/>
</action_set>
</role_actions>
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml
new file mode 100644
index 0000000000..ecbf262777
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ubrania" name="appearance panel">
+ <string name="No Outfit" value="Bez Ubrania"/>
+ <panel name="panel_currentlook">
+ <text name="currentlook_title">
+ (niezapisane)
+ </text>
+ </panel>
+ <filter_editor label="PrzeglÄ…daj Ubrania" name="Filter"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml
new file mode 100644
index 0000000000..d7a813b1b7
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Rzeczy" name="objects panel">
+ <panel label="" name="sidepanel__inventory_panel">
+ <panel name="button_panel">
+ <button label="Profil" name="info_btn"/>
+ <button label="Ubierz" name="wear_btn"/>
+ <button label="Odtwarzaj" name="play_btn"/>
+ <button label="Teleportuj" name="teleport_btn"/>
+ </panel>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
new file mode 100644
index 0000000000..3b038a7102
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="item properties" title="Profil Obiektu">
+ <panel.string name="unknown">
+ (nieznany)
+ </panel.string>
+ <panel.string name="public">
+ (publiczny)
+ </panel.string>
+ <panel.string name="you_can">
+ Ty możesz:
+ </panel.string>
+ <panel.string name="owner_can">
+ Właściciel może:
+ </panel.string>
+ <panel.string name="acquiredDate">
+ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+ </panel.string>
+ <text name="title" value="Profil Obiektu"/>
+ <text name="where" value="(Szafa)"/>
+ <panel label="">
+ <text name="LabelItemNameTitle">
+ Nazwa:
+ </text>
+ <text name="LabelItemDescTitle">
+ Opis:
+ </text>
+ <text name="LabelCreatorTitle">
+ Twórca:
+ </text>
+ <button label="Profil..." name="BtnCreator"/>
+ <text name="LabelOwnerTitle">
+ Właściciel:
+ </text>
+ <button label="Profil..." name="BtnOwner"/>
+ <text name="LabelAcquiredTitle">
+ Nabyte:
+ </text>
+ <text name="LabelAcquiredDate">
+ Wed May 24 12:50:46 2006
+ </text>
+ <panel name="perms_inv">
+ <text name="perm_modify">
+ Ty możesz:
+ </text>
+ <check_box label="Zmienia" name="CheckOwnerModify"/>
+ <check_box label="Kopiuje" name="CheckOwnerCopy"/>
+ <check_box label="Sprzedaje/Oddaje" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ Każdy:
+ </text>
+ <check_box label="Kopiuje" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ Grupa:
+ </text>
+ <check_box label="Udostępnij" name="CheckShareWithGroup" tool_tip="Pozwól wszystkim członkom ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz Przypisać aby aktywować ograniczenia wynikające z roli."/>
+ <text name="NextOwnerLabel">
+ Następny Właściciel:
+ </text>
+ <check_box label="Modyfikuje" name="CheckNextOwnerModify"/>
+ <check_box label="Kopiuje" name="CheckNextOwnerCopy"/>
+ <check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="Następny właściciel może oddać lub sprzedać ten obiekt"/>
+ </panel>
+ <check_box label="Na Sprzedaż" name="CheckPurchase"/>
+ <combo_box name="combobox sale copy">
+ <combo_box.item label="Kopia" name="Copy"/>
+ <combo_box.item label="Originał" name="Original"/>
+ </combo_box>
+ <spinner label="Cena: L$" name="Edit Cost"/>
+ </panel>
+ <panel name="button_panel">
+ <button label="Anuluj" name="cancel_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
new file mode 100644
index 0000000000..17cd13f970
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="object properties" title="Profil Obiektu">
+ <panel.string name="text deed continued">
+ Przypisz
+ </panel.string>
+ <panel.string name="text deed">
+ Przypisz
+ </panel.string>
+ <panel.string name="text modify info 1">
+ Możesz modyfikować ten obiekt
+ </panel.string>
+ <panel.string name="text modify info 2">
+ Możesz modyfikować te obiekty
+ </panel.string>
+ <panel.string name="text modify info 3">
+ Nie możesz modyfikować tego obiektu
+ </panel.string>
+ <panel.string name="text modify info 4">
+ Nie możesz modyfikować tych obiektów
+ </panel.string>
+ <panel.string name="text modify warning">
+ Ten obiekt ma części zgrupowane
+ </panel.string>
+ <panel.string name="Cost Default">
+ Cena: L$
+ </panel.string>
+ <panel.string name="Cost Total">
+ Cena całkowita: L$
+ </panel.string>
+ <panel.string name="Cost Per Unit">
+ Cena za jednostkÄ™: L$
+ </panel.string>
+ <panel.string name="Cost Mixed">
+ Cena mieszana
+ </panel.string>
+ <panel.string name="Sale Mixed">
+ Sprzedaż mieszana
+ </panel.string>
+ <text name="title" value="Profil Obiektu"/>
+ <text name="where" value="(w świecie)"/>
+ <panel label="" name="properties_panel">
+ <text name="Name:">
+ Nazwa:
+ </text>
+ <text name="Description:">
+ Opis:
+ </text>
+ <text name="CreatorNameLabel">
+ Twórca:
+ </text>
+ <text name="Creator Name">
+ Erica Linden
+ </text>
+ <text name="Owner:">
+ Właściciel:
+ </text>
+ <text name="Owner Name">
+ Erica Linden
+ </text>
+ <text name="Group_label">
+ Grupa:
+ </text>
+ <button name="button set group" tool_tip="Wybierz grupę by udostępnić jej prawa do tego obiektu"/>
+ <name_box initial_value="Åadowanie..." name="Group Name Proxy"/>
+ <button label="Przypisz" label_selected="Przypisz" name="button deed" tool_tip="Opcja przepisania udostępnia obiektowi takie same prawa jak zostały zaznaczone dla następnego właściciela. Obiekty udostępnione grupie mogą zostać przepisane dla grupy przez oficera grupy."/>
+ <text name="label click action">
+ Kliknij by:
+ </text>
+ <combo_box name="clickaction">
+ <combo_box.item label="Dotknij (domyślne)" name="Touch/grab(default)"/>
+ <combo_box.item label="Usiądź na obiekcie" name="Sitonobject"/>
+ <combo_box.item label="Kup obiekt" name="Buyobject"/>
+ <combo_box.item label="Zapłać obiektowi" name="Payobject"/>
+ <combo_box.item label="Otwórz" name="Open"/>
+ </combo_box>
+ <panel name="perms_inv">
+ <text name="perm_modify">
+ Możesz modyfikować ten obiekt
+ </text>
+ <text name="Anyone can:">
+ Każdy:
+ </text>
+ <check_box label="Kopiuj" name="checkbox allow everyone copy"/>
+ <check_box label="Przesuń" name="checkbox allow everyone move"/>
+ <text name="GroupLabel">
+ Groupie:
+ </text>
+ <check_box label="Udostępnij" name="checkbox share with group" tool_tip="Udostępnij prawa do modyfikacji tego obiektu wszystkim członkom, którzy posiadają przywilej modyfikacji obiektów grupy. By ograniczyć, przypisz obiekt do grupy."/>
+ <text name="NextOwnerLabel">
+ Następny Właściciel:
+ </text>
+ <check_box label="Modyfikuj" name="checkbox next owner can modify"/>
+ <check_box label="Kopiuj" name="checkbox next owner can copy"/>
+ <check_box label="Oddaj" name="checkbox next owner can transfer" tool_tip="Następny właściciel może sprzedać lub oddać ten obiekt"/>
+ </panel>
+ <check_box label="Na Sprzedaż" name="checkbox for sale"/>
+ <combo_box name="sale type">
+ <combo_box.item label="Kopiuj" name="Copy"/>
+ <combo_box.item label="Treść" name="Contents"/>
+ <combo_box.item label="Oryginał" name="Original"/>
+ </combo_box>
+ <spinner label="Cena: L$" name="Edit Cost"/>
+ <check_box label="Pokaż w wyszukiwarce" name="search_check" tool_tip="Udostępnij widzialność tego obiektu w wyszukiwarce"/>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
+ </panel>
+ <panel name="button_panel">
+ <button label="Otwórz" name="open_btn"/>
+ <button label="Zapłać" name="pay_btn"/>
+ <button label="Kup" name="buy_btn"/>
+ <button label="Szczegóły" name="details_btn"/>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index e8dcfac02d..c72f783a51 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -1,9 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- This file contains strings that used to be hardcoded in the source.
It is only for those strings which do not belong in a floater.
- For example, the strings used in avatar chat bubbles, and strings
+ For example, the strings used in avatar chat bubbles, and strings
that are returned from one component and may appear in many places-->
<strings>
+ <string name="CAPITALIZED_APP_NAME">
+ SECOND LIFE
+ </string>
<string name="SUPPORT_SITE">
Portal Pomocy Second Life
</string>
@@ -11,7 +14,22 @@
Wykrywanie dysku twardego...
</string>
<string name="StartupLoading">
- Åadowanie
+ Åadowanie [APP_NAME]...
+ </string>
+ <string name="StartupClearingCache">
+ Czyszczenie bufora danych...
+ </string>
+ <string name="StartupInitializingTextureCache">
+ Inicjowanie bufora danych tekstur...
+ </string>
+ <string name="StartupInitializingVFS">
+ Inicjowanie VFS...
+ </string>
+ <string name="ProgressRestoring">
+ Przywracanie...
+ </string>
+ <string name="ProgressChangingResolution">
+ Zmiana rozdzielczości...
</string>
<string name="LoginInProgress">
Trwa logowanie. [APP_NAME] Proszę czekać.
@@ -73,12 +91,33 @@
<string name="LoginFailedNoNetwork">
Błąd sieci: Brak połączenia z siecią, sprawdź status swojego połączenia internetowego.
</string>
+ <string name="LoginFailed">
+ Logowanie nie powiodło się.
+ </string>
<string name="Quit">
Wyłącz Program
</string>
<string name="AgentLostConnection">
Ten region może mieć problemy. Sprawdź podłączenie do Internetu.
</string>
+ <string name="SavingSettings">
+ Zachowanie ustawień...
+ </string>
+ <string name="LoggingOut">
+ Trwa wylogowanie...
+ </string>
+ <string name="ShuttingDown">
+ Zamykanie...
+ </string>
+ <string name="YouHaveBeenDisconnected">
+ Nastąpiło rozłączenie z regionem.
+ </string>
+ <string name="SentToInvalidRegion">
+ Region jest niedostępny.
+ </string>
+ <string name="TestingDisconnect">
+ Nastąpiło rozłączenie testowania klienta
+ </string>
<string name="TooltipPerson">
Osoba
</string>
@@ -131,7 +170,25 @@
Kliknij by zobaczyć szczegóły tego miejsca
</string>
<string name="TooltipAgentUrl">
- Kliknij by zobaczyć profil tego rezydenta
+ Kliknij aby zobaczyc profil Rezydenta
+ </string>
+ <string name="TooltipAgentMute">
+ Kliknij aby wyciszyc tego Rezydenta
+ </string>
+ <string name="TooltipAgentUnmute">
+ Kliknij aby cofnąć zablokowanie tego Rezydenta
+ </string>
+ <string name="TooltipAgentIM">
+ Kliknij aby wysłać wiadomość IM do tego Rezydenta
+ </string>
+ <string name="TooltipAgentPay">
+ Kliknij aby zapłacić temu Rezydentowi
+ </string>
+ <string name="TooltipAgentOfferTeleport">
+ Kliknij aby oferować teleport temu Rezydentowi
+ </string>
+ <string name="TooltipAgentRequestFriend">
+ Kliknij aby wysłać temu Rezydentowi zaproszenie do Znajomych
</string>
<string name="TooltipGroupUrl">
Kliknij by zobaczyć opis tej grupy
@@ -158,14 +215,33 @@
Kliknij by uruchomić secondlife:// command
</string>
<string name="CurrentURL" value=" Obecny Adres: [CurrentURL]"/>
+ <string name="TooltipPrice" value="L$[PRICE]-"/>
<string name="SLurlLabelTeleport">
Teleportuj do
</string>
<string name="SLurlLabelShowOnMap">
Pokaż na Mapie
</string>
+ <string name="SLappAgentMute">
+ Zablokuj
+ </string>
+ <string name="SLappAgentUnmute">
+ Cofnij zablokowanie
+ </string>
+ <string name="SLappAgentIM">
+ IM
+ </string>
+ <string name="SLappAgentPay">
+ Zapłać
+ </string>
+ <string name="SLappAgentOfferTeleport">
+ Teleportuj do
+ </string>
+ <string name="SLappAgentRequestFriend">
+ Oferta znajomości
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
- Zamknij (&#8984;W)
+ Zamknij (⌘W)
</string>
<string name="BUTTON_CLOSE_WIN">
Zamknij (Ctrl+W)
@@ -182,9 +258,6 @@
<string name="BUTTON_DOCK">
Przyłącz
</string>
- <string name="BUTTON_UNDOCK">
- Odłącz
- </string>
<string name="BUTTON_HELP">
Pokaż Pomoc
</string>
@@ -209,9 +282,6 @@
<string name="AvatarNameWaiting">
(ładowanie)
</string>
- <string name="AvatarNameHippos">
- (hippos)
- </string>
<string name="GroupNameNone">
(brak danych)
</string>
@@ -320,6 +390,9 @@
<string name="symbolic link">
link
</string>
+ <string name="symbolic folder link">
+ link folderu
+ </string>
<string name="AvatarAway">
Åšpi
</string>
@@ -572,6 +645,9 @@
<string name="hang_up">
Połączenie rozmowy utracone.
</string>
+ <string name="reconnect_nearby">
+ Przełączanie do pobliskich rozmów głosowych
+ </string>
<string name="ScriptQuestionCautionChatGranted">
&apos;[OBJECTNAME]&apos;, właściciel: &apos;[OWNERNAME]&apos;, położenie: [REGIONNAME] [REGIONPOS], pozwala Ci na: [PERMISSIONS].
</string>
@@ -734,6 +810,9 @@
<string name="invalid">
niewłaściwa funkcja
</string>
+ <string name="NewWearable">
+ Nowa [WEARABLE_ITEM]
+ </string>
<string name="next">
Następne
</string>
@@ -764,11 +843,8 @@
<string name="TeleportOffer">
Oferta teleportacji
</string>
- <string name="StartUpNotification">
- [%d] nowe zawiadomienie zostało wysłane kiedy byłeś w trybie oddalenia...
- </string>
<string name="StartUpNotifications">
- [%d] nowe zawiadomienia zostały wysłane kiedy byłeś w trybie oddalenia...
+ Nowe zawiadomienia zostały wysłane kiedy byłeś w trybie oddalenia...
</string>
<string name="OverflowInfoChannelString">
Masz jeszcze [%d] powiadomień
@@ -804,11 +880,13 @@
Wybierz ESC by powrócić do trybu widoku normalne
</string>
<string name="InventoryNoMatchingItems">
- Brak wyników w szafie dla wpisanego słowa.
+ Obiektu nie znaleziono w Szafie. Spróbuj [secondlife:///app/search/groups &quot;Search&quot;].
+ </string>
+ <string name="FavoritesNoMatchingItems">
+ Przeciągnij landmark tutaj aby dodać go do swoich ulubionych.
</string>
<string name="InventoryNoTexture">
- Nie posiadasz kopi
-tej tekstury w swojej szafie
+ Nie posiadasz kopii tej tekstury w Twojej Szafie.
</string>
<string name="no_transfer" value=" (brak oddawania)"/>
<string name="no_modify" value=" (brak modyfikowania)"/>
@@ -823,6 +901,7 @@ tej tekstury w swojej szafie
Brak zawartości
</string>
<string name="WornOnAttachmentPoint" value=" (założony na [ATTACHMENT_POINT])"/>
+ <string name="ActiveGesture" value="[GESLABEL] (aktywne)"/>
<string name="Chat" value=" Czat :"/>
<string name="Sound" value=" Dźwięk :"/>
<string name="Wait" value=" --- Zaczekaj :"/>
@@ -916,6 +995,9 @@ tej tekstury w swojej szafie
<string name="InvFolder My Outfits">
Moje Ubranie
</string>
+ <string name="InvFolder Accessories">
+ Akcesoria
+ </string>
<string name="InvFolder Friends">
Znajomi
</string>
@@ -1266,11 +1348,164 @@ tej tekstury w swojej szafie
wszystkie majątki, które nadzorujesz dla [OWNER]
</string>
<string name="RegionInfoAllowedResidents">
- Rezydenci mający dostęp: ([ALLOWEDAGENTS], max [MAXACCESS])
+ Dozwoleni Rezydenci: ([ALLOWEDAGENTS], maks. [MAXACCESS])
</string>
<string name="RegionInfoAllowedGroups">
Grupy mające dostęp: ([ALLOWEDGROUPS], max [MAXACCESS])
</string>
+ <string name="ScriptLimitsParcelScriptMemory">
+ Pamięć Skryptów Parceli
+ </string>
+ <string name="ScriptLimitsParcelsOwned">
+ Parcele: [PARCELS]
+ </string>
+ <string name="ScriptLimitsMemoryUsed">
+ Pamięć wykorzystana: [COUNT] kb z [MAX] kb; [AVAILABLE] kb pozostało
+ </string>
+ <string name="ScriptLimitsMemoryUsedSimple">
+ Pamięć wykorzystana: [COUNT] kb
+ </string>
+ <string name="ScriptLimitsParcelScriptURLs">
+ Skrypty URL Parceli
+ </string>
+ <string name="ScriptLimitsURLsUsed">
+ URL: [COUNT] z [MAX]; [AVAILABLE] dostępne
+ </string>
+ <string name="ScriptLimitsURLsUsedSimple">
+ URL: [COUNT]
+ </string>
+ <string name="ScriptLimitsRequestError">
+ Błąd wyszukiwania informacji
+ </string>
+ <string name="ScriptLimitsRequestNoParcelSelected">
+ Posiadłość nie została wybrana
+ </string>
+ <string name="ScriptLimitsRequestWrongRegion">
+ Błąd: informacja o skrypcie jest dostępna tylko w obecnym regionie.
+ </string>
+ <string name="ScriptLimitsRequestWaiting">
+ Wyszukiwanie informacji...
+ </string>
+ <string name="ScriptLimitsRequestDontOwnParcel">
+ Nie masz pozwolenia na sprawdzenie parceli.
+ </string>
+ <string name="SITTING_ON">
+ Usiądź na
+ </string>
+ <string name="ATTACH_CHEST">
+ Klatka piersiowa
+ </string>
+ <string name="ATTACH_HEAD">
+ Głowa
+ </string>
+ <string name="ATTACH_LSHOULDER">
+ Lewe RamiÄ™
+ </string>
+ <string name="ATTACH_RSHOULDER">
+ RamiÄ™ Prawe
+ </string>
+ <string name="ATTACH_LHAND">
+ Ręka Lewa
+ </string>
+ <string name="ATTACH_RHAND">
+ Prawa Ręka
+ </string>
+ <string name="ATTACH_LFOOT">
+ Lewa Stopa
+ </string>
+ <string name="ATTACH_RFOOT">
+ Stopa Prawa
+ </string>
+ <string name="ATTACH_BACK">
+ Plecy
+ </string>
+ <string name="ATTACH_PELVIS">
+ Miednica
+ </string>
+ <string name="ATTACH_MOUTH">
+ Usta
+ </string>
+ <string name="ATTACH_CHIN">
+ Podbródek
+ </string>
+ <string name="ATTACH_LEAR">
+ Ucho Lewe
+ </string>
+ <string name="ATTACH_REAR">
+ Prawe Ucho
+ </string>
+ <string name="ATTACH_LEYE">
+ Lewe Oko
+ </string>
+ <string name="ATTACH_REYE">
+ Prawe Oko
+ </string>
+ <string name="ATTACH_NOSE">
+ Nos
+ </string>
+ <string name="ATTACH_RUARM">
+ Ramię P Górne
+ </string>
+ <string name="ATTACH_RLARM">
+ Prawe dolne ramiÄ™
+ </string>
+ <string name="ATTACH_LUARM">
+ Ramię L Górne
+ </string>
+ <string name="ATTACH_LLARM">
+ Lewe dolne ramiÄ™
+ </string>
+ <string name="ATTACH_RHIP">
+ Biodro prawe
+ </string>
+ <string name="ATTACH_RULEG">
+ P Górna Noga
+ </string>
+ <string name="ATTACH_RLLEG">
+ Noga P Dolna
+ </string>
+ <string name="ATTACH_LHIP">
+ Biodro Lewe
+ </string>
+ <string name="ATTACH_LULEG">
+ L Górna Noga
+ </string>
+ <string name="ATTACH_LLLEG">
+ Noga L Dolna
+ </string>
+ <string name="ATTACH_BELLY">
+ Brzuch
+ </string>
+ <string name="ATTACH_RPEC">
+ Prawa klatka
+ </string>
+ <string name="ATTACH_LPEC">
+ Lewa klatka
+ </string>
+ <string name="ATTACH_HUD_CENTER_2">
+ HUD Åšrodek 2
+ </string>
+ <string name="ATTACH_HUD_TOP_RIGHT">
+ HUD P Górny
+ </string>
+ <string name="ATTACH_HUD_TOP_CENTER">
+ HUD Środek Górny
+ </string>
+ <string name="ATTACH_HUD_TOP_LEFT">
+ HUD L Góra
+ </string>
+ <string name="ATTACH_HUD_CENTER_1">
+ HUD Åšrodek 1
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_LEFT">
+ HUD Dolna L Strona
+ </string>
+ <string name="ATTACH_HUD_BOTTOM">
+ HUD Dolny
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_RIGHT">
+ HUD Dolna P Strona
+ </string>
<string name="CursorPos">
Linia [LINE], Kolumna [COLUMN]
</string>
@@ -1280,11 +1515,17 @@ tej tekstury w swojej szafie
<string name="PanelContentsNewScript">
Nowy Skrypt
</string>
+ <string name="PanelContentsTooltip">
+ Zawartość obiektu
+ </string>
+ <string name="BusyModeResponseDefault">
+ Rezydent, do którego wysłałeś wiadomość prywatną znajduje się w trybie pracy. Oznacza to, iż Twoja wiadomość zostanie zapisana do przeglądnięcia poźniej.
+ </string>
<string name="MuteByName">
(według nazwy)
</string>
<string name="MuteAgent">
- (rezydenta)
+ (Rezydent)
</string>
<string name="MuteObject">
(obiekt)
@@ -1315,6 +1556,15 @@ tej tekstury w swojej szafie
<string name="ClassifiedUpdateAfterPublish">
(zostanie zaktualizowane po publikacji)
</string>
+ <string name="NoPicksClassifiedsText">
+ Nie dodałeś nic do Ulubionych i Reklam. Kliknij na poniższy przycisk Dodaj aby dodać miejsce do Ulubionych lub Reklamy.
+ </string>
+ <string name="NoAvatarPicksClassifiedsText">
+ Użytkownik nie posiada Ulubionych lub Reklam
+ </string>
+ <string name="PicksClassifiedsLoadingText">
+ Åadowanie...
+ </string>
<string name="MultiPreviewTitle">
PodglÄ…d
</string>
@@ -1385,22 +1635,36 @@ tej tekstury w swojej szafie
Anuluj
</string>
<string name="UploadingCosts">
- Koszty załadowania [%s]
+ Załadowanie [NAME] kosztuje [AMOUNT]L$
+ </string>
+ <string name="BuyingCosts">
+ Cena zakupu tego wynosi L$ [AMOUNT]
</string>
<string name="UnknownFileExtension">
Nieznane rozszerzenie dla pliku [.%s]
Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
</string>
+ <string name="MuteObject2">
+ Zablokuj
+ </string>
<string name="AddLandmarkNavBarMenu">
Dodaj Ulubione Miejsce...
</string>
<string name="EditLandmarkNavBarMenu">
Edytuj Ulubione Miejce...
</string>
- <string name="accel-mac-control">&#8963;</string>
- <string name="accel-mac-command">&#8984;</string>
- <string name="accel-mac-option">&#8997;</string>
- <string name="accel-mac-shift">&#8679;</string>
+ <string name="accel-mac-control">
+ ⌃
+ </string>
+ <string name="accel-mac-command">
+ ⌘
+ </string>
+ <string name="accel-mac-option">
+ ⌥
+ </string>
+ <string name="accel-mac-shift">
+ ⇧
+ </string>
<string name="accel-win-control">
Ctrl+
</string>
@@ -1638,43 +1902,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Cień o godzinie 5
</string>
<string name="All White">
- Wszystko Białe
+ Wszystko białe
</string>
<string name="Anime Eyes">
- Animuj Oczy
+ Animuj oczy
</string>
<string name="Arced">
Obrócony
</string>
<string name="Arm Length">
- Długość Ramienia
+ Długość ramienia
</string>
<string name="Attached">
Dołączone
</string>
<string name="Attached Earlobes">
- Płatki Uszu Dołączone
- </string>
- <string name="Back Bangs">
- Tylnie Pasemka
- </string>
- <string name="Back Bangs Down">
- Tylnie Pasemka w Dół
- </string>
- <string name="Back Bangs Up">
- Tylnie Pasemka do Góry
+ Płatki uszu dołączone
</string>
<string name="Back Fringe">
- Tylnia Grzywka
- </string>
- <string name="Back Hair">
- Back Hair
- </string>
- <string name="Back Hair Down">
- Back Hair Down
- </string>
- <string name="Back Hair Up">
- Back Hair Up
+ Tylnia grzywka
</string>
<string name="Baggy">
Wypchane
@@ -1682,12 +1928,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Bangs">
Pasemka
</string>
- <string name="Bangs Down">
- Pasemka w Dół
- </string>
- <string name="Bangs Up">
- Pasemka do Góry
- </string>
<string name="Beady Eyes">
Oczy Załzawione
</string>
@@ -1700,17 +1940,14 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Big Butt">
Duży Pośladek
</string>
- <string name="Big Eyeball">
- Duża Gałka Oczna
- </string>
<string name="Big Hair Back">
- Duże Włosy: z Tyłu
+ Duże Włosy: z tyłu
</string>
<string name="Big Hair Front">
- Duże Włosy: z Przodu
+ Duże Włosy: z przodu
</string>
<string name="Big Hair Top">
- Duże Włosy: z Góry
+ Duże Włosy: z góry
</string>
<string name="Big Head">
Duża Głowa
@@ -1728,22 +1965,22 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Blond
</string>
<string name="Blonde Hair">
- Włosy Koloru Blond
+ Włosy Blond
</string>
<string name="Blush">
Rumieniec
</string>
<string name="Blush Color">
- Kolor Rumieńca
+ Kolor rumieńca
</string>
<string name="Blush Opacity">
- Intensywność Rumieńca
+ Intensywność rumieńca
</string>
<string name="Body Definition">
- Detale Ciała
+ Detale ciała
</string>
<string name="Body Fat">
- Zawartość Tkanki Tłuszczowej
+ Zawartość tkanki tłuszczowej
</string>
<string name="Body Freckles">
Piegi
@@ -1761,13 +1998,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Bow Legged
</string>
<string name="Breast Buoyancy">
- Jędrność Piersi
+ Jędrność piersi
</string>
<string name="Breast Cleavage">
- Odstęp Między Piersiami
+ Odstęp między piersiami
</string>
<string name="Breast Size">
- Rozmiar Piersi
+ Rozmiar piersi
</string>
<string name="Bridge Width">
Szerokość
@@ -1776,7 +2013,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Szerokie
</string>
<string name="Brow Size">
- Rozmiar Czoła
+ Rozmiar czoła
</string>
<string name="Bug Eyes">
Bug Eyes
@@ -1812,34 +2049,34 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Chaplin
</string>
<string name="Cheek Bones">
- Kości Policzkowe
+ Kości policzkowe
</string>
<string name="Chest Size">
- Rozmiar Klatki Piersiowej
+ Rozmiar klatki piersiowej
</string>
<string name="Chin Angle">
- Kąt Podbródka
+ Kąt podbródka
</string>
<string name="Chin Cleft">
- Dołek w Podbródku
+ Dołek w podbródku
</string>
<string name="Chin Curtains">
- Zasłonięcie Podbródka
+ Zasłonięcie podbródka
</string>
<string name="Chin Depth">
- Długość Podbródka
+ Długość podbródka
</string>
<string name="Chin Heavy">
- Ciężar Podbródka
+ Ciężar podbródka
</string>
<string name="Chin In">
- Podbródek Wewnątrz
+ Podbródek wewnątrz
</string>
<string name="Chin Out">
- Podbródek Zewnętrzny
+ Podbródek zewnętrzny
</string>
<string name="Chin-Neck">
- Podwójny Podbródek
+ Podwójny podbródek
</string>
<string name="Clear">
Wyczyść
@@ -1854,32 +2091,29 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Zamknięte
</string>
<string name="Closed Back">
- Zamknięte z Tyłu
+ Zamknięte z tyłu
</string>
<string name="Closed Front">
- Zamknięte z Przodu
+ Zamknięte z przodu
</string>
<string name="Closed Left">
- Lewe Oko Zamknięte
+ Lewe Oko zamknięte
</string>
<string name="Closed Right">
- Prawe Oko Zamknięte
+ Prawe Oko zamknięte
</string>
<string name="Coin Purse">
Coin Purse
</string>
<string name="Collar Back">
- Kołnierz z Tyłu
+ Kołnierz z tyłu
</string>
<string name="Collar Front">
- Kołnierz z Przodu
+ Kołnierz z przodu
</string>
<string name="Corner Down">
Corner Down
</string>
- <string name="Corner Normal">
- Corner Normal
- </string>
<string name="Corner Up">
Corner Up
</string>
@@ -1887,10 +2121,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Pognieciony
</string>
<string name="Crooked Nose">
- Skrzywienie Nosa
- </string>
- <string name="Cropped Hair">
- Przycięte Włosy
+ Skrzywienie nosa
</string>
<string name="Cuff Flare">
Cuff Flare
@@ -1899,7 +2130,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Ciemne
</string>
<string name="Dark Green">
- Ciemne Zielone
+ Ciemne zielone
</string>
<string name="Darker">
Ciemniejsze
@@ -1910,17 +2141,11 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Default Heels">
Domyślne Buty na Obcasie
</string>
- <string name="Default Toe">
- Domyślny Palec
- </string>
<string name="Dense">
Gęstość
</string>
- <string name="Dense hair">
- Gęste Włosy
- </string>
<string name="Double Chin">
- Podwójny Podbródek
+ Podwójny podbródek
</string>
<string name="Downturned">
Downturned
@@ -1929,61 +2154,58 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Duffle Bag
</string>
<string name="Ear Angle">
- Odstawanie Uszu
+ Odstawanie uszu
</string>
<string name="Ear Size">
- Rozmiar Uszu
+ Rozmiar uszu
</string>
<string name="Ear Tips">
- Wierzchołki Uszu
+ Wierzchołki uszu
</string>
<string name="Egg Head">
- Jajowata Głowa
+ Jajowata głowa
</string>
<string name="Eye Bags">
- Woreczek Åzowy
+ Woreczek łzowy
</string>
<string name="Eye Color">
- Kolor Oczu
+ Kolor oczu
</string>
<string name="Eye Depth">
- Głębokość Osadzenia Oczu
+ Głębokość osadzenia oczu
</string>
<string name="Eye Lightness">
- Ustawienie Jasności Oczu
+ Ustawienie jasności oczu
</string>
<string name="Eye Opening">
- Oczy Otwarte
+ Oczy otwarte
</string>
<string name="Eye Pop">
- Różnica w Wielkości Oczu
+ Różnica w wielkości oczu
</string>
<string name="Eye Size">
- Rozmiar Oczu
+ Rozmiar oczu
</string>
<string name="Eye Spacing">
- Rozstaw Oczu
- </string>
- <string name="Eyeball Size">
- Wielkość Gałki Ocznej
+ Rozstaw oczu
</string>
<string name="Eyebrow Arc">
- Åuk Brwiowy
+ Åuk brwiowy
</string>
<string name="Eyebrow Density">
- Gęstość Brwi
+ Gęstość brwi
</string>
<string name="Eyebrow Height">
- Wysokość Brwi
+ Wysokość brwi
</string>
<string name="Eyebrow Points">
- Kształt Brwi
+ Kształt brwi
</string>
<string name="Eyebrow Size">
- Rozmiar Brwi
+ Rozmiar brwi
</string>
<string name="Eyelash Length">
- Długość Rzęs
+ Długość rzęs
</string>
<string name="Eyeliner">
Eyeliner
@@ -1991,68 +2213,20 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Eyeliner Color">
Kolor Eyeliner&apos;a
</string>
- <string name="Eyes Back">
- Eyes Back
- </string>
<string name="Eyes Bugged">
Eyes Bugged
</string>
- <string name="Eyes Forward">
- Eyes Forward
- </string>
- <string name="Eyes Long Head">
- Eyes Long Head
- </string>
- <string name="Eyes Shear Left Up">
- Eyes Shear Left Up
- </string>
- <string name="Eyes Shear Right Up">
- Eyes Shear Right Up
- </string>
- <string name="Eyes Short Head">
- Eyes Short Head
- </string>
- <string name="Eyes Spread">
- Rozmieszczenie Oczu
- </string>
- <string name="Eyes Sunken">
- Eyes Sunken
- </string>
- <string name="Eyes Together">
- Oczy Razem
- </string>
<string name="Face Shear">
- Usunięcie Twarzy
+ Usunięcie twarzy
</string>
<string name="Facial Definition">
- Detale Twarzy
+ Detale twarzy
</string>
<string name="Far Set Eyes">
Far Set Eyes
</string>
- <string name="Fat">
- Grubość
- </string>
- <string name="Fat Head">
- Gruba Głowa
- </string>
<string name="Fat Lips">
- Grube Usta
- </string>
- <string name="Fat Lower">
- Fat Lower
- </string>
- <string name="Fat Lower Lip">
- Fat Lower Lip
- </string>
- <string name="Fat Torso">
- Gruby Tułów
- </string>
- <string name="Fat Upper">
- Fat Upper
- </string>
- <string name="Fat Upper Lip">
- Fat Upper Lip
+ Grube usta
</string>
<string name="Female">
Kobieta
@@ -2064,64 +2238,49 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Palce
</string>
<string name="Flared Cuffs">
- Flared Cuffs
+ Rozszerzane rękawy
</string>
<string name="Flat">
Płaskość
</string>
<string name="Flat Butt">
- Płaskie Pośladki
+ Płaskie pośladki
</string>
<string name="Flat Head">
- Płaska Głowa
+ Płaska głowa
</string>
<string name="Flat Toe">
- Płaski Palec
+ Płaski palec
</string>
<string name="Foot Size">
- Rozmiar Stopy
+ Rozmiar stopy
</string>
<string name="Forehead Angle">
- Kształt Czoła
+ Kształt czoła
</string>
<string name="Forehead Heavy">
- Ciężar Czoła
+ Ciężar czoła
</string>
<string name="Freckles">
Piegi
</string>
- <string name="Front Bangs Down">
- Przednie Pasemka w Dół
- </string>
- <string name="Front Bangs Up">
- Przednie Pasemka do Góry
- </string>
<string name="Front Fringe">
Przednia Grzywka
</string>
- <string name="Front Hair">
- Front Hair
- </string>
- <string name="Front Hair Down">
- Front Hair Down
- </string>
- <string name="Front Hair Up">
- Przednie Włosy do Góry
- </string>
<string name="Full Back">
- Gęstość Włosów po Bokach
+ Gęstość włosów po bokach
</string>
<string name="Full Eyeliner">
- Gęsty Eyeliner
+ Gęsta kredka do oczu
</string>
<string name="Full Front">
- Gęsty Przód
+ Gęsty przód
</string>
<string name="Full Hair Sides">
- Gęste Włosy po Bokach
+ Gęste włosy po bokach
</string>
<string name="Full Sides">
- Gęste Boki
+ Gęste boki
</string>
<string name="Glossy">
Błyszczące
@@ -2130,64 +2289,64 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Rękawiczki
</string>
<string name="Glove Length">
- Długość Rękawiczek
+ Długość rękawiczek
</string>
<string name="Hair">
Włosy
</string>
<string name="Hair Back">
- Włosy: z Tyłu
+ Włosy: z tyłu
</string>
<string name="Hair Front">
- Włosy: z Przodu
+ Włosy: z przodu
</string>
<string name="Hair Sides">
- Hair: Boki
+ Włosy: boki
</string>
<string name="Hair Sweep">
- Kierunek Zaczesania
+ Kierunek zaczesania
</string>
<string name="Hair Thickess">
- Grubość Włosów
+ Grubość włosów
</string>
<string name="Hair Thickness">
- Grubość Włosów
+ Grubość włosów
</string>
<string name="Hair Tilt">
- Przesunięcie Fryzury
+ Przes. fryzury
</string>
<string name="Hair Tilted Left">
- Przesunięcie Fryzury w Lewo
+ Przes. fryzury L
</string>
<string name="Hair Tilted Right">
- Przesunięcie Fryzury w Prawo
+ Przes. fryzury P
</string>
<string name="Hair Volume">
- Włosy: Objętość
+ Włosy: objętość
</string>
<string name="Hand Size">
- Rozmiar Dłoni
+ Rozmiar dłoni
</string>
<string name="Handlebars">
Handlebars
</string>
<string name="Head Length">
- Długość Głowy
+ Długość głowy
</string>
<string name="Head Shape">
- Kształt Głowy
+ Kształt głowy
</string>
<string name="Head Size">
- Rozmiar Głowy
+ Rozmiar głowy
</string>
<string name="Head Stretch">
- Rozciągnięcie Głowy
+ Rozciągnięcie głowy
</string>
<string name="Heel Height">
- Wysokość Obcasa
+ Wysokość obcasa
</string>
<string name="Heel Shape">
- Ksztalt Obcasa
+ Ksztalt obcasa
</string>
<string name="Height">
Wysokość
@@ -2196,7 +2355,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Wysoka
</string>
<string name="High Heels">
- Wysokie Obcasy
+ Wysokie obcasy
</string>
<string name="High Jaw">
High Jaw
@@ -2211,34 +2370,34 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Wyżej
</string>
<string name="Hip Length">
- Długość Bioder
+ Długość bioder
</string>
<string name="Hip Width">
- Szerokość Bioder
+ Szerokość bioder
</string>
<string name="In">
W
</string>
<string name="In Shdw Color">
- Wewnętrzny Kolor Cienia
+ Wewnętrzny kolor cienia
</string>
<string name="In Shdw Opacity">
- Wewnętrzna Intensywność Cienia
+ Wewnętrzna intensywność cienia
</string>
<string name="Inner Eye Corner">
- Wenwętrzny Bok Oka
+ Wenwętrzny bok oka
</string>
<string name="Inner Eye Shadow">
- Wewnętrzny Cień Oka
+ Wewnętrzny cień oka
</string>
<string name="Inner Shadow">
- Wewnętrzny Cień
+ Wewnętrzny cień
</string>
<string name="Jacket Length">
- Długość Kurtki
+ Długość kurtki
</string>
<string name="Jacket Wrinkles">
- Zmarszczki na Kurtce
+ Zmarszczki na kurtce
</string>
<string name="Jaw Angle">
Jaw Angle
@@ -2256,7 +2415,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Jowls
</string>
<string name="Knee Angle">
- KÄ…t Kolana
+ KÄ…t kolana
</string>
<string name="Knock Kneed">
Knock Kneed
@@ -2265,22 +2424,22 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Duże
</string>
<string name="Large Hands">
- Duże Dłonie
+ Duże dłonie
</string>
<string name="Left Part">
Left Part
</string>
<string name="Leg Length">
- Długość Nogi
+ Długość nogi
</string>
<string name="Leg Muscles">
- Umięśnione Nogi
+ Umięśnione nogi
</string>
<string name="Less">
Mniej
</string>
<string name="Less Body Fat">
- Mniejsza Zawartości Tkanki Tłuszczowej
+ Mniejsza zawartości tkanki tłuszczowej
</string>
<string name="Less Curtains">
Less Curtains
@@ -2289,7 +2448,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Mniej Piegów
</string>
<string name="Less Full">
- Less Full
+ Mniej Pełne
</string>
<string name="Less Gravity">
Mniej Ciężaru
@@ -2298,25 +2457,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Less Love
</string>
<string name="Less Muscles">
- Mniej Mięśni
+ Mniej mięśni
</string>
<string name="Less Muscular">
- Mniej Umięśnienia
+ Mniej umięśnienia
</string>
<string name="Less Rosy">
Less Rosy
</string>
<string name="Less Round">
- Mniej ZaaokrÄ…glone
+ Mniej zaaokrÄ…glone
</string>
<string name="Less Saddle">
Less Saddle
</string>
<string name="Less Square">
- Mniej Kwadratowe
+ Mniej kwadratowe
</string>
<string name="Less Volume">
- Mniej Objętości
+ Mniej objętości
</string>
<string name="Less soul">
Less soul
@@ -2325,25 +2484,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Lżejsze
</string>
<string name="Lip Cleft">
- Szerokość Rozszczepienia Górnej Wargi
+ Szerokość Rozszczepienia górnej wargi
</string>
<string name="Lip Cleft Depth">
- Głębokość Rozszczepienia Górnej Wargi
+ Głębokość rozszczepienia górnej wargi
</string>
<string name="Lip Fullness">
- Pełność Ust
+ Pełne usta
</string>
<string name="Lip Pinkness">
- Róż Ust
+ Róż ust
</string>
<string name="Lip Ratio">
- Proporcje Ust
+ Proporcje ust
</string>
<string name="Lip Thickness">
- Grubość Ust
+ Grubość ust
</string>
<string name="Lip Width">
- Szerokość Ust
+ Szerokość ust
</string>
<string name="Lipgloss">
Połysk
@@ -2352,46 +2511,43 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Szminka
</string>
<string name="Lipstick Color">
- Kolor Szminki
+ Kolor szminki
</string>
<string name="Long">
Dlugość
</string>
<string name="Long Head">
- Długa Głowa
+ Długa głowa
</string>
<string name="Long Hips">
- Długie Biodra
+ Długie biodra
</string>
<string name="Long Legs">
- Długie Nogi
+ Długie nogi
</string>
<string name="Long Neck">
- Długi Kark
+ Długi kark
</string>
<string name="Long Pigtails">
- Długi Warkocz
+ Długi warkocz
</string>
<string name="Long Ponytail">
- Długi Kucyk
+ Długi kucyk
</string>
<string name="Long Torso">
- Długi Tułów
+ Długi tułów
</string>
<string name="Long arms">
- Dlugie Ramiona
- </string>
- <string name="Longcuffs">
- Długie Rękawy
+ Dlugie ramiona
</string>
<string name="Loose Pants">
- Luźne Spodnie
+ Luźne spodnie
</string>
<string name="Loose Shirt">
- Luźna Koszulka
+ Luźna koszulka
</string>
<string name="Loose Sleeves">
- Luźne Rękawy
+ Luźne rękawy
</string>
<string name="Love Handles">
Love Handles
@@ -2400,16 +2556,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Nisko
</string>
<string name="Low Heels">
- Niskie Obcasy
+ Niskie obcasy
</string>
<string name="Low Jaw">
- Niska Szczęka
+ Niska szczęka
</string>
<string name="Low Platforms">
Low Platforms
</string>
<string name="Low and Loose">
- Niskie i Luźne
+ Niskie i luźne
</string>
<string name="Lower">
Niżej
@@ -2424,7 +2580,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Mężczyzna
</string>
<string name="Middle Part">
- Część Środkowa
+ Część środkowa
</string>
<string name="More">
Więcej
@@ -2433,7 +2589,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
More Blush
</string>
<string name="More Body Fat">
- Więcej Zawartości Tkanki Tłuszczowej
+ Więcej zawartości tkanki tłuszczowej
</string>
<string name="More Curtains">
More Curtains
@@ -2442,34 +2598,34 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
More Eyeshadow
</string>
<string name="More Freckles">
- Więcej Piegów
+ Więcej piegów
</string>
<string name="More Full">
More Full
</string>
<string name="More Gravity">
- Więcej Ciężaru
+ Więcej ciężaru
</string>
<string name="More Lipstick">
- Więcej Szminki
+ Więcej szminki
</string>
<string name="More Love">
More Love
</string>
<string name="More Lower Lip">
- Więcej Dolnej Wargi
+ Więcej dolnej wargi
</string>
<string name="More Muscles">
- Więcej Mięśni
+ Więcej mięśni
</string>
<string name="More Muscular">
- Więcej Umięśnienia
+ Więcej umięśnienia
</string>
<string name="More Rosy">
More Rosy
</string>
<string name="More Round">
- Więcej Zaokrąglenia
+ Więcej zaokrąglenia
</string>
<string name="More Saddle">
More Saddle
@@ -2478,16 +2634,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
More Sloped
</string>
<string name="More Square">
- Więcej Kwadratowy
+ Więcej kwadratowy
</string>
<string name="More Upper Lip">
- Więcej Górnej Wargi
+ Więcej górnej wargi
</string>
<string name="More Vertical">
More Vertical
</string>
<string name="More Volume">
- Więcej Objętości
+ Więcej objętości
</string>
<string name="More soul">
More soul
@@ -2511,10 +2667,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Mutton Chops
</string>
<string name="Nail Polish">
- Lakier na Paznokciach
+ Lakier na paznokciach
</string>
<string name="Nail Polish Color">
- Kolor Lakieru na Paznokciach
+ Kolor lakieru na paznokciach
</string>
<string name="Narrow">
WÄ…skie
@@ -2532,10 +2688,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Naturalne
</string>
<string name="Neck Length">
- Długość Karku
+ Długość karku
</string>
<string name="Neck Thickness">
- Grubość Karku
+ Grubość karku
</string>
<string name="No Blush">
No Blush
@@ -2544,70 +2700,64 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Brak Eyeliner&apos;s
</string>
<string name="No Eyeshadow">
- Brak Cienia pod PowiekÄ…
- </string>
- <string name="No Heels">
- Brak Obcasów
+ Brak cienia pod powiekÄ…
</string>
<string name="No Lipgloss">
- Brak Połysku
+ Brak połysku
</string>
<string name="No Lipstick">
- Brak Szminki
+ Brak szminki
</string>
<string name="No Part">
No Part
</string>
<string name="No Polish">
- Brak Lakieru
+ Brak lakieru
</string>
<string name="No Red">
- Brak Czerwieni
+ Brak czerwieni
</string>
<string name="No Spikes">
- Brak Szpiców
+ Brak szpiców
</string>
<string name="No White">
- Brak Białego
+ Brak białego
</string>
<string name="No Wrinkles">
- Brak Zmarszczek
+ Brak zmarszczek
</string>
<string name="Normal Lower">
- Dół Normalny
+ Dół normalny
</string>
<string name="Normal Upper">
- Góra Normalna
+ Góra normalna
</string>
<string name="Nose Left">
- Nos w StronÄ™ LewÄ…
+ Nos w stronÄ™ lewÄ…
</string>
<string name="Nose Right">
- Nos w StronÄ™ PrawÄ…
+ Nos w stronÄ™ prawÄ…
</string>
<string name="Nose Size">
- Rozmiar Nosa
+ Rozmiar nosa
</string>
<string name="Nose Thickness">
- Grubość Nosa
+ Grubość nosa
</string>
<string name="Nose Tip Angle">
- KÄ…t Czubka Nosa
+ KÄ…t czubka nosa
</string>
<string name="Nose Tip Shape">
- Kształt Czubka Nosa
+ Kształt czubka nosa
</string>
<string name="Nose Width">
- Szerokość Nosa
+ Szerokość nosa
</string>
<string name="Nostril Division">
- Przegroda Nosa
+ Przegroda nosa
</string>
<string name="Nostril Width">
- Wielkość Dziurek w Nosie
- </string>
- <string name="Old">
- Stare
+ Wielkość dziurek w nosie
</string>
<string name="Opaque">
Intensywność
@@ -2616,16 +2766,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Otwarte
</string>
<string name="Open Back">
- Otwarte z Tyłu
+ Otwarte z tyłu
</string>
<string name="Open Front">
- Otwarte z Przodu
+ Otwarte z przodu
</string>
<string name="Open Left">
- Otwarte z Lewej
+ Otwarte z lewej
</string>
<string name="Open Right">
- Otwarte z Prawej
+ Otwarte z prawej
</string>
<string name="Orange">
Pomarańczowe
@@ -2634,19 +2784,19 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Zewnętrznie
</string>
<string name="Out Shdw Color">
- Zewnętrzny Kolor Cienia
+ Zewnętrzny kolor cienia
</string>
<string name="Out Shdw Opacity">
- Zewnętrzna Grubość Cienia
+ Zewnętrzna grubość cienia
</string>
<string name="Outer Eye Corner">
- Zewnętrzny Bok Oka
+ Zewnętrzny bok oka
</string>
<string name="Outer Eye Shadow">
- Zewnętrzny Cień Oka
+ Zewnętrzny cień oka
</string>
<string name="Outer Shadow">
- Zewnętrzny Cień
+ Zewnętrzny cień
</string>
<string name="Overbite">
Overbite
@@ -2655,25 +2805,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Package
</string>
<string name="Painted Nails">
- Pomalowane Paznokcie
+ Pomalowane paznokcie
</string>
<string name="Pale">
Pale
</string>
<string name="Pants Crotch">
- Krocze Spodni
+ Krocze spodni
</string>
<string name="Pants Fit">
Pants Fit
</string>
<string name="Pants Length">
- Długość Spodni
+ Długość spodni
</string>
<string name="Pants Waist">
- Talia Spodni
+ Talia spodni
</string>
<string name="Pants Wrinkles">
- Zmarszczki Spodni
+ Zmarszczki spodni
</string>
<string name="Part">
Część
@@ -2682,7 +2832,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Part Bangs
</string>
<string name="Pectorals">
- Mięśnie Klatki Piersiowej
+ Mięśnie klatki piersiowej
</string>
<string name="Pigment">
Pigment
@@ -2708,9 +2858,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Pointy Heels">
Pointy Heels
</string>
- <string name="Pointy Toe">
- Pointy Toe
- </string>
<string name="Ponytail">
Kucyk
</string>
@@ -2735,27 +2882,18 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Red Hair">
Czerwone Włosy
</string>
- <string name="Red Skin">
- Czerwona Skóra
- </string>
<string name="Regular">
Regularne
</string>
- <string name="Regular Muscles">
- Regularne Mięśnie
- </string>
<string name="Right Part">
- Prawa Cześć
+ Prawa część
</string>
<string name="Rosy Complexion">
- Kompleksowość Różu
+ Kompleksowość różu
</string>
<string name="Round">
ZaokrÄ…glenie
</string>
- <string name="Round Forehead">
- ZaokrÄ…glenie na Czole
- </string>
<string name="Ruddiness">
Rudowatość
</string>
@@ -2768,62 +2906,44 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Saddle Bags">
Saddle Bags
</string>
- <string name="Saddlebags">
- Saddlebags
- </string>
- <string name="Scrawny">
- Scrawny
- </string>
<string name="Scrawny Leg">
Scrawny Leg
</string>
<string name="Separate">
Odzielne
</string>
- <string name="Shading">
- Cieniowanie
- </string>
- <string name="Shadow hair">
- Cieniowane Włosy
- </string>
<string name="Shallow">
Płytkie
</string>
<string name="Shear Back">
- Tylne Usunięcie Włosów
+ Tylne usunięcie włosów
</string>
<string name="Shear Face">
- Usunięcie Twarzy
+ Usunięcie twarzy
</string>
<string name="Shear Front">
- Przednie Usunięcie Włosów
- </string>
- <string name="Shear Left">
- Usunięcie z Lewej Strony
+ Przednie usunięcie włosów
</string>
<string name="Shear Left Up">
- Usunięcie od Lewej Strony do Góry
- </string>
- <string name="Shear Right">
- Usunięcie z Prawej Strony
+ Usunięcie od lewej strony do góry
</string>
<string name="Shear Right Up">
- Usunięcie od Prawej Strony do Góry
+ Usunięcie od prawej strony do góry
</string>
<string name="Sheared Back">
- Tylnie Usunięcie Włosów
+ Tylnie usunięcie włosów
</string>
<string name="Sheared Front">
- Przednie Usunięcie Włosów
+ Przednie usunięcie włosów
</string>
<string name="Shift Left">
- Przesuń w Lewo
+ Przesuń w lewo
</string>
<string name="Shift Mouth">
- Przesuń Usta
+ Przesuń usta
</string>
<string name="Shift Right">
- Przesuń w Prawo
+ Przesuń w prawo
</string>
<string name="Shirt Bottom">
Dolna Część Koszulki
@@ -2832,22 +2952,22 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Shirt Fit
</string>
<string name="Shirt Wrinkles">
- Zmarszczki na Koszulce
+ Zmarszczki na koszulce
</string>
<string name="Shoe Height">
- Wysokość Buta
+ Wysokość buta
</string>
<string name="Short">
Krótkie
</string>
<string name="Short Arms">
- Krótkie Ramiona
+ Krótkie ramiona
</string>
<string name="Short Legs">
- Krótkie Nogi
+ Krótkie nogi
</string>
<string name="Short Neck">
- Krótki Kark
+ Krótki kark
</string>
<string name="Short Pigtails">
Short Pigtails
@@ -2859,25 +2979,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Krótkie Baczki
</string>
<string name="Short Torso">
- Krótki Tułów
+ Krótki tułów
</string>
<string name="Short hips">
- Krótkie Biodra
+ Krótkie biodra
</string>
<string name="Shoulders">
Ramiona
</string>
- <string name="Side Bangs">
- Boczne Pasemka
- </string>
- <string name="Side Bangs Down">
- Boczne Pasemka w Dół
- </string>
- <string name="Side Bangs Up">
- Boczne Pasemka do Góry
- </string>
<string name="Side Fringe">
- Boczna Grzywka
+ Boczna grzywka
</string>
<string name="Sideburns">
Baczki
@@ -2891,9 +3002,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Sides Hair Up">
Boczne Włosy do Góry
</string>
- <string name="Skinny">
- Smukłość
- </string>
<string name="Skinny Neck">
Smukły Kark
</string>
@@ -2901,16 +3009,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Skirt Fit
</string>
<string name="Skirt Length">
- Długość Spódnicy
+ Długość spódnicy
</string>
<string name="Slanted Forehead">
- Ukośne Czoło
+ Ukośne czoło
</string>
<string name="Sleeve Length">
- Długość Rękawów
+ Długość rękawów
</string>
<string name="Sleeve Looseness">
- Luźność Rękawów
+ Luźność rękawów
</string>
<string name="Slit Back">
Slit: Back
@@ -2928,22 +3036,19 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Małe
</string>
<string name="Small Hands">
- Małe Dłonie
+ Małe dłonie
</string>
<string name="Small Head">
- Mała Głowa
+ Mała głowa
</string>
<string name="Smooth">
Gładkie
</string>
<string name="Smooth Hair">
- Gładkie Włosy
+ Gładkie włosy
</string>
<string name="Socks Length">
- Długość Skarpetek
- </string>
- <string name="Some">
- Some
+ Długość skarpetek
</string>
<string name="Soulpatch">
Soulpatch
@@ -2958,16 +3063,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Kwadratowe
</string>
<string name="Square Toe">
- Kwadratowy Palec
+ Kwadratowy palec
</string>
<string name="Squash Head">
- Ściśnięta Głowa
- </string>
- <string name="Squash/Stretch Head">
- Ściśnięta/Rozciągnięta Głowa
+ Ściśnięta głowa
</string>
<string name="Stretch Head">
- Rozciągnięta Głowa
+ Rozciągnięta głowa
</string>
<string name="Sunken">
Sunken
@@ -2984,18 +3086,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="Sweep Forward">
Sweep Forward
</string>
- <string name="Swept Back">
- Swept Back
- </string>
- <string name="Swept Back Hair">
- Swept Back Hair
- </string>
- <string name="Swept Forward">
- Swept Forward
- </string>
- <string name="Swept Forward Hair">
- Swept Forward Hair
- </string>
<string name="Tall">
Wysokość
</string>
@@ -3006,67 +3096,58 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Taper Front
</string>
<string name="Thick Heels">
- Grube Obcasy
+ Grube obcasy
</string>
<string name="Thick Neck">
- Gruby Kark
+ Gruby kark
</string>
<string name="Thick Toe">
- Gruby Palec
- </string>
- <string name="Thickness">
- Grubość
+ Gruby palec
</string>
<string name="Thin">
WÄ…ski
</string>
<string name="Thin Eyebrows">
- WÄ…skie Brwi
+ WÄ…skie brwi
</string>
<string name="Thin Lips">
- WÄ…skie Usta
+ WÄ…skie usta
</string>
<string name="Thin Nose">
- WÄ…ski Nos
+ WÄ…ski nos
</string>
<string name="Tight Chin">
- Obcisły Podbródek
+ Obcisły podbródek
</string>
<string name="Tight Cuffs">
- Obcisłe Rękawy
+ Obcisłe rękawy
</string>
<string name="Tight Pants">
- Obciesłe Spodnie
+ Obciesłe spodnie
</string>
<string name="Tight Shirt">
- Obcisły Podkoszulek
+ Obcisły podkoszulek
</string>
<string name="Tight Skirt">
- Tight Skirt
+ Wąska spódnica
</string>
<string name="Tight Sleeves">
- Obcisłe Rękawy
- </string>
- <string name="Tilt Left">
- Przesuń w Lewo
- </string>
- <string name="Tilt Right">
- Przesuń w Prawo
+ Obcisłe rękawy
</string>
<string name="Toe Shape">
- Kształt Palca
+ Kształt palca
</string>
<string name="Toe Thickness">
- Grubość Palca
+ Grubość palca
</string>
<string name="Torso Length">
- Długość Tułowia
+ Długość tułowia
</string>
<string name="Torso Muscles">
- Mięśnie Tułowia
+ Mięśnie tułowia
</string>
<string name="Torso Scrawny">
- Wychudzony Tułów
+ Wychudzony tułów
</string>
<string name="Unattached">
Nieprzyłączone
@@ -3081,43 +3162,43 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Nienaturalne
</string>
<string name="Upper Bridge">
- Górny Mostek
+ Górny mostek
</string>
<string name="Upper Cheeks">
- Górne Policzki
+ Górne policzki
</string>
<string name="Upper Chin Cleft">
- Roszczepienie Górnego Podbródka
+ Roszczepienie górnego podbródka
</string>
<string name="Upper Eyelid Fold">
- Górna Powieka
+ Górna powieka
</string>
<string name="Upturned">
Zadarta
</string>
<string name="Very Red">
- Bardzo Czerwona
+ Bardzo czerwona
</string>
<string name="Waist Height">
- Wysokość Tali
+ Wysokość talii
</string>
<string name="Well-Fed">
Well-Fed
</string>
<string name="White Hair">
- Białe Włosy
+ Białe włosy
</string>
<string name="Wide">
Szerokie
</string>
<string name="Wide Back">
- Szeroki Tył
+ Szeroki tył
</string>
<string name="Wide Front">
- Szeroki Przód
+ Szeroki przód
</string>
<string name="Wide Lips">
- Szerokie Usta
+ Szerokie usta
</string>
<string name="Wild">
Dzikość
@@ -3194,6 +3275,21 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="IM_moderator_label">
(Moderator)
</string>
+ <string name="started_call">
+ Rozpoczęta rozmowa głosowa
+ </string>
+ <string name="joined_call">
+ Dołączył do rozmowy głosowej
+ </string>
+ <string name="ringing-im">
+ Rozmowa głosowa...
+ </string>
+ <string name="connected-im">
+ Połączono, kliknij Zakończ Rozmowe aby się rozłączyć
+ </string>
+ <string name="hang_up-im">
+ Rozmowa głosowa zakończona
+ </string>
<string name="only_user_message">
JesteÅ› jedynÄ… osobÄ… w tej konferencji.
</string>
@@ -3203,6 +3299,12 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="invite_message">
Kliknij na [BUTTON NAME] przycisk by zaakceptować/dołączyć do tej rozmowy.
</string>
+ <string name="muted_message">
+ Zablokowałeś tego Rezydenta. Wysłanie wiadomości automatycznie odblokuje go.
+ </string>
+ <string name="generic">
+ Błąd zapytania, proszę spróbować później
+ </string>
<string name="generic_request_error">
Błąd. Spróbuj ponownie za kilka minut.
</string>
@@ -3221,19 +3323,153 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="not_a_mod_error">
Nie jesteÅ› moderatorem konferencji.
</string>
+ <string name="muted">
+ Moderator grupy wyłączył czat.
+ </string>
<string name="muted_error">
Moderator wyciszył Cię.
</string>
<string name="add_session_event">
Nie można dodać nikogo do czatu z [RECIPIENT].
</string>
+ <string name="message">
+ Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT].
+ </string>
<string name="message_session_event">
Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT].
</string>
+ <string name="mute">
+ Błąd poczas moderacji.
+ </string>
+ <string name="removed">
+ Zostałeś usunięty z grupy
+ </string>
<string name="removed_from_group">
Usunięto Cię z grupy.
</string>
<string name="close_on_no_ability">
Nie posiadasz praw by uczestniczyć w tej konferencji.
</string>
+ <string name="unread_chat_single">
+ [SOURCES] powiedział/a coś nowego
+ </string>
+ <string name="unread_chat_multiple">
+ [SOURCES] powiedział/a coś nowego
+ </string>
+ <string name="paid_you_ldollars">
+ [NAME] zapłacił Ci L$[AMOUNT]
+ </string>
+ <string name="you_paid_ldollars">
+ Zapłacono [NAME] [AMOUNT]L$ [REASON].
+ </string>
+ <string name="you_paid_ldollars_no_reason">
+ Zapłacono [NAME] [AMOUNT]L$.
+ </string>
+ <string name="you_paid_ldollars_no_name">
+ Zapłacono [AMOUNT]L$ [REASON].
+ </string>
+ <string name="for a parcel of land">
+ za posiadłość
+ </string>
+ <string name="for a land access pass">
+ za przepustkę na Posiadłość
+ </string>
+ <string name="for deeding land">
+ dla przypisania Posiadłości
+ </string>
+ <string name="to create a group">
+ aby stworzyć grupę
+ </string>
+ <string name="to join a group">
+ aby dołączyć do grupy
+ </string>
+ <string name="to upload">
+ aby pobrać
+ </string>
+ <string name="giving">
+ Dajesz L$ [AMOUNT]
+ </string>
+ <string name="uploading_costs">
+ Åadowanie kosztuje [AMOUNT]L$
+ </string>
+ <string name="this_costs">
+ To kosztuje [AMOUNT]L$
+ </string>
+ <string name="buying_selected_land">
+ Kupno wybranej Posiadłości [AMOUNT]L$
+ </string>
+ <string name="this_object_costs">
+ Ten obiekt kosztuje [AMOUNT]L$
+ </string>
+ <string name="group_role_everyone">
+ Każdy
+ </string>
+ <string name="group_role_officers">
+ Oficerowie
+ </string>
+ <string name="group_role_owners">
+ Właściciele
+ </string>
+ <string name="uploading_abuse_report">
+ Pobieranie...
+
+Raport o Nadużyciu
+ </string>
+ <string name="New Shape">
+ Nowy ksztalt
+ </string>
+ <string name="New Skin">
+ Nowa skórka
+ </string>
+ <string name="New Hair">
+ Nowe włosy
+ </string>
+ <string name="New Eyes">
+ Nowe oczy
+ </string>
+ <string name="New Shirt">
+ Nowa koszula
+ </string>
+ <string name="New Pants">
+ Nowe spodnie
+ </string>
+ <string name="New Shoes">
+ Nowe buty
+ </string>
+ <string name="New Socks">
+ Nowe skarpetki
+ </string>
+ <string name="New Jacket">
+ Nowa kurtka
+ </string>
+ <string name="New Gloves">
+ Nowe rękawiczki
+ </string>
+ <string name="New Undershirt">
+ Nowy podkoszulek
+ </string>
+ <string name="New Underpants">
+ Nowa bielizna
+ </string>
+ <string name="New Skirt">
+ Nowa spódnica
+ </string>
+ <string name="New Alpha">
+ Nowa Alpha
+ </string>
+ <string name="New Tattoo">
+ Nowy tatuaż
+ </string>
+ <string name="Invalid Wearable">
+ Nieaktualne ubranie/część ciała
+ </string>
+ <string name="New Script">
+ Nowy skrypt
+ </string>
+ <string name="New Folder">
+ Nowy folder
+ </string>
+ <string name="Contents">
+ Zawartość
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/pl/teleport_strings.xml b/indra/newview/skins/default/xui/pl/teleport_strings.xml
index 906978effe..6c4723dd7e 100644
--- a/indra/newview/skins/default/xui/pl/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/pl/teleport_strings.xml
@@ -62,6 +62,9 @@ Spróbuj jeszcze raz za kilka minut.
<message name="completing">
Finalizowanie teleportacji.
</message>
+ <message name="completed_from">
+ Teleportacja zakończona z [T_SLURL]
+ </message>
<message name="resolving">
Namierzanie celu.
</message>
diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml
index d6e1c925b0..f1f6ff9aea 100644
--- a/indra/newview/skins/default/xui/pt/floater_about.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="SOBRE O [CAPITALIZED_APP_NAME]">
+<floater name="floater_about" title="SOBRE [CAPITALIZED_APP_NAME]">
<floater.string name="AboutHeader">
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
</floater.string>
@@ -7,7 +7,7 @@
Construído com [COMPILER] versão [COMPILER_VERSION]
</floater.string>
<floater.string name="AboutPosition">
- Você está em [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] em [REGION] localizado em [HOSTNAME] ([HOSTIP])
+ Você está em [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] em [REGION] localizado em [HOSTNAME]&lt;/nolink&gt;([HOSTIP])
[SERVER_VERSION]
[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]]
</floater.string>
@@ -38,16 +38,23 @@ Versão Vivox: [VIVOX_VERSION]
</floater.string>
<tab_container name="about_tab">
<panel label="Info" name="support_panel">
- <button label="Copiar para área de transferência" name="copy_btn"/>
+ <button label="Copiar" name="copy_btn"/>
</panel>
<panel label="Créditos" name="credits_panel">
<text_editor name="credits_editor">
- Second Life é oferecido a você por Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl e muitos outros.
+ O Second Life é o resultado do trabalho de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les e muitos mais.
- Obrigado aos seguintes residentes por ajudar a garantir para que esta versão seja ainda melhor: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+Agradecemos também aos seguintes residentes por sua colaboração na mais nova versão do Second Life: (in progress)
- Para ter sucesso nos negócios, seja ousado, seja o primeiro, seja diferente. --Henry Marchant
+
+
+
+
+
+
+Raras são as mentes capazes de tornar óbvio o até então inexistente. Dizer &apos;eu poderia ter pensado a mesma coisa&apos; é comum, revelador e nem sempre a verdade; porque de fato não pensaram.
+ -- Douglas Adams
</text_editor>
</panel>
<panel label="Licenças" name="licenses_panel">
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 bf6faf50cc..252969609a 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floaterland" title="SOBRE O TERRENO">
+ <floater.string name="maturity_icon_general">
+ &quot;Parcel_PG_Dark
+ </floater.string>
+ <floater.string name="maturity_icon_moderate">
+ &quot;Parcel_M_Dark&quot;
+ </floater.string>
+ <floater.string name="maturity_icon_adult">
+ &quot;Parcel_R_Dark&quot;
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] minutos
</floater.string>
@@ -15,7 +24,7 @@
<tab_container name="landtab">
<panel label="GERAL" name="land_general_panel">
<panel.string name="new users only">
- Somente novos usuários
+ Somente novos residentes
</panel.string>
<panel.string name="anyone">
Qualquer um
@@ -81,9 +90,12 @@ Vá para o menu Mundo &gt; Sobre a Terra ou selecione outro lote para mostrar se
<text name="Group:">
Grupo:
</text>
- <button label="Ajustar..." label_selected="Ajustar..." name="Set..."/>
+ <text name="GroupText">
+ Leyla Linden
+ </text>
+ <button label="Ajustar" name="Set..."/>
<check_box label="Permitir posse para o grupo" name="check deed" tool_tip="O gerente do grupo pode acionar essa terra ao grupo, então esta será mantida pelo gestor da ilha"/>
- <button label="Passar..." label_selected="Passar..." name="Deed..." tool_tip="Você só pode delegar esta terra se você for um gerente selecionado pelo grupo."/>
+ <button label="Passar" name="Deed..." tool_tip="Você só pode delegar esta terra se você for um gerente selecionado pelo grupo."/>
<check_box label="Proprietário faz contribuição com delegação" name="check contrib" tool_tip="Quando a terra é delegada ao grupo, o proprietário anterior contribui alocando terra suficiente para mantê-la."/>
<text name="For Sale:">
À Venda:
@@ -94,7 +106,7 @@ Vá para o menu Mundo &gt; Sobre a Terra ou selecione outro lote para mostrar se
<text name="For Sale: Price L$[PRICE].">
Preço: L$[PRICE] (L$[PRICE_PER_SQM]/m²).
</text>
- <button label="Vender Terra..." label_selected="Vender Terra..." name="Sell Land..."/>
+ <button label="Vender Terra" name="Sell Land..."/>
<text name="For sale to">
À venda para: [BUYER]
</text>
@@ -106,7 +118,7 @@ Vá para o menu Mundo &gt; Sobre a Terra ou selecione outro lote para mostrar se
</text>
<button label="Cancelar venda do terreno" label_selected="Cancelar venda do terreno" left="275" name="Cancel Land Sale" width="165"/>
<text name="Claimed:">
- Reclamado:
+ Posse em:
</text>
<text name="DateClaimText">
Ter Ago 15 13:47:25 2006
@@ -123,27 +135,28 @@ Vá para o menu Mundo &gt; Sobre a Terra ou selecione outro lote para mostrar se
<text name="DwellText">
0
</text>
- <button label="Comprar Terra..." label_selected="Comprar Terra..." left="130" name="Buy Land..." width="125"/>
- <button label="Comprar para o Grupo..." label_selected="Comprar para o Grupo..." name="Buy For Group..."/>
- <button label="Comprar Passe..." label_selected="Comprar Passe..." left="130" name="Buy Pass..." tool_tip="Um passe concede a você acesso temporário a esta terra." width="125"/>
- <button label="Abandonar Terra.." label_selected="Abandonar Terra.." name="Abandon Land..."/>
- <button label="Reclamar Terra..." label_selected="Reclamar Terra..." name="Reclaim Land..."/>
- <button label="Venda Linden..." label_selected="Venda Linden..." name="Linden Sale..." tool_tip="A terra precisa ser possuída, estar com o conteúdo configurado e não estar pronta para leilão."/>
+ <button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/>
+ <button label="Dados do script" name="Scripts..."/>
+ <button label="Comprar para o Grupo" name="Buy For Group..."/>
+ <button label="Comprar passe..." label_selected="Comprar passe..." left="130" name="Buy Pass..." tool_tip="Um passe concede a você acesso temporário a este terreno." width="125"/>
+ <button label="Abandonar terreno..." label_selected="Abandonar terreno..." name="Abandon Land..."/>
+ <button label="Pedir terreno" name="Reclaim Land..."/>
+ <button label="Venda Linden" name="Linden Sale..." tool_tip="O terreno precisa ser possuído, estar com o conteúdo configurado e não estar pronto para leilão."/>
</panel>
<panel label="CONTRATO" name="land_covenant_panel">
<panel.string name="can_resell">
- Terra comprada nesta região pode ser revendida.
+ Terrenos comprados nesta região podem ser revendidos.
</panel.string>
<panel.string name="can_not_resell">
- Terra comprada nesta região não pode ser revendida.
+ Terrenos comprados nesta região não podem ser revendidos.
</panel.string>
<panel.string name="can_change">
- Terra comprada nesta região pode ser compartilhada
-ou sub-dividida.
+ Terrenos comprados nesta região podem ser compartilhados
+ou sub-divididos.
</panel.string>
<panel.string name="can_not_change">
- Terra comprada nesta região não pode ser compartilhada
-ou sub-dividida.
+ Terrenos comprados nesta região não podem ser compartilhados
+ou sub-divididos.
</panel.string>
<text name="estate_section_lbl">
Propriedade:
@@ -202,7 +215,7 @@ ou sub-dividida.
[COUNT] de [MAX] ([DELETED] serão deletados)
</panel.string>
<text name="parcel_object_bonus">
- Fator de Bonus para Objetos na Região: [BONUS]
+ Fator de bônus para objetos na região: [BONUS]
</text>
<text name="Simulator primitive usage:">
Uso de prims:
@@ -211,13 +224,13 @@ ou sub-dividida.
[COUNT] de [MAX] ([AVAILABLE] disponíveis)
</text>
<text name="Primitives parcel supports:" width="200">
- Primitivas suportadas pelo lote:
+ Prims suportadas pelo lote:
</text>
<text left="214" name="object_contrib_text" width="152">
[COUNT]
</text>
<text name="Primitives on parcel:">
- Primitivas no Lote:
+ Prims no Lote:
</text>
<text left="214" name="total_objects_text" width="48">
[COUNT]
@@ -229,7 +242,7 @@ ou sub-dividida.
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/>
- <button label="Retornar..." label_selected="Retornar..." name="ReturnOwner..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/>
+ <button label="Retornar" name="ReturnOwner..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/>
<text left="14" name="Set to group:" width="180">
Configurados ao grupo:
</text>
@@ -237,15 +250,15 @@ ou sub-dividida.
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/>
- <button label="Retornar..." label_selected="Retornar..." name="ReturnGroup..." right="-10" tool_tip="Retornar os objetos para seus donos." width="119"/>
+ <button label="Retornar" name="ReturnGroup..." right="-10" tool_tip="Retornar os objetos para seus donos." width="119"/>
<text left="14" name="Owned by others:" width="128">
- Propriedade de Outros:
+ Propriedade de outros:
</text>
<text left="214" name="other_objects_text" width="48">
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/>
- <button label="Retornar..." label_selected="Retornar..." name="ReturnOther..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/>
+ <button label="Retornar" name="ReturnOther..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/>
<text left="14" name="Selected / sat upon:" width="193">
Selecionado/Sentado:
</text>
@@ -253,13 +266,13 @@ ou sub-dividida.
[COUNT]
</text>
<text left="4" name="Autoreturn" width="412">
- Auto-retornar objetos dos outros residentes (minutos, 0 para desligado):
+ Devolver objetos de outros residentes (p/ desligar tecle 0)
</text>
<line_editor name="clean other time" right="-10"/>
<text name="Object Owners:">
- Donos dos Objetos:
+ Donos dos objetos:
</text>
- <button label="Atualizar Lista" label_selected="Atualizar Lista" left="118" name="Refresh List" tool_tip="Refresh Object List"/>
+ <button label="Atualizar lista" label_selected="Atualizar lista" left="118" name="Refresh List" tool_tip="Refresh Object List"/>
<button label="Retornar objetos..." label_selected="Retornar objetos..." left="230" name="Return objects..."/>
<name_list name="owner list">
<name_list.columns label="Tipo" name="type"/>
@@ -280,57 +293,57 @@ Apenas lotes maiores podem ser listados na busca.
Esta opção está desabilitada porque você não pode modificar as opções deste lote.
</panel.string>
<panel.string name="mature_check_mature">
- Conteúdo Mature
+ Conteúdo Adulto
</panel.string>
<panel.string name="mature_check_adult">
- Conteúdo Adult
+ Conteúdo Adulto
</panel.string>
<panel.string name="mature_check_mature_tooltip">
- A informação do seu lote ou seu conteúdo são considerados mature.
+ A informação do seu lote ou seu conteúdo são considerados adulto.
</panel.string>
<panel.string name="mature_check_adult_tooltip">
- A informação do seu lote ou seu conteúdo são considerados adult.
+ A informação do seu lote ou seu conteúdo são considerados adulto.
</panel.string>
<panel.string name="landing_point_none">
(nenhum)
</panel.string>
<panel.string name="push_restrict_text">
- Sem Empurrar
+ Sem empurrar
</panel.string>
<panel.string name="push_restrict_region_text">
- Sem Empurrar (Imposição na Região)
+ Sem empurrar (imposição na região)
</panel.string>
<text name="allow_label">
- Permitir outros residentes a:
+ Autorizar outros residentes a:
</text>
<check_box label="Editar Terreno" name="edit land check" tool_tip="Se ativado, qualquer um pode modificar a forma da sua terra. É melhor deixar esta opção desativada, uma vez que você sempre pode editar seu próprio terreno."/>
<check_box label="Voar" name="check fly" tool_tip="Se ativado, os Residentes podem voar na sua terra. Se desativado, eles podem voar apenas para dentro e por cima de sua terra."/>
- <text left="172" name="allow_label2">
- Criar Objetos:
+ <text name="allow_label2">
+ Criar objetos:
</text>
<check_box label="Residentes" name="edit objects check"/>
<check_box label="Grupo" name="edit group objects check"/>
- <text left="172" name="allow_label3">
- Entrada do Objeto:
+ <text name="allow_label3">
+ Entrada do objeto:
</text>
<check_box label="Residentes" name="all object entry check"/>
<check_box label="Grupo" name="group object entry check"/>
- <text left="172" name="allow_label4">
- Executar Scripts:
+ <text name="allow_label4">
+ Executar scripts:
</text>
<check_box label="Residentes" name="check other scripts"/>
<check_box label="Grupo" name="check group scripts"/>
<text name="land_options_label">
- Opções de Terra:
+ Opções de terra:
</text>
<check_box label="Salvo (sem dano)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, desabilitando combate com danos. Se não ativado, o combate com danos é habilitado."/>
<check_box label="Sem Empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. A ativação dessa opção pode ser útil para prevenir comportamentos desordeiros na sua terra."/>
<check_box label="Mostrar terreno nos resultados de busca (L$30/semana)" name="ShowDirectoryCheck" tool_tip="Permitir que as pessoas vejam este terreno nos resultados de busca"/>
<combo_box left="265" name="land category with adult" width="155">
- <combo_box.item label="Qualquer Categoria" name="item0"/>
+ <combo_box.item label="Qualquer categoria" name="item0"/>
<combo_box.item label="Locação Linden" name="item1"/>
- <combo_box.item label="Adult" name="item2"/>
- <combo_box.item label="Artes e Cultura" name="item3"/>
+ <combo_box.item label="Adulto" name="item2"/>
+ <combo_box.item label="Artes e cultura" name="item3"/>
<combo_box.item label="Negócios" name="item4"/>
<combo_box.item label="Educacional" name="item5"/>
<combo_box.item label="Jogos" name="item6"/>
@@ -342,9 +355,9 @@ Apenas lotes maiores podem ser listados na busca.
<combo_box.item label="Outros" name="item12"/>
</combo_box>
<combo_box left="265" name="land category" width="155">
- <combo_box.item label="Qualquer Categoria" name="item0"/>
+ <combo_box.item label="Qualquer categoria" name="item0"/>
<combo_box.item label="Locação Linden" name="item1"/>
- <combo_box.item label="Artes e Cultura" name="item3"/>
+ <combo_box.item label="Artes e cultura" name="item3"/>
<combo_box.item label="Negócios" name="item4"/>
<combo_box.item label="Educacional" name="item5"/>
<combo_box.item label="Jogos" name="item6"/>
@@ -355,7 +368,7 @@ Apenas lotes maiores podem ser listados na busca.
<combo_box.item label="Compras" name="item11"/>
<combo_box.item label="Outros" name="item12"/>
</combo_box>
- <check_box label="Conteúdo Mature" name="MatureCheck" tool_tip=""/>
+ <check_box label="Conteúdo adulto" name="MatureCheck" tool_tip=""/>
<text name="Snapshot:">
Foto:
</text>
@@ -366,11 +379,11 @@ Apenas lotes maiores podem ser listados na busca.
<button label="Definir" label_selected="Definir" name="Set" tool_tip="Define o ponto de aterrissagem aonde o visitante chega. Define para o ponto em que seu avatar se encontra neste lote."/>
<button label="Limpar" label_selected="Limpar" name="Clear" tool_tip="Limpar o ponto de aterrissagem."/>
<text name="Teleport Routing: ">
- Rota de Tele-transporte:
+ Rota de Teletransporte:
</text>
- <combo_box left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os tele-transportes no seu lote." width="160">
+ <combo_box left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os teletransportes no seu lote." width="160">
<combo_box.item label="Bloqueado" name="Blocked"/>
- <combo_box.item label="Ponto de Aterrissagem" name="LandingPoint"/>
+ <combo_box.item label="Ponto de aterrissagem" name="LandingPoint"/>
<combo_box.item label="Qualquer lugar" name="Anywhere"/>
</combo_box>
</panel>
@@ -384,10 +397,7 @@ Apenas lotes maiores podem ser listados na busca.
</text>
<line_editor left="97" name="media_url"/>
<button label="Definir..." label_selected="Definir..." name="set_media_url"/>
- <text name="CurrentURL:">
- Página atual:
- </text>
- <check_box label="Esconder a URL da Mídia" left="97" name="hide_media_url" tool_tip="Ativando esta opção, a URL da mídia se ocultará para quaisquer visualizadores não autorizados a ver esta informação do lote. Notar que isto não está disponível para tipos HTML."/>
+ <check_box label="Esconder a URL da mídia" left="97" name="hide_media_url" tool_tip="Ativando esta opção, a URL da mídia se ocultará para quaisquer visualizadores não autorizados a ver esta informação do lote. Notar que isto não está disponível para tipos HTML."/>
<text name="Description:">
Descrição:
</text>
@@ -398,9 +408,7 @@ Textura:
</text>
<texture_picker label="" left="97" name="media texture" tool_tip="Clique para escolher uma imagem"/>
<text name="replace_texture_help">
- (Objetos usando esta textura, mostrarão o filme ou
-a página web depois que você clicar na seta de
-reproduzir.)
+ Objetos com esta textura vão aparecer no filme ou página da web depois de clicar em Tocar. Selecione outras texturas clicando nas miniaturas.
</text>
<check_box label="Escala automática" left="97" name="media_auto_scale" tool_tip="Marcando esta opção o conteúdo se ajustará ao lote automaticamente. A mídia pode se tornar lenta e com baixa qualidade visual mas nenhum outro ajuste de textura ou alinhamento será necessário."/>
<text left="102" name="media_size" tool_tip="Tamanho para desenhar a mídia Web, deixar 0 como padrão." width="115">
@@ -418,33 +426,38 @@ Mídia:
<check_box label="Mídia em Repetição" name="media_loop" tool_tip="Executar a mídia repetidamente. Quando a mídia terminar a execução, ela reiniciará do começo."/>
</panel>
<panel label="SOM" name="land_audio_panel">
+ <check_box label="Ocultar URL" name="hide_music_url" tool_tip="Selecionar esta opção oculta o URL de música a visitantes não autorizados aos dados do terreno."/>
<check_box label="Ativar voz" name="parcel_enable_voice_channel"/>
<check_box label="Ativar voz (definições do terreno)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+ <check_box label="Limitar bate-papo de voz a este lote" name="parcel_enable_voice_channel_local"/>
</panel>
<panel label="ACESSO" name="land_access_panel">
<panel.string name="access_estate_defined">
(Definições do terreno)
</panel.string>
+ <panel.string name="allow_public_access">
+ Acesso para público: [MATURITY]
+ </panel.string>
<panel.string name="estate_override">
Uma ou mais destas opções está definida no nível de propriedade.
</panel.string>
<text name="Limit access to this parcel to:">
- Acesso a Este Lote
+ Acesso a este lote
</text>
<check_box label="Acesso para público categoria [MATURITY]" name="public_access"/>
<text name="Only Allow">
Restringir acesso a contas confirmardas por:
</text>
- <check_box label="Dados de pagamento fornecidos [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Banir residentes não identificados."/>
- <check_box label="Idade confirmada: [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="Permitir Acesso do Grupo: [GROUP]" name="GroupCheck" tool_tip="Definir grupo na aba Geral."/>
+ <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="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">
<combo_box.item label="Qualquer um" name="Anyone"/>
<combo_box.item label="Grupo" name="Group"/>
</combo_box>
<spinner label="Preço em L$:" name="PriceSpin"/>
- <spinner label="Horas de Acesso:" name="HoursSpin"/>
+ <spinner label="Horas de acesso:" name="HoursSpin"/>
<panel name="Allowed_layout_panel">
<name_list name="AccessList" tool_tip="(Total [LISTED], máx de [MAX])"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_animation_preview.xml b/indra/newview/skins/default/xui/pt/floater_animation_preview.xml
index 020cfbc811..78bcde251a 100644
--- a/indra/newview/skins/default/xui/pt/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_animation_preview.xml
@@ -106,6 +106,9 @@ A duração máxima de animação permitida é de [MAX_LENGTH] segundos.
<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>
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
index 0d52fec23b..5fb64f64b3 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
@@ -7,26 +7,37 @@
Texturas compostas
</text>
<button label="Tombar" label_selected="Tombar" name="Dump"/>
- <texture_picker label="Cabelo" name="hair_grain"/>
- <texture_picker label="Cabelo alpha" name="hair_alpha"/>
- <texture_picker label="Maquilagem" name="head_bodypaint"/>
- <texture_picker label="Cabeça Alpha" name="head_alpha"/>
- <texture_picker label="Tatuagem na cabeça" name="head_tattoo"/>
- <texture_picker label="Olho" name="eyes_iris"/>
- <texture_picker label="Olhos Alpha" name="eyes_alpha"/>
- <texture_picker label="Pintura corporal, cintura para cima" name="upper_bodypaint"/>
- <texture_picker label="Camiseta" name="upper_undershirt"/>
- <texture_picker label="Luvas" name="upper_gloves"/>
- <texture_picker label="Camisa" name="upper_shirt"/>
- <texture_picker label="Jaqueta (cima)" name="upper_jacket"/>
- <texture_picker label="Alpha de cima" name="upper_alpha"/>
- <texture_picker label="Tatuagem parte de cima" name="upper_tattoo"/>
- <texture_picker label="Pintura corporal, cintura para baixo" name="lower_bodypaint"/>
- <texture_picker label="Roupa de baixo" name="lower_underpants"/>
- <texture_picker label="Meias" name="lower_socks"/>
- <texture_picker label="Sapatos" name="lower_shoes"/>
- <texture_picker label="Calças" name="lower_pants"/>
- <texture_picker label="Jaqueta" name="lower_jacket"/>
- <texture_picker label="Alpha inferior" name="lower_alpha"/>
- <texture_picker label="Tatuagem de baixo" name="lower_tattoo"/>
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <texture_picker label="Cabelo" name="hair-baked"/>
+ <texture_picker label="Cabelo" name="hair_grain"/>
+ <texture_picker label="Cabelo alpha" name="hair_alpha"/>
+ <texture_picker label="Cabeça" name="head-baked"/>
+ <texture_picker label="Maquilagem" name="head_bodypaint"/>
+ <texture_picker label="Cabeça Alpha" name="head_alpha"/>
+ <texture_picker label="Tatuagem na cabeça" name="head_tattoo"/>
+ <texture_picker label="Olhos" name="eyes-baked"/>
+ <texture_picker label="Olho" name="eyes_iris"/>
+ <texture_picker label="Olhos Alpha" name="eyes_alpha"/>
+ <texture_picker label="Cintura acima" name="upper-baked"/>
+ <texture_picker label="Pintura corporal, cintura para cima" name="upper_bodypaint"/>
+ <texture_picker label="Camiseta" name="upper_undershirt"/>
+ <texture_picker label="Luvas" name="upper_gloves"/>
+ <texture_picker label="Camisa" name="upper_shirt"/>
+ <texture_picker label="Jaqueta (cima)" name="upper_jacket"/>
+ <texture_picker label="Alpha de cima" name="upper_alpha"/>
+ <texture_picker label="Tatuagem parte de cima" name="upper_tattoo"/>
+ <texture_picker label="Cintura para baixo" name="lower-baked"/>
+ <texture_picker label="Pintura corporal, cintura para baixo" name="lower_bodypaint"/>
+ <texture_picker label="Roupa de baixo" name="lower_underpants"/>
+ <texture_picker label="Meias" name="lower_socks"/>
+ <texture_picker label="Sapatos" name="lower_shoes"/>
+ <texture_picker label="Calças" name="lower_pants"/>
+ <texture_picker label="Jaqueta" name="lower_jacket"/>
+ <texture_picker label="Alpha inferior" name="lower_alpha"/>
+ <texture_picker label="Tatuagem de baixo" name="lower_tattoo"/>
+ <texture_picker label="Saia" name="skirt-baked"/>
+ <texture_picker label="Saia" name="skirt"/>
+ </panel>
+ </scroll_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
index 9f34111d8a..8823d04b62 100644
--- a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
@@ -7,20 +7,20 @@
Definindo permissões em [NAME]
</floater.string>
<floater.string name="start_text">
- Iniciando solicitação de mudança de permissão...
+ Solicitando mudança de permissão...
</floater.string>
<floater.string name="done_text">
Solicitação de mudança de permissão concluída.
</floater.string>
<check_box label="Animação" name="check_animation"/>
<icon name="icon_animation" tool_tip="Animação"/>
- <check_box label="Partes do Corpo" name="check_bodypart"/>
+ <check_box label="Partes do corpo" name="check_bodypart"/>
<icon name="icon_bodypart" tool_tip="Partes do corpo"/>
<check_box label="Roupas" name="check_clothing"/>
<icon name="icon_clothing" tool_tip="Vestuário"/>
<check_box label="Gestos" name="check_gesture"/>
<icon name="icon_gesture" tool_tip="Gestos"/>
- <check_box label="Notecards" name="check_notecard"/>
+ <check_box label="Anotações" name="check_notecard"/>
<icon name="icon_notecard" tool_tip="Anotações"/>
<check_box label="Objetos" name="check_object"/>
<icon name="icon_object" tool_tip="Objects"/>
@@ -30,7 +30,7 @@
<icon name="icon_sound" tool_tip="Sons"/>
<check_box label="Texturas" name="check_texture"/>
<icon name="icon_texture" tool_tip="Texturas"/>
- <button label="√ Tudo" label_selected="Todas" name="check_all"/>
+ <button label="Tudo" label_selected="Todas" name="check_all"/>
<button label="Limpar" label_selected="Nenhuma" name="check_none"/>
<text name="newperms">
Novas autorizações de conteúdo
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
index b3cce2d78f..a737212b50 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
@@ -37,7 +37,7 @@
Calculando...
</text>
<text name="buy_action">
- [NAME] L$ [PRICE]
+ [ACTION]
</text>
<text name="total_label">
Saldo resultante:
@@ -46,7 +46,7 @@
L$ [AMT]
</text>
<text name="currency_links">
- [http://www.secondlife.com/ payment method] | [http://www.secondlife.com/ currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate]
+ [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate]
</text>
<text name="exchange_rate_note">
Digite o valor novamente para ver o câmbio atual.
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_land.xml b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
index f0e5808df3..73b483acf2 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
@@ -1,5 +1,132 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="buy land" title="COMPRAR TERRENO">
+ <floater.string name="can_resell">
+ Pode ser revendida.
+ </floater.string>
+ <floater.string name="can_not_resell">
+ Não pode ser revendida.
+ </floater.string>
+ <floater.string name="can_change">
+ Pode ser unida ou subdivida.
+ </floater.string>
+ <floater.string name="can_not_change">
+ Não pode ser unida ou subdividida.
+ </floater.string>
+ <floater.string name="cant_buy_for_group">
+ Você não tem permissão para comprar terra para seu grupo ativo.
+ </floater.string>
+ <floater.string name="no_land_selected">
+ Nenhuma terra selecionada.
+ </floater.string>
+ <floater.string name="multiple_parcels_selected">
+ Múltiplos e diferentes lotes selecionados. Tente selecionar uma área menor.
+ </floater.string>
+ <floater.string name="no_permission">
+ Você não tem permissão para comprar uma terra para seu grupo ativo.
+ </floater.string>
+ <floater.string name="parcel_not_for_sale">
+ O lote selecionado não está a venda.
+ </floater.string>
+ <floater.string name="group_already_owns">
+ O grupo já possui o lote.
+ </floater.string>
+ <floater.string name="you_already_own">
+ Você já possui o lote.
+ </floater.string>
+ <floater.string name="set_to_sell_to_other">
+ O lote selecionado está configurado para ser vendido para outro grupo.
+ </floater.string>
+ <floater.string name="no_public_land">
+ A área selecionada não tem terras públicas.
+ </floater.string>
+ <floater.string name="not_owned_by_you">
+ Terrenos de outros residentes foram selecionados.
+Tente selecionar uma área menor.
+ </floater.string>
+ <floater.string name="processing">
+ Processando sua compra...
+
+(Isso pode levar um minuto.)
+ </floater.string>
+ <floater.string name="fetching_error">
+ Houve um erro ao buscar informações sobre compra de terras.
+ </floater.string>
+ <floater.string name="buying_will">
+ Comprar esta terra irá:
+ </floater.string>
+ <floater.string name="buying_for_group">
+ Ao comprar terra para o grupo:
+ </floater.string>
+ <floater.string name="cannot_buy_now">
+ Não foi possível comprar agora:
+ </floater.string>
+ <floater.string name="not_for_sale">
+ Não disponível para venda:
+ </floater.string>
+ <floater.string name="none_needed">
+ nada necessário
+ </floater.string>
+ <floater.string name="must_upgrade">
+ Sua conta deve ser evoluída para adquirir um lote.
+ </floater.string>
+ <floater.string name="cant_own_land">
+ Sua conta pode possuir uma terra.
+ </floater.string>
+ <floater.string name="land_holdings">
+ Você tem [BUYER] m².
+ </floater.string>
+ <floater.string name="pay_to_for_land">
+ Pagar L$ [AMOUNT] para [SELLER] por esta terra
+ </floater.string>
+ <floater.string name="buy_for_US">
+ Compre L$ [AMOUNT] por cerca de [LOCAL_AMOUNT],
+ </floater.string>
+ <floater.string name="parcel_meters">
+ Este lote tem [AMOUNT] m²
+ </floater.string>
+ <floater.string name="premium_land">
+ Esse é um terreno premium e custa o equivalente a [AMOUNT] m².
+ </floater.string>
+ <floater.string name="discounted_land">
+ Esse é um terreno com desconto, e custa o equivalente a [AMOUNT] m².
+ </floater.string>
+ <floater.string name="meters_supports_object">
+ [AMOUNT] m²
+suporta [AMOUNT2] objetos
+ </floater.string>
+ <floater.string name="sold_with_objects">
+ vendido com objetos
+ </floater.string>
+ <floater.string name="sold_without_objects">
+ objetos não incluídos
+ </floater.string>
+ <floater.string name="info_price_string">
+ L$ [PRICE]
+(L$ [PRICE_PER_SQM]/m²)
+[SOLD_WITH_OBJECTS]
+ </floater.string>
+ <floater.string name="insufficient_land_credits">
+ O grupo [GROUP] precisará de fundos suficientes de terras
+contribuídas para cobrir este lote antes da aquisição se completar.
+ </floater.string>
+ <floater.string name="have_enough_lindens">
+ Você tem L$ [AMOUNT], suficiente para comprar este lote.
+ </floater.string>
+ <floater.string name="not_enough_lindens">
+ Você tem somente L$ [AMOUNT], e precisa de mais L$ [AMOUNT2].
+ </floater.string>
+ <floater.string name="balance_left">
+ Após a compra, restará L$ [AMOUNT].
+ </floater.string>
+ <floater.string name="balance_needed">
+ Você precisa comprar pelo menos L$ [AMOUNT] para ter recursos para este lote.
+ </floater.string>
+ <floater.string name="no_parcel_selected">
+ (nenhum lote selecionado)
+ </floater.string>
+ <floater.string name="icon_PG" value="Parcel_PG_Dark"/>
+ <floater.string name="icon_M" value="Parcel_M_Dark"/>
+ <floater.string name="icon_R" value="Parcel_R_Dark"/>
<text name="region_name_label">
Região:
</text>
@@ -106,130 +233,4 @@ Este lote mede 512 m².
<check_box label="Subtrair [AMOUNT] m² da minha contribuição." name="remove_contribution"/>
<button label="Adquirir" name="buy_btn"/>
<button label="Cancelar" name="cancel_btn"/>
- <string name="can_resell">
- Pode ser revendida.
- </string>
- <string name="can_not_resell">
- Não pode ser revendida.
- </string>
- <string name="can_change">
- Pode ser unida ou subdivida.
- </string>
- <string name="can_not_change">
- Não pode ser unida ou subdividida.
- </string>
- <string name="cant_buy_for_group">
- Você não tem permissão para comprar terra para seu grupo ativo.
- </string>
- <string name="no_land_selected">
- Nenhuma terra selecionada.
- </string>
- <string name="multiple_parcels_selected">
- Múltiplos e diferentes lotes selecionados. Tente selecionar uma área menor.
- </string>
- <string name="no_permission">
- Você não tem permissão para comprar uma terra para seu grupo ativo.
- </string>
- <string name="parcel_not_for_sale">
- O lote selecionado não está a venda.
- </string>
- <string name="group_already_owns">
- O grupo já possui o lote.
- </string>
- <string name="you_already_own">
- Você já possui o lote.
- </string>
- <string name="set_to_sell_to_other">
- O lote selecionado está configurado para ser vendido para outro grupo.
- </string>
- <string name="no_public_land">
- A área selecionada não tem terras públicas.
- </string>
- <string name="not_owned_by_you">
- Está selecionada uma terra pertencente a outro usuário. Tente selecionar uma área menor.
- </string>
- <string name="processing">
- Processando sua compra...
-
-(Isso pode levar um minuto.)
- </string>
- <string name="fetching_error">
- Houve um erro ao buscar informações sobre compra de terras.
- </string>
- <string name="buying_will">
- Comprar esta terra irá:
- </string>
- <string name="buying_for_group">
- Ao comprar terra para o grupo:
- </string>
- <string name="cannot_buy_now">
- Não foi possível comprar agora:
- </string>
- <string name="not_for_sale">
- Não disponível para venda:
- </string>
- <string name="none_needed">
- nada necessário
- </string>
- <string name="must_upgrade">
- Sua conta deve ser evoluída para adquirir um lote.
- </string>
- <string name="cant_own_land">
- Sua conta pode possuir uma terra.
- </string>
- <string name="land_holdings">
- Você tem [BUYER] m².
- </string>
- <string name="pay_to_for_land">
- Pagar L$ [AMOUNT] para [SELLER] por esta terra
- </string>
- <string name="buy_for_US">
- Compre L$ [AMOUNT] por cerca de [LOCAL_AMOUNT],
- </string>
- <string name="parcel_meters">
- Este lote tem [AMOUNT] m²
- </string>
- <string name="premium_land">
- Esse é um terreno premium e custa o equivalente a [AMOUNT] m².
- </string>
- <string name="discounted_land">
- Esse é um terreno com desconto, e custa o equivalente a [AMOUNT] m².
- </string>
- <string name="meters_supports_object">
- [AMOUNT] m²
-suporta [AMOUNT2] objetos
- </string>
- <string name="sold_with_objects">
- vendido com objetos
- </string>
- <string name="sold_without_objects">
- objetos não incluídos
- </string>
- <string name="info_price_string">
- L$ [PRICE]
-(L$ [PRICE_PER_SQM]/m²)
-[SOLD_WITH_OBJECTS]
- </string>
- <string name="insufficient_land_credits">
- O grupo [GROUP] precisará de fundos suficientes de terras
-contribuídas para cobrir este lote antes da aquisição se completar.
- </string>
- <string name="have_enough_lindens">
- Você tem L$ [AMOUNT], suficiente para comprar este lote.
- </string>
- <string name="not_enough_lindens">
- Você tem somente L$ [AMOUNT], e precisa de mais L$ [AMOUNT2].
- </string>
- <string name="balance_left">
- Após a compra, restará L$ [AMOUNT].
- </string>
- <string name="balance_needed">
- Você precisa comprar pelo menos L$ [AMOUNT] para ter recursos para este lote.
- </string>
- <string name="no_parcel_selected">
- (nenhum lote selecionado)
- </string>
- <string name="buy_currency">
- Comprar L$ [LINDENS] por aproxim. US$ [USD]
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_camera.xml b/indra/newview/skins/default/xui/pt/floater_camera.xml
index 5114b19336..7989ce66bc 100644
--- a/indra/newview/skins/default/xui/pt/floater_camera.xml
+++ b/indra/newview/skins/default/xui/pt/floater_camera.xml
@@ -9,6 +9,18 @@
<floater.string name="move_tooltip">
Mover a Câmera para Cima e para Baixo, para a Esquerda e para a Direita
</floater.string>
+ <floater.string name="orbit_mode_title">
+ Órbita
+ </floater.string>
+ <floater.string name="pan_mode_title">
+ Pan
+ </floater.string>
+ <floater.string name="avatar_view_mode_title">
+ Predefinições
+ </floater.string>
+ <floater.string name="free_mode_title">
+ Visualizar objeto
+ </floater.string>
<panel name="controls">
<joystick_track name="cam_track_stick" tool_tip="Move a câmera para cima e para baixo, direita e esquerda"/>
<panel name="zoom" tool_tip="Aproximar a Câmera in direção ao Foco">
@@ -25,7 +37,7 @@
<panel name="buttons">
<button label="" name="orbit_btn" tool_tip="Câmera orbital"/>
<button label="" name="pan_btn" tool_tip="Câmera Pan"/>
- <button label="" name="avatarview_btn" tool_tip="ver como o avatar"/>
+ <button label="" name="avatarview_btn" tool_tip="Predefinições"/>
<button label="" name="freecamera_btn" tool_tip="Visualizar objeto"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_color_picker.xml b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
index d60a815f30..4ea014335f 100644
--- a/indra/newview/skins/default/xui/pt/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
@@ -21,7 +21,7 @@
<check_box label="inscrever-se agora" name="apply_immediate"/>
<button left_delta="150" name="color_pipette"/>
<button label="Cancelar" label_selected="Cancelar" left_delta="55" name="cancel_btn"/>
- <button label="Ok" label_selected="Ok" name="select_btn"/>
+ <button label="OK" label_selected="OK" name="select_btn"/>
<text name="Current color:">
Cor atual:
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml
index 447ca8c543..2a367cb24a 100644
--- a/indra/newview/skins/default/xui/pt/floater_customize.xml
+++ b/indra/newview/skins/default/xui/pt/floater_customize.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater customize" title="APARÊNCIA" width="546">
<tab_container name="customize tab container" tab_min_width="115" width="544">
- <placeholder label="Partes de corpo" name="body_parts_placeholder"/>
+ <text label="Corpo" name="body_parts_placeholder">
+ Partes do corpo
+ </text>
<panel label="Forma" name="Shape">
<button label="Reverter" label_selected="Reverter" name="Revert"/>
<button label="Corpo" label_selected="Corpo" name="Body"/>
@@ -14,8 +16,8 @@
<button label="Tórax" label_selected="Tórax" name="Torso"/>
<button label="Pernas" label_selected="Pernas" name="Legs"/>
<radio_group name="sex radio">
- <radio_item label="Feminino" name="radio"/>
- <radio_item label="Masculino" name="radio2"/>
+ <radio_item label="Feminino" name="radio" value="0"/>
+ <radio_item label="Masculino" name="radio2" value="1"/>
</radio_group>
<text name="title">
[DESC]
@@ -33,8 +35,7 @@
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Coloque uma nova forma arrastando uma do seu inventário para seu avatar.
-Alternativamente, você pode criar uma nova de um esboço e usá-la.
+ Para obter um físico novo, arraste um do inventário para o seu avatar. Ou crie um novo.
</text>
<text name="no modify instructions">
Você não tem permissão para modificar esta vestimenta.
@@ -42,15 +43,15 @@ Alternativamente, você pode criar uma nova de um esboço e usá-la.
<text name="Item Action Label">
Forma:
</text>
- <button label="Criar Nova Forma" label_selected="Criar Nova Forma" name="Create New"/>
+ <button label="Nova" label_selected="Nova" name="Create New"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
</panel>
<panel label="Pele" name="Skin">
- <button label="Cor de Pele" label_selected="Cor de Pele" name="Skin Color" width="115"/>
- <button label="Detalhes Faciais" label_selected="Detalhes Faciais" name="Face Detail" width="115"/>
- <button label="Maquiagem" label_selected="Maquiagem" name="Makeup" width="115"/>
- <button label="Detalhes do Corpo" label_selected="Detalhes do Corpo" name="Body Detail" width="115"/>
+ <button label="Cor de pele" label_selected="Cor de pele" name="Skin Color" width="115"/>
+ <button label="Detalhes faciais" label_selected="Detalhes faciais" name="Face Detail" width="115"/>
+ <button label="Maquilagem" label_selected="Maquilagem" name="Makeup" width="115"/>
+ <button label="Detalhes do corpo" label_selected="Detalhes do corpo" name="Body Detail" width="115"/>
<text name="title">
[DESC]
</text>
@@ -67,9 +68,7 @@ Alternativamente, você pode criar uma nova de um esboço e usá-la.
Localizada em [PATH]
</text>
<text name="not worn instructions">
- Coloque uma nova pele arrastando uma de seu inventário para seu avatar.
-Alternativamente, você pode criar uma nova forma a partir de um esboço
-e usá-la.
+ Para obter uma pele nova, arraste uma do inventário para o seu avatar. Ou crie uma pele nova.
</text>
<text name="no modify instructions">
Você não tem permissão para modificar esta vestimenta.
@@ -80,7 +79,7 @@ e usá-la.
<texture_picker label="Tattoo: cabeça" name="Head Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
<texture_picker label="Tattoo: superior" name="Upper Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
<texture_picker label="Tattoo: inferior" name="Lower Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
- <button label="Criar Nova Pele" label_selected="Criar Nova Pele" name="Create New"/>
+ <button label="Novo" label_selected="Novo" name="Create New"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
<button label="Reverter" label_selected="Reverter" name="Revert"/>
@@ -106,9 +105,7 @@ e usá-la.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Ponha um novo cabelo em seu avatar arrastando um do seu inventário.
-Alternativamente, você pode criar um novo modelo a partir de um esboço
-e usá-lo.
+ Para obter um cabelo novo, arraste um tipo de cabelo do inventário para o seu avatar. Ou crie um cabelo novo.
</text>
<text name="no modify instructions">
Você não ter permissão para modificar essa vestimenta.
@@ -117,7 +114,7 @@ e usá-lo.
Cabelo:
</text>
<texture_picker label="Texture" name="Texture" tool_tip="Clique para escolher uma imagem"/>
- <button label="Criar Novo Cabelo" label_selected="Criar Novo Cabelo" name="Create New"/>
+ <button label="Criar novo cabelo" label_selected="Criar novo cabelo" name="Create New"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
<button label="Reverter" label_selected="Reverter" name="Revert"/>
@@ -139,8 +136,7 @@ e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para colocar novos olhos, arraste um do seu inventário para seu avatar.
-Alternativamente, você pode criar um novo modelo de um esboço e usá-lo.
+ Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos.
</text>
<text name="no modify instructions">
Você não tem permissão para alterar esta vestimenta.
@@ -149,17 +145,19 @@ Alternativamente, você pode criar um novo modelo de um esboço e usá-lo.
Olhos:
</text>
<texture_picker label="Ãris" name="Iris" tool_tip="Clique para escolher uma imagem"/>
- <button label="Criar Novos Olhos" label_selected="Criar Novos Olhos" name="Create New"/>
+ <button label="Criar novos olhos" label_selected="Criar novos olhos" name="Create New"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
<button label="Reverter" label_selected="Reverter" name="Revert"/>
</panel>
- <placeholder label="Roupas" name="clothes_placeholder"/>
+ <text label="Roupas" name="clothes_placeholder">
+ Roupa
+ </text>
<panel label="Camisa" name="Shirt">
<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Nova Camisa" label_selected="Criar Nova Camisa" name="Create New"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
+ <button label="Criar nova camisa" label_selected="Criar nova camisa" name="Create New"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
<button label="Reverter" label_selected="Reverter" name="Revert"/>
@@ -179,9 +177,7 @@ Alternativamente, você pode criar um novo modelo de um esboço e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para por uma nova camisa em seu avatar, arraste uma do seu inventário para
-seu avatar. Alternativamente, você pode criar um novo modelo a partir de
-um esboço e usá-lo.
+ Para obter uma camisa nova, arraste uma do inventário para o seu avatar. Ou crie uma camisa nova.
</text>
<text name="no modify instructions">
Você não ter permissão para modificar esta vestimenta.
@@ -193,8 +189,8 @@ um esboço e usá-lo.
<panel label="Calças" name="Pants">
<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Novas Calças" label_selected="Criar Novas Calças" name="Create New"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
+ <button label="Criar novas calças" label_selected="Criar novas calças" name="Create New"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
<button label="Reverter" label_selected="Reverter" name="Revert"/>
@@ -214,9 +210,7 @@ um esboço e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para por uma nova calça em seu avatar, basta arrastar uma outra do seu
-inventário. Alternativamente, você pode criar um novo modelo a partir
-de um esboço e usá-lo.
+ Para obter calças novas, arraste uma do inventário para o seu avatar. Ou crie calças novas.
</text>
<text name="no modify instructions">
Você não tem permissão para modificar esta vestimenta.
@@ -242,10 +236,9 @@ de um esboço e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para por novos sapatos em seu avatar, basta arrastar um novo do seu
-inventário. Alternativamente, você pode criar um novo modelo a partir
-de um esboço e usá-lo.
+ Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos.
</text>
+ <button label="Criar novos sapatos" label_selected="Criar novos sapatos" name="Create New" width="166"/>
<text name="no modify instructions">
Você não tem permissão para modificar esta vestimenta.
</text>
@@ -254,7 +247,6 @@ de um esboço e usá-lo.
</text>
<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Novos Sapatos" label_selected="Criar Novos Sapatos" name="Create New" width="166"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
@@ -277,10 +269,9 @@ de um esboço e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para por novas meias em seu avatar, basta arrastar uma nova do seu
-inventário. Alternativamente, você pode criar novas meias a partir de
-um esboço e usá-las.
+ Para obter meias novas, arraste um par do inventário para o seu avatar. Ou crie meias novas.
</text>
+ <button label="Criar novas meias" label_selected="Criar novas meias" name="Create New"/>
<text name="no modify instructions">
Você não tem permissão para modificar essa vestimenta.
</text>
@@ -289,7 +280,6 @@ um esboço e usá-las.
</text>
<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Novas Meias" label_selected="Criar Novas Meias" name="Create New"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
@@ -312,20 +302,18 @@ um esboço e usá-las.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para por uma nova jaqueta em seu avatar, basta arrastar um novo modelo
-do seu inventário. Alternativamente, você pode criar um novo modelo a
-partir de um esboço e usá-lo.
+ Para por uma jaqueta nova, arraste uma do inventário para o seu avatar. Ou crie uma jaqueta nova.
</text>
+ <button label="Criar nova jaqueta" label_selected="Criar nova jaqueta" name="Create New"/>
<text name="no modify instructions">
Você não tem permissão para modificar esta vestimenta.
</text>
<text name="Item Action Label">
Jaqueta:
</text>
- <texture_picker label="Tecido Superior" name="Upper Fabric" tool_tip="Clique para escolher uma imagem." width="84"/>
+ <texture_picker label="Tecido superior" name="Upper Fabric" tool_tip="Clique para escolher uma imagem." width="84"/>
<texture_picker label="Tecido Inferior" name="Lower Fabric" tool_tip="Clique para escolher uma imagem." width="84"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Nova Jaqueta" label_selected="Criar Nova Jaqueta" name="Create New"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
@@ -348,10 +336,9 @@ partir de um esboço e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para colocar uma nova jaqueta em seu avatar, basta arrastar um novo modelo
-do seu inventário. Alternativamente, você pode criar uma novo modelo a
-partir de um esboço e usá-lo.
+ Para obter luvas novas, arraste um par do inventário para o seu avatar. Ou crie luvas novas.
</text>
+ <button label="Criar novas luvas" label_selected="Criar novas luvas" name="Create New"/>
<text name="no modify instructions">
Você não tem permissão para modificar essa vestimenta.
</text>
@@ -360,7 +347,6 @@ partir de um esboço e usá-lo.
</text>
<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Novas Luvas" label_selected="Criar Novas Luvas" name="Create New"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
@@ -383,10 +369,9 @@ partir de um esboço e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para por uma nova Camiseta em seu avatar, basta arrastar um novo modelo
-de seu inventário. Alternativamente, você pode criar um novo modelo a
-partir de um esboço e usá-lo.
+ Para obter uma camiseta nova, arraste uma do inventário para o seu avatar. Ou crie uma camiseta nova.
</text>
+ <button label="Criar nova camiseta" label_selected="Criar nova camiseta" name="Create New"/>
<text name="no modify instructions">
Você não ter permissão para modificar essa vestimenta.
</text>
@@ -395,7 +380,6 @@ partir de um esboço e usá-lo.
</text>
<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Nova Camiseta" label_selected="Criar Nova Camiseta" name="Create New"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
@@ -418,19 +402,17 @@ partir de um esboço e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para por novas roupas de baixo em seu avatar, basta arrastar um novo
-modelo do seu inventário. Alternativamente, você pode criar um novo
-modelo a partir de um esboço e usá-lo.
+ Para obter roupa de baixo nova, arraste um modelo do inventário para o seu avatar. Ou crie uma roupa de baixo nova.
</text>
+ <button label="Criar novas" label_selected="Criar novas" name="Create New" width="180"/>
<text name="no modify instructions">
Você não tem permissão para modificar essa vestimenta.
</text>
<text name="Item Action Label">
- Roupas de Baixo:
+ Roupas de baixo:
</text>
<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Novas Roupas de Baixo" label_selected="Criar Novas Roupas de Baixo" name="Create New" width="180"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
@@ -453,10 +435,9 @@ modelo a partir de um esboço e usá-lo.
Localizado em [PATH]
</text>
<text name="not worn instructions">
- Para por uma nova saia em seu avatar, basta arrastar um novo modelo
-do seu inventário. Alternativamente, você pode criar um novo modelo a
-partir de um esboço e usá-lo.
+ Para obter um saia nova, arraste uma saia do inventário para o seu avatar. Ou crie uma saia nova.
</text>
+ <button label="Criar nova saia" label_selected="Criar nova saia" name="Create New"/>
<text name="no modify instructions">
Você não tem permissão para modificar esta vestimenta.
</text>
@@ -465,13 +446,12 @@ partir de um esboço e usá-lo.
</text>
<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
- <button label="Criar Nova Saia" label_selected="Criar Nova Saia" name="Create New"/>
<button label="Remover" label_selected="Remover" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
<button label="Reverter" label_selected="Reverter" name="Revert"/>
</panel>
- <panel label="Alpha" name="Alpha">
+ <panel label="Tatuagem" name="Tattoo">
<text name="title">
[DESC]:
</text>
@@ -488,27 +468,24 @@ partir de um esboço e usá-lo.
Localização: [PATH]
</text>
<text name="not worn instructions">
- Para por uma máscara alpha nova, arraste a máscara do inventário para o seu avatar.
-Ou crie uma máscara nova e coloque-a.
+ Para por uma tatuagem nova, arraste uma tatuagem do inventário para o seu avatar. Ou crie uma tatuagem nova.
</text>
+ <button label="Criar tatuagem" label_selected="Criar tatuagem" name="Create New"/>
<text name="no modify instructions">
Você não está autorizado a modificar este acessório.
</text>
<text name="Item Action Label">
- Alpha:
+ Tatuagem:
</text>
- <texture_picker label="Alpha inferior" name="Lower Alpha" tool_tip="Selecionar imagem"/>
- <texture_picker label="Alpha de cima" name="Upper Alpha" tool_tip="Selecionar imagem"/>
- <texture_picker label="Cabeça Alpha" name="Head Alpha" tool_tip="Selecionar imagem"/>
- <texture_picker label="Olhos Alpha" name="Eye Alpha" tool_tip="Selecionar imagem"/>
- <texture_picker label="Cabelo alpha" name="Hair Alpha" tool_tip="Selecionar imagem"/>
- <button label="Criar Alpha novo" label_selected="Criar Alpha novo" name="Create New"/>
+ <texture_picker label="Tatuagem na cabeça" name="Head Tattoo" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Tatuagem parte de cima" name="Upper Tattoo" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Tatuagem de baixo" name="Lower Tattoo" tool_tip="Selecionar imagem"/>
<button label="Tirar" label_selected="Tirar" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
<button label="Reverter" label_selected="Reverter" name="Revert"/>
</panel>
- <panel label="Tatuagem" name="Tattoo">
+ <panel label="Alpha" name="Alpha">
<text name="title">
[DESC]:
</text>
@@ -525,19 +502,20 @@ Ou crie uma máscara nova e coloque-a.
Localização: [PATH]
</text>
<text name="not worn instructions">
- Para por uma tatuagem nova, arraste uma tatuagem do inventário para o seu avatar.
-Ou crie uma tatuagem nova.
+ Para por uma máscara alpha nova, arraste a máscara do inventário para o seu avatar. Ou crie uma máscara nova.
</text>
+ <button label="Criar Alpha novo" label_selected="Criar Alpha novo" name="Create New"/>
<text name="no modify instructions">
Você não está autorizado a modificar este acessório.
</text>
<text name="Item Action Label">
- Tatuagem:
+ Alpha:
</text>
- <texture_picker label="Tatuagem na cabeça" name="Head Tattoo" tool_tip="Selecionar imagem"/>
- <texture_picker label="Tatuagem parte de cima" name="Upper Tattoo" tool_tip="Selecionar imagem"/>
- <texture_picker label="Tatuagem de baixo" name="Lower Tattoo" tool_tip="Selecionar imagem"/>
- <button label="Criar tatuagem" label_selected="Criar tatuagem" name="Create New"/>
+ <texture_picker label="Alpha inferior" name="Lower Alpha" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Alpha de cima" name="Upper Alpha" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Cabeça Alpha" name="Head Alpha" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Olhos Alpha" name="Eye Alpha" tool_tip="Selecionar imagem"/>
+ <texture_picker label="Cabelo alpha" name="Hair Alpha" tool_tip="Selecionar imagem"/>
<button label="Tirar" label_selected="Tirar" name="Take Off"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
@@ -545,6 +523,7 @@ Ou crie uma tatuagem nova.
</panel>
</tab_container>
<scroll_container left="249" name="panel_container"/>
+ <button label="Dados do script" label_selected="Dados do script" name="script_info" tool_tip="Mostrar scripts anexados ao seu avatar"/>
<button label="Criar look" label_selected="Criar look" name="make_outfit_btn"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
<button label="OK" label_selected="OK" name="Ok"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_event.xml b/indra/newview/skins/default/xui/pt/floater_event.xml
new file mode 100644
index 0000000000..1cd4dcbda4
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_event.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Evento" name="Event" title="DETALHES DO EVENTO">
+ <floater.string name="none">
+ nenhum
+ </floater.string>
+ <floater.string name="notify">
+ Avisar
+ </floater.string>
+ <floater.string name="dont_notify">
+ Não avisar
+ </floater.string>
+ <floater.string name="moderate">
+ Moderado
+ </floater.string>
+ <floater.string name="adult">
+ Adulto
+ </floater.string>
+ <floater.string name="general">
+ Público geral
+ </floater.string>
+ <floater.string name="unknown">
+ Desconhecido
+ </floater.string>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <text name="event_name">
+ Evento sem nome... Terror! Terror Aterrorizante.
+ </text>
+ <text name="event_category">
+ (não categorizado)
+ </text>
+ <text name="event_runby_label">
+ Organização:
+ </text>
+ <text initial_value="(pesquisando)" name="event_runby"/>
+ <text name="event_date_label">
+ Data:
+ </text>
+ <text name="event_date">
+ 10/10/2010
+ </text>
+ <text name="event_duration_label">
+ Duração:
+ </text>
+ <text name="event_duration">
+ 1 hora
+ </text>
+ <text name="event_covercharge_label">
+ Cover:
+ </text>
+ <text name="event_cover">
+ Grátis
+ </text>
+ <text name="event_location_label">
+ Localização:
+ </text>
+ <text name="event_location" value="LoteExemplo, Nome extenso (145, 228, 26)"/>
+ <text name="rating_label" value="Classificação:"/>
+ <text name="rating_value" value="(Desconhecido)"/>
+ <expandable_text name="event_desc">
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </expandable_text>
+ </layout_panel>
+ <layout_panel name="button_panel">
+ <button name="create_event_btn" tool_tip="Criar evento"/>
+ <button name="god_delete_event_btn" tool_tip="Excluir evento"/>
+ <button label="Avise-me" name="notify_btn"/>
+ <button label="Teletransportar" name="teleport_btn"/>
+ <button label="Mapa" name="map_btn"/>
+ </layout_panel>
+ </layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_god_tools.xml b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
index 4b7b2eb34e..2e63d86281 100644
--- a/indra/newview/skins/default/xui/pt/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
@@ -2,7 +2,7 @@
<floater name="godtools floater" title="FERRAMENTAS DE DEUS">
<tab_container name="GodTools Tabs">
<panel label="Grade" name="grid">
- <button label="Desconectar todos os usuários" label_selected="Desconectar todos os usuários" name="Kick all users"/>
+ <button label="Chutar todos" label_selected="Chutar todos" name="Kick all users"/>
<button label="Limpar os cachês de visibilidade do mapa da região." label_selected="Limpar os cachês de visibilidade do mapa da região." name="Flush This Region&apos;s Map Visibility Caches"/>
</panel>
<panel label="Região" name="region">
@@ -11,7 +11,7 @@
</text>
<check_box label="Prelúdio" name="check prelude" tool_tip="Ajustar para tornar esta região um prelúdio."/>
<check_box label="Fixar Sol" name="check fixed sun" tool_tip="Fixa a posição do sol (como em Região/Estados) &gt; Terreno."/>
- <check_box label="Redefinir Home no teletransporte" name="check reset home" tool_tip="Quando um residente se teletransporta, redefine sua home para a posição de destino."/>
+ <check_box label="Redefinir Home no teletransporte" name="check reset home" tool_tip="Quando um residente sair, definir o destino com sua posição inicial."/>
<check_box label="Visível" name="check visible" tool_tip="Ajustar para fazer essa região visível para os não-deuses"/>
<check_box label="Dano" name="check damage" tool_tip="Ajustar para permitir dano nesta região"/>
<check_box label="Bloquear ratreamento do Tráfego" name="block dwell" tool_tip="Configure isto para fazer a região não computar o tráfego."/>
@@ -73,17 +73,17 @@
Destino:
</text>
<combo_box name="destination">
- <combo_box.item name="item1" label="Seleção" />
- <combo_box.item name="item2" label="Região do Agente" />
+ <combo_box.item label="Seleção" name="item1"/>
+ <combo_box.item label="Região do Agente" name="item2"/>
</combo_box>
<text name="Request:">
Requisição:
</text>
<combo_box name="request">
- <combo_box.item name="item1" label="Passos de Colisão" />
- <combo_box.item name="item2" label="Contagem de scripts, padrão opcional" />
- <combo_box.item name="item3" label="Padrão de Objetos" />
- <combo_box.item name="item4" label="rez &lt;asset_id&gt;" />
+ <combo_box.item label="Passos de Colisão" name="item1"/>
+ <combo_box.item label="Contagem de scripts, padrão opcional" name="item2"/>
+ <combo_box.item label="Padrão de Objetos" name="item3"/>
+ <combo_box.item label="rez &lt;asset_id&gt;" name="item4"/>
</combo_box>
<text name="Parameter:">
Parametro:
diff --git a/indra/newview/skins/default/xui/pt/floater_help_browser.xml b/indra/newview/skins/default/xui/pt/floater_help_browser.xml
index 281bdbd183..9cc8a0a6b2 100644
--- a/indra/newview/skins/default/xui/pt/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/pt/floater_help_browser.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_help_browser" title="NAVEGADOR DA AJUDA">
+ <floater.string name="loading_text">
+ Carregando...
+ </floater.string>
<layout_stack name="stack1">
- <layout_panel name="external_controls">
- <button label="Abrir no navegador" name="open_browser"/>
- </layout_panel>
+ <layout_panel name="external_controls"/>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_im.xml b/indra/newview/skins/default/xui/pt/floater_im.xml
index f6057c48f1..c81d0dd7ef 100644
--- a/indra/newview/skins/default/xui/pt/floater_im.xml
+++ b/indra/newview/skins/default/xui/pt/floater_im.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multi_floater name="im_floater" title="Mensagem Instantânea">
<string name="only_user_message">
- Você é o único usuário desta sessão.
+ Você é o único residente nesta sessão
</string>
<string name="offline_message">
[FIRST] [LAST] está offline.
@@ -31,7 +31,7 @@
Um moderador do grupo desabilitou seu bate-papo em texto.
</string>
<string name="add_session_event">
- Não foi possível adicionar usuários na sessão de bate-papo com [RECIPIENT].
+ Não foi possível adicionar residentes ao bate-papo com [RECIPIENT].
</string>
<string name="message_session_event">
Não foi possível enviar sua mensagem na sessão de bate- papo com [RECIPIENT].
diff --git a/indra/newview/skins/default/xui/pt/floater_im_container.xml b/indra/newview/skins/default/xui/pt/floater_im_container.xml
index a21d4a6f1e..0fbb826a96 100644
--- a/indra/newview/skins/default/xui/pt/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/pt/floater_im_container.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="Mensagens instantâneas"/>
+<multi_floater name="floater_im_box" title="CONVERSAS"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
index 79124966d1..cdebe533bd 100644
--- a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="incoming call" title="LIGAÇÃO DE DESCONHECIDO">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
<floater.string name="localchat">
Bate-papo local
</floater.string>
@@ -12,6 +15,9 @@
<floater.string name="VoiceInviteAdHoc">
entrou numa ligação de voz via conferência.
</floater.string>
+ <floater.string name="VoiceInviteGroup">
+ entrou numa ligação de bate-papo de voz com o grupo [GROUP].
+ </floater.string>
<text name="question">
Sair do [CURRENT_CHAT] e entrar neste bate-papo?
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory.xml b/indra/newview/skins/default/xui/pt/floater_inventory.xml
index 409261a136..ae3312eab0 100644
--- a/indra/newview/skins/default/xui/pt/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inventory.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="INVENTÃRIO">
+<floater name="Inventory" title="MEU INVENTÃRIO">
<floater.string name="Title">
- Inventário
+ MEU INVENTÃRIO
</floater.string>
<floater.string name="TitleFetching">
- Inventário ([ITEM_COUNT] Items) [FILTER] [FILTER]
+ MEU INVENTÃRIO (Pegando [ITEM_COUNT] items...) [FILTER]
</floater.string>
<floater.string name="TitleCompleted">
- Inventário ([ITEM_COUNT] Items) [FILTER]
+ MEU INVENTÃRIO ([ITEM_COUNT] items) [FILTER]
</floater.string>
<floater.string name="Fetched">
Obtido
diff --git a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
index 1717088eae..5ad116ac8a 100644
--- a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
@@ -7,7 +7,7 @@
Executando
</floater.string>
<floater.string name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<button label="Resetar" label_selected="Resetar" name="Reset"/>
<check_box initial_value="true" label="Correndo" name="running"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
index f9a5e08e97..73f187f0e4 100644
--- a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="LSL WIKI">
+<floater name="script ed float" title="LSL REFERENCE">
<check_box label="Seguir o Cursor" name="lock_check"/>
<combo_box label="Bloquear" left_delta="120" name="history_combo" width="70"/>
<button label="Anterior" left_delta="75" name="back_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_map.xml b/indra/newview/skins/default/xui/pt/floater_map.xml
index ff60f77c4b..3a04528228 100644
--- a/indra/newview/skins/default/xui/pt/floater_map.xml
+++ b/indra/newview/skins/default/xui/pt/floater_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
+<floater name="Map" title="Mini Mapa">
<floater.string name="mini_map_north">
N
</floater.string>
diff --git a/indra/newview/skins/default/xui/pt/floater_media_browser.xml b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
index 1cd6d5662c..7491218067 100644
--- a/indra/newview/skins/default/xui/pt/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
@@ -15,7 +15,7 @@
<button label="Ir" left_delta="505" name="go" width="35"/>
</layout_panel>
<layout_panel name="parcel_owner_controls">
- <button label="Enviar a URL atual para o terreno" name="assign"/>
+ <button label="Enviar esta página para lote" name="assign"/>
</layout_panel>
<layout_panel name="external_controls">
<button label="Abrir no meu Navegador de Web" name="open_browser" width="196"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_moveview.xml b/indra/newview/skins/default/xui/pt/floater_moveview.xml
index 7c4436537d..9c02570076 100644
--- a/indra/newview/skins/default/xui/pt/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_moveview.xml
@@ -18,10 +18,19 @@
<string name="fly_back_tooltip">
Voar para trás (flecha para baixo ou S)
</string>
+ <string name="walk_title">
+ Andar
+ </string>
+ <string name="run_title">
+ Correr
+ </string>
+ <string name="fly_title">
+ Voar
+ </string>
<panel name="panel_actions">
<button label="" label_selected="" name="turn left btn" tool_tip="Virar à esquerda (flecha ESQ ou A)"/>
<button label="" label_selected="" name="turn right btn" tool_tip="Virar à direita (flecha DIR ou D)"/>
- <button label="" label_selected="" name="move up btn" tool_tip="Voar para o alto (tecla E)"/>
+ <button label="" label_selected="" name="move up btn" tool_tip="Voar para cima (tecla E)"/>
<button label="" label_selected="" name="move down btn" tool_tip="Voar para baixo (tecla C)"/>
<joystick_turn name="forward btn" tool_tip="Andar para frente (flecha para cima ou W)"/>
<joystick_turn name="backward btn" tool_tip="Andar para trás (flecha para baixo ou S)"/>
@@ -30,6 +39,5 @@
<button label="" name="mode_walk_btn" tool_tip="Modo caminhar"/>
<button label="" name="mode_run_btn" tool_tip="Modo correr"/>
<button label="" name="mode_fly_btn" tool_tip="Modo voar"/>
- <button label="Parar de voar" name="stop_fly_btn" tool_tip="Parar de voar"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml
new file mode 100644
index 0000000000..dec8a7676a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="modal container" title="Salvar este look">
+ <button label="Salvar" label_selected="Salvar" name="Save"/>
+ <button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
+ <text name="Save item as:">
+ Veja o meu novo visual:
+ </text>
+ <line_editor name="name ed">
+ [DESC] (new)
+ </line_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_outgoing_call.xml b/indra/newview/skins/default/xui/pt/floater_outgoing_call.xml
index 2078185315..8a536b90db 100644
--- a/indra/newview/skins/default/xui/pt/floater_outgoing_call.xml
+++ b/indra/newview/skins/default/xui/pt/floater_outgoing_call.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="outgoing call" title="LIGANDO">
+ <floater.string name="lifetime">
+ 5
+ </floater.string>
<floater.string name="localchat">
Bate-papo local
</floater.string>
@@ -21,6 +24,15 @@
<text name="noanswer">
Não há resposta. Tente novamente mais tarde.
</text>
+ <text name="nearby">
+ Você saiu da ligação com [VOICE_CHANNEL_NAME]. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_other">
+ [VOICE_CHANNEL_NAME] encerrou a ligação. [RECONNECT_NEARBY]
+ </text>
+ <text name="nearby_P2P_by_agent">
+ Você encerrou a ligação. [RECONNECT_NEARBY]
+ </text>
<text name="leaving">
Saindo de [CURRENT_CHAT].
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_pay_object.xml b/indra/newview/skins/default/xui/pt/floater_pay_object.xml
index 161c7c6d4b..464afd7f18 100644
--- a/indra/newview/skins/default/xui/pt/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/pt/floater_pay_object.xml
@@ -15,7 +15,7 @@
</text>
<icon name="icon_object" tool_tip="Objects"/>
<text left="105" name="object_name_text">
- ...
+ Meu objeto maravilho, fantástico e com nome comprido e imaginativo
</text>
<button label="L$1" label_selected="L$1" left="125" name="fastpay 1" width="70"/>
<button label="L$5" label_selected="L$5" left="200" name="fastpay 5" width="70"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml
index dc29bcf6b1..2c76a72ca8 100644
--- a/indra/newview/skins/default/xui/pt/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater min_width="332" name="Preferences" title="PREFERÊNCIAS" width="628">
+<floater name="Preferences" title="PREFERÊNCIAS">
<button label="OK" label_selected="OK" name="OK"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
- <tab_container name="pref core" tab_width="128" width="628">
- <panel label="Público geral" name="general"/>
+ <tab_container name="pref core">
+ <panel label="Geral" name="general"/>
<panel label="Vídeo" name="display"/>
<panel label="Privacidade" name="im"/>
- <panel label="Som" name="audio"/>
+ <panel label="Som e mídia" name="audio"/>
<panel label="Bate-papo" name="chat"/>
<panel label="Notificações" name="msgs"/>
<panel label="Configurações" name="input"/>
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 c7d3affd73..b66159354f 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="Executar in World" label_selected="Parar" left="20" name="Anim play btn" tool_tip="Tocar essa animação de forma que outros possam ver" width="131"/>
+ <button label="Tocar inworld" label_selected="Parar" left="20" 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="125"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml
index af4dceaa89..48f27f1968 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml
@@ -24,6 +24,9 @@
<floater.string name="Title">
Gesto: [NAME]
</floater.string>
+ <text name="name_text">
+ Nome:
+ </text>
<text name="desc_label">
Descrição:
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
index 6194bfffd6..e648a7d873 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="NOTA:">
+<floater name="preview notecard" title="Anotação:">
<floater.string name="no_object">
- Não foi possível encontrar o objeto que contém esta nota.
+ O objeto com esta anotação não foi encontrado.
</floater.string>
<floater.string name="not_allowed">
Você não está autorizado a ler esta nota.
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
index 8691542d95..7c5a1538f2 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
@@ -6,6 +6,6 @@
<text name="desc txt">
Descrição:
</text>
- <button label="Executar in-World" label_selected="Executar in-World" left_delta="-132" name="Sound play btn" tool_tip="Tocar som para todos ouvirem"/>
+ <button label="Tocar inworld" label_selected="Tocar inworld" left_delta="-132" name="Sound play btn" tool_tip="Tocar som para todos ouvirem"/>
<button label="Executar Localmente" label_selected="Executar Localmente" left="152" name="Sound audition btn" tool_tip="Tocar som de forma que apenas você possa ouvir" width="135"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_texture.xml b/indra/newview/skins/default/xui/pt/floater_preview_texture.xml
index 066cf05163..6f39635240 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_texture.xml
@@ -12,6 +12,9 @@
<text name="dimensions">
[WIDTH]px x [HEIGHT]px
</text>
+ <text name="aspect_ratio">
+ Visualizar relação de aspecto
+ </text>
<combo_box name="combo_aspect_ratio" tool_tip="Visualizar com proporção de aspecto fixa">
<combo_item name="Unconstrained">
Sem limites
@@ -38,7 +41,7 @@
2:1
</combo_item>
</combo_box>
- <button label="OK" name="keep"/>
- <button label="Cancelar" name="discard"/>
+ <button label="OK" name="Keep"/>
+ <button label="Descartar" name="Discard"/>
<button label="Salvar como" name="save_tex_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_publish_classified.xml b/indra/newview/skins/default/xui/pt/floater_publish_classified.xml
new file mode 100644
index 0000000000..988f8f2ce1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_publish_classified.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="publish_classified" title="Publicando anúncio">
+ <text name="explanation_text">
+ Seu anúncio será publicado por uma semana a partir da data de publicação.
+
+Lembre-se, o pagamento do anúncio não é reembolsável
+ </text>
+ <spinner label="Preço do anúncio:" name="price_for_listing" tool_tip="Preço do anúncio." value="50"/>
+ <text name="l$_text" value="L$"/>
+ <text name="more_info_text">
+ Mais informações (link para ajuda com anúncios)
+ </text>
+ <button label="Publicar" name="publish_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
index 7988056a3b..08413a9231 100644
--- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
@@ -41,8 +41,8 @@
<combo_box name="category_combo" tool_tip="Categoria -- Selecione a categoria que melhor descreve este report">
<combo_box.item label="Selecionar categoria" name="Select_category"/>
<combo_box.item label="Idade &gt; Idade no jogo" name="Age__Age_play"/>
- <combo_box.item label="Idade &gt; Residente adulto no Second Life Jovem" name="Age__Adult_resident_on_Teen_Second_Life"/>
- <combo_box.item label="Idade &gt; Residente menor de idade fora do Second Life Teen" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+ <combo_box.item label="Idade &gt; Residente adulto ou adolescente" name="Age__Adult_resident_on_Teen_Second_Life"/>
+ <combo_box.item label="Idade &gt; Residente menor de idade, fora do Second Life teen" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
<combo_box.item label="Assalto &gt; Sandbox de combate / área não segura" name="Assault__Combat_sandbox___unsafe_area"/>
<combo_box.item label="Assalto &gt; Ãrea segura" name="Assault__Safe_area"/>
<combo_box.item label="Assalto &gt; Testando armas em sandbox" name="Assault__Weapons_testing_sandbox"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_limits.xml b/indra/newview/skins/default/xui/pt/floater_script_limits.xml
new file mode 100644
index 0000000000..64a8a49c85
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_script_limits.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="scriptlimits" title="DADOS DO SCRIPT"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_preview.xml b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
index 5fafb0d1b8..5be866d052 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT">
<floater.string name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<text name="desc txt">
Descrição:
diff --git a/indra/newview/skins/default/xui/pt/floater_select_key.xml b/indra/newview/skins/default/xui/pt/floater_select_key.xml
index 15772da434..7264a5a713 100644
--- a/indra/newview/skins/default/xui/pt/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/pt/floater_select_key.xml
@@ -2,6 +2,6 @@
<floater name="modal container" title="">
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
<text name="Save item as:">
- Pressione uma tecla para definir o botão disparador do Falar.
+ Pressione uma tecla para definir o seu botão Falar.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
index dfffb89f30..c6694d13b2 100644
--- a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="DEBUG SETTINGS">
- <combo_box name="boolean_combo">
- <combo_box.item label="TRUE" name="TRUE"/>
- <combo_box.item label="FALSE" name="FALSE"/>
- </combo_box>
+ <radio_group name="boolean_combo">
+ <radio_item label="TRUE" name="TRUE" value="verdadeiro"/>
+ <radio_item label="FALSE" name="FALSE" value=""/>
+ </radio_group>
<color_swatch label="Cor" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
<spinner label="x" name="val_spinner_2"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
index b5d070c9d5..bb852cb11a 100644
--- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
@@ -3,13 +3,13 @@
<text name="type_label">
Destino da foto
</text>
- <radio_group label="Tipo de Foto" name="snapshot_type_radio">
- <radio_item label="Enviar por email" name="postcard"/>
- <radio_item label="Salvar no seu inventário (L$[AMOUNT])" name="texture"/>
- <radio_item label="Salvar no seu disco rígido" name="local"/>
+ <radio_group label="Tipo de foto" name="snapshot_type_radio">
+ <radio_item label="Email" name="postcard"/>
+ <radio_item label="Meu inventário (L$[AMOUNT])" name="texture"/>
+ <radio_item label="Salvar no meu PC" name="local"/>
</radio_group>
<text name="file_size_label">
- Tamanho do arquivo: [SIZE] KB
+ [SIZE] KB
</text>
<button label="Atualizar a foto" name="new_snapshot_btn"/>
<button label="Enviar" name="send_btn"/>
@@ -19,8 +19,8 @@
<flyout_button.item label="Salvar como..." name="saveas_item"/>
</flyout_button>
<button label="Cancelar" name="discard_btn"/>
- <button label="Mais &gt;" name="more_btn" tool_tip="Opções avançadas"/>
- <button label="&lt; Menos" name="less_btn" tool_tip="Opções avançadas"/>
+ <button label="Mais" name="more_btn" tool_tip="Opções avançadas"/>
+ <button label="Menos" name="less_btn" tool_tip="Opções avançadas"/>
<text name="type_label2">
Tamanho
</text>
@@ -28,21 +28,21 @@
Formato
</text>
<combo_box label="Resolução" name="postcard_size_combo">
- <combo_box.item label="Janela Atual" name="CurrentWindow"/>
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
<combo_box.item label="640x480" name="640x480"/>
<combo_box.item label="800x600" name="800x600"/>
<combo_box.item label="1024x768" name="1024x768"/>
<combo_box.item label="Customizado" name="Custom"/>
</combo_box>
<combo_box label="Resolução" name="texture_size_combo">
- <combo_box.item label="Janela Atual" name="CurrentWindow"/>
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
<combo_box.item label="Pequeno (128x128)" name="Small(128x128)"/>
<combo_box.item label="Médio (256x256)" name="Medium(256x256)"/>
<combo_box.item label="Grande (512x512)" name="Large(512x512)"/>
<combo_box.item label="Customizado" name="Custom"/>
</combo_box>
<combo_box label="Resolução" name="local_size_combo">
- <combo_box.item label="Janela Atual" name="CurrentWindow"/>
+ <combo_box.item label="Janela atual" name="CurrentWindow"/>
<combo_box.item label="320x240" name="320x240"/>
<combo_box.item label="640x480" name="640x480"/>
<combo_box.item label="800x600" name="800x600"/>
@@ -58,20 +58,20 @@
</combo_box>
<spinner label="Largura" label_width="41" name="snapshot_width" width="101"/>
<spinner label="Altura" label_width="31" left="119" name="snapshot_height" width="91"/>
- <check_box label="Restringir proporções" name="keep_aspect_check"/>
- <slider label="Qualidade da Imagem" name="image_quality_slider"/>
+ <check_box label="Limitar proproções" name="keep_aspect_check"/>
+ <slider label="Qualidade da imagem" name="image_quality_slider"/>
<text name="layer_type_label">
Capturar:
</text>
- <combo_box label="Camadas da Imagem" name="layer_types">
+ <combo_box label="Camadas da imagem" name="layer_types">
<combo_box.item label="Cores" name="Colors"/>
<combo_box.item label="Formato" name="Depth"/>
- <combo_box.item label="Decoração do Objeto" name="ObjectMattes"/>
+ <combo_box.item label="Decoração do objeto" name="ObjectMattes"/>
</combo_box>
- <check_box label="Mostrar interface na Foto" name="ui_check"/>
- <check_box bottom_delta="-17" label="Mostrar Objetos HUD na Foto" name="hud_check"/>
+ <check_box label="Interface" name="ui_check"/>
+ <check_box bottom_delta="-17" label="HUDs" name="hud_check"/>
<check_box bottom_delta="-17" label="Manter aberto após salvar" name="keep_open_check"/>
- <check_box bottom_delta="-17" label="Quadro Congelado (prévia da tela inteira)" name="freeze_frame_check"/>
+ <check_box bottom_delta="-17" label="Gerar quadro (tela inteira)" name="freeze_frame_check"/>
<check_box bottom_delta="-29" label="Auto-atualizar" name="auto_snapshot_check"/>
<string name="unknown">
desconhecido
diff --git a/indra/newview/skins/default/xui/pt/floater_sys_well.xml b/indra/newview/skins/default/xui/pt/floater_sys_well.xml
index b4760835b0..38beec022c 100644
--- a/indra/newview/skins/default/xui/pt/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/pt/floater_sys_well.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="sys_well_window" title="AVISOS">
<string name="title_im_well_window">
- MIs
+ CONVERSAS
</string>
<string name="title_notification_well_window">
AVISOS
diff --git a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
index 69ea67699c..144bc0340e 100644
--- a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
@@ -16,7 +16,7 @@
<search_editor label="Filtrar texturas" name="inventory search editor"/>
<check_box label="Applicar agora" name="apply_immediate_check"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
- <button label="Ok" label_selected="Ok" name="Select"/>
+ <button label="OK" label_selected="OK" name="Select"/>
<string name="pick title">
Pegar:
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index fb44c5c3bf..958a166dfc 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -63,7 +63,7 @@
<radio_item label="Stretch (Ctrl+Shift)" name="radio stretch"/>
<radio_item label="Face selecionada" name="radio select face"/>
</radio_group>
- <check_box label="Editar item linkado" name="checkbox edit linked parts"/>
+ <check_box label="Editar partes linkadas" name="checkbox edit linked parts"/>
<text name="RenderingCost" tool_tip="Mostra o cálculo do custo de renderização do objeto">
þ: [COUNT]
</text>
@@ -91,7 +91,7 @@
<button label="" label_selected="" name="ToolRing" tool_tip="Anel"/>
<button label="" label_selected="" name="ToolTree" tool_tip="Ãrvore"/>
<button label="" label_selected="" name="ToolGrass" tool_tip="Grama"/>
- <check_box label="Ficar com ferramenta selecionado" name="checkbox sticky"/>
+ <check_box label="Ficar com ferramenta selecionada" name="checkbox sticky"/>
<check_box label="Copiar seleção" name="checkbox copy selection"/>
<check_box initial_value="true" label="Copiar parte central" name="checkbox copy centers"/>
<check_box label="Girar cópia" name="checkbox copy rotates"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_top_objects.xml b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
index c6a62c9118..dc3bf73818 100644
--- a/indra/newview/skins/default/xui/pt/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
@@ -1,58 +1,59 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="top_objects" title="Principais objetos:">
+ <floater.string name="top_scripts_title">
+ Principais Scripts
+ </floater.string>
+ <floater.string name="top_scripts_text">
+ [COUNT] scripts tomando um total de [TIME] ms
+ </floater.string>
+ <floater.string name="scripts_score_label">
+ Tempo
+ </floater.string>
+ <floater.string name="scripts_mono_time_label">
+ Hora Mono
+ </floater.string>
+ <floater.string name="top_colliders_title">
+ Principais Colidentes
+ </floater.string>
+ <floater.string name="top_colliders_text">
+ [COUNT] objetos principais experimentando muitas potenciais colisões
+ </floater.string>
+ <floater.string name="colliders_score_label">
+ Placar
+ </floater.string>
+ <floater.string name="none_descriptor">
+ Nenhum encontrado.
+ </floater.string>
<text name="title_text">
Carregando...
</text>
<scroll_list name="objects_list">
- <column label="Placar" name="score"/>
- <column label="Nome" name="name"/>
- <column label="Proprietário" name="owner"/>
- <column label="Local" name="location"/>
- <column label="Tempo" name="time"/>
- <column label="Hora Mono" name="mono_time"/>
+ <scroll_list.columns label="Placar" name="score"/>
+ <scroll_list.columns label="Nome" name="name"/>
+ <scroll_list.columns label="Proprietário" name="owner"/>
+ <scroll_list.columns label="Local" name="location"/>
+ <scroll_list.columns label="Tempo" name="time"/>
+ <scroll_list.columns label="Hora Mono" name="mono_time"/>
+ <scroll_list.columns label="URLs" name="URLs"/>
</scroll_list>
<text name="id_text">
ID do Objeto:
</text>
+ <line_editor font="SansSerifSmall" left="140" name="id_editor" width="280"/>
<button label="Mostrar Avisos" name="show_beacon_btn"/>
<text name="obj_name_text">
Nome do objeto:
</text>
+ <line_editor font="SansSerifSmall" left="140" name="object_name_editor" width="280"/>
<button label="Filtro" name="filter_object_btn"/>
<text name="owner_name_text" width="130">
Proprietário:
</text>
- <line_editor font="SansSerifSmall" left="140" name="id_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="140" name="object_name_editor" width="280"/>
<line_editor font="SansSerifSmall" left="140" name="owner_name_editor" width="280"/>
<button label="Filtro" name="filter_owner_btn"/>
+ <button label="Atualizar" name="refresh_btn"/>
<button label="Retornar Selecionado" name="return_selected_btn" width="170"/>
<button label="Retornar Tudo" left="190" name="return_all_btn"/>
<button label="Desabilitar Selecionado" name="disable_selected_btn" width="170"/>
<button label="Desabilitar Tudo" left="190" name="disable_all_btn"/>
- <button label="Atualizar" name="refresh_btn"/>
- <string name="top_scripts_title">
- Principais Scripts
- </string>
- <string name="top_scripts_text">
- [COUNT] scripts tomando um total de [TIME] ms
- </string>
- <string name="scripts_score_label">
- Tempo
- </string>
- <string name="scripts_mono_time_label">
- Hora Mono
- </string>
- <string name="top_colliders_title">
- Principais Colidentes
- </string>
- <string name="top_colliders_text">
- [COUNT] objetos principais experimentando muitas potenciais colisões
- </string>
- <string name="colliders_score_label">
- Placar
- </string>
- <string name="none_descriptor">
- Nenhum encontrado.
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_tos.xml b/indra/newview/skins/default/xui/pt/floater_tos.xml
index 9a9666f9db..3603545ee7 100644
--- a/indra/newview/skins/default/xui/pt/floater_tos.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tos.xml
@@ -2,9 +2,9 @@
<floater name="modal container" title=" ">
<button label="Continuar" label_selected="Continuar" name="Continue"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
- <check_box label="Eu concordo com os Termos do Serviço" name="agree_chk"/>
+ <check_box label="Concordo com os Termos de Serviço e com a Política de Privacidade" name="agree_chk"/>
<text name="tos_heading">
- Leia com atenção os Termos do Serviço. Para continuar a entrar no [SECOND_LIFE], é preciso aceitar o contrato.
+ Leia com atenção os Termos do Serviço e a Política de Privacidade. Para continuar a entrar no [SECOND_LIFE], é preciso aceitar esses termos.
</text>
<text_editor name="tos_text">
TOS_TEXT
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
index 8348b375b1..5ef8479b7a 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
@@ -13,13 +13,14 @@
Ligação para [NAME]
</string>
<string name="no_one_near">
- Ninguém por perto
+ Ninguém por perto ativou a voz
</string>
- <panel name="control_panel">
- <layout_stack>
- <layout_panel name="leave_btn_panel">
- <button label="Desligar" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </panel>
+ <layout_stack name="my_call_stack">
+ <layout_panel name="my_panel">
+ <text name="user_text" value="Meu avatar:"/>
+ </layout_panel>
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Desligar" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml
index 36b995d4fd..b4613e0890 100644
--- a/indra/newview/skins/default/xui/pt/floater_water.xml
+++ b/indra/newview/skins/default/xui/pt/floater_water.xml
@@ -8,7 +8,7 @@
<button label="Salvar" label_selected="Salvar" name="WaterSavePreset"/>
<button label="Deletar" label_selected="Deletar" name="WaterDeletePreset"/>
<tab_container name="Water Tabs">
- <panel label="Configurações" name="Settings">
+ <panel label="DEFINIÇÕES" name="Settings">
<text name="BHText">
Cor da névoa da Ãgua
</text>
@@ -56,7 +56,7 @@
</text>
<button label="?" left="640" name="WaterBlurMultiplierHelp"/>
</panel>
- <panel label="Imagem" name="Waves">
+ <panel label="IMAGEM" name="Waves">
<text name="BHText">
Direção da Onda Maior
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
index 2b2c669a18..282bf0e268 100644
--- a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
@@ -3,7 +3,7 @@
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
<text name="Save item as:">
- Salvar item como:
+ Salvar item no inventário como:
</text>
<line_editor name="name ed">
Novo [DESC]
diff --git a/indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml
index 8f616396ca..865d939d24 100644
--- a/indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml
+++ b/indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="whitelist_entry">
+<floater name="whitelist_entry" title="LISTA BRANCA">
<text name="media_label">
Digite um URL ou série de URLs para a lista de domínios permitidos
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
index 951e37a1a6..22632a4ef8 100644
--- a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
@@ -5,11 +5,11 @@
</text>
<combo_box left_delta="130" name="WLPresetsCombo"/>
<button label="Novo" label_selected="Novo" name="WLNewPreset"/>
- <button label="Salvar" label_selected="Salvar" name="WLSavePreset" left_delta="72"/>
- <button label="Deletar" label_selected="Deletar" name="WLDeletePreset" left_delta="72"/>
- <button label="Editor de Ciclos do Dia" label_selected="Editor de Ciclos do Dia" name="WLDayCycleMenuButton" width="150" left_delta="84" />
+ <button label="Salvar" label_selected="Salvar" left_delta="72" name="WLSavePreset"/>
+ <button label="Deletar" label_selected="Deletar" left_delta="72" name="WLDeletePreset"/>
+ <button label="Editor de Ciclos do Dia" label_selected="Editor de Ciclos do Dia" left_delta="84" name="WLDayCycleMenuButton" width="150"/>
<tab_container name="WindLight Tabs">
- <panel label="Atmosfera" name="Atmosphere">
+ <panel label="ATMOSFERA" name="Atmosphere">
<text name="BHText">
Horizonte Azul
</text>
@@ -53,17 +53,17 @@
<text name="DensMultText">
Multiplicador de Densidade
</text>
- <button label="?" name="WLDensityMultHelp" left="635"/>
+ <button label="?" left="635" name="WLDensityMultHelp"/>
<text name="WLDistanceMultText">
Multiplicador de Distância
</text>
- <button label="?" name="WLDistanceMultHelp" left="635"/>
+ <button label="?" left="635" name="WLDistanceMultHelp"/>
<text name="MaxAltText">
Altitude Máxima
</text>
- <button label="?" name="WLMaxAltitudeHelp" left="635"/>
+ <button label="?" left="635" name="WLMaxAltitudeHelp"/>
</panel>
- <panel label="Iluminação" name="Lighting">
+ <panel label="ILUMINAÇÃO" name="Lighting">
<text name="SLCText">
Cor do Sol/Lua
</text>
@@ -119,7 +119,7 @@
</text>
<button label="?" name="WLStarBrightnessHelp"/>
</panel>
- <panel label="Nuvens" name="Clouds">
+ <panel label="NUVENS" name="Clouds">
<text name="WLCloudColorText">
Cor da Nuvem
</text>
@@ -157,10 +157,10 @@
Escala da Nuvem
</text>
<button label="?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText" font="SansSerifSmall">
+ <text font="SansSerifSmall" name="WLCloudDetailText">
Detalhe da Nuvem (XY/Densidade)
</text>
- <button label="?" name="WLCloudDetailHelp" left="421"/>
+ <button label="?" left="421" name="WLCloudDetailHelp"/>
<text name="BHText8">
X
</text>
@@ -181,7 +181,7 @@
<button label="?" name="WLCloudScrollYHelp"/>
<check_box label="Travar" name="WLCloudLockY"/>
<check_box label="Desenhar Nuvens Clássicas" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp" left="645"/>
+ <button label="?" left="645" name="WLClassicCloudsHelp"/>
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_window_size.xml b/indra/newview/skins/default/xui/pt/floater_window_size.xml
new file mode 100644
index 0000000000..6a8ccbd002
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_window_size.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="window_size" title="TAMANHO DA JANELA">
+ <string name="resolution_format">
+ [RES_X] x [RES_Y]
+ </string>
+ <text name="windowsize_text">
+ Definir tamanho da janela:
+ </text>
+ <combo_box name="window_size_combo" tool_tip="largura x altura">
+ <combo_box.item label="1000 x 700 (padrão)" name="item0"/>
+ <combo_box.item label="1024 x 768" name="item1"/>
+ <combo_box.item label="1280 x 720 (720p)" name="item2"/>
+ <combo_box.item label="1920 x 1080 (1080p)" name="item3"/>
+ </combo_box>
+ <button label="Definir" name="set_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml
index 81f8ce7846..115192203f 100644
--- a/indra/newview/skins/default/xui/pt/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml
@@ -5,12 +5,15 @@
Legenda
</text>
</panel>
- <panel>
+ <panel name="layout_panel_2">
<button font="SansSerifSmall" label="Mostra minha localização" label_selected="Mostra minha localização" left_delta="91" name="Show My Location" tool_tip="Centrar o mapa na localização do meu avatar" width="135"/>
- <text name="person_label">
+ <text name="me_label">
Eu
</text>
<check_box label="Residente" name="people_chk"/>
+ <text name="person_label">
+ Pessoa
+ </text>
<check_box label="Infohub" name="infohub_chk"/>
<text name="infohub_label">
Infohub
@@ -19,47 +22,57 @@
<text name="land_sale_label">
Venda de terreno
</text>
+ <text name="by_owner_label">
+ o proprietário
+ </text>
<text name="auction_label">
- pelo dono
+ leilão de terrenos
</text>
- <button label="Ir para Casa" label_selected="Ir para casa" name="Go Home" tool_tip="Teletransportar para minha casa"/>
+ <button label="Ir para Casa" label_selected="Ir para casa" name="Go Home" tool_tip="Teletransportar para meu início"/>
<text name="Home_label">
- Casa
+ Início
</text>
<text name="events_label">
Eventos:
</text>
<check_box label="PG" name="event_chk"/>
- <check_box initial_value="true" label="Mature" name="event_mature_chk"/>
+ <text name="pg_label">
+ Público geral
+ </text>
+ <check_box initial_value="verdadeiro" label="Mature" name="event_mature_chk"/>
<text name="mature_label">
Moderado
</text>
<check_box label="Adult" name="event_adult_chk"/>
+ <text name="adult_label">
+ Adulto
+ </text>
</panel>
- <panel>
+ <panel name="layout_panel_3">
<text name="find_on_map_label">
Localizar no mapa
</text>
</panel>
- <panel>
- <combo_box label="Amigos Conectados" name="friend combo" tool_tip="Mostrar amigos no mapa">
+ <panel name="layout_panel_4">
+ <combo_box label="Amigos online" name="friend combo" tool_tip="Mostrar amigos no mapa">
<combo_box.item label="Amigos conectados" name="item1"/>
</combo_box>
<combo_box label="Meus marcos" name="landmark combo" tool_tip="Mostrar marco no mapa">
<combo_box.item label="Meus marcos" name="item1"/>
</combo_box>
- <search_editor label="Regiões por nome" name="location" tool_tip="Digite o nome de uma Região"/>
- <button label="Buscar" name="DoSearch" tool_tip="Procurar por região"/>
- <button font="SansSerifSmall" label="Teletransporte" label_selected="Teletransporte" name="Teleport" tool_tip="Teletransportar para a posição selecionada"/>
+ <search_editor label="Regiões por nome" name="location" tool_tip="Digite o nome da região"/>
+ <button label="Buscar" name="DoSearch" tool_tip="Buscar região"/>
+ <button name="Clear" tool_tip="Limpar linhas e redefinir mapa"/>
+ <button font="SansSerifSmall" label="Teletransportar" label_selected="Teletransporte" name="Teleport" tool_tip="Teletransportar para o lugar selecionado"/>
<button font="SansSerifSmall" label="Copiar SLurl" name="copy_slurl" tool_tip="Copia a localização atual como um SLurl para usar na web."/>
- <button font="SansSerifSmall" label="Mostrar seleção" label_selected="Mostrar Destino" left_delta="91" name="Show Destination" tool_tip="Centralizar mapa na posição selecionada" width="135"/>
+ <button font="SansSerifSmall" label="Mostrar seleção" label_selected="Mostrar Destino" left_delta="91" name="Show Destination" tool_tip="Centrar mapa no local selecionado" width="135"/>
</panel>
- <panel>
+ <panel name="layout_panel_5">
<text name="zoom_label">
Zoom
</text>
</panel>
- <panel>
+ <panel name="layout_panel_6">
<slider label="Zoom" name="zoom slider"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/inspect_avatar.xml b/indra/newview/skins/default/xui/pt/inspect_avatar.xml
index 8f35acf19e..a74ea15be0 100644
--- a/indra/newview/skins/default/xui/pt/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/pt/inspect_avatar.xml
@@ -13,7 +13,7 @@
<slider name="volume_slider" tool_tip="Volume de Voz" value="0.5"/>
<button label="Adicionar amigo" name="add_friend_btn"/>
<button label="MI" name="im_btn"/>
- <button label="Mais" name="view_profile_btn"/>
+ <button label="Perfil" name="view_profile_btn"/>
<panel name="moderator_panel">
<button label="Disabilitar Voz" name="disable_voice"/>
<button label="Habilitar Voz" name="enable_voice"/>
diff --git a/indra/newview/skins/default/xui/pt/language_settings.xml b/indra/newview/skins/default/xui/pt/language_settings.xml
index 71418d446a..f25e77574d 100644
--- a/indra/newview/skins/default/xui/pt/language_settings.xml
+++ b/indra/newview/skins/default/xui/pt/language_settings.xml
@@ -3,9 +3,9 @@
<strings>
<!-- Locale Information -->
- <string name="MicrosoftLocale">english</string>
- <string name="DarwinLocale">C</string>
- <string name="LinuxLocale">C</string>
+ <string name="MicrosoftLocale">portuguese</string>
+ <string name="DarwinLocale">pt_PT.UTF-8</string>
+ <string name="LinuxLocale">pt_PT.UTF-8</string>
<!--
datetimeToCodes["wkday"] = "%a"; // Thu
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
index 99d5ae9bec..abbf2e7032 100644
--- a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Self Pie">
<menu_item_call label="Ficar de pé" name="Stand Up"/>
- <context_menu label="Tirar &gt;" name="Take Off &gt;">
- <context_menu label="Roupa &gt;" name="Clothes &gt;">
+ <context_menu label="Tirar â–¶" name="Take Off &gt;">
+ <context_menu label="Roupa â–¶" name="Clothes &gt;">
<menu_item_call label="Camisa" name="Shirt"/>
<menu_item_call label="Calças" name="Pants"/>
<menu_item_call label="Saia" name="Skirt"/>
@@ -16,8 +16,8 @@
<menu_item_call label="Alpha" name="Self Alpha"/>
<menu_item_call label="Todas as roupas" name="All Clothes"/>
</context_menu>
- <context_menu label="HUD &gt;" name="Object Detach HUD"/>
- <context_menu label="Tirar &gt;" name="Object Detach"/>
+ <context_menu label="HUD â–¶" name="Object Detach HUD"/>
+ <context_menu label="Tirar â–¶" name="Object Detach"/>
<menu_item_call label="Tirar tudo" name="Detach All"/>
</context_menu>
<menu_item_call label="Minha aparência" name="Appearance..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_im_well_button.xml b/indra/newview/skins/default/xui/pt/menu_im_well_button.xml
new file mode 100644
index 0000000000..2d37cefd6f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+ <menu_item_call label="Fechar tudo" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
index 46c536e64b..cdd8959cd4 100644
--- a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
@@ -7,6 +7,7 @@
<menu_item_call label="Teletransportar" name="teleport"/>
<menu_item_call label="Convidar para entrar no grupo" name="invite_to_group"/>
<menu_item_call label="Bloquear" name="block"/>
+ <menu_item_call label="Desbloquear" name="unblock"/>
<menu_item_call label="Denunciar" name="report"/>
<menu_item_call label="Congelar" name="freeze"/>
<menu_item_call label="Ejetar" name="eject"/>
@@ -14,4 +15,5 @@
<menu_item_call label="Localizar no mapa" name="find_on_map"/>
<menu_item_call label="Mais zoom" name="zoom_in"/>
<menu_item_call label="Pagar" name="pay"/>
+ <menu_item_call label="Compartilhar" name="share"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml
index de33849d0c..2691ac81b3 100644
--- a/indra/newview/skins/default/xui/pt/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml
@@ -6,21 +6,21 @@
<menu_item_call label="Propriedades" name="Task Properties"/>
<menu_item_call label="Renomear" name="Task Rename"/>
<menu_item_call label="Apagar" name="Task Remove"/>
- <menu_item_call label="Limpar Lixeira" name="Empty Trash"/>
- <menu_item_call label="Limpar Achados e perdidos" name="Empty Lost And Found"/>
- <menu_item_call label="Nova Pasta" name="New Folder"/>
- <menu_item_call label="Novo Script" name="New Script"/>
- <menu_item_call label="Nova Nota" name="New Note"/>
- <menu_item_call label="Novo Gesto" name="New Gesture"/>
+ <menu_item_call label="Limpar lixeira" name="Empty Trash"/>
+ <menu_item_call label="Limpar Achados &amp; perdidos" name="Empty Lost And Found"/>
+ <menu_item_call label="Nova pasta" name="New Folder"/>
+ <menu_item_call label="Novo script" name="New Script"/>
+ <menu_item_call label="Nova anotação" name="New Note"/>
+ <menu_item_call label="Novo gesto" name="New Gesture"/>
<menu label="Novas roupas" name="New Clothes">
- <menu_item_call label="Nova Camisa" name="New Shirt"/>
- <menu_item_call label="Nova Calça" name="New Pants"/>
- <menu_item_call label="Novos Calçados" name="New Shoes"/>
- <menu_item_call label="Novas Meias" name="New Socks"/>
- <menu_item_call label="Nova Jaqueta" name="New Jacket"/>
- <menu_item_call label="Nova Saia" name="New Skirt"/>
- <menu_item_call label="Novas Luvas" name="New Gloves"/>
- <menu_item_call label="Nova Anágua" name="New Undershirt"/>
+ <menu_item_call label="Nova camisa" name="New Shirt"/>
+ <menu_item_call label="Nova calça" name="New Pants"/>
+ <menu_item_call label="Novos calçados" name="New Shoes"/>
+ <menu_item_call label="Novas meias" name="New Socks"/>
+ <menu_item_call label="Nova jaqueta" name="New Jacket"/>
+ <menu_item_call label="Nova saia" name="New Skirt"/>
+ <menu_item_call label="Novas luvas" name="New Gloves"/>
+ <menu_item_call label="Nova anágua" name="New Undershirt"/>
<menu_item_call label="Nova roupa de baixo" name="New Underpants"/>
<menu_item_call label="Nova máscara alfa" name="New Alpha Mask"/>
<menu_item_call label="Nova tatuagem" name="New Tattoo"/>
@@ -46,37 +46,36 @@
<menu_item_call label="Teletransporte" name="Landmark Open"/>
<menu_item_call label="Abrir" name="Animation Open"/>
<menu_item_call label="Abrir" name="Sound Open"/>
+ <menu_item_call label="Substituir equipamento" name="Replace Outfit"/>
+ <menu_item_call label="Adicionar ao equipamento" name="Add To Outfit"/>
<menu_item_call label="Remover item" name="Purge Item"/>
<menu_item_call label="Restaurar item" name="Restore Item"/>
- <menu_item_call label="Ir para o link" name="Goto Link"/>
<menu_item_call label="Abrir" name="Open"/>
<menu_item_call label="Propriedades" name="Properties"/>
<menu_item_call label="Renomear" name="Rename"/>
- <menu_item_call label="Copy Asset UUID" name="Copy Asset UUID"/>
+ <menu_item_call label="Copiar item UUID" name="Copy Asset UUID"/>
<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"/>
<menu_item_call label="Apagar" name="Delete"/>
- <menu_item_call label="Remover os itens" name="Take Off Items"/>
- <menu_item_call label="Adicionar ao equipamento" name="Add To Outfit"/>
- <menu_item_call label="Substituir equipamento" name="Replace Outfit"/>
- <menu_item_call label="Iniciar conversa em conferência" name="Conference Chat Folder"/>
- <menu_item_call label="Executar" name="Sound Play"/>
+ <menu_item_call label="Excluir pasta do sistema" name="Delete System Folder"/>
+ <menu_item_call label="Pasta conversa em conferência" name="Conference Chat Folder"/>
+ <menu_item_call label="Executar som" name="Sound Play"/>
<menu_item_call label="Sobre o marco" name="About Landmark"/>
- <menu_item_call label="Executar in World" name="Animation Play"/>
- <menu_item_call label="Executar localmente" name="Animation Audition"/>
- <menu_item_call label="Mandar Mensagem Instantânea" name="Send Instant Message"/>
+ <menu_item_call label="Executar animação" name="Animation Play"/>
+ <menu_item_call label="Executar áudio" name="Animation Audition"/>
+ <menu_item_call label="Mandar MI" name="Send Instant Message"/>
<menu_item_call label="Oferecer teletransporte..." name="Offer Teleport..."/>
- <menu_item_call label="Iniciar conversa em conferência" name="Conference Chat"/>
+ <menu_item_call label="Bate-papo em conferência" name="Conference Chat"/>
<menu_item_call label="Ativar" name="Activate"/>
<menu_item_call label="Desativar" name="Deactivate"/>
<menu_item_call label="Salvar como" name="Save As"/>
- <menu_item_call label="Retirar de você" name="Detach From Yourself"/>
- <menu_item_call label="Vestir" name="Object Wear"/>
+ <menu_item_call label="Retirar de si mesmo" name="Detach From Yourself"/>
+ <menu_item_call label="Vestir objeto" name="Object Wear"/>
<menu label="Anexar a" name="Attach To"/>
<menu label="Anexar ao HUD" name="Attach To HUD"/>
<menu_item_call label="Editar" name="Wearable Edit"/>
<menu_item_call label="Vestir" name="Wearable Wear"/>
- <menu_item_call label="Retirar" name="Take Off"/>
+ <menu_item_call label="Tirar" name="Take Off"/>
<menu_item_call label="--Sem opções--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml
index d1bdcd3a8a..fc40384891 100644
--- a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml
@@ -8,7 +8,7 @@
</menu>
<menu_item_call label="Nova pasta" name="New Folder"/>
<menu_item_call label="Novo script" name="New Script"/>
- <menu_item_call label="Nova nota" name="New Note"/>
+ <menu_item_call label="Nova anotação" name="New Note"/>
<menu_item_call label="Novo gesto" name="New Gesture"/>
<menu label="Novas roupas" name="New Clothes">
<menu_item_call label="Nova camisa" name="New Shirt"/>
@@ -24,7 +24,7 @@
<menu_item_call label="Nova tatuagem" name="New Tattoo"/>
</menu>
<menu label="Nova parte do corpo" name="New Body Parts">
- <menu_item_call label="Nova silhueta" name="New Shape"/>
+ <menu_item_call label="Nova forma" name="New Shape"/>
<menu_item_call label="Nova pele" name="New Skin"/>
<menu_item_call label="Novo cabelo" name="New Hair"/>
<menu_item_call label="Novos olhos" name="New Eyes"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml
index 3dd5d2c152..6cc83d11d0 100644
--- a/indra/newview/skins/default/xui/pt/menu_login.xml
+++ b/indra/newview/skins/default/xui/pt/menu_login.xml
@@ -21,8 +21,8 @@
</menu>
<menu_item_call label="Mostrar configurações" name="Debug Settings"/>
<menu_item_call label="Configurações da interface e cor" name="UI/Color Settings"/>
- <menu_item_call label="Mostrar bandeja lateral" name="Show Side Tray"/>
<menu label="Testes de UI" name="UI Tests"/>
+ <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 navegador web" name="Web Browser Test"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_mini_map.xml b/indra/newview/skins/default/xui/pt/menu_mini_map.xml
index f7b86b8f22..380bd8cf11 100644
--- a/indra/newview/skins/default/xui/pt/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/pt/menu_mini_map.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
+<menu name="Popup">
<menu_item_call label="Zoom Perto" name="Zoom Close"/>
<menu_item_call label="Zoom Médio" name="Zoom Medium"/>
<menu_item_call label="Zoom Longe" name="Zoom Far"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_notification_well_button.xml b/indra/newview/skins/default/xui/pt/menu_notification_well_button.xml
new file mode 100644
index 0000000000..43ad4134ec
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+ <menu_item_call label="Fechar tudo" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml
index 658f44d692..a5969cacc3 100644
--- a/indra/newview/skins/default/xui/pt/menu_object.xml
+++ b/indra/newview/skins/default/xui/pt/menu_object.xml
@@ -5,19 +5,22 @@
<menu_item_call label="Construir" name="Build"/>
<menu_item_call label="Abrir" name="Open"/>
<menu_item_call label="Sentar aqui" name="Object Sit"/>
+ <menu_item_call label="Ficar de pé" name="Object Stand Up"/>
<menu_item_call label="Perfil do objeto" name="Object Inspect"/>
+ <menu_item_call label="Mais zoom" name="Zoom In"/>
<context_menu label="Colocar no(a)" name="Put On">
<menu_item_call label="Vestir" name="Wear"/>
<context_menu label="Anexar &gt;" name="Object Attach"/>
<context_menu label="Anexar o HUD &gt;" name="Object Attach HUD"/>
</context_menu>
<context_menu label="Tirar &gt;" name="Remove">
- <menu_item_call label="Pegar" name="Pie Object Take"/>
<menu_item_call label="Denunciar abuso" name="Report Abuse..."/>
<menu_item_call label="Bloquear" name="Object Mute"/>
<menu_item_call label="Devolver" name="Return..."/>
<menu_item_call label="Excluir" name="Delete"/>
</context_menu>
+ <menu_item_call label="Comprar" name="Pie Object Bye"/>
+ <menu_item_call label="Pegar" name="Pie Object Take"/>
<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
<menu_item_call label="Pagar" name="Pay..."/>
<menu_item_call label="Comprar" name="Buy..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_participant_list.xml b/indra/newview/skins/default/xui/pt/menu_participant_list.xml
index 6db1fe7105..849dec3108 100644
--- a/indra/newview/skins/default/xui/pt/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/pt/menu_participant_list.xml
@@ -1,16 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Participant List Context Menu">
+ <menu_item_check label="Ordenar por nome" name="SortByName"/>
+ <menu_item_check label="Ordenar por conversas mais recentes" name="SortByRecentSpeakers"/>
<menu_item_call label="Ver perfil" name="View Profile"/>
<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
<menu_item_call label="MI" name="IM"/>
<menu_item_call label="Ligar" name="Call"/>
<menu_item_call label="Compartilhar" name="Share"/>
<menu_item_call label="Pagar" name="Pay"/>
- <menu_item_check label="Bloquear/desbloquear" name="Block/Unblock"/>
- <menu_item_check label="Silenciar texto" name="MuteText"/>
- <menu_item_check label="Pode bater papo por escrito" name="AllowTextChat"/>
- <menu_item_call label="Silenciar este participante" name="ModerateVoiceMuteSelected"/>
- <menu_item_call label="Silenciar os demais" name="ModerateVoiceMuteOthers"/>
- <menu_item_call label="Desfazer silenciar deste participante" name="ModerateVoiceUnMuteSelected"/>
- <menu_item_call label="Desfazer silenciar dos demais" name="ModerateVoiceUnMuteOthers"/>
+ <menu_item_check label="Bloquear voz" name="Block/Unblock"/>
+ <menu_item_check label="Bloquear texto" name="MuteText"/>
+ <context_menu label="Opções do moderador &gt;" name="Moderator Options">
+ <menu_item_check label="Pode bater papo por escrito" name="AllowTextChat"/>
+ <menu_item_call label="Silenciar este participante" name="ModerateVoiceMuteSelected"/>
+ <menu_item_call label="Silenciar os demais" name="ModerateVoiceMuteOthers"/>
+ <menu_item_call label="Desfazer silenciar deste participante" name="ModerateVoiceUnMuteSelected"/>
+ <menu_item_call label="Desfazer silenciar dos demais" name="ModerateVoiceUnMuteOthers"/>
+ </context_menu>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_groups.xml b/indra/newview/skins/default/xui/pt/menu_people_groups.xml
new file mode 100644
index 0000000000..9a924ad7b9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+ <menu_item_call label="Ver dados" name="View Info"/>
+ <menu_item_call label="Bate-papo" name="Chat"/>
+ <menu_item_call label="Ligar" name="Call"/>
+ <menu_item_call label="Ativar" name="Activate"/>
+ <menu_item_call label="Sair" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby.xml
index eb47f51ed0..7c720f262b 100644
--- a/indra/newview/skins/default/xui/pt/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_nearby.xml
@@ -2,9 +2,12 @@
<context_menu name="Avatar Context Menu">
<menu_item_call label="Ver perfil" name="View Profile"/>
<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
+ <menu_item_call label="Remover amigo..." name="Remove Friend"/>
<menu_item_call label="MI" name="IM"/>
<menu_item_call label="Ligar" name="Call"/>
+ <menu_item_call label="Mapa" name="Map"/>
<menu_item_call label="Compartilhar" name="Share"/>
<menu_item_call label="Pagar" name="Pay"/>
<menu_item_check label="Bloquear/desbloquear" name="Block/Unblock"/>
+ <menu_item_call label="Teletransportar?" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
index 855e7c9920..fc08b3accb 100644
--- a/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Multi-Selected People Context Menu">
<menu_item_call label="Adicionar amigo..." name="Add Friends"/>
+ <menu_item_call label="Remover amigo..." name="Remove Friend"/>
<menu_item_call label="MI" name="IM"/>
<menu_item_call label="Ligar" name="Call"/>
<menu_item_call label="Compartilhar" name="Share"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml b/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml
index b3e09bc695..d41ecbd755 100644
--- a/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml
+++ b/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="profile_overflow_menu">
+ <menu_item_call label="Mapa" name="show_on_map"/>
<menu_item_call label="Pagar" name="pay"/>
<menu_item_call label="Compartilhar" name="share"/>
+ <menu_item_call label="Bloquear" name="block"/>
+ <menu_item_call label="Desbloquear" name="unblock"/>
+ <menu_item_call label="Chutar" name="kick"/>
+ <menu_item_call label="Congelar" name="freeze"/>
+ <menu_item_call label="Descongelar" name="unfreeze"/>
+ <menu_item_call label="CSR" name="csr"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml
index b4216b7ddc..ec1e7a0950 100644
--- a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml
@@ -2,5 +2,5 @@
<context_menu name="Teleport History Item Context Menu">
<menu_item_call label="Teletransportar" name="Teleport"/>
<menu_item_call label="Mais informações" name="More Information"/>
- <menu_item_call label="Copiar para área de transferência" name="CopyToClipboard"/>
+ <menu_item_call label="Copiar" name="CopyToClipboard"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index acadc952ca..45f7ca1424 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -9,8 +9,8 @@
<menu_item_call label="Meu perfil" name="Profile"/>
<menu_item_call label="Minha aparência" name="Appearance"/>
<menu_item_check label="Meu inventário" name="Inventory"/>
- <menu_item_call label="Mostrar inventário na bandeja lateral" name="ShowSidetrayInventory"/>
- <menu_item_call label="Meus gestos" name="Gestures"/>
+ <menu_item_check label="Meu inventário" name="ShowSidetrayInventory"/>
+ <menu_item_check label="Meus gestos" name="Gestures"/>
<menu label="Meu status" name="Status">
<menu_item_call label="Ausente" name="Set Away"/>
<menu_item_call label="Ocupado" name="Set Busy"/>
@@ -24,35 +24,36 @@
<menu_item_call label="Meus grupos" name="My Groups"/>
<menu_item_check label="Bate-papo local" name="Nearby Chat"/>
<menu_item_call label="Pessoas por perto" name="Active Speakers"/>
- <menu_item_check label="Mídia por perto" name="Nearby Media"/>
</menu>
<menu label="Mundo" name="World">
- <menu_item_check label="Movimentar" name="Movement Controls"/>
- <menu_item_check label="Exibir" name="Camera Controls"/>
- <menu_item_call label="Sobre terrenos" name="About Land"/>
- <menu_item_call label="Região/Propriedade" name="Region/Estate"/>
- <menu_item_call label="Comprar terreno" name="Buy Land"/>
+ <menu_item_check label="Mini Mapa" name="Mini-Map"/>
+ <menu_item_check label="Mapa-múndi" name="World Map"/>
+ <menu_item_call label="Foto" name="Take Snapshot"/>
+ <menu_item_call label="Criar marco deste lugar" name="Create Landmark Here"/>
+ <menu label="Perfil da região" name="Land">
+ <menu_item_call label="Sobre terrenos" name="About Land"/>
+ <menu_item_call label="Região/Propriedade" name="Region/Estate"/>
+ </menu>
+ <menu_item_call label="Comprar este terreno" name="Buy Land"/>
<menu_item_call label="Meus terrenos" name="My Land"/>
- <menu label="Mostrar" name="Land">
+ <menu label="Mostrar" name="LandShow">
+ <menu_item_check label="Controles de movimento" name="Movement Controls"/>
+ <menu_item_check label="Ver controles" name="Camera Controls"/>
<menu_item_check label="Limites" name="Ban Lines"/>
<menu_item_check label="Balizas" name="beacons"/>
<menu_item_check label="Limites do imóvel" name="Property Lines"/>
<menu_item_check label="Proprietários" name="Land Owners"/>
+ <menu_item_check label="Coordenadas" name="Coordinates"/>
+ <menu_item_check label="Propriedades do lote" name="Parcel Properties"/>
</menu>
- <menu label="Marcos" name="Landmarks">
- <menu_item_call label="Colocar marco aqui" name="Create Landmark Here"/>
- <menu_item_call label="Definir como casa" name="Set Home to Here"/>
- </menu>
- <menu_item_call label="Início" name="Teleport Home"/>
- <menu_item_check label="Mini Mapa" name="Mini-Map"/>
- <menu_item_check label="Mapa-múndi" name="World Map"/>
- <menu_item_call label="Foto" name="Take Snapshot"/>
+ <menu_item_call label="Teletransportar para início" name="Teleport Home"/>
+ <menu_item_call label="Definir como casa" name="Set Home to Here"/>
<menu label="Sol" name="Environment Settings">
<menu_item_call label="Amanhecer" name="Sunrise"/>
<menu_item_call label="Meio-dia" name="Noon"/>
<menu_item_call label="Pôr-do-Sol" name="Sunset"/>
<menu_item_call label="Meia-noite" name="Midnight"/>
- <menu_item_call label="Usar o horário deste lugar" name="Revert to Region Default"/>
+ <menu_item_call label="Horário da propriedade" name="Revert to Region Default"/>
<menu_item_call label="Editor de ambiente" name="Environment Editor"/>
</menu>
</menu>
@@ -78,10 +79,12 @@
</menu>
<menu_item_call label="Link" name="Link"/>
<menu_item_call label="Desconectar links" name="Unlink"/>
- <menu_item_call label="Focus on Selection" name="Focus on Selection"/>
+ <menu_item_check label="Edit Linked Parts" name="Edit Linked Parts"/>
+ <menu_item_call label="Enfocar seleção" name="Focus on Selection"/>
<menu_item_call label="Ampliar seleção" name="Zoom to Selection"/>
<menu label="Objeto:" name="Object">
- <menu_item_call label="Comprar" name="Menu Object Take"/>
+ <menu_item_call label="Comprar" name="Menu Object Buy"/>
+ <menu_item_call label="Pegar" name="Menu Object Take"/>
<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
<menu_item_call label="Salvar no meu inventário" name="Save Object Back to My Inventory"/>
<menu_item_call label="Save Back to Object Contents" name="Save Object Back to Object Contents"/>
@@ -89,58 +92,50 @@
<menu label="Scripts" name="Scripts">
<menu_item_call label="Recompilar scripts (LSL)" name="Mono"/>
<menu_item_call label="Recompilar scripts (LSL)" name="LSL"/>
- <menu_item_call label="Reset Scripts" name="Reset Scripts"/>
+ <menu_item_call label="Resetar scripts" name="Reset Scripts"/>
<menu_item_call label="Scripts em modo execução" name="Set Scripts to Running"/>
<menu_item_call label="Scripts em modo não execução" name="Set Scripts to Not Running"/>
</menu>
<menu label="Opções" name="Options">
- <menu_item_check label="Edit Linked Parts" name="Edit Linked Parts"/>
- <menu_item_call label="Set Default Upload Permissions" name="perm prefs"/>
+ <menu_item_call label="Definir permissões padrão de upload" name="perm prefs"/>
<menu_item_check label="Mostrar permissões avançadas" name="DebugPermissions"/>
- <menu label="Seleção" name="Selection">
- <menu_item_check label="Só selecionar meus objetos" name="Select Only My Objects"/>
- <menu_item_check label="Só selecionar meus objetos" name="Select Only Movable Objects"/>
- <menu_item_check label="Selecionar contornando" name="Select By Surrounding"/>
- </menu>
- <menu label="Mostrar" name="Show">
- <menu_item_check label="Mostrar seleção oculta" name="Show Hidden Selection"/>
- <menu_item_check label="Show Light Radius for Selection" name="Show Light Radius for Selection"/>
- <menu_item_check label="Show Selection Beam" name="Show Selection Beam"/>
- </menu>
- <menu label="Grade" name="Grid">
- <menu_item_check label="Mostrar na grade" name="Snap to Grid"/>
- <menu_item_call label="Snap Object XY to Grid" name="Snap Object XY to Grid"/>
- <menu_item_call label="Use Selection for Grid" name="Use Selection for Grid"/>
- <menu_item_call label="Opções de grade" name="Grid Options"/>
- </menu>
+ <menu_item_check label="Só selecionar meus objetos" name="Select Only My Objects"/>
+ <menu_item_check label="Só selecionar objetos móveis" name="Select Only Movable Objects"/>
+ <menu_item_check label="Selecionar contornando" name="Select By Surrounding"/>
+ <menu_item_check label="Mostrar seleção oculta" name="Show Hidden Selection"/>
+ <menu_item_check label="Mostrar alcance de luz da seleção" name="Show Light Radius for Selection"/>
+ <menu_item_check label="Mostrar raio de seleção" name="Show Selection Beam"/>
+ <menu_item_check label="Encaixar em grade" name="Snap to Grid"/>
+ <menu_item_call label="Encaixar objeto XY em grade" name="Snap Object XY to Grid"/>
+ <menu_item_call label="Usar seleção em grade" name="Use Selection for Grid"/>
+ <menu_item_call label="Opções de grade" name="Grid Options"/>
</menu>
<menu label="Selecionar partes conectadas" name="Select Linked Parts">
- <menu_item_call label="Select Next Part" name="Select Next Part"/>
- <menu_item_call label="Select Previous Part" name="Select Previous Part"/>
- <menu_item_call label="Include Next Part" name="Include Next Part"/>
- <menu_item_call label="Include Previous Part" name="Include Previous Part"/>
+ <menu_item_call label="Selecionar próxima parte" name="Select Next Part"/>
+ <menu_item_call label="Selecionar parte anterior" name="Select Previous Part"/>
+ <menu_item_call label="Incluir próxima parte" name="Include Next Part"/>
+ <menu_item_call label="Incluir parte anterior" name="Include Previous Part"/>
</menu>
</menu>
<menu label="Ajuda" name="Help">
<menu_item_call label="[SECOND_LIFE] Ajuda" name="Second Life Help"/>
- <menu_item_call label="Tutorial" name="Tutorial"/>
<menu_item_call label="Denunciar abuso" name="Report Abuse"/>
<menu_item_call label="Relatar bug" name="Report Bug"/>
</menu>
<menu label="Avançado" name="Advanced">
- <menu_item_check label="Status &apos;ausente&apos; em 30 minutos" name="Go Away/AFK When Idle"/>
<menu_item_call label="Parar minha animação" name="Stop Animating My Avatar"/>
<menu_item_call label="Recarregar texturas" name="Rebake Texture"/>
<menu_item_call label="Interface tamanho padrão" name="Set UI Size to Default"/>
+ <menu_item_call label="Definir tamanho da janela:" name="Set Window Size..."/>
<menu_item_check label="Limitar distância da seleção" name="Limit Select Distance"/>
<menu_item_check label="Disable Camera Constraints" name="Disable Camera Distance"/>
<menu_item_check label="Foto de alta resolução" name="HighResSnapshot"/>
<menu_item_check label="Compactar fotos para HD" name="QuietSnapshotsToDisk"/>
<menu_item_check label="Compactar fotos para HD" name="CompressSnapshotsToDisk"/>
<menu label="Ferramentas de desempenho" name="Performance Tools">
- <menu_item_call label="Lag Meter" name="Lag Meter"/>
+ <menu_item_call label="Medidor de lag" name="Lag Meter"/>
<menu_item_check label="Barra de estatísticas" name="Statistics Bar"/>
- <menu_item_check label="Show Avatar Rendering Cost" name="Avatar Rendering Cost"/>
+ <menu_item_check label="Carga de renderização de avatar" name="Avatar Rendering Cost"/>
</menu>
<menu label="Realces e visibilidade" name="Highlighting and Visibility">
<menu_item_check label="Efeito baliza piscando" name="Cheesy Beacon"/>
@@ -171,15 +166,15 @@
<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"/>
- <menu_item_check label="Foot Shadows" name="Foot Shadows"/>
- <menu_item_check label="Fog" name="Fog"/>
- <menu_item_check label="Flexible Objects" name="Flexible Objects"/>
+ <menu_item_check label="Sombras nos pés" name="Foot Shadows"/>
+ <menu_item_check label="Neblina" name="Fog"/>
+ <menu_item_check label="Objetos flexíveis" name="Flexible Objects"/>
</menu>
<menu_item_check label="Executar diversas instâncias" name="Run Multiple Threads"/>
<menu_item_call label="Limpar cache de grupo" name="ClearGroupCache"/>
- <menu_item_check label="Mouse Smoothing" name="Mouse Smoothing"/>
- <menu_item_check label="Mostrar MIs no bate-papo" name="IMInChat"/>
+ <menu_item_check label="Smoothing de mouse" name="Mouse Smoothing"/>
<menu label="Atalhos" name="Shortcuts">
+ <menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/>
<menu_item_check label="Busca" name="Search"/>
<menu_item_call label="Soltar objeto" name="Release Keys"/>
<menu_item_call label="Interface tamanho padrão" name="Set UI Size to Default"/>
@@ -210,7 +205,7 @@
<menu label="Desenvolver" name="Develop">
<menu label="Painéis" name="Consoles">
<menu_item_check label="Painel de textura" name="Texture Console"/>
- <menu_item_check label="Debug Console" name="Debug Console"/>
+ <menu_item_check label="Console de depuração" name="Debug Console"/>
<menu_item_call label="Painel de avisos" name="Notifications"/>
<menu_item_check label="Painel de tamanho de textura" name="Texture Size"/>
<menu_item_check label="Painel de texturas" name="Texture Category"/>
@@ -219,10 +214,11 @@
<menu_item_call label="Region Info to Debug Console" name="Region Info to Debug Console"/>
<menu_item_check label="Câmera:" name="Camera"/>
<menu_item_check label="Vento" name="Wind"/>
+ <menu_item_check label="Crachá" name="Badge"/>
</menu>
<menu label="Show Info" name="Display Info">
<menu_item_check label="Mostrar hora" name="Show Time"/>
- <menu_item_check label="Show Render Info" name="Show Render Info"/>
+ <menu_item_check label="Dados de renderização" name="Show Render Info"/>
<menu_item_check label="Mostrar cor sob o cursor" name="Show Color Under Cursor"/>
<menu_item_check label="Mostrar mudanças a objetos" name="Show Updates"/>
</menu>
@@ -243,7 +239,7 @@
</menu>
<menu label="Rendering" name="Rendering">
<menu_item_check label="Axes" name="Axes"/>
- <menu_item_check label="Contornos" name="Wireframe"/>
+ <menu_item_check label="Wireframe" name="Wireframe"/>
<menu_item_check label="Global Illumination" name="Global Illumination"/>
<menu_item_check label="Texturas de animação" name="Animation Textures"/>
<menu_item_check label="Desativar texturas" name="Disable Textures"/>
@@ -251,11 +247,11 @@
<menu_item_check label="Render Attached Particles" name="Render Attached Particles"/>
<menu_item_check label="Objetos iridescentes" name="Hover Glow Objects"/>
</menu>
- <menu label="Network" name="Network">
+ <menu label="Rede" name="Network">
<menu_item_check label="Pausar avatar" name="AgentPause"/>
<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_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"/>
@@ -265,15 +261,15 @@
<menu label="Interface" name="UI">
<menu_item_call label="Teste de navegador web" name="Web Browser Test"/>
<menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/>
- <menu_item_call label="Memory Stats" name="Memory Stats"/>
+ <menu_item_call label="Dados de memória" name="Memory Stats"/>
<menu_item_check label="Double-Click Auto-Pilot" name="Double-ClickAuto-Pilot"/>
<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
<menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
</menu>
<menu label="XUI" name="XUI">
<menu_item_call label="Recarregar cores" name="Reload Color Settings"/>
- <menu_item_call label="Show Font Test" name="Show Font Test"/>
- <menu_item_call label="Load from XML" name="Load from XML"/>
+ <menu_item_call label="Teste de fonte" name="Show Font Test"/>
+ <menu_item_call label="Carregar de XML" name="Load from XML"/>
<menu_item_call label="Salvar para XML" name="Save to XML"/>
<menu_item_check label="Mostrar nomes XUI" name="Show XUI Names"/>
<menu_item_call label="Enviar MIs de teste" name="Send Test IMs"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 57130fb5cd..5f91ff09e5 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -11,18 +11,29 @@
</global>
<template name="okbutton">
<form>
- <button name="OK" text="$yestext"/>
+ <button name="OK_okbutton" text="$yestext"/>
+ </form>
+ </template>
+ <template name="okignore">
+ <form>
+ <button name="OK_okignore" text="$yestext"/>
</form>
</template>
- <template name="okignore"/>
<template name="okcancelbuttons">
<form>
- <button name="Cancel" text="$notext"/>
+ <button name="OK_okcancelbuttons" text="$yestext"/>
+ <button name="Cancel_okcancelbuttons" text="$notext"/>
+ </form>
+ </template>
+ <template name="okcancelignore">
+ <form>
+ <button name="OK_okcancelignore" text="$yestext"/>
+ <button name="Cancel_okcancelignore" text="$notext"/>
</form>
</template>
- <template name="okcancelignore"/>
<template name="okhelpbuttons">
<form>
+ <button name="OK_okhelpbuttons" text="$yestext"/>
<button name="Help" text="$helptext"/>
</form>
</template>
@@ -30,6 +41,7 @@
<form>
<button name="Yes" text="$yestext"/>
<button name="No" text="$notext"/>
+ <button name="Cancel_yesnocancelbuttons" text="$canceltext"/>
</form>
</template>
<notification functor="GenericAcknowledge" label="Notificação desconhecida" name="MissingAlert">
@@ -92,15 +104,18 @@ Por favor, selecione apenas um objeto e tente novamente.
Salvar todas as mudanças de roupas/ partes do corpo?
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Não Salvar" yestext="Salvar tudo"/>
</notification>
+ <notification name="FriendsAndGroupsOnly">
+ Residentes que não são amigos não veem que você decidiu ignorar ligações e MIs deles.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="GrantModifyRights">
- Conceder direitos de modificar a outros residentes lhes permite trocar, deletar ou pegar QUAISQUER objetos que você possa ter no mundo.
-Seja MUITO cuidadoso(a) quando passar esta permissão.
-Você deseja conceder direitos de modificar para [FIRST_NAME] [LAST_NAME]?
+ Conceder direitos de modificação a outros residentes vai autorizá-los a mudar, apagar ou pegar TODOS os seus objetos. Seja MUITO cuidadoso ao conceder esta autorização.
+Deseja modificar os direitos de modificação de [FIRST_NAME] [LAST_NAME]?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="GrantModifyRightsMultiple">
- Conceder direitos para modificar seus objetos a outro residente permite ele mudar QUAISQUER objetos que você possa ter no mundo. Tenha muito cuidado quando conceder essa permissão.
-Você deseja permitir que os residentes selecionados tenham direito de edição?
+ Conceder direitos de modificação a outros residentes vai autorizá-los a mudar TODOS os seus objetos. Seja MUITO cuidadoso ao conceder esta autorização.
+Deseja conceder direitos de modificação para os residentes selecionados?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="RevokeModifyRights">
@@ -150,14 +165,21 @@ Qualquer membro numa função com esta habilidade, pode atribuir a sí mesmo --
Adicionar esta habilidade a &apos;[ROLE_NAME]&apos;?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
- <notification name="ClickUnimplemented">
- Infelizmente isso ainda não foi implementado.
+ <notification name="AttachmentDrop">
+ Você está prestes a largar seu anexo.
+ Tem certeza de que quer prosseguir?
+ <usetemplate ignoretext="Confirmar antes de largar anexos" name="okcancelignore" notext="Não" yestext="Sim"/>
</notification>
<notification name="JoinGroupCanAfford">
Unir-se a esse grupo custa L$[COST].
Deseja prosseguir?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Unir-se"/>
</notification>
+ <notification name="JoinGroupNoCost">
+ Você está prestes a entrar no grupo [NAME].
+Deseja continuar?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Entrar"/>
+ </notification>
<notification name="JoinGroupCannotAfford">
Associar-se a este grupo custa L$[COST].
Você não tem L$ suficientes para associar-se a este grupo.
@@ -322,6 +344,10 @@ Tem certeza de que quer prosseguir?
Salvar as mudanças no classificado [NAME]?
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Não Salvar" yestext="Salvar"/>
</notification>
+ <notification name="ClassifiedInsufficientFunds">
+ Fundos insuficientes para pagar o anúncio.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="DeleteAvatarPick">
Apagar pegar [PICK]?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Delete"/>
@@ -339,14 +365,6 @@ Tem certeza de que quer prosseguir?
<notification name="SelectHistoryItemToView">
Por favor, selecione um item do histórico para exibí-lo.
</notification>
- <notification name="ResetShowNextTimeDialogs">
- Você gostaria de reabilitar todas estas pop ups que você indicou previamente como &apos;Não me mostrar novamente&apos;?
- <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
- </notification>
- <notification name="SkipShowNextTimeDialogs">
- Você gostaria de desabilitar todas as popups que podem ser puladas?
- <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
- </notification>
<notification name="CacheWillClear">
O cache será limpo quando o [APP_NAME] for iniciado.
</notification>
@@ -422,18 +440,17 @@ O objeto pode estar fora de alcance ou ter sido deletado.
Não foi possível escrever o arquivo [[FILE]]
</notification>
<notification name="UnsupportedHardware">
- Aviso: Seu sistema não é compatível com os requisitos mínimos exigidos pelo [APP_NAME]. Se você continuar usando o [APP_NAME] pode experimentar uma performance ruim. Infelizmente não podemos oferecer suporte técnico para configurações de sistema não suportado.
+ Sabe de uma coisa? Seu computador não tem os requisitos mínimos do [APP_NAME]. Talvez o desempenho seja um pouco sofrível. O suporte não pode atender pedidos de assistência técnicas em sistemas não suportados.
-MINSPECS
-Você deseja visitar [_URL] para maiores informações?
+Consultar [_URL] para mais informações?
<url name="url" option="0">
http://secondlife.com/support/sysreqs.php?lang=pt
</url>
<usetemplate ignoretext="O hardware do meu computador não é suportado" name="okcancelignore" notext="Não" yestext="Sim"/>
</notification>
<notification name="UnknownGPU">
- O [APP_NAME] não consegue reconhecer a placa de vídeo do seu computador.
-Isto acontece quando novos hardwares que ainda não foram testados no [APP_NAME]. O [APP_NAME] provavelmente vai funcionar com sua placa de vídeo, mas talvez seja necessário checar as configurações de vídeo.
+ A placa de vídeo do seu sistema não é reconhecida pelo [APP_NAME].
+Isto acontece quando novos hardwares que ainda não foram testados no [APP_NAME]. Talvez isso não cause problemas, mas pode ser preciso checar as configurações de vídeo.
( Eu &gt; Preferências &gt; Vídeo)
<form name="form">
<ignore name="ignore" text="Minha placa de vídeo não foi reconhecida."/>
@@ -605,6 +622,10 @@ Por favor tente novamente mais tarde.
<notification name="LandmarkCreated">
Você adicionou &quot;[LANDMARK_NAME]&quot; a sua pasta [FOLDER_NAME].
</notification>
+ <notification name="LandmarkAlreadyExists">
+ Você já tem um marco deste lugar.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="CannotCreateLandmarkNotOwner">
Você não pode criar um ponto de referência porque o proprietário do terreno não permite. Tente novamente a alguns metros de distância.
</notification>
@@ -652,7 +673,7 @@ Pesquisava por: [FINALQUERY]
Os termos de sua pesquisa eram muito curtos então nenhuma pesquisa foi feita.
</notification>
<notification name="CouldNotTeleportReason">
- Não é possível teletransportar-se.
+ O teletransporte falhou.
[REASON]
</notification>
<notification name="invalid_tport">
@@ -701,7 +722,8 @@ Nenhum lote selecionado.
Não é possível exigir a posse do terreno porque a seleção alcançou múltiplas regiões. Por favor, selecione uma área menor e tente novamente.
</notification>
<notification name="ForceOwnerAuctionWarning">
- Este lote está oferecido em leilão. Exigir a posse do terreno irá cancelar o leilão e possivelmente deixará alguns residentes infelizes, se os lances já começaram. Exigir posse?
+ Este lote vai a leilão. Forçar a mudança do dono cancela o leilão, podendo deixar residentes que já deram lances insatisfeitos.
+Deseja forçar mudança de dono?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Retomar"/>
</notification>
<notification name="CannotContentifyNothingSelected">
@@ -749,14 +771,6 @@ Selecionados vários lotes.
Tente selecionar um único lote.
</notification>
- <notification name="ParcelCanPlayMedia">
- Há mídia em stream disponível aqui.
-O streaming requer uma conexão rápida.
-
-Executar as mídias em stream detectadas?
-(Esta opção pode ser modificada sob Preferências &gt; Privacidade.)
- <usetemplate name="okcancelbuttons" notext="Desabilitar" yestext="Exibir Mídia"/>
- </notification>
<notification name="CannotDeedLandWaitingForServer">
Impossibilitado de passar a propriedade da terra:
Esperando pelo servidor informar de quem é a propriedade.
@@ -878,9 +892,8 @@ Unir a terra?
Em geral, essa é uma falha técnica temporária. Personalize e volte a salvar o item novamente dentro de alguns minutos.
</notification>
<notification name="YouHaveBeenLoggedOut">
- Você saiu do [SECOND_LIFE]:
+ Ah não! O [SECOND_LIFE] teve de fechar.
[MESSAGE]
-Ainda é possível ler suas MIs e o bate-papo. Para isso, clique &apos;Ver MIs e bate-papo&apos;. Ou clique em &apos;Sair&apos; para sair do [APP_NAME] completamente.
<usetemplate name="okcancelbuttons" notext="Sair" yestext="Exibir IM &amp; bate-papo"/>
</notification>
<notification name="OnlyOfficerCanBuyLand">
@@ -1031,6 +1044,7 @@ Transferir propriedade destes [AREA] m² de terreno para o grupo &apos;[GROUP_NA
</notification>
<notification name="ErrorMessage">
[ERROR_MESSAGE]
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AvatarMovedDesired">
Esse destino não está disponível no momento.
@@ -1268,19 +1282,19 @@ Salvar na pasta Aplicativos?
</notification>
<notification name="GroupLeaveConfirmMember">
Você é atualmente um membro do grupo [GROUP].
-Deixar este grupo?
- <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Deixar"/>
+Sair do grupo?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sair"/>
</notification>
<notification name="ConfirmKick">
- Você quer REALMENTE expulsar todos os usuários deste grid?
- <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar todos os usuários"/>
+ Tem CERTEZA de que deseja expulsar todos os residentes do grid?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Chutar todos"/>
</notification>
<notification name="MuteLinden">
Desculpe, nenhum Linden pode ser bloqueado.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="CannotStartAuctionAlreadyForSale">
- Você não pode começar um leilão com um lote que já foi colocado à venda. Desabilite a venda da terra se você tem certeza que deseja iniciar um leilão.
+ Você não pode começar um leilão com um lote que já foi colocado à venda. Desabilite a venda se você tem certeza que deseja fazer um leilão.
</notification>
<notification label="Falha ao bloquear objeto por nome" name="MuteByNameFailed">
Você já bloqueou este residente.
@@ -1304,13 +1318,16 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua
<usetemplate ignoretext="Passar meu status para o modo ocupado" name="okignore" yestext="OK"/>
</notification>
<notification name="JoinedTooManyGroupsMember">
- Você atingiu o limite máximo de grupos. Saia de outro grupo para poder entrar nesse ou recuse o convite.
-[NAME] está te convidando para ser membro do grupo.
-[INVITE]
+ Você atingiu o limite máximo de grupos. Saia de outro grupo para poder entrar nesse ou recuse o convite.
+[NAME] está te convidando para entrar em um grupo.
<usetemplate name="okcancelbuttons" notext="Recusar" yestext="Entrar"/>
</notification>
+ <notification name="JoinedTooManyGroups">
+ Você atingiu o limite máximo de grupos. Sai de um grupo para entrar ou criar outro.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="KickUser">
- Expulsar este usuário com qual mensagem?
+ Chutar este residente com qual mensagem?
<form name="form">
<input name="message">
Um administrador desligou você.
@@ -1330,7 +1347,7 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua
</form>
</notification>
<notification name="FreezeUser">
- Paralise este usuário com qual mensagem?
+ Congelar este residente com qual mensagem?
<form name="form">
<input name="message">
Você foi congelado. Você não pode se mover ou conversar. Um administrador irá contatá-lo via mensagem instantânea (MI).
@@ -1340,7 +1357,7 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua
</form>
</notification>
<notification name="UnFreezeUser">
- Liberar este usuário com qual mensagem?
+ Descongelar este residente com qual mensagem?
<form name="form">
<input name="message">
Você não está mais congelado.
@@ -1360,7 +1377,7 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua
</form>
</notification>
<notification name="OfferTeleportFromGod">
- God user convocou para a sua localização?
+ Convocar residente à sua localização com poderes de deus?
<form name="form">
<input name="message">
Junte-se a mim em [REGION]
@@ -1370,7 +1387,7 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua
</form>
</notification>
<notification name="TeleportFromLandmark">
- Você tem certeza que quer se teletransportar?
+ Tem certeza de quer ser teletransportado para &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
<usetemplate ignoretext="Confirmar se eu quero ser teletransportado para marcos" name="okcancelignore" notext="Cancelar" yestext="Teletransportar"/>
</notification>
<notification name="TeleportToPick">
@@ -1390,11 +1407,11 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua
</form>
</notification>
<notification label="Mudar propriedade Linden" name="ChangeLindenEstate">
- Você está prestes a mudar uma propriedade pertencente a Linden (continente, teen grid, orientação, etc.)
+ Você está prestes a modificar uma propriedade da Linden (continente, teen, grid, orientação, etc)
-Isto é EXTREMAMENTE PERIGOSO porque pode fundamentalmente afetar a experiência do usuário. No continente, vai mudar milhares de regiões e fazer o spaceserver soluçar.
+Esta ação é EXTREMAMENTE PERIGOSA -- ela pode afetar a experiência dos residentes. No continente, isso vai mudar milhares de regiões e deixar o spaceserver sobrecarregado.
-Proceder?
+Deseja prosseguir?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Mudar Propriedade"/>
</notification>
<notification label="Mudar o acesso à propriedade Linden" name="ChangeLindenAccess">
@@ -1573,8 +1590,10 @@ Publicar este classificado agora por L$ [AMOUNT]?
</form>
</notification>
<notification label="Modificar a maturidade da Região" name="RegionMaturityChange">
- A classificação de maturidade para esta região foi atualizada.
-Pode levar algum tempo para que a mudança seja refletida no mapa.
+ O conteúdo desta região foi reclassificado.
+Talvez leve algum tempo para a mudança ser refletida no mapa.
+
+Para ir a regiões de conteúdo Adulto, é preciso ter uma conta verificada, seja comprovando a idade ou com dados de pagamento.
</notification>
<notification label="Discordância de Versão de Voz" name="VoiceVersionMismatch">
Esta versão do [APP_NAME] não é compatível com o recurso &apos;Bate-papo de voz&apos; desta região. Para o bate-papo de voz funcionar, atualize o [APP_NAME].
@@ -1694,7 +1713,7 @@ Mover para o inventário o(s) item(s)?
<notification name="HelpReportAbuseEmailLL">
Use esta ferramenta para denunciar infrações dos [http://secondlife.com/corporate/tos.php Termos do Serviço] e das [http://secondlife.com/corporate/cs.php Normas da Comunidade].
-Todas as denúncias de abuso são investigadas e resolvidas. Para saber o que foi feito, consulte o [http://secondlife.com/support/incidentreport.php relatório de ocorrências].
+Todas as denúncias de abuso são investigadas e resolvidas.
</notification>
<notification name="HelpReportAbuseSelectCategory">
Por favor, selecione uma categoria para a reportagem deste abuso.
@@ -1929,8 +1948,7 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de
O gesto [NAME] não está no banco de dados.
</notification>
<notification name="UnableToLoadGesture">
- Impossível de carregar o gesto [NAME].
-Por favor, tente novamente.
+ Falhar ao carregar o gesto [NAME].
</notification>
<notification name="LandmarkMissing">
O landmark foi perdido na base de dados
@@ -2020,8 +2038,8 @@ Basta clicar em qualquer marco e depois clicar em &apos;Teletransportar&apos; na
(Também é possível clicar duas vezes no marco, ou clicar no marco com o botão direito e selecionar &apos;Teletransportar&apos;.)
</notification>
<notification name="TeleportToPerson">
- Para entrar em contato com residentes como &apos;&apos;[NAME]&apos;, abra o painel &apos;Pessoas&apos; à direita da tela.
-Selecione o residente da lista e clique em &apos;MI&apos; na parte de baixo do painel.
+ Para entrar em contato com residentes como &apos;&apos;[NAME]&apos;, abra o painel &apos;Pessoas&apos; à direita da tela.
+Selecione o residente da lista e clique em &apos;MI&apos; na parte de baixo do painel.
(Também é possível clicar duas vezes no nome, ou clicar no nome com o botão direito e selecionar &apos;MI&apos;.)
</notification>
<notification name="CantSelectLandFromMultipleRegions">
@@ -2091,7 +2109,7 @@ Instale o plugin novamente ou contate o fabricante se o problema persistir.
Os objetos no lote selecionado de terra que pertence a [FIRST] [LAST], voltaram ao seu inventário.
</notification>
<notification name="OtherObjectsReturned2">
- Os objetos no lote de terra selecionado que pertence ao residente &apos;[NAME]&apos;, voltaram aos seus donos.
+ Os objetos no lote selecionado, do residente [NAME], foram devolidos ao proprietãrio.
</notification>
<notification name="GroupObjectsReturned">
Os objetos no lote selecionado de terreno compartilhado pelo grupo [GROUPNAME], voltaram para os inventários de seus donos.
@@ -2103,7 +2121,7 @@ Objetos não transferíveis dados ao grupo foram deletados.
</notification>
<notification name="ServerObjectMessage">
Mensagem de [NAME]:
-[MSG]
+&lt;nolink&gt;[MSG]&lt;/nolink&gt;
</notification>
<notification name="NotSafe">
A opção &apos;danos&apos; desta região está ativada.
@@ -2233,9 +2251,9 @@ Por favor, tente novamente em alguns instantes.
[NAME_SLURL] lhe deu [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
- <button name="Keep" text="Mantenha"/>
<button name="Show" text="Mostrar"/>
<button name="Discard" text="Descarte"/>
+ <button name="Mute" text="Bloquear"/>
</form>
</notification>
<notification name="GodMessage">
@@ -2260,6 +2278,9 @@ Por favor, tente novamente em alguns instantes.
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification name="TeleportOfferSent">
+ Oferta de teletransporte enviada para [TO_NAME]
+ </notification>
<notification name="GotoURL">
[MESSAGE]
[URL]
@@ -2297,9 +2318,15 @@ Por favor, tente novamente em alguns instantes.
<notification name="FriendshipDeclined">
[NAME] recusou seu convite de amizade
</notification>
+ <notification name="FriendshipAcceptedByMe">
+ Oferta de amizada aceita.
+ </notification>
+ <notification name="FriendshipDeclinedByMe">
+ Oferta de amizada aceita.
+ </notification>
<notification name="OfferCallingCard">
- [FIRST] [LAST] está oferecendo seu cartão de visita.
-Isto adicionará uma anotação em seu inventário, de modo que você possa mandar rapidamente uma IM para este residente.
+ [FIRST] [LAST] estão te oferecendo um cartão de visita.
+Ele colocará um item de inventário, para você possa contatá-lo facilmente.
<form name="form">
<button name="Accept" text="Aceitar"/>
<button name="Decline" text="Recusar"/>
@@ -2371,22 +2398,6 @@ Deixar?
<button name="Ignore" text="Ignorar"/>
</form>
</notification>
- <notification name="ScriptToast">
- [FIRST] [LAST], &apos;[TITLE]&apos; está pedindo dados de usuário.
- <form name="form">
- <button name="Open" text="Abrir diálogo"/>
- <button name="Ignore" text="Ignorar"/>
- <button name="Block" text="Bloquear"/>
- </form>
- </notification>
- <notification name="FirstBalanceIncrease">
- Você acaba de ganhar L$[AMOUNT].
-Seu saldo em L$ está no canto direito superior.
- </notification>
- <notification name="FirstBalanceDecrease">
- Você acaba de pagar L$[AMOUNT].
-Seu saldo em L$ está no canto direito superior.
- </notification>
<notification name="BuyLindenDollarSuccess">
Obrigado e volte sempre!
@@ -2394,58 +2405,17 @@ Seu saldo L$ será atualizado findo o processamento da transação. Se o proces
Para checar o status do pagamento, consulte seu Histórico de transações no [http://secondlife.com/account/ Painel]
</notification>
- <notification name="FirstSit">
- Você está sentado(a).
-Use as teclas de seta (ou AWSD) para olhar à sua volta.
-Clique o botão &apos;Ficar de pé&apos; para ficar de pé.
- </notification>
- <notification name="FirstMap">
- Clique a arraste o mapa para olhar à sua volta.
-Clique duas vezes para se teletransportar.
-Use os controles à direita para achar coisas e exibir outros planos de fundo.
- </notification>
- <notification name="FirstBuild">
- Você abriu as Ferramentas de construção. Todos os objetos à sua volta foram criados com essas ferrametnas.
- </notification>
- <notification name="FirstTeleport">
- Você só pode se teletransportar para certas áreas nesta região. A seta aponta o seu destino específico. Clique na seta para ignorá-la.
- </notification>
<notification name="FirstOverrideKeys">
Suas chaves do movimento estão sendo seguras agora por um objeto.
Tente as teclas de setas ou AWSD para ver o que elas fazem.
Alguns objetos (como armas) requerem que você passe para mouselook para usá-los.
Pressione &apos;M&apos; para fazer isto.
</notification>
- <notification name="FirstAppearance">
- Você está editando sua aparência.
-Use as teclas de seta para olhar à sua volta.
-Quando terminar, clique em &apos;Salvar tudo&apos;.
- </notification>
- <notification name="FirstInventory">
- Este é seu inventário, onde ficam todos os seus pertences.
-
-* Para vestir uma peça, arraste-a para o seu corpo.
-* Para fazer rez de um objeto, arraste-o para o chão.
-* Para ler uma anotação, clique duas vezes nela.
- </notification>
<notification name="FirstSandbox">
Este é um sandbox, uma área onde residentes podem aprender a construir.
Qualquer objeto deixado aqui será apagado quando você sair. Não se esqueça de clicar duas vezes e selecionar &apos;Pegar&apos; para levar seu projeto para o seu inventário.
</notification>
- <notification name="FirstFlexible">
- Este objeto é flexível. Flexis devem ser phantom, não físicos.
- </notification>
- <notification name="FirstDebugMenus">
- Você abriu o menu Avançado.
-
-Para alternar este menu,
- Windows Ctrl+Alt+D
- Mac: ⌥⌘D
- </notification>
- <notification name="FirstSculptedPrim">
- Você está editando um prim esculpido. Prims esculpidos requerem uma textura especial para definir o formato.
- </notification>
<notification name="MaxListSelectMessage">
Você pode selecionar até [MAX_SELECT] itens desta lista.
</notification>
@@ -2552,6 +2522,10 @@ Para sua segurança, os SLurls serão bloqueados por alguns instantes.
<button name="respondbutton" text="Responder"/>
</form>
</notification>
+ <notification name="ConfirmCloseAll">
+ Tem certeza de que quer fechar todas as MIs?
+ <usetemplate ignoretext="Confirmar antes de fechar todas as MIs" name="okcancelignore" notext="Cancelar" yestext="OK"/>
+ </notification>
<notification name="AttachmentSaved">
Anexo salvo.
</notification>
diff --git a/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml
index aa8fd0b2d2..bd50d4953d 100644
--- a/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml
@@ -1,8 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <panel name="panel_call_buttons">
- <button label="Ligar" name="call_btn"/>
- <button label="Desligar" name="end_call_btn"/>
- <button label="Controles de voz" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="vertical_stack">
+ <layout_panel name="call_btn_panel">
+ <button label="Ligar" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Desligar" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Controles de voz" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
index ecaf062e41..06d8823a74 100644
--- a/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
@@ -22,4 +22,5 @@
[COUNT]anos
</string>
<text name="avatar_name" value="Desconhecido"/>
+ <button name="profile_btn" tool_tip="Ver perfil"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_bottomtray.xml b/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
index 2a66620800..092135bd42 100644
--- a/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
@@ -7,8 +7,13 @@
Mostra/oculta os controles de voz
</string>
<layout_stack name="toolbar_stack">
+ <layout_panel name="speak_panel">
+ <talk_button name="talk">
+ <speak_button label="Falar" label_selected="Falar" name="speak_btn"/>
+ </talk_button>
+ </layout_panel>
<layout_panel name="gesture_panel">
- <gesture_combo_box label="Gesto" name="Gesture" tool_tip="Mostra/oculta os gestos"/>
+ <gesture_combo_list label="Gesto" name="Gesture" tool_tip="Mostra/oculta os gestos"/>
</layout_panel>
<layout_panel name="movement_panel">
<button label="Movimentar" name="movement_btn" tool_tip="Mostra/oculta os controles de movimento"/>
@@ -19,5 +24,15 @@
<layout_panel name="snapshot_panel">
<button label="" name="snapshots" tool_tip="Tirar foto"/>
</layout_panel>
+ <layout_panel name="im_well_panel">
+ <chiclet_im_well name="im_well">
+ <button name="Unread IM messages" tool_tip="Conversas"/>
+ </chiclet_im_well>
+ </layout_panel>
+ <layout_panel name="notification_well_panel">
+ <chiclet_notification name="notification_well">
+ <button name="Unread" tool_tip="Notificações"/>
+ </chiclet_notification>
+ </layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml
new file mode 100644
index 0000000000..78d9826099
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray_lite">
+ <layout_stack name="toolbar_stack_lite">
+ <layout_panel name="gesture_panel">
+ <gesture_combo_list label="Gesto" name="Gesture" tool_tip="Mostra/oculta os gestos"/>
+ </layout_panel>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_classified_info.xml b/indra/newview/skins/default/xui/pt/panel_classified_info.xml
index 6f48a36182..191c005b1a 100644
--- a/indra/newview/skins/default/xui/pt/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/pt/panel_classified_info.xml
@@ -1,17 +1,48 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_classified_info">
+ <panel.string name="l$_price">
+ L$ [PRICE]
+ </panel.string>
+ <panel.string name="click_through_text_fmt">
+ [TELEPORT] teletransporte, [MAP] mapa, [PROFILE] perfil
+ </panel.string>
+ <panel.string name="date_fmt">
+ [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
+ </panel.string>
+ <panel.string name="auto_renew_on">
+ Ativado
+ </panel.string>
+ <panel.string name="auto_renew_off">
+ Desativado
+ </panel.string>
<text name="title" value="Dados do anúncio"/>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <text name="classified_name" value="[nome]"/>
- <text name="classified_location" value="[carregando...]"/>
- <text name="content_type" value="[content type]"/>
- <text name="category" value="[category]"/>
- <check_box label="Renovar automaticamente todas as semanas" name="auto_renew"/>
- <text name="price_for_listing" tool_tip="Preço do anúncio.">
- L$ [PRICE]
- </text>
- <text name="classified_desc" value="[descrição]"/>
+ <text_editor name="classified_name" value="[name]"/>
+ <text name="classified_location_label" value="Localização:"/>
+ <text_editor name="classified_location" value="[loading...]"/>
+ <text name="content_type_label" value="Tipo de conteúdo:"/>
+ <text_editor name="content_type" value="[content type]"/>
+ <text name="category_label" value="Categoria:"/>
+ <text_editor name="category" value="[category]"/>
+ <text name="creation_date_label" value="Data de criação"/>
+ <text_editor name="creation_date" tool_tip="Data de criação" value="[date]"/>
+ <text name="price_for_listing_label" value="Preço do anúncio:"/>
+ <text_editor name="price_for_listing" tool_tip="Preço do anúncio." value="[price]"/>
+ <layout_stack name="descr_stack">
+ <layout_panel name="clickthrough_layout_panel">
+ <text name="click_through_label" value="Cliques:"/>
+ <text_editor name="click_through_text" tool_tip="Dados de click-through" value="[clicks]"/>
+ </layout_panel>
+ <layout_panel name="price_layout_panel">
+ <text name="auto_renew_label" value="Renovação automática:"/>
+ <text name="auto_renew" value="Ativado"/>
+ </layout_panel>
+ <layout_panel name="descr_layout_panel">
+ <text name="classified_desc_label" value="Descrição:"/>
+ <text_editor name="classified_desc" value="[description]"/>
+ </layout_panel>
+ </layout_stack>
</panel>
</scroll_container>
<panel name="buttons">
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_classified.xml b/indra/newview/skins/default/xui/pt/panel_edit_classified.xml
index a754c5f070..f6fb223599 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_classified.xml
@@ -3,12 +3,20 @@
<panel.string name="location_notice">
(salvar para atualizar)
</panel.string>
+ <string name="publish_label">
+ Publicar
+ </string>
+ <string name="save_label">
+ Salvar
+ </string>
<text name="title">
Editar anúncio
</text>
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
- <icon label="" name="edit_icon" tool_tip="Selecione uma imagem"/>
+ <panel name="snapshot_panel">
+ <icon label="" name="edit_icon" tool_tip="Selecione uma imagem"/>
+ </panel>
<text name="Name:">
Cargo:
</text>
@@ -22,12 +30,19 @@
Carregando...
</text>
<button label="Usar configuração local" name="set_to_curr_location_btn"/>
+ <text name="category_label" value="Categoria:"/>
+ <text name="content_type_label" value="Tipo de conteúdo:"/>
+ <icons_combo_box label="Público geral" name="content_type">
+ <icons_combo_box.item label="Moderado" name="mature_ci" value="Adulto"/>
+ <icons_combo_box.item label="Público geral" name="pg_ci" value="Adequado para menores"/>
+ </icons_combo_box>
+ <text name="price_for_listing_label" value="Preço do anúncio:"/>
<spinner label="L$" name="price_for_listing" tool_tip="Preço do anúncio" value="50"/>
<check_box label="Renovação automática semanal" name="auto_renew"/>
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Salvar" name="save_changes_btn"/>
+ <button label="[LABEL]" name="save_changes_btn"/>
<button label="Cancelar" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
index f56533652d..96a294bc28 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Editar destaques" name="panel_edit_pick">
+ <panel.string name="location_notice">
+ (salvar para atualizar)
+ </panel.string>
<text name="title">
Editar destaques
</text>
@@ -22,7 +25,7 @@
</panel>
</scroll_container>
<panel label="bottom_panel" name="bottom_panel">
- <button label="Salvar [WHAT]" name="save_changes_btn"/>
+ <button label="Salvar destaque" name="save_changes_btn"/>
<button label="Cancelar" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
index d7e7d30a73..c9e5513424 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
@@ -34,9 +34,12 @@
</text>
<check_box label="Mostrar nos resultados de busca" name="show_in_search_checkbox"/>
<text name="title_acc_status_text" value="Minha conta:"/>
+ <text_editor name="acc_status_text" value="Residente. Dados de pagamento: não constam"/>
<text name="my_account_link" value="[[URL] Abrir meu painel]"/>
- <text name="acc_status_text" value="Residente. Dados de pagamento: não constam"/>
<text name="title_partner_text" value="Parceiro(a):"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(pesquisando)" name="partner_text"/>
+ </panel>
<text name="partner_edit_link" value="[[URL] Editar]"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml
index c11d800171..23cde50acc 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_tattoo_panel">
<panel name="avatar_tattoo_color_panel">
- <texture_picker label="Tatoo de cabeça" name="Head Tattoo" tool_tip="Clique para escolher uma foto"/>
- <texture_picker label="Tatoo da parte superior do corpo" name="Upper Tattoo" tool_tip="Clique para escolher uma foto"/>
- <texture_picker label="Tatoo da parte inferior do corpo" name="Lower Tattoo" tool_tip="Clique para escolher uma foto"/>
+ <texture_picker label="Tatuagem de cabeça" name="Head Tattoo" tool_tip="Clique para escolher uma foto"/>
+ <texture_picker label="Tatuagem superior" name="Upper Tattoo" tool_tip="Selecione uma foto"/>
+ <texture_picker label="Tatuagem inferior" name="Lower Tattoo" tool_tip="Selecione uma foto"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_friends.xml b/indra/newview/skins/default/xui/pt/panel_friends.xml
index 1bf7986825..34073f9ce1 100644
--- a/indra/newview/skins/default/xui/pt/panel_friends.xml
+++ b/indra/newview/skins/default/xui/pt/panel_friends.xml
@@ -16,5 +16,5 @@
<button label="Teletransportar" name="offer_teleport_btn" tool_tip="Oferecer a este amigo o teletransporte para sua localização atual" width="86"/>
<button label="Pagar" name="pay_btn" tool_tip="Dar Linden dólares (L$) a este amigo" width="86"/>
<button label="Tirar" name="remove_btn" tool_tip="Remover esta pessoa de sua lista de amigos" width="86"/>
- <button label="Adicionar" name="add_btn" tool_tip="Oferecer amizade a um residente" width="86"/>
+ <button label="Adicionar" name="add_btn" tool_tip="Oferecer amizade para um residente" width="86"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml
index 9dc53d54eb..502dae8d67 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml
@@ -1,9 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <button label="Perfil do grupo" name="group_info_btn"/>
- <panel name="panel_call_buttons">
- <button label="Ligar para o grupo" name="call_btn"/>
- <button label="Desligar" name="end_call_btn"/>
- <button label="Abrir controles de voz" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="vertical_stack">
+ <layout_panel name="group_info_btn_panel">
+ <button label="Perfil do grupo" name="group_info_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Ligar para o grupo" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Desligar" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Abrir controles de voz" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_general.xml b/indra/newview/skins/default/xui/pt/panel_group_general.xml
index 6ff4f82ba7..0b65b4aade 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_general.xml
@@ -11,13 +11,28 @@ Para obter mais ajuda, passe o mouse sobre as opções.
<panel.string name="incomplete_member_data_str">
Recuperando dados do membro
</panel.string>
+ <panel name="group_info_top">
+ <texture_picker label="" name="insignia" tool_tip="Selecionar imagem"/>
+ <text name="prepend_founded_by">
+ Fundador:
+ </text>
+ <name_box initial_value="(pesquisando)" name="founder_name"/>
+ <text name="join_cost_text">
+ Grátis
+ </text>
+ <button label="ENTRAR AGORA!" name="btn_join"/>
+ </panel>
<text_editor name="charter">
Declaração do grupo
</text_editor>
<name_list name="visible_members">
<name_list.columns label="Membro" name="name"/>
<name_list.columns label="Título" name="title"/>
+ <name_list.columns label="Status" name="status"/>
</name_list>
+ <text name="my_group_settngs_label">
+ Eu
+ </text>
<text name="active_title_label">
Meu cargo
</text>
@@ -25,10 +40,13 @@ Para obter mais ajuda, passe o mouse sobre as opções.
<check_box label="Receber avisos do grupo" name="receive_notices" tool_tip="Define o seu recebimento de avisos deste grupo. Desmarque esta opção se o grupo envia spam."/>
<check_box label="Mostrar no meu perfil" name="list_groups_in_profile" tool_tip="Define se você deseja incluir este grupo no seu perfil."/>
<panel name="preferences_container">
- <check_box label="Adesão aberta" name="open_enrollement" tool_tip="Controla a entrada de novos membros, com ou sem convite."/>
- <check_box label="Taxa de associação" name="check_enrollment_fee" tool_tip="Controla a cobrança de uma taxa de associação ao grupo."/>
+ <text name="group_settngs_label">
+ Grupo
+ </text>
+ <check_box label="Qualquer um pode entrar" name="open_enrollement" tool_tip="Controla a entrada de novos membros, com ou sem convite."/>
+ <check_box label="Taxa de inscrição" name="check_enrollment_fee" tool_tip="Controla a cobrança de uma taxa de associação ao grupo."/>
<spinner label="L$" left_delta="120" name="spin_enrollment_fee" tool_tip="Se a opção &apos;Taxa de associação&apos; estiver marcada, novos membros precisam pagar o valor definido para entrar no grupo." width="60"/>
- <combo_box name="group_mature_check" tool_tip="Define se a informação do seu grupo é considerada mature." width="170">
+ <combo_box name="group_mature_check" tool_tip="Define se os dados do seu grupo são conteúdo moderado." width="170">
<combo_box.item label="Conteúdo PG" name="pg"/>
<combo_box.item label="Conteúdo Mature" name="mature"/>
</combo_box>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
index c547e4c646..29d757346c 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Sobre o grupo" name="GroupInfo">
+<panel label="Perfil do grupo" name="GroupInfo">
<panel.string name="default_needs_apply_text">
- As mudanças feitas nesta guia ainda não foram salvas
+ Algumas modificações não foram salvas
</panel.string>
<panel.string name="want_apply_text">
Deseja salvar essas mudanças?
@@ -12,25 +12,24 @@
<panel.string name="group_join_free">
Grátis
</panel.string>
- <text name="group_name" value="Carregando..."/>
- <line_editor label="Digite o nome do grupo aqui" name="group_name_editor"/>
- <texture_picker label="" name="insignia" tool_tip="Selecionar imagem"/>
- <text name="prepend_founded_by">
- Fundador:
- </text>
- <name_box initial_value="(pesquisando)" name="founder_name"/>
- <text name="join_cost_text">
- Grátis
- </text>
- <button label="ENTRAR AGORA!" name="btn_join"/>
- <accordion name="groups_accordion">
- <accordion_tab name="group_general_tab" title="Público geral"/>
- <accordion_tab name="group_roles_tab" title="Cargos"/>
- <accordion_tab name="group_notices_tab" title="Avisos"/>
- <accordion_tab name="group_land_tab" title="Terrenos/Bens"/>
- </accordion>
- <panel name="button_row">
- <button label="Crie" label_selected="Novo grupo" name="btn_create"/>
- <button label="Salvar" label_selected="Salvar" name="btn_apply"/>
+ <panel name="group_info_top">
+ <text name="group_name" value="Carregando..."/>
+ <line_editor label="Digite o nome do grupo novo aqui" name="group_name_editor"/>
</panel>
+ <layout_stack name="layout">
+ <layout_panel name="group_accordions">
+ <accordion name="groups_accordion">
+ <accordion_tab name="group_general_tab" title="Geral"/>
+ <accordion_tab name="group_roles_tab" title="Cargos"/>
+ <accordion_tab name="group_notices_tab" title="Avisos"/>
+ <accordion_tab name="group_land_tab" title="Terrenos/Bens"/>
+ </accordion>
+ </layout_panel>
+ <layout_panel name="button_row">
+ <button label="Bate-papo" name="btn_chat"/>
+ <button label="Ligar para o grupo" name="btn_call" tool_tip="Ligar para este grupo"/>
+ <button label="Salvar" label_selected="Salvar" name="btn_apply"/>
+ <button label="Criar grupo" name="btn_create" tool_tip="Criar um grupo novo"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_invite.xml b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
index 4ed1b950a4..c7def0ed96 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
@@ -7,12 +7,10 @@
(carregando...)
</panel.string>
<panel.string name="already_in_group">
- Alguns avatares já estão nesse grupo e portanto não foram convidados.
+ Alguns dos residentes selecionados já estão no grupo, portanto não receberam convite.
</panel.string>
<text name="help_text" width="214">
- Voce pode selecionar vários residentes
-para convidar ao seu grupo. Clique
-&apos;Abrir Seletor de Residente&apos; para iniciar.
+ Selecione um ou mais residentes para convidar. Clique em &apos;Abrir seletor de residentes&apos; para começar.
</text>
<button label="Abrir Seletor de Residente" name="add_button" tool_tip=""/>
<name_list name="invitee_list" tool_tip="Pressione Ctrl enquanto clica nos nomes dos residentes"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
index aa7c7de75f..6f21b78b10 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
@@ -1,64 +1,62 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Terra &amp; L$" name="land_money_tab">
- <string name="help_text">
+ <panel.string name="help_text">
Será exibido um aviso até o Total de terrenos usados for igual ou inferior à contribuição total.
- </string>
- <button label="?" name="help_button"/>
- <string name="cant_view_group_land_text">
+ </panel.string>
+ <panel.string name="cant_view_group_land_text">
Você não está autorizado a acessar terrenos de grupos
- </string>
- <string name="cant_view_group_accounting_text">
+ </panel.string>
+ <panel.string name="cant_view_group_accounting_text">
Você não está autorizado a acessar os dados de contabilidade do grupo.
- </string>
- <string name="loading_txt">
+ </panel.string>
+ <panel.string name="loading_txt">
Carregando...
- </string>
- <text name="group_land_heading" width="250">
- Terra percentente ao grupo
- </text>
- <scroll_list name="group_parcel_list">
- <column label="Lote" name="name"/>
- <column label="Região" name="location"/>
- <column label="Tipo" name="type"/>
- <column label="Ãrea" name="area"/>
- </scroll_list>
- <button label="Mapa" label_selected="Mapa" left="282" name="map_button" width="130"/>
- <text name="total_contributed_land_label">
- Total contribuído:
- </text>
- <text name="total_contributed_land_value">
- [AREA] m²
- </text>
- <text name="total_land_in_use_label">
- Total em uso:
- </text>
- <text name="total_land_in_use_value">
- [AREA] m²
- </text>
- <text name="land_available_label">
- Disponíveis:
- </text>
- <text name="land_available_value">
- [AREA] m²
- </text>
- <text name="your_contribution_label">
- Sua contribuição:
- </text>
- <string name="land_contrib_error">
+ </panel.string>
+ <panel.string name="land_contrib_error">
Não foi possível definir sua contribuição
- </string>
- <text name="your_contribution_units">
- m²
- </text>
- <text name="your_contribution_max_value">
- ([AMOUNT] max)
- </text>
- <text name="group_over_limit_text">
- O terreno em uso requer mais créditos
- </text>
- <text name="group_money_heading">
- Grupo L$
- </text>
+ </panel.string>
+ <panel name="layout_panel_landmoney">
+ <scroll_list name="group_parcel_list">
+ <scroll_list.columns label="Lote" name="name"/>
+ <scroll_list.columns label="Região" name="location"/>
+ <scroll_list.columns label="Tipo" name="type"/>
+ <scroll_list.columns label="Ãrea:" name="area"/>
+ </scroll_list>
+ <text name="total_contributed_land_label">
+ Total contribuído:
+ </text>
+ <text name="total_contributed_land_value">
+ [AREA] m²
+ </text>
+ <button label="Mapa" label_selected="Mapa" name="map_button"/>
+ <text name="total_land_in_use_label">
+ Total em uso:
+ </text>
+ <text name="total_land_in_use_value">
+ [AREA] m²
+ </text>
+ <text name="land_available_label">
+ Disponíveis:
+ </text>
+ <text name="land_available_value">
+ [AREA] m²
+ </text>
+ <text name="your_contribution_label">
+ Sua contribuição:
+ </text>
+ <text name="your_contribution_units">
+ m²
+ </text>
+ <text name="your_contribution_max_value">
+ ([AMOUNT] max)
+ </text>
+ <text name="group_over_limit_text">
+ O terreno em uso requer mais créditos
+ </text>
+ <text name="group_money_heading">
+ L$ do grupo
+ </text>
+ </panel>
<tab_container name="group_money_tab_container">
<panel label="PLANEJAMENTO" name="group_money_planning_tab">
<text_editor name="group_money_planning_text">
diff --git a/indra/newview/skins/default/xui/pt/panel_group_list_item.xml b/indra/newview/skins/default/xui/pt/panel_group_list_item.xml
index c9fd7cdfe3..19c34d2f10 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_list_item.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="group_list_item">
<text name="group_name" value="Desconhecido"/>
+ <button name="profile_btn" tool_tip="Ver perfil"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_notices.xml b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
index 66252a0473..4b5a00c761 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
@@ -19,10 +19,10 @@ Cada grupo pode enviar no máximo 200 avisos/dia
Nenhum resultado foi encontrado.
</text>
<button label="Criar um novo aviso" label_selected="Criar nova notícia" name="create_new_notice" tool_tip="Criar um novo aviso"/>
- <button label="Atualizar" label_selected="Atualizar Lista" name="refresh_notices" tool_tip="Atualizar lista de avisos"/>
+ <button label="Atualizar" label_selected="Atualizar lista" name="refresh_notices" tool_tip="Atualizar lista de avisos"/>
<panel label="Criar nova notícia" name="panel_create_new_notice">
<text name="lbl">
- Criar uma notícia
+ Criar notícia
</text>
<text left="20" name="lbl3">
Assunto:
@@ -39,11 +39,11 @@ Cada grupo pode enviar no máximo 200 avisos/dia
<text name="string">
Arrastar e soltar o item aqui para anexá-lo:
</text>
- <button label="Tirar" label_selected="Remover o anexo" name="remove_attachment"/>
+ <button label="Tirar" label_selected="Remover o anexo" name="remove_attachment" tool_tip="Remover anexo da notificação."/>
<button label="Enviar" label_selected="Enviar" name="send_notice"/>
<group_drop_target name="drop_target" tool_tip="Arrastar um item do inventário para a caixa para enviá-lo com o aviso. É preciso ter autorização de cópia e transferência do item para anexá-lo ao aviso."/>
</panel>
- <panel label="Visualizar Notícia Anterior" name="panel_view_past_notice">
+ <panel label="Visualizar notícia anterior" name="panel_view_past_notice">
<text name="lbl">
Notícia arquivada
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
index cf9e9f2b8d..9c3792ec43 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Membros e Funções" name="roles_tab">
<panel.string name="default_needs_apply_text">
- As mudanças feitas nesta guia ainda não foram salvas
+ Algumas modificações não foram salvas
</panel.string>
<panel.string name="want_apply_text">
Deseja salvar essas mudanças?
@@ -52,7 +52,7 @@ Há uma grande variedade de habilidades.
</tab_container>
<panel name="members_footer">
<text name="static">
- Membros atribuídos
+ Cargos desempenhados
</text>
<text name="static2">
Habilidades permitidas
diff --git a/indra/newview/skins/default/xui/pt/panel_groups.xml b/indra/newview/skins/default/xui/pt/panel_groups.xml
index aaea1178a6..0aea0d53dd 100644
--- a/indra/newview/skins/default/xui/pt/panel_groups.xml
+++ b/indra/newview/skins/default/xui/pt/panel_groups.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="groups">
<text name="groupdesc" width="268">
- Seu grupo ativo atual es&apos;ta mostrado em negrito.
+ Seu grupo ativo atual está em negrito.
</text>
<text name="groupcount" width="300">
- Você pertence a [COUNT] grupos (de no máximo [MAX]).
+ Você pertence a [COUNT] grupos (máximo [MAX]).
</text>
- <button width="86" label="MI/Chamada" name="IM" tool_tip="Abrir sessão de Mensagem Instantânea"/>
+ <button width="86" label="MI/Ligação" name="IM" tool_tip="Abrir sessão de Mensagem Instantânea"/>
<button width="86" label="Informações" name="Info"/>
<button width="86" label="Ativar" name="Activate"/>
- <button width="86" label="Deixar" name="Leave"/>
+ <button width="86" label="Sair" name="Leave"/>
<button width="86" label="Criar..." name="Create"/>
<button width="86" label="Buscar..." name="Search..."/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml
index f7102f2fb2..2535340f4c 100644
--- a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml
@@ -1,13 +1,29 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Desconhecido"/>
- <button label="Perfil" name="view_profile_btn"/>
- <button label="Adicionar amigo" name="add_friend_btn"/>
- <button label="Teletransportar" name="teleport_btn"/>
- <button label="Compartilhar" name="share_btn"/>
- <panel name="panel_call_buttons">
- <button label="Ligar" name="call_btn"/>
- <button label="Desligar" name="end_call_btn"/>
- <button label="Controles de voz" name="voice_ctrls_btn"/>
- </panel>
+ <layout_stack name="button_stack">
+ <layout_panel name="view_profile_btn_panel">
+ <button label="Perfil" name="view_profile_btn"/>
+ </layout_panel>
+ <layout_panel name="add_friend_btn_panel">
+ <button label="Adicionar amigo" name="add_friend_btn"/>
+ </layout_panel>
+ <layout_panel name="teleport_btn_panel">
+ <button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
+ </layout_panel>
+ <layout_panel name="share_btn_panel">
+ <button label="Compartilhar" name="share_btn"/>
+ </layout_panel>
+ <layout_panel name="pay_btn_panel">
+ <button label="Pagar" name="pay_btn"/>
+ </layout_panel>
+ <layout_panel name="call_btn_panel">
+ <button label="Ligar" name="call_btn"/>
+ </layout_panel>
+ <layout_panel name="end_call_btn_panel">
+ <button label="Desligar" name="end_call_btn"/>
+ </layout_panel>
+ <layout_panel name="voice_ctrls_btn_panel">
+ <button label="Controles de voz" name="voice_ctrls_btn"/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_landmark_info.xml b/indra/newview/skins/default/xui/pt/panel_landmark_info.xml
index 97e7f51beb..6196c06d09 100644
--- a/indra/newview/skins/default/xui/pt/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/pt/panel_landmark_info.xml
@@ -18,6 +18,7 @@
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</string>
+ <button name="back_btn" tool_tip="Atrás"/>
<text name="title" value="Perfil do Lugar"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
diff --git a/indra/newview/skins/default/xui/pt/panel_landmarks.xml b/indra/newview/skins/default/xui/pt/panel_landmarks.xml
index 693905e04c..3f357bcefe 100644
--- a/indra/newview/skins/default/xui/pt/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/pt/panel_landmarks.xml
@@ -2,7 +2,7 @@
<panel name="Landmarks">
<accordion name="landmarks_accordion">
<accordion_tab name="tab_favorites" title="Barra &apos;Destaques&apos;"/>
- <accordion_tab name="tab_landmarks" title="Marcos"/>
+ <accordion_tab name="tab_landmarks" title="Meus marcos"/>
<accordion_tab name="tab_inventory" title="Meu inventário"/>
<accordion_tab name="tab_library" title="Biblioteca"/>
</accordion>
diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml
index 3540a338ea..61cdbaef13 100644
--- a/indra/newview/skins/default/xui/pt/panel_login.xml
+++ b/indra/newview/skins/default/xui/pt/panel_login.xml
@@ -12,12 +12,19 @@
Primeiro nome:
</text>
<line_editor label="Nome" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/>
+ <text name="last_name_text">
+ Sobrenome:
+ </text>
<line_editor label="Sobrenome" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/>
- <check_box label="Lembrar" name="remember_check"/>
+ <text name="password_text">
+ Senha:
+ </text>
+ <check_box label="Lembrar senha" name="remember_check"/>
<text name="start_location_text">
Começar em:
</text>
<combo_box name="start_location_combo">
+ <combo_box.item label="Última posição" name="MyLastLocation"/>
<combo_box.item label="Minha casa" name="MyHome"/>
</combo_box>
<button label="conectar" name="connect_btn"/>
@@ -26,6 +33,9 @@
<text name="create_new_account_text">
Cadastre-se
</text>
+ <text name="forgot_password_text">
+ Esqueceu seu nome ou senha?
+ </text>
<text name="login_help">
Precisa de ajuda ao conectar?
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_main_inventory.xml b/indra/newview/skins/default/xui/pt/panel_main_inventory.xml
index 1bc080886d..104c3bface 100644
--- a/indra/newview/skins/default/xui/pt/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/panel_main_inventory.xml
@@ -1,18 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Coisas" name="main inventory panel">
- <panel.string name="Title">
- Coisas
+ <panel.string name="ItemcountFetching">
+ Reunindo [ITEM_COUNT] itens ... [FILTER]
</panel.string>
- <filter_editor label="Filtro" name="inventory search editor"/>
- <tab_container name="inventory filter tabs">
- <inventory_panel label="Todos os itens" name="All Items"/>
- <inventory_panel label="Itens recentes" name="Recent Items"/>
- </tab_container>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
- <button name="add_btn" tool_tip="Adicionar novo item"/>
- <dnd_button name="trash_btn" tool_tip="Remover item selecionado"/>
- </panel>
+ <panel.string name="ItemcountCompleted">
+ [ITEM_COUNT] itens [FILTER]
+ </panel.string>
+ <text name="ItemcountText">
+ Itens:
+ </text>
<menu_bar name="Inventory Menu">
<menu label="Arquivo" name="File">
<menu_item_call label="Abrir" name="Open"/>
@@ -32,7 +28,7 @@
<menu label="Crie" name="Create">
<menu_item_call label="Nova pasta" name="New Folder"/>
<menu_item_call label="Novo script" name="New Script"/>
- <menu_item_call label="Nova nota" name="New Note"/>
+ <menu_item_call label="Nova anotação" name="New Note"/>
<menu_item_call label="Novo gesto" name="New Gesture"/>
<menu label="Novas roupas" name="New Clothes">
<menu_item_call label="Nova camisa" name="New Shirt"/>
@@ -48,7 +44,7 @@
<menu_item_call label="Nova tatuagem" name="New Tattoo"/>
</menu>
<menu label="Nova parte do corpo" name="New Body Parts">
- <menu_item_call label="Nova silhueta" name="New Shape"/>
+ <menu_item_call label="Nova forma" name="New Shape"/>
<menu_item_call label="Nova pele" name="New Skin"/>
<menu_item_call label="Novo cabelo" name="New Hair"/>
<menu_item_call label="Novos olhos" name="New Eyes"/>
@@ -61,4 +57,14 @@
<menu_item_check label="Pastas do sistema no topo" name="System Folders To Top"/>
</menu>
</menu_bar>
+ <filter_editor label="Filtro" name="inventory search editor"/>
+ <tab_container name="inventory filter tabs">
+ <inventory_panel label="Todos os itens" name="All Items"/>
+ <inventory_panel label="Itens recentes" name="Recent Items"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
+ <button name="add_btn" tool_tip="Adicionar novo item"/>
+ <dnd_button name="trash_btn" tool_tip="Remover item selecionado"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_me.xml b/indra/newview/skins/default/xui/pt/panel_me.xml
index c3fda2e886..412f75ca78 100644
--- a/indra/newview/skins/default/xui/pt/panel_me.xml
+++ b/indra/newview/skins/default/xui/pt/panel_me.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Meu perfil" name="panel_me">
<tab_container name="tabs">
- <panel label="PERFIL" name="panel_profile"/>
- <panel label="DESTAQUES" name="panel_picks"/>
+ <panel label="MEU PERFIL" name="panel_profile"/>
+ <panel label="MEUS DESTAQUES" name="panel_picks"/>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml
index 9815b8d0b4..43c0820036 100644
--- a/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Público geral" name="Media Settings General">
+<panel label="Geral" name="Media Settings General">
<text name="home_label">
Página web:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_security.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_security.xml
index adc93cc2f0..646969946c 100644
--- a/indra/newview/skins/default/xui/pt/panel_media_settings_security.xml
+++ b/indra/newview/skins/default/xui/pt/panel_media_settings_security.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Segurança" name="Media Settings Security">
- <check_box initial_value="false" label="Acesso restrito a URLs especificados (pelo prefixo)" name="whitelist_enable"/>
+ <check_box initial_value="false" label="Acesso permitido a URLs com padrão específico" name="whitelist_enable"/>
<text name="home_url_fails_some_items_in_whitelist">
URLs com falha de acesso na página inicial são indicados com um:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_my_profile.xml b/indra/newview/skins/default/xui/pt/panel_my_profile.xml
index 8fd30873a7..b1ca318add 100644
--- a/indra/newview/skins/default/xui/pt/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_my_profile.xml
@@ -1,37 +1,35 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Perfil" name="panel_profile">
<string name="no_partner_text" value="Nenhum"/>
+ <string name="no_group_text" value="Nenhum"/>
<string name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <panel name="second_life_image_panel">
- <icon label="" name="2nd_life_edit_icon" tool_tip="Clique no botão Editar para trocar a imagem"/>
- </panel>
- <panel name="first_life_image_panel">
- <icon label="" name="real_world_edit_icon" tool_tip="Clique no botão Editar para trocar a imagem"/>
- <text name="title_rw_descr_text" value="Mundo real:"/>
- </panel>
- <text name="me_homepage_text">
- Página web:
- </text>
- <text name="title_member_text" value="Membro desde:"/>
- <text name="title_acc_status_text" value="Conta:"/>
- <text name="acc_status_text" value="Residente. Dados de pagamento: não constam"/>
- <text name="title_partner_text" value="Parceiro(a):"/>
- <text name="title_groups_text" value="Grupos:"/>
- </panel>
- </scroll_container>
- <panel name="profile_buttons_panel">
- <button label="Adicionar amigo" name="add_friend"/>
- <button label="MI" name="im"/>
- <button label="Ligar" name="call"/>
- <button label="Mapa" name="show_on_map_btn"/>
- <button label="Teletransportar" name="teleport"/>
- </panel>
- <panel name="profile_me_buttons_panel">
- <button label="Editar perfil" name="edit_profile_btn" tool_tip="Editar dados pessoais"/>
- <button label="Editar aparência" name="edit_appearance_btn" tool_tip="Criar/editar aparência: corpo, roupa, etc."/>
- </panel>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="scroll_content_panel">
+ <panel name="second_life_image_panel">
+ <icon label="" name="2nd_life_edit_icon" tool_tip="Clique no botão Editar para trocar a imagem"/>
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <icon label="" name="real_world_edit_icon" tool_tip="Clique no botão Editar para trocar a imagem"/>
+ <text name="title_rw_descr_text" value="Mundo real:"/>
+ </panel>
+ <text name="title_member_text" value="Residente desde:"/>
+ <text name="title_acc_status_text" value="Conta:"/>
+ <text name="title_partner_text" value="Parceiro(a):"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(pesquisando)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Grupos:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Editar perfil" name="edit_profile_btn" tool_tip="Editar dados pessoais"/>
+ <button label="Editar aparência" name="edit_appearance_btn" tool_tip="Criar/editar aparência: físico, roupas, etc."/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml b/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml
index 49e1d916c7..511c4426bb 100644
--- a/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml
@@ -1,15 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="navigation_bar">
<panel name="navigation_panel">
- <button name="back_btn" tool_tip="Voltar para região anterior"/>
- <button name="forward_btn" tool_tip="Avançar uma região"/>
+ <pull_button name="back_btn" tool_tip="Voltar para região anterior"/>
+ <pull_button name="forward_btn" tool_tip="Avançar uma região"/>
<button name="home_btn" tool_tip="Teletransportar para minha casa"/>
<location_input label="Onde" name="location_combo"/>
<search_combo_box label="Busca" name="search_combo_box" tool_tip="Busca">
<combo_editor label="Buscar no [SECOND_LIFE]" name="search_combo_editor"/>
</search_combo_box>
</panel>
- <favorites_bar name="favorite">
+ <favorites_bar name="favorite" tool_tip="Arraste marcos para cá para acessar seus lugares preferidos do Second Life!">
+ <label name="favorites_bar_label" tool_tip="Arraste marcos para cá para acessar seus lugares preferidos do Second Life!">
+ Barra Destaques
+ </label>
<chevron_button name="&gt;&gt;" tool_tip="Mostrar mais favoritos"/>
</favorites_bar>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml
index a8c74d50e4..9b993488be 100644
--- a/indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml
@@ -1,11 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="chat_bar">
- <string name="min_width">
- 192
- </string>
- <string name="max_width">
- 320
- </string>
<line_editor label="Clique aqui para bater papo." name="chat_box" tool_tip="Tecle Enter para falar, Ctrl+Enter para gritar"/>
<button name="show_nearby_chat" tool_tip="Mostra/oculta o histórico do bate-papo local"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml
new file mode 100644
index 0000000000..34db606d8b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="nearby_media">
+ <string name="empty_item_text">
+ &lt;vazio&gt;
+ </string>
+ <string name="parcel_media_name">
+ Mídia em stream deste lote
+ </string>
+ <string name="parcel_audio_name">
+ Ãudio em stream do lote
+ </string>
+ <string name="playing_suffix">
+ (em execução)
+ </string>
+ <panel name="minimized_controls">
+ <button label="Parar tudo" name="all_nearby_media_disable_btn" tool_tip="Desligar mídias por perto"/>
+ <button label="Executar tudo" name="all_nearby_media_enable_btn" tool_tip="Ligar mídias por perto"/>
+ <button name="open_prefs_btn" tool_tip="Preferências de mídia"/>
+ <button label="Mais &gt;&gt;" label_selected="Menos &lt;&lt;" name="more_less_btn" tool_tip="Controles avançados"/>
+ </panel>
+ <panel name="nearby_media_panel">
+ <text name="nearby_media">
+ Mídia por perto
+ </text>
+ <text name="show">
+ Mostrar:
+ </text>
+ <combo_box name="show_combo">
+ <combo_box.item label="Tudo" name="All"/>
+ <combo_box.item label="Neste lote" name="WithinParcel"/>
+ <combo_box.item label="Fora deste lote" name="OutsideParcel"/>
+ <combo_box.item label="Nos outros avatares" name="OnOthers"/>
+ </combo_box>
+ <scroll_list name="media_list">
+ <scroll_list.columns label="Proximidade" name="media_proximity"/>
+ <scroll_list.columns label="Visíveis" name="media_visibility"/>
+ <scroll_list.columns label="Classe" name="media_class"/>
+ <scroll_list.columns label="Nome" name="media_name"/>
+ <scroll_list.columns label="Depurar" name="media_debug"/>
+ </scroll_list>
+ <panel name="media_controls_panel">
+ <layout_stack name="media_controls">
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Parar mídia selecionada"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Tocar mídia selecionada"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Pausar mídia selecionada"/>
+ </layout_panel>
+ <layout_panel name="volume_slider_ctrl">
+ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume da mídia selecionada"/>
+ </layout_panel>
+ <layout_panel name="mute">
+ <button name="mute_btn" tool_tip="Silenciar mídia selecionada"/>
+ </layout_panel>
+ <layout_panel name="zoom">
+ <button name="zoom_btn" tool_tip="Enfocar mídia"/>
+ </layout_panel>
+ <layout_panel name="unzoom">
+ <button name="unzoom_btn" tool_tip="Desenfocar mídia selecionada"/>
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_notes.xml b/indra/newview/skins/default/xui/pt/panel_notes.xml
index a5b2542e77..9aa842d9a5 100644
--- a/indra/newview/skins/default/xui/pt/panel_notes.xml
+++ b/indra/newview/skins/default/xui/pt/panel_notes.xml
@@ -13,7 +13,7 @@
</scroll_container>
</panel>
<panel name="notes_buttons_panel">
- <button label="Adicionar" name="add_friend" tool_tip="Oferecer amizade ao residente"/>
+ <button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/>
<button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/>
<button label="Ligar" name="call" tool_tip="Ligar para este residente"/>
<button label="Mapa" name="show_on_map_btn" tool_tip="Exibir o residente no mapa"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_online_status.xml b/indra/newview/skins/default/xui/pt/panel_online_status.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_online_status.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_online_status_toast.xml b/indra/newview/skins/default/xui/pt/panel_online_status_toast.xml
new file mode 100644
index 0000000000..fdc489f375
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_online_status_toast.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
index 98a9be29c8..8d648a98fa 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
@@ -1,7 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="Outfits">
- <accordion name="outfits_accordion">
- <accordion_tab name="tab_cof" title="Vestimenta atual"/>
- <accordion_tab name="tab_outfits" title="Minhas vestimentas"/>
- </accordion>
+<panel label="Coisas" name="Outfits">
+ <tab_container name="appearance_tabs">
+ <inventory_panel label="MEUS LOOKS" name="outfitslist_tab"/>
+ <inventory_panel label="EM USO" name="cof_tab"/>
+ </tab_container>
+ <panel name="bottom_panel">
+ <button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
+ <dnd_button name="trash_btn" tool_tip="Remover item selecionado"/>
+ <button label="Salvar este look" name="make_outfit_btn" tool_tip="Salvar aparência como um look"/>
+ <button label="Vestir" name="wear_btn" tool_tip="Vestir look selecionado"/>
+ <button label="M" name="look_edit_btn"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml
index 5ef6edf9ec..736b8f1fdd 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml
@@ -4,6 +4,6 @@
<menu_item_call label="Adicionar ao look atual" name="add"/>
<menu_item_call label="Tirar do look atual" name="remove"/>
<menu_item_call label="Renomear" name="rename"/>
- <menu_item_call label="Tirar" name="remove_link"/>
- <menu_item_call label="Excluir" name="delete"/>
+ <menu_item_call label="Remover link" name="remove_link"/>
+ <menu_item_call label="Excluir visual" name="delete"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml
index 9d71c37c55..1516a2bb65 100644
--- a/indra/newview/skins/default/xui/pt/panel_people.xml
+++ b/indra/newview/skins/default/xui/pt/panel_people.xml
@@ -5,9 +5,10 @@
<string name="no_one_near" value="Ninguém por perto"/>
<string name="no_friends_online" value="Nenhum amigo online"/>
<string name="no_friends" value="Nenhum amigo"/>
- <string name="no_groups" value="Nenhum grupo"/>
<string name="people_filter_label" value="Filtro de pessoas"/>
<string name="groups_filter_label" value="Filtro de grupos"/>
+ <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Tente encontrar o grupo na Busca]"/>
+ <string name="no_groups_msg" value="[secondlife:///app/search/groups Tente procurar grupos que lhe interessam]"/>
<filter_editor label="Filtro" name="filter_input"/>
<tab_container name="tabs">
<panel label="PROXIMIDADE" name="nearby_panel">
@@ -16,18 +17,22 @@
<button name="add_friend_btn" tool_tip="Adicionar o residente selecionado para sua lista de amigos"/>
</panel>
</panel>
- <panel label="AMIGOS" name="friends_panel">
+ <panel label="MEUS AMIGOS" name="friends_panel">
<accordion name="friends_accordion">
<accordion_tab name="tab_online" title="Online"/>
<accordion_tab name="tab_all" title="Todos"/>
</accordion>
<panel label="bottom_panel" name="bottom_panel">
<button name="friends_viewsort_btn" tool_tip="Opções"/>
- <button name="add_btn" tool_tip="Oferecer amizade para o residente"/>
+ <button name="add_btn" tool_tip="Oferecer amizade para um residente"/>
<button name="del_btn" tool_tip="Remover a pessoa selecionada da sua lista de amigos"/>
</panel>
+ <text name="no_friends_msg">
+ Para adicionar amigos, use a [secondlife:///app/search/people busca de pessoas] ou clique em um residente para adicioná-lo.
+Para conhecer mais gente, use [secondlife:///app/worldmap o Mapa].
+ </text>
</panel>
- <panel label="GRUPOS" name="groups_panel">
+ <panel label="MEUS GRUPOS" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
<button name="groups_viewsort_btn" tool_tip="Opções"/>
<button name="plus_btn" tool_tip="Ingressar em um grupo/Criar novo grupo"/>
@@ -43,11 +48,12 @@
</tab_container>
<panel name="button_bar">
<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>
- <button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>
- <button label="Chamada" name="call_btn" tool_tip="Chamar este residente"/>
+ <button label="MI" name="im_btn" tool_tip="Iniciar MI"/>
+ <button label="Chamada" name="call_btn" tool_tip="Ligar para este residente"/>
<button label="Compartilhar" name="share_btn"/>
<button label="Teletransporte" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
<button label="Perfil do grupo" name="group_info_btn" tool_tip="Exibir informação de grupo"/>
- <button label="Bate- papo de grupo" name="chat_btn" tool_tip="abrir sessão de bate- papo"/>
+ <button label="Bate-papo de grupo" name="chat_btn" tool_tip="Iniciar bate-papo"/>
+ <button label="Ligar para o grupo" name="group_call_btn" tool_tip="Ligar para este grupo"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_place_profile.xml b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
index 371f7bdb1f..03f997f31b 100644
--- a/indra/newview/skins/default/xui/pt/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
@@ -6,7 +6,7 @@
<string name="available" value="disponível"/>
<string name="allocated" value="alocados"/>
<string name="title_place" value="Perfil da região"/>
- <string name="title_teleport_history" value="Localização do histórico de teletransportes"/>
+ <string name="title_teleport_history" value="Teletransportes"/>
<string name="not_available" value="(N\A)"/>
<string name="unknown" value="(Desconhecido)"/>
<string name="public" value="(público)"/>
@@ -41,6 +41,7 @@
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</string>
+ <button name="back_btn" tool_tip="Atrás"/>
<text name="title" value="Perfil da região"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
@@ -48,14 +49,14 @@
<text name="maturity_value" value="(Desconhecido)"/>
<accordion name="advanced_info_accordion">
<accordion_tab name="parcel_characteristics_tab" title="Lote">
- <panel>
+ <panel name="parcel_characteristics_panel">
<text name="rating_label" value="Classificação:"/>
- <text name="rating_value" value="(Desconhecido)"/>
+ <text name="rating_value" value="desconhecido"/>
<text name="voice_label" value="Voz:"/>
<text name="voice_value" value="Ligar"/>
<text name="fly_label" value="Voar:"/>
<text name="fly_value" value="Ligar"/>
- <text name="push_label" value="Push:"/>
+ <text name="push_label" value="Empurrar:"/>
<text name="push_value" value="Desligar"/>
<text name="build_label" value="Construir:"/>
<text name="build_value" value="Ligar"/>
@@ -67,17 +68,24 @@
</panel>
</accordion_tab>
<accordion_tab name="region_information_tab" title="Região">
- <panel>
+ <panel name="region_information_panel">
<text name="region_name_label" value="Região:"/>
+ <text name="region_name" value="Alcelândia"/>
<text name="region_type_label" value="Tipo:"/>
+ <text name="region_type" value="Alce"/>
<text name="region_rating_label" value="Classificação:"/>
+ <text name="region_rating" value="Adulto"/>
<text name="region_owner_label" value="Proprietário:"/>
+ <text name="region_owner" value="moose Van Moose"/>
<text name="region_group_label" value="Grupo:"/>
+ <text name="region_group">
+ The Mighty Moose of mooseville soundvillemoose
+ </text>
<button label="Região/Propriedade" name="region_info_btn"/>
</panel>
</accordion_tab>
<accordion_tab name="estate_information_tab" title="Propriedade">
- <panel>
+ <panel name="estate_information_panel">
<text name="estate_name_label" value="Propriedade:"/>
<text name="estate_rating_label" value="Classificação:"/>
<text name="estate_owner_label" value="Proprietário:"/>
@@ -85,14 +93,14 @@
</panel>
</accordion_tab>
<accordion_tab name="sales_tab" title="À venda">
- <panel>
+ <panel name="sales_panel">
<text name="sales_price_label" value="Preço:"/>
<text name="area_label" value="Ãrea:"/>
<text name="traffic_label" value="Trânsito:"/>
<text name="primitives_label" value="Prims:"/>
<text name="parcel_scripts_label" value="Scripts:"/>
<text name="terraform_limits_label" value="Limite de terraplenagem:"/>
- <text name="subdivide_label" value="Juntar/subdividir:"/>
+ <text name="subdivide_label" value="Capacidade de juntar/subdividir:"/>
<text name="resale_label" value="Revenda:"/>
<text name="sale_to_label" value="À venda para:"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml
index 5c0f3cd11d..9da4201c85 100644
--- a/indra/newview/skins/default/xui/pt/panel_places.xml
+++ b/indra/newview/skins/default/xui/pt/panel_places.xml
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Lugares" name="places panel">
<string name="landmarks_tab_title" value="MEUS MARCOS"/>
- <string name="teleport_history_tab_title" value="HISTÓRICO DE TELETRANSPORTES"/>
- <filter_editor label="Filtrar lugares" name="Filter"/>
+ <string name="teleport_history_tab_title" value="TELETRANSPORTES"/>
+ <filter_editor label="Filtrar meus lugares" name="Filter"/>
<panel name="button_panel">
- <button label="Teletransportar" name="teleport_btn"/>
+ <button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/>
<button label="Mapa" name="map_btn"/>
- <button label="Editar" name="edit_btn"/>
- <button label="Fechar" name="close_btn"/>
- <button label="Cancelar" name="cancel_btn"/>
+ <button label="Editar" name="edit_btn" tool_tip="Editar dados do marco"/>
+ <button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>
<button label="Salvar" name="save_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+ <button label="Fechar" name="close_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
index 431f3ca8e1..f30c218c81 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
@@ -1,27 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
-<panel name="advanced">
- <panel.string name="resolution_format">
- [RES_X] x [RES_Y]
- </panel.string>
+<panel label="Avançado" name="advanced">
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
- <check_box label="Balão de bate-papo" name="bubble_text_chat"/>
- <color_swatch name="background" tool_tip="Escolha a cor do balão de bate-papo"/>
- <slider label="Opacidade" name="bubble_chat_opacity"/>
- <text name="AspectRatioLabel1" tool_tip="largura / altura">
- Relação de aspecto
- </text>
- <combo_box name="aspect_ratio" tool_tip="largura / altura">
- <combo_box.item label="4:3 (CRT Padrão)" name="item1"/>
- <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
- <combo_box.item label="8:5 (tela ampla)" name="item3"/>
- <combo_box.item label="16:9 (tela ampla)" name="item4"/>
- </combo_box>
- <check_box label="Auto-detectar" name="aspect_auto_detect"/>
- <text name="heading1">
- Câmera:
- </text>
+ <panel.string name="middle_mouse">
+ Botão do meio do mouse
+ </panel.string>
<slider label="Ângulo de visão" name="camera_fov"/>
<slider label="Distância" name="camera_offset_scale"/>
<text name="heading2">
@@ -29,20 +13,20 @@
</text>
<check_box label="Construir/Editar" name="edit_camera_movement" tool_tip="Use o posicionamento automático da câmera quando entrar e sair do modo de edição"/>
<check_box label="Aparência" name="appearance_camera_movement" tool_tip="Use o posicionamento automático da câmera quando em modo de edição"/>
- <text name="heading3">
- Avatares:
- </text>
<check_box label="Mostre-me em visão de mouse" name="first_person_avatar_visible"/>
<check_box label="Teclas de seta sempre me movem" name="arrow_keys_move_avatar_check"/>
<check_box label="Dê dois toques e pressione para correr" name="tap_tap_hold_to_run"/>
- <check_box label="Mover os lábios do avatar quando estiver falando" name="enable_lip_sync"/>
+ <check_box label="Mover os lábios do avatar ao falar" name="enable_lip_sync"/>
+ <check_box label="Balão de bate-papo" name="bubble_text_chat"/>
+ <slider label="Opacidade" name="bubble_chat_opacity"/>
+ <color_swatch name="background" tool_tip="Cor do balão de bate-papo"/>
<check_box label="Mostrar erros de script" name="show_script_errors"/>
<radio_group name="show_location">
- <radio_item label="No bate papo" name="0"/>
- <radio_item label="Em uma janela" name="1"/>
+ <radio_item label="Bate-papo local" name="0"/>
+ <radio_item label="Janelas separadas" name="1"/>
</radio_group>
- <check_box label="Alternar para o modo microfone quando eu pressionar a tecla de falar:" name="push_to_talk_toggle_check" tool_tip="Quando em modo de alternância, pressione e solte o botão UMA vez para ligar e desligar o microfone. Quando em modo de alternância, o microfone só transmite sua enquanto o botão estiver pressionado."/>
- <line_editor label="Botao apertar e falar" name="modifier_combo"/>
- <button label="Definir chave" name="set_voice_hotkey_button"/>
- <button label="Botão do meio do mouse" name="set_voice_middlemouse_button"/>
+ <check_box label="Tecla liga/desliga da minha voz:" name="push_to_talk_toggle_check" tool_tip="Quando em modo de alternância, pressione e solte o botão UMA vez para ligar e desligar o microfone. Quando em modo de alternância, o microfone só transmite sua voz quando o botão estiver pressionado."/>
+ <line_editor label="Botão apertar e falar" name="modifier_combo"/>
+ <button label="Definir tecla" name="set_voice_hotkey_button"/>
+ <button label="Botão do meio do mouse" name="set_voice_middlemouse_button" tool_tip="Redefinir como botão do meio do mouse"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
index 4cb823d432..2ffe720ccf 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
@@ -6,9 +6,9 @@
<check_box label="Quando eu gasto ou recebo L$" name="notify_money_change_checkbox"/>
<check_box label="Quando meus amigos entram e saem" name="friends_online_notify_checkbox"/>
<text name="show_label">
- Sempre mostrar esses alertas:
+ Mostrar sempre:
</text>
<text name="dont_show_label">
- Nunca mostrar esses alertas:
+ Nunca mostrar:
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
index d6d8be7dc7..e566fde27c 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
@@ -1,10 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Chat" name="chat">
+ <text name="font_size">
+ Tamanho da fonte:
+ </text>
<radio_group name="chat_font_size">
- <radio_item label="Pequeno" name="radio"/>
- <radio_item label="Média" name="radio2"/>
- <radio_item label="Grande" name="radio3"/>
+ <radio_item label="Pequeno" name="radio" value="0"/>
+ <radio_item label="Médio" name="radio2" value="1"/>
+ <radio_item label="Grande" name="radio3" value="2"/>
</radio_group>
+ <text name="font_colors">
+ Cor da fonte:
+ </text>
<color_swatch label="Você" name="user"/>
<text name="text_box1">
Eu
@@ -38,9 +44,15 @@
URLs
</text>
<check_box initial_value="true" label="Executar animação digitada quando estiver conversando" name="play_typing_animation"/>
- <check_box label="Envie MIs por email quando eu estiver desconectado" name="send_im_to_email"/>
- <radio_group name="chat_window" tool_tip="Exibir cada bate-papo em uma janela ou em uma única janela com uma aba para cada pessoa (requer reinício)">
- <radio_item label="Janelas diferentes" name="radio"/>
- <radio_item label="Uma janela" name="radio2"/>
+ <check_box label="Enviar MIs por email se estiver desconectado" name="send_im_to_email"/>
+ <text name="show_ims_in_label">
+ Mostrar MIs em:
+ </text>
+ <text name="requires_restart_label">
+ (Reinicie para ativar)
+ </text>
+ <radio_group name="chat_window" tool_tip="Exibir cada bate-papo em uma janela separada ou exibir todos em uma única janela com uma aba para cada pessoa (requer reinício)">
+ <radio_item label="Janelas separadas" name="radio" value="0"/>
+ <radio_item label="Guias" name="radio2" value="1"/>
</radio_group>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
index 17f43943c1..5c69fa8de1 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Geral" name="general_panel">
<text name="language_textbox">
- Linguagem:
+ Idioma:
</text>
<combo_box name="language_combobox">
<combo_box.item label="Padrão" name="System Default Language"/>
@@ -20,44 +20,47 @@
(Reinicie para mostrar o novo idioma)
</text>
<text name="maturity_desired_prompt">
- Eu quero acessar conteúdo classificado:
+ Quero acessar conteúdo:
</text>
<text name="maturity_desired_textbox"/>
<combo_box name="maturity_desired_combobox">
- <combo_box.item label="PG, Mature e Adult" name="Desired_Adult"/>
- <combo_box.item label="PG e Mature" name="Desired_Mature"/>
- <combo_box.item label="PG" name="Desired_PG"/>
+ <combo_box.item label="Geral, Moderado e Adulto" name="Desired_Adult"/>
+ <combo_box.item label="Geral e Moderado" name="Desired_Mature"/>
+ <combo_box.item label="Geral" name="Desired_PG"/>
</combo_box>
<text name="start_location_textbox">
- Ponto de partida:
+ Posição inicial:
</text>
<combo_box name="start_location_combo">
- <combo_box.item label="Minha Última Localidade" name="MyLastLocation" tool_tip="Por padrão, registrar na minha última localidade."/>
- <combo_box.item label="Minha Casa" name="MyHome" tool_tip="Como padrão, registrar na minha casa."/>
+ <combo_box.item label="Última localização" name="MyLastLocation" tool_tip="Voltar ao lugar onde estava antes."/>
+ <combo_box.item label="Meu início" name="MyHome" tool_tip="Voltar ao meu início."/>
</combo_box>
<check_box initial_value="true" label="Mostrar ao entrar" name="show_location_checkbox"/>
<text name="name_tags_textbox">
Mostrar nomes:
</text>
<radio_group name="Name_Tag_Preference">
- <radio_item label="Desligar" name="radio"/>
- <radio_item label="Ligar" name="radio2"/>
- <radio_item label="Brevemente" name="radio3"/>
+ <radio_item label="Desligar" name="radio" value="0"/>
+ <radio_item label="Ligar" name="radio2" value="1"/>
+ <radio_item label="Brevemente" name="radio3" value="2"/>
</radio_group>
<check_box label="Mostrar meu nome" name="show_my_name_checkbox1"/>
- <check_box initial_value="true" label="Nomes pequenos" name="small_avatar_names_checkbox"/>
+ <check_box initial_value="true" label="Nome curto" name="small_avatar_names_checkbox"/>
<check_box label="Mostrar cargo" name="show_all_title_checkbox1"/>
<text name="effects_color_textbox">
Meus efeitos:
</text>
- <color_swatch label="" name="effect_color_swatch" tool_tip="Clique para abrir o seletor de cores"/>
<text name="title_afk_text">
Entrar no modo ausente em:
</text>
- <spinner label="Tempo para ficar Ausente:" name="afk_timeout_spinner"/>
- <text name="seconds_textbox">
- segundos
- </text>
+ <color_swatch label="" name="effect_color_swatch" tool_tip="Clique para abrir o seletor de cores"/>
+ <combo_box label="Entrar no modo ausente em:" name="afk">
+ <combo_box.item label="2 minutos" name="item0"/>
+ <combo_box.item label="5 minutos" name="item1"/>
+ <combo_box.item label="10 minutos" name="item2"/>
+ <combo_box.item label="30 minutos" name="item3"/>
+ <combo_box.item label="(nunca)" name="item4"/>
+ </combo_box>
<text name="text_box3">
Mensagem do modo ocupado:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
index 252415ae2d..121272bf6c 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
@@ -88,8 +88,8 @@ rápido
Detalhes de Iluminação:
</text>
<radio_group name="LightingDetailRadio">
- <radio_item label="Sol e Lua apenas" name="SunMoon"/>
- <radio_item label="Luzes locais nas proximidades" name="LocalLights"/>
+ <radio_item label="Sol e Lua apenas" name="SunMoon" value="0"/>
+ <radio_item label="Luzes locais nas proximidades" name="LocalLights" value="1"/>
</radio_group>
<text name="TerrainDetailText">
Detalhe do Terreno:
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
index fc83a0e97a..0cf2b7a4af 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
@@ -3,7 +3,7 @@
<panel.string name="log_in_to_change">
autentique-se para mudar
</panel.string>
- <button label="Limpar histórico" name="clear_cache"/>
+ <button label="Limpar histórico" name="clear_cache" tool_tip="Apagar imagem do login, última localização, histórico de teletransporte, cache de texturas e web"/>
<text name="cache_size_label_l">
(Locações, imagens, web, histórico de busca)
</text>
@@ -11,17 +11,16 @@
<check_box label="Apenas amigos e grupos podem me chamar ou enviar MI" name="voice_call_friends_only_check"/>
<check_box label="Desligar o microfone quando terminar chamadas" name="auto_disengage_mic_check"/>
<check_box label="Aceitar cookies" name="cookies_enabled"/>
- <check_box label="Permitir toque automático da mídia" name="autoplay_enabled"/>
<text name="Logs:">
Logs:
</text>
<check_box label="Salvar logs de bate- papo das proximidades no meu computador" name="log_nearby_chat"/>
<check_box label="Salvar logs de MI no meu computador" name="log_instant_messages"/>
<check_box label="Adicionar timestamp" name="show_timestamps_check_im"/>
- <line_editor left="278" name="log_path_string" right="-20"/>
<text name="log_path_desc">
- Localização dos logs
+ Localização dos logs:
</text>
+ <line_editor left="278" name="log_path_string" right="-20"/>
<button label="Navegar" label_selected="Navegar" name="log_path_button" width="120"/>
<button label="Lista dos bloqueados" name="block_list"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
index 002b3fa8a7..f03063d05b 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Entrada e câmera" name="Input panel">
+<panel label="Configurações" name="Input panel">
<button bottom_delta="-40" label="Outros dispositivos" name="joystick_setup_button" width="165"/>
<text name="Mouselook:">
Visão subjetiva:
@@ -18,29 +18,32 @@
kbps
</text>
<check_box label="Personalizar porta" name="connection_port_enabled"/>
- <spinner label="Número da porta:" name="web_proxy_port"/>
+ <spinner label="Número da porta:" name="connection_port"/>
<text name="cache_size_label_l">
Tamanho do cache
</text>
<text name="text_box5">
MB
</text>
- <button label="Navegar" label_selected="Navegar" name="set_cache"/>
- <button label="Redefinir" label_selected="Definir" name="reset_cache"/>
<text name="Cache location">
- Localização do cache
+ Localização do cache:
</text>
+ <button label="Procurar" label_selected="Procurar" name="set_cache"/>
+ <button label="Redefinir" label_selected="Redefinir" name="reset_cache"/>
<text name="Web:">
Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Usar navegador incluso" name="internal" tool_tip="Use este navegador para consultar a ajuda, abrir links da web, etc. As janelas abrem dentro do [APP_NAME]."/>
- <radio_item label="Usar meu navegador (IE, Firefox)" name="external" tool_tip="Use o navegador incluso para consultar a ajuda, abrir links da web, etc. Uso em tela inteira não recomendado."/>
+ <radio_item label="Usar meu navegador (IE, Firefox, Safari)" name="external" tool_tip="Use o navegador incluso para consultar a ajuda, abrir links da web, etc. Uso em tela inteira não recomendado." value="1"/>
+ <radio_item label="Usar navegador incluso" name="internal" tool_tip="Use este navegador para consultar a ajuda, abrir links da web, etc. As janelas abrem dentro do [APP_NAME]." value=""/>
</radio_group>
- <check_box initial_value="false" label="Proxy web" name="web_proxy_enabled"/>
- <line_editor name="web_proxy_editor" tool_tip="O nome ou endereço IP do proxy da sua preferência"/>
- <button label="Navegar" label_selected="Navegar" name="set_proxy"/>
+ <check_box initial_value="verdadeiro" label="Habilitar plugins" name="browser_plugins_enabled"/>
+ <check_box initial_value="verdadeiro" label="Aceitar cookies" name="cookies_enabled"/>
+ <check_box initial_value="verdadeiro" label="Habilitar Javascript" name="browser_javascript_enabled"/>
+ <check_box initial_value="false" label="Ativar web proxy" name="web_proxy_enabled"/>
<text name="Proxy location">
- Localização do proxy
+ Localização do proxy:
</text>
+ <line_editor name="web_proxy_editor" tool_tip="O nome ou endereço IP do proxy da sua preferência"/>
+ <spinner label="Porta:" name="web_proxy_port"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
index 37855672c9..5dbd3d4904 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
@@ -2,13 +2,20 @@
<panel label="Sons" name="Preference Media panel">
<slider label="Volume principal" name="System Volume"/>
<check_box initial_value="true" label="Silenciar ao minimizar" name="mute_when_minimized"/>
- <slider label="Ambiente" name="Wind Volume"/>
<slider label="Botões" name="UI Volume"/>
- <slider label="Mídia" name="Media Volume"/>
+ <slider label="Ambiente" name="Wind Volume"/>
<slider label="Efeitos sonoros" name="SFX Volume"/>
<slider label="Streaming de música" name="Music Volume"/>
- <check_box label="Voz" name="enable_voice_check"/>
- <slider label="Voz" name="Voice Volume"/>
+ <check_box label="Ativado" name="music_enabled"/>
+ <slider label="Mídia" name="Media Volume"/>
+ <check_box label="Ativado" name="enable_media"/>
+ <slider label="Bate-papo de voz" name="Voice Volume"/>
+ <check_box label="Ativado" name="enable_voice_check"/>
+ <check_box label="Autorizar auto-play de mídias" name="media_auto_play_btn" tool_tip="Marque esta opção para auto-executar mídias, se elas quiserem" value="verdadeiro"/>
+ <check_box label="Tocar mídia anexada em outros avatares" name="media_show_on_others_btn" tool_tip="Desmarque esta opção para ocultar mídias anexadas em avatares por perto" value="verdadeiro"/>
+ <text name="voice_chat_settings">
+ Configuração de bate-papo de voz
+ </text>
<text name="Listen from">
Ouvir a partir de:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
index d8013c974f..a1254b4da0 100644
--- a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
@@ -1,6 +1,47 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="MediaControls">
+ <string name="min_width">
+ 300
+ </string>
+ <string name="min_height">
+ 75
+ </string>
+ <string name="zoom_medium_padding">
+ 1.1
+ </string>
+ <string name="top_world_view_avoid_zone">
+ 50
+ </string>
+ <layout_stack name="progress_indicator_area">
+ <panel name="media_progress_indicator">
+ <progress_bar name="media_progress_bar" tool_tip="Carregando mídia"/>
+ </panel>
+ </layout_stack>
<layout_stack name="media_controls">
+ <layout_panel name="back">
+ <button name="back_btn" tool_tip="Navegar para trás"/>
+ </layout_panel>
+ <layout_panel name="fwd">
+ <button name="fwd_btn" tool_tip="Navegar para frente"/>
+ </layout_panel>
+ <layout_panel name="home">
+ <button name="home_btn" tool_tip="Página web:"/>
+ </layout_panel>
+ <layout_panel name="media_stop">
+ <button name="media_stop_btn" tool_tip="Parar mídia"/>
+ </layout_panel>
+ <layout_panel name="reload">
+ <button name="reload_btn" tool_tip="Recarregar"/>
+ </layout_panel>
+ <layout_panel name="stop">
+ <button name="stop_btn" tool_tip="Parar de carregar"/>
+ </layout_panel>
+ <layout_panel name="play">
+ <button name="play_btn" tool_tip="Tocar mídia"/>
+ </layout_panel>
+ <layout_panel name="pause">
+ <button name="pause_btn" tool_tip="Pausar mídia"/>
+ </layout_panel>
<layout_panel name="media_address">
<line_editor name="media_address_url" tool_tip="URL da mídia"/>
<layout_stack name="media_address_url_icons">
@@ -15,14 +56,24 @@
<layout_panel name="media_play_position">
<slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Andamento do vídeo"/>
</layout_panel>
+ <layout_panel name="skip_back">
+ <button name="skip_back_btn" tool_tip="Passo para trás"/>
+ </layout_panel>
+ <layout_panel name="skip_forward">
+ <button name="skip_forward_btn" tool_tip="Passo para frente"/>
+ </layout_panel>
<layout_panel name="media_volume">
<button name="media_mute_button" tool_tip="Silenciar esta mídia"/>
<slider name="volume_slider" tool_tip="Volume"/>
</layout_panel>
- </layout_stack>
- <layout_stack>
- <panel name="media_progress_indicator">
- <progress_bar name="media_progress_bar" tool_tip="Carregando mídia"/>
- </panel>
+ <layout_panel name="zoom_frame">
+ <button name="zoom_frame_btn" tool_tip="Enfocar mídia"/>
+ </layout_panel>
+ <layout_panel name="close">
+ <button name="close_btn" tool_tip="Menos zoom"/>
+ </layout_panel>
+ <layout_panel name="new_window">
+ <button name="new_window_btn" tool_tip="Abrir URL em navegador"/>
+ </layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_profile.xml b/indra/newview/skins/default/xui/pt/panel_profile.xml
index a9a5116d3c..805e3aaebd 100644
--- a/indra/newview/skins/default/xui/pt/panel_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_profile.xml
@@ -12,37 +12,41 @@
</string>
<string name="my_account_link_url" value="http://secondlife.com/my/account/index.php?lang=pt-BR"/>
<string name="no_partner_text" value="Ninguém"/>
+ <string name="no_group_text" value="Nenhum"/>
<string name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container name="profile_scroll">
- <panel name="scroll_content_panel">
- <panel name="second_life_image_panel">
- <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
- </panel>
- <panel name="first_life_image_panel">
- <text name="title_rw_descr_text" value="Mundo real:"/>
- </panel>
- <text name="me_homepage_text">
- Homepage:
- </text>
- <text name="title_member_text" value="Membro desde:"/>
- <text name="title_acc_status_text" value="Status da conta:"/>
- <text name="acc_status_text" value="Residente. Nenhuma info de pagamento no arquivo."/>
- <text name="title_partner_text" value="Parceiro:"/>
- <text name="title_groups_text" value="Grupos:"/>
- </panel>
- </scroll_container>
- <panel name="profile_buttons_panel">
- <button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade para o residente"/>
- <button label="MI" name="im" tool_tip="Abrir sessão de Mensagem instantânea"/>
- <button label="Chamada" name="call" tool_tip="Chamar este residente"/>
- <button label="Mapa" name="show_on_map_btn" tool_tip="exibir o residente no mapa"/>
- <button label="Teletransporte" name="teleport" tool_tip="Oferecer teletransporte"/>
- <button label="▼" name="overflow_btn" tool_tip="Pagar dinheiro ou compartilhar inventário com o residente"/>
- </panel>
- <panel name="profile_me_buttons_panel">
- <button label="Editar perfil" name="edit_profile_btn"/>
- <button label="Editar aparência" name="edit_appearance_btn"/>
- </panel>
+ <layout_stack name="layout">
+ <layout_panel name="profile_stack">
+ <scroll_container name="profile_scroll">
+ <panel name="profile_scroll_panel">
+ <panel name="second_life_image_panel">
+ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+ </panel>
+ <panel name="first_life_image_panel">
+ <text name="title_rw_descr_text" value="Mundo real:"/>
+ </panel>
+ <text name="title_member_text" value="Residente desde:"/>
+ <text name="title_acc_status_text" value="Conta:"/>
+ <text name="title_partner_text" value="Parceiro(a):"/>
+ <panel name="partner_data_panel">
+ <name_box initial_value="(pesquisando)" name="partner_text"/>
+ </panel>
+ <text name="title_groups_text" value="Grupos:"/>
+ </panel>
+ </scroll_container>
+ </layout_panel>
+ <layout_panel name="profile_buttons_panel">
+ <button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/>
+ <button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/>
+ <button label="Ligar" name="call" tool_tip="Ligar para este residente"/>
+ <button label="Mapa" name="show_on_map_btn" tool_tip="Exibir o residente no mapa"/>
+ <button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/>
+ <button label="▼" name="overflow_btn" tool_tip="Pagar ou compartilhar inventário com o residente"/>
+ </layout_panel>
+ <layout_panel name="profile_me_buttons_panel">
+ <button label="Editar perfil" name="edit_profile_btn" tool_tip="Editar dados pessoais"/>
+ <button label="Editar aparência" name="edit_appearance_btn" tool_tip="Criar/editar aparência: físico, roupas, etc."/>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_covenant.xml b/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
index 122cae940c..65ac89baf8 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
@@ -31,7 +31,7 @@
da propriedade.
</text>
<text bottom_delta="-36" name="covenant_instructions">
- Arrastar e soltar um notecard para alterar o Covenant para esta propriedade.
+ Arrastar e soltar uma anotação para alterar o contrato em vigor nesta propriedade.
</text>
<text bottom_delta="-36" name="region_section_lbl">
Região
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 c893472de1..e5d394865c 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Propriedade" name="Estate">
<text name="estate_help_text">
- Mudanças nas definições nesta guia irão afetar
-todas as regiões desta propriedade.
+ Mudar as opções desta guia afeta todas as regiões desta propriedade.
</text>
<text name="estate_text">
Propriedade:
@@ -26,7 +25,7 @@ todas as regiões desta propriedade.
<text name="Only Allow">
Restringir acesso a contas confirmardas por:
</text>
- <check_box label="Dados de pagamento fornecidos" name="limit_payment" tool_tip="Banir residentes sem identificação"/>
+ <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="Permitir conversa de voz" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
@@ -40,7 +39,7 @@ todas as regiões desta propriedade.
</string>
<button label="?" name="abuse_email_address_help"/>
<button label="Aplicar" name="apply_btn"/>
- <button label="Chutar usuário da propriedade..." name="kick_user_from_estate_btn"/>
+ <button label="Expulsar da propriedade..." name="kick_user_from_estate_btn"/>
<button label="Enviar mensagem à Propriedade" name="message_estate_btn"/>
<text name="estate_manager_label">
Gerentes da propriedade:
diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml
index 1a06d91aa8..d1a5eaa11e 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_general.xml
@@ -19,35 +19,25 @@
desconhecido
</text>
<check_box label="Bloquear Terraform" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
<check_box label="Bloquear Vôo" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
<check_box label="Permitir Dano" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
<check_box label="Restringir Empurrar" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
<check_box label="Permitir Revenda de Terra" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help"/>
<check_box label="Permitir Unir/Dividir Terra" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help"/>
<check_box label="Bloquear Mostrar Terra na Busca" name="block_parcel_search_check" tool_tip="Permitir que as pessoas vejam esta região e seus lotes nos resultados de busca"/>
- <button label="?" name="parcel_search_help"/>
<spinner label="Limit do Agente" name="agent_limit_spin"/>
- <button label="?" name="agent_limit_help"/>
<spinner label="Objeto Bonus" name="object_bonus_spin"/>
- <button label="?" name="object_bonus_help"/>
<text label="Maturidade" name="access_text">
Classificação:
</text>
- <combo_box label="Mature" name="access_combo">
- <combo_box.item label="Adult" name="Adult"/>
- <combo_box.item label="Mature" name="Mature"/>
- <combo_box.item label="PG" name="PG"/>
- </combo_box>
- <button label="?" name="access_help"/>
+ <icons_combo_box label="Mature" name="access_combo">
+ <icons_combo_box.item label="Adult" name="Adult" value="42"/>
+ <icons_combo_box.item label="Mature" name="Mature" value="21"/>
+ <icons_combo_box.item label="PG" name="PG" value="13"/>
+ </icons_combo_box>
<button label="Aplicar" name="apply_btn"/>
- <button label="Teletransportar um usuário para Casa..." name="kick_btn"/>
- <button label="Teletransportar Todos os Usuários..." name="kick_all_btn"/>
+ <button label="Teletransportar um residente para início..." name="kick_btn"/>
+ <button label="Teletransportar todos para início..." name="kick_all_btn"/>
<button label="Enviar Mensagem para a Região..." name="im_btn"/>
<button label="Gerenciar Telehub..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml
new file mode 100644
index 0000000000..d2d5fb649c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Região" name="General">
+ <text name="region_text_lbl">
+ Região:
+ </text>
+ <text name="region_text">
+ (Desconhecido)
+ </text>
+ <text name="version_channel_text_lbl">
+ Versão:
+ </text>
+ <text name="version_channel_text">
+ (Desconhecido)
+ </text>
+ <text name="region_type_lbl">
+ Tipo:
+ </text>
+ <text name="region_type">
+ (Desconhecido)
+ </text>
+ <check_box label="Bloquear terraplanagem" name="block_terraform_check"/>
+ <check_box label="Bloquear voos" name="block_fly_check"/>
+ <check_box label="Permitir danos" name="allow_damage_check"/>
+ <check_box label="Limitar empurrões" name="restrict_pushobject"/>
+ <check_box label="Permitir revenda de terrenos" name="allow_land_resell_check"/>
+ <check_box label="Permitir junção e divisão de terrenos" name="allow_parcel_changes_check"/>
+ <check_box label="Não mostrar nos resultados de pesquisa" name="block_parcel_search_check" tool_tip="Mostrar esta região e lotes nos resultados de pesquisa"/>
+ <spinner label="Limite do agente" name="agent_limit_spin"/>
+ <spinner label="Bônus do objeto" name="object_bonus_spin"/>
+ <text label="Nível de maturidade" name="access_text">
+ Classificação:
+ </text>
+ <combo_box label="Moderado" name="access_combo">
+ <combo_box.item label="Público adulto" name="Adult"/>
+ <combo_box.item label="Moderado" name="Mature"/>
+ <combo_box.item label="Geral" name="PG"/>
+ </combo_box>
+ <button label="Aplicar" name="apply_btn"/>
+ <button label="Teletransportar um residente para início..." name="kick_btn"/>
+ <button label="Teletransportar todos para início..." name="kick_all_btn"/>
+ <button label="Enviar mensagem para região..." name="im_btn"/>
+ <button label="Gerenciar telehub..." name="manage_telehub_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_texture.xml b/indra/newview/skins/default/xui/pt/panel_region_texture.xml
index 7f37919af2..35928ccc67 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_texture.xml
@@ -25,16 +25,16 @@
Escalas de Elevação de Terreno
</text>
<text name="height_text_lbl6">
- Sudeste
+ Noroeste
</text>
<text name="height_text_lbl7">
- Noroeste
+ Nordeste
</text>
<text name="height_text_lbl8">
Sudoeste
</text>
<text name="height_text_lbl9">
- Noroeste
+ Sudeste
</text>
<spinner label="Baixo" name="height_start_spin_0"/>
<spinner label="Baixo" name="height_start_spin_1"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml
new file mode 100644
index 0000000000..daf87c4dc6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="MEU AVATAR" name="script_limits_my_avatar_panel">
+ <text name="script_memory">
+ Uso de scripts
+ </text>
+ <text name="loading_text">
+ Carregando...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Tamanho (kb)" name="size"/>
+ <scroll_list.columns label="URLs" name="urls"/>
+ <scroll_list.columns label="Nome do objeto" name="name"/>
+ <scroll_list.columns label="Localização" name="location"/>
+ </scroll_list>
+ <button label="Atualizar lista" name="refresh_list_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml
new file mode 100644
index 0000000000..94274b2cfe
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="MEMÓRIA DA REGIÃO" name="script_limits_region_memory_panel">
+ <text name="script_memory">
+ Memória de scripts no lote
+ </text>
+ <text name="loading_text">
+ Carregando...
+ </text>
+ <scroll_list name="scripts_list">
+ <scroll_list.columns label="Tamanho (kb)" name="size"/>
+ <scroll_list.columns label="URLs" name="urls"/>
+ <scroll_list.columns label="Nome do objeto" name="name"/>
+ <scroll_list.columns label="Dono do objeto" name="owner"/>
+ <scroll_list.columns label="Lote" name="parcel"/>
+ <scroll_list.columns label="Localização" name="location"/>
+ </scroll_list>
+ <button label="Atualizar lista" name="refresh_list_btn"/>
+ <button label="Destaque" name="highlight_btn"/>
+ <button label="Devolver" name="return_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_side_tray.xml b/indra/newview/skins/default/xui/pt/panel_side_tray.xml
index 7892fc9e0c..09ac074b5a 100644
--- a/indra/newview/skins/default/xui/pt/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/pt/panel_side_tray.xml
@@ -2,25 +2,28 @@
<!-- Side tray cannot show background because it is always
partially on screen to hold tab buttons. -->
<side_tray name="sidebar">
+ <sidetray_tab description="Exibir ou não barra lateral" name="sidebar_openclose" tab_title="Exibir ou não barra lateral"/>
<sidetray_tab description="Casa." name="sidebar_home" tab_title="Home">
<panel label="casa" name="panel_home"/>
</sidetray_tab>
+ <sidetray_tab description="Editar seu perfil público e destaques ." name="sidebar_me" tab_title="My Profile">
+ <panel_container name="panel_container">
+ <panel label="Eu" name="panel_me"/>
+ </panel_container>
+ </sidetray_tab>
<sidetray_tab description="Encontre seus amigos, contatos e pessoas nas proximidades." name="sidebar_people" tab_title="People">
<panel_container name="panel_container">
- <panel label="Info de grupo" name="panel_group_info_sidetray"/>
+ <panel label="Perfil do grupo" name="panel_group_info_sidetray"/>
<panel label="Residentes&amp; Objetos bloqueados" name="panel_block_list_sidetray"/>
</panel_container>
</sidetray_tab>
<sidetray_tab description="Encontre lugares para ir e lugares que você ja visitou." label="Lugares" name="sidebar_places" tab_title="Places">
<panel label="Lugares" name="panel_places"/>
</sidetray_tab>
- <sidetray_tab description="Editar seu perfil público e destaques ." name="sidebar_me" tab_title="My Profile">
- <panel label="Eu" name="panel_me"/>
+ <sidetray_tab description="Busca no seu inventário." name="sidebar_inventory" tab_title="My Inventory">
+ <panel label="Editar inventário" name="sidepanel_inventory"/>
</sidetray_tab>
<sidetray_tab description="Muda sua aparência e visual atual." name="sidebar_appearance" tab_title="My Appearance">
<panel label="Editar aparência" name="sidepanel_appearance"/>
</sidetray_tab>
- <sidetray_tab description="Busca no seu inventário." name="sidebar_inventory" tab_title="My Inventory">
- <panel label="Editar inventário" name="sidepanel_inventory"/>
- </sidetray_tab>
</side_tray>
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 9485915263..ae2879f4a9 100644
--- a/indra/newview/skins/default/xui/pt/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/pt/panel_status_bar.xml
@@ -21,9 +21,11 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="Meu saldo: Comprar mais L$"/>
+ <button label="" label_selected="" name="buycurrency" tool_tip="Meu saldo"/>
+ <button label="Comprar" name="buyL" tool_tip="Comprar mais L$"/>
<text name="TimeText" tool_tip="Hora atual (Pacífico)">
- 12:00 AM
+ 24:00 AM PST
</text>
+ <button name="media_toggle_btn" tool_tip="Tocar/Pausar todas mídias (música, vídeo, páginas web)"/>
<button name="volume_btn" tool_tip="Volume geral"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history.xml
index 9dc5aed91e..ba83fee7ba 100644
--- a/indra/newview/skins/default/xui/pt/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/pt/panel_teleport_history.xml
@@ -4,6 +4,7 @@
<accordion_tab name="today" title="Hoje"/>
<accordion_tab name="yesterday" title="Ontem"/>
<accordion_tab name="2_days_ago" title="2 dias atrás"/>
+ 5
<accordion_tab name="3_days_ago" title="3 dias atrás"/>
<accordion_tab name="4_days_ago" title="4 dias atrás"/>
<accordion_tab name="5_days_ago" title="5 dias atrás"/>
@@ -11,4 +12,7 @@
<accordion_tab name="1_month_and_older" title="1 mês e mais velhos"/>
<accordion_tab name="6_months_and_older" title="6 meses e mais velhos"/>
</accordion>
+ <panel name="bottom_panel">
+ <button name="gear_btn" tool_tip="Mostrar opções adicionais"/>
+ </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml
new file mode 100644
index 0000000000..65f80fddd2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="teleport_history_item">
+ <button name="profile_btn" tool_tip="Mostrar dados do item"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml
index 73ec6fb068..b8bbb4051a 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Looks" name="appearance panel">
<string name="No Outfit" value="Nenhum"/>
- <filter_editor label="Filtrar looks" name="Filter"/>
- <panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
- <button name="newlook_btn" tool_tip="Novo look"/>
- <dnd_button name="trash_btn" tool_tip="Remover item selecionado"/>
- <button label="Vestir" name="wear_btn"/>
+ <panel name="panel_currentlook">
+ <text name="currentlook_title">
+ (não salvo)
+ </text>
</panel>
+ <filter_editor label="Filtrar looks" name="Filter"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml
index 556c631bf7..4fc50bac67 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="item properties" title="Propriedaded do item de inventário">
+<panel name="item properties" title="Perfil do objeto">
<panel.string name="unknown">
(desconhecido)
</panel.string>
@@ -15,7 +15,8 @@
<panel.string name="acquiredDate">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</panel.string>
- <text name="title" value="Propriedade do item"/>
+ <text name="title" value="Perfil do objeto"/>
+ <text name="where" value="(Inventário)"/>
<panel label="">
<text name="LabelItemNameTitle">
Nome:
@@ -37,34 +38,36 @@
<text name="LabelAcquiredDate">
Quarta 24 de Maio 12:50:46 2006
</text>
- <text name="OwnerLabel">
- Você:
- </text>
- <check_box label="Editar" name="CheckOwnerModify"/>
- <check_box label="Copiar" name="CheckOwnerCopy"/>
- <check_box label="Revender" name="CheckOwnerTransfer"/>
- <text name="AnyoneLabel">
- Qualquer um:
- </text>
- <check_box label="Copiar" name="CheckEveryoneCopy"/>
- <text name="GroupLabel">
- Grupo:
- </text>
- <check_box label="Compartilhar" name="CheckShareWithGroup"/>
- <text name="NextOwnerLabel">
- Próximo proprietário:
- </text>
- <check_box label="Editar" name="CheckNextOwnerModify"/>
- <check_box label="Copiar" name="CheckNextOwnerCopy"/>
- <check_box label="Revender" name="CheckNextOwnerTransfer"/>
+ <panel name="perms_inv">
+ <text name="perm_modify">
+ Você pode:
+ </text>
+ <check_box label="Modificar" name="CheckOwnerModify"/>
+ <check_box label="Copiar" name="CheckOwnerCopy"/>
+ <check_box label="Transferir" name="CheckOwnerTransfer"/>
+ <text name="AnyoneLabel">
+ Todos:
+ </text>
+ <check_box label="Copiar" name="CheckEveryoneCopy"/>
+ <text name="GroupLabel">
+ Grupo:
+ </text>
+ <check_box label="Compartilhar" name="CheckShareWithGroup" tool_tip="Permitir que todos os membros do grupo tenham o seu nível de modificação para este objeto. Faça uma doação para ativar restrições de função."/>
+ <text name="NextOwnerLabel">
+ Próximo proprietário:
+ </text>
+ <check_box label="Modificar" name="CheckNextOwnerModify"/>
+ <check_box label="Copiar" name="CheckNextOwnerCopy"/>
+ <check_box label="Transferir" name="CheckNextOwnerTransfer" tool_tip="O próximo dono poderá revender ou dar este objeto"/>
+ </panel>
<check_box label="À venda" name="CheckPurchase"/>
<combo_box name="combobox sale copy">
<combo_box.item label="Copiar" name="Copy"/>
<combo_box.item label="Original" name="Original"/>
</combo_box>
- <spinner label="Preço:" name="Edit Cost"/>
- <text name="CurrencySymbol">
- L$
- </text>
+ <spinner label="Preço: L$" name="Edit Cost"/>
+ </panel>
+ <panel name="button_panel">
+ <button label="Cancelar" name="cancel_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
index 3ae728e69d..9193730018 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="object properties" title="Propriedades do objeto">
+<panel name="object properties" title="Perfil do objeto">
<panel.string name="text deed continued">
Doar
</panel.string>
@@ -36,26 +36,33 @@
<panel.string name="Sale Mixed">
Venda mista
</panel.string>
- <panel label="">
+ <text name="title" value="Perfil do objeto"/>
+ <text name="where" value="(inworld)"/>
+ <panel label="" name="properties_panel">
<text name="Name:">
Nome:
</text>
<text name="Description:">
Descrição:
</text>
- <text name="Creator:">
+ <text name="CreatorNameLabel">
Criador:
</text>
+ <text name="Creator Name">
+ Erica Linden
+ </text>
<text name="Owner:">
Proprietário:
</text>
- <text name="Group:">
+ <text name="Owner Name">
+ Erica Linden
+ </text>
+ <text name="Group_label">
Grupo:
</text>
<button name="button set group" tool_tip="Selecione o grupo que terá acesso à autorização do objeto"/>
<name_box initial_value="Carregando..." name="Group Name Proxy"/>
- <button label="Doar" label_selected="Doar" name="button deed" tool_tip="Ao doar este item, o próximo dono terá permissões de próximo dono. Objetos de grupos podem ser doados por um oficial do grupo."/>
- <check_box label="Compartilhar" name="checkbox share with group" tool_tip="Permitir que todos os membros do grupo tenhas suas permissões de modificação para este objeto. Faça uma doação para ativar restrições de função."/>
+ <button label="Doar" label_selected="Doar" name="button deed" tool_tip="Ao doar este item, o próximo dono terá permissões de próximo dono. Objetos de grupos podem ser doados por um oficial do grupo."/>
<text name="label click action">
Clique para:
</text>
@@ -66,54 +73,57 @@
<combo_box.item label="Pagar por objeto" name="Payobject"/>
<combo_box.item label="Abrir" name="Open"/>
</combo_box>
- <check_box label="À venda" name="checkbox for sale"/>
- <combo_box name="sale type">
- <combo_box.item label="Copiar" name="Copy"/>
- <combo_box.item label="Conteúdo" name="Contents"/>
- <combo_box.item label="Original" name="Original"/>
- </combo_box>
- <spinner label="Preço: L$" name="Edit Cost"/>
- <check_box label="Mostrar nos resultados de busca" name="search_check" tool_tip="Incluir o objeto nos resultados de busca"/>
- <panel name="perms_build">
+ <panel name="perms_inv">
<text name="perm_modify">
Você pode modificar este objeto
</text>
<text name="Anyone can:">
Todos:
</text>
- <check_box label="Movimentar" name="checkbox allow everyone move"/>
<check_box label="Copiar" name="checkbox allow everyone copy"/>
- <text name="Next owner can:">
+ <check_box label="Movimentar" name="checkbox allow everyone move"/>
+ <text name="GroupLabel">
+ Grupo:
+ </text>
+ <check_box label="Compartilhar" name="checkbox share with group" tool_tip="Permitir que todos os membros do grupo tenham o seu nível de modificação para este objeto. Faça uma doação para ativar restrições de função."/>
+ <text name="NextOwnerLabel">
Próximo proprietário:
</text>
<check_box label="Modificar" name="checkbox next owner can modify"/>
<check_box label="Copiar" name="checkbox next owner can copy"/>
<check_box label="Transferir" name="checkbox next owner can transfer" tool_tip="O próximo dono poderá revender ou dar este objeto"/>
- <text name="B:">
- B:
- </text>
- <text name="O:">
- O:
- </text>
- <text name="G:">
- G:
- </text>
- <text name="E:">
- E:
- </text>
- <text name="N:">
- N:
- </text>
- <text name="F:">
- F:
- </text>
</panel>
+ <check_box label="À venda" name="checkbox for sale"/>
+ <combo_box name="sale type">
+ <combo_box.item label="Copiar" name="Copy"/>
+ <combo_box.item label="Conteúdo" name="Contents"/>
+ <combo_box.item label="Original" name="Original"/>
+ </combo_box>
+ <spinner label="Preço: L$" name="Edit Cost"/>
+ <check_box label="Mostrar nos resultados de busca" name="search_check" tool_tip="Incluir o objeto nos resultados de busca"/>
+ <text name="B:">
+ B:
+ </text>
+ <text name="O:">
+ O:
+ </text>
+ <text name="G:">
+ G:
+ </text>
+ <text name="E:">
+ E:
+ </text>
+ <text name="N:">
+ N:
+ </text>
+ <text name="F:">
+ F:
+ </text>
</panel>
<panel name="button_panel">
<button label="Abrir" name="open_btn"/>
<button label="Pagar" name="pay_btn"/>
<button label="Comprar" name="buy_btn"/>
- <button label="Cancelar" name="cancel_btn"/>
- <button label="Salvar" name="save_btn"/>
+ <button label="Detalhes" name="details_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 0e2a8a88f1..773aea5848 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -1,20 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- This file contains strings that used to be hardcoded in the source.
It is only for those strings which do not belong in a floater.
- For example, the strings used in avatar chat bubbles, and strings
+ For example, the strings used in avatar chat bubbles, and strings
that are returned from one component and may appear in many places-->
<strings>
+ <string name="CAPITALIZED_APP_NAME">
+ SECOND LIFE
+ </string>
<string name="SUPPORT_SITE">
- Portal de Apoio do Second Life
+ Portal de Supporte Second Life
</string>
<string name="StartupDetectingHardware">
Detectando hardware...
</string>
<string name="StartupLoading">
- Carregando
+ Carregando [APP_NAME]...
+ </string>
+ <string name="StartupClearingCache">
+ Limpando o cache...
+ </string>
+ <string name="StartupInitializingTextureCache">
+ Iniciando cache de texturas...
+ </string>
+ <string name="StartupInitializingVFS">
+ Iniciando VFS...
+ </string>
+ <string name="ProgressRestoring">
+ Restaurando...
+ </string>
+ <string name="ProgressChangingResolution">
+ Alterando a resolução...
</string>
<string name="LoginInProgress">
- Fazendo Login. [APP_NAME] pode parecer congelado. Por favor, aguarde.
+ Fazendo login. [APP_NAME] pode parecer congelado. Por favor, aguarde.
</string>
<string name="LoginInProgressNoFrozen">
Logando...
@@ -26,7 +44,7 @@
Executando manutenção da conta...
</string>
<string name="LoginAttempt">
- Falha na tentativa anterior de login. Fazendo Login, tentativa [NUMBER]
+ Falha na tentativa anterior de login. Login, tentativa [NUMBER]
</string>
<string name="LoginPrecaching">
Carregando mundo...
@@ -44,10 +62,10 @@
Verificando arquivos cache (pode levar de 60-90 segundos)...
</string>
<string name="LoginProcessingResponse">
- Processando Resposta...
+ Processando resposta...
</string>
<string name="LoginInitializingWorld">
- Inicializando Mundo...
+ Inicializando mundo...
</string>
<string name="LoginDecodingImages">
Decodificando imagens...
@@ -56,13 +74,13 @@
Inicializando o QuickTime...
</string>
<string name="LoginQuicktimeNotFound">
- O QuickTime não foi encontrado - incapaz de inicializar.
+ O QuickTime não foi encontrado - falha ao iniciar.
</string>
<string name="LoginQuicktimeOK">
O QuickTime foi inicializado com sucesso.
</string>
<string name="LoginWaitingForRegionHandshake">
- Aguardando o handshake com a região...
+ Aguardando handshake com a região...
</string>
<string name="LoginConnectingToRegion">
Conectando à região...
@@ -71,7 +89,10 @@
Baixando roupas...
</string>
<string name="LoginFailedNoNetwork">
- Erro de Rede: Não foi possível estabelecer a conexão, verifique sua conexão de rede.
+ Erro de rede: Não foi possível estabelecer a conexão, verifique sua conexão de rede.
+ </string>
+ <string name="LoginFailed">
+ Falha do login.
</string>
<string name="Quit">
Sair
@@ -82,6 +103,24 @@
<string name="AgentLostConnection">
Esta região pode estar passando por problemas. Por favor, verifique sua conexão com a internet.
</string>
+ <string name="SavingSettings">
+ Salvando configurações...
+ </string>
+ <string name="LoggingOut">
+ Saindo...
+ </string>
+ <string name="ShuttingDown">
+ Fechando...
+ </string>
+ <string name="YouHaveBeenDisconnected">
+ Você foi desconectado da região onde estava.
+ </string>
+ <string name="SentToInvalidRegion">
+ Você foi enviado para uma região inválida.
+ </string>
+ <string name="TestingDisconnect">
+ Teste de desconexão
+ </string>
<string name="TooltipPerson">
Pessoa
</string>
@@ -104,22 +143,22 @@
Construído por Grupo
</string>
<string name="TooltipFlagNoBuild">
- Não é Permitido Construir
+ Não é permitido construir
</string>
<string name="TooltipFlagNoEdit">
Construído por Grupo
</string>
<string name="TooltipFlagNotSafe">
- Não é Seguro
+ Não é seguro
</string>
<string name="TooltipFlagNoFly">
- Não é Permitido Voar
+ Não é permitido voar
</string>
<string name="TooltipFlagGroupScripts">
Scripts de Grupo
</string>
<string name="TooltipFlagNoScripts">
- Não são Permitidos Scripts
+ Não são permitidos scripts
</string>
<string name="TooltipLand">
Terreno:
@@ -128,14 +167,32 @@
Apenas um item único pode ser arrastado para este local
</string>
<string name="TooltipHttpUrl">
- Clique para ver essa página web
+ Clique para ver a página web
</string>
<string name="TooltipSLURL">
- Clique para ver a informação desta localização
+ Clique para ver os dados desta localização
</string>
<string name="TooltipAgentUrl">
Clique para ver o perfil deste residente
</string>
+ <string name="TooltipAgentMute">
+ Clique para silenciar este residente
+ </string>
+ <string name="TooltipAgentUnmute">
+ Clique para desfazer silenciar neste residente
+ </string>
+ <string name="TooltipAgentIM">
+ Clique para enviar uma MI para este residente
+ </string>
+ <string name="TooltipAgentPay">
+ Clique para pagar este residente
+ </string>
+ <string name="TooltipAgentOfferTeleport">
+ Clique para enviar um pedido de amizade a este residente
+ </string>
+ <string name="TooltipAgentRequestFriend">
+ Clique para enviar um pedido de amizade a este residente
+ </string>
<string name="TooltipGroupUrl">
Clique para ver a descrição deste Grupo
</string>
@@ -143,7 +200,7 @@
Clique para ver a descrição deste evento
</string>
<string name="TooltipClassifiedUrl">
- Clique para ver este classificado
+ Clique para ver este anúncio
</string>
<string name="TooltipParcelUrl">
Clique para ver a descrição desta parcela
@@ -158,15 +215,34 @@
Clique para ver esta localização no mapa
</string>
<string name="TooltipSLAPP">
- Clique para ativar no secondlife:// commando
+ Clique para ativar no secondlife:// comando
</string>
<string name="CurrentURL" value="URL atual: [CurrentURL]"/>
+ <string name="TooltipPrice" value="L$[PRICE]-"/>
<string name="SLurlLabelTeleport">
Teletransportar para
</string>
<string name="SLurlLabelShowOnMap">
Mostrar no mapa para
</string>
+ <string name="SLappAgentMute">
+ Silenciar
+ </string>
+ <string name="SLappAgentUnmute">
+ Desfazer silenciar
+ </string>
+ <string name="SLappAgentIM">
+ MI
+ </string>
+ <string name="SLappAgentPay">
+ Pagar
+ </string>
+ <string name="SLappAgentOfferTeleport">
+ Oferecer teletransporte para
+ </string>
+ <string name="SLappAgentRequestFriend">
+ Pedido de amizade
+ </string>
<string name="BUTTON_CLOSE_DARWIN">
Fechar (⌘W)
</string>
@@ -185,9 +261,6 @@
<string name="BUTTON_DOCK">
conectar-se à barra
</string>
- <string name="BUTTON_UNDOCK">
- desconectar-se da barra
- </string>
<string name="BUTTON_HELP">
Mostrar ajuda
</string>
@@ -201,7 +274,7 @@
Buscando...
</string>
<string name="ReleaseNotes">
- Notas de Distribuição
+ Notas de versão
</string>
<string name="LoadingData">
Carregando...
@@ -212,9 +285,6 @@
<string name="AvatarNameWaiting">
(aguardando)
</string>
- <string name="AvatarNameHippos">
- (hippos)
- </string>
<string name="GroupNameNone">
(nenhum)
</string>
@@ -273,7 +343,7 @@
objeto
</string>
<string name="note card">
- notecard
+ anotação
</string>
<string name="folder">
pasta
@@ -323,6 +393,9 @@
<string name="symbolic link">
link
</string>
+ <string name="symbolic folder link">
+ link da pasta
+ </string>
<string name="AvatarAway">
Distante
</string>
@@ -357,7 +430,7 @@
Entediado
</string>
<string name="anim_bow">
- Saudar curvando
+ Reverência
</string>
<string name="anim_clap">
Aplaudir
@@ -417,10 +490,10 @@
Impaciente
</string>
<string name="anim_jumpforjoy">
- Pular de Alegria
+ Pular de alegria
</string>
<string name="anim_kissmybutt">
- Beije meu Bumbum
+ Beije meu bumbum
</string>
<string name="anim_express_kiss">
Beijar
@@ -441,7 +514,7 @@
Nya-nya-nya
</string>
<string name="anim_punch_onetwo">
- Soco Um-Dois
+ Soco um-dois
</string>
<string name="anim_express_open_mouth">
Abrir a boca
@@ -456,10 +529,10 @@
Apontar para si
</string>
<string name="anim_punch_l">
- Socar Esquerda
+ Soco esquerdo
</string>
<string name="anim_punch_r">
- Socar Direita
+ Soco direito
</string>
<string name="anim_rps_countdown">
RPS contar
@@ -498,16 +571,16 @@
Fumar à toa
</string>
<string name="anim_smoke_inhale">
- Inalar Fumaça
+ Inalar fumaça
</string>
<string name="anim_smoke_throw_down">
- Expelir Fumaça
+ Expelir fumaça
</string>
<string name="anim_express_surprise">
Surpresa
</string>
<string name="anim_sword_strike_r">
- Golpe de Espada
+ Golpe de espada
</string>
<string name="anim_angry_tantrum">
Enraivecer
@@ -564,7 +637,7 @@
grita:
</string>
<string name="ringing">
- Conectando à conversa de Voz no mundo
+ Conectando à conversa de voz no mundo
</string>
<string name="connected">
Conectado
@@ -575,6 +648,9 @@
<string name="hang_up">
Desconectado da conversa de Voz no mundo
</string>
+ <string name="reconnect_nearby">
+ Agora você será reconectado ao bate-papo local.
+ </string>
<string name="ScriptQuestionCautionChatGranted">
&apos;[OBJECTNAME]&apos;, um objeto de &apos;[OWNERNAME]&apos;, localizado em [REGIONNAME] a [REGIONPOS], obteve permissão para: [PERMISSIONS].
</string>
@@ -615,13 +691,13 @@
Controle sua camera
</string>
<string name="SIM_ACCESS_PG">
- PG
+ Público geral
</string>
<string name="SIM_ACCESS_MATURE">
- Mature
+ Moderado
</string>
<string name="SIM_ACCESS_ADULT">
- Adult
+ Adulto
</string>
<string name="SIM_ACCESS_DOWN">
Desconectado
@@ -633,7 +709,7 @@
(desconhecido)
</string>
<string name="all_files">
- Todos os Arquivos
+ Todos os arquivos
</string>
<string name="sound_files">
Sons
@@ -657,10 +733,10 @@
Imagens Bitmap
</string>
<string name="avi_movie_file">
- Arquivo de filme AVI
+ Arquivo de vídeo AVI
</string>
<string name="xaf_animation_file">
- Arquivo de Animação XAF
+ Arquivo de animação XAF
</string>
<string name="xml_file">
Arquivo XML
@@ -669,25 +745,25 @@
Arquivo RAW
</string>
<string name="compressed_image_files">
- Imagens Compactadas
+ Imagens compactadas
</string>
<string name="load_files">
- Carregar Arquivos
+ Carregar arquivos
</string>
<string name="choose_the_directory">
- Escolher Diretório
+ Selecionar pasta
</string>
<string name="AvatarSetNotAway">
- deixar como não away
+ deixar como ausente
</string>
<string name="AvatarSetAway">
- deixar como Away
+ deixar como ausente
</string>
<string name="AvatarSetNotBusy">
- deixar como não Ocupado
+ deixar como não ocupado
</string>
<string name="AvatarSetBusy">
- Deixar como Busy
+ Deixar como ocupado
</string>
<string name="shape">
Silhueta
@@ -705,7 +781,7 @@
Camisa
</string>
<string name="pants">
- calças
+ Calças
</string>
<string name="shoes">
Sapatos
@@ -720,22 +796,25 @@
Luvas
</string>
<string name="undershirt">
- camiseta
+ Camiseta
</string>
<string name="underpants">
- roupa debaixo
+ Roupa de baixo
</string>
<string name="skirt">
- saia
+ Saia
</string>
<string name="alpha">
Alpha
</string>
<string name="tattoo">
- Tattoo
+ Tatuagem
</string>
<string name="invalid">
- inválido
+ Inválido
+ </string>
+ <string name="NewWearable">
+ Novo [WEARABLE_ITEM]
</string>
<string name="next">
Próximo
@@ -767,11 +846,8 @@
<string name="TeleportOffer">
Oferta de teletransporte
</string>
- <string name="StartUpNotification">
- [%d] nova notificação chegou enquanto você estava fora...
- </string>
<string name="StartUpNotifications">
- [%d] Novas notificações chegaram enquanto você estava fora...
+ Novas notificações chegaram enquanto você estava fora...
</string>
<string name="OverflowInfoChannelString">
Você tem mais [%d] notificações
@@ -807,7 +883,10 @@
Pressione ESC para retornar para visão do mundo
</string>
<string name="InventoryNoMatchingItems">
- Nenhum item correspondente encontrado no inventário.
+ Nenhum item correspondente foi encontrado no inventário. Tente fazer uma [secondlife:///app/search/groups &quot;Busca&quot;].
+ </string>
+ <string name="FavoritesNoMatchingItems">
+ Arraste um marco para adicioná-lo aos seus favoritos.
</string>
<string name="InventoryNoTexture">
Você não possui uma cópia desta textura no seu inventário
@@ -825,32 +904,33 @@
Nenhum conteúdo
</string>
<string name="WornOnAttachmentPoint" value="(vestido em [ATTACHMENT_POINT])"/>
- <string name="Chat" value="Bate papo :"/>
- <string name="Sound" value="Som :"/>
- <string name="Wait" value="--- Aguarde :"/>
- <string name="AnimFlagStop" value="Parar animação :"/>
- <string name="AnimFlagStart" value="Iniciar animação :"/>
- <string name="Wave" value="Aceno"/>
+ <string name="ActiveGesture" value="[GESLABEL] (ativado)"/>
+ <string name="Chat" value="Bate papo"/>
+ <string name="Sound" value="Som"/>
+ <string name="Wait" value="--- Aguarde"/>
+ <string name="AnimFlagStop" value="Parar animação"/>
+ <string name="AnimFlagStart" value="Iniciar animação"/>
+ <string name="Wave" value="Acenar"/>
<string name="HelloAvatar" value="Olá, avatar!"/>
- <string name="ViewAllGestures" value="Ver tudo &gt;&gt;"/>
+ <string name="ViewAllGestures" value="Ver todos&gt;&gt;"/>
<string name="Animations" value="Animações,"/>
<string name="Calling Cards" value="Cartões de visitas,"/>
<string name="Clothing" value="Vestuário,"/>
<string name="Gestures" value="Gestos,"/>
- <string name="Landmarks" value="Landmarks,"/>
- <string name="Notecards" value="Notecards,"/>
+ <string name="Landmarks" value="Marcos"/>
+ <string name="Notecards" value="Anotações"/>
<string name="Objects" value="Objetos,"/>
<string name="Scripts" value="Scripts,"/>
- <string name="Sounds" value="Sons,"/>
- <string name="Textures" value="Texturas,"/>
- <string name="Snapshots" value="Fotografias,"/>
+ <string name="Sounds" value="Sons"/>
+ <string name="Textures" value="Texturas"/>
+ <string name="Snapshots" value="Fotografias"/>
<string name="No Filters" value="Não"/>
- <string name="Since Logoff" value="- desde desligado"/>
+ <string name="Since Logoff" value="- Desde desligado"/>
<string name="InvFolder My Inventory">
- Meu Inventorio
+ Meu inventário
</string>
<string name="InvFolder My Favorites">
- Meus Favoritos
+ Meus favoritos
</string>
<string name="InvFolder Library">
Biblioteca
@@ -862,10 +942,10 @@
Sons
</string>
<string name="InvFolder Calling Cards">
- Cartões de Visitas
+ Cartões de visitas
</string>
<string name="InvFolder Landmarks">
- Landmarks
+ Marcos
</string>
<string name="InvFolder Scripts">
Scripts
@@ -877,31 +957,31 @@
Objetos
</string>
<string name="InvFolder Notecards">
- Notecards
+ Anotações
</string>
<string name="InvFolder New Folder">
- Nova Pasta
+ Nova pasta
</string>
<string name="InvFolder Inventory">
Inventário
</string>
<string name="InvFolder Uncompressed Images">
- Imagens Descompactadas
+ Imagens descompactadas
</string>
<string name="InvFolder Body Parts">
- Partes do Corpo
+ Corpo
</string>
<string name="InvFolder Trash">
Lixo
</string>
<string name="InvFolder Photo Album">
- Ãlbum de Fotografias
+ Ãlbum de fotografias
</string>
<string name="InvFolder Lost And Found">
Achados e Perdidos
</string>
<string name="InvFolder Uncompressed Sounds">
- Sons Descompactados
+ Sons descompactados
</string>
<string name="InvFolder Animations">
Animações
@@ -913,10 +993,13 @@
Favoritos
</string>
<string name="InvFolder Current Outfit">
- Vestimanta Atual
+ Look atual
</string>
<string name="InvFolder My Outfits">
- Minhas Vestimentas
+ Meus looks
+ </string>
+ <string name="InvFolder Accessories">
+ Acessórios
</string>
<string name="InvFolder Friends">
Amigos
@@ -988,7 +1071,7 @@
Espinha
</string>
<string name="Pelvis">
- Pelvis
+ Pélvis
</string>
<string name="Mouth">
Boca
@@ -1045,10 +1128,10 @@
Estômago
</string>
<string name="Left Pec">
- Pec esquerdo
+ Peitoral E
</string>
<string name="Right Pec">
- Pec direito
+ Peitoral D
</string>
<string name="YearsMonthsOld">
[AGEYEARS] [AGEMONTHS] de idade
@@ -1126,19 +1209,19 @@
Empregado da Linden Lab
</string>
<string name="PaymentInfoUsed">
- Info de Pagamento usada
+ Dados de pagamento usados
</string>
<string name="PaymentInfoOnFile">
- Info de Pagamento no Arquivo
+ Dados de pagamento fornecidos
</string>
<string name="NoPaymentInfoOnFile">
- Nenhuma Info de Pagamento no Arquivo
+ Nenhum dado de pagamento
</string>
<string name="AgeVerified">
- Idade-verificada
+ Idade comprovada
</string>
<string name="NotAgeVerified">
- Idade não-verificada
+ Idade não comprovada
</string>
<string name="Center 2">
Centro 2
@@ -1165,16 +1248,16 @@
Inferior direito
</string>
<string name="CompileQueueDownloadedCompiling">
- Downloaded, agora compilando
+ Baixado, agora compilando
</string>
<string name="CompileQueueScriptNotFound">
Script não encontrado no servidor.
</string>
<string name="CompileQueueProblemDownloading">
- Problema no download
+ Problema no download
</string>
<string name="CompileQueueInsufficientPermDownload">
- Permissões insuficientes para fazer o download do script.
+ Permissões insuficientes para fazer o download do script.
</string>
<string name="CompileQueueInsufficientPermFor">
Permissões insuficientes para
@@ -1183,7 +1266,7 @@
Falha desconhecida para download
</string>
<string name="CompileQueueTitle">
- Progresso do Recompilamento
+ Progresso do recompilamento
</string>
<string name="CompileQueueStart">
recompilar
@@ -1192,7 +1275,7 @@
Reset Progresso
</string>
<string name="ResetQueueStart">
- reset
+ Zerar
</string>
<string name="RunQueueTitle">
Definir funcionamento do progresso
@@ -1216,7 +1299,7 @@
Salvo.
</string>
<string name="ObjectOutOfRange">
- Script (objecto fora de alcance)
+ Script (objeto fora de alcance)
</string>
<string name="GodToolsObjectOwnedBy">
Objeto [OBJECT] de propriedade de [OWNER]
@@ -1244,10 +1327,10 @@
Total
</string>
<string name="NoGroupDataFound">
- Não ha dados de grupo para o grupo
+ Não há dados de grupo
</string>
<string name="IMParentEstate">
- propriedade dos pais
+ Propriedade-pai
</string>
<string name="IMMainland">
continente
@@ -1268,11 +1351,164 @@
todas as propriedades que você gerencia para [OWNER]
</string>
<string name="RegionInfoAllowedResidents">
- Residentes permitidos : ([ALLOWEDAGENTS], max [MAXACCESS])
+ Residentes autorizados: ([ALLOWEDAGENTS], max [MAXACCESS])
</string>
<string name="RegionInfoAllowedGroups">
Grupos permitidos: ([ALLOWEDGROUPS], max [MAXACCESS])
</string>
+ <string name="ScriptLimitsParcelScriptMemory">
+ Memória de scripts no lote
+ </string>
+ <string name="ScriptLimitsParcelsOwned">
+ Lotes listados: [PARCELS]
+ </string>
+ <string name="ScriptLimitsMemoryUsed">
+ Memória usada: [COUNT] kb de [MAX] kb; [AVAILABLE] kb disponíveis
+ </string>
+ <string name="ScriptLimitsMemoryUsedSimple">
+ Memória usada: [COUNT] kb
+ </string>
+ <string name="ScriptLimitsParcelScriptURLs">
+ URL dos scripts do lote
+ </string>
+ <string name="ScriptLimitsURLsUsed">
+ URLs usados: [COUNT] de [MAX]; [AVAILABLE] disponíveis
+ </string>
+ <string name="ScriptLimitsURLsUsedSimple">
+ URLs usados: [COUNT]
+ </string>
+ <string name="ScriptLimitsRequestError">
+ Erro ao solicitar dados
+ </string>
+ <string name="ScriptLimitsRequestNoParcelSelected">
+ Nenhum lote foi selecionado
+ </string>
+ <string name="ScriptLimitsRequestWrongRegion">
+ Erro: dados de script só disponíveis na região da posição atual
+ </string>
+ <string name="ScriptLimitsRequestWaiting">
+ Obtendo dados...
+ </string>
+ <string name="ScriptLimitsRequestDontOwnParcel">
+ Você não está autorizado a examinar este lote.
+ </string>
+ <string name="SITTING_ON">
+ Sentado em
+ </string>
+ <string name="ATTACH_CHEST">
+ Peito
+ </string>
+ <string name="ATTACH_HEAD">
+ Cabeça
+ </string>
+ <string name="ATTACH_LSHOULDER">
+ Ombro esquerdo
+ </string>
+ <string name="ATTACH_RSHOULDER">
+ Ombro direito
+ </string>
+ <string name="ATTACH_LHAND">
+ Mão esquerda
+ </string>
+ <string name="ATTACH_RHAND">
+ Mão direita
+ </string>
+ <string name="ATTACH_LFOOT">
+ Pé esquerdo
+ </string>
+ <string name="ATTACH_RFOOT">
+ Pé direito
+ </string>
+ <string name="ATTACH_BACK">
+ Atrás
+ </string>
+ <string name="ATTACH_PELVIS">
+ Pélvis
+ </string>
+ <string name="ATTACH_MOUTH">
+ Boca
+ </string>
+ <string name="ATTACH_CHIN">
+ Queixo
+ </string>
+ <string name="ATTACH_LEAR">
+ Orelha esquerda
+ </string>
+ <string name="ATTACH_REAR">
+ Orelha direita
+ </string>
+ <string name="ATTACH_LEYE">
+ Olho esquerdo
+ </string>
+ <string name="ATTACH_REYE">
+ Olho direito
+ </string>
+ <string name="ATTACH_NOSE">
+ Nariz
+ </string>
+ <string name="ATTACH_RUARM">
+ Braço direito
+ </string>
+ <string name="ATTACH_RLARM">
+ Antebraço direito
+ </string>
+ <string name="ATTACH_LUARM">
+ Braço esquerdo
+ </string>
+ <string name="ATTACH_LLARM">
+ Antebraço esquerdo
+ </string>
+ <string name="ATTACH_RHIP">
+ Quadril direito
+ </string>
+ <string name="ATTACH_RULEG">
+ Coxa direita
+ </string>
+ <string name="ATTACH_RLLEG">
+ Perna direita
+ </string>
+ <string name="ATTACH_LHIP">
+ Quadril esquerdo
+ </string>
+ <string name="ATTACH_LULEG">
+ Coxa esquerda
+ </string>
+ <string name="ATTACH_LLLEG">
+ Perna esquerda
+ </string>
+ <string name="ATTACH_BELLY">
+ Barriga
+ </string>
+ <string name="ATTACH_RPEC">
+ Peitorais D
+ </string>
+ <string name="ATTACH_LPEC">
+ Peitorais E
+ </string>
+ <string name="ATTACH_HUD_CENTER_2">
+ HUD Central 2
+ </string>
+ <string name="ATTACH_HUD_TOP_RIGHT">
+ HUD superior direito
+ </string>
+ <string name="ATTACH_HUD_TOP_CENTER">
+ HUD centro superior
+ </string>
+ <string name="ATTACH_HUD_TOP_LEFT">
+ HUD superior esquerdo
+ </string>
+ <string name="ATTACH_HUD_CENTER_1">
+ HUD Central 1
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_LEFT">
+ HUD esquerda inferior
+ </string>
+ <string name="ATTACH_HUD_BOTTOM">
+ HUD inferior
+ </string>
+ <string name="ATTACH_HUD_BOTTOM_RIGHT">
+ HUD direito inferior
+ </string>
<string name="CursorPos">
Linha [LINE], Coluna [COLUMN]
</string>
@@ -1282,6 +1518,12 @@
<string name="PanelContentsNewScript">
Novo Script
</string>
+ <string name="PanelContentsTooltip">
+ Conteúdo do objeto
+ </string>
+ <string name="BusyModeResponseDefault">
+ O residente para o qual escreveu está no modo &apos;ocupado&apos;, ou seja, ele prefere não receber nada no momento. Sua mensagem será exibida como uma MI mais tarde.
+ </string>
<string name="MuteByName">
(por nome)
</string>
@@ -1295,10 +1537,10 @@
(grupo)
</string>
<string name="RegionNoCovenant">
- Não ha Contrato fornecido para essa Região.
+ Não foi definido um contrato para essa região.
</string>
<string name="RegionNoCovenantOtherOwner">
- Não ha Contrato fornecido para essa Região. O terreno nesta região está sendo vendido pelo Proprietário, não pela Linden Lab. Favor contatar o Proprietário da região para detalhes de venda.
+ Não foi definido um contrato para essa Região. O terreno nesta região está sendo vendido pelo Proprietário, não pela Linden Lab. Favor contatar o Proprietário da região para detalhes de venda.
</string>
<string name="covenant_last_modified">
Última modificação:
@@ -1317,6 +1559,15 @@
<string name="ClassifiedUpdateAfterPublish">
(vai atualizar depois de publicado)
</string>
+ <string name="NoPicksClassifiedsText">
+ Você não criou nenhum Destaque ou Anúncio. Clique no botão &quot;+&quot; para criar um Destaque ou Anúncio.
+ </string>
+ <string name="NoAvatarPicksClassifiedsText">
+ O usuário não tem nenhum destaque ou anúncio
+ </string>
+ <string name="PicksClassifiedsLoadingText">
+ Carregando...
+ </string>
<string name="MultiPreviewTitle">
Preview
</string>
@@ -1330,19 +1581,19 @@
possuído pelo grupo
</string>
<string name="InvOfferOwnedByUnknownGroup">
- possuído por um grupo desconhecido
+ de um grupo desconhecido
</string>
<string name="InvOfferOwnedBy">
- possuído por
+ de
</string>
<string name="InvOfferOwnedByUnknownUser">
- possuído por usuário desconhecido
+ de usuário desconhecido
</string>
<string name="InvOfferGaveYou">
deu a você
</string>
<string name="InvOfferYouDecline">
- Você declina
+ Você recusa
</string>
<string name="InvOfferFrom">
de
@@ -1369,7 +1620,7 @@
pagou prêmio para o evento
</string>
<string name="GroupMoneyBalance">
- Balanço
+ Saldo
</string>
<string name="GroupMoneyCredits">
Créditos
@@ -1387,17 +1638,23 @@
Cancelar
</string>
<string name="UploadingCosts">
- Uploading [%s] custos
+ Carregar [NAME] custa L$ [AMOUNT]
+ </string>
+ <string name="BuyingCosts">
+ Isso custa L$ [AMOUNT]
</string>
<string name="UnknownFileExtension">
Extensão de arquivo desconhecida [.%s]
Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
</string>
+ <string name="MuteObject2">
+ Bloquear
+ </string>
<string name="AddLandmarkNavBarMenu">
- Adicionar Landmark...
+ Adicionar marco...
</string>
<string name="EditLandmarkNavBarMenu">
- Editar Landmark...
+ Editar marco...
</string>
<string name="accel-mac-control">
⌃
@@ -1505,7 +1762,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Locação Linden
</string>
<string name="Adult">
- Adult
+ Adulto
</string>
<string name="Arts&amp;Culture">
Artes e Cultura
@@ -1517,13 +1774,13 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Educacional
</string>
<string name="Gaming">
- Jogos
+ Games
</string>
<string name="Hangout">
Moradia
</string>
<string name="Newcomer Friendly">
- Amigável a Novos Usuários
+ Para recém-chegados
</string>
<string name="Parks&amp;Nature">
Parques &amp; Natureza
@@ -1565,10 +1822,10 @@ Se a mensagem persistir, reinicie o computador e tente novamente.
Se o error persistir, pode ser necessário desinstalar completamente [APP_NAME] e reinstalá-lo.
</string>
<string name="MBFatalError">
- Erro Fatal
+ Erro fatal
</string>
<string name="MBRequiresAltiVec">
- [APP_NAME] exige um processador com AltiVec (G4 ou superior).
+ [APP_NAME] exige processador com AltiVec (G4 ou superior).
</string>
<string name="MBAlreadyRunning">
[APP_NAME] já está em execução.
@@ -1576,7 +1833,7 @@ Verifique a sua barra de tarefas para obter uma cópia do programa minimizado.
Se a mensagem persistir, reinicie o computador.
</string>
<string name="MBFrozenCrashed">
- [APP_NAME] parece ter congelado ou falhado na execução anterior. Você gostaria de enviar um relatório de falha?
+ [APP_NAME] parece ter congelado ou falhado na execução anterior. Enviar relatório de falha?
</string>
<string name="MBAlert">
Alerta
@@ -1630,7 +1887,7 @@ Também não se esqueça de definir seu monitor para True Color (32-bit), em pai
Se você continuar a receber esta mensagem, contate o [SUPPORT_SITE].
</string>
<string name="MBPixelFmtSetErr">
- ão é possível definir o formato de pixel
+ Não é possível definir o formato de pixel
</string>
<string name="MBGLContextErr">
Não é possível criar o contexto de renderização GL
@@ -1644,7 +1901,7 @@ Se você continuar a receber esta mensagem, contate o [SUPPORT_SITE].
If you continue to receive this message, contact the [SUPPORT_SITE].
</string>
<string name="5 O&apos;Clock Shadow">
- Sombra descuidada
+ Barba por fazer
</string>
<string name="All White">
Todo branco
@@ -1653,10 +1910,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Olhos de Anime
</string>
<string name="Arced">
- arqueado
+ Arqueados
</string>
<string name="Arm Length">
- Comprimento do Braço
+ Comprimento do braço
</string>
<string name="Attached">
Anexado
@@ -1664,41 +1921,17 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Attached Earlobes">
Lóbulos da orelha anexados
</string>
- <string name="Back Bangs">
- Franja traseira
- </string>
- <string name="Back Bangs Down">
- franja traseira longa
- </string>
- <string name="Back Bangs Up">
- franja traseira arrepiada
- </string>
<string name="Back Fringe">
corte traseiro
</string>
- <string name="Back Hair">
- cabelo traseiro
- </string>
- <string name="Back Hair Down">
- cabelo de trás longo
- </string>
- <string name="Back Hair Up">
- cabelo de trás arrepiado
- </string>
<string name="Baggy">
folgado
</string>
<string name="Bangs">
Franja
</string>
- <string name="Bangs Down">
- franja longa
- </string>
- <string name="Bangs Up">
- franja arrepiada
- </string>
<string name="Beady Eyes">
- Olhos malévolos
+ Olhos pequenos
</string>
<string name="Belly Size">
Tamanho da barriga
@@ -1707,10 +1940,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Grande
</string>
<string name="Big Butt">
- Traseiro Grande
- </string>
- <string name="Big Eyeball">
- Globo ocular grande
+ Bunda grande
</string>
<string name="Big Hair Back">
Cabelo volumoso: Trás
@@ -1719,7 +1949,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Cabelo volumoso: Frente
</string>
<string name="Big Hair Top">
- cabelo volumoso: Topo
+ Cabelo volumoso: Topo
</string>
<string name="Big Head">
cabeça grande
@@ -1728,7 +1958,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Peitorais grandes
</string>
<string name="Big Spikes">
- espinhos grandes
+ Pontas grandes
</string>
<string name="Black">
Negro
@@ -1737,40 +1967,40 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Loiro
</string>
<string name="Blonde Hair">
- Cabelo Loiro
+ Cabelo loiro
</string>
<string name="Blush">
Blush
</string>
<string name="Blush Color">
- cor do Blush
+ Cor do blush
</string>
<string name="Blush Opacity">
- Opacidade do Blush
+ Opacidade do blush
</string>
<string name="Body Definition">
- definição do Corpo
+ Definição do corpo
</string>
<string name="Body Fat">
- Gordura corporal
+ Gordura
</string>
<string name="Body Freckles">
- Sardas do corpo
+ Sardas
</string>
<string name="Body Thick">
Corpo cheio
</string>
<string name="Body Thickness">
- Espessura do corpo
+ Ossatura
</string>
<string name="Body Thin">
Corpo magro
</string>
<string name="Bow Legged">
- pernas arqueadas
+ Pernas arqueadas
</string>
<string name="Breast Buoyancy">
- Flexibilidade dos seios
+ Caimento dos seios
</string>
<string name="Breast Cleavage">
Separação dos seios
@@ -1785,7 +2015,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Largo
</string>
<string name="Brow Size">
- tamanho da sobrancelha
+ Tamanho da sobrancelha
</string>
<string name="Bug Eyes">
Olhos saltados
@@ -1809,25 +2039,25 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Tamanho do traseiro
</string>
<string name="bustle skirt">
- Movimentação de saia
+ Saia armada
</string>
<string name="no bustle">
- Sem movimento
+ Saia reta
</string>
<string name="more bustle">
- Mais movimento
+ Mais
</string>
<string name="Chaplin">
Chaplin
</string>
<string name="Cheek Bones">
- Maças do rosto
+ Maçãs do rosto
</string>
<string name="Chest Size">
Tamanho do peito
</string>
<string name="Chin Angle">
- ângulo do queixo
+ Ângulo do queixo
</string>
<string name="Chin Cleft">
Fissura do queixo
@@ -1875,7 +2105,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Direita fechada
</string>
<string name="Coin Purse">
- Pubis
+ Pouco volume
</string>
<string name="Collar Back">
Colarinho posterior
@@ -1886,9 +2116,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Corner Down">
Canto para baixo
</string>
- <string name="Corner Normal">
- Canto normal
- </string>
<string name="Corner Up">
Canto para cima
</string>
@@ -1898,11 +2125,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Crooked Nose">
Nariz torto
</string>
- <string name="Cropped Hair">
- Cabelo curto rente
- </string>
<string name="Cuff Flare">
- bainha larga
+ Bainha larga
</string>
<string name="Dark">
Escuro
@@ -1911,23 +2135,17 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Verde escuro
</string>
<string name="Darker">
- mais escuro
+ Mais escuro
</string>
<string name="Deep">
Profundidade
</string>
<string name="Default Heels">
- Salto Padrão
- </string>
- <string name="Default Toe">
- Dedo do pé padrão
+ Salto padrão
</string>
<string name="Dense">
Densidade
</string>
- <string name="Dense hair">
- Cabelo Denso
- </string>
<string name="Double Chin">
Queixo duplo
</string>
@@ -1935,10 +2153,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Curvado para baixo
</string>
<string name="Duffle Bag">
- pubis
+ Mais volume
</string>
<string name="Ear Angle">
- ângulo da orelha
+ Ângulo da orelha
</string>
<string name="Ear Size">
Tamanho da orelha
@@ -1965,7 +2183,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Abertura dos olhos
</string>
<string name="Eye Pop">
- Olho Saltado
+ Olho saltado
</string>
<string name="Eye Size">
Tamanho dos olhos
@@ -1973,14 +2191,11 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Eye Spacing">
Espaçamento dos olhos
</string>
- <string name="Eyeball Size">
- Tamanho do globo ocular
- </string>
<string name="Eyebrow Arc">
Arco da sobrancelha
</string>
<string name="Eyebrow Density">
- densidade da sobrancelha
+ Densidade da sobrancelha
</string>
<string name="Eyebrow Height">
Altura da sobrancelha
@@ -2000,36 +2215,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Eyeliner Color">
Cor do delineador
</string>
- <string name="Eyes Back">
- Eyes Back
- </string>
<string name="Eyes Bugged">
Olhos esbugalhados
</string>
- <string name="Eyes Forward">
- Eyes Forward
- </string>
- <string name="Eyes Long Head">
- Eyes Long Head
- </string>
- <string name="Eyes Shear Left Up">
- Ponta esquerda dos olhos para cima
- </string>
- <string name="Eyes Shear Right Up">
- Ponta direita dos olhos para cima
- </string>
- <string name="Eyes Short Head">
- Eyes Short Head
- </string>
- <string name="Eyes Spread">
- Extensão dos Olhos
- </string>
- <string name="Eyes Sunken">
- Olhos afundados
- </string>
- <string name="Eyes Together">
- Olhos juntos
- </string>
<string name="Face Shear">
Face raspada
</string>
@@ -2039,30 +2227,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Far Set Eyes">
Distância entre os olhos
</string>
- <string name="Fat">
- Gordo
- </string>
- <string name="Fat Head">
- Cabeça gorda
- </string>
<string name="Fat Lips">
Lábios carnudos
</string>
- <string name="Fat Lower">
- Inferior carnudo
- </string>
- <string name="Fat Lower Lip">
- Lábio superior carnudo
- </string>
- <string name="Fat Torso">
- Tronco corpulento
- </string>
- <string name="Fat Upper">
- Superior carnudo
- </string>
- <string name="Fat Upper Lip">
- lábio superior carnudo
- </string>
<string name="Female">
Feminino
</string>
@@ -2091,7 +2258,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Tamanho dos pés
</string>
<string name="Forehead Angle">
- ângulo da testa
+ Ângulo da testa
</string>
<string name="Forehead Heavy">
Testa pronunciada
@@ -2099,24 +2266,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Freckles">
Sardas
</string>
- <string name="Front Bangs Down">
- Franja da frente longa
- </string>
- <string name="Front Bangs Up">
- Franja da frene arrepiada
- </string>
<string name="Front Fringe">
Franja
</string>
- <string name="Front Hair">
- Cabelo da frente
- </string>
- <string name="Front Hair Down">
- Cabelo da frente baixo
- </string>
- <string name="Front Hair Up">
- cabelo da frente arrepiado
- </string>
<string name="Full Back">
Trás cheia
</string>
@@ -2139,7 +2291,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Dedos da luva
</string>
<string name="Glove Length">
- comprimento das luvas
+ Comprimento das luvas
</string>
<string name="Hair">
Cabelo
@@ -2178,7 +2330,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Tamanho das mãos
</string>
<string name="Handlebars">
- bigode
+ Bigode
</string>
<string name="Head Length">
Comprimento da cabeça
@@ -2202,7 +2354,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Altura
</string>
<string name="High">
- alto
+ Alto
</string>
<string name="High Heels">
Salto alto
@@ -2211,7 +2363,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Maxilar alto
</string>
<string name="High Platforms">
- Plataformas alta
+ Plataformas altas
</string>
<string name="High and Tight">
Alto e justo
@@ -2247,7 +2399,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Comprimento da blusa
</string>
<string name="Jacket Wrinkles">
- Dobras da Blusa
+ Dobras da jaqueta
</string>
<string name="Jaw Angle">
Ângulo da mandíbula
@@ -2289,7 +2441,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Menos
</string>
<string name="Less Body Fat">
- Menos gordura corporal
+ Menos gordura
</string>
<string name="Less Curtains">
Menos barba
@@ -2304,7 +2456,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Menos gravidade
</string>
<string name="Less Love">
- Menos cintura
+ Menos excesso
</string>
<string name="Less Muscles">
Menos músculos
@@ -2337,7 +2489,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Fenda dos lábios
</string>
<string name="Lip Cleft Depth">
- Prfundidade da fenda dos lábios
+ Profundidade da fenda dos lábios
</string>
<string name="Lip Fullness">
Volume dos lábios
@@ -2390,44 +2542,41 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Long arms">
Braços longos
</string>
- <string name="Longcuffs">
- Punho longo
- </string>
<string name="Loose Pants">
Pantalonas
</string>
<string name="Loose Shirt">
- Saia folgada
+ Camisa folgada
</string>
<string name="Loose Sleeves">
- Manga longa
+ Mangas folgadas
</string>
<string name="Love Handles">
Pneu
</string>
<string name="Low">
- baixo
+ Baixo
</string>
<string name="Low Heels">
Salto baixo
</string>
<string name="Low Jaw">
- maxilar baixo
+ Maxilar baixo
</string>
<string name="Low Platforms">
Plataformas baixas
</string>
<string name="Low and Loose">
- baixo e solto
+ Baixo e solto
</string>
<string name="Lower">
- diminuir
+ Mais baixo
</string>
<string name="Lower Bridge">
- nariz baixo
+ Mais baixa
</string>
<string name="Lower Cheeks">
- bochechas abaixadas
+ Bochechas abaixadas
</string>
<string name="Male">
Masculino
@@ -2442,7 +2591,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Mais blush
</string>
<string name="More Body Fat">
- Mais gordura corporal
+ Mais gordura
</string>
<string name="More Curtains">
Mais barba
@@ -2496,7 +2645,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Mais vertical
</string>
<string name="More Volume">
- Mais Volume
+ Mais volume
</string>
<string name="More soul">
Mais alma
@@ -2547,19 +2696,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Espessura do pescoço
</string>
<string name="No Blush">
- Sem Blush
+ Sem blush
</string>
<string name="No Eyeliner">
Sem delineador
</string>
<string name="No Eyeshadow">
- Sem Sombra dos olhos
- </string>
- <string name="No Heels">
- Sem salto
+ Sem sombra
</string>
<string name="No Lipgloss">
- Sem brilho labial
+ Sem brilho
</string>
<string name="No Lipstick">
Sem batom
@@ -2574,7 +2720,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Sem vermelho
</string>
<string name="No Spikes">
- Sem espinhos
+ Sem pontas
</string>
<string name="No White">
Sem branco
@@ -2615,9 +2761,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Nostril Width">
Largura das narinas
</string>
- <string name="Old">
- Velho
- </string>
<string name="Opaque">
Opaco
</string>
@@ -2658,10 +2801,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Sombra externa
</string>
<string name="Overbite">
- Overbite
+ Má oclusão
</string>
<string name="Package">
- Pubis
+ Púbis
</string>
<string name="Painted Nails">
Unhas pintadas
@@ -2673,7 +2816,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Cavalo da calça
</string>
<string name="Pants Fit">
- Pants Fit
+ Caimento das calças
</string>
<string name="Pants Length">
Comprimento das calças
@@ -2688,10 +2831,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Parte
</string>
<string name="Part Bangs">
- Parts da franja
+ Divisão da franja
</string>
<string name="Pectorals">
- Peitoral
+ Peitorais
</string>
<string name="Pigment">
Pigmento
@@ -2717,9 +2860,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Pointy Heels">
Salto agulha
</string>
- <string name="Pointy Toe">
- Dedo dos pés pontudo
- </string>
<string name="Ponytail">
Rabo de cavalo
</string>
@@ -2739,20 +2879,14 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Pálpebras inchadas
</string>
<string name="Rainbow Color">
- Cor do arco iris
+ Cor do arco íris
</string>
<string name="Red Hair">
Cabelo ruivo
</string>
- <string name="Red Skin">
- Pele vermelha
- </string>
<string name="Regular">
Normal
</string>
- <string name="Regular Muscles">
- Músculos normais
- </string>
<string name="Right Part">
Parte direita
</string>
@@ -2762,9 +2896,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Round">
Arredondado
</string>
- <string name="Round Forehead">
- Testa arredonda
- </string>
<string name="Ruddiness">
Rubor
</string>
@@ -2775,13 +2906,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Cabelo desalinhado
</string>
<string name="Saddle Bags">
- Saddle Bags
- </string>
- <string name="Saddlebags">
- Saddlebags
- </string>
- <string name="Scrawny">
- Magricela
+ Culote
</string>
<string name="Scrawny Leg">
Pernas magricelas
@@ -2789,14 +2914,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Separate">
Separar
</string>
- <string name="Shading">
- Sombreamento
- </string>
- <string name="Shadow hair">
- Sombra do cabelo
- </string>
<string name="Shallow">
- raso
+ Raso
</string>
<string name="Shear Back">
Trás rente
@@ -2807,15 +2926,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Shear Front">
Frente rente
</string>
- <string name="Shear Left">
- Rente esquerda
- </string>
<string name="Shear Left Up">
Esquerda rente para cima
</string>
- <string name="Shear Right">
- Direita rente
- </string>
<string name="Shear Right Up">
Trás rente para cima
</string>
@@ -2826,22 +2939,22 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Rente frente
</string>
<string name="Shift Left">
- Deslocar à esquerda
+ Deslocar p/ esquerda
</string>
<string name="Shift Mouth">
Deslocar boca
</string>
<string name="Shift Right">
- Deslocar direita
+ Deslocar p/ direita
</string>
<string name="Shirt Bottom">
- Deslocar inferior
+ Barra da camisa
</string>
<string name="Shirt Fit">
- Deslocar ajuste
+ Ajuste da camisa
</string>
<string name="Shirt Wrinkles">
- Deslocar dobras
+ +/- amassada
</string>
<string name="Shoe Height">
Altura do sapato
@@ -2876,15 +2989,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Shoulders">
Ombros
</string>
- <string name="Side Bangs">
- Franja lateral
- </string>
- <string name="Side Bangs Down">
- Franja lateral longa
- </string>
- <string name="Side Bangs Up">
- Franja lateral arrepiada
- </string>
<string name="Side Fringe">
pontas laterais
</string>
@@ -2900,9 +3004,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Sides Hair Up">
Cabelo lateral superior
</string>
- <string name="Skinny">
- Magro
- </string>
<string name="Skinny Neck">
Pescoço fino
</string>
@@ -2951,9 +3052,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Socks Length">
Comprimento das meias
</string>
- <string name="Some">
- Alguns
- </string>
<string name="Soulpatch">
Cavanhaque
</string>
@@ -2972,9 +3070,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Squash Head">
Cabeça de Pera
</string>
- <string name="Squash/Stretch Head">
- Cabeça esticada/forma de pera
- </string>
<string name="Stretch Head">
Cabeça esticada
</string>
@@ -2993,18 +3088,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Sweep Forward">
Pentear para frente
</string>
- <string name="Swept Back">
- Pentear para trás
- </string>
- <string name="Swept Back Hair">
- Cabelo penteado para trás
- </string>
- <string name="Swept Forward">
- Penteado para frente
- </string>
- <string name="Swept Forward Hair">
- Cabelo penteado para frente
- </string>
<string name="Tall">
Alto
</string>
@@ -3023,9 +3106,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Thick Toe">
Dedo grosso
</string>
- <string name="Thickness">
- Espessura
- </string>
<string name="Thin">
Fino
</string>
@@ -3056,12 +3136,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Tight Sleeves">
Tight Sleeves
</string>
- <string name="Tilt Left">
- Inclinado à esquerda
- </string>
- <string name="Tilt Right">
- Inclinado à direita
- </string>
<string name="Toe Shape">
Formato dos dedos
</string>
@@ -3144,7 +3218,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Ver mais informações sobre a localização atual
</string>
<string name="LocationCtrlComboBtnTooltip">
- Meu histórico de localizações
+ Histórico de localizações
</string>
<string name="UpdaterWindowTitle">
[APP_NAME] Atualização
@@ -3203,6 +3277,21 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="IM_moderator_label">
(Moderador)
</string>
+ <string name="started_call">
+ Iniciou uma ligação de voz
+ </string>
+ <string name="joined_call">
+ Entrou na ligação
+ </string>
+ <string name="ringing-im">
+ Entrando em ligação de voz...
+ </string>
+ <string name="connected-im">
+ Conectado. Para sair, clique em Desligar
+ </string>
+ <string name="hang_up-im">
+ Saiu da ligação de voz
+ </string>
<string name="only_user_message">
Você é o único usuário desta sessão.
</string>
@@ -3212,6 +3301,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="invite_message">
Clique no botão [BUTTON NAME] para aceitar/ conectar a este bate-papo em voz.
</string>
+ <string name="muted_message">
+ Você bloqueou este residente. Se quiser retirar o bloqueio, basta enviar uma mensagem.
+ </string>
+ <string name="generic">
+ Erro de solicitação, tente novamente mais tarde.
+ </string>
<string name="generic_request_error">
Erro na requisição, por favor, tente novamente.
</string>
@@ -3230,19 +3325,153 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="not_a_mod_error">
Você não é um moderador de sessão.
</string>
+ <string name="muted">
+ Bate-papo de texto desativado por um moderador.
+ </string>
<string name="muted_error">
Um moderador do grupo desabilitou seu bate-papo em texto.
</string>
<string name="add_session_event">
Não foi possível adicionar usuários na sessão de bate-papo com [RECIPIENT].
</string>
+ <string name="message">
+ Não foi possível enviar sua mensagem para o bate-papo com [RECIPIENT].
+ </string>
<string name="message_session_event">
Não foi possível enviar sua mensagem na sessão de bate- papo com [RECIPIENT].
</string>
+ <string name="mute">
+ Erro durante a moderação.
+ </string>
+ <string name="removed">
+ Você foi tirado do grupo.
+ </string>
<string name="removed_from_group">
Você foi removido do grupo.
</string>
<string name="close_on_no_ability">
Você não possui mais a habilidade de estar na sessão de bate-papo.
</string>
+ <string name="unread_chat_single">
+ [SOURCES] disse alguma coisa
+ </string>
+ <string name="unread_chat_multiple">
+ [SOURCES] disseram alguma coisa
+ </string>
+ <string name="paid_you_ldollars">
+ [NAME] lhe pagou L$ [AMOUNT]
+ </string>
+ <string name="you_paid_ldollars">
+ You pagou L$[AMOUNT] por [REASON] a [NAME].
+ </string>
+ <string name="you_paid_ldollars_no_reason">
+ You pagou L$[AMOUNT] a [NAME].
+ </string>
+ <string name="you_paid_ldollars_no_name">
+ You pagou L$[AMOUNT] por [REASON].
+ </string>
+ <string name="for a parcel of land">
+ por uma parcela
+ </string>
+ <string name="for a land access pass">
+ por um passe de acesso
+ </string>
+ <string name="for deeding land">
+ para doar um terreno
+ </string>
+ <string name="to create a group">
+ para criar um grupo
+ </string>
+ <string name="to join a group">
+ para entrar em um grupo
+ </string>
+ <string name="to upload">
+ para carregar
+ </string>
+ <string name="giving">
+ Dando L$ [AMOUNT]
+ </string>
+ <string name="uploading_costs">
+ O upload custa L$ [AMOUNT]
+ </string>
+ <string name="this_costs">
+ Isso custa L$ [AMOUNT]
+ </string>
+ <string name="buying_selected_land">
+ Comprando terreno selecionado L$ [AMOUNT]
+ </string>
+ <string name="this_object_costs">
+ Esse objeto custa L$ [AMOUNT]
+ </string>
+ <string name="group_role_everyone">
+ Todos
+ </string>
+ <string name="group_role_officers">
+ Oficiais
+ </string>
+ <string name="group_role_owners">
+ Proprietários
+ </string>
+ <string name="uploading_abuse_report">
+ Carregando...
+
+Denunciar abuso
+ </string>
+ <string name="New Shape">
+ Nova forma
+ </string>
+ <string name="New Skin">
+ Nova pele
+ </string>
+ <string name="New Hair">
+ Novo cabelo
+ </string>
+ <string name="New Eyes">
+ Novos olhos
+ </string>
+ <string name="New Shirt">
+ Nova camisa
+ </string>
+ <string name="New Pants">
+ Novas calças
+ </string>
+ <string name="New Shoes">
+ Novos sapatos
+ </string>
+ <string name="New Socks">
+ Novas meias
+ </string>
+ <string name="New Jacket">
+ Nova blusa
+ </string>
+ <string name="New Gloves">
+ Novas luvas
+ </string>
+ <string name="New Undershirt">
+ Nova camiseta
+ </string>
+ <string name="New Underpants">
+ Novas roupa de baixo
+ </string>
+ <string name="New Skirt">
+ Nova saia
+ </string>
+ <string name="New Alpha">
+ Novo alpha
+ </string>
+ <string name="New Tattoo">
+ Nova tatuagem
+ </string>
+ <string name="Invalid Wearable">
+ Item inválido
+ </string>
+ <string name="New Script">
+ Novo script
+ </string>
+ <string name="New Folder">
+ Nova pasta
+ </string>
+ <string name="Contents">
+ Conteúdo
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/pt/teleport_strings.xml b/indra/newview/skins/default/xui/pt/teleport_strings.xml
index 1a0461082b..92ffee0233 100644
--- a/indra/newview/skins/default/xui/pt/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/pt/teleport_strings.xml
@@ -59,6 +59,9 @@ Se você continuar a receber esta mensagem, por favor consulte o [SUPPORT_SITE].
<message name="completing">
Completando teletransporte.
</message>
+ <message name="completed_from">
+ Teletransporte de [T_SLURL] concluído
+ </message>
<message name="resolving">
Identificando destino.
</message>
diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp
index dd61ac6ae5..eecc79d36c 100644
--- a/indra/newview/tests/llviewerhelputil_test.cpp
+++ b/indra/newview/tests/llviewerhelputil_test.cpp
@@ -86,7 +86,7 @@ public:
#ifdef __GNUC__
__attribute__ ((noinline))
#endif
- BOOL isGodlike() const { return FALSE; }
+ bool isGodlike() const { return FALSE; }
};
LLAgent gAgent;
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 3f379fcf75..18ac10fe38 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -479,8 +479,8 @@ class WindowsManifest(ViewerManifest):
grid_vars_template = """
OutFile "%(installer_file)s"
!define INSTFLAGS "%(flags)s"
- !define INSTNAME "SecondLife"
- !define SHORTCUT "Second Life"
+ !define INSTNAME "SecondLifeViewer2"
+ !define SHORTCUT "Second Life Viewer 2"
!define URLNAME "secondlife"
Caption "Second Life ${VERSION}"
"""
@@ -686,7 +686,7 @@ class DarwinManifest(ViewerManifest):
def package_finish(self):
- channel_standin = 'Second Life' # hah, our default channel is not usable on its own
+ channel_standin = 'Second Life Viewer 2' # hah, our default channel is not usable on its own
if not self.default_channel():
channel_standin = self.channel()
diff --git a/indra/test/llpermissions_tut.cpp b/indra/test/llpermissions_tut.cpp
index 4eadc64b5a..d5795ef4a0 100644
--- a/indra/test/llpermissions_tut.cpp
+++ b/indra/test/llpermissions_tut.cpp
@@ -61,7 +61,7 @@ namespace tut
uuid2 == LLUUID::null && uuid3 == LLUUID::null));
ensure("LLPermission Get Functions failed", (permissions.getMaskBase() == PERM_ALL && permissions.getMaskOwner() == PERM_ALL &&
permissions.getMaskGroup() == PERM_ALL && permissions.getMaskEveryone() == PERM_ALL && permissions.getMaskNextOwner() == PERM_ALL));
- ensure("Ownership functions failed", (permissions.isGroupOwned() == FALSE && permissions.isOwned() == FALSE));
+ ensure("Ownership functions failed", ((! permissions.isGroupOwned()) && (! permissions.isOwned())));
}
template<> template<>
@@ -204,7 +204,7 @@ namespace tut
LLPermissions perm1;
LLUUID uuid;
BOOL is_group_owned = FALSE;
- ensure("1:getOwnership:failed ", (FALSE == perm1.getOwnership(uuid,is_group_owned)));
+ ensure("1:getOwnership:failed ", ! perm1.getOwnership(uuid,is_group_owned));
LLPermissions perm;
LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
@@ -213,11 +213,11 @@ namespace tut
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
perm.init(creator,owner,lastOwner,group);
perm.getOwnership(uuid,is_group_owned);
- ensure("2:getOwnership:failed ", ((uuid == owner) && (FALSE == is_group_owned)));
+ ensure("2:getOwnership:failed ", ((uuid == owner) && (! is_group_owned)));
perm.init(creator,LLUUID::null,lastOwner,group);
perm.getOwnership(uuid,is_group_owned);
- ensure("3:getOwnership:failed ", ((uuid == group) && (TRUE == is_group_owned)));
+ ensure("3:getOwnership:failed ", ((uuid == group) && is_group_owned));
}
template<> template<>
@@ -240,17 +240,17 @@ namespace tut
LLUUID agent("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
- bool is_atomic = TRUE;
- ensure("setOwnerAndGroup():failed ", (TRUE == perm.setOwnerAndGroup(agent,owner,group,is_atomic)));
+ bool is_atomic = true;
+ ensure("setOwnerAndGroup():failed ", perm.setOwnerAndGroup(agent,owner,group,is_atomic));
LLUUID owner2("68edcf47-ccd7-45b8-9f90-1649d7f12807");
LLUUID group2("9c8eca51-53d5-42a7-bb58-cef070395db9");
// cant change - agent need to be current owner
- ensure("setOwnerAndGroup():failed ", (FALSE == perm.setOwnerAndGroup(agent,owner2,group2,is_atomic)));
+ ensure("setOwnerAndGroup():failed ", ! perm.setOwnerAndGroup(agent,owner2,group2,is_atomic));
// should be able to change - agent and owner same as current owner
- ensure("setOwnerAndGroup():failed ", (TRUE == perm.setOwnerAndGroup(owner,owner,group2,is_atomic)));
+ ensure("setOwnerAndGroup():failed ", perm.setOwnerAndGroup(owner,owner,group2,is_atomic));
}
template<> template<>
@@ -259,7 +259,7 @@ namespace tut
LLPermissions perm;
LLUUID agent;
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
- ensure("deedToGroup():failed ", (TRUE == perm.deedToGroup(agent,group)));
+ ensure("deedToGroup():failed ", perm.deedToGroup(agent,group));
}
template<> template<>
void permission_object_t::test<11>()
@@ -268,12 +268,12 @@ namespace tut
LLUUID agent;
BOOL set = 1;
U32 bits = PERM_TRANSFER | PERM_MODIFY;
- ensure("setBaseBits():failed ", (TRUE == perm.setBaseBits(agent, set, bits)));
- ensure("setOwnerBits():failed ", (TRUE == perm.setOwnerBits(agent, set, bits)));
+ ensure("setBaseBits():failed ", perm.setBaseBits(agent, set, bits));
+ ensure("setOwnerBits():failed ", perm.setOwnerBits(agent, set, bits));
LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8");
- ensure("setBaseBits():failed ", (FALSE == perm.setBaseBits(agent1, set, bits)));
- ensure("setOwnerBits():failed ", (FALSE == perm.setOwnerBits(agent1, set, bits)));
+ ensure("setBaseBits():failed ", ! perm.setBaseBits(agent1, set, bits));
+ ensure("setOwnerBits():failed ", ! perm.setOwnerBits(agent1, set, bits));
}
template<> template<>
@@ -284,14 +284,14 @@ namespace tut
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
BOOL set = 1;
U32 bits = 10;
- ensure("setGroupBits():failed ", (TRUE == perm.setGroupBits(agent,group, set, bits)));
- ensure("setEveryoneBits():failed ", (TRUE == perm.setEveryoneBits(agent,group, set, bits)));
- ensure("setNextOwnerBits():failed ", (TRUE == perm.setNextOwnerBits(agent,group, set, bits)));
-
- LLUUID agent1("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
- ensure("setGroupBits():failed ", (FALSE == perm.setGroupBits(agent1,group, set, bits)));
- ensure("setEveryoneBits():failed ", (FALSE == perm.setEveryoneBits(agent1,group, set, bits)));
- ensure("setNextOwnerBits():failed ", (FALSE == perm.setNextOwnerBits(agent1,group, set, bits)));
+ ensure("setGroupBits():failed ", perm.setGroupBits(agent,group, set, bits));
+ ensure("setEveryoneBits():failed ", perm.setEveryoneBits(agent,group, set, bits));
+ ensure("setNextOwnerBits():failed ", perm.setNextOwnerBits(agent,group, set, bits));
+
+ LLUUID agent1("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ ensure("setGroupBits():failed ", ! perm.setGroupBits(agent1,group, set, bits));
+ ensure("setEveryoneBits():failed ", ! perm.setEveryoneBits(agent1,group, set, bits));
+ ensure("setNextOwnerBits():failed ", ! perm.setNextOwnerBits(agent1,group, set, bits));
}
template<> template<>
@@ -301,14 +301,14 @@ namespace tut
LLUUID agent;
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
U32 bits = 10;
- ensure("allowOperationBy():failed ", (TRUE == perm.allowOperationBy(bits,agent,group)));
+ ensure("allowOperationBy():failed ", perm.allowOperationBy(bits,agent,group));
LLUUID agent1("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
perm.init(creator,owner,lastOwner,group);
- ensure("allowOperationBy():failed ", (TRUE == perm.allowOperationBy(bits,agent1,group)));
+ ensure("allowOperationBy():failed ", perm.allowOperationBy(bits,agent1,group));
}
template<> template<>
@@ -321,15 +321,12 @@ namespace tut
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
perm.init(creator,owner,lastOwner,group);
LLUUID agent;
- ensure("1:allowModifyBy():failed ", (TRUE == perm.allowModifyBy(agent)));
- ensure("2:allowModifyBy():failed ", (TRUE == perm.allowModifyBy(agent,group)));
+ ensure("1:allowModifyBy():failed ", perm.allowModifyBy(agent));
+ ensure("2:allowModifyBy():failed ", perm.allowModifyBy(agent,group));
- U32 val1 = 0x7FFFFFFF;
- S32 sVal = 1 << 14;
- sVal = val1 & sVal;
LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8");
- ensure("3:allowModifyBy():failed ", (sVal == perm.allowModifyBy(agent1)));
- ensure("4:allowModifyBy():failed ", (sVal == perm.allowModifyBy(agent1,group)));
+ ensure("3:allowModifyBy():failed ", perm.allowModifyBy(agent1));
+ ensure("4:allowModifyBy():failed ", perm.allowModifyBy(agent1,group));
}
template<> template<>
@@ -342,15 +339,12 @@ namespace tut
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
perm.init(creator,owner,lastOwner,group);
LLUUID agent;
- ensure("1:allowCopyBy():failed ", (TRUE == perm.allowModifyBy(agent)));
- ensure("2:allowCopyBy():failed ", (TRUE == perm.allowModifyBy(agent,group)));
+ ensure("1:allowCopyBy():failed ", perm.allowModifyBy(agent));
+ ensure("2:allowCopyBy():failed ", perm.allowModifyBy(agent,group));
- U32 val1 = 0x7FFFFFFF;
- S32 sVal = 1 << 15;
- sVal = val1 & sVal;
LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8");
- ensure("3:allowCopyBy():failed ", (sVal == perm.allowCopyBy(agent1)));
- ensure("4:allowCopyBy():failed ", (sVal == perm.allowCopyBy(agent1,group)));
+ ensure("3:allowCopyBy():failed ", perm.allowCopyBy(agent1));
+ ensure("4:allowCopyBy():failed ", perm.allowCopyBy(agent1,group));
}
template<> template<>
@@ -363,15 +357,12 @@ namespace tut
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
perm.init(creator,owner,lastOwner,group);
LLUUID agent;
- ensure("1:allowMoveBy():failed ", (TRUE == perm.allowMoveBy(agent)));
- ensure("2:allowMoveBy():failed ", (TRUE == perm.allowMoveBy(agent,group)));
+ ensure("1:allowMoveBy():failed ", perm.allowMoveBy(agent));
+ ensure("2:allowMoveBy():failed ", perm.allowMoveBy(agent,group));
- U32 val1 = 0x7FFFFFFF;
- S32 sVal = 1 << 19;
- sVal = val1 & sVal;
LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8");
- ensure("3:allowMoveBy():failed ", (sVal == perm.allowMoveBy(agent1)));
- ensure("4:allowMoveBy():failed ", (sVal == perm.allowMoveBy(agent1,group)));
+ ensure("3:allowMoveBy():failed ", perm.allowMoveBy(agent1));
+ ensure("4:allowMoveBy():failed ", perm.allowMoveBy(agent1,group));
}
template<> template<>
@@ -383,20 +374,17 @@ namespace tut
LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
LLUUID agent;
- ensure("1:allowMoveBy():failed ", (TRUE == perm.allowTransferTo(agent)));
+ ensure("1:allowMoveBy():failed ", perm.allowTransferTo(agent));
perm.init(creator,owner,lastOwner,group);
- U32 val1 = 0x7FFFFFFF;
- S32 sVal = 1 << 13;
- sVal = val1 & sVal;
- ensure("2:allowMoveBy():failed ", (sVal == perm.allowTransferTo(agent)));
+ ensure("2:allowMoveBy():failed ", perm.allowTransferTo(agent));
}
template<> template<>
void permission_object_t::test<18>()
{
LLPermissions perm,perm1;
- ensure("1:Operator==:failed ", perm == perm1);
+ ensure_equals("1:Operator==:failed ", perm, perm1);
LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
@@ -404,7 +392,7 @@ namespace tut
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
perm.init(creator,owner,lastOwner,group);
perm = perm1;
- ensure("2:Operator==:failed ", perm == perm1);
+ ensure_equals("2:Operator==:failed ", perm, perm1);
}
template<> template<>
@@ -416,7 +404,7 @@ namespace tut
LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
perm.init(creator,owner,lastOwner,group);
- ensure("2:Operator==:failed ", perm != perm1);
+ ensure_not_equals("2:Operator==:failed ", perm, perm1);
}
template<> template<>
@@ -453,7 +441,7 @@ namespace tut
}
perm1.importFile(fp);
fclose(fp);
- ensure("exportFile()/importFile():failed to export and import the data ", perm1 == perm);
+ ensure_equals("exportFile()/importFile():failed to export and import the data ", perm1, perm);
}
template<> template<>
@@ -479,7 +467,7 @@ namespace tut
std::istringstream istream(ostream.str());
perm1.importLegacyStream(istream);
- ensure("exportLegacyStream()/importLegacyStream():failed to export and import the data ", perm1 == perm);
+ ensure_equals("exportLegacyStream()/importLegacyStream():failed to export and import the data ", perm1, perm);
}
template<> template<>
@@ -502,7 +490,7 @@ namespace tut
stream1 << perm;
perm1.init(creator,owner,lastOwner,group);
stream2 << perm1;
- ensure("1:operator << failed",(stream1.str() == stream2.str()));
+ ensure_equals("1:operator << failed", stream1.str(), stream2.str());
}
template<> template<>
@@ -533,19 +521,19 @@ namespace tut
{
LLAggregatePermissions AggrPermission;
LLAggregatePermissions AggrPermission1;
- ensure("getU8() function failed", (AggrPermission.getU8() == 0));
- ensure("isEmpty() function failed", (AggrPermission.isEmpty() == TRUE));
+ ensure_equals("getU8() function failed", AggrPermission.getU8(), 0);
+ ensure("isEmpty() function failed", AggrPermission.isEmpty());
AggrPermission.getValue(PERM_TRANSFER);
ensure_equals("getValue() function failed", AggrPermission.getValue(PERM_TRANSFER), 0x00);
AggrPermission.aggregate(PERM_ITEM_UNRESTRICTED);
- ensure("aggregate() function failed", (AggrPermission.isEmpty() == FALSE));
+ ensure("aggregate() function failed", ! AggrPermission.isEmpty());
AggrPermission1.aggregate(AggrPermission);
- ensure("aggregate() function failed", (AggrPermission1.isEmpty() == FALSE));
+ ensure("aggregate() function failed", ! AggrPermission1.isEmpty());
std::ostringstream stream1;
stream1 << AggrPermission;
- ensure("operator<< failed", (stream1.str() == "{PI_COPY=All, PI_MODIFY=All, PI_TRANSFER=All}"));
+ ensure_equals("operator<< failed", stream1.str(), "{PI_COPY=All, PI_MODIFY=All, PI_TRANSFER=All}");
}
}
diff --git a/indra/test_apps/llplugintest/bookmarks.txt b/indra/test_apps/llplugintest/bookmarks.txt
index b8b83df386..2ff64f217f 100644
--- a/indra/test_apps/llplugintest/bookmarks.txt
+++ b/indra/test_apps/llplugintest/bookmarks.txt
@@ -18,20 +18,20 @@
(Flash) Scribd,http://www.scribd.com/doc/14427744/Second-Life-Quickstart-Guide
(Flash) MAME,http://yvern.com/fMAME/fMAME.html
(QT) Local sample,file:///C|/Program Files/QuickTime/Sample.mov
-(QT) Movie - Watchmen Trailer,http://movies.apple.com/movies/wb/watchmen/watchmen-tlr2_480p.mov
-(QT) Movie - Transformers - Revenge of the Fallen,http://movies.apple.com/movies/paramount/transformers2/transformersrevengeofthefallen-tlr1_h.320.mov
-(QT) Movie - Terminator Salvation,http://movies.apple.com/movies/wb/terminatorsalvation/terminatorsalvation-tlr3_h.320.mov
-(QT) Movie - Angels and Demons,http://movies.apple.com/movies/sony_pictures/angelsanddemons/angelsanddemons-video_h.320.mov
-(QT) Movie - Sin City Trailer,http://movies.apple.com/movies/miramax/sin_city/sin_city_480.mov
-(QT) Movie - The Incredibles Trailer,http://movies.apple.com/movies/disney/the_incredibles/the_incredibles-tlr_a480.mov
+(QT) Movie - Watchmen Trailer,http://trailers.apple.com/movies/wb/watchmen/watchmen-tlr2_480p.mov
+(QT) Movie - Transformers - Revenge of the Fallen,http://trailers.apple.com/movies/paramount/transformers2/transformersrevengeofthefallen-tlr1_h.320.mov
+(QT) Movie - Terminator Salvation,http://trailers.apple.com/movies/wb/terminatorsalvation/terminatorsalvation-tlr3_h.320.mov
+(QT) Movie - Angels and Demons,http://trailers.apple.com/movies/sony_pictures/angelsanddemons/angelsanddemons-video_h.320.mov
+(QT) Movie - Sin City Trailer,http://trailers.apple.com/movies/miramax/sin_city/sin_city_480.mov
+(QT) Movie - The Incredibles Trailer,http://trailers.apple.com/movies/disney/the_incredibles/the_incredibles-tlr_a480.mov
(QT) Movie - Streaming Apple Event,http://stream.qtv.apple.com/events/mar/0903lajkszg/m_090374535329zdwg_650_ref.mov
(QT) Movie - MPEG-4 from Amazon S3,http://s3.amazonaws.com/callum-linden/flashdemo/interactive_flash_demo.mp4
-(QT) Movie - Star Trek,http://movies.apple.com/movies/paramount/star_trek/startrek-tlr3_h.320.mov
-(QT) Movie - Ice Age 3,http://movies.apple.com/movies/fox/ice_age_iii/iceage3-tlrd_h.320.mov
-(QT) Movie - AstroBoy,http://movies.apple.com/movies/summit/astroboy/astroboy-tsr_h.320.mov
-(QT) Movie - Ante Up,http://movies.apple.com/movies/independent/anteup/anteup_h.320.mov
-(QT) Movie - Every Little Step,http://movies.apple.com/movies/sony/everylittlestep/everylittlestep-clip_h.320.mov
-(QT) Movie - The Informers,http://movies.apple.com/movies/independent/theinformers/theinformers_h.320.mov
+(QT) Movie - Star Trek,http://trailers.apple.com/movies/paramount/star_trek/startrek-tlr3_h.320.mov
+(QT) Movie - Ice Age 3,http://trailers.apple.com/movies/fox/ice_age_iii/iceage3-tlrd_h.320.mov
+(QT) Movie - AstroBoy,http://trailers.apple.com/movies/summit/astroboy/astroboy-tsr_h.320.mov
+(QT) Movie - Ante Up,http://trailers.apple.com/movies/independent/anteup/anteup_h.320.mov
+(QT) Movie - Every Little Step,http://trailers.apple.com/movies/sony/everylittlestep/everylittlestep-clip_h.320.mov
+(QT) Movie - The Informers,http://trailers.apple.com/movies/independent/theinformers/theinformers_h.320.mov
(QT) Animated GIF,http://upload.wikimedia.org/wikipedia/commons/4/44/Optical.greysquares.arp-animated.gif
(QT) Apple Text Descriptors,http://ubrowser.com/tmp/apple_text.txt
(EX) Example Plugin,example://blah
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 0ff53f3e00..7e9a8336e7 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -66,11 +66,11 @@ static void gluiCallbackWrapper( int control_id );
static bool isTexture( GLuint texture )
{
bool result = false;
-
+
// glIsTexture will sometimes return false for real textures... do this instead.
if(texture != 0)
result = true;
-
+
return result;
}
@@ -95,24 +95,24 @@ mediaPanel::~mediaPanel()
glDeleteTextures( 1, &mPickTextureHandle );
mPickTextureHandle = 0;
}
-
+
if ( isTexture( mMediaTextureHandle ) )
{
std::cerr << "remMediaPanel: deleting media texture " << mMediaTextureHandle << std::endl;
glDeleteTextures( 1, &mMediaTextureHandle );
mMediaTextureHandle = 0;
}
-
+
if(mPickTexturePixels)
{
delete mPickTexturePixels;
}
-
+
if(mMediaSource)
{
delete mMediaSource;
}
-
+
}
////////////////////////////////////////////////////////////////////////////////
@@ -128,6 +128,7 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind
mCurMouseY( 0 ),
mFuzzyMedia( true ),
mSelectedPanel( 0 ),
+ mDistanceCameraToSelectedGeometry( 0.0f ),
mMediaBrowserControlEnableCookies( 0 ),
mMediaBrowserControlBackButton( 0 ),
mMediaBrowserControlForwardButton( 0 ),
@@ -151,7 +152,7 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind
//mBookmarks.push_back( std::pair< std::string, std::string >( "description", "url" ) );
// read bookmarks from file.
- // note: uses command in ./CmakeLists.txt which copies bookmmarks file from source directory
+ // note: uses command in ./CmakeLists.txt which copies bookmmarks file from source directory
// to app directory (WITHOUT build configuration dir) (this is cwd in Windows within MSVC)
// For example, test_apps\llplugintest and not test_apps\llplugintest\Release
// This may need to be changed for Mac/Linux builds.
@@ -193,7 +194,7 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind
// initialize linden lab APR module
ll_init_apr();
- // Set up llerror logging
+ // Set up llerror logging
{
LLError::initForApplication(".");
LLError::setDefaultLevel(LLError::LEVEL_INFO);
@@ -273,7 +274,7 @@ void LLMediaPluginTest::reshape( int width, int height )
void LLMediaPluginTest::bindTexture(GLuint texture, GLint row_length, GLint alignment)
{
glEnable( GL_TEXTURE_2D );
-
+
glBindTexture( GL_TEXTURE_2D, texture );
glPixelStorei( GL_UNPACK_ROW_LENGTH, row_length );
glPixelStorei( GL_UNPACK_ALIGNMENT, alignment );
@@ -285,27 +286,57 @@ bool LLMediaPluginTest::checkGLError(const char *name)
{
bool result = false;
GLenum error = glGetError();
-
+
if(error != GL_NO_ERROR)
{
// For some reason, glGenTextures is returning GL_INVALID_VALUE...
std::cout << name << " ERROR 0x" << std::hex << error << std::dec << std::endl;
result = true;
}
-
+
return result;
}
////////////////////////////////////////////////////////////////////////////////
//
-void LLMediaPluginTest::drawGeometry( int panel )
+GLfloat LLMediaPluginTest::distanceToCamera( GLfloat point_x, GLfloat point_y, GLfloat point_z )
+{
+ GLdouble camera_pos_x = 0.0f;
+ GLdouble camera_pos_y = 0.0f;
+ GLdouble camera_pos_z = 0.0f;
+
+ GLdouble modelMatrix[16];
+ GLdouble projMatrix[16];
+ GLint viewport[4];
+
+ glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix);
+ glGetDoublev(GL_PROJECTION_MATRIX, projMatrix);
+ glGetIntegerv(GL_VIEWPORT, viewport);
+
+ gluUnProject(
+ (viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2,
+ 0.0,
+ modelMatrix, projMatrix, viewport,
+ &camera_pos_x, &camera_pos_y, &camera_pos_z );
+
+ GLfloat distance =
+ sqrt( ( camera_pos_x - point_x ) * ( camera_pos_x - point_x ) +
+ ( camera_pos_y - point_y ) * ( camera_pos_y - point_y ) +
+ ( camera_pos_z - point_z ) * ( camera_pos_z - point_z ) );
+
+ return distance;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLMediaPluginTest::drawGeometry( int panel, bool selected )
{
// texture coordinates for each panel
GLfloat non_opengl_texture_coords[ 8 ] = { 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f };
GLfloat opengl_texture_coords[ 8 ] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f };
-
+
GLfloat *texture_coords = mMediaPanels[ panel ]->mAppTextureCoordsOpenGL?opengl_texture_coords:non_opengl_texture_coords;
-
+
// base coordinates for each panel
GLfloat base_vertex_pos[ 8 ] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f };
@@ -316,31 +347,35 @@ void LLMediaPluginTest::drawGeometry( int panel )
const int panel_x = ( panel / num_rows );
const int panel_y = ( panel % num_rows );
- const float spacing = 0.1f;
+ // default spacing is small - make it larger if checkbox set - for testing positional audio
+ float spacing = 0.1f;
+ if ( mLargePanelSpacing )
+ spacing = 2.0f;
+
const GLfloat offset_x = num_cols * ( 1.0 + spacing ) / 2;
const GLfloat offset_y = num_rows * ( 1.0 + spacing ) / 2;
-
+
// Adjust for media aspect ratios
- {
+ {
float aspect = 1.0f;
if(mMediaPanels[ panel ]->mMediaHeight != 0)
{
aspect = (float)mMediaPanels[ panel ]->mMediaWidth / (float)mMediaPanels[ panel ]->mMediaHeight;
}
-
+
if(aspect > 1.0f)
{
// media is wider than it is high -- adjust the top and bottom in
for( int corner = 0; corner < 4; ++corner )
{
float temp = base_vertex_pos[corner * 2 + 1];
-
+
if(temp < 0.5f)
temp += 0.5 - (0.5f / aspect);
else
temp -= 0.5 - (0.5f / aspect);
-
+
base_vertex_pos[corner * 2 + 1] = temp;
}
}
@@ -350,7 +385,7 @@ void LLMediaPluginTest::drawGeometry( int panel )
for( int corner = 0; corner < 4; ++corner )
{
float temp = base_vertex_pos[corner * 2];
-
+
if(temp < 0.5f)
temp += 0.5f - (0.5f * aspect);
else
@@ -371,6 +406,15 @@ void LLMediaPluginTest::drawGeometry( int panel )
glVertex3f( x, y, 0.0f );
};
glEnd();
+
+ // calculate distance to this panel if it's selected
+ if ( selected )
+ {
+ GLfloat point_x = base_vertex_pos[ 0 ] + panel_x * ( 1.0 + spacing ) - offset_x + spacing / 2.0f;
+ GLfloat point_y = base_vertex_pos[ 0 + 1 ] + panel_y * ( 1.0 + spacing ) - offset_y + spacing / 2.0f;
+ GLfloat point_z = 0.0f;
+ mDistanceCameraToSelectedGeometry = distanceToCamera( point_x, point_y, point_z );
+ };
}
//////////////////////////////////////////////////////////////////////////////
@@ -403,7 +447,7 @@ void LLMediaPluginTest::draw( int draw_type )
if ( draw_type == DrawTypePickTexture )
{
// only bother with pick if we have something to render
- // Actually, we need to pick even if we're not ready to render.
+ // Actually, we need to pick even if we're not ready to render.
// Otherwise you can't select and remove a panel which has gone bad.
//if ( mMediaPanels[ panel ]->mReadyToRender )
{
@@ -420,7 +464,7 @@ void LLMediaPluginTest::draw( int draw_type )
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
// draw geometry using pick texture
- drawGeometry( panel );
+ drawGeometry( panel, false );
glMatrixMode( GL_TEXTURE );
glPopMatrix();
@@ -431,13 +475,13 @@ void LLMediaPluginTest::draw( int draw_type )
{
bool texture_valid = false;
bool plugin_exited = false;
-
+
if(mMediaPanels[ panel ]->mMediaSource)
{
texture_valid = mMediaPanels[ panel ]->mMediaSource->textureValid();
plugin_exited = mMediaPanels[ panel ]->mMediaSource->isPluginExited();
}
-
+
// save texture matrix (changes for each panel)
glMatrixMode( GL_TEXTURE );
glPushMatrix();
@@ -465,14 +509,14 @@ void LLMediaPluginTest::draw( int draw_type )
mMediaPanels[ panel ]->mTextureScaleY,
1.0f );
};
-
+
float intensity = plugin_exited?0.25f:1.0f;
-
+
// highlight the selected panel
if ( mSelectedPanel && ( mMediaPanels[ panel ]->mId == mSelectedPanel->mId ) )
{
startPanelHighlight( intensity, intensity, 0.0f, 5.0f );
- drawGeometry( panel );
+ drawGeometry( panel, true );
endPanelHighlight();
}
else
@@ -481,21 +525,21 @@ void LLMediaPluginTest::draw( int draw_type )
if ( !mMediaPanels[ panel ]->mReadyToRender )
{
startPanelHighlight( intensity, 0.0f, 0.0f, 2.0f );
- drawGeometry( panel );
+ drawGeometry( panel, false );
endPanelHighlight();
}
else
- // just display a border around the media
+ // just display a border around the media
{
startPanelHighlight( 0.0f, intensity, 0.0f, 2.0f );
- drawGeometry( panel );
+ drawGeometry( panel, false );
endPanelHighlight();
};
-
+
if ( mMediaPanels[ panel ]->mReadyToRender && texture_valid )
{
// draw visual geometry
- drawGeometry( panel );
+ drawGeometry( panel, false );
}
// restore texture matrix (changes for each panel)
@@ -551,7 +595,7 @@ void LLMediaPluginTest::idle()
// GLUI requires this
if ( glutGetWindow() != mAppWindow )
glutSetWindow( mAppWindow );
-
+
// random creation/destruction of panels enabled?
const time_t panel_timeout_time = 5;
if ( mRandomPanelCount )
@@ -704,7 +748,7 @@ void LLMediaPluginTest::idle()
for( int panel_index = 0; panel_index < (int)mMediaPanels.size(); ++panel_index )
{
mediaPanel *panel = mMediaPanels[ panel_index ];
-
+
// call plugins idle function so it can potentially update itself
panel->mMediaSource->idle();
@@ -717,7 +761,7 @@ void LLMediaPluginTest::idle()
//std::cout << "texture invalid, skipping update..." << std::endl;
}
else
- if ( panel &&
+ if ( panel &&
( panel->mMediaWidth != panel->mMediaSource->getWidth() ||
panel->mMediaHeight != panel->mMediaSource->getHeight() ) )
{
@@ -733,7 +777,7 @@ void LLMediaPluginTest::idle()
int y_offset = dirty_rect.mBottom;
int width = dirty_rect.mRight - dirty_rect.mLeft;
int height = dirty_rect.mTop - dirty_rect.mBottom;
-
+
if((dirty_rect.mRight <= panel->mTextureWidth) && (dirty_rect.mTop <= panel->mTextureHeight))
{
// Offset the pixels pointer properly
@@ -752,23 +796,23 @@ void LLMediaPluginTest::idle()
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
};
-
+
checkGLError("glTexParameteri");
-
+
if(panel->mMediaSource->getTextureFormatSwapBytes())
{
glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);
checkGLError("glPixelStorei");
}
-
+
// draw portion that changes into texture
- glTexSubImage2D( GL_TEXTURE_2D, 0,
- x_offset,
+ glTexSubImage2D( GL_TEXTURE_2D, 0,
+ x_offset,
y_offset,
- width,
+ width,
height,
- panel->mMediaSource->getTextureFormatPrimary(),
- panel->mMediaSource->getTextureFormatType(),
+ panel->mMediaSource->getTextureFormatPrimary(),
+ panel->mMediaSource->getTextureFormatType(),
pixels );
if(checkGLError("glTexSubImage2D"))
@@ -788,9 +832,9 @@ void LLMediaPluginTest::idle()
glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);
checkGLError("glPixelStorei");
}
-
+
panel->mMediaSource->resetDirty();
-
+
panel->mReadyToRender = true;
}
else
@@ -811,8 +855,8 @@ void LLMediaPluginTest::idle()
////////////////////////////////////////////////////////////////////////////////
//
-void LLMediaPluginTest::windowPosToTexturePos( int window_x, int window_y,
- int& media_x, int& media_y,
+void LLMediaPluginTest::windowPosToTexturePos( int window_x, int window_y,
+ int& media_x, int& media_y,
int& id )
{
if ( ! mSelectedPanel )
@@ -828,7 +872,7 @@ void LLMediaPluginTest::windowPosToTexturePos( int window_x, int window_y,
// OpenGL app == coordinate system this way
// NOTE: unrelated to settings in plugin - this
// is just for this app
- mCurMouseY = mWindowHeight - window_y;
+ mCurMouseY = mWindowHeight - window_y;
// extract x (0..1023, y (0..1023) and id (0..15) from RGB components
unsigned long pixel_read_color_bits = ( mPixelReadColor[ 0 ] << 16 ) | ( mPixelReadColor[ 1 ] << 8 ) | mPixelReadColor[ 2 ];
@@ -880,14 +924,14 @@ void LLMediaPluginTest::selectPanel( mediaPanel* panel )
mSelectedPanel->mMediaSource->setVolume( 0.0f );
mSelectedPanel->mMediaSource->setPriority( LLPluginClassMedia::PRIORITY_LOW );
};
-
+
mSelectedPanel = panel;
if( mSelectedPanel && mSelectedPanel->mMediaSource )
{
mSelectedPanel->mMediaSource->setVolume( (float)mMediaTimeControlVolume / 100.0f );
mSelectedPanel->mMediaSource->setPriority( LLPluginClassMedia::PRIORITY_NORMAL );
-
+
if(!mSelectedPanel->mStartUrl.empty())
{
mUrlEdit->set_text(const_cast<char*>(mSelectedPanel->mStartUrl.c_str()) );
@@ -900,7 +944,7 @@ void LLMediaPluginTest::selectPanel( mediaPanel* panel )
mediaPanel* LLMediaPluginTest::findMediaPanel( LLPluginClassMedia* source )
{
mediaPanel *result = NULL;
-
+
for( int panel = 0; panel < (int)mMediaPanels.size(); ++panel )
{
if ( mMediaPanels[ panel ]->mMediaSource == source )
@@ -908,7 +952,7 @@ mediaPanel* LLMediaPluginTest::findMediaPanel( LLPluginClassMedia* source )
result = mMediaPanels[ panel ];
}
}
-
+
return result;
}
@@ -1066,7 +1110,7 @@ void LLMediaPluginTest::gluiCallback( int control_id )
{
if ( mSelectedPanel )
{
- // get value from spinner
+ // get value from spinner
float seconds_to_seek = mMediaTimeControlSeekSeconds;
mSelectedPanel->mMediaSource->seek( seconds_to_seek );
mSelectedPanel->mMediaSource->start();
@@ -1194,7 +1238,7 @@ void LLMediaPluginTest::mouseButton( int button, int state, int x, int y )
windowPosToTexturePos( x, y, media_x, media_y, id );
// only select a panel if we're on a panel
- // (HACK: strictly speaking this rules out clicking on
+ // (HACK: strictly speaking this rules out clicking on
// the origin of a panel but that's very unlikely)
if ( media_x > 0 && media_y > 0 )
{
@@ -1327,18 +1371,18 @@ void LLMediaPluginTest::makeChrome()
mGluiMediaTimeControlWindow->add_column( false );
mIdMediaTimeControlVolume = start_id++;
GLUI_Spinner* spinner = mGluiMediaTimeControlWindow->add_spinner( "Volume", 2, &mMediaTimeControlVolume, mIdMediaTimeControlVolume, gluiCallbackWrapper);
- spinner->set_float_limits( 0, 100 );
+ spinner->set_float_limits( 0, 100 );
mGluiMediaTimeControlWindow->add_column( true );
mIdMediaTimeControlSeekSeconds = start_id++;
spinner = mGluiMediaTimeControlWindow->add_spinner( "", 2, &mMediaTimeControlSeekSeconds, mIdMediaTimeControlSeekSeconds, gluiCallbackWrapper);
- spinner->set_float_limits( 0, 200 );
+ spinner->set_float_limits( 0, 200 );
spinner->set_w( 32 );
spinner->set_speed( 0.025f );
mGluiMediaTimeControlWindow->add_column( false );
mIdMediaTimeControlSeek = start_id++;
mGluiMediaTimeControlWindow->add_button( "SEEK", mIdMediaTimeControlSeek, gluiCallbackWrapper );
mGluiMediaTimeControlWindow->add_column( false );
-
+
// top window - media controls for "browser" media types (e.g. web browser)
mGluiMediaBrowserControlWindow = GLUI_Master.create_glui_subwindow( mAppWindow, GLUI_SUBWINDOW_TOP );
@@ -1385,6 +1429,13 @@ void LLMediaPluginTest::makeChrome()
mDisableTimeout = 0;
glui_window_misc_control->add_checkbox( "Disable plugin timeout", &mDisableTimeout, mIdDisableTimeout, gluiCallbackWrapper );
glui_window_misc_control->set_main_gfx_window( mAppWindow );
+ glui_window_misc_control->add_column( true );
+
+ mIdLargePanelSpacing = start_id++;
+ mLargePanelSpacing = 0;
+ glui_window_misc_control->add_checkbox( "Large Panel Spacing", &mLargePanelSpacing, mIdLargePanelSpacing, gluiCallbackWrapper );
+ glui_window_misc_control->set_main_gfx_window( mAppWindow );
+ glui_window_misc_control->add_column( true );
// bottom window - status
mBottomGLUIWindow = GLUI_Master.create_glui_subwindow( mAppWindow, GLUI_SUBWINDOW_BOTTOM );
@@ -1449,7 +1500,7 @@ void LLMediaPluginTest::makePickTexture( int id, GLuint* texture_handle, unsigne
//
std::string LLMediaPluginTest::mimeTypeFromUrl( std::string& url )
{
- // default to web
+ // default to web
std::string mime_type = "text/html";
// we may need a more advanced MIME type accessor later :-)
@@ -1479,7 +1530,7 @@ std::string LLMediaPluginTest::pluginNameFromMimeType( std::string& mime_type )
else
if ( mime_type == "text/html" )
plugin_name = "media_plugin_webkit.dylib";
-
+
#elif LL_WINDOWS
std::string plugin_name( "media_plugin_null.dll" );
@@ -1523,7 +1574,7 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
// tell the plugin what size we asked for
media_source->setSize( media_width, media_height );
- // Use the launcher start and initialize the plugin
+ // Use the launcher start and initialize the plugin
#if LL_DARWIN || LL_LINUX
std::string launcher_name( "SLPlugin" );
#elif LL_WINDOWS
@@ -1542,8 +1593,8 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
}
std::string user_data_path = std::string( cwd ) + "/";
#endif
-
- media_source->init( launcher_name, plugin_name, false, user_data_path );
+ media_source->setUserDataPath(user_data_path);
+ media_source->init( launcher_name, plugin_name, false );
media_source->setDisableTimeout(mDisableTimeout);
// make a new panel and save parameters
@@ -1580,7 +1631,7 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
// id wasn't found so we can use it
if ( ! id_exists )
{
- panel->mId = nid;
+ panel->mId = nid;
break;
};
};
@@ -1592,7 +1643,7 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
}
else
{
- // now we have the ID we can use it to make the
+ // now we have the ID we can use it to make the
// pick texture (id is baked into texture pixels)
makePickTexture( panel->mId, &panel->mPickTextureHandle, &panel->mPickTexturePixels );
@@ -1615,17 +1666,17 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
{
// checkGLError("LLMediaPluginTest::updateMediaPanel");
-
- if ( ! panel )
+
+ if ( ! panel )
return;
-
+
if(!panel->mMediaSource || !panel->mMediaSource->textureValid())
{
panel->mReadyToRender = false;
return;
}
-
- // take a reference copy of the plugin values since they
+
+ // take a reference copy of the plugin values since they
// might change during this lifetime of this function
int plugin_media_width = panel->mMediaSource->getWidth();
int plugin_media_height = panel->mMediaSource->getHeight();
@@ -1633,18 +1684,18 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
int plugin_texture_height = panel->mMediaSource->getBitsHeight();
// If the texture isn't created or the media or texture dimensions changed AND
- // the sizes are valid then we need to delete the old media texture (if necessary)
+ // the sizes are valid then we need to delete the old media texture (if necessary)
// then make a new one.
if ((panel->mMediaTextureHandle == 0 ||
panel->mMediaWidth != plugin_media_width ||
- panel->mMediaHeight != plugin_media_height ||
+ panel->mMediaHeight != plugin_media_height ||
panel->mTextureWidth != plugin_texture_width ||
panel->mTextureHeight != plugin_texture_height) &&
- ( plugin_media_width > 0 && plugin_media_height > 0 &&
+ ( plugin_media_width > 0 && plugin_media_height > 0 &&
plugin_texture_width > 0 && plugin_texture_height > 0 ) )
{
- std::cout << "Valid media size (" << plugin_media_width << " x " << plugin_media_height
- << ") and texture size (" << plugin_texture_width << " x " << plugin_texture_height
+ std::cout << "Valid media size (" << plugin_media_width << " x " << plugin_media_height
+ << ") and texture size (" << plugin_texture_width << " x " << plugin_texture_height
<< ") for panel with ID=" << panel->mId << " - making texture" << std::endl;
// delete old GL texture
@@ -1654,13 +1705,13 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
glDeleteTextures( 1, &panel->mMediaTextureHandle );
panel->mMediaTextureHandle = 0;
}
-
+
std::cerr << "before: pick texture is " << panel->mPickTextureHandle << ", media texture is " << panel->mMediaTextureHandle << std::endl;
-
+
// make a GL texture based on the dimensions the plugin told us
GLuint new_texture = 0;
glGenTextures( 1, &new_texture );
-
+
checkGLError("glGenTextures");
std::cout << "glGenTextures returned " << new_texture << std::endl;
@@ -1679,7 +1730,7 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
std::cerr << "after: pick texture is " << panel->mPickTextureHandle << ", media texture is " << panel->mMediaTextureHandle << std::endl;
};
-
+
// update our record of the media and texture dimensions
// NOTE: do this after we we check for sizes changes
panel->mMediaWidth = plugin_media_width;
@@ -1699,7 +1750,7 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
panel->mAppTextureCoordsOpenGL = panel->mMediaSource->getTextureCoordsOpenGL();
// Check to see if we have enough to render this panel.
- // If we do, set a flag that the display functions use so
+ // If we do, set a flag that the display functions use so
// they only render a panel with media if it's ready.
if ( panel->mMediaWidth < 0 ||
panel->mMediaHeight < 0 ||
@@ -1716,26 +1767,26 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
{
// no media panels so we can't change anything - have to add
- if ( mMediaPanels.size() == 0 )
+ if ( mMediaPanels.size() == 0 )
return;
// sanity check
- if ( ! panel )
+ if ( ! panel )
return;
-
+
int index;
for(index = 0; index < (int)mMediaPanels.size(); index++)
{
if(mMediaPanels[index] == panel)
break;
}
-
+
if(index >= (int)mMediaPanels.size())
{
// panel isn't in mMediaPanels
return;
}
-
+
std::cout << "Replacing media panel with index " << panel->mId << std::endl;
int panel_id = panel->mId;
@@ -1760,7 +1811,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
// tell the plugin what size we asked for
media_source->setSize( media_width, media_height );
- // Use the launcher start and initialize the plugin
+ // Use the launcher start and initialize the plugin
#if LL_DARWIN || LL_LINUX
std::string launcher_name( "SLPlugin" );
#elif LL_WINDOWS
@@ -1780,7 +1831,8 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
std::string user_data_path = std::string( cwd ) + "/";
#endif
- media_source->init( launcher_name, plugin_name, false, user_data_path );
+ media_source->setUserDataPath(user_data_path);
+ media_source->init( launcher_name, plugin_name, false );
media_source->setDisableTimeout(mDisableTimeout);
// make a new panel and save parameters
@@ -1799,12 +1851,12 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
panel->mAppTextureCoordsOpenGL = false; // really need an 'undefined' state here too
panel->mReadyToRender = false;
- panel->mId = panel_id;
-
+ panel->mId = panel_id;
+
// Replace the entry in the panels array
mMediaPanels[index] = panel;
- // now we have the ID we can use it to make the
+ // now we have the ID we can use it to make the
// pick texture (id is baked into texture pixels)
makePickTexture( panel->mId, &panel->mPickTextureHandle, &panel->mPickTexturePixels );
@@ -1820,7 +1872,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
//
void LLMediaPluginTest::getRandomMediaSize( int& width, int& height, std::string mime_type )
{
- // Make a new media source with a random size which we'll either
+ // Make a new media source with a random size which we'll either
// directly or the media plugin will tell us what it wants later.
// Use a random size so we can test support for weird media sizes.
// (Almost everything else will get filled in later once the
@@ -1829,8 +1881,8 @@ void LLMediaPluginTest::getRandomMediaSize( int& width, int& height, std::string
width = ( ( rand() % 170 ) + 30 ) * 4;
height = ( ( rand() % 170 ) + 30 ) * 4;
- // adjust this random size if it's a browser so we get
- // a more useful size for testing..
+ // adjust this random size if it's a browser so we get
+ // a more useful size for testing..
if ( mime_type == "text/html" || mime_type == "example/example" )
{
width = ( ( rand() % 100 ) + 100 ) * 4;
@@ -1843,11 +1895,11 @@ void LLMediaPluginTest::getRandomMediaSize( int& width, int& height, std::string
void LLMediaPluginTest::remMediaPanel( mediaPanel* panel )
{
// always leave one panel
- if ( mMediaPanels.size() == 1 )
+ if ( mMediaPanels.size() == 1 )
return;
// sanity check - don't think this can happen but see above for a case where it might...
- if ( ! panel )
+ if ( ! panel )
return;
std::cout << "Removing media panel with index " << panel->mId << " - total panels = " << mMediaPanels.size() - 1 << std::endl;
@@ -1855,7 +1907,7 @@ void LLMediaPluginTest::remMediaPanel( mediaPanel* panel )
if(mSelectedPanel == panel)
mSelectedPanel = NULL;
- delete panel;
+ delete panel;
// remove from storage list
for( int i = 0; i < (int)mMediaPanels.size(); ++i )
@@ -1867,7 +1919,7 @@ void LLMediaPluginTest::remMediaPanel( mediaPanel* panel )
};
};
- // select the first panel
+ // select the first panel
selectPanel( mMediaPanels[ 0 ] );
}
@@ -1887,26 +1939,28 @@ void LLMediaPluginTest::updateStatusBar()
static bool cached_supports_browser_media = true;
static bool cached_supports_time_media = false;
static int cached_movie_time = -1;
+ static GLfloat cached_distance = -1.0f;
static std::string cached_plugin_version = "";
- if (
+ if (
cached_id == mSelectedPanel->mId &&
cached_media_width == mSelectedPanel->mMediaWidth &&
cached_media_height == mSelectedPanel->mMediaHeight &&
cached_texture_width == mSelectedPanel->mTextureWidth &&
cached_texture_height == mSelectedPanel->mTextureHeight &&
- cached_supports_browser_media == mSelectedPanel->mMediaSource->pluginSupportsMediaBrowser() &&
+ cached_supports_browser_media == mSelectedPanel->mMediaSource->pluginSupportsMediaBrowser() &&
cached_supports_time_media == mSelectedPanel->mMediaSource->pluginSupportsMediaTime() &&
cached_plugin_version == mSelectedPanel->mMediaSource->getPluginVersion() &&
- cached_movie_time == (int)mSelectedPanel->mMediaSource->getCurrentTime()
+ cached_movie_time == (int)mSelectedPanel->mMediaSource->getCurrentTime() &&
+ cached_distance == mDistanceCameraToSelectedGeometry
)
{
- // nothing changed so don't spend time in this shitty function
+ // nothing changed so don't spend time here
return;
};
std::ostringstream stream( "" );
-
+
stream.str( "" );
stream.clear();
@@ -1927,7 +1981,15 @@ void LLMediaPluginTest::updateStatusBar()
stream << " x ";
stream << std::setw( 4 ) << std::setfill( '0' );
stream << mSelectedPanel->mTextureHeight;
+
+ stream << " | ";
+ stream << "Distance: ";
+ stream << std::setw( 6 );
+ stream << std::setprecision( 3 );
+ stream << std::setprecision( 3 );
+ stream << mDistanceCameraToSelectedGeometry;
stream << " | ";
+
if ( mSelectedPanel->mMediaSource->pluginSupportsMediaBrowser() )
stream << "BROWSER";
else
@@ -2005,7 +2067,7 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
{
// Uncomment this to make things much, much quieter.
// return;
-
+
switch(event)
{
case MEDIA_EVENT_CONTENT_UPDATED:
@@ -2065,11 +2127,11 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
case MEDIA_EVENT_CLICK_LINK_HREF:
std::cerr << "Media event: MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << std::endl;
break;
-
+
case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
std::cerr << "Media event: MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is " << self->getClickURL() << std::endl;
break;
-
+
case MEDIA_EVENT_PLUGIN_FAILED:
std::cerr << "Media event: MEDIA_EVENT_PLUGIN_FAILED" << std::endl;
break;
@@ -2195,13 +2257,13 @@ int main( int argc, char* argv[] )
glutSetWindow( app_window_handle );
gApplication = new LLMediaPluginTest( app_window_handle, app_window_width, app_window_height );
-
+
// update at approximately 60hz
int update_ms = 1000 / 60;
-
+
GLUI_Master.set_glutTimerFunc( update_ms, glutIdle, update_ms);
glutMainLoop();
-
+
delete gApplication;
}
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.h b/indra/test_apps/llplugintest/llmediaplugintest.h
index c2b2baba95..e7c7699343 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.h
+++ b/indra/test_apps/llplugintest/llmediaplugintest.h
@@ -89,7 +89,7 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner
void bindTexture(GLuint texture, GLint row_length = 0, GLint alignment = 1);
bool checkGLError(const char *name = "OpenGL");
- void drawGeometry( int panel );
+ void drawGeometry( int panel, bool selected );
void startPanelHighlight( float red, float green, float blue, float line_width );
void endPanelHighlight();
enum { DrawTypePickTexture, DrawTypeMediaTexture };
@@ -113,6 +113,9 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner
void dumpPanelInfo();
void updateStatusBar();
+ GLfloat distanceToCamera( GLfloat point_x, GLfloat point_y, GLfloat point_z );
+
+
// Inherited from LLPluginClassMediaOwner
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, LLPluginClassMediaOwner::EMediaEvent);
@@ -142,6 +145,8 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner
float mViewPos[ 3 ];
float mViewRotation[ 16 ];
+ float mDistanceCameraToSelectedGeometry;
+
int mIdControlAddPanel;
int mIdControlRemPanel;
@@ -159,6 +164,8 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner
int mRandomBookmarks;
int mIdDisableTimeout;
int mDisableTimeout;
+ int mIdLargePanelSpacing;
+ int mLargePanelSpacing;
int mIdControlCrashPlugin;
int mIdControlHangPlugin;
int mIdControlExitApp;
diff --git a/install.xml b/install.xml
index 4c377a9f3e..899bd0a6cc 100644
--- a/install.xml
+++ b/install.xml
@@ -193,16 +193,16 @@
<key>darwin</key>
<map>
<key>md5sum</key>
- <string>5ff1e212bb9bcde21cb174228e2437f6</string>
+ <string>71defd179827bf172b76d6020023e0e8</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-darwin-20100219.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-darwin-20100222a.tar.bz2</uri>
</map>
<key>linux</key>
<map>
<key>md5sum</key>
- <string>9d4cbaac12d0068b3bb8ee73fcfbe9d7</string>
+ <string>d58ac1a8396ac983b67cc3e3541457e3</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100219.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100222a.tar.bz2</uri>
</map>
<key>linux64</key>
<map>
@@ -948,23 +948,23 @@ anguage Infrstructure (CLI) international standard</string>
<key>darwin</key>
<map>
<key>md5sum</key>
- <string>95f44f0023dddc80be4398fc4f213861</string>
+ <string>7d75751cbd8786ea4d710b50b5931b9b</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100208.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100402.tar.bz2</uri>
</map>
<key>linux</key>
<map>
<key>md5sum</key>
- <string>4c75b2f1e8524c7844ee3ea1cd59a3db</string>
+ <string>455d9ce60837366a7e744751bdc8b6c3</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100209b.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100329.tar.bz2</uri>
</map>
<key>windows</key>
<map>
<key>md5sum</key>
- <string>1e9798dc424a6f6c2bea50649bbcc7ae</string>
+ <string>b873755dff5f4221b5a3ba63129435a7</string>
<key>url</key>
- <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100210.tar.bz2</uri>
+ <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-cookies-20100402.tar.bz2</uri>
</map>
</map>
</map>
@@ -1266,6 +1266,25 @@ anguage Infrstructure (CLI) international standard</string>
</map>
</map>
</map>
+ <key>pulseaudio</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright 2004-2006 Lennart Poettering, Copyright 2006 Pierre Ossman (ossman@cendio.se) for Cendio AB</string>
+ <key>description</key>
+ <string>pulseaudio: headers only</string>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>30cb00069fe2a545fbf7be1070386236</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/linux-pulse-headers-0.9.14.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
<key>quicktime</key>
<map>
<key>copyright</key>
@@ -1367,23 +1386,23 @@ anguage Infrstructure (CLI) international standard</string>
<key>darwin</key>
<map>
<key>md5sum</key>
- <string>316f86790b7afb5c9bd4f95bc193b80f</string>
+ <string>38d836fa53d073b9f197eecd0f5615f0</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.7930-darwin-20100205.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8181-darwin-20100319.tar.bz2</uri>
</map>
<key>linux</key>
<map>
<key>md5sum</key>
- <string>13f6886fa3e6675838e47adcabb0f0ac</string>
+ <string>dd8dd1c223ecb8b232bf626cca6c63ac</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.7930-linux-20100205.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8181-linux-20100319.tar.bz2</uri>
</map>
<key>windows</key>
<map>
<key>md5sum</key>
- <string>2a81e3c42799c33742746925f16b54ca</string>
+ <string>8b4ce60f25823cd38896cb3b7eb0dd43</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.7930-windows-20100205.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8181-windows-20100319.tar.bz2</uri>
</map>
</map>
</map>